{"project":{"slug":"market-intelligence","name":"Market Intelligence","url":"https://heyresearch.xyz/project/market-intelligence"},"lens":"held","items":[{"id":"ship:f5cd73cf-32cb-47e4-9a23-3656919b0fd7","kind":"code","at":"2026-11-06T17:06:00.000Z","precision":"WEEK","title":"Code changes, week of 2026-11-02 – 2026-11-08","summary":"2 active days in liveblocks/liveblocks.","recordedAt":"2026-11-08T00:47:15.647Z","eventType":"CODE_ACTIVITY","verification":"SOURCE_LINKED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","codeSubstance":{"verdict":"UNKNOWN","classifierVersion":"commit-substance-v5","countsAsBuilding":true,"commitsListed":4,"commitsRead":0,"changedCode":0,"documentationOrMaintenance":0,"substanceUnknown":0,"notRead":4,"files":{"source":0,"test":0,"docs":0,"readme":0,"dependency":0,"config":0,"ci":0,"generated":0,"asset":0,"whitespace":0,"rename":0,"data":0,"unknown":0},"weekFullyListed":true,"automatedCommits":8,"sampled":false,"basis":null,"summary":"HEY has not yet looked inside 4 commits from this week. 8 automated commits (bot accounts or a repeating scripted message) not counted."},"source":"https://github.com/liveblocks/liveblocks","marketAround":{"after":{"day":"2026-11-09","priceUsd":0.00001206,"marketCapUsd":12005,"marketCapKind":"fdv"}}},{"id":"ship:dfda1c10-cb52-46c9-939e-d25ebdb7752b","kind":"release","at":"2026-11-06T12:24:36.000Z","precision":"EXACT","title":"3.25.0","summary":"### `@liveblocks/client`, `@liveblocks/react`, and `@liveblocks/node` - **Potentially breaking:** Plain JSON arrays and tuples in the return types of `.toJSON()`, `useStorage()` selectors, and `getStorageDocument(roomId, \"json\")` are now `readonly`, which is consistent with all other values these APIs return. ```ts type Storage = { items: LiveList<string>; tags: string[]; }; const json = root.toJSON(); json.items; // ^^^^^ readonly string[] (✅ was already correct) json.tags; // ^^^^ before: string[] (❌ not consistent) // now: readonly string[] (✅ consistent) ``` ### `@liveblocks/node` - Add `m","recordedAt":"2026-11-08T00:47:15.170Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.25.0","marketAround":{"after":{"day":"2026-11-09","priceUsd":0.00001206,"marketCapUsd":12005,"marketCapKind":"fdv"}}},{"id":"ship:7a26247b-e77e-40e1-addd-b979a4e192c4","kind":"release","at":"2026-10-23T11:43:54.000Z","precision":"EXACT","title":"3.24.5","summary":"### `@liveblocks/react` - Fix unread inbox notification counts not updating when receiving replies in connected rooms.","recordedAt":"2026-11-08T00:47:15.209Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.5","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:decd656d-77cd-469a-b9d5-dc4edea77825","kind":"release","at":"2026-10-21T09:10:32.000Z","precision":"EXACT","title":"3.24.4","summary":"### `@liveblocks/react` - Fix unread inbox notification counts not updating immediately when marking a thread as read.","recordedAt":"2026-11-08T00:47:15.222Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.4","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:353886c8-2e55-48c6-ab66-af3cbe063d28","kind":"release","at":"2026-10-02T19:58:48.000Z","precision":"EXACT","title":"3.24.3","summary":"### `@liveblocks/client` - Fix `LiveText` reconnect convergence with pending edits, including lost acknowledgements, repeated reconnects, and queued edits. Recovery updates now reach editor integrations instead of being filtered as local echoes.","recordedAt":"2026-11-08T00:47:15.236Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.3","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:da628bdc-9e8b-4047-b836-aa6deae3f4b0","kind":"release","at":"2026-09-21T13:15:05.000Z","precision":"EXACT","title":"3.24.2","summary":"### `@liveblocks/client`, `@liveblocks/react`, and `@liveblocks/node` - Fix edge cases in return types of `.toJSON()`, `useStorage()` selectors, and `getStorageDocument(roomId, \"json\")`: - a `LiveObject` whose properties are all optional no longer loses its keys when nested inside another Live structure. - a value typed as `Record<string, T>` no longer loses `T`. - an object carrying both a string index signature and named keys no longer loses the named keys. - a `LiveObject` converts to the same type whether you reach it directly or through a parent. ### `@liveblocks/chat-sdk-adapter` - Allow","recordedAt":"2026-11-08T00:47:15.248Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.2","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:5f2939ac-51fa-412e-a62f-e166e3ff1877","kind":"release","at":"2026-08-19T17:50:05.000Z","precision":"EXACT","title":"3.24.1","summary":"### `@liveblocks/react` - Add new hook `useMutableStorage()` to get direct access to the mutable Storage root. See [docs](https://liveblocks.io/docs/api-reference/liveblocks-react#useMutableStorage). - Fix thread resolved/unresolved status being reverted under some conditions. (Thanks @VihaanAgarwal for the contribution!)","recordedAt":"2026-11-08T00:47:15.260Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.1","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:e578bba4-2942-4601-ab15-8cd6e04e8141","kind":"release","at":"2026-08-17T08:03:03.000Z","precision":"EXACT","title":"3.24.0","summary":"This release introduces `LiveText` (beta), a collaborative rich-text data structure for plain text with optional inline formatting. ### `@liveblocks/client` - Storage updates delivered to deep subscribers now carry a `source` field, saying whether the change was made by this client (`{ origin: \"local\", via: \"edit\" | \"undo\" | \"redo\" }`) or by another one (`{ origin: \"remote\" }`), see [docs](https://liveblocks.io/docs/api-reference/liveblocks-client#update-source). - Add `LiveText` for collaborative text editing with concurrent inserts, deletes, and formatting changes. ### `@liveblocks/codemirro","recordedAt":"2026-11-08T00:47:15.274Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.24.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:19a13746-dd2e-4e59-b269-0b10d3d3612e","kind":"release","at":"2026-08-04T15:34:56.000Z","precision":"EXACT","title":"3.23.1","summary":"### `@liveblocks/react-ui` - Improve version history components for versions without authors, which can occur with server-only changes. Add `HISTORY_VERSION_SUMMARY_AUTHORS_LIST` and update `HISTORY_VERSION_PREVIEW_AUTHORS_LIST` overrides to reflect this.","recordedAt":"2026-11-08T00:47:15.288Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.23.1","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:6fd1b747-e7b4-4def-bd01-093b484e8657","kind":"release","at":"2026-07-24T13:43:33.000Z","precision":"EXACT","title":"3.23.0","summary":"This release introduces `LiveFile`: a new data structure to store files such as images and videos in a room's Storage tree. ### `@liveblocks/client` - Add `room.uploadFile()` to upload a file and return a `LiveFile`. - Add `room.getFileUrl()` to get access to a `LiveFile`. ### `@liveblocks/react` - Add `useUploadFile()` to upload a file and return a `LiveFile`. - Add `useFileUrl()` to get access to a `LiveFile`. ### `@liveblocks/node` - Add `uploadFile()` to upload a file and return a `LiveFile`. - Add `getFileUrl()` to get access to a `LiveFile`. - Add `uploadAttachment()` to upload comment a","recordedAt":"2026-11-08T00:47:15.303Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.23.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:e0f004f5-a101-4947-ba7a-3847210f09dd","kind":"release","at":"2026-07-06T16:27:27.000Z","precision":"EXACT","title":"3.22.0","summary":"### `@liveblocks/react` This release adds version history support for Storage: a version now snapshots both the room's Storage and Yjs documents (previously Yjs only). - Creating a version now also snapshots Storage, not just Yjs, see [docs](https://liveblocks.io/docs/api-reference/rest-api-endpoints#create-version-history-snapshot). - `useHistoryVersions()` lists the room's versions. Each has a `vh_xxx` id, see [docs](https://liveblocks.io/docs/api-reference/liveblocks-react#useHistoryVersions). - `useHistoryVersionStorageData(\"vh_xxx\")` returns that version's Storage as a read-only `LiveObje","recordedAt":"2026-11-08T00:47:15.317Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.22.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:90f3e43c-adfd-469e-a068-348e19b10ba1","kind":"release","at":"2026-06-29T10:25:59.000Z","precision":"EXACT","title":"3.21.0","summary":"### All packages - Add support for public and private threads. Threads now have a `visibility` property that is `\"public\"` by default but can be set to `\"private\"` when created. Permissions can be used to decide which threads a user has access to, and threads can also be queried by their visibility to create filtered views. - Add scoped comments permissions such as `comments:public:write` and `comments:private:none`. ### `@liveblocks/client` - **Breaking:** Remove `type` and `kind` fields from `HistoryVersion` type. The backend no longer returns these. - Add `visibility` to `createThread`. - S","recordedAt":"2026-11-08T00:47:15.333Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.21.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:829b6961-cd0d-4767-9ba1-f28680b67d88","kind":"release","at":"2026-06-26T14:10:26.000Z","precision":"EXACT","title":"3.20.1","summary":"### `@liveblocks/client` - Fix a bug where sending a too large WebSocket message could sometimes overwrite a room's top-level storage key with `initialStorage`, causing data loss. (Thanks @watemerald for reporting!)","recordedAt":"2026-11-08T00:47:15.348Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.20.1","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:0437a985-07d8-4eb3-a5c7-5d8edab33dff","kind":"release","at":"2026-06-17T16:02:45.000Z","precision":"EXACT","title":"3.20.0","summary":"### All packages - Add support for new resource-specific permissions. You can now start from a `*:read` or `*:write` base, then grant or deny access per resource (storage, comments, feeds) using new permission strings like `storage:none` or `comments:read`. ### `@liveblocks/node` - Deprecate `session.FULL_ACCESS` and `session.READ_ACCESS` in favor of `[\"*:write\"]` and `[\"*:read\"]` respectively. ### `@liveblocks/client` - Deprecate `room.getStorageSnapshot()` in favor of `room.getStorageOrNull()`.","recordedAt":"2026-11-08T00:47:15.364Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.20.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:18cf2976-2668-4408-aca5-fe8aa8ffcde9","kind":"release","at":"2026-06-08T08:18:37.000Z","precision":"EXACT","title":"3.19.5","summary":"### `@liveblocks/client` - Fix a `LiveList` divergence after reconnects: a pending `push` could under specific timing conditions during a reconnect still cause a divergence between clients, despite the fix from 3.19.4.","recordedAt":"2026-11-08T00:47:15.385Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.5","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:127b2c96-cf7b-4f38-a4cc-ca78919d7839","kind":"release","at":"2026-06-02T08:02:02.000Z","precision":"EXACT","title":"3.19.4","summary":"### `@liveblocks/client` - Fix `LiveList.push()` so concurrent pushes from multiple clients no longer settle out of order. - Fix a bug where a `LiveObject` key deleted while a client was offline would reappear on reconnect, preventing the two clients from reconverging. - Fix a bug where reconnecting would emit too many update notifications for `LiveObject` keys whose values had not actually changed. - Fix a bug where deleting a nested live value from a `LiveObject` omitted the removed value (`deletedItem`) from the change notification.","recordedAt":"2026-11-08T00:47:15.399Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.4","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:ad73820b-deaf-4db1-813c-e15a31076dc3","kind":"release","at":"2026-05-22T12:50:57.000Z","precision":"EXACT","title":"3.19.3","summary":"- Fix unexpected disconnects that could happen while receiving large or long-running streaming responses from the server (e.g. when loading a large initial storage state).","recordedAt":"2026-11-08T00:47:15.416Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.3","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:e7aa1963-ecc0-4bb4-8da6-c40f6b140447","kind":"release","at":"2026-05-20T14:41:56.000Z","precision":"EXACT","title":"3.19.2","summary":"### `@liveblocks/client` - Fix: clients that have `backgroundKeepAliveTimeout` enabled will no longer disconnect before any pending Yjs updates have been synced to the server.","recordedAt":"2026-11-08T00:47:15.434Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.2","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:7c12b694-702b-4b22-a1db-e2fa80f4235f","kind":"release","at":"2026-05-15T11:29:04.000Z","precision":"EXACT","title":"3.19.1","summary":"### `@liveblocks/node` and Python SDK - Update providers to support newer models up to GPT-5.5 variants, Sonnet 4.6, Opus 4.7, and Gemini 3/3.1 variants.","recordedAt":"2026-11-08T00:47:15.447Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.1","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:61a0fdd8-812f-4d78-b01e-f68dfb53b339","kind":"release","at":"2026-05-07T14:23:18.000Z","precision":"EXACT","title":"3.19.0","summary":"### `@liveblocks/node` - Add new `markdownToCommentBody` helper to convert Markdown strings into `CommentBody` objects. ### `@liveblocks/client` - `room.history.disable(fn)` is now officially supported and no longer experimental. It allows running storage mutations without them appearing on the undo/redo stacks and it’s intended for background/async writes (e.g. writing back AI generation results) that should not be undoable. ### `@liveblocks/react-tiptap` - Fix keyboard shortcut in strikethrough tooltip. (Thanks @HellBoy-OP for the contribution!) - Fix Yjs undo/redo silently breaking after `e","recordedAt":"2026-11-08T00:47:15.475Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.19.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:696253dd-7c13-434b-8f23-09af3a2e37f9","kind":"release","at":"2026-04-23T14:12:45.000Z","precision":"EXACT","title":"3.18.5","summary":"### `@liveblocks/react-tiptap` - Support overlapping comment marks, they now all appear in the `AnchoredThreads` and `FloatingThreads` components.","recordedAt":"2026-11-08T00:47:15.490Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.5","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:085aeaea-77e0-4120-a501-f7668868afca","kind":"release","at":"2026-04-20T09:44:47.000Z","precision":"EXACT","title":"3.18.4","summary":"### `@liveblocks/emails` - Mark `yjs` and `y-prosemirror` as required peer dependencies.","recordedAt":"2026-11-08T00:47:15.505Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.4","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:75cb7952-88f9-4c28-8770-55d1c03a398b","kind":"release","at":"2026-04-17T12:50:36.000Z","precision":"EXACT","title":"3.18.3","summary":"### `@liveblocks/*` - Third-party libraries like `yjs`, `@tiptap/*`, and `@blocknote/*` are now declared as peer dependencies instead of bundled dependencies across all packages that use them.","recordedAt":"2026-11-08T00:47:15.519Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.3","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:328022bf-39b9-4806-85e5-a254fe3fdaae","kind":"release","at":"2026-04-15T10:27:08.000Z","precision":"EXACT","title":"3.18.2","summary":"### `@liveblocks/client` - New experimental `room.history.disable(fn)` API that allows running storage mutations without them appearing on the undo/redo stacks. Intended for background/async writes (e.g. writing back AI generation results) that should not be undoable. - Fix `ToJson` type losing specific value types for `Record<string, T>` fields in Storage","recordedAt":"2026-11-08T00:47:15.534Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.2","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:23cc6d9a-491c-4417-beed-c85883c654f9","kind":"release","at":"2026-04-13T11:40:48.000Z","precision":"EXACT","title":"3.18.1","summary":"### `@liveblocks/react-ui` - Mentions suggestions now appear in more cases after typing `@`: - After punctuation like `!`, `.`, `(`, etc. (e.g. `Hello!@`, `cc: the other team (@`) - After emojis (e.g. `Hello 👋@`)","recordedAt":"2026-11-08T00:47:15.549Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.1","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:f2c9bdbd-0912-489e-948b-1c212b9fbd9b","kind":"release","at":"2026-04-08T09:41:26.000Z","precision":"EXACT","title":"3.18.0","summary":"For full upgrade instructions, see the [3.18 upgrade guide](https://liveblocks.io/docs/platform/upgrading/3.18). ### `@liveblocks/client` - **Breaking:** `useStorage` now returns plain objects for `LiveMap` values instead of `Map` instances. Legacy APIs have been removed: `.toImmutable()`, `.toObject()`, `.toArray()`. - New `.toJSON()` on all Live structures, returning a cached JSON-compatible snapshot. `JSON.stringify(root)` now just works. - New `LiveObject.from(obj)` to create a LiveObject from plain JSON, recursively converting nested objects/arrays to Live structures. - New `.reconcile(ob","recordedAt":"2026-11-08T00:47:15.563Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.18.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:519b3951-1c00-460c-a2dc-3871619a6b60","kind":"release","at":"2026-04-02T15:00:33.000Z","precision":"EXACT","title":"3.17.0","summary":"### `@liveblocks/react-flow` - Introduce the package. Install with `npm install @liveblocks/react-flow`. Provides hooks and components that add collaboration to any React Flow diagram using Liveblocks Storage: - Use the `useLiveblocksFlow` hook to make React Flow synced and collaborative. - Use the `Cursors` component to show other users' cursors inside React Flow. ### `@liveblocks/react-ui` - Allow customizing cursors in the `Cursors` component by passing a `components={{ Cursor: MyCursor }}` prop.","recordedAt":"2026-11-08T00:47:15.577Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.17.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:34bbabb0-433a-459c-9d7b-2fd69b8a451a","kind":"release","at":"2026-03-31T16:20:28.000Z","precision":"EXACT","title":"3.16.0","summary":"### `@liveblocks/chat-sdk-adapter` - Introduce the package. Install with `npm install @liveblocks/chat-sdk-adapter`. Provides a [`chat-sdk`](https://www.npmjs.com/package/chat)-compatible backend adapter backed by Liveblocks Comments: webhooks, posting and editing messages, reactions, paginated fetches, thread and channel helpers, and optional `resolveUsers` / `resolveGroupsInfo` hooks. ### `@liveblocks/react` - Add Feeds hooks: `useFeeds`, `useFeedMessages`, `useCreateFeed`, `useDeleteFeed`, `useUpdateFeedMetadata`, `useCreateFeedMessage`, `useDeleteFeedMessage`, and `useUpdateFeedMessage`. #","recordedAt":"2026-11-08T00:47:15.589Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.16.0","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:51c04290-90be-466b-be28-02cebf1c076a","kind":"release","at":"2026-03-23T13:58:12.000Z","precision":"EXACT","title":"3.15.5","summary":"### `@liveblocks/tiptap` - Improve clipboard handling when text nodes containing comments were copied or pasted. ### Python SDK - Fix request body for certain endpoints, like `update_room_id`, `initialize_storage_document` incorrectly set as optional.","recordedAt":"2026-11-08T00:47:15.603Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.15.5","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:958b1cdb-a764-42f3-9c5f-3e552a8283a7","kind":"release","at":"2026-03-19T15:39:11.000Z","precision":"EXACT","title":"3.15.4","summary":"### `@liveblocks/node` - Add `Liveblocks.getAttachment()` method to get an attachment's metadata and a presigned download URL. ### Python SDK - Add `get_attachment()` method to get an attachment's metadata and a presigned download URL.","recordedAt":"2026-11-08T00:47:15.616Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.15.4","marketAround":{"after":{"day":"2026-11-07"}}},{"id":"ship:094081b3-ecf6-49f5-ad07-4847425cc9d7","kind":"release","at":"2026-03-18T08:17:01.000Z","precision":"EXACT","title":"3.15.3","summary":"### Python SDK - Introduce the Python package. Install with `pip install liveblocks`. Provides sync and async clients for the full Liveblocks API (rooms, storage, threads, comments, etc.) for backend use. ### `@liveblocks/react-ui` - Add `showSubscription` prop to `Thread` to control whether to show the thread’s subscription status.","recordedAt":"2026-11-08T00:47:15.632Z","eventType":"GITHUB_RELEASE","verification":"PUBLICLY_VERIFIED","countsAsBuilding":false,"contextReason":"source:repo_not_corroborated","contextWords":"Recorded, not counted: it was read from a source HEY holds only as context, and that source says why under Sources.","source":"https://github.com/liveblocks/liveblocks/releases/tag/v3.15.3","marketAround":{"after":{"day":"2026-11-07"}}}],"totals":{"ships":31,"contractSource":0,"locks":0,"resumed":0,"marketIntegrity":0,"verification":0},"total":31,"truncated":false,"nextCursor":null,"disclaimer":"Public, source-backed activity HEY recorded. Still Building means counted ships during a market drawdown HEY itself tracked — it is not a prediction, not a ranking by price, and not investment advice. Few projects meet Still Building or Under the Radar at any time; both are strict by design, and list responses carry the counts."}