Skip to content

Deterministic ports across projects and worktrees

Stable ports, .test hostnames, and wired .env files for every project, worktree, and agent instance. Declare your services once — every checkout is isolated automatically.

  • Editing /etc/hosts
  • Port conflicts between projects
  • Updating five .env files when a port changes
  • Self-signed certificate warnings
  • "What port was this on again?"
Read the story →
Main checkout
$ outport up

myapp [main]

    rails             PORT                   13842  https://myapp.test
    postgres          DATABASE_PORT          28391
    redis             REDIS_PORT             19204

Ports written to .env
Worktree
$ outport up

myapp [bxcf]

    rails             PORT                   22107  https://myapp-bxcf.test
    postgres          DATABASE_PORT          31842
    redis             REDIS_PORT             16509

Ports written to .env

Built for the agentic era — agents, worktrees, and parallel development. Work with AI →


Features

#

Deterministic Ports

Same project, same ports — every time, on every machine.

>_

Multi-Instance

Worktrees, branches, AI agents — each gets isolated ports and hostnames automatically.

.e

.env Integration

Ports, URLs, and computed values written directly to your .env files. Your app reads them natively — no wrapper, no SDK.

${}

Computed Values

Services discover each other. CORS_ORIGINS=${frontend.url} resolves automatically across your stack.

.t

.test Domains with HTTPS

Real hostnames like myapp.test with automatic HTTPS. Built-in DNS and reverse proxy.

VS

VS Code Extension

Sidebar panel with ports, URLs, health indicators, and one-click actions. Install it →


Live Dashboard

All your projects, URLs, and service health in one place.

Outport live dashboard showing projects with .test URLs, ports, and health statusOutport live dashboard in dark mode showing projects with .test URLs, ports, and health status

Pin https://outport.test in your browser after running outport setup.


One config, fully wired

Cross-service URLs resolve automatically. Change nothing when switching between main and worktrees.

outport.yml
# outport.yml
name: myapp
services:
  rails:
    env_var: PORT
    hostname: myapp.test
  frontend:
    env_var: NUXT_PORT
    hostname: myapp-frontend.test
  postgres:
    env_var: DATABASE_PORT
computed:
  API_URL: ${rails.url}
  CORS_ORIGINS: ${frontend.url}
Resulting .env
# .env
# Your variables are never touched
SECRET_KEY=abc123
DATABASE_URL=postgres://...

# --- begin outport.dev ---
PORT=13842
NUXT_PORT=24519
DATABASE_PORT=28391
API_URL=https://myapp.test
CORS_ORIGINS=https://myapp-frontend.test
# --- end outport.dev ---

outport up works without the daemon — you get deterministic ports and .env integration with zero system changes. Run outport setup to optionally enable .test hostnames and HTTPS.


Try it

$ brew install steveclarke/tap/outport
$ outport setup

macOS and Linux. See all install options.