Skip to content

Clone Templates

ɳSelf ships six full-stack clone templates embedded in the CLI binary. Each template gives you a working Postgres schema with RLS policies, Hasura metadata, seed data, and a Flutter UI starter, ready to run in under a minute.

No network access is required. Clone templates work on air-gapped machines and are free with every ɳSelf install.

TemplateWhat it buildsRequired plugins
airbnb-cloneProperty rental marketplace with listings, bookings, and reviewsauth, notify, photos
discord-cloneReal-time messaging platform with servers, channels, and roleschat, realtime, auth, moderation
notion-cloneCollaborative note-taking with workspaces, pages, and blockscms, auth, realtime
slack-cloneTeam messaging with threads, reactions, and voice/videochat, livekit, realtime, auth, notify
substack-cloneNewsletter platform with subscriber tiers and post publishingcms, notify, auth
zoom-cloneVideo meeting platform with lobby, recording, and participant managementlivekit, recording, auth, notify
Terminal window
# 1. Scaffold the template
nself init --template airbnb-clone ./my-rentals
# 2. Install the required plugins
cd my-rentals
nself plugin install auth notify photos
# 3. Start the stack
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
# 4. Open the Flutter app
cd flutter && flutter run
FlagDescription
--no-seedSkip seed data. Only the schema (001_schema.sql) is applied.
--dry-runPrint the files that would be written without writing them.
--forceOverwrite the destination directory if it is not empty.
Terminal window
# Schema only, skip demo data
nself init --template notion-clone --no-seed ./my-notes
# Preview what would be written
nself init --template slack-clone --dry-run
# Overwrite an existing directory
nself init --template zoom-clone ./existing-dir --force

Each template writes the following structure into the destination directory:

<dest>/
migrations/
001_schema.sql: CREATE TABLE np_* with RLS policies and indexes
002_seed.sql, demo INSERT data (skipped with --no-seed)
hasura/
metadata.json, permissions and relationships for the Hasura console
flutter/
pubspec.yaml: Flutter package manifest
lib/main.dart, starter app with GraphQL client and skeleton screens
nself.yml, project config listing the required plugins
.env.example, environment variable template
README.md, getting started instructions

nself template list shows bundled templates first (no network), then marketplace templates:

Terminal window
nself template list
Bundled templates (6):
airbnb-clone v1.0.0 Property rental marketplace
discord-clone v1.0.0 Real-time messaging platform
notion-clone v1.0.0 Collaborative note-taking
slack-clone v1.0.0 Team messaging with voice/video
substack-clone v1.0.0 Newsletter platform
zoom-clone v1.0.0 Video meeting platform
Marketplace templates:
...

A property rental marketplace. Includes listing search, booking calendar, review system, and photo management.

Tables: np_listings, np_bookings, np_reviews Plugins: auth, notify, photos

Terminal window
nself init --template airbnb-clone ./my-rentals
cd my-rentals
nself plugin install auth notify photos
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

A real-time messaging platform with servers, text channels, roles, and member management.

Tables: np_servers, np_channels, np_messages, np_members, np_roles Plugins: chat, realtime, auth, moderation

Terminal window
nself init --template discord-clone ./my-discord
cd my-discord
nself plugin install chat realtime auth moderation
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

A block-based collaborative editor with workspaces, pages, and granular member access control.

Tables: np_workspaces, np_pages, np_blocks, np_page_members Plugins: cms, auth, realtime

Terminal window
nself init --template notion-clone ./my-notes
cd my-notes
nself plugin install cms auth realtime
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

A team messaging platform with channels, threads, reactions, voice/video via LiveKit, and notifications.

Tables: np_workspaces, np_channels, np_messages, np_threads, np_reactions Plugins: chat, livekit, realtime, auth, notify

Terminal window
nself init --template slack-clone ./my-slack
cd my-slack
nself plugin install chat livekit realtime auth notify
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

A newsletter platform with paid subscriber tiers, post publishing, and email delivery.

Tables: np_newsletters, np_posts, np_subscribers, np_tiers Plugins: cms, notify, auth

Terminal window
nself init --template substack-clone ./my-newsletter
cd my-newsletter
nself plugin install cms notify auth
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

A video meeting platform with meeting lobby, participant management, video grid, and recording playback.

Tables: np_meetings, np_participants, np_recordings Plugins: livekit, recording, auth, notify

Terminal window
nself init --template zoom-clone ./my-meetings
cd my-meetings
nself plugin install livekit recording auth notify
nself start
nself db migrate
nself hasura metadata apply --file hasura/metadata.json
cd flutter && flutter run

All clone template tables follow ɳSelf naming conventions:

  • Table prefix: np_ (ɳSelf project)
  • Every table has id UUID PRIMARY KEY DEFAULT gen_random_uuid()
  • Every table has created_at TIMESTAMPTZ DEFAULT now()
  • Row-level security is enabled on every table with appropriate policies
  • Foreign key relationships use ON DELETE CASCADE where appropriate

If you prefer to apply migrations outside of the CLI:

Terminal window
# Apply schema only
psql $DATABASE_URL -f migrations/001_schema.sql
# Apply seed data
psql $DATABASE_URL -f migrations/002_seed.sql