Repository navigation
0.4.0 - 2026-10-20
Release Notes
Parcela runs each environment's processes itself, so Process Compose is no longer needed; only Caddy is. parcela.yaml does not change. Before upgrading, run parcela down --all-projects and parcela proxy stop: environments and a proxy started by 0.3 or earlier cannot be stopped, taken over or reached by 0.4.
Added
up --lanandup --tailscale(andrestart) also serve one environment to other devices: at.localnames on the LAN through mDNS, or on the tailnet throughtailscale serve.PARCELA_SHARE_HOSTSlists the shared hostnames for a dev server's host check.- Colors on a terminal: help, errors, and a color per process in
parcela logs.NO_COLORturns them off. hooks.teardownruns onparcela rm, for example to drop the environment's database. A failed teardown keeps the environment registered.install.shalso installs Caddy into~/.local/binwhen no supported version is onPATH, checking the download against its release checksums. It checks Parcela's own download the same way, on macOS too, prints how to add~/.local/bintoPATHinstead of editing shell profiles, and lists the files it wrote.--helplists its options.parcela logs --followstreams new lines from every process, or one.-dis short for--detach.parcela logsworks afterdowntoo, until the next run: each process writes tolog/processes/<name>.login the runtime directory, cut to<name>.log.1past 16 MB.- Nightly builds of
main:install.sh --nightlyinstalls the newest one. Builds other than a release tag report the commit in--version, like0.3.0+20261019.4fed620. - The first
upin a terminal trusts Parcela's certificate authority when it is not trusted yet, behind the system password prompt, once per authority. Never without a terminal;PARCELA_NO_TRUST=1turns it off. parcela proxy installon macOS makes URLs portless (https://hello.localhost): launchd owns 127.0.0.1:443 and relays each connection to the proxy as you.uninstallremoves it, and refuses a user name that could change the service it installs.http.wildcard: truesends every subdomain of a service's host to it, for subdomain-per-tenant apps.--lan-ippicks the LAN address for--lan. Both refuse a public address.PARCELA_LAN=1andPARCELA_TAILSCALE=1work like the flags.- A JSON Schema for
parcela.yamlathttps://parcela.davafons.com/schema/v1.json, generated from the parser.parcela initadds the line editors use to find it.
Changed
- Parcela supervises the processes: each runs with
bash -c(orsh -c) in its own process group, starts once its dependencies are ready, and stops in reverse dependency order, SIGTERM then SIGKILL after 10 seconds. Until the environment is first ready, a failed hook, an exited HTTP service or a process that exits nonzero stopsupat once and names it, instead of waiting for the readiness timeout. Foregroundupprefixes each line with its process's name. - If an owner dies, the next
up,downorrecoveradopts its processes by their recorded birth identity, anddownstops ones that outlived it instead of refusing. - On macOS, sockets live in the per-user temporary directory instead of
/tmp/parcela-<uid>, so another user cannot block Parcela by creating that directory first. - Removed: the hidden
--process-composeoption,parcela doctor's Process Compose check,child_pidinstatus --json, andlog/process-compose.log. A detached owner'sowner.logholds process output only until the run is first ready. status --jsonprocess states are exactlypending,running,stopping,restarting,completed,exitedandskipped, instead of Process Compose's names.- The proxy listens on one HTTPS port, and URLs leave it out when it is 443. The forwarded "standard ports" mode and its port-80 listener are gone.
--portaccepts any port the system lets a normal user listen on. - If the proxy dies while environments run, they start it again within a few seconds.
parcela proxy stopstill stops it for good. restartpicks up added, removed and renamed services;downandupare no longer needed for that.upon a ready environment prints its URLs and exits 0, likedocker compose up -d.- Clearer errors: a readiness timeout says what each service answered, a busy
--backend-portnames its holder, and an unknown service or task lists the valid names. --helplists the global options in their own section.status --allis gone; usels.
Fixed
- Readiness checks stop once a service is ready, so they no longer fill its log.
--backend-portalso refuses a port another program holds on0.0.0.0or[::], naming the holder before anything starts.- Long branch and workspace names are cut to fit a hostname, ending in a short hash, instead of failing
up. - An
upinterrupted or killed before it launched anything no longer leaves the environment stuck as starting: Ctrl-C during startup stops it cleanly, and the nextupordownreleases its ports.
Install parcela 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/davafons/parcela/releases/download/v0.4.0/parcela-installer.sh | shDownload parcela 0.4.0
| File | Platform | Checksum |
|---|---|---|
| parcela-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| parcela-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| parcela-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| parcela-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |