Troubleshooting
Start with these two commands. Most problems show up in one of them:
parcela doctor
parcela statusThe browser warns about the certificate
Your system does not trust Parcela's local certificate authority yet. Run parcela trust once, then restart the browser. For curl, pass --cacert "$(parcela trust --print)". Don't use curl -k. It hides real certificate errors.
The proxy port is busy
parcela: port 1443 is already in use by Python (pid 57668); choose another port with `parcela proxy start --port <n>`Another program listens on the port. Parcela never stops it. Stop it yourself, or pick another port with parcela proxy start --port 4443. Parcela saves the port for later starts.
up times out
parcela: not ready after 60s: web: GET /up returned 404With --detach, the same message comes from the background owner, under the last lines of its log:
parcela: last lines of /Users/you/.local/state/parcela/environments/<id>/log/owner.log:
web | Listening on http://127.0.0.1:3000
parcela: not ready after 60s: web: GET /up returned 404
parcela: services stopped before they were ready; full log: /Users/you/.local/state/parcela/environments/<id>/log/owner.logThe message says what each service did instead: nothing listens on its $PORT, a status code, or that another process holds the port. Check that its command:
- listens on
$PORT, not a fixed port, - binds
127.0.0.1, - answers its
http.healthcheckpath with a 2xx status.
parcela logs web shows the service's own output, also after the environment stopped.
A hook failed
parcela: hooks.setup failed with exit code 1; its output is aboveThe setup or prestart command exited nonzero, so no other service started and the environment stopped. Its output is printed above the error, prefixed with setup |, and parcela logs setup shows it again. Fix the cause and run parcela up again. A setup that failed runs again on the next up. parcela up --setup reruns one that already succeeded.
The URL answers 503
The environment is registered but not running, or it is still starting. Run parcela status. If it says stopped, run parcela up --detach.
Another device cannot open a shared URL
Run parcela status and look at the parcela-lan-* and parcela-tailscale-* processes. parcela logs parcela-tailscale-web shows why one stopped.
- A
.localname does not resolve. The device must be on the same network, and some guest or office Wi-Fi blocks mDNS. After the laptop changes networks, runparcela restart --lan. - The page says the host is not allowed. The dev server refuses the shared name. Add
PARCELA_SHARE_HOSTSto its allowed hosts, as shown in the CLI guide. --tailscalerefuses to start. It says what is missing: the CLI,tailscale up, or HTTPS certificates in the tailnet's DNS settings.
The dev server rejects the host
Rails, Django and Vite accept *.localhost names in development by default, but not the .local and tailnet names of --lan and --tailscale, nor any name once you set an allow list yourself. Add the names from PARCELA_SHARE_HOSTS, or derive them from PARCELA_URL. Frameworks and data shows the setting for each framework.
Safari searches instead of opening the URL
Type the scheme: https://shop.localhost:1443. Without it, Safari may treat shop.localhost:1443 as a search.
A preview name is taken
parcela: preview name signup is already used by /Users/you/code/signup; choose another with --name <name>Another checkout owns that name. Start this one with another name: parcela up --name signup-2. To free the name, stop the other checkout and run parcela rm in it.
A checkout keeps its old name
Parcela remembers a checkout's name after the first up. To rename it, run parcela down, parcela rm, then parcela up --name NEW. The renamed checkout gets a new runtime directory, so move any files you keep in PARCELA_RUNTIME_DIR yourself.
logs has nothing to show
parcela: no logs yet; run parcela up firstlogs reads what the latest run's processes wrote, so it works while the environment runs and after it stops, until the next up. A checkout that never started has none. Parcela's own messages from a detached start are in log/owner.log in the environment's runtime directory.
The proxy is from another Parcela version
parcela: the running proxy is from Parcela <old>, this is <new>; run `parcela proxy restart` to update itYou upgraded Parcela while the old proxy was running. It keeps serving. Run parcela proxy restart when nothing needs the URLs for a moment.
The state is unknown
Parcela lost contact with the process that supervises the environment, for example after a crash. Run parcela up. If the services are still running, up takes control of them again without restarting them. If they are all gone, it starts them fresh. If up says the run was being stopped, finish the stop with parcela down, then run parcela up.
If down says shutdown incomplete: a process did not exit, a process outlived the shutdown timeout. Run parcela down again: it stops whatever is left, by the process identity Parcela recorded.
Don't kill processes by PID or delete files in the state directory to fix this. Parcela refuses to act when it cannot prove which processes it started, and it keeps the record so nothing is lost.
Something else
Run parcela status --json and read its diagnostic field. Report bugs at github.com/lostcoords/parcela/issues with that output and the matching owner.log.