Skip to content

Example query: SELECT * FROM "orders.v2" WHERE value.status = 'FAILED', which returns 1,284 rows in 4.2 seconds.

Kafka, queried like a database. Read-only until you say otherwise.

For engineers who debug Kafka in production. So, all of you.

Your Kafka UI vs. Negeseuon

Loads 100 messages a page

Scrolls the whole topic, both ways, in flat memory

Can't search inside payloads

WHERE value.anything = 'you want'

Creates consumer groups, commits offsets

Joins no group. Commits nothing. Leaves no trace.

One misclick from deleting prod

Writes locked until you unlock them, enforced in the Rust core

Schema? Good luck.

Avro, Protobuf, JSON Schema, decoded on sight

SQL over topics

Ask the topic a question. Get rows back.

Reach into decoded payloads with value.customer.id, headers with headers['trace-id']. Filters stream as you scroll; aggregates, sorts and window functions run in DuckDB. Explain shows exactly what gets read, and a key lookup only reads the partition that key lives in.

QueryPRODprod-eu-westPRO · JOIN
SELECT o.key, o.value.customer_id, o.value.total, p.value.reasonFROM "orders.v2" oJOIN "payments.events" p ON p.value.order_id = o.keyWHERE o.value.status = 'FAILED' AND o.value.total > 50 AND o.timestamp > now() - INTERVAL '6 hours'ORDER BY o.value.total DESC;
Scanning orders.v2 · 12 partitions10 of 12 done
p0
p1
p2
p3
p4
p5
p6
p7
p8
p9
p10
p11
1,284 rows · 258 MB · 4.2s
o.keycustomer_idtotalp.reasonpartitionoffset
ord-1f03cccus-93aa312.99insufficient_funds18409552
ord-5b6e42cus-2ad8149.00payment_declined58408440
ord-8c92f4cus-41d2129.40payment_declined38412034
ord-a20d7ecus-7f6376.253ds_timeout108408907
ord-77ab10cus-0b9e54.00card_expired78411876

PROJoins and queries across topics, plus export to CSV, JSON Lines or Parquet, saved queries and history. SQL over a single topic is free.

Keyboard-first

⌘P. That's the interface.

⌘P

Find anything. Topics on every connection, open tabs, saved queries, history. Type select and it becomes a SQL editor.

⇧⌘P

Every command, by name. If it doesn't apply here, it says why.

⌘↵

Run the query. Esc cancels it, mid-scan.

⇧⌘U

Unlock writes. On purpose, with a timer.

Speed, without side effects

Zero consumer groups.Zero offsets.Zero apologies.

0consumer groups created
0offsets committed
Flatmemory, at any topic size
Δre-runs read only what's new
Scan Inspectororders.v212 partitions48,213,907 recordsMB/s per partition

Click any progress bar to open it. Per-partition rate and ETA, query memory against its limit, and every record that failed to decode, with the reason.

Schema-aware

Whatever's on the wire, decoded.

Every message goes down the chain until something can read it. You never pick a deserializer from a dropdown, though you can pin one per topic when you want to.

Registrymatched
magic 0x00 · schema id 14 · Avro
{ "order_id": "ord-8c92f4",
  "status": "FAILED",
  "amount": 129.40,
  "currency": "GBP" }
JSONfallback
parses as JSON
{"order_id":"ord-8c92f4","status":"FAILED","amount":129.4}
UTF-8fallback
valid text
ord-8c92f4|FAILED|129.40|GBP
Hexlast resort
always works
00 00 00 00 0e 14 6f 72
64 2d 38 63 39 32 66 34
0c 46 41 49 4c 45 44 …
Schemas from

Your registry · a watched folder · a descriptor set

Formats

Avro · Protobuf · JSON Schema · MessagePack · UUID ·ints and floats

Fetched schemas are cached per connection, so framed records still decode when the registry is down. Edit a .proto in a linked folder and it's picked up within a second.

Production safety

