Find the signal.
Keep the stream.
Search events, inspect an error spike, and freeze an investigation while new events arrive. Three readers. Shared collection storage.
A log explorer is one example of the same pattern used by editors, large tables, catalogs, and graph tools.
Find your use case →Setup normally runs automatically. This host may need one page refresh to enable shared memory. If your browser blocks service workers or isolation, open this page in a full browser or use a host with COOP/COEP headers. Documentation stays available; there is no copy-mode fallback.
Compare zerocopy, Immutable.js, Immer, and native arrays →
Generated data only. No upload, API key, or account. Stops at 200,000 events; reset releases the session. Samples are not customer data.
Latest matching events
No query yet| Time (UTC) | Level | Service | Message | ms |
|---|---|---|---|---|
| Load the sample. Search and summaries run in separate workers. | ||||
Freeze a view.
Not the application.
Load 100,000 events. Filter for timeout, or select the timeline spike. Start live events, then freeze your investigation. Live ingestion keeps going; your view stays on its retained snapshot.
What is actually shared?
Five immutable columns: time, service, level, latency, and message. Search and summary workers receive the same snapshot descriptors. They send row indices and small aggregates back. The UI reads only visible records.
Strings can decode into local values. Views, messages, and result arrays still allocate. This is not a zero-allocation claim or a log storage service.
Connection and calculation log
One allocating owner; three readers (UI, search, summary). At most one query pair runs at a time, with one latest pending request. Freeze pins a real snapshot record; it does not use an unimplemented task .at() API. Stop terminates all owned workers and releases retained views. Garbage collection is not forced.