Windcraft vs hand-written tokens

Writing your own tokens is the right instinct — values beat magic numbers. The gap is everything after: keeping the Tailwind config, the CSS variables, and the mobile theme in sync, and making sure code does not quietly bypass them.

A hand-written token file defines your values once. Windcraft generates those values into every platform output from one source, regenerates them all on a single change, and ships a static analyzer that catches the off-token hex and ad-hoc px your token file can only hope nobody types.

Aspecthand-written tokensWindcraft
MaintenanceYou edit each output file by handOne source regenerates Tailwind, CSS vars, and RN theme
Cross-platformWeb and mobile token files drift apartWeb and React Native generated from the same tokens
EnforcementNothing stops a hard-coded #2563EBStatic analyzer flags off-token values before commit
AI awarenessThe model never sees your token fileTokens served to AI tools over MCP as it writes

When hand-written tokens is the right call

For a small, single-platform project with one maintainer, a hand-written token file is simpler and entirely sufficient — there is no sync burden and you can hold consistency in your head. Windcraft earns its keep once you have more than one platform, more than one contributor, or AI generating code that must read those tokens.

FAQ

Do I lose my existing tokens?
No. Windcraft adopts your values as its source of truth and generates the outputs from them. You keep ownership; you just stop hand-editing three files to change one color.
Are the outputs portable if I leave?
Yes. The generated tailwind.config.ts, CSS variables, and theme.ts are standard files that live in your repo and work without Windcraft. You can also export tokens as W3C-format JSON at any time.
Is the analyzer the real difference?
It is half of it. A token file is passive — code can ignore it. Windcraft makes the values active: served to AI as it generates, and checked by the analyzer so drift is caught instead of merged.

Give the AI values to read, not adjectives.