#Changelog
What's new in CoDuck, newest first. Platform changes (hosting, deploy, the
API, the web app) are live on coduck.ai / api.coduck.ai as soon as they
land. CLI changes ship in an @coduckai/cli release — run
npm i -g @coduckai/cli@latest to get them, and coduck --version to check
what you have. SDK changes ship in an @coduck/auth release — run
npm i @coduck/auth@latest in your project to upgrade.
Agents: if a deploy behaves differently than you expect, scan the Platform section first — behavior may have changed. The machine-readable copy of this page is at
/docs/raw/changelog.md, and it's indexed in/llms.txt.
#Platform — 2026-05-26
- Settings → Billing shows your plan + credit burn rate. The top of the billing panel now displays "Your plan: Pro / Plus / Studio" (or "Free — not subscribed"), and the credits line shows "$5.00 / $20.00 this month" so you can see how much of your monthly allowance is left. Top-up balance is shown separately because it doesn't have a monthly cap and never expires.
- The pricing page now knows what plan you're on. When you're signed in and subscribed, your plan card shows a "Current" badge and its button is disabled with "Current plan" text. The other paid cards relabel as "Upgrade to X" or "Downgrade to X" so the action you're about to take is obvious before you click.
- Pricing page layout cleanup. Pro / Plus / Studio now sit in their own three-column row as the self-serve options, with Enterprise broken out as a slim "Contact sales" row beneath. Each of the three main plan cards has more room to breathe, and Enterprise no longer looks like a fourth equal-weight option.
- Switching plans now actually works for existing subscribers. Previously, clicking any plan card on the pricing page or in Settings → Billing while you were already subscribed silently failed (the request came back as "Already subscribed"). The buttons now route you to the Stripe customer portal — the right place to switch up or down, change your card, or cancel — and the click goes through immediately.
- Settings → Billing buttons now say "Upgrade ↑" or "Downgrade ↓" depending on whether the plan you're clicking is above or below your current one. Previously they all said "Upgrade" regardless, so a Studio user looking at the Plus card was told to "upgrade" to a cheaper plan.
- Settings → Billing no longer shows a "Free" plan card. CoDuck's hosting is paid-only — a free account can't deploy a project at all — so listing Free as a "plan" next to Pro/Plus/Studio was misleading. The billing page now shows just the three real plans you can subscribe to. If you're not subscribed, no plan card is highlighted as your current one (the Credits remaining panel above still shows your true balance).
- New Plus plan ($100/mo or $1,000/yr). A middle tier between Pro and Studio for builders shipping more than they thought. Plus gets $100 of AI credits per month, Lake hosting (1 GB database), and a 15,000-emails- per-month send limit — slotting cleanly between Pro (Pond / 100 MB / 5k emails) and Studio (Ocean / 5 GB / 50k emails). Annual billing saves $200/year (2 months free).
- Pricing cards now list what you actually get. Every plan card on the pricing page and in Settings → Billing now shows credits, hosting tier name, database size, monthly email-send cap, and key features — instead of a one-line tagline. The numbers are the same values the platform enforces, so what you see on the card is what you get.
- Settings → Billing "Top up credits" section refreshed. Clearer heading and description so it's obvious that top-up credits stack on top of your monthly subscription and are spent first. Each amount button now shows the credit value ("$20 credits") rather than the generic "one-time" caption. Plus subscribers can top up too, not just Pro and Studio.
- Billing page in Settings now lets you upgrade to Studio. The Studio plan ($200/mo — same product as Pro, 10× the runway) is now visible alongside Free and Pro under Settings → Billing. Clicking Upgrade → on either Pro or Studio goes straight to a Stripe Checkout for that plan.
- Add Credits buttons in Settings → Billing fixed. The top-up grid now shows $5 / $20 / $50 / $100 and each one works — previously the buttons offered amounts CoDuck didn't accept, so clicks failed silently. Studio subscribers can now top up too (it used to be Pro-only).
- Out-of-credits modal: top-up buttons fixed. When you run out of credits mid-build, the four quick-top-up buttons inside the paywall modal ($5 / $20 / $50 / $100) now correctly open Stripe Checkout — they were previously hitting a route that didn't exist and 404'ing. The "Subscribe to CoDuck Pro" button next to them was unaffected.
DATABASE_URLnow works for every Postgres client, not just Prisma. Before today, apps usingnode-postgres,pg,drizzle-orm,knex, orsequelizewould hitbouncer config errorwhen trying to query throughDATABASE_URL(the pooled path at127.0.0.1:6432) and had to fall back toDIRECT_URL— which has no server-side pool, so bursty traffic could exhaust it. PgBouncer is now configured with server-side prepared statements enabled, so prepared-statement-using clients work on the pooled path alongside Prisma. UseDATABASE_URLfor runtime queries regardless of stack;DIRECT_URLis only forprisma db push/prisma migrate deploy.- New runtime docs page: Runtime architecture
documents the container model,
--network=hostnetworking, exactly what host:portDATABASE_URLandDIRECT_URLpoint at, and a[!WARNING]about a footgun — don't runDROP SCHEMA public CASCADEon your project DB. That command destroys thepublic.user_lookup()function PgBouncer needs for connection auth (and theUSAGEgrant on the schema). If you've already done it and you're seeingbouncer config error, contact support to restore it.
#Platform — 2026-05-25
coduck.jsonis honored on every deploy. Yourinstall,build,preStart, andstartcommands are re-read fromcoduck.jsonon each deploy and run as declared — previously the container always ran a hardcodednpm install→npm run build→npm start. Notes:preStartruns after build, before start — the right place for DB migrations (e.g.prisma migrate deploy). Declaring it also disables CoDuck's automaticprisma db push, so you own schema setup.- Set any command to
""to skip that step (e.g.build: ""for a no-build app). - Monorepo note: this only takes effect once your CLI delivers
coduck.jsonto the server — see the CLI 0.1.11 entry. Older CLIs pushing a subdirectory did not upload the repo-rootcoduck.json.
- Specific deploy-failure messages. A failed deploy now tells you the cause
instead of one generic "crashed before becoming healthy":
- out of memory → "retry on a bigger instance:
coduck deploy --size large" - build failed → fix the error and redeploy
- wrong port → "bind the port CoDuck assigns — use
process.env.PORT" - crashed after start → check
coduck logs
- out of memory → "retry on a bigger instance:
- Faster reinstalls for imported apps. Projects with no
@coduck/*dependency now reuse the cachednode_modulesacross deploys instead of a full reinstall every time (the cache-bust only runs for projects that use the CoDuck SDK). - Instance sizes.
coduck deploy --size small|medium|large(orinstanceSizeincoduck.json) selects more build/runtime RAM + CPU; medium/large require a Pro/Studio plan. The Node build-heap ceiling now uses the container's full RAM, fixing out-of-memory builds for heavy client bundles (three.js, remotion, recharts, …). - Reserved env keys. The set of keys CoDuck manages (
DATABASE_URL,PORT,NODE_ENV,CODUCK_*, …) is complete and rejected clearly on write. List them withcoduck env reserved. The managed Postgres starts empty — reach it atDATABASE_URL/DIRECT_URLand bootstrap your schema inbuildorpreStart.
#CLI — Unreleased (0.1.11)
Merged; ships on the next @coduckai/cli publish.
- Monorepo
coduck.jsondelivery. A subdirectory push (dir: "./web") now uploads the repo-rootcoduck.jsonto the server, so the platform's deploy-config honoring (above) actually applies to monorepo layouts. Repo-root.gitignore/.coduckignoreare honored for subdir pushes too. coduck env importno longer aborts on the first reserved key — it skips reserved/invalid keys with a warning and imports the rest. Newcoduck env reservedlists managed keys.pushhonors.gitignore(plus sensible defaults:node_modules,.venv, build output, caches).push --dry-runprints a size summary + biggest dirs instead of a full file manifest.- Resilient push.
pushauto-retries transient network errors;deploywarns when your last push failed or local files changed since it. - Logs filters.
coduck logs --since <30m|1h|…>and--grep <pattern>. coduck --versionreads the installed package version correctly (no longer under-reports).
#CLI 0.1.10
coduck deploy --sizeandcoduck.jsoninstanceSizefor instance-tier selection.
#CLI 0.1.9
- Chunked
pushfor large projects (no more 413s) and.coduckignoresupport.
#CLI 0.1.8
coduck db import <file>— upload a SQL dump to the project database.
#CLI 0.1.7
- Real
coduck pushandcreate-existing --push --deploy; fixedcoduck logs. - Browser-based device login (
coduck login) — the CLI never sees your password.