Manual Theming Setup in shadcncraft
How variables are organized changed in v3 of the kit. Not sure which version you have? See how to tell which version you're using.
Regular theming means editing the Figma variables by hand, the manual counterpart to instant theming with the plugin. In v3 you do this in the Style collection, which holds the source-of-truth values for every style. Each style is one mode in that collection. For how this connects with code, see the shadcn/ui theming overview.
Make sure you have the main shadcncraft library file open. This is the file where all components live and variables are managed.
Three collections are in play. It's worth knowing which to touch:
- Style: the source of truth. Colors, radii, typography, spacing and component tokens all live here, one mode per style. This is the collection you edit.
- Mode: a Light/Dark alias layer that components bind to. It references the Style collection. Don't edit Mode. Editing it bypasses the source of truth.
- Tailwind: raw scale primitives (spacing, radius, font size). Edit only when you need to change a primitive value.
See Variables for the full collection breakdown.
Editing variables
Select the style mode you want to change in the Style collection, then edit its values.
Change the primary color
To update your primary color (e.g. to a custom blue #297EFF):
- Open the Variables panel
- Switch to the Style collection and select the style mode you're editing
- Locate the
color/light/primaryvariable - Enter #297EFF directly in the value field
- Repeat the process for
color/dark/primary - Figma will apply the new color across all
primarycomponent references
Update neutral colors
The neutral grays behind background, border, input, and muted elements are edited the same way.
- In the Style collection, locate the matching
color/light/*andcolor/dark/*variables - Swap out the current values for your own
- Changes will cascade across any components that rely on these variables
Component-level tokens
Most colors and sizes are shared, but some components carry their own tokens in the Style collection's component/ group, so you can tweak one component without touching the rest. These tokens cover properties like padding, gap, background, corner radius, size, and hover states. For example:
component/card/radius: the Card's corner radiuscomponent/input/bg: the Input's backgroundcomponent/badge/px: the Badge's horizontal paddingcomponent/button/variant-ghost/bg-hover: the ghost Button's hover background
Edit a component/<name>/… token to restyle just that component. If a component has no token for the property you want to change, it's inheriting a shared value. Edit that instead.
Adjusting border radius
v3 has a semantic radius layer. The radius/sm … radius/4xl scale in the Style collection sits between the raw Tailwind radius primitives and your components. Components bind to the semantic scale, not to raw values.
That means you adjust radius once:
- Open the Variables panel
- Navigate to the Style collection
- Edit the semantic values:
radius/sm,radius/md,radius/lg, and so on
Every component using that step re-rounds automatically. There's no need to change a radius variable on each component. A few components also expose a component/<name>/radius token for when they need to differ from the scale.
Changing the font family
Typefaces live in the Style collection's font/family group:
- Open the Variables panel
- Go to the Style collection
- Edit
font/family/sans,font/family/heading,font/family/serif, orfont/family/mono
Make sure the font name matches exactly with your installed fonts or web font settings.
Using opacity variables
Tailwind lets you apply opacity to colors using syntax like bg-blue-600/90. You can replicate this in Figma using alpha variables.
To apply 90% opacity to a color:
- Add your color as a Fill in Figma
- Add a second Fill layer above it
- In the color picker, switch to Library
- Search for and apply the
alpha/90variable
For hover states specifically, check the component/ group first. Many components ship a dedicated bg-hover or text-hover token (for example component/toggle/bg-hover or component/select/item/bg-hover). Editing the component's hover token is cleaner than stacking an opacity layer by hand.
Working with text styles
The kit ships Figma text styles aligned with shadcn's type scale (text-xs through text-9xl). Each one is powered by Style-collection variables:
font/family/*: the typefacetext/<size>/sizeandtext/<size>/lh: the per-style font size and line height
Edit those variables and every text style that uses them updates. The raw size and weight primitives live in the Tailwind collection as font/size/text-* and font/weight/font-*.
This keeps visual language consistent from design to dev. The text styles map directly onto Tailwind's typography classes.
Creating new styles and variables
Duplicate a style
The fastest manual way to make a new style is to copy an existing one:
- Open the Variables panel and select the Style collection
- Right-click the mode of the style closest to what you want
- Duplicate it and rename the new mode (e.g.
Brand A) - Edit the new mode's variable values
The file ships with all eight styles, so you always have a solid base to duplicate from.
To use multiple modes, your file must be part of a Figma Professional or Enterprise team or org.
Create a new variable
Custom variables are supported. Just be sure they're needed. The existing shadcncraft variable sets cover most use cases, and unnecessary additions can bloat your system.
To create a new color variable that follows the established structure:
- In the Style collection, add:
color/light/<name>(e.g.color/light/warning)color/dark/<name>(e.g.color/dark/warning)- Edit the variables to hide them from publishing if they're internal
- In the Mode collection, add:
- A
<name>alias referencing the light/dark versions - Adjust the scope to control where the variable applies
- A
- Use your new variable in components as needed
Example: Warning color
color/light/warning:#F59E0Bcolor/dark/warning:#F59E0Bcolor/light/warning-foreground:#451A03color/dark/warning-foreground:#451A03- Add
warningandwarning-foregroundaliases to the Mode collection - Apply to UI components where caution or warning states are needed
- Use the Figma to shadcn/ui plugin to add matching variables to your codebase
Dark mode
Light and dark are handled by the Mode collection, which has exactly two modes: Light and Dark. Every style resolves through it, so switching modes re-themes your file instantly, with no need to duplicate layouts or rebuild anything.
How to switch modes:
- Select a page or frame
- In the Layer panel, look for the "Apply variable mode" icon
- Click to open the dropdown menu
- Select either
Mode → LightorMode → Dark
To apply a different style (rather than light/dark), use the same "Apply variable mode" control and pick your style from the Style collection.
