Registry
Use only what you need.
Pick the pieces you want. Axiom resolves their dependencies and copies exactly what they need, in your styling, nothing more.
The CLI resolves dependencies and copies only the selected source.
React Native · Expo
Axiom gives you a theme, components, hooks, gestures, patterns and ready-made screens for React Native and Expo. The CLI copies the source into your project, styled with the tool you already use, so you own it and edit it like the rest of your code.
05 / Workflow
Choose the source you need, put it in your project and keep working with your stack.
Registry
Pick the pieces you want. Axiom resolves their dependencies and copies exactly what they need, in your styling, nothing more.
The CLI resolves dependencies and copies only the selected source.
import { StyleSheet } from 'react-native';import { Text } from 'react-native';import { Tappable } from '@/components/core/tappable';import { useTheme } from '@/theme'; export function Button({ label, variant = 'solid', ...props }: ButtonProps) { const { components } = useTheme(); return ( <Tappable style={[styles.base, components.button[variant].container]} {...props}> <Text style={[styles.label, components.button[variant].label]}>{label}</Text> </Tappable> );} const styles = StyleSheet.create({ base: { minHeight: 44, paddingHorizontal: 16, borderRadius: 12 }, label: { fontSize: 16, fontWeight: '600' },});No dependency. Theme through useTheme().
import { StyleSheet } from 'react-native-unistyles';import { Text } from 'react-native';import { Tappable } from '@/components/core/tappable'; export function Button({ label, variant = 'solid', ...props }: ButtonProps) { styles.useVariants({ variant }); return ( <Tappable style={styles.base} {...props}> <Text style={styles.label}>{label}</Text> </Tappable> );} const styles = StyleSheet.create((theme) => ({ base: { minHeight: 44, paddingHorizontal: theme.space[4], borderRadius: theme.radius.md, variants: { variant: theme.components.button.container }, }, label: { ...theme.type.label, variants: { variant: theme.components.button.label } },}));Adaptive themes and native variants.
import { tv } from 'tailwind-variants';import { Text } from 'react-native';import { Tappable } from '@/components/core/tappable'; const button = tv({ slots: { base: 'min-h-11 rounded-xl px-4', label: 'text-base font-semibold' }, variants: { variant: { solid: { base: 'bg-primary', label: 'text-on-primary' } } },}); export function Button({ label, variant = 'solid', ...props }: ButtonProps) { const styles = button({ variant }); return ( <Tappable className={styles.base()} {...props}> <Text className={styles.label()}>{label}</Text> </Tappable> );}Tokens exposed to your Tailwind config.
import { tv } from 'tailwind-variants';import { Text } from 'react-native';import { Tappable } from '@/components/core/tappable'; const button = tv({ slots: { base: 'min-h-11 rounded-xl px-4', label: 'text-base font-semibold' }, variants: { variant: { solid: { base: 'bg-primary', label: 'text-on-primary' } } },}); export function Button({ label, variant = 'solid', ...props }: ButtonProps) { const styles = button({ variant }); return ( <Tappable className={styles.base()} {...props}> <Text className={styles.label()}>{label}</Text> </Tappable> );}The same classes with a different setup.
Ownership
Axiom copies each component into your app. The source and styling stay yours.
npx axiom init
Styling
Agents
Describe the screen. Your agent finds the right Axiom pieces, adds them in your styling and checks the flow on a phone.
03 / Experience
Sent to +33 6 •• •• 42 18
Resend code in 0:24
VerifyLens / Components
AppBar, SearchBar, Chip, Item, Badge and BottomTabBar, composed into one inbox.
Principle / 004
A component solves a local problem. A system composes components, behavior and patterns into complete mobile experiences.
02 / Platform
Styling
09 / Mobile
Scale 0.97 · haptic · 44pt target
Feedback that lands under the thumb, not after it.
Rue de Rivoli, 75001
Sheets and handles that follow the finger 1:1.
Velocity-based · threshold · undo
Rows, cards and pages with real velocity.
Is the input still hidden by the keyboard?
Not anymore. It follows it frame by frame.
Inputs that stay visible, always.
Pinch · pan · long-press menu
Pinch, long-press and composed gestures.
10 / Open source
Every component, behavior and block lives on GitHub. Read it, fork it, send a pull request.
Star on GitHub