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.
| partition | offset | key | value.status | value.reason | timestamp |
|---|---|---|---|---|---|
| 7 | 8412311 | ord-77ab10 | FAILED | card_expired | 14:02:11.418 |
| 3 | 8412034 | ord-8c92f4 | FAILED | payment_declined | 14:02:09.903 |
| 1 | 8411950 | ord-1f03cc | FAILED | insufficient_funds | 14:01:58.240 |
| 10 | 8411876 | ord-a20d7e | FAILED | 3ds_timeout | 14:01:51.007 |
| 3 | 8411744 | ord-c4e981 | FAILED | payment_declined | 14:01:40.662 |
| 5 | 8411702 | ord-5b6e42 | FAILED | payment_declined | 14:01:33.115 |
| 9 | 8411688 | ord-e1c3b9 | FAILED | address_invalid | 14:01:29.874 |
| 0 | 8411521 | ord-90fd21 | FAILED | card_expired | 14:01:12.330 |
| 6 | 8411490 | ord-3a7c55 | FAILED | payment_declined | 14:01:08.951 |
| 11 | 8411406 | ord-d84b02 | FAILED | 3ds_timeout | 14:00:57.204 |
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.
| o.key | customer_id | total | p.reason | partition | offset |
|---|---|---|---|---|---|
| ord-1f03cc | cus-93aa | 312.99 | insufficient_funds | 1 | 8409552 |
| ord-5b6e42 | cus-2ad8 | 149.00 | payment_declined | 5 | 8408440 |
| ord-8c92f4 | cus-41d2 | 129.40 | payment_declined | 3 | 8412034 |
| ord-a20d7e | cus-7f63 | 76.25 | 3ds_timeout | 10 | 8408907 |
| ord-77ab10 | cus-0b9e | 54.00 | card_expired | 7 | 8411876 |
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.
Find anything. Topics on every connection, open tabs, saved queries, history. Type select and it becomes a SQL editor.
Every command, by name. If it doesn't apply here, it says why.
Run the query. Esc cancels it, mid-scan.
Unlock writes. On purpose, with a timer.
Speed, without side effects
Zero consumer groups.Zero offsets.Zero apologies.
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.
{ "order_id": "ord-8c92f4",
"status": "FAILED",
"amount": 129.40,
"currency": "GBP" }{"order_id":"ord-8c92f4","status":"FAILED","amount":129.4}ord-8c92f4|FAILED|129.40|GBP
00 00 00 00 0e 14 6f 72 64 2d 38 63 39 32 66 34 0c 46 41 49 4c 45 44 …
Your registry · a watched folder · a descriptor set
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.
prod-eu-west refuses writes. Unlocking lets you produce, create and delete topics until the time is up. Production workspaces unlock for at most 1 hour.
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.
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
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 countsEvery 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.propertiesand 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.
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.
Query sessions are encrypted at rest and removed on close. Nothing from a message ever reaches a log file.
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
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
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
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