A CharX file (extension .charx) is a ZIP archive that packages a Character Card V3 definition together with its images and other assets in a single downloadable file. Where the older V2 standard hid a character inside the metadata of a PNG image, V3 takes the opposite approach: it uses a real archive format so a card can carry more than one file at once. If you rename a .charx to .zip and open it, you will see its contents directly.
What is inside a .charx file
Every CharX archive is built around one required file: card.json. That JSON document is the character itself — it follows the chara_card_v3 specification and contains fields such as name, description, personality, scenario, first_mes (the greeting), mes_example (example dialogue), tags, and creator. Because a ZIP can hold many files, a CharX archive usually also includes an assets/ folder.
Those assets typically include the character's avatar image, alternate expression sprites, background art, and occasionally embedded audio for voice-enabled frontends. The card.json references each asset by a relative URI, which is how a frontend knows which image is the main portrait versus a "happy" or "angry" expression. This bundling is the whole point of the format: one file, everything included.
Why V3 moved away from PNG
The V2 format stores a character as base64-encoded JSON inside a PNG tEXt metadata chunk. That was an elegant trick — a card that is also a shareable image — but it has a hard ceiling. A PNG can hold exactly one embedded card, the metadata bloats the image, and there is no clean way to attach multiple expression sprites or a lorebook without ad-hoc extensions.
CharX solves this by using a container designed for multiple files. The character data, the artwork, the emotion sprites, and any extension modules all live in the same archive, addressed by path. This is why V3-capable apps prefer CharX for characters that ship with rich visual or emotional data.
Which apps use CharX files
RisuAI is the most prominent frontend that exports and imports CharX natively, using it as the default container for its characters. Any tool that fully implements the V3 specification can also read a CharX archive, and support has been growing across the ecosystem as V3 adoption increases. Because the underlying card.json is plain V3 JSON, a CharX card is portable in principle — the only barrier is whether a given app knows how to open the ZIP.
How to open or convert a CharX file
To simply inspect one, rename the file from .charx to .zip and extract it with any archive tool; open card.json in a text editor to read the raw persona. To actually use the character in an app that does not support V3, you convert it. Our V3 to SillyTavern and RisuAI to SillyTavern tools unpack the archive, read card.json, and map the persona onto whatever format your target app expects — a V2 PNG for SillyTavern, JSON for Voxta, and so on.
All of this runs in your browser. The archive is decompressed locally with client-side JavaScript, the JSON is extracted in memory, and the converted card is handed back to you as a download. Nothing is uploaded to a server, which matters because character cards frequently contain personal writing you may not want to send to a third party.
CharX vs .png vs .json: a quick comparison
| Container | Holds images? | Multiple assets? | Typical spec |
|---|---|---|---|
| .charx (ZIP) | Yes | Yes | V3 |
| .png (tEXt) | Is the image | No | V1 / V2 |
| .json | No | No | Any |
Are CharX files safe to open?
A CharX archive is data, not a program — it will not run code by itself. The realistic risks are the same as any downloaded ZIP: an archive could contain an unexpectedly large file, and the character text itself is written by a stranger. When you convert a CharX card with a client-side tool, the file never leaves your device, so you are only ever handling your own download. Read the card.json if you want to know exactly what a card will inject into your model's context.
