Keep Claude artifact storage working on a published link

Convika Team13 min read

  • claude
  • browser-games
  • tutorial
On this page

A Claude artifact that saves with window.storage keeps saving on a Convika link. Each visitor's personal values stay in their own browser, and shared values are kept by Convika for that page, the same for everyone who opens it. Visitors have no accounts, so a save doesn't follow a player to another device.

That covers the best score and "continue" of a game, a scoreboard everyone adds to, a counter, a tracker, or a guestbook that worked inside Claude and stopped once you sent the file to someone. Below: what Claude's storage is, why it stops outside Claude, where each kind of value lives on a Convika page, the limits on each plan, what doesn't exist at all, and the steps to publish. Anthropic's help pages and MDN were read on October 22, 2026, and Convika's side is from the code running in production that day.

What Claude's artifact storage is

Anthropic's article What are artifacts and how do I use them? says: "Artifacts can store data between sessions, so you can build things like journals, trackers, and collaborative tools." It is "Available on Pro, Max, Team, and Enterprise plans, on Claude on the web and Claude Desktop", and it comes in two kinds:

  • Personal storage: "Everyone keeps their own private data." In a journal, your entries stay visible only to you.
  • Shared storage: "Everyone sees and works with the same data. In a game leaderboard, everyone sees the same scores."

"Storage has a 20 MB limit per artifact and accepts text only, no images, files, or binary data." And "Whoever builds an artifact decides which data uses personal storage and which uses shared." The first time someone uses an artifact with shared storage, Claude shows a confirmation that their data will be visible to others.

In the artifact's code, that storage is window.storage. A value is saved under a key, and the last argument picks the kind:

// Personal: only this visitor sees it
await window.storage.set("best", String(score));

// Shared: everyone who opens the page reads the same value
const saved = await window.storage.get("board", true);

Why saving stops outside Claude

window.storage is something claude.ai gives the artifacts it runs. Download the artifact as an HTML file and put it on another host, and the page has no window.storage. The first storage call throws an error in the page's script, nothing is saved, and a script that doesn't catch the error stops at that line. Nothing you saved inside Claude comes with the file either: the scores and entries stay in Claude.

Sharing from Claude has its own limit. Anthropic's Share artifacts says: "Everyone needs a Claude account. People without one can't open a shared artifact, even with the link. The only exception is a legacy artifact published from a chat." The artifacts article defines legacy artifacts as "artifacts made in a chat before September 16, 2026." The guide to sharing a Claude artifact with anyone compares the ways to get one to people without a Claude account.

What Convika adds to a published page

Since October 21, 2026, when a page's own HTML names window.storage, or calls claude.use(, Convika adds a small script before the page's own scripts run. It gives the page the same calls Claude does: get(key, shared), set(key, value, shared), delete(key, shared), and list(prefix, shared), with the same results and errors. A missing key on get throws, as it does in Claude's artifact runtime, and every value is text. You don't change the artifact's code.

A page that names neither gets nothing added, and a page that defines its own window.storage keeps its own. It works on every plan, Free included, on a convika.page address and on your own domain.

One exception: the link that convika.com's upload box makes without an account runs no scripts, so neither the game nor its saves run there. Press Keep this page — free, no card, sign up, and publish the page from your account.

Inside Claude and on a Convika link

A shared artifact inside ClaudeThe same code on a Convika link
Who can open itPeople signed in to Claude (a legacy artifact published from a chat is the exception)Anyone with the link, no account
Personal values"Everyone keeps their own private data."In each visitor's own browser, never sent to Convika
Shared values"Everyone sees and works with the same data."Kept by Convika for the page, the same for everyone
Storage limit20 MB per artifact, text onlyShared values: 1 MB a page on Free, up to 20 MB on MAX; personal values: the visitor's browser
Plans that have itPro, Max, Team, and EnterpriseEvery plan, Free included
Data already saved in ClaudeStays in ClaudeNot copied: the page starts empty

Personal values: one browser on one device

