Get doze. Keep your fans quiet.
doze is an app first: one window for every stack on your machine, with the command line inside it. Free, Apache-2.0, no account. We guessed your machine from your browser; the others are right beside it.
Download doze for Mac
Doze.app for Apple silicon: the window, the bat in your menu bar, and doze on your PATH. Quit the app and your stacks keep running. What happens when you open it ↓
$ brew install --cask doze-dev/tap/dozeLinux
x86_64 and arm64. The CLI runs on any glibc distribution. The app's packages are built and being tested on real desktops. [deb and rpm at launch: confirm]
$ curl -fsSL https://doze-dev.com/install.sh | shJust the command line
For servers, CI and terminal people. Same doze, no window. Install the formula or the cask, not both: they conflict.
brew install doze-dev/tap/dozemise use -g ubi:doze-dev/dozechecksums.txt on GitHub releases. From source: clone the repo, then make build (Go 1.27+ and bun). go install is not a way in: the module carries a replace for a patched Wails.Open it. One password, once.
The installer copies the app and puts doze on your PATH, and asks nothing. The one question comes from the app, when you open it, and you can say no.
- The Library opens.Home for every stack on this Mac. On a fresh one: three steps (open a project, bring it up, connect to it) and two ways in, drop a project folder or start empty. The bat joins your menu bar and stays when the window closes.
- The Machine line offers Set up (one password).It gives every service a name like
gateway.larder.doze, so two projects can both use 5432. It is the same setup asdoze doctor --fix, behind macOS’s own administrator prompt (polkit’s, on Linux), and it adds the two things listed below. Skip it and everything still runs, on 127.0.0.1 with ports. - Nothing starts until you flip Up.Opening a folder never starts it. A folder with no doze.hcl shows what doze found and three ways to start, and each only writes the file.
- A second prompt only for your own domain.If a stack declares
domains,doze trust(or the stack’s banner in the app) routes them and trusts a certificate authority of this machine’s own. Your own domain, over https →
Will it run on mine?
Coming from 0.1.1?
Update doze first, then your modules. 0.1.1 can't read a module release's oldest-doze field, so doze modules upgrade on 0.1.1 could pick a release it can't run.
$ brew upgrade doze $ doze modules upgrade
postgres "db" {} becomes module postgres "db" {}idle_timeout becomes sleep, and the default is 2 minutes, not 5.What doze changes on your machine.
Two at install, one at first launch if you say yes, all listed here, all undone by four commands. No kernel extension, no telemetry. The app asks GitHub for a newer doze only when you open Settings › About.
doze on your PATHA link to the binary inside the app, so the CLI and the app are always the same version.gateway.larder.doze (the gateway in our example project, Larder), and two projects can both use port 5432. On a Mac it adds two things:/etc/resolver/doze, which sends the .doze zone to doze's resolver and nothing else.dev.doze.netd, a small network daemon that gives each service a loopback address of its own.
doze-netd systemd unit and a drop-in for your DNS manager. Only doze uses it: doze AWS and doze Kafka, run on their own, listen on 127.0.0.1 and need none of this. Skip it and everything runs on 127.0.0.1.doze trust makes a certificate authority for this machine. Its key stays in ~/.doze/ca, readable by you alone.Take it all back
Run these in order. The last one deletes every engine, every module and every project's data under ~/.doze, so keep it for when you mean it.
Still on 0.1.1? It installed none of the above:
$ brew uninstall doze $ rm -rf ~/.doze
$ doze dns-setup --uninstall # resolver file, daemon $ doze trust --remove # if you used domains $ brew uninstall --cask doze $ rm -rf ~/.doze # all data
Verify your download.
Every release on GitHub carries checksums.txt with the sha256 of each file. Doze.app is signed with a Developer ID and notarised by Apple, so it opens without a warning.
Engines and modules that doze downloads later are signed too, and checked before they run.
How signing works →# in the folder you downloaded to $ shasum -a 256 -c checksums.txt \ --ignore-missing Doze-0.2.0.dmg: OK
$ spctl -a -vv /Applications/Doze.app # accepted # source=Notarized Developer ID # origin=Developer ID Application: # [team name]
Then
Your first stack, in the app.
The first Up downloads the engines the stack needs, so give it a minute. After that it starts in seconds, and works offline.
- 1
Open doze
The Library is home for every stack on this Mac. On a fresh one it shows three steps and two ways in, and the Machine line offers the one-password setup that gives your services names.
Drawn from the app's own screen · capture pending - 2
Drop your repo folder on it
doze reads the folder’s go.mod and Go imports, package.json, compose files, a Makefile and the variables the code asks for, like
Drawn from the app's own screen · capture pendingDATABASE_URL, and lists what it found and where. Here, Larder’s gateway, before it had a doze.hcl. Nothing starts. Set it up from this repo writes doze.hcl, with the reason above each block. - 3
Flip Up
One switch brings the stack up, each service after what it needs; what nobody calls goes to sleep. Next time Up starts what you had up last time. The menu beside it offers Start everything or Choose what starts…: tick the apps you’ll work on, and what they need comes too.
Drawn from the app's own screen · capture pending
Prefer the terminal? doze init && doze up in the folder does the same, and the app shows the stack either way.
From a terminal instead
The same three steps. doze init reads the repo the way the app does. Or borrow our example project, Larder, a made-up grocery service in Go, Python and TypeScript, and stock its shelves once.
$ cd your-project $ doze init $ doze up
$ git clone \ https://github.com/doze-dev/doze-examples $ cd doze-examples/larder $ doze up $ doze task seed-catalog