-
Notifications
You must be signed in to change notification settings - Fork 1
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.
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)
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:
- Delete the page directory under
src/app/(auth)/ - Remove related API routes under
src/app/api/ - Remove related components under
src/components/
The music player is the largest feature area. To run without it:
- Remove
music/fromsrc/app/(auth)/ - Remove
src/components/music/(30+ components) - Remove
src/providers/audio/ - Remove music-related API routes (
/api/music/*) - Remove music hooks (
usePlayerQueue,useRadio,useNowPlaying,useMusicQueue) - Remove the
PersistentPlayerfrom the layout
- Remove
/spacespages - Remove
/api/100ms/*routes - Remove 100ms SDK dependency:
npm uninstall @100mslive/react-sdk
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.
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
- Remove
src/app/(auth)/messages/ - Remove
src/components/messages/ - Remove
src/contexts/XMTPContext.tsx - Remove XMTP SDK:
npm uninstall @xmtp/browser-sdk
- Create a provider in
src/providers/audio/YourPlatformProvider.tsx - Implement the provider interface (play, pause, seek, getCurrentTime, getDuration)
- Register it in
PlayerProvider.tsx - Add URL detection in
src/lib/music/isMusicUrl.ts - Add an embed component in
src/components/music/
- Create
src/lib/publish/yourplatform.ts— implement the publish function - Add normalization rules (character limits, image handling) in
src/lib/publish/normalize.ts - Create an API route at
/api/publish/yourplatform/route.ts - Add OAuth flow if needed at
/api/platforms/yourplatform/route.ts - Add to broadcast settings UI
- Create room management in
src/lib/spaces/ - Add token generation route at
/api/yourprovider/token/route.ts - Create room component in
src/components/spaces/ - Register in voice channel routing
- Create session logic in
src/lib/auth/ - Add verification route at
/api/auth/yourmethod/route.ts - Update
useAuth()hook to support the new method - Add UI in the login flow
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.
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 |
| 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].