A personal value goes to the visitor's own browser, in its local storage under cvk-storage:<page id>:<key>, and is never sent to Convika. So the browser decides how long it lasts and where it can be read:

  • The same device and the same browser only. A game played in Safari on an iPhone starts over in Chrome on that iPhone, and on a laptop.
  • No end date in most browsers. MDN's localStorage page says it "has no expiration time". Data from a private or incognito session "is cleared when the last 'private' tab is closed", and a browser that blocks site data keeps the values only while the page is open.
  • Safari clears it after 7 days without a visit. MDN's Storage quotas and eviction criteria says that with cross-site tracking prevention on, Safari deletes what a site's scripts saved once nobody has tapped or clicked on that site in the last 7 days of using Safari. On an iPhone, a player who comes back after a week away can find their best score gone.
  • A full browser refuses the save. The save fails with an error the page can catch, so the page's code learns the save didn't happen.
  • A new version keeps the saves. Upload the new file on the page's screen in Sites, and the page keeps its address, so the saves are still there.
  • A new address starts visitors over. Browsers keep local storage per address, so if you move a live page to another subdomain or to your own domain, its visitors' saves stay at the old address. The dashboard warns you before you do: "Saved progress stays at the old address."

Shared values: one set for the whole page

A value saved with shared set to true is kept by Convika for that page. Everyone who opens the page reads and writes the same values. That is what makes a scoreboard everyone adds to, a counter, or a guestbook work.

  • You can see and clear them. On the page's screen, Site settings shows Data shared by all visitors, as plain text, once the page holds some. Delete one key, or Delete all shared data. Members who can edit pages can delete them.
  • They stay with the page. They move with it when its address changes, and are deleted with the page or the account.
  • A preview never touches them. In a preview link, shared saves stay in that browser tab and end when it closes, so checking a page never changes what visitors see. Check sharing between two devices after you publish.
  • A password page asks first. On a page with a password, a visitor's browser reads and saves shared values only after the password is entered.

Claude's document store, window.claude.use("db"), works on the same shared storage and counts toward the same page total. One document holds up to 256 KiB, as in Claude's artifact runtime. A page watching with onSnapshot checks for changes every 5 seconds, then every 15 and 30 seconds while nothing changes, and stops while its tab is hidden. So another player's move shows up seconds later, up to about half a minute. claude.use("user") returns no identity, so the per-viewer documents under data/users/ aren't available.

Storage limits on each plan

LimitFreePro ($12/month)MAX ($49/month)
Shared values, one page, all keys together1 MB10 MB20 MB
Shared keys, one page1,00010,00010,000
One shared value1 MB1 MB1 MB
One use("db") document256 KiB256 KiB256 KiB
Personal valuesThe visitor's browserThe visitor's browserThe visitor's browser

Claude allows 20 MB per artifact. A Free page's shared values get 1 MB, which is less, and MAX gives a page 20 MB.

At a limit, the save is refused and the page's code gets the error. A save past the page's total fails with storage_full, and what was saved before stays. Saves and reads also have per-minute limits, for each visitor's address and for the whole page. Past one, the request fails, and it works again a minute later. A school or office network usually counts as one address for everyone on it.

Storage calls aren't counted as page views. Free includes 10,000 page views a month, across all your pages; the pricing page has each plan's numbers.

What it can't do

  • No player accounts. Visitors open the page without signing in, and the page gets no identity for them: claude.use("user") returns no id.
  • No save that follows a player. Personal values live in one browser on one device. Another phone starts from the beginning.
  • No checked names on a scoreboard. The name next to a score is whatever the visitor typed, and anyone who opens the page can change the shared values. Don't hand out prizes from it.
  • The last save wins. When two visitors save the same key at nearly the same moment, the later save replaces the earlier one. Keep a scoreboard in one key, read it right before you add to it, and keep the top 20, so a lost save is rare.
  • No other servers. A published page's scripts can't reach other sites (apart from analytics tools on a paid plan), so a call to an AI API or a scoreboard service elsewhere doesn't work. Artifact features that ask Claude something don't work either: claude.use gives nothing for any name but "db" and "user".

A scoreboard that follows those rules, as code Claude can start from:

let board = [];
try {
  const saved = await window.storage.get("board", true);
  board = JSON.parse(saved.value);
} catch (error) {
  // No board yet: start an empty one
}
board.push({ name: playerName.slice(0, 20), score });
board.sort((a, b) => b.score - a.score);
try {
  await window.storage.set("board", JSON.stringify(board.slice(0, 20)), true);
} catch (error) {
  showMessage("Your score couldn't be saved. Keep playing!");
}

