Slim: localhost HTTPS tunnel for local development
Slim gives you clean HTTPS domains for local dev without the usual certificate headaches. It generates a local CA, installs it into your system trust store, and spins up HTTPS on any .test domain you choose. The slim.show public sharing feature is convenient, though it depends on their infrastructure. If you constantly fight browser warnings or need to test auth flows that demand HTTPS, Slim removes that friction entirely.
What is Slim?
Slim is a local HTTPS tunnel and reverse proxy for developers. It creates trusted HTTPS domains (myapp.test, app.loc) pointing to your local server, handles path-based routing to different ports, and includes a public URL sharing mode. At its core it is a CLI wrapping a CA generator, a certificate provisioner, and a reverse proxy.
Key features
- ✓Generates a local CA and trusted certificates automatically so browsers accept HTTPS without warnings
- ✓Maps custom .test or other TLD domains to your local ports with mTLS between client and proxy
- ✓Routes different URL paths on a single domain to different upstream ports
- ✓YAML config file (.slim.yaml) for defining all project services and options
- ✓Public URL sharing via slim.show with optional password protection and TTL
- ✓Built-in diagnostics (slim doctor), log tailing, and service listing commands
When to use Slim
- •Testing OAuth flows, secure cookies, and webhook integrations that require HTTPS
- •Sharing a local project with external collaborators via a temporary public URL
- •Running multiple services on different ports under a single clean domain during development
- •Defining all project services in a config file and starting them with a single command
Installing Slim
Run the install script directly: `curl -sL https://slim.sh/install.sh | sh`. To build from source, clone the repo, run `make build`, then `make install`. Requires Go 1.25 or later.
Running local HTTPS domains with Slim
Basic local domain: `slim start myapp --port 3000` creates https://myapp.test pointing to localhost:3000. Share publicly: `slim share --port 3000` gives a random slim.show URL. Manage services via config: place a .slim.yaml at your project root, then run `slim up` and `slim down`. Inspect running services with `slim list` and check diagnostics with `slim doctor`.
Strengths
- ✓HTTPS works locally without browser warnings — it auto-generates a CA certificate and registers it with the OS trust store, validated by `slim doctor`
- ✓A `.slim.yaml` file lets you define all services for a project upfront; `slim up` spins them all up at once with CORS and custom routing already configured
- ✓Path-based routing handles `/api=8080` and `/ws=9000` on the same domain, so multi-service frontends and backends share a single hostname during development
- ✓Public sharing via `slim.show` supports password protection, TTL-based expiration, and custom domains — useful for quick stakeholder previews without pushing code
- ✓Port forwarding (80→10080, 443→10443), hosts file entries, and cert renewal all happen automatically; `slim uninstall` wipes every trace cleanly
Limitations and things to know
- △Public sharing via slim.show is not self-hostable — you rely on their infrastructure
- △The README explicitly warns against .local TLDs due to slow DNS resolution on macOS and Linux from mDNS
- △Each command invocation requires specifying --port unless you define services in a config file
Alternatives to Slim
Frequently asked questions
Run `curl -sL https://slim.sh/install.sh | sh` to install via the official script. Alternatively, clone the repository, run `make build`, then `make install`. Building from source requires Go 1.25 or later.
Yes. Slim is licensed under PolyForm Shield 1.0.0, which the README states permits both personal and commercial use.
Run `slim uninstall` — the command removes the CA certificate, all host entries, port-forward rules, and config files. This restores your system to a clean state.
The README documents commands for macOS and Linux. It mentions that .local TLDs cause slow DNS resolution on macOS and Linux due to mDNS, which implies Windows is supported but the experience differs. Windows compatibility is not clearly documented.
Use `slim share --port 3000` to get a random public URL like https://cheeky-panda.slim.show. Add `--subdomain demo` for a specific subdomain, `--password secret` for protection, or `--ttl 30m` to set an expiry time.
Yes. Pass the full domain to `slim start`, for example `slim start app.loc --port 3000`. Avoid .local — it is reserved for mDNS and causes slow DNS resolution on macOS and Linux.
The problem it solves
Browsers block self-signed certificates, so testing HTTPS-dependent features like OAuth callbacks, secure cookies, or webhook integrations locally means either trusting certs manually or clicking through security warnings every time. Organizations with strict browser policies may not allow that workaround at all. Slim solves this by provisioning a trusted CA certificate and installing it system-wide so you get clean HTTPS without touching browser settings.
Who should try it — and who should skip
Reach for Slim if you test anything that requires HTTPS on a custom domain: OAuth callbacks, secure cookies, CSP headers, or browser APIs that gate features behind HTTPS. It is also useful for sharing work-in-progress with clients or external collaborators without deploying. Skip it if ngrok already covers your tunneling needs or if you only need HTTP localhost access.
Want a second opinion on slim?
Ask an AI that can read this page — one click and you get its take on slim.
