A CLI tool to scaffold a new TinyBase application with full synchronization and local-first capabilities.
Build a todo list, a drawing app, a chat app, or a tic-tac-toe game using TypeScript or JavaScript, with React or Vanilla JS - in just a matter of seconds.
npm create tinybase@latest(PNPM, Yarn, and Bun should also work!)
This will prompt you with questions to configure your new TinyBase app:
- Project name - Name of your project directory
- Language - TypeScript or JavaScript
- Framework - React or Vanilla JS
- App type - Todo app, Chat app, Drawing app, or Tic-tac-toe game
- Store schemas - TypeScript type safety for stores (TypeScript only)
- Synchronization - Enable real-time sync between clients
- Server code - Include Node.js or Cloudflare Durable Objects server
- Prettier - Include Prettier for code formatting
- ESLint - Include ESLint for code linting
After creating your project:
cd my-tinybase-app/client
npm install
npm run devYour app will be available at http://localhost:5173, or whichever port Vite
specifies in the console.
If you included server code, start the server in a separate terminal:
# In a separate terminal
cd my-tinybase-app/server
npm install
npm run devYour app should look something like this:
- Task list with add/complete/delete
- Single store for todos
- Demonstrates basic CRUD operations
- Perfect starter example
- Multi-user messaging interface
- Dual stores: settings + messages
- Username configuration
- Real-time message sync
- Collaborative drawing canvas
- Brush size and color controls
- Dual stores: settings + canvas
- Optimized point-based stroke storage
- Two-player game board
- Win/draw detection
- Turn management
- Game state synchronization
During the prompts, you can customize various aspects of your TinyBase app. Here are the details of what each option entails:
TypeScript provides full type safety with:
- Typed store schemas (optional)
- IntelliSense support for TinyBase APIs
- Compile-time error checking
- Better IDE integration
JavaScript offers:
- Faster setup with no transpilation step
- Simpler learning curve
- Still fully functional with TinyBase
React provides:
- Component-based architecture
- React hooks for TinyBase stores
- Automatic re-rendering on store updates
- Full ecosystem support
Vanilla JS offers:
- No framework dependencies
- Smaller bundle size
- Direct DOM manipulation
- Manual listener-based updates
- Todo App - Simple task management with add, edit, delete features
- Chat App - Real-time messaging between multiple clients
- Drawing App - Collaborative canvas with basic drawing tools
- Tic-Tac-Toe Game - Two-player game with real-time updates
When enabled, schemas provide:
- Full TypeScript typing for store structure
- Runtime validation
- Better autocomplete
- Type-safe data access
Schemas define:
- Table structures with cell types
- Value types
- Default values
- Strict typing for all store operations
Enabled (default):
- Real-time sync between browser tabs
- WebSocket-based synchronization
- Connects to demo server by default (wss://vite.tinybase.org)
- MergeableStore for conflict-free replication
- Automatic reconnection handling
Disabled:
- Local-only data storage
- No network dependencies
- Simpler architecture
- Still uses MergeableStore for consistency
When synchronization is enabled, you can include server code:
Node.js Server (port 8043):
- WebSocket server using
wslibrary - TinyBase server synchronizer
- Runs with
npm run devin server directory - Easy to deploy to any Node.js host
Cloudflare Durable Objects (port 8787):
- Serverless WebSocket server
- Edge computing with Durable Objects
- Global distribution
- Runs locally with Wrangler
No Server:
- Connects to public demo server
- Great for prototyping
- No local server management needed
Prettier:
- Automatic code formatting
- Consistent style across project
- Pre-configured settings
- Runs on save (with IDE integration)
ESLint:
- Code quality checks
- Catch common errors
- Import organization
- TypeScript-aware rules
All apps are created with a monorepo structure:
my-tinybase-app/
├── package.json # Root package (manages workspaces)
├── README.md # Getting started guide
├── client/ # Client application
│ ├── package.json # Client dependencies
│ ├── index.html # Entry HTML
│ ├── public/ # Static assets
│ └── src/ # Source code
│ ├── App.tsx # Main app component
│ ├── Store.tsx # TinyBase store setup
│ └── ... # App-specific components
└── server/ # Server code (optional)
├── package.json # Server dependencies
└── src/
└── index.ts # Server entry point
MIT License - see LICENSE file for details.



