The 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
- 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
- remove the Payments tile in
- 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.tsapps/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.tsxand 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.tsapps/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