Quick start

View and search your FIX logs.

Paste one message, selected lines for a few orders, or a whole log. Read decoded fields and find the messages you need. Parsing happens locally in your browser.

From pasted logs to readable messages

1

Paste or drop

Copy the lines you want to read, or drop a log file. Raw FIX, prefixed log lines, and JSON-wrapped messages are supported. Pipe, SOH, and ^A delimiters are detected automatically.

2

Parse

Click Parse to extract the FIX messages into a table. You can work directly in Messages; there is no need to switch to Orders.

3

Read a message

Select a row to see its raw FIX, tag names, decoded values, and repeating groups. Use the next row or j/k to move through the log.

4

Narrow the view

Search for an order ID, symbol, or tag value. Clear the search to see all loaded messages again. Filtering changes the view, not the pasted input.

Partial logs are welcome. You do not need a complete session. Sequence gaps and absent reports may simply reflect lines you did not copy; they do not by themselves establish a session or order failure.

No log handy? Choose Explore sample logs in the viewer to try a small order lifecycle.

Search & filter

Find the messages you need

ORD-001Text anywhere in the message
11=ORD-001Exact ClOrdID match
35=8ExecutionReports
@Symbol == "AAPL"Field-name query
@Symbol == "AAPL" and @Side == @BuyCombined conditions

Type @ for field autocomplete. Decoded aliases such as @MsgType == @ExecutionReport work too. Use .* Regex when a regular expression is the clearest match.

A filter only searches messages already loaded. If an order's ID changes after a replacement, use Trace this order on a selected message to follow its linked IDs.

Optional · Follow an order

See related messages together

Stay in Messages and use Trace this order to focus on a selected order. Or choose Orders for a summary of each order's requests and reports. Both views use only the messages you loaded; they cannot recover omitted lines.

Tracing temporarily clears message filters to show the loaded chain across replacement IDs. Exit trace restores your previous filters.

NOSNewPartialFillReplaceFilled
  • In Orders, select a row to open its message chain in the detail pane.
  • Click a message in the chain to jump into the Messages view with the order isolated.
  • Use View this order’s messages to return to Messages with that order isolated.
  • Click an ID to copy its full value, even when the table displays a shortened version.
When you need more

Compare, focus, and inspect

These tools are available when useful. You do not need them to read your messages.

Compare or focus

Pin important messages, compare two messages field by field, promote useful tags into columns, or drag across the activity timeline to isolate a time window.

Inspect decoded fields

Select a message to see its raw FIX, decoded tag names and enum values, repeating groups, and checksum/BodyLength validation.

Narrow by order state

In Orders, use Working, Partial, Filled, Canceled, No report in input, and Rejected filters. These describe the loaded messages, not an independently verified account state.

Inspect a finding

Findings highlight possible inconsistencies such as quantity mismatches or duplicate execution IDs. Select one to inspect the message. Missing reports or fills are informational, and sequence-gap notes describe only this input; check the surrounding log before drawing conclusions.

Live tail

Live-tail FIX logs from a terminal

The CLI starts a localhost-only bridge and opens FIXtags connected to the stream. Nothing is sent to a remote backend.

npx fixtags fix.logRun without installing
npm install -g fixtagsInstall the fixtags command
npx fixtags /var/log/fix.logFollow a file
tail -f fix.log | npx fixtagsPipe any command
ssh prod 'tail -f /var/log/fix.log' | npx fixtagsTail remotely over SSH
Persistent work

Sessions and named streams

A plain CLI run is temporary and ends with Ctrl-C. Name a session or stream when several terminals should feed one browser workspace or when a feed needs to survive terminal restarts.

fixtags --session cert --stream orders cert.logName the workspace and feed
fixtags --stream orders -- kubectl logs pod-a -fLet FIXtags manage the command
fixtags lsList background sessions
fixtags streams lsList streams in the selected session
CLI reference

Common session and stream controls

fixtags --bg fix.logKeep a background session after the terminal exits
fixtags --newClear the selected session and start fresh
fixtags streams clear ordersRemove one stream's retained messages
fixtags streams stop ordersStop accepting that stream until its feeder is rerun
fixtags sessions stopStop the selected background session
fixtags urlPrint the selected session's browser URL
fixtags configShow persisted CLI defaults
fixtags --helpShow every command, option, and example

Useful options

--localServe the app locally for Safari or offline use
--echoMirror streamed lines to the terminal
--decodeAnnotate FIX enum values in terminal output
--history NSet how many lines a background session retains
--idle-timeout MINChoose when an inactive background session exits
--no-openPrint the URL without opening a browser
No browser required

Use the same filters from the terminal

--grep prints matching original log lines and exits without starting a server or writing session state.

fixtags --grep '@Symbol == "AAPL"' fix.logQuery by decoded field
fixtags --grep '35=8' -c fix.logCount ExecutionReports
Export & share

Take the useful part with you

  • Use Copy / export above the results. Copy shown messages copies the raw messages matching the current filters or trace; Copy all raw messages copies the entire dataset.
  • CSV is useful for spreadsheets; JSON preserves structured decoded fields.
  • Share Link carries the log, filter, Messages/Orders mode, trace, and current selection in the URL fragment so the recipient opens the same view.
Privacy

Your logs stay with you

  • Paste and file parsing run entirely inside the browser.
  • Live mode connects the page directly to a tokenized localhost server started by the CLI.
  • History, saved filters, pins, and display preferences are stored in browser local storage.
  • Share links encode data in the URL fragment, which is not sent to the web server; recipients with the complete link can still read that data.
  • Use Clear or browser storage controls when a local trace should no longer remain on that device.
Agents & LLMs

Built for automation, too

FIXtags is easy for an LLM agent to drive. The machine-readable guide lives at fixtags.dev/llms.txt: the exact share-URL spec with a verifiable worked example, the query language, the headless CLI modes, and how to require() core.js to parse FIX in Node.

The CLI has two headless, no-server modes an agent can pipe together. --grep --format emits structured matches, and share mints a link — the log compressed into the URL fragment, never sent to a server.

fixtags --grep '35=8' --format json fix.logMatched messages as JSON, tags decoded
fixtags --grep '@OrdStatus == @Rejected' fix.log | fixtags shareLink only the rejects

A share link is utf8 → raw DEFLATE → base64url, appended as #z=<payload> with optional &q=/&m=orders/&t=/&s= view state, capped at 63000 encoded characters. Node's zlib.deflateRawSync and the browser's DecompressionStream are byte-compatible, so a link the CLI mints opens exactly like one the Share button makes.

There's also a ready-made, agent-agnostic skill — FIX-investigation recipes built on these modes — served at fixtags.dev/skill.md. fixtags skill prints it, so install it wherever your agent keeps skills:

fixtags skill > ~/.claude/skills/fixtags/SKILL.mdOr any other agent's skill directory
Keyboard

Useful shortcuts

/Focus search
j kNext / previous message or order
EnterOpen the selected order trace
TTrace the selected order
cOpen the correlated lifecycle
yCopy the selected raw message
⌘KOpen the command palette
?Show every shortcut
Working with FIX

FIX message guides