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.
| Aspect | hand-written tokens | Windcraft |
|---|---|---|
| Maintenance | You edit each output file by hand | One source regenerates Tailwind, CSS vars, and RN theme |
| Cross-platform | Web and mobile token files drift apart | Web and React Native generated from the same tokens |
| Enforcement | Nothing stops a hard-coded #2563EB | Static analyzer flags off-token values before commit |
| AI awareness | The model never sees your token file | Tokens 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.