Local Development
Develop locally while connected to remote infrastructure. Run profiles combine:
- Commands - Your local dev server
- Tunnels - SSH connections to remote services
- Secrets - Environment variables from vault
How It Works
Section titled “How It Works”sequenceDiagram
participant Dev as Developer
participant Slipp
participant Vault
participant SSH as SSH Tunnel
participant Cmd as Dev Server
Dev->>Slipp: slipp run dev
Slipp->>Vault: Load secrets
Vault-->>Slipp: Environment vars
Slipp->>SSH: Establish tunnel
SSH-->>Slipp: Connected
Slipp->>Cmd: npm run dev
Cmd-->>Dev: Server running
Quick Start
Section titled “Quick Start”-
Create a run profile
Terminal window slipp run dev \--cmd "npm run dev" \--tunnel-out 5173:app.example.com@myserver \--vault myproject -
Run it anytime
Terminal window slipp run dev
This profile:
- Loads secrets from
myprojectvault into environment - Opens reverse tunnel (local port accessible via domain)
- Runs your dev command
Tunnels
Section titled “Tunnels”Tunnels bridge your local machine and remote servers via SSH.
tunnel-out (Reverse Tunnel)
Section titled “tunnel-out (Reverse Tunnel)”Expose your local dev server to the internet through the remote server.
--tunnel-out 5173:app.example.com@myserver| Part | Description |
|---|---|
5173 | Local port to expose |
app.example.com | Domain that routes to tunnel |
myserver | SSH host from inventory |
sequenceDiagram
participant Browser
participant Caddy as Caddy Proxy
participant Tunnel as SSH Tunnel
participant Dev as localhost:5173
Browser->>Caddy: app.example.com
Caddy->>Tunnel: Route to tunnel
Tunnel->>Dev: Forward request
Dev-->>Browser: Response
Use case: Test OAuth callbacks, webhooks, or production integrations locally.
tunnel-in (Forward Tunnel)
Section titled “tunnel-in (Forward Tunnel)”Pull a remote service to your local machine.
--tunnel-in postgres:5432@myserver| Part | Description |
|---|---|
postgres | Service name (resolved via inventory) |
5432 | Port to forward |
myserver | SSH host |
sequenceDiagram
participant App as Local App
participant Tunnel as SSH Tunnel
participant DB as Remote Postgres
App->>Tunnel: localhost:5432
Tunnel->>DB: Forward query
DB-->>Tunnel: Result
Tunnel-->>App: Result
Use case: Connect local code to remote database without exposing it publicly.
Combining Tunnels
Section titled “Combining Tunnels”Use both tunnel types together:
slipp run dev \ --tunnel-out 5173:app.example.com@myserver \ --tunnel-in postgres:5432@myserver \ --vault myproject \ --cmd "npm run dev"Now your local app:
- Is accessible at
https://app.example.com - Connects to remote Postgres at
localhost:5432
Managing Profiles
Section titled “Managing Profiles”List saved profiles
Section titled “List saved profiles”slipp runs listOutput shows commands, vaults, and tunnel configuration:
Saved profiles:
dev: cmd: npm run dev vaults: myproject tunnel-out: 5173:app.example.com@myserverRemove a profile
Section titled “Remove a profile”slipp runs remove devRuntime overrides
Section titled “Runtime overrides”Add options at runtime without modifying the saved profile:
# Add extra environment variableslipp run dev --env DEBUG=true
# Add another vaultslipp run dev --vault shared-secrets
# Pass args to commandslipp run dev -- --port 3000Environment Variables
Section titled “Environment Variables”From vault secrets
Section titled “From vault secrets”Vault secrets are loaded as environment variables:
slipp run dev --vault myprojectIf myproject vault contains:
vault_db_password: "secret123"vault_api_key: "abc..."Your command runs with:
DB_PASSWORD=secret123 API_KEY=abc... npm run devCustom variables
Section titled “Custom variables”Add custom environment variables:
slipp run dev --env NODE_ENV=development --env DEBUG=trueExamples
Section titled “Examples”SvelteKit with remote auth
Section titled “SvelteKit with remote auth”slipp run dev \ --cmd "npm run dev" \ --tunnel-out 5173:app.example.com@myserver \ --vault auth-serviceFlask with remote PostgreSQL
Section titled “Flask with remote PostgreSQL”slipp run dev \ --cmd "flask run" \ --tunnel-in postgres:5432@myserver \ --vault myproject \ --env FLASK_DEBUG=1Multiple services
Section titled “Multiple services”# Frontendslipp run frontend \ --cmd "npm run dev" \ --tunnel-out 3000:app.example.com@myserver
# Backend (different profile)slipp run backend \ --cmd "uvicorn main:app --reload" \ --tunnel-in postgres:5432@myserver \ --tunnel-out 8000:api.example.com@myserverPrerequisites
Section titled “Prerequisites”Dev proxy (for tunnel-out)
Section titled “Dev proxy (for tunnel-out)”Before using --tunnel-out, set up the dev proxy:
slipp bootstrap proxy myserver --email admin@example.comThis installs Caddy on your VPS to route domains to tunnels.
Vault (for secrets)
Section titled “Vault (for secrets)”Create vault secrets for your project:
slipp secrets add vault_db_password myprojectslipp secrets add vault_api_key myprojectSee Secrets Management for details.