Event stream workflow

Read SSE captures without inventing missing events

An SSE capture is not NDJSON: one event may span several lines, and a block can change connection state without emitting an event. Inspect framing before blaming missing data on the server.

Content updated: · Maintained by Hung Chi-Hsueh · corrections

Capture the response body, not a screenshot

SSE uses text/event-stream and UTF-8. Save the response body with its original blank lines; exclude HTTP headers, Markdown fences and console prefixes. LF, CRLF and lone CR are recognized, and exactly one leading BOM is removed. This tool rejects invalid UTF-8 files rather than silently replacing bytes.

The inspector opens pasted text or local files only. It never connects to an endpoint. A capture may have been cut short or altered during logging; the tool cannot recover missing bytes or tell when an event arrived.

A blank line dispatches accumulated data

Field names are case-sensitive. A line splits at its first colon, with at most one following ASCII space removed. Multiple data fields join with LF; event sets the type, defaulting to message. A data field with an empty value can produce an empty-string event. Comments and unknown fields do not become payload.

A final newline only ends a line: it is not a blank separator. An unfinished data block at EOF is not emitted. The report labels it pending and explains the omission instead of adding a separator. [DONE] is ordinary data, not a universal SSE end marker; JSON null is also valid raw payload.

Separate fields, buffers and committed state

A valid id changes the ID buffer; a completed blank-line boundary commits Last-Event-ID, even without data. An empty id clears it; an absent id inherits it; an id containing NUL is ignored. The block trace displays buffered and committed values separately, so an unfinished ID field is not mistaken for a dispatched event.

An ASCII-digit retry updates the requested reconnection time. Decimal strings preserve arbitrarily large integers; a missing retry stays unspecified rather than assuming a browser default. Displaying this state does not schedule a retry or prove actual reconnection.

Keep raw data and export deliberately

JSON inspection is optional and conservative: unsupported precision, duplicate keys or inspection limits do not make an SSE event invalid. Raw data remains authoritative and is never rebuilt from a JavaScript value. JSON and NDJSON exports contain every dispatched event in source order, including effective IDs and retry decimal strings, independent of list filters.

Input is limited to 1 MiB, 50,000 physical lines and 10,000 events; export to 8 MiB. Expanded report data has an 8 MiB budget, counting repeated UTF-8 state strings and 128 bytes per record, not exact browser memory. Limits reject instead of truncating. Lists are paged and previews are bounded; explicit full copy and download retain content. Editing or cancelling invalidates older output, and worker processing is stopped after five seconds.

Local parsing is not automatic redaction or live verification

No capture is uploaded, persisted, inserted into URLs or sent to input analytics. Text is displayed literally without executing HTML or scripts. Data and event IDs can still reveal credentials or personal information; review before copying or downloading. Clearing the page cannot erase existing clipboard content or files.

The tool does not test HTTP status, MIME type, CORS, authentication, caching, reconnects or service health. It does not reconstruct provider-specific answers. Use the original source and a controlled live test when those questions matter. Source snapshot: 2026-10-11.

Example
id: 42
data: first
data: second

Dispatches one message with data first\nsecond and ID 42.
A lone final LF would leave the block pending.

Data provenance

Sources