Coming from shadcn/ui or React Native Reusables

Same copy-the-source idea, without the Tailwind setup — and every component moves.

If you know shadcn/ui, ExpoKit will feel familiar: a CLI copies each component's source into your app, and you own and edit it. Three things work differently.

What changes

  • No Tailwind, Nativewind or Uniwind. Components use StyleSheet and React Native's own Animated. There is no babel, metro or tailwind config to add, and everything runs in Expo Go.
  • Props instead of compound parts. Most components take their content as props (title, items, options) rather than Trigger / Content children, and text children don't need a wrapping <Text>.
  • Theme through one provider. Colours, radius and light / dark come from useKit(). Wrap the app in <KitProvider accent="#6366f1" radius={14}> instead of editing CSS variables.

The same button, both ways

React Native Reusables
import { Button } from '@/components/ui/button';import { Text } from '@/components/ui/text'; <Button variant="outline" onPress={save}>  <Text>Save changes</Text></Button>
ExpoKit
import { Button } from '@/components/ui/button'; <Button variant="outline" onPress={save}>  Save changes</Button>

Component by component

Every shadcn / React Native Reusables component and where to find it in ExpoKit.

shadcn / RNRExpoKitNotes
AccordionAccordionSprings to its measured height; one prop list instead of Trigger/Content parts.
AlertAlertVariants with an icon that draws itself; dismissible, with an optional timer.
Alert DialogDialogvariant="destructive" with confirmLabel / cancelLabel.
Aspect RatioNot yetUse React Native's aspectRatio style.
AvatarAvatarPhoto or initials, presence dots, badges and AvatarGroup.
BadgeBadgeSolid, soft, outline and dot, plus a notification counter.
ButtonButtonStateful ButtonChildren can be plain text — no separate <Text> needed.
CardCardComposable like shadcn (Card.Header, Card.Title, Card.Content…), with a spring press.
CheckboxCheckboxThe tick draws itself.
CollapsibleAccordionA single AccordionItem works as a collapsible.
Context MenuAction SheetUse an ActionSheet from onLongPress for now; a dedicated context menu is planned.
DialogDialogBottom SheetOn phones a bottom sheet is often the better fit.
Dropdown MenuSelectAction SheetSelect for choosing a value; ActionSheet for a list of actions.
Hover CardNot yetHover doesn't exist on touch screens — use a Popover-style sheet or a list item.
InputFloating InputPassword InputSearch BarFloating label, focus halo, error shake.
LabelFloating InputLabels are built into every input.
MenubarNot yetA desktop pattern; on phones use tabs or a bottom nav.
PopoverNot yetNot yet as its own component.
ProgressProgressProgress StepsBars, rings and segments; ProgressSteps for multi-step flows.
Radio GroupRadio GroupThe dot glides to the chosen option.
SelectSelectDropdown or bottom sheet, search, and multiple selection with chips.
SeparatorNot yetA View with StyleSheet.hairlineWidth and colors.border from useKit().
SkeletonSkeletonShimmer placeholders.
SwitchSwitchiOS-feel thumb with haptics.
TabsTabsSegmented ControlUnderline tabs or a segmented control.
TextNot yetUse React Native's Text; colours come from useKit().
TextareaTextareaGrows line by line, with a character counter.
ToggleChip GroupA single-chip ChipGroup toggles on and off.
Toggle GroupSegmented ControlChip GroupSingle choice: SegmentedControl. Multiple: ChipGroup.
TooltipNot yetNot yet as its own component.

What you get on top

Inputs and pickers shadcn doesn't have (OTP input, calendar, date and time pickers), gesture components (swipe decks, slide-to-confirm, swipeable rows), Liquid Glass, charts and complete screens.

Start

In an existing Expo app, or a new one:

Both can live side by side and you can move over one component at a time: add stops before overwriting a file you already have unless you pass --force.

Did you like the content?