Create modern React apps with Vital(speed)
π GitHub β’ π Issues β’ β Stars
- π§© Full Atomic Component Library β Production-ready atoms and organisms with consistent design tokens
- β‘οΈ React 19 β Latest React with modern patterns
- π¦Ύ TypeScript 6 β Strict typing throughout
- π¨ Tailwind CSS 4 β CSS-first configuration with custom properties
- π Vite 8 β Lightning-fast builds
- π Atomic Design β Scalable component architecture
- π Path Aliases β Clean, consistent imports
- π¨ SVG Sprites β 84-icon optimized sprite system with caching
- π§ͺ Vitest β Fast unit testing
- βοΈ Netlify β Zero-config deployment
All components live under src/components/ and follow Atomic Design. A live showcase is available at the /components route when running the app.
| Component | Import path | Description |
|---|---|---|
Button |
components/atoms/button |
6 variants Γγ°γ€ 3 sizes, icon, loading state |
Input |
components/atoms/input/input |
Label, error, disabled, right-element slot |
Textarea |
components/atoms/textarea/textarea |
Label, error, disabled |
Select |
components/atoms/select/select |
Searchable custom dropdown |
Toggle |
components/atoms/toggle |
3 sizes (sm / md / lg), label, description |
Stepper |
components/atoms/stepper |
Number input with min / max / step |
Autosearch |
components/atoms/autosearch |
Autocomplete with keyboard nav and portal dropdown |
Tooltip |
components/atoms/tooltip |
4 positions, configurable delay |
BackButton |
components/atoms/back-button/back-button |
Wraps Button with router navigate(-1) |
LazyImage |
components/atoms/lazy-image |
Intersection-Observer lazy loading |
Card |
components/atoms/card |
Composable layout β CardHeader, CardTitle, CardContent, CardFooter |
SvgIcon |
components/atoms/svg-sprite-loader |
Renders icons from the SVG sprite |
SvgSpriteLoader |
components/atoms/svg-sprite-loader |
Loads and caches the sprite at app root |
ErrorBoundary |
components/atoms/error-boundary |
Class-based error boundary with render-prop API |
AppErrorFallback |
components/atoms/error-boundary |
Full-page crash UI |
PageErrorFallback |
components/atoms/error-boundary |
Route-level error UI |
WidgetErrorFallback |
components/atoms/error-boundary |
Inline section error UI |
Logos.Vite |
components/atoms/logos |
Vite SVG logo |
| Component | Import path | Description |
|---|---|---|
Card |
components/organisms/card |
Link card with icon, title, description, border accent |
Tabs |
components/organisms/tabs |
Keyboard-navigable WCAG-compliant tab panel |
Dropdown |
components/organisms/dropdown |
Portal dropdown with viewport-collision flip |
Modal |
components/organisms/modal |
Focus-trapped modal via context + useModal hook |
Toast / ToastContainer |
components/organisms/toast |
Toasts via context + useToast hook |
Header |
components/organisms/header |
App-level navigation header |
Footer |
components/organisms/footer |
App footer |
<Button variant="primary" size="sm">Primary</Button> <Button variant="secondary" size="md">Secondary</Button> <Button variant="outline" size="lg">Outline</Button> <Button variant="ghost">Ghost</Button> <Button variant="danger">Danger</Button> <Button variant="link">Link</Button> // Icon button <Button size="icon" icon="settings" aria-label="Settings" /> // Loading state <Button isLoading>Saving...</Button>
<Toggle size="sm" label="Small" /> <Toggle size="md" label="Medium" defaultChecked /> {/* default */} <Toggle size="lg" label="Large" />
CSS custom properties are defined in src/index.css and used across all components:
:root { --color-brand: #10b981; /* brand fill (bg-brand-gradient) */ --color-brand-hover: #059669; /* brand hover */ }
The primary interactive color (buttons, focus rings, active tabs) uses blue-600 / blue-500 from Tailwind's palette. Override in src/index.css to rebrand the entire system at once.
84 icons are bundled in public/sprites/app-icons.svg. Regenerate from icons/ at any time:
npm run generate-sprite
Then bump the version prop in src/app/app.tsx to invalidate browser cache. See SVG_SPRITE_GUIDE.md for full documentation.
import { SvgIcon } from 'components/atoms/svg-sprite-loader'; <SvgIcon name="home" width="24" height="24" className="text-blue-600" />
npx degit asif7774/vital my-awesome-app
cd my-awesome-app
npm install
npm run devVisit http://localhost:5200/ and http://localhost:5200/components for the component showcase.
- Update
nameandauthorinpackage.json - Change
<title>inindex.html - Replace favicon in
public/favicon.svg - Update
public/manifest.webmanifest - Adjust
--color-brandinsrc/index.css - Update this README
| Command | Description |
|---|---|
npm run dev |
Start dev server at localhost:5200 |
npm run build |
TypeScript check + Vite production build |
npm run lint |
ESLint across the whole project |
npm run tsc |
Type-check without emitting |
npm run test |
Run Vitest once |
npm run test:ui |
Run Vitest with browser UI |
npm run preview |
Preview the production build |
npm run generate-sprite |
Rebuild SVG sprite from icons/ |
- ESLint 10 β Strict React + TypeScript rules
- Prettier 3.9 β Opinionated code formatting
- TypeScript ESLint 8 β TypeScript-specific linting
- Lint-staged 17 β Pre-commit quality gates via Husky
- PostCSS β CSS processing
| Package | Version |
|---|---|
| React | 19.2.7 |
| TypeScript | 6.0.3 |
| Tailwind CSS | 4.3.2 |
| Vite | 8.1.4 |
| ESLint | 10.6.0 |
| Prettier | 3.9.4 |
| Vitest | 4.1.10 |
| React Router | 7.18.1 |
| TypeScript ESLint | 8.63.0 |
- Go to Netlify
- Connect your repository
- Deploy β zero configuration required
The dist/ folder is self-contained static files deployable to Vercel, GitHub Pages, Cloudflare Pages, or any CDN.
Vital eliminates the boilerplate tax on every new React project.
- β‘οΈ Zero-config β Everything works out of the box
- π§© Real component library β Not just scaffolding; production-ready UI components included
- π¨ Design system ready β CSS variables, consistent tokens, primary color applied globally
- π Latest tooling β React 19, TypeScript 6, Vite 8, Tailwind 4
- π¦ One command β
npx degit asif7774/vital my-app
Perfect for rapid prototyping, internal tools, and production web apps.
MIT License β see LICENSE for details.
Contributions are welcome! Please open a Pull Request.
If Vital saved you time, a star goes a long way. β