Skip to main content
Primer Checkout Android SDK is currently in beta (v3.0.0-beta). The API is subject to change before the stable release.
Two classes define all color tokens:
  • LightColorTokens — open class with 16 base tokens and 26 semantic tokens for light mode
  • DarkColorTokens — extends LightColorTokens, overrides 15 base tokens for dark mode. Semantic tokens resolve automatically through inheritance.

Base tokens (16)

Override these to change foundational colors. All semantic tokens resolve through these.
TokenLightDarkPurpose
primerColorBrand #2F98FF #2F98FFPrimary brand color
primerColorGray000 #FFFFFF #171619Lightest gray (background base)
primerColorGray100 #F5F5F5 #292929Very light gray
primerColorGray200 #EEEEEE #424242Light gray
primerColorGray300 #E0E0E0 #575757Medium-light gray
primerColorGray400 #BDBDBD #858585Medium gray
primerColorGray500 #9E9E9E #767577Gray
primerColorGray600 #757575 #C7C7C7Medium-dark gray
primerColorGray900 #212121 #EFEFEFDarkest gray (text base)
primerColorRed100 #FFECEC #321C20Error background
primerColorRed500 #FF7279 #E46D70Error accent
primerColorRed900 #B4324B #F6BFBFError text
primerColorGreen500 #3EB68F #27B17DSuccess accent
primerColorBlue500 #399DFF #3F93E4Info accent
primerColorBlue900 #2270F4 #4AAEFFLink color
primerColorBorderTransparentDefaulttransparenttransparentTransparent border base

Semantic tokens (26)

Resolve through base tokens. Override only when you need a specific mapping to change.

Text colors

TokenLightDarkResolves toPurpose
primerColorTextPrimaryprimerColorGray900Main text
primerColorTextSecondaryprimerColorGray600Labels, descriptions
primerColorTextPlaceholderprimerColorGray500Input placeholders
primerColorTextDisabledprimerColorGray400Disabled text
primerColorTextNegativeprimerColorRed900Error messages
primerColorTextLinkprimerColorBlue900Clickable links

Background

TokenLightDarkResolves toPurpose
primerColorBackgroundprimerColorGray000Primary background

Border colors (outlined)

TokenLightDarkResolves toPurpose
primerColorBorderOutlinedDefaultprimerColorGray300Default input border
primerColorBorderOutlinedHoverprimerColorGray400Hovered input border
primerColorBorderOutlinedActiveprimerColorGray500Active input border
primerColorBorderOutlinedFocusprimerColorFocusFocused input border
primerColorBorderOutlinedDisabledprimerColorGray200Disabled input border
primerColorBorderOutlinedErrorprimerColorRed500Error input border
primerColorBorderOutlinedLoadingprimerColorGray200Loading input border
primerColorBorderOutlinedSelectedprimerColorBrandSelected item border

Border colors (transparent)

TokenLightDarkResolves toPurpose
primerColorBorderTransparentHovertransparenttransparentprimerColorBorderTransparentDefaultHovered
primerColorBorderTransparentActivetransparenttransparentprimerColorBorderTransparentDefaultActive
primerColorBorderTransparentFocusprimerColorFocusFocused
primerColorBorderTransparentDisabledtransparenttransparentprimerColorBorderTransparentDefaultDisabled
primerColorBorderTransparentSelectedtransparenttransparentprimerColorBorderTransparentDefaultSelected

Icon colors

TokenLightDarkResolves toPurpose
primerColorIconPrimaryprimerColorGray900Default icon
primerColorIconDisabledprimerColorGray400Disabled icon
primerColorIconNegativeprimerColorRed500Error icon
primerColorIconPositiveprimerColorGreen500Success icon

Utility

TokenLightDarkResolves toPurpose
primerColorFocusprimerColorBrandFocus ring
primerColorLoaderprimerColorBrandLoading indicator

Customization

Override base tokens by extending LightColorTokens or DarkColorTokens:
val theme = PrimerTheme(
    lightColorTokens = object : LightColorTokens() {
        override val primerColorBrand: Color = Color(0xFF6C5CE7)
    },
    darkColorTokens = object : DarkColorTokens() {
        override val primerColorBrand: Color = Color(0xFFA29BFE)
    },
)
Changing a base token affects all semantic tokens that reference it.