App AI prices now match chat prices
AI used inside your hosted apps is now priced per model, exactly like the in-chat prices - one price book everywhere. Most models move to the standard rate; the flagship cards keep their premium pricing unchanged.
151 updates in the last 90 days.
New features, improvements and fixes, newest first.

AI used inside your hosted apps is now priced per model, exactly like the in-chat prices - one price book everywhere. Most models move to the standard rate; the flagship cards keep their premium pricing unchanged.
For almost two weeks, starting September 16, signing up with email on the Playcode website did not work. Sign-in codes had just become six digits long as part of a round of security hardening, and the code box on our website still accepted only five. The last digit was cut off, so the code could never go through. Sign-up inside the app was not affected.
It's fixed. If you tried to sign up in those days, go back to playcode.io and use the same email. The code works now.
We're sorry. Our automated tests missed this because they still typed an old five-digit test code. They type six digits now, the same as you.
One less switch to find. When your app's sending domain verifies, Send to anyone now comes on with it - your app can email customers right away, from your own domain, with one-click unsubscribe on every mail to a non-member. Before, verified-domain projects still had to discover the switch in Settings > Email; every one of them turned it on.
The switch stays where it was, as the off lever: turn it off and it stays off - for every app of the project, including ones created later. Nothing else changes: without a verified domain, delivery still goes only to recipients who confirmed their address, and the daily caps, suppression and unsubscribe protections run exactly as before.
We chased down a family of rare but painful loading failures - the kind where Playcode showed a spinner and simply never finished. All fixed today:
If loading ever felt stuck for you before - it wasn't your device, and it's fixed. Thanks to the users whose reports led us straight to it.
Your server can now hear Playcode. In Workspace settings, Developers gained Webhooks: add an endpoint and we POST every matching event to it - a domain changed, a publish started, mail delivered or bounced. Every delivery is signed with a secret we show you once; verify it, and replay protection comes from the delivery id. Failures retry on their own for about three days, and Send again runs one now. Filter by type, like domain.*, or take everything.
Beside it, Activity: every write in the workspace, the moment it happens - who did it, through which door (the app, the CLI, the API, an assistant), and what it touched. It is the audit answer for a token or a tool you let act as you.
The same ledger is on the API as eventSearch, so a script can follow your workspace with a cursor instead of polling each resource.
When you ask the assistant to add payments, subscriptions, or a checkout to your app, it now follows a Stripe playbook by default:
If your domain was connected with an A record - the way most DNS providers connect a root domain - turning on "Also answer at www" failed with a confusing error about Cloudflare, no matter what you changed at your provider. The www setting now follows how your root domain is served: flip the switch, add the one record it shows you, and www goes live on the same address as your root.
Claude Opus 5.5 is now the default model on the Quality tier. It is Anthropic's newest Opus, it keeps the 1M-token context window and the 128K maximum answer length of Claude Opus 5, and it costs less per token: $4 in / $20 out per million against Opus 5's $5 / $25, with re-read context dropping from $0.50 to $0.20 per million.
One thing to know about credits. Opus 5.5 thinks for longer before it answers. On our own benchmark it spends roughly 1.8 times as many tokens working through the same task, which more than cancels out the lower price per token - so a typical job costs somewhat more, not less. We chose it as the default anyway, because the work it returns is better.
Claude Opus 5 is still one click away in the model picker, and it is the cheaper of the two per answer. If you would rather trade some quality for a smaller bill, pick it - and anything you have already pinned to it stays exactly as it is.
OpenAI completed the GPT-6 family today, and both new models cost exactly half what their predecessors did. They take over the seats those models held in the picker.
GPT-6 Sol replaces GPT-5.6 Sol on the Quality tier, at $2 in / $10 out per million tokens instead of $4 / $20. OpenAI positions it as the balance of intelligence and cost, and its own testing puts it ahead of GPT-5.6 Sol on professional work, factuality and coding.
GPT-6 Luna replaces GPT-5.6 Luna on the Fast tier, at $0.10 in / $0.50 out instead of $0.20 / $1.20. That makes it the cheapest model we offer - good for simple pages, quick edits and high-volume work.
Both keep the 1M-token context window and the 128K maximum answer length of the models they replace, and we pass the full price cut through, so the same work costs fewer credits.
Nothing you have pinned breaks. GPT-5.6 Sol and Luna stay available to existing chats; chats and preferences set to them move to the GPT-6 equivalent automatically, which is cheaper for the same job.
Very rarely, the AI provider's safety filter refuses a request outright and returns nothing. Until now the chat showed an empty reply with no explanation, and the turn was still charged. Both are fixed:
Every popup in Playcode - confirmations, settings sheets, menus, tooltips - has been rebuilt on one design system, so the whole app now asks questions the same calm way.
Pro includes 100 GB of Playcode Cloud bandwidth a month and Max includes 1 TB. Until today those numbers were enforced as a hard limit: when a workspace crossed it, its published apps were suspended until the next month - with no warning. That was wrong, and it is fixed.
If your published apps were suspended by this limit today, they have been restored.
Two ways the sign-in window could leave you with nothing to press are fixed:
If a file you attached to the AI chat could not be uploaded, pressing Send used to do nothing - no message, no explanation. That is fixed:
When you uploaded an image and the AI moved it into another folder - for example into public - the image could turn blank, even though the AI said the move had succeeded. Images you upload now keep working wherever the AI moves them, and undoing a move restores them correctly.
Your workspace credits are now one balance for everything Playcode runs for you. Until today only the AI chat and agents drew credits.
keep, and for traffic beyond the included amount. A sleeping computer bills disk only. Each computer's rate is shown next to its hours in Settings > Usage.
their secret key - use credits too, at the model's rate.
Settings > Usage now shows all spending in one place: AI chat + agents, one row per project whose apps used the AI Gateway, Email, and one row per cloud computer, each with quantity × rate = credits. The period buttons at the top drive the whole page - today, this week, this month, all time - and the spending list names the period beside its total. Email alone is shown per billing cycle, because its included sends are a cycle allowance.
If your credits run out, AI requests pause until you add credits. Email beyond your plan's included sends is stored but not delivered until you do; included sends and mail to your own team always go out. Cloud computers keep running: we email you, and only if the balance is still empty 72 hours later do they pause. Nothing is deleted, and the same computers start again as soon as credits are added.
Nothing changes about how you buy credits, and your balance shows the same number in the editor, in Billing and in Usage.
If you published an app, or created a new one, after your workspace moved to a paid plan, turning on Send to anyone in Settings > Email could be refused with a message saying the workspace needed a paid plan, even though it had one. The AI assistant repeated that message and suggested upgrading.
Every affected app is fixed, and new apps now start with email delivery matching your plan. If you saw that refusal, Send to anyone works now: turn it on in Settings > Email, or ask the assistant to do it.
Open a JavaScript, TypeScript, React, Python, SQL or any other language template and the code is the first thing you see: the file tabs on top, the file tree on the left, the AI Chat right under the editor, and the live preview with the console beside them.
Before, every template opened with the chat alone and the code sat a click away in the menu.
Website and business templates keep opening chat-first: describe what you want, and the preview updates as you go.
Google's permission screen lets you continue without ticking the Search Console box. Before, Playcode still showed the account as connected, and every request the agent made on it came back with a permission error.
Now that connection is refused on the spot, and the Connections page says which permission to select before you try again. A connection granted that way earlier is marked as revoked within a couple of hours, with the usual Reconnect button.
Mobile projects get a Phone tab beside Preview (View, then Phone; on the phone it is in the project menu). It shows your app the way a phone sees it, a QR code to scan with your phone's camera, and one line that says whether the phone preview is running. The QR opens the app in your phone's browser: nothing to install, no account. A Browser | Expo Go switch turns it into the native preview for Expo Go when you want that; Expo now asks for the same Expo account on the phone and on the dev machine, and the chat walks you through it. When you are already on the phone, the tab has an Open on this phone button, and the address in a chat card is a link you can tap.
Your dev machine now has its own address. Anyone you give it to can use the app while the machine is on: your phone, a teammate, a client on a call, a webhook you are testing. The machine stays awake while the app is in use from any device.
Only you can turn it on: opening the project in Playcode wakes it, and so does the agent while it works for you. It goes to sleep after a quiet while, and after four hours without you or the agent. When the app on your phone finds the machine asleep, it shows a banner with one button that opens the project and wakes it.
The address is not a public link. Publishing still is: a published app keeps its permanent link that works for everyone, whether your dev machine is awake or not.
Your Profile settings now list every browser you are signed in on - the browser and system, when it signed in, when it was last seen - with Sign out on each row and Sign out everywhere else in one click. Signing out really ends that session on our side, so a lost laptop stays out.
Sensitive actions - buying a domain, changing your sign-in email, creating or revoking a token - now ask you to confirm it's you with the sign-in code when it has been a while since you last did. Everyday work never asks.
In Workspace settings, Developers gained a Signed in as you list: the tools you let act as you through Sign in with Playcode, the workspace each one may act in, what it may do, and Revoke to sign a tool out on every computer at once. The project's Secret key pane replaces API keys: the key your app already has, masked, copied on purpose, rotated when it leaks.
When you add your own sending domain in Settings > Email, the DNS records now show every field in full: Name, Value and, for the MX record, Priority, each with its own copy button. Before, the name was cut off on screen and only the value could be copied, so the long DKIM names had to be retyped.
Copy all records puts the whole set on the clipboard as labelled text, for a note or for whoever runs your DNS.
If your domain's DNS runs at GoDaddy or Namecheap, the names are shown the way those providers' Name field expects them, without your domain at the end.
When you move a domain's DNS to Playcode, the certificate for the bare name now follows the nameserver change as soon as it lands, instead of up to an hour later. The check that decides it reads the registry itself on every pass.
Settings > Domains tells you exactly what that check saw: which nameservers answer today, which ones they must be, and when we last looked. The old sentence that promised a fix "within minutes" is gone.
"Finish setup" on a domain whose DNS moved here opens the same three-step switch the connect flow shows: the values to paste, what the world reports while the change spreads, and the done card once everything serves.
Moving DNS to Playcode keeps a www that already points at your Playcode site, and the review list says plainly when an unchecked record would leave a name unanswered after the switch.
Turning on Send to anyone in Settings > Email now applies to your Development and Production computers at once. Before, only the published app was switched on, so a test send from the editor could still be held while the page said delivery was live.
Mail that was held before you switched it on no longer sits there: every held address now shows a Deliver button as soon as your domain is verified and Send to anyone is on, including addresses that were never added to your verified recipients.
Your sending domain verifies within seconds of the records going live, with nothing to click. The assistant can check a domain for you too, and reads each email under the computer it came from.
Adding a customer's address to Verified recipients now warns you first: that list is for your own inboxes, and each add sends the person a permission request. Customers are reached through your own domain.
A cloud computer keeps up to 20 checkpoints you own. When the assistant reached that number it used to refuse to take a new one, and a schema migration could go in without a rollback point. Now, at the cap, the assistant replaces its own oldest checkpoint and tells you which one it replaced. The checkpoints you saved yourself are never the ones replaced.
If the Checkpoint history dialog cannot open, it now says why instead of staying blank.
Giving your site an address you already own used to start with four tabs named after mechanisms. It now starts with the name. Type it, and Playcode looks up where it is managed and recommends the best way first:
your email keeps working, and you make one small change at your provider. Then never again.
lands.
for providers that cannot do the one above.
Each card carries a ? that says in one sentence what the setting is. On Cloudflare, the one setting leads and nothing pushes you off it. Moving the whole registration to Playcode is a quiet line under the first card, not a tab.
The setting card shows a live chip - *Not seen yet*, *Found*, *Live* - and turning on Also answer at www adds its one extra setting right there, same visit. The same flow runs for Playcode Cloud and Playcode Pages projects, and the workspace's Domains list now keeps watch on its own while anything is still setting up.
DeepSeek V4.1 Flash is now the DeepSeek Flash option on the cheap-and-fast tier, in place of DeepSeek V4 Flash. DeepSeek retired V4 Flash today and shipped V4.1 Flash on a new architecture that its own tests place ahead of DeepSeek V4 Pro - and it can now see images (V4 Flash was text-only), so screenshots and reference designs work on this model too.
It is also cheaper: $0.30 in / $1.20 out per million tokens, down from $0.44 / $1.32. We pass the cut straight through, so the same work costs fewer credits.
If you had DeepSeek V4 Flash selected as a default or on a chat, it now runs on V4.1 Flash automatically - nothing to change on your side.
Gemini 3 Flash remains the tier default.
Attach a document to the chat and the agent can work from it - no more re-saving a spreadsheet as CSV so it can be read.
the same way it sees an attached image.
Export a table from your project, edit the prices in Excel or Google Sheets, attach it back, and the agent updates the site from it.
This works in browser and Cloud projects, and for files you attached before today. Very large PDFs (over 100 pages) are not shown to the agent; it will ask you for the relevant pages instead. Legacy formats (.xls, .doc, .pptx) are not supported yet - save as .xlsx, .docx or .pdf.
The status chip next to a custom domain in Publish and in Workspace > Domains used to say only *Verifying* or *Action needed*. It now tells you why:
yet. This takes minutes, sometimes up to a day.
is on its way.
issued. Fix the records and we retry on our own.
Nothing to do.
The same reading applies to every domain, however it is connected, so two screens never disagree about the same address.
Two fixes for custom domains on Playcode Cloud.
Root domains now go live. A root domain (example.com, not www.example.com) needs one extra verification record at the edge before it can serve over HTTPS. When Playcode runs your DNS - a domain bought here, or one you moved to Playcode nameservers - that record is now added for you the moment you connect, and the edge is asked to check it right away. If your DNS stays at another provider, the connect dialog shows the record beside the routing record, and the assistant lists both.
Connections no longer get lost while you set up DNS. A connection made before a nameserver change had finished could be dropped as abandoned. Playcode now keeps every connection you make, checks it against the edge every few minutes, and restores it automatically while your domain points at Playcode. If a domain never points at Playcode for a week, you get one email and can reconnect any time.
The Domains settings and the assistant's domain status now say what the edge actually serves, not only whether DNS has landed.