Read-only. Until you mean it.

  • 01Mark a workspace Production. It gets a red badge and refuses every write, on every launch.
  • 02Writes need a time-limited unlock: 15 minutes or an hour, never longer in production. The unlock lives in memory, so a restart starts locked.
  • 03Every send to production is confirmed, naming the workspace, connection, topic and count. Enforced in the Rust core, not by greyed-out buttons.
  • 04Deleting a topic means typing its name. All of it. orders.v2, not "yes". Internal topics can't be touched at all.

AI agents · MCP

Your agent is welcome. Your customers' emails aren't.

Connect your agent with one click. Negeseuon finds the agents on your machine and writes itself into their settings. Twelve tools, all read-only, run through the app's own code over a socket only you can open. No port, no cloud relay.

Claude CodeClaude DesktopCursorVS CodeCodexany MCP client
order_idcustomer_emailcard_numberstatustotal
ord-90fd21nx_3b71c0e9a4…withheldPAID42.10
Claude Code is reading
ord-8c92f4nx_8f2c51d07b…withheldFAILED129.40
ord-77ab10nx_19ae6f2c38…withheldFAILED54.00
ord-1f03ccnx_c07d93ab12…withheldFAILED312.99
ord-e1c3b9nx_8f2c51d07b…withheldSHIPPED18.50

Tokens are the same for the same value within a session, so GROUP BY and joins still work. They change every session, and nothing maps them back.

Agent access · prod-eu-west

Off
Structure onlynames, counts, schemas; no values
All contents

What agents read

14:02:11  Claude Code  query_run   orders.v2
          40 rows · 80 tokens · 40 withheld
14:02:14  Claude Code  schema_get  orders-value
          Names and counts

Every call that sent an agent anything, by session. Names and counts only, never a value. Production asks you first, every session.

And you watch it work. The window glows violet while an agent is busy, a pointer with its name moves to whatever it touches, and its SQL types itself out in a tab of its own. Stop ends the session.

And the everyday stuff.

Live tail
Follow a topic as it's written. Filter it, pause it, see how many arrived while you looked away. Memory stays capped however busy the topic is.
Consumer groups and lag
Every group, member and partition, and how far behind. Matches rpk group describe. Read from the outside, never joined.
Produce PRO
One message, a JSON Lines file of up to 100,000, a saved template, or an exact copy of a record you already have. Schema-encoded, with a generated example to start from.
Share links
negeseuon:// links open the same topic, record or query in a teammate's app, on their connection. No hosts, secrets or payloads in the link.
Any sign-in
SASL PLAIN, SCRAM, OAUTHBEARER, AWS MSK IAM and mTLS. Or import a client.properties and the password goes straight to the keychain.
Signed auto-updates
Stable and Beta channels. Every update is signature-checked before it installs, and switching channel never downgrades you.

Kafka · Redpanda today.MQTT · RabbitMQ · BullMQ next.

We never see your messages. Not even the boring ones.

Secrets stay in the OS keychain.

Passwords, keys and tokens live in macOS Keychain, Windows Credential Manager or the Secret Service on Linux. Never in the database, logs or error messages.

Caches are encrypted.

Query sessions are encrypted at rest and removed on close. Nothing from a message ever reaches a log file.

No telemetry. No analytics.

The app talks to your brokers, your registries and our update server. That's the list. Read it in full.

Free to look. Pro to touch.

Free

£0forever

Look at anything. Touch nothing.

  • Browse, decode and SQL over one topic at a time
  • Live tail, consumer groups and lag
  • Every sign-in: SASL, SCRAM, OAuth, AWS MSK IAM, mTLS
  • Command palette, share links, signed updates
  • Workspaces and connections: limit set at launch

Pro

Monthlyprice set at launch

Everything in Free, plus the parts that change things.

  • Queries across topics: joins, the Query tab, export to CSV, JSON Lines, Parquet
  • Produce, re-produce, bulk send, templates; create and delete topics
  • AI agents over MCP, with per-field access rules
  • Cached re-runs, saved queries and history
  • Unlimited workspaces and connections

Enterprise

Talkto us

Pro for every seat, plus control over all of them.

  • Offline licence that never phones home
  • Managed policy and version pinning
  • Telemetry off, or sent to your own collector
  • Credentials from your secret store
During the beta, every feature is unlocked.Compare every feature →