A static site with many pages publishes again. Before, a large site could stop at the build: Publish showed "transaction timed out" or a memory error, and the live site kept its old version.
Now: a site with dozens of pages builds and publishes.
Shared styles are one file. Pages that use the same stylesheets now share one CSS file. A visitor's browser loads it once, not again on every page, and each publish uploads less.
A large file no longer holds up the rest. Other files upload while a video is still on its way.
Pages that share stylesheets get the shared file the next time you publish.
When your page links a file that your project does not have, such as a stylesheet, a script or an image, the page now shows without that file, as a browser shows it.
Before: one missing file stopped the whole page, and the preview went white.
Now: the page shows, and a small note at the bottom of the preview says what is missing. Click it to see every problem in the console, with the file and the line. Click Fix it to hand the problems to the agent.
A broken change keeps your page. If your last change breaks the code, the preview keeps the page that worked and tells you so.
Publishing works too. A site with a missing file publishes, and it looks the same as in the preview.
Files in public load. A stylesheet or a script in your public folder that your page links to now loads, in the preview and on your published site.
When the agent reads a very long web page, a PDF from the web or a large file, it now takes the first part of it, and the chat goes on.
No more stuck chats. Before, one very large document could fill the whole conversation. The chat then stopped and asked you to click Continue, and every Continue stopped again.
The agent knows the rest is missing. It sees that the text was cut and how much was left out.
@playcode/sdk 0.7 (npm) is out, and 0.7.1 is the latest. New Cloud apps start on it. In an older app, ask the agent to update the SDK: it reads the upgrade steps in the SDK's changelog first.
The next run keeps the model's reasoning. A model's turn now carries its private parts, Claude's thinking and Gemini's thought signatures, sealed as replay. The next run of a conversation sends them back where the model's maker accepts them, so the model keeps its reasoning and the prompt cache reads the repeated part. Before, every new run dropped them.
Keep each message whole in your store. A store that keeps only the fields it knows drops replay, and the next run goes without the thinking. agentStoreContract checks it. Pages never receive replay.
A long conversation stays inside its limit. The SDK measures each call before it goes out, Claude's earlier thinking included. It clears old tool results first, then a brief stands in for the older part. A call that still does not fit is not sent, and the run ends with the new finish: "context-limit".
A brief has room to think. Its request carries the run's thinking and up to 16,384 output tokens, or the model's own cap when lower, so a model that always thinks no longer spends its room before it writes the brief.
Fewer writes to your database. With the new optional appendRunMessages, a store writes each step once: 142 KB for a 50-step test run, against 7 MB without it.
When the agent asks you a question, the answer form now stays in the chat until you answer it.
Background work no longer closes the form. If a task the agent started in the background finished right after the question, the form showed "Questions answered" though you had not answered, and the chat looked stuck.
Approval cards keep their buttons. A card that asks you to approve a purchase or a change no longer loses its buttons when a background command finishes.
When you move a domain's DNS to Playcode, Playcode now checks whether DNSSEC is still on at your registrar. Your old DNS provider may have turned it on, and it does not work with Playcode's nameservers.
Before the switch, the app and Playcode AI tell you to turn DNSSEC off at your registrar first, then wait a day before you change the nameservers.
After a switch with DNSSEC still on, the domain's status says so and names the one setting to change, instead of showing the domain as connected.
It clears by itself. Once DNSSEC is off, Playcode sees the change on its own.
Before, nothing warned you. A domain moved with DNSSEC still on stopped working for many people, its site and its email, while Playcode showed it as connected.
When the DNS of your domain already runs at Playcode, a name under it, like shop.example.com, now connects in one step when you connect it to a project.
Playcode adds the setting itself. There is nothing to copy to another provider.
The finish says what is true. It shows that the address is being secured until its padlock is ready, then that it is live.
Before, the flow could end on a card that said the name was live, and the name was not connected.
Moving a domain away works.Unlock & get transfer code gives the code once the domain's first 60 days after its registration, or its move to Playcode, have passed. Until then, the app says which lock holds the domain and the day it ends.
Only an Admin of the workspace gets the code. In your Personal workspace, that is you. Playcode's agent can get it too, when an Admin asks.
The registrant gets an email each time. It says who got the code and when, never the code itself.
Auto-renew turns off with the code, so Playcode charges no renewal for a domain on its way out. If you keep the domain at Playcode, turn Auto-renew back on.
Resend verification sends the email again. Before, the app said the email was sent, and none went out. If a domain still shows Verify your email, choose Resend verification once more.
When the agent writes code with HTML entities such as &, <, " or , your files now keep them exactly as written.
Pages that escape text keep working. A helper that turns ' into ' could be saved with the entity replaced by the character itself. The page's script then failed to load, and its buttons stopped working.
Code shown as text stays text. A tag written as <div> on a page no longer turns into a real tag.
Non-breaking spaces stay. is no longer saved as a plain space.
Edits find the text they quote. An edit to a line with & in it now finds that line instead of failing.
playcode vm cat, playcode vm ls and the project file operations (projectFileGet, projectFileUpdate, projectFileDelete, projectFileSearch) now work on static sites as they do on Cloud apps.
A file is found with or without a leading slash.index.html and /index.html are the same file. Before, most files the editor and the agent made answered "no such file".
A write replaces the file you named. It no longer adds a second copy of it, and a new file is named the way the rest of the project is.
playcode vm ls lists folders by name. Before, a static site's first level showed one folder with no name.
In a Cloud app, a relative path is inside your app's folder.src/App.tsx means /workspace/src/App.tsx, as it does for the agent.
Click or tap a card in the message box to see what it holds, on a computer and on a phone.
A pasted page or code opens in full, line by line, exactly as you pasted it. Copy puts it back on your clipboard, and Remove takes it out of your message.
A picture opens in the same window, with its size. Remove takes it out.
On the homepage too. The box on Playcode's homepage opens its cards the same way, before you sign up.
Paste a web page or a piece of code into the chat, and Playcode saves it into your project as a file, exactly as you pasted it, before the agent starts. The agent works from your code, not from a copy it types again.
A card, not a wall of text. A pasted page or code of 20 lines or more, or 2,000 characters or more, becomes a card named for what it holds, such as paste.html for a page. Shorter pastes and plain text stay in your message.
Your message shows where it went. After you send, the card says "Saved to the project", or why it could not be saved.
Ask for the next step. Tell the agent to rename the file, make it your site's main page, or change it - it starts from your own code.
The homepage too. A page you paste on Playcode's homepage before you sign up is saved into your new project the same way.
When you publish an update to a Cloud app that changes its database, Playcode now tries those changes on a copy of your live data first. If they would fail on the real data, the publish stops before anything changes.
Your live site keeps running. It stays on the previous version, and its data stays exactly as it was.
You see what went wrong. The publish panel shows the database's error, so the agent can fix the change and publish again.
Updates without database changes publish as before.
Before, a database change that did not fit the live data could fail halfway through an update and leave later publishes stuck until it was repaired. This covers the database setup Playcode starts every Cloud app with.
Ask the agent to publish your site and it puts a Publish card right in the chat - with the address your site will live at and one button. Tap it and your site goes live. No hunting for the right button, on any device.
The card shows the state: not live yet, publishing, live with your address, or the reason a publish failed.
Always your latest version. The card waits until your editor holds the agent's last change before it builds - what you see is what goes live.
A failed publish is one tap from a fix: "Ask the agent to fix it" sends the real error to the agent, so it starts from the cause, not a guess.
Full-stack projects too: when the agent deploys a cloud project, the same card follows the deploy - publishing, then live with the address.
Publishing a browser project still runs in your own browser tab - the tap is what starts it, so nothing goes live without you.
When you ask the agent for a big build - a whole app, or everything at once - it now builds the most important part first, shows it to you working, and tells you how many credits that part used. You choose how far to go from there.
No more guesses. The agent no longer quotes a starting price for work it has not done. No one can price software before it is built, and the low "starts at" numbers often fell far short of the real cost. What a finished part used is a real number, and the best guide to the rest.
Finished parts first. When your credits can't cover several parts at once, the agent's background tasks run one after another. The credits you have end in parts that work, not in several half-built ones.
A pause you control. A background task pauses at its Task budget (150 credits by default) with everything it built saved, and goes on only when you say so. On a paid plan you can change the budget in Settings > Billing & plans.
Out of credits mid-task? The task says so and keeps everything it built. After a top-up, the agent picks it up from where it stopped.
Try it: Build the whole app from my plan, one part at a time.
In a Cloud project's Files tree, dragging a file into a folder that already had a file with the same name replaced that file without a word. Renaming a file to a name already in use did the same.
Now Playcode asks first. Replace puts your file in its place; Cancel leaves both files as they were. When a folder has that name, Playcode says the name is taken and moves nothing.
Seven of the website templates hid their menu links on screens narrower than a tablet, so a visitor on a phone could not reach the other pages. Their headers now have a Menu button on phones.
The templates: the website, SaaS landing, photographer, real estate, car wash, beauty salon and blog templates.
New websites get it. A site you already started keeps the header it has. Ask Playcode to add a phone menu, and check it in the preview at the phone size.
Try it: Add a menu button to my website header so visitors on a phone can reach every page.
The box on Playcode's homepage now takes more than words, before you sign up.
Attach files. Choose the plus button, drag files onto the box, or paste a screenshot. Pictures are made smaller first. All files together can be up to 4 MB, the storage of the Free plan, so they upload once your account exists. A file over that is refused by name, and the others stay.
Paste a page you already have. A long paste becomes a card named for what it is, such as paste.html for a page, and your own words stay readable next to it.
Nothing is lost on the way. Your words, cards and files arrive together as your first message after you sign in, also when you sign in with GitHub or Microsoft, and also when your request is very long.
A domain bought at Playcode in .com, .net, .org, .dev, .app or .io now renews for less each year. The first year of a new .com or .net costs less too.
Domains you already own renew at the new price. There is nothing to do.
Every price is on one page.Domain renewals and fees lists the first-year price, the renewal price and the restore fee of each ending, and search shows both prices before you buy.
Code you paste into the chat, or into the box on Home, now arrives exactly as you copied it.
Indentation and blank lines stay. Before, a paste lost the spaces at the start of every line and its empty lines, so pasted Python or YAML could break before the agent even read it.
In the chat, a very long paste becomes a card named for what it is:paste.html for a page, paste.jsx for a React component, paste.txt for text.
Signing in keeps your whole chat draft. If you sign in with GitHub or Microsoft before you send, your words, your pasted cards and your attached files are back in the chat when you return.
Playcode’s website is now written in ten languages: English, Russian, Spanish, Portuguese, German, French, Turkish, Japanese, Korean and Italian.
Every product page. The homepage, Pricing, the AI website, app and mobile app builders, Playcode Cloud, Playcode AI, AI SEO, About, For Founders, For Small Businesses and Help.
The free code tools. The HTML editor and viewer, and the JavaScript, TypeScript, Python, C++, SQL and React playgrounds and compilers.
Playcode School. The School and its eight lessons. The cost calculator reads numbers the way your language writes them, with a decimal comma in German or French.
Written for each country, not word for word. Prices, limits and promises stay exactly as they are in English.
Pick your language at the bottom of any page, or in the menu on your phone. The docs, the blog, the changelog, the Terms of Service and the Privacy Policy stay in English.
The plans page now answers the questions people wrote to us about.
Your plan on another workspace. If your Pro or Max is on another workspace, the plans page says which one and lets you switch to it or move the project there, instead of offering a second plan. You can still buy a second plan, after one question.
Why checkout stopped. If checkout cannot open, you see the reason and can try again.
Top up from Plans. A paid workspace can add credits right from the plans page.
No Playcode branding on paid sites. Every site in a paid workspace publishes without Playcode branding. There is nothing to turn off.
Lifetime plans. Pro and Max are not added on top of a Lifetime plan. The plans page explains this and puts you in touch with us.
If you moved your domain's DNS to Playcode, asking the agent to connect www or another subdomain, like shop.example.com, now finishes the job: Playcode writes the subdomain's record in your domain itself, checks that it is there, and the address goes live once its certificate is ready.
Before, the subdomain could be claimed with no record written, so it stayed on Not seen yet until someone added the record by hand.
Nothing to add yourself. Your domain's DNS is at Playcode, so there is no provider to visit.
A record you added while waiting is taken over. If it already points at Playcode, it becomes Playcode's record instead of causing an error. A record that points somewhere else is named, so you can remove it first.
Moving your DNS moves your site. When you hand your domain's DNS to Playcode, your site's old address is replaced by Playcode's, and the agent says so before anything changes. The old address stays in your domain's history.
A connection that cannot finish changes nothing. If the record cannot be written, the address is not left half-connected: you get the reason and what to fix, and asking again picks up from there.
A subdomain served from somewhere other than your main domain still connects. When Playcode cannot write that subdomain's record for you, the agent gives you the one record to add in your domain's DNS settings at Playcode, and the subdomain is connected.
What we review. AI agents run by our team read chats with the AI assistant and look at the projects it works on. They write short notes for our team, for example when something on our side failed or when you might need help.
Who reads what. Our team reads these notes, not your chats. A person reads a chat only when you ask us to, for example in a support request, to stop fraud or abuse, to answer a payment dispute, or when the law requires it.
What we never do. We do not sell your chats or projects, use them for ads, or train AI models on them. The review does not read what your connected accounts, such as Gmail, return to the assistant.
Your choice. You can object to the review at any time by writing to us, as the Privacy Policy explains.
Your app can now read photos and PDFs - receipts, invoices, scanned forms - and turn them into data, through Playcode AI Gateway.
Ask the agent to add it. It tells you what one document costs, the limits and where the data goes. Then it builds the upload, a signed-in endpoint and the call to a model that Playcode's own tests found good at reading documents, and it tries the feature once on a sample you give it.
Photos are priced as photos. Before a call, Playcode sets aside credits by each model's own limits for images and PDF pages, then charges what the model reports. A phone photo no longer needs the credits of a long text to start.
Files in new Cloud apps. The app's AI service takes files, images and PDFs, and the browser sends them with apiUpload.
Gemini for apps, processed in the EU. Your app can call Gemini 3.1 Flash-Lite and Gemini 3.8 Flash, run on Google Cloud in the EU. Gemini 3.1 Flash-Lite read every field of every test document in Playcode's runs, at about 0.005 credits a document. A model's card says where it is processed: ask the agent for the models that say EU.
A clear error for a big request. A request over the gateway's size limit gets a 413 requesttoolarge that names the limit, instead of an empty error.
A monthly AI budget for each app. Ask the agent, for example "Set a monthly AI budget of 50 credits for this app." Past it, that app's AI requests stop until the 1st (UTC). An app has no budget until you set one: without one, only your balance stops its AI.
The monthly spending email no longer stops your app's AI. Before, your app's AI requests were refused once the workspace passed its monthly line, even with credits left. The line is now what its setting says: an email.
Tools billed outside your credits are refused. A request that turns on a tool the model's maker runs and bills itself, such as web search or code execution, gets a 400 servertoolnot_supported. Write the tool as a function in your app instead.
The Playcode SDK now calls AI models: playcode.ai. Your app reaches the Claude, GPT and Gemini models Playcode offers it through one API, and switching models is a change of one id.
One call for every model.generate() answers, stream() answers as it writes, and both read images and PDFs. Give a schema (zod or JSON Schema) and the answer comes back as a checked, typed object.
Agents.agent() lets a model call your app's own functions in a loop. A run stops at its step limit, at its credit budget, when the balance runs out, or when you cancel it. In new Cloud apps, a run is saved as it goes, survives a restart, and goes on from its last finished step.
What a call cost. Every answer says the credits it used, by the model's published price.
Live models.models() lists the models your app can call, with what each reads, its limits, where it is processed and its price. A new model reaches your app without a code change.
The changelog ships in the package.CHANGELOG.md says what changed in each version and what to do when you upgrade. When the agent updates your app's SDK, it reads it first.
Ask the agent to add AI to your app: new Cloud apps come with it, and the agent updates an older app's SDK before it builds.