Candor Deploy v1.2.23
- Change your password from your account page. Account → Password lets you set a new password with your current one, or email yourself a link to set one if you sign in with a code or have forgotten it.
Changelog
Everything notable we ship, in plain language — including the things we got wrong and fixed. We publish the fixes as readily as the features, because a changelog that only lists wins is marketing.
supabase and the generated password, masked until revealed). Studio
was there and protected all along; nothing told you where it was or how to
get in.{generate: …} value
in your .candorfile is minted by us and exists nowhere else — both are now
treated as secrets, so the environment screen and the Claude connector show
the name and withhold the value, exactly as they already did for anything
you marked secret yourself. Your app still receives them unchanged, and a
plain literal from your .candorfile stays readable, since it is sitting in
the repository you committed.POST /v1/orgs/{slug}/projects now. The old POST /v1/workspaces answers 410 Gone
and names its replacement. Your existing CLI token keeps working — it was
migrated to a token scoped to the project it already reached.A deploy could build fine and then never come up — and sit there saying “deploying” until you gave up on it. Now we diagnose it and say so: the container exited immediately, or it crashed on startup, or it never became ready, with the exit code and the last lines of its output.
We also stopped requiring you to know your start command. We detect it from your project, tell you what we detected, and if we genuinely cannot work it out, we say that plainly rather than guessing and failing strangely.
Push to any branch other than the one your service tracks — or open a pull request — and Candor Deploy builds that commit at its own URL. Production is untouched. Pushing again updates the same URL, so a link you paste into a pull request keeps working.
Previews get your production environment variables except the ones you marked secret, which are never copied into a preview. Give previews their own values under Environment → Preview.
They clean themselves up: a preview disappears when its pull request closes, when its branch is deleted, or after seven days with no pushes. Your plan includes a set number at a time, shown on the Previews tab, and each one runs in 256 MB.
A Protection tab on every app and static site. Set a per-visitor request rate, or allow/deny specific IPs and ranges. Changes apply at our edge in seconds — no redeploy, no restart, no downtime.
Being straight about what this is: edge rate limiting and IP filtering. It is not a WAF, and we will not call it one. Blocked requests show up as 4xx on your Analytics tab so you can see it working.
Apps behind our edge were receiving an internal cluster address as the client IP rather than the visitor’s real one. Anything you built on the client address — rate limiting of your own, geo lookups, audit logs, abuse handling — was working from the wrong value.
Fixed at the edge with no downtime. Your app now sees the visitor’s actual IP, and so do the new rate limits and IP rules.
Add a cron schedule and a path, and we call that path in your app on time, every time. Run history and a run-now button are in the portal, so you can see what fired and when instead of guessing.
Requests carry a header secret so only we can trigger them, and they go to your app’s internal address — never through the public internet. How many you get is published on the tab, not discovered when one silently stops.
Logs were a wall of raw text. They now parse into rows with timestamps and levels, filter by level, search as you type, and live-tail. Structured JSON logs are unwrapped so you read the message, not the envelope.
Separately, a project can serve every one of its services under one domain, with each service answering on its own path. Your frontend and your API on the same origin, which is what most apps want and what removes a class of CORS problems entirely.