Skip to content

Web Console

The library ships an embedded web UI at /kafka-ops/index.html. No separate deployment, no CDN, works fully offline.

Tech stack

The console uses Mithril.js and Pico CSS, both vendored in the JAR. No Node.js, no npm, no build step, no runtime internet required.

Features

Consumer sidebar

A tree layout showing your consumers and their associated topics:

orders                    1,500 msgs
  orders.DLT                 12 msgs    [Drain DLT]
  orders-retry                0 msgs
payments                  8,200 msgs
  payments.DLT                3 msgs    [Drain DLT]
  payments-retry              0 msgs
  • Resizable sidebar for long topic names
  • Message count badges on each topic
  • DLT routing config (cron, max cycles, idle timeout) displayed in the footer when enabled
  • One-click "Drain DLT" button for any DLT topic

Poll view

Inspect a single message by partition and offset.

  • Full metadata badges: key, timestamp, partition, offset
  • Collapsible headers section
  • JSON tree viewer for the message value
  • Poll history — last 10 partition/offset pairs per topic, persisted across browser sessions

Batch browse

Browse messages by timestamp or offset range.

  • By timestamp — defaults to "last hour" for quick access to recent messages
  • By offset — specify partition and starting offset
  • Expandable results table with message details
  • Collapsible headers for each record
  • Browse history saved per topic

Retry and correct

  • Retry — one-click to re-consume a message through your consumer logic
  • Correct — edit the JSON payload in-place, with a diff confirmation popup before sending

DLT routing

Start DLT routing directly from the sidebar for any consumer with a configured DLT topic. Monitor progress by refreshing — the DLT message count decreases as messages are routed to the retry topic.

Enabling the console

kafka:
  ops:
    rest-api:
      enabled: true   # required — the console calls these endpoints
    console:
      enabled: true

The console requires the REST API to be enabled. Without it, the UI loads but cannot fetch data.