Local HTTPS for every dev server

Your own lane after the dot.

Dotlane gives every local project a real, trusted HTTPS address: https://myapp.traix instead of http://localhost:5173. Any language, any framework, one command.

https://myapp.traix

Why

Develop like it's production

localhost ports collide, change and behave differently from the real thing: no Secure cookies, no secure-context APIs, OAuth redirects that cannot match. Dotlane fixes the address, and leaves your dev server alone.

Trusted HTTPS

A local certificate authority your Mac trusts, so browsers, curl and your tools accept every site with no warnings.

Any language

A site is a name and a port. Python, Node, Go, Ruby, Java, Rust or a container: started however you already start it.

About a second per site

Setup asks for your password once. After that a new address is one command, ready when it prints.

One file per project

Commit a dotlane.toml; everyone on the team runs dotlane up and gets the same addresses.

A doctor that names names

dotlane doctor checks every piece and says which tool holds a port, with the command that fixes it.

This Mac only

Requests from other machines are dropped without an answer. Nothing listens as root.

How it works

One program, three jobs

Dotlane is a small service that runs as you, at login. It answers DNS for its domain ending, holds a certificate authority, and proxies each name to its port.

Name

The OS sends only *.traix lookups to Dotlane, which answers 127.0.0.1. Every other lookup is untouched.

Certificate

Dotlane presents a certificate for the name, signed by its local authority, which your system trusts.

Proxy

The request goes to localhost:5173. WebSockets and live reload pass straight through.

Pages, not errors

A name with no site, or a dev server that is down, gets a page from Dotlane saying so, and what to run.

Install

Set up once, then forget it

Build the binary, then let dotlane install set up the service, the certificate authority and DNS. Every step that needs your password is explained before it runs.

Status: macOS today, built from source with Go. Homebrew and npm packages, Linux and Windows are on the roadmap.

  1. Build

    git clone https://github.com/dotlane/dotlane && cd dotlane
    go build -o bin/dotlane ./cmd/dotlane
    ln -sf "$PWD/bin/dotlane" ~/.local/bin/dotlane
  2. Install

    dotlane install   # login service, CA trust, DNS for .traix
  3. Serve a dev server

    dotlane add myapp 5173
    # ✓ https://myapp.traix → localhost:5173

Projects

Addresses that live with the code

List a project's sites in dotlane.toml and commit it. dotlane up serves them from anywhere in the project; dotlane down removes them.

Each site remembers the project that registered it. A name another project already uses is reported, never silently taken over.

# dotlane.toml
[sites.myapp]
port = 5173

[sites.myapp-api]
port = 8000
$ dotlane up
✓ https://myapp.traix → localhost:5173
✓ https://myapp-api.traix → localhost:8000

Commands

Small on purpose

CommandWhat it does
dotlane add <name> <port>Serve https://<name>.traix from localhost:<port>, ready when it prints.
dotlane rm <name>Remove a site.
dotlane ls [--json]List sites, their ports and the project that owns each.
dotlane upServe the sites in the nearest dotlane.toml.
dotlane downRemove the sites this project registered.
CommandWhat it does
dotlane installLogin service, certificate trust and DNS; checks for conflicts first. Safe to re-run.
dotlane doctor [--fix]Check every piece, name what is in the way, repair what it can.
dotlane uninstall [--purge]Undo install; --purge also deletes sites and keys.
dotlane migrateMove from the Caddy + dnsmasq prototype, keeping its sites and trust.

FAQ

Questions

Can other people on my network reach my dev server?

No. Dotlane answers only requests from this machine; anything else is dropped without a response. The DNS answers only for the domain ending, and only on this machine.

Does anything run as root?

No. The service runs as you. The password is needed once, to trust the certificate authority and to route the domain ending's lookups, and both steps are shown before they run.

Why .traix? Can I use my own ending?

It is the default. Set tld (or several, tlds) in ~/.config/dotlane/config.toml and run dotlane install again. .local is refused because macOS uses it for Bonjour.

Which systems does it run on?

macOS today. Linux and Windows, and Homebrew and npm packages, are planned.

What about PHP?

Any PHP server on a port works now, including PHP's built-in one. Serving a folder of PHP files directly is planned.

Node rejects the certificate on server-side requests.

Node does not read the system's trust store. Point NODE_EXTRA_CA_CERTS at Dotlane's root certificate; the troubleshooting guide has the path.

How do I remove it?

dotlane uninstall removes the service, the certificate's trust and the DNS routing; --purge also deletes your sites and the keys.