Copy-paste React Native UI components. Own the code. Ship faster.
masicn is a shadcn/ui-style component system built for React Native. Instead of installing a black-box UI library, you copy the source directly into your project — full control, zero lock-in.
Built from scratch by Manish Kumar (@lordofthemind) · Developed at skipp.co.in
Pronunciation: muh-see · मसि (Sanskrit/Hindi) · also written मसी
Masi (मसि / मसी) means ink in Sanskrit and several Indian languages. Historically, Indian masi was prepared from charcoal, gum, and natural pigments — the medium through which ideas became permanent, words became records, and art became visible.
“Just as ink can write anything — a poem, a law, a blueprint — masicn lets you build anything in React Native.”
The connection is intentional. A design system is the ink of UI development: invisible on its own, but the substance behind everything you ship. You bring the idea; masicn gives you the medium.
The cn suffix is a nod to shadcn/ui — the project that inspired this copy-paste philosophy.
npx masicn@latest init ← sets up the design system in your project
npx masicn@latest add button ← copies Button.tsx into your project
That’s it. You now own the code. Read it, change it, delete it — no restrictions.
masicn is made up of several pieces that work together:
| Package | Repo | What it is |
|---|---|---|
masicn (CLI) |
masicn-ui/cli | The npx masicn command — init, add, update, remove |
@masicn/ui |
masicn-ui/masicn | Core design system: tokens, theme, primitives, hooks |
| Registry | masicn-ui/registry | All component source files and metadata |
| Playground | private | Where all components are authored and tested |
| Gallery | private | Showcase app (coming to App Store / Play Store) |
| Docs | private | Documentation site (coming soon) |
npx @react-native-community/cli@latest init MyApp
Expo is not supported yet. masicn patches native config files (
babel.config.js,react-native.config.js) in a way specific to bare React Native CLI projects. Expo support is planned.
npx masicn@latest init
The wizard will:
src/masicn/)babel.config.js and react-native.config.jsreact-native-reanimated, react-native-gesture-handler)pod install on iOSmasicn.json in your project rootnpx masicn@latest add button
npx masicn@latest add button card image # multiple at once
npx masicn@latest add # interactive picker
Components are copied as .tsx source files into your outputDir (default: src/shared/components). They import from your local design system copy — not from any npm package.
import { Button } from './shared/components/Button';
<Button variant="primary" onPress={handlePress}>
Get Started
</Button>
| Category | Components |
|---|---|
| Core | button card avatar avatar-group badge chip image link tag pin detail-row dot ticker status-dot read-more |
| Form | text-input password-input textarea secure-input checkbox checkbox-group radio radio-group select slider range-slider switch segment toggle-group |
| Feedback | alert bottom-sheet left-sheet right-sheet top-sheet modal spinner loader shimmer skeleton snackbar toast progress progress-ring loading-overlay |
| Interactive | animated-card animated-number rating swipe-button drawer expandable dock |
| Layout | masonry-grid refreshable-list refreshable-scroll-view screen-layout |
| Navigation | accordion collapsible fab list-item search-bar tabs |
| Overlay | context-menu menu popover tooltip |
Pre-composed screens and flows ready to drop in:
action-sheet breadcrumb carousel confirm-dialog date-input empty-state form multi-select number-input otp-input pagination phone-input split-sheet step-indicator swipeable tag-input timeline
Pick one during init. Switch anytime in masicn.json.
| Palette | Vibe |
|---|---|
masi |
Warm papaya + deep teal — the default |
ocean |
Deep blues + aqua |
sunset |
Warm oranges + purples |
forest |
Earthy greens + warm browns |
mono |
Monochrome slate |
rose |
Soft pinks + cranberry |
midnight |
Deep indigo + electric violet |
amber |
Golden honey + espresso |
nord |
Arctic blue-grays + frost |
coffee |
Espresso browns + caramel |
candy |
Hot pink + vivid sky blue — playful |
citrus |
Lime green + golden yellow — fresh |
grapeSoda |
Violet-purple + acid lime — loud |
jade |
Deep emerald + warm gold — premium |
neonTeal |
Electric teal + vivid violet — dark-native |
@masicn/ui)All components are built on a layered design system. When you run masicn init, a local copy of this is placed in your project so you can read and modify it.
src/masicn/
├── tokens/ ← spacing, radius, typography, motion, elevation, ...
├── theme/ ← 15 palettes, createTheme(), dark/light mode
├── primitives/ ← Box, Stack, Row, Text, Pressable, Surface, ...
├── hooks/ ← useTheme(), useTokens(), useReducedMotion(), ...
├── animation/ ← spring presets (gentle, snappy, bouncy, ...)
└── utils/ ← rgba(), clamp(), color helpers
const { theme } = useTheme();
const tokens = useTokens();
// Colors always from theme
<Box style= />
// Spacing always from tokens
<Stack style= />
import { Box, Stack, Row, Text, Pressable, Surface } from '../masicn';
The theme provides both light and dark variants. MasicnProvider handles switching.
const { colorMode } = useTheme(); // 'light' | 'dark'
The trade-off: you’re responsible for applying updates when you want them. masicn@latest update and masicn@latest diff make this easy.
initSet up masicn in your React Native project. Run this once after creating the project.
npx masicn@latest init
The wizard picks a color palette then:
src/masicn/babel.config.js and react-native.config.jsreact-native-reanimated, react-native-gesture-handler)pod install on iOSmasicn.json in your project root| Flag | Description |
|---|---|
--interactive |
Full wizard — customize output dirs, design system mode, auto-patch App.tsx |
--skip-install |
Skip npm install and pod install |
add [components...]Copy one or more components into your project as source files.
npx masicn@latest add button # single
npx masicn@latest add button card modal # multiple at once
npx masicn@latest add # interactive searchable picker
npx masicn@latest add --all # everything
Files land in your outputDir (default: src/shared/components). Registry dependencies are resolved and copied automatically.
| Flag | Description |
|---|---|
-f, --force |
Overwrite existing files without prompting |
--all |
Add every available component and block |
listBrowse all available components and blocks.
npx masicn@latest list # all
npx masicn@latest list --installed # only installed
npx masicn@latest list --category form # filter by category
Available categories: core · form · feedback · interactive · layout · navigation · overlay · blocks
| Flag | Description |
|---|---|
--category <category> |
Filter by category |
--installed |
Show only installed components |
info <component>Full details about a component — description, props table, peer dependencies, registry dependencies, and install status.
npx masicn@latest info button
npx masicn@latest info bottom-sheet
statusSee all installed components and whether updates are available.
npx masicn@latest status
button v0.0.1 ✔ up to date
card v0.0.1 ✔ up to date (modified locally)
bottom-sheet v0.0.1 ✔ up to date
| Flag | Description |
|---|---|
--check-modified |
Also flag components whose local files differ from the registry (fetches remote — slightly slower) |
update [component]Pull the latest version of a component from the registry.
npx masicn@latest update button # one component
npx masicn@latest update # all installed components
| Flag | Description |
|---|---|
-f, --force |
Overwrite local changes without prompting |
diff <component>Line-by-line diff between your local file and the current registry version — useful before deciding to update.
npx masicn@latest diff button
remove <component>Remove a component from your project.
npx masicn@latest remove button
Deletes the component files and removes the entry from masicn.json.
| Flag | Description |
|---|---|
-y, --yes |
Skip the confirmation prompt |
masicn.jsonCreated by masicn init in your project root. Edit it anytime.
{
"version": "1",
"outputDir": "src/shared/components",
"blocksDir": "src/shared/blocks",
"designSystemDir": "src/masicn",
"palette": "masi",
"localDesignSystem": true,
"installedComponents": {
"button": "0.0.1"
}
}
MIT — free to use, modify, and distribute. Copyright © 2026 Skipp.
Everything in the masicn ecosystem — the CLI, the design system library, and the component source files — is MIT licensed. When you copy a component into your project, you own that code completely. You can change it, ship it in a commercial product, or build on top of it without any restrictions. The only thing we ask is that the copyright notice is kept in place.
Made with care by Manish Kumar at skipp.co.in