Skip to content

Fork Guide Features

Zaal Panthaki edited this page Mar 29, 2026 · 1 revision

Fork Guide: Features

ZAO OS has a lot of features. You probably don't need all of them. This guide explains how to enable, disable, and add your own integrations.


Feature Dependencies

Not every feature is independent. Here's what depends on what:

Core (always needed):
├── Auth (iron-session + SIWF or SIWE)
├── Database (Supabase)
└── Chat (Farcaster via Neynar)

Music (independent):
├── Player (no external deps — HTML5 audio)
├── Platform embeds (Spotify, YouTube, etc. — each optional)
├── Radio (needs Audius playlists in config)
├── Queue, crossfade, EQ (built-in, no deps)
├── Scrobbling (optional: Last.fm / ListenBrainz API keys)
├── Arweave uploads (optional: Arweave wallet)
└── Minting (optional: on-chain setup)

Governance (each tier independent):
├── Snapshot polls (needs Snapshot space)
├── Fractal governance (needs Respect contracts on Optimism)
└── ZOUNZ DAO (needs Nouns Builder on Base)

Spaces (independent):
├── Voice channels (needs 100ms API keys)
├── Video calls (Jitsi — free, no keys needed)
└── Streaming (needs Livepeer / platform OAuth)

Cross-posting (each platform independent):
├── X/Twitter (OAuth client ID + secret)
├── Bluesky (identifier + password)
├── Telegram (bot token)
├── Discord (bot token + webhook)
├── Lens (protocol client)
└── Hive (posting key)

Gating (each layer independent):
├── Allowlist (Supabase only — no external deps)
├── Hats Protocol (needs Hats tree on Optimism)
└── Respect tokens (needs contract on Optimism)

Disabling Features

Remove a Navigation Pillar

To hide a pillar from the sidebar and home page, edit src/components/navigation/Sidebar.tsx and remove the corresponding nav item. The routes will still exist (won't 404) but users won't be guided to them.

For a cleaner removal, also:

  1. Delete the page directory under src/app/(auth)/
  2. Remove related API routes under src/app/api/
  3. Remove related components under src/components/

Disable Music Features

The music player is the largest feature area. To run without it:

  1. Remove music/ from src/app/(auth)/
  2. Remove src/components/music/ (30+ components)
  3. Remove src/providers/audio/
  4. Remove music-related API routes (/api/music/*)
  5. Remove music hooks (usePlayerQueue, useRadio, useNowPlaying, useMusicQueue)
  6. Remove the PersistentPlayer from the layout

Disable Voice/Spaces

  1. Remove /spaces pages
  2. Remove /api/100ms/* routes
  3. Remove 100ms SDK dependency: npm uninstall @100mslive/react-sdk

Disable Cross-Posting

Simply don't set the environment variables for platforms you don't want. The publish system checks for configured credentials and skips unconfigured platforms. No code changes needed.

Disable Governance

Each tier is independent:

  • Snapshot: Remove src/app/(auth)/governance/ and /api/snapshot/*
  • Fractals: Remove src/app/(auth)/fractals/ and /api/fractals/*
  • ZOUNZ: Remove /api/zounz/* and ZOUNZ components

Disable XMTP (Encrypted DMs)

  1. Remove src/app/(auth)/messages/
  2. Remove src/components/messages/
  3. Remove src/contexts/XMTPContext.tsx
  4. Remove XMTP SDK: npm uninstall @xmtp/browser-sdk

Adding Integrations

Add a New Music Platform

  1. Create a provider in src/providers/audio/YourPlatformProvider.tsx
  2. Implement the provider interface (play, pause, seek, getCurrentTime, getDuration)
  3. Register it in PlayerProvider.tsx
  4. Add URL detection in src/lib/music/isMusicUrl.ts
  5. Add an embed component in src/components/music/

Add a New Cross-Post Target

  1. Create src/lib/publish/yourplatform.ts — implement the publish function
  2. Add normalization rules (character limits, image handling) in src/lib/publish/normalize.ts
  3. Create an API route at /api/publish/yourplatform/route.ts
  4. Add OAuth flow if needed at /api/platforms/yourplatform/route.ts
  5. Add to broadcast settings UI

Add a New Voice/Video Provider

  1. Create room management in src/lib/spaces/
  2. Add token generation route at /api/yourprovider/token/route.ts
  3. Create room component in src/components/spaces/
  4. Register in voice channel routing

Add a New Auth Method

  1. Create session logic in src/lib/auth/
  2. Add verification route at /api/auth/yourmethod/route.ts
  3. Update useAuth() hook to support the new method
  4. Add UI in the login flow

Feature Flags (Simple Approach)

ZAO OS doesn't have a built-in feature flag system, but you can create one easily:

// community.config.ts
features: {
  music: true,
  xmtp: true,
  spaces: true,
  crossPosting: true,
  governance: true,
  arweave: false,  // disable for your community
},

Then check communityConfig.features.music in your components and routes. This is simpler than removing code and lets you toggle features without code changes.


Platform OAuth Setup

For cross-posting and streaming integrations that need OAuth:

Platform What You Need Where to Get It
X/Twitter Client ID + Secret developer.x.com
Twitch Client ID + Secret dev.twitch.tv
YouTube OAuth credentials Google Cloud Console
Kick API credentials Kick developer portal
Facebook App ID + Secret developers.facebook.com
Lens Protocol client No credentials needed (public protocol)
Bluesky Handle + App password Bluesky settings → App passwords
Discord Bot token discord.com/developers
Telegram Bot token @BotFather

Each platform has OAuth callback routes at /api/auth/[platform]/callback and connection routes at /api/platforms/[platform].

Clone this wiki locally