Skip to main contentThe rule of thumb
Use the feature registry to explore and learn, then delete features you won’t ship.
Auth/session is core infrastructure and not a removable feature. You can
disable specific auth providers, but the session layer stays.
Disabling is great for the template experience, but deletion is cleaner for production apps.
Prerequisites
- Identify which features you will ship
- Access to both mobile and API code
Steps
- Disable the feature in the registry
- Remove entry points and routes
- Remove backend endpoints and env vars
Disable vs delete
Disable (template / exploration)
Best for:
- quickly trying features without setting up keys
- demo builds
- temporarily turning off sections during development
How:
- Toggle flags in
apps/mobile/features/feature-registry.tsx
- Guard routes using
FeatureGuard (already applied for Payments/AI/File Uploads)
- Hide entry points (tiles/buttons) based on
isFeatureEnabled(...)
Delete (production)
Best for:
- shipping a focused product
- reducing dependencies and risk
- simplifying upgrades, security review, and bundle size
Removal checklist (use this for every feature)
Mobile
- Remove entry points (tabs, tiles, buttons, deep links)
- Remove or guard all routes/screens for the feature
- Remove feature providers from
FeatureProviders
- Remove feature-specific environment variables
- Remove unused dependencies from
apps/mobile/package.json
Backend
- Remove tRPC routers / REST endpoints that only exist for the feature
- Remove external integrations (Stripe/S3 keys, webhook routes, etc.)
- Remove database models/migrations if they’re truly feature-specific
Removal guides (recommended)
Example: removing Payments
- Disable in
apps/mobile/features/feature-registry.tsx (payments: false)
- Remove UI entry points:
- remove the Payments tile in
apps/mobile/app/(tabs)/features/index.tsx
- Delete the Payments route group:
apps/mobile/app/payments/*
- Remove payments providers and SDKs from
apps/mobile/lib/payments/* and deps
- Remove backend Stripe endpoints if not used:
apps/api/src/routers/stripe.ts
apps/api/src/routes/stripe-webhooks.ts (and related webhook wiring)
- Remove Stripe env vars from your deployment
Example: removing AI
- Disable
ai: false
- Remove
apps/mobile/app/ai-chat.tsx and any entry points
- Remove API streaming route if not used:
apps/api/src/routes/ai-stream.ts
- Remove OpenAI/Anthropic env vars
Example: removing File Uploads
- Disable
fileUploads: false
- Remove
apps/mobile/app/file-uploads/* and entry points
- Remove upload module deps from mobile if not needed
- Remove backend S3 router if not used:
apps/api/src/routers/upload.ts
apps/api/src/lib/s3.ts
- Remove S3 env vars
Troubleshooting
- Feature still visible: check feature flags and entry points
- Build errors: remove unused deps and clean install
Next Steps