Free Forever · Built with Go
Give your localhost a
local or public URL
Turn localhost:3000 into https://app.test with path routing, HTTPS, HMR support, or get a public url without deployment.
$ slim start web --port 3000
✓ https://web.test → localhost:3000
$ slim start myapp --port 3000 --route /api=8080
✓ https://myapp.test → localhost:3000
https://myapp.test/api → localhost:8080
$ slim start app.loc --port 4000
✓ https://app.loc → localhost:4000
$ slim up # .slim.yaml
✓ https://myapp.test → localhost:3000
https://myapp.test/api → localhost:8080
✓ https://dashboard.test → localhost:5173
Local Development
Map localhost ports to pretty .test domains or any custom TLD with trusted certificates and zero config.
Map your application
$ slim start web --port 3000
✓ https://web.test → localhost:3000
Route /api to a different port
$ slim start myapp --port 3000 --route /api=8080
✓ https://myapp.test → localhost:3000
https://myapp.test/api → localhost:8080
Use any TLD
$ slim start app.loc --port 4000
✓ https://app.loc → localhost:4000
Reference
Commands
Everything is one slim command away.
slim start <name> Map a domain to a port
slim start <name> Map a domain to a port # Map your Next.js app
$ slim start myapp --port 3000
# Add your API server
$ slim start api -p 8080
# Use a custom TLD
$ slim start app.loc -p 4000
# Route /api requests to a different port
$ slim start myapp -p 3000 --route /api=8080
# Enable access logging
$ slim start dashboard -p 5173 --log-mode full
# Wait for upstream to be ready
$ slim start myapp -p 3000 --wait --timeout 30s slim list See what's running
slim list See what's running # Show all domains with health status
$ slim list
# Output as JSON
$ slim list --json slim logs View access logs
slim logs View access logs # Tail all access logs
$ slim logs
# Follow logs for a specific domain
$ slim logs -f myapp
# Clear all logs
$ slim logs --flush slim up Start all services from .slim.yaml
slim up Start all services from .slim.yaml # Start all services from .slim.yaml
$ slim up
# Or specify a config path
$ slim up --config /path/to/.slim.yaml slim down Stop project services
slim down Stop project services # Stop all project services
$ slim down
# Or specify a config path
$ slim down --config /path/to/.slim.yaml slim stop Stop proxying
slim stop Stop proxying # Stop a specific domain
$ slim stop myapp
# Stop all domains and shutdown daemon
$ slim stop slim doctor Diagnose setup issues
slim doctor Diagnose setup issues # Check your local setup
$ slim doctor slim uninstall Remove everything
slim uninstall Remove everything # Removes everything: CA, certs, hosts entries,
# port-forward rules, and config
$ slim uninstall Highlights
Features
Everything you need for local development, built into a single binary.
Automatic HTTPS
Trusted certificates, green lock, no warnings.
WebSocket & HMR
Next.js, Vite, and others work out of the box.
Custom TLDs
Use .test, .loc, .dev, or any TLD you want.
Access Logging
Full, minimal, or off. Tail and filter by domain.
Health Monitoring
See which upstreams are reachable at a glance.
Path Routing
Route different URL paths to different upstream ports.
Project Config
Share your dev setup with teammates via .slim.yaml.
Zero Config
First run handles CA, trust, and port forwarding.
Under the Hood
How it works
A single Go binary that handles everything under the hood.
1
Creates a local development CA so your local domains work over HTTPS without browser warnings.
2
Issues per-domain certificates on the fly, signed by that CA for each mapped domain.
3
Updates /etc/hosts automatically, pointing your domains to 127.0.0.1.
4
Forwards ports 80/443 so the proxy listens on standard ports without needing root.
5
Reverse proxies requests with HTTP/2, WebSocket upgrades, and CORS headers.
Get started in seconds
Install Slim and set up your first .test domain in under a minute.
$ curl -sL https://slim.sh/install.sh | sh