babel-plugin-wombatail
v1.0.0
Published
Compile-time Tailwind-like className syntax for React Native, powered by react-native-unistyles v3
Maintainers
Readme
<View
className={cn(
'flex-row items-center gap-3 rounded-2xl bg-surface px-4 py-3',
selected && 'border border-primary',
disabled && 'opacity-50',
'md:px-6',
'ios:mt-4',
)}
>
<Text className="text-lg font-semibold text-foreground">Hello</Text>
</View>Install
npm install --save-dev babel-plugin-wombatail
npm install react-native-unistyles react-native-nitro-modules
npx wombatail initRequires React 19+, React Native 0.78+ (New Architecture), and Expo SDK 53+ if you're on Expo. Expo Go won't work — Unistyles needs native code.
Then wire up Babel:
// babel.config.js
const { createBabelPlugins } = require('babel-plugin-wombatail/babel-config')
module.exports = function (api) {
api.cache(true)
return {
presets: ['babel-preset-expo'],
// Breakpoints and theme color tokens come from wombatail.config.ts.
plugins: createBabelPlugins({ unistyles: { root: 'src' } }),
}
}Full walkthrough: Getting started.
Why
- Zero runtime. A Babel transform emits
StyleSheet.createcalls that Unistyles executes. Nothing parses classes on device. - One config file.
wombatail.config.tsfeeds themes and breakpoints to both the compiler and the Unistyles runtime, so the two can't drift. - Typos fail the build. Unsupported utilities and unknown theme tokens are compile
errors, not silent
undefinedstyles. - Honest scope. A deliberate React-Native-safe subset of Tailwind syntax — not a claim of full CSS parity.
Documentation
| | |
| --- | --- |
| Getting started | Install, config file, Babel setup |
| Syntax | Class expressions that compile |
| Theming | Semantic tokens → theme.colors.* |
| Switching themes | Adaptive themes, runtime toggle, persistence |
| Style precedence | How className composes with style |
| Limitations | What's rejected, and why |
| Plugin options | Every Babel option |
| Supported utilities | The full utility list |
| Production checklist | Before you ship |
Status
1.0.0 — stable for the documented compile-time utility subset. Tests, fuzzing,
package smoke tests and benchmarks are green; see
Validation for the
full validation scope.
Contributing
npm test # unit tests
npm run selftest # compiler self-test
npm run benchmark # perf benchmarks
# docs site (needs Node 22.12+; the library itself supports Node 18.18+)
cd website && npm install && npm run dev