Who can see the saved data

Personal values aren't sent to Convika: they stay in the visitor's browser. Shared values are stored by Convika: anyone who opens the page can read them, and you see them as plain text in Site settings. Anthropic gives the same advice for its own shared storage: "Before entering anything sensitive, check whether the artifact uses shared storage." On a guestbook or a scoreboard, add a line asking visitors not to type their full name or contact details. The Privacy Policy and the Cookie Policy say how Convika handles both kinds.

Publish an artifact with its storage working

1. Ask Claude for one HTML file

In the chat where you made the artifact, ask:

Turn this into one HTML file that works without a build step, with all the CSS and JavaScript inside. Keep the window.storage calls as they are: the personal best in personal storage, the scoreboard in shared storage with shared set to true. Keep the scoreboard in one key with the top 20 scores, and read it right before adding a score. Wrap every storage call in try/catch, and if a save fails, show a short message and keep the game going. Don't use image files.

An artifact built with React gets turned into one file here too. The guide to downloading a Claude artifact as HTML covers the menus.

2. Download the file, or copy all the code

Use the file if Claude gives you one. If it gives you code, copy all of it, from the first line to the last.

3. Sign up and create the page

Sign up at app.convika.com on the Free plan, with no card. Once you're in, that link opens Put your HTML page online (from the dashboard, it's Upload an HTML file). Choose Upload a file or Paste code, and click Create my preview.

4. Open the preview and test a save

Click Open preview, play until something is saved, and reload. If your personal best is still there, the storage calls work. Shared saves in a preview stay in that tab only, so the live scoreboard stays clean.

5. Publish, then check from two devices

Click Publish. If Convika asks how to publish, Free puts the page live for $0, with a Convika banner at the bottom. Open the new address on a phone and on a laptop, save a score on one, and reload the other. When the score shows up on both, send the link.

For a game's layout on phones and what other hosts do with the same file, read how to publish an AI-made HTML game and the comparison of free hosting for AI-made games. For a teacher sharing an artifact with a class, see Claude for teachers. To make a game from one of Convika's examples instead, see Convika's AI templates.

Frequently asked questions

Does Claude artifact storage work outside Claude?

Not on its own. window.storage exists only inside claude.ai, so a downloaded artifact hosted elsewhere can't save, and the data saved in Claude stays there. On a Convika page, Convika adds the same calls, so the artifact's personal and shared saves work without a code change, starting empty.

Can people without a Claude account play a Claude game that saves their score?

Yes, on a Convika link. Anyone with the link opens the page with no Claude or Convika account. Their best score stays in their own browser, and a shared scoreboard is kept by Convika for the page. Only you, the person publishing, need a Convika account.

How do I share a Claude artifact with persistent storage?

Ask Claude for one HTML file that keeps its window.storage calls, upload it to Convika, check the preview, and publish. Then send the link. The steps above have the exact prompt.

Does window.storage work on a published Claude artifact or on my own website?

On a page published with Convika, yes, on a convika.page address or on your own domain connected to Convika. On a host that doesn't provide window.storage, the calls fail, because the browser has no such storage built in.

Can I make a leaderboard in a Claude artifact that everyone sees?

Yes. Save the scores with shared set to true, and every visitor reads the same board. The names are whatever players type, and Convika doesn't check them, so it suits a game among friends, not prizes.

Is the saved data private?

Personal values are: they stay in each visitor's browser and aren't sent to Convika. Shared values aren't: anyone who opens the page can read them, and the page's owner sees them in the dashboard. The Privacy Policy has the details.

How much can a Convika page store?

Shared values: 1 MB and 1,000 keys a page on Free, 10 MB and 10,000 keys on Pro, and 20 MB on MAX, with 1 MB at most in one value. Personal values are limited by each visitor's browser.

Can players continue on another device?

No. A personal save lives in one browser on one device, and visitors have no accounts that could carry it. A shared value, such as a scoreboard, is the same on every device.

Sources

Publish my artifact with its saves