Open a real name.
app.example.test
The browser resolves .test to your host and connects over trusted HTTPS.
Open-source development infrastructure
Stable .test names for projects running in containers, VMs, WSL, or remote machines. One host handles DNS, certificates, and routing.
testd run app.example:3000
:3000DNS + TLS + proxyHTTPS00 / THE PREMISE
Development already has enough moving parts. Your naming layer shouldn’t add more.
/etc/hosts edits01 / HOW IT WORKS
Run the daemon on the machine with your browser. Each dev environment registers over a single outbound connection.
app.example.test
The browser resolves .test to your host and connects over trusted HTTPS.
Resolves the name, mints a short-lived certificate, and proxies to the live target.
testd run :3000
Your app remains in its container, VM, WSL instance, or remote box. HMR works too.
The connection is the lease. Stop the process or close the terminal, and its names disappear. No stale routes. No cleanup job.
Claims, grants & tokens02 / AT A GLANCE
The loopback dashboard keeps the useful things close: names, targets, shares, access requests, tokens, and certificate health.
Updates stream in without a reload.
Read-only without its per-run control token.
Also available from the cross-platform tray app.
10.0.0.5:300010.0.0.5:8080127.0.0.1:4173mara@devbox:exampleworker.example03 / THE DETAILS
Purposeful defaults for everyday development, with escape hatches when your setup gets interesting.
A local CA mints leaf certificates on demand. They live for 24 hours; the root key never leaves your host.
Connect containers, VMs, WSL, and remote boxes. Named profiles remember your hosts; reconnects reuse approved grants.
Approve a new environment once. Issued tokens cover exact names, persist across reconnects, and can be revoked without disturbing others.
Read the trust modelnpm run devStart projects from the dashboard or tray. testd can detect the listening port, probe the target, and register when it is ready.
05 / CLEAR BOUNDARIES
No account system. No central service. No telemetry, usage reporting, or name reporting.
Your CA private key remains on the host, never in a dev environment.
Administrative actions need a per-run token. The edge never proxies the dashboard.
Remote leaves can target only their own address unless you explicitly opt in.
Registration uses plain TCP. Use a trusted network or encrypted transport; never expose :7737 publicly.
06 / QUICKSTART
Set up the host once. Then give every project a name with a single command.
Download a releaseCreate the local CA, configure the resolver, and start the daemon.
Run the command where your app lives. Add your dev command after -- to tie their lifetimes together. A new remote environment asks for one approval on the host.
Your browser gets a stable, trusted URL. Keep the command running; stop it to release the name.
https://app.example.test# once, to prepare this machine
testd init
testd doctor --fix
# keep the host running
testd host
testd run app.example:3000 \
-- npm run dev
testd run --host 192.168.1.5 \
app.example:3000 -- npm run dev
Installing from source? Clone the repository and run cargo install --path .. Linux port 443 requires a capability or a high port. Full installation notes
MADE BY LAPILLI WORKS
Lapilli, Latin for “little stones”: fragments formed in a volcanic eruption.
We are a software studio making considered software and SaaS: good design, high quality, a human touch, and an unconventional point of view.