Just happened to me as well after closing Cursor and restarting. This is a significant data issue.
Cursor Chat Storage Architecture
Location
C:\Users\Keith\AppData\Roaming\Cursor\User\
├── globalStorage\
│ └── state.vscdb ← Global state + some bubble data
└── workspaceStorage\
**└── <workspace-hash>\\**
**└── state.vscdb ← Per-workspace chat data**
Inside state.vscdb (SQLite database)
| Table | What It Stores |
|---|---|
| ItemTable | Key-value pairs including composer.composerData (chat metadata: IDs, titles, timestamps, which chat is selected) |
| cursorDiskKV | The actual chat messages stored as bubbleId:: → JSON with full message content |
The Two Key Pieces
- composer.composerData (in ItemTable)
-
List of all your chats (composers)
-
Each chat’s ID, creation date, archived status
-
Which chat is currently selected
-
This is your “chat list”
- cursorDiskKV
-
Keys like: bubbleId:2e7fee00-0e2b-4df7-8b62-0070d7413705:f66555d9-…
-
Values: JSON with the actual message text, code blocks, tool results, etc.
-
This is where the actual conversation content lives
Your Problem
In your case:
-
composer.composerData has 239 chats (metadata intact) -
cursorDiskKV has 0 entries (all message content gone)
This is why you see the chat list but get “Loading Chat” - Cursor knows the chats exist but can’t find the message data to display.