React Native UI components with NativeWind and light/dark theming.
| Website | ghost-ui.kashif-dev.site |
| GitHub | github.com/codewithkashi/ghost-ui-native |
| npm | ghost-ui-native |
npm install ghost-ui-native
npx ghost-ui-native init --yesinit --yes installs ghost-ui-native plus NativeWind runtime deps, and writes Metro / Babel / nativewind-env.d.ts for NativeWind + @/ aliases. Without --yes, it prints the suggested install commands.
On Expo, prefer npx expo install for native modules (react-native-reanimated, react-native-safe-area-context, react-native-svg, react-native-worklets). The CLI detects Expo and writes Expo-compatible Babel/Metro configs.
After Metro or Babel changes:
npx react-native start --reset-cache
# or: npx expo start --clearImport ./global.css once at your app entry and wrap the root:
import './global.css';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { GhostUIProvider } from 'ghost-ui-native';
export default function App() {
return (
<SafeAreaProvider>
<GhostUIProvider defaultTheme="system">
<YourApp />
</GhostUIProvider>
</SafeAreaProvider>
);
}| Step | Action |
|---|---|
| 1 | Install NativeWind, Tailwind 3.4, and peers |
| 2 | global.css + tailwind.config.js (nativewind/preset) |
| 3 | Metro: withNativeWind(config, { input: './global.css' }) |
| 4 | Babel: nativewind/babel |
| 5 | import './global.css' in the app entry |
| 6 | nativewind-env.d.ts with declare module '*.css' {} (TS 6+) |
| 7 | tsconfig paths "@/*": ["./*"] (IDE only) |
| 8 | Babel module-resolver "@": "./" (Metro needs this) |
| 9 | Restart Metro with --reset-cache |
Full explanations: SETUP.md.
ghost-ui-native init writes a violet-forward theme into global.css — not the default shadcn zinc palette. Tokens include --primary: 262 83% 58%, tinted borders/accents, and --radius: 0.75rem. Components use rounder corners (rounded-xl / rounded-2xl), light shadows, and press feedback on primary actions.
To customize, edit CSS variables in global.css or replace the file after init. Re-run Metro with --reset-cache after token changes.
- TS: side-effect import of
./global.css— adddeclare module '*.css' {}innativewind-env.d.ts(notnativewind.d.ts) and include that file intsconfig. - Metro: unable to resolve
./global.css— wrap Metro withwithNativeWindand add thenativewind/babelpreset. - Metro: unable to resolve
@/lib/utils—tsconfigpaths are not enough; configurebabel-plugin-module-resolverwith"@": "./"and--reset-cache.
import {
Button,
Card,
CardHeader,
CardTitle,
Text,
useGhostTheme,
} from 'ghost-ui-native';
function Example() {
const { toggleTheme, resolvedTheme } = useGhostTheme();
return (
<Card className="m-4">
<CardHeader>
<CardTitle>Ghost UI</CardTitle>
</CardHeader>
<Text className="mb-3 text-muted-foreground">{resolvedTheme}</Text>
<Button onPress={toggleTheme}>Toggle theme</Button>
</Card>
);
}Use semantic classes: bg-background, text-foreground, bg-primary, text-primary-foreground, border-border.
Theme modes: system | light | dark.
npx ghost-ui-native add button card dialog
npx ghost-ui-native add --all --yes| Command | Description |
|---|---|
init |
Configure the project |
add |
Copy components into the project |
list |
List components |
search |
Search components |
view |
View component metadata |
diff |
Diff local files vs registry |
doctor |
Check project setup |
Flags: --yes --overwrite --dry-run --diff --all
Text Button Badge Separator Card Skeleton Avatar Progress AspectRatio Input Textarea Label Checkbox Switch RadioGroup Slider Toggle Accordion Collapsible Tabs Dialog AlertDialog Select Sheet Alert Toast Empty Breadcrumb Pagination Popover Tooltip DropdownMenu Drawer InputOTP Table Carousel Spinner Bubble Marker Message MessageScroller Calendar GhostUIProvider
- Documentation: https://ghost-ui.kashif-dev.site
- GitHub: https://github.com/codewithkashi/ghost-ui-native
- npm: https://www.npmjs.com/package/ghost-ui-native
MIT