βοΈ Full Installation & Setup
This guide is for developers who want to configure all backend services, understand the full stack, and customize their Shipnative project from the ground up.Just want to start building? Check out the Quickstart for Vibecoders instead. This guide is for those who want to configure real backend services from the start.
What You Actually Need to Do
For Development (Start Building Now)
Nothing! Just clone, install, and run. Mock services work out of the box.For Production (Before App Store Release)
These are REQUIRED:- β Generate Android release keystore (CRITICAL - see below)
- β
Configure bundle identifiers in
app.json - β Set up Supabase (minimum for auth + database)
- β οΈ Configure certificate pinning (security - recommended)
- RevenueCat (for payments - can use mock mode)
- PostHog (for analytics - can use mock mode)
- Sentry (for error tracking - can use mock mode)
Prerequisites
Before you begin, make sure you have:- Node.js 20+ installed (download here)
- Yarn installed (
npm install -g yarn) - Xcode (for iOS development) or Android Studio (for Android development)
- Git installed
Step 1: Clone the Repository
After purchasing Shipnative, you will receive access to the private GitHub repository:Step 2: Run the Setup Wizard
Shipnative includes an interactive setup wizard that configures your projectβs metadata and integrates backend services.Setup Wizard Features
The setup wizard includes several powerful features:Prerequisites Check
The wizard automatically checks that you have:- Node.js 20+ installed
- Yarn 4+ installed
--skip-prereqs if needed.
Automatic Backups
Before modifying any files, the wizard creates timestamped backups in.setup-backups/:
app.jsonbackupspackage.jsonbackups.envfile backups
Progress Indicators
Long-running operations (like dependency installation) show progress spinners so you know the wizard is working.Input Masking
When entering secrets (API keys, passwords), your input is automatically masked with* characters for security.
Skip Options
In wizard mode, you can skip remaining services at any time to speed up the setup process.Setup Modes
The wizard offers three setup modes:- Guided Setup Wizard - Full walkthrough of metadata + all services
- Service Configurator - Pick and configure services individually
- Metadata Only - Update app metadata without configuring services
Command-Line Options
The setup script supports several command-line options:Non-Interactive Mode: When using
--non-interactive, the wizard reads configuration from environment variables. Set variables like WHAT_IS_YOUR_APP_S_DISPLAY_NAME to provide answers automatically.What the Setup Wizard Does
The wizard will walk you through:Project Metadata
- App display name - What users see on their home screen
- Bundle identifier - Unique ID for app stores (e.g.,
com.yourcompany.yourapp) - URL scheme - For deep linking (e.g.,
myapp://)
Backend Services (Optional)
Youβll be prompted to configure each service. You can skip any service to use mock mode instead.Supabase - Authentication & Database
Supabase - Authentication & Database
Required information:
- Supabase project URL (e.g.,
https://your-project.supabase.co) - Supabase publishable key (starts with
sb_publishable_...)
anon / public keyView detailed Supabase setup guideGoogle OAuth (Optional)
Google OAuth (Optional)
Required information:
- Google OAuth Web Client ID
- Google OAuth iOS Client ID
Apple Sign In (Optional)
Apple Sign In (Optional)
Required information:
- Apple Services ID
PostHog - Analytics
PostHog - Analytics
Required information:
- PostHog API key
- PostHog host URL
RevenueCat - In-App Purchases
RevenueCat - In-App Purchases
Required information:
- RevenueCat iOS API key
- RevenueCat Android API key
Sentry - Error Tracking
Sentry - Error Tracking
Required information:
- Sentry DSN
Firebase Cloud Messaging (Android Push)
Firebase Cloud Messaging (Android Push)
Required information:
- Firebase Server Key
β οΈ Important: Environment Variable Security
Critical: AllEXPO_PUBLIC_* variables are bundled into your app and visible to anyone who inspects the app bundle.
β
Safe to expose (these are designed to be public):
EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY- Protected by Row Level Security (RLS)EXPO_PUBLIC_POSTHOG_API_KEY- Public analytics keyEXPO_PUBLIC_REVENUECAT_*_KEY- Public RevenueCat keys
- Supabase
service_rolekey (server-side only) - Any secret keys or passwords
- Private API keys that grant write access
- Always configure RLS - Supabase Row Level Security is your primary defense. Never rely on hiding API keys.
- Keep sensitive operations server-side - Use Supabase Edge Functions or your own backend for admin actions, payment processing, etc.
- Use the publishable key - Itβs designed to be public and is protected by RLS policies.
Security Features in Setup Wizard
The setup wizard includes several security features:- Input Masking - Secrets are masked while typing (shown as
*) - Git Ignore Check - Warns if
.envfiles arenβt in.gitignore - Security Warnings - Reminds you about public key exposure
- Automatic Backups - Creates backups before modifying files
.env file might be tracked in git.
Step 3: Install Dependencies
The setup wizard will offer to install dependencies automatically after configuration. If you skipped this or need to reinstall:Step 4: Verify Setup
Setup Summary
After running the wizard, a setup summary is automatically generated at.setup-summary.json. This file contains:
- Timestamp of setup
- Metadata configuration
- Services configured
- Files modified
Verify Configuration Files
Check that everything is configured correctly:Check Backups
If you need to revert changes, backups are stored in.setup-backups/:
Step 5: Run Your App
Navigate to the app directory and start development:Manual Configuration
If you prefer to configure services manually instead of using the setup wizard:1. Copy Environment Template
2. Edit .env File
Open apps/app/.env and add your API keys:
3. Update app.json
Edit apps/app/app.json to set your bundle ID and app name:
Understanding Mock Mode
If you skip configuring a service, Shipnative automatically uses mock mode for that service:| Service | Mock Behavior |
|---|---|
| Supabase | In-memory auth & database. Login always succeeds. |
| RevenueCat | All purchases succeed instantly. Free β Pro toggle in dev menu. |
| PostHog | Events logged to console. Feature flags always return false. |
| Sentry | Errors logged to console. No remote tracking. |
- Build your entire frontend without backend dependencies
- Test features offline
- Develop without incurring API costs
- Add real services only when ready to deploy
Next Steps
Project Structure
Understand how the codebase is organized
Configure Database
Set up your Supabase database schema
Set Up Payments
Configure RevenueCat products and subscriptions
Deploy Your App
Ship to app stores when youβre ready
Advanced Usage
CI/CD Integration
For automated setups in CI/CD pipelines, use non-interactive mode:Dry Run Mode
Preview changes before applying them:Service Validation
Test service connections after configuration:Restoring from Backup
If you need to revert changes:Troubleshooting
Setup wizard fails or crashes
Setup wizard fails or crashes
If the setup wizard encounters errors:
- Check prerequisites: Ensure Node.js 20+ and Yarn 4+ are installed
- Delete any partial
.envfile:rm apps/app/.env - Run setup again:
yarn setup - Check error messages - they now include context and suggestions
- If still failing, configure manually (see βManual Configurationβ above)
- Restore from backup if needed:
ls .setup-backups/
Prerequisites check fails
Prerequisites check fails
The wizard checks for Node.js 20+ and Yarn 4+. If you have different versions:
- Update to required versions, or
- Run with
--skip-prereqsto continue anyway (not recommended)
App won't start after setup
App won't start after setup
Common fixes:
API keys aren't working
API keys aren't working
Verify:
- Keys are in
apps/app/.env(not root.env) - All keys are prefixed with
EXPO_PUBLIC_(except FIREBASE_SERVER_KEY) - No extra spaces or quotes around values
- You restarted the Metro bundler after adding keys
Getting 'Supabase URL is undefined' error
Getting 'Supabase URL is undefined' error
This means the app is using mock mode because env variables arenβt loaded. Make sure:
.envfile exists inapps/app/.env- Youβre running from
apps/app/directory - Metro bundler was restarted after creating
.env - Variable names use
EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY(notEXPO_PUBLIC_SUPABASE_ANON_KEY)
Setup wizard shows 'Invalid input' errors
Setup wizard shows 'Invalid input' errors
The wizard now includes improved validation:
- URLs must start with
https:// - Bundle IDs must match format:
com.company.app - Supabase keys must start with
sb_publishable_or be valid JWT tokens - Sentry DSNs must match the format:
https://key@host/project-id
Backups taking up space
Backups taking up space
Backups are stored in Or disable backups entirely with
.setup-backups/. To clean up old backups:--skip-backup flag.