Writing

Where did ChatGPT’s message version arrows go?

If you used to edit a prompt in ChatGPT and then click the little < 2/3 > arrows above the message to flip between versions, you may have noticed they are not there any more. The same applies to regenerated answers: the older replies used to be reachable, and now they are not.

The good news, and the reason for this article: nothing was deleted. Every version you ever wrote is still in your account data, and you can get all of it back today. It just takes a detour through the data export.

What the arrows did

ChatGPT does not store a conversation as a list of messages. It stores it as a tree. When you edit a prompt, the edited version does not overwrite the original — it is added as a second child of the same parent message. Regenerating an answer does the same thing on the assistant side.

The arrows were the interface to that tree. They moved you between sibling branches. Remove the arrows and the branches are still there; you simply have no way to reach them from the web app.

Why this bothers people more than it sounds like it should

Reading the complaints, the pattern is consistent, and it is not nostalgia for a button:

What is actually in your export

Request your data (Settings → Data controls → Export data), unzip it, and open conversations.json. Each conversation contains a mapping object keyed by message ID, plus a current_node pointing at the message the app was last showing you. Simplified, an edited prompt looks like this:

"mapping": {
  "aaa2...": {
    "id": "aaa2...",
    "message": { "author": { "role": "assistant" }, "content": { "parts": ["..."] } },
    "parent": "aaa1...",
    "children": ["bbb-old", "bbb-new"]
  },
  "bbb-old": { "parent": "aaa2...", "children": ["ccc-old"], "message": { ... } },
  "bbb-new": { "parent": "aaa2...", "children": ["ccc-new"], "message": { ... } }
},
"current_node": "ccc-new"

bbb-old is the version you edited away from. It is still there, with everything that followed from it. The app is simply walking back from current_node through parent links, rendering that one path, and ignoring the rest.

This is why the arrows could be removed without any data loss, and why the loss is entirely a matter of interface rather than storage.

How to read the old versions

You have three options, in increasing order of effort:

  1. Open the export in a viewer that understands the tree. Our ChatGPT export viewer follows the same path ChatGPT displays, then marks every fork so you can expand the versions you moved away from. It labels each one as an earlier prompt or a discarded reply, and can write them into a Markdown export. It runs in your browser and the file is never uploaded, which matters for a file like this.
  2. Search the raw JSON. If you only want one specific lost answer and know a phrase from it, opening conversations.json in an editor that can handle large files and searching for that phrase will find it. Ugly, but effective for a single rescue.
  3. Write a script. Walk mapping, find nodes whose parent has more than one child, and print the siblings that are not on the path from current_node. This is about twenty lines in any language.

The catch, stated plainly

The export contains what was in your account at the moment you requested it. So:

If you just want the arrows back

We cannot give you those; that is OpenAI's to restore. If it matters to you, the constructive move is to say so in the OpenAI developer community, where the existing threads on this are the clearest signal of how many people relied on it.

In the meantime the data is yours and it is all still there. Export it, open it with something that reads the tree rather than a flat list, and nothing is lost.