[//]: # (This file is auto-generated by bin/refresh_remote_content) [//]: # (Do not edit manually - changes will be overwritten) # Karafka Web Changelog ## Karafka Web Changelog / 1.0.0 (Unreleased) - [Fix] Fix two precision bugs in `Aggregators::State`/`Aggregators::Metrics` process eviction and utilization, both caught by a Copilot PR review and confirmed on the merged pipeline refactor. `evict_expired_processes` computed the ttl window via integer division (`config.ttl / 1_000`), truncating any non-multiple-of-1000 millisecond ttl and evicting processes up to ~999ms earlier than configured; it now uses float division. `RefreshCurrentStats#call` computed average utilization via `utilization / (stats[:processes] + 0.0001)`, an epsilon guard against division by zero that also systematically underestimated utilization for any nonzero process count; it now divides exactly and returns `0.0` only when there are zero active processes. - [Fix] Fix the real cause of the intermittent, seemingly-unrelated CI-only Pro Explorer flakes finally surfaced by the `assert_ok` diagnostic below: not a Kafka broker/timing race, but Ruby's object-shape warning (a controller class crossing 8 distinct instance-variable shapes) being turned into a hard failure by the test suite's `Warning.process` hook. Controllers, like the Roda app classes already exempted, legitimately accumulate many shapes because they conditionally set a handful of instance variables depending on the specific request branch taken (e.g. Explorer's `#show` only sets `@safe_key`/`@safe_headers`/`@safe_payload` when the message isn't a compacted/system entry). Which controller happens to cross the threshold depends on minitest's random run order, which is why it surfaced as an unrelated-looking flake instead of a stable, reproducible failure. Widened the existing `Ui::App` shape-variation exception to cover controller classes too. - [Enhancement] Make `assert_ok` surface the actual captured exception (class, message, backtrace) on a 500, not just the generic static error page body. Subscribes to the same `error.occurred` monitor event the production error handler already dispatches web UI errors through, capturing the last one per test. This has been the main blocker in diagnosing rare CI-only flakes in the Pro Explorer controller specs, where a failure only ever showed the generic HTML error page with no indication of what actually broke. - [Enhancement] Remove the OSS "support Karafka Pro" banner that was rendered on every Web UI page for non-Pro users. It's no longer needed at this stage since users are already aware of the Pro offering. - [Enhancement] Migrate the Web UI topic declarations to Karafka's new standalone `Karafka::App.declaratives.draw` API (Karafka `2.6.0.beta1`). The Web UI topics are declared as `active false` (Web UI manages their creation and runtime replication factor itself), replacing the deprecated routing-based `config(active: false)` bridge that was previously called on each routing topic. - [Enhancement] Add `Warning.process` block to the test helper to turn Ruby warnings originating from the project code into test failures. - [Enhancement] Enable all opt-in Ruby warning categories in the test helper via `Warning.categories` (available since Ruby 3.4), so any new categories added in future Ruby versions are automatically enabled without code changes. - [Enhancement] Replace sequential per-partition `query_watermark_offsets` consumer calls in `Counters#estimate_errors_count` with a single targeted `topic_info` metadata call followed by a batch `read_watermark_offsets` admin call. This eliminates the consumer connection overhead and reduces Kafka roundtrips from up to N+1 sequential calls to 3 regardless of partition count. - [Enhancement] Allow for zero value in number of workers to support dynamic scaling of Karafka workers. - [Enhancement] Align concurrency tracking with dynamic thread pool scaling. Workers count is now read from `Karafka::Server.workers.size` instead of the static `Karafka::App.config.concurrency`, so the Web UI accurately reflects runtime thread pool changes. - [Enhancement] Track `poll_interval` (max.poll.interval.ms) per subscription group alongside `poll_age` to help users monitor how close they are to the polling timeout limit. Consumer schema version bumped to 1.7.0. - [Enhancement] Replace token-based CSRF protection (`route_csrf` plugin) with header-based protection using `Sec-Fetch-Site` header (`sec_fetch_site_csrf` plugin). This eliminates the need for CSRF tokens by leveraging browser-enforced headers that cannot be forged from cross-origin requests. Modern browsers automatically include this header, providing simpler and more robust CSRF protection. - [Enhancement] Include a short spec file hash in generated test topic names for traceability. Topic names now follow the `it-{hash}-{uuid}` format, making it easy to identify which test file created a given topic in Kafka logs. - [Change] Require Roda `>= 3.100` (previously `~> 3.69`). - [Fix] Harden the `wait_for_offset_visible` test helper (used after a transactional produce) to also exercise the Web UI's own message-read path, not just the admin watermark offset. The admin watermark advancing only proves the broker appended the control record; the Web UI reads with a much shorter `fetch.wait.max.ms` than the admin client and could still intermittently raise or return stale results on that exact offset (e.g. the flaky Pro Explorer `system entry` spec), even after the watermark-only wait introduced previously. The helper now also polls the same `Karafka::Web::Ui::Lib::Admin.read_topic` call the Web UI performs and requires it to complete without error before returning. - [Fix] Fix two more flaky Pro Explorer `#recent` specs (`when getting recent for the whole topic` / `when recent is on the first partition` and `when recent is on another partition`). Both produced a message to one partition, then a fixed `sleep(0.1)` before producing the message that should be "most recent" to another partition and immediately requesting the endpoint, racing broker propagation under CI load the same way the already-fixed single-partition `#recent` spec did. Replaced the fixed sleep with a `wait_for_message` poll on the second produce's own offset, matching the existing pattern used by the sibling spec right below it. - [Fix] Stop a long, unbreakable page title (e.g. a long topic name on the Pro Explorer topic page) and the breadcrumbs bar above it from overflowing the page. A grid/flex item's default `min-width: auto` let the title and breadcrumbs blow out past the viewport instead of shrinking, which pushed layout wide enough to force an unexpected page scrollbar. The title wrapper and `breadcrumbs-wrapper` now set `min-width: 0`, the title text wraps via `overflow-wrap: anywhere`, and the breadcrumbs list now wraps onto multiple lines instead of relying on an easy-to-miss horizontal scroll. - [Fix] Stop long, unbreakable flash messages (e.g. a long dotted/underscored topic name in a "successfully created" notice) from overflowing their alert box. DaisyUI's `.alert` grid track sized the message column to its content's intrinsic width, so long single-token strings pushed past the box edge instead of wrapping. The message `span` now sets `overflow-wrap: anywhere` and `min-width: 0` so it wraps within the alert instead. - [Fix] Stop long, dotted/underscored Pro Explorer, DLQ, and Topics topic-tile names from overflowing or overlapping their tile. `topic-tile-text` now sets `overflow-wrap: anywhere` so unbreakable names wrap inside the tile instead of spilling out, and the topic-tile link in those three views now carries a `title` attribute showing the full topic name on hover. - [Fix] Make the `create_topic` test helper wait until a freshly created topic's partitions are actually readable (expected partition count visible and watermark offsets queryable), not just until the topic name appears in cluster metadata. This removes a flaky failure in multi-partition specs (e.g. the topics distribution controller) that intermittently 404'd because watermark offsets were read before the partition leaders had propagated. - [Fix] Stop the array paginator from offering a "Next" link to an empty page when the last page is exactly full. `Paginators::Arrays` decided "is there a next page?" from whether the current page was full, so any list whose total size was an exact multiple of `per_page` (25/50/75/...) surfaced a Next link leading to an empty page. It now reports the last page based on whether a further slice actually exists. - [Fix] Compute the dashboard average batch size with float division so it is no longer floored. `Metrics::Aggregated` divided the per-window message delta by the batch delta using integer division, so e.g. 1000 messages over 47 batches charted as `21` instead of `21.28`, systematically under-reporting the average. It now uses float division rounded to 2 decimals. - [Fix] Include jobs in the `waiting` state when aggregating the dashboard "Pending" counter. `State#refresh_current_stats` now resets and sums `stats[:waiting]` from incoming consumer reports (previously it was never aggregated and stayed `0`), so `Counters#pending` (`enqueued + waiting`) no longer undercounts jobs sitting in advanced/recurring/scheduled-message schedulers. `:waiting` is now also validated by the `AggregatedStats` contract. - [Fix] Add `initialize` to `Status::Context` that defines all instance variables upfront in a consistent order, giving every instance the same Ruby object shape and eliminating the `:performance` shape-variation warning. - [Fix] Accept (and ignore) a block in `Karafka::Web::Producer#__getobj__` to silence Ruby 3.4's `strict_unused_block` warning emitted via `SimpleDelegator#method_missing` on every delegated producer call. - [Fix] Remove `cgi` as no longer needed. - [Fix] Exclude `test/` directory from gem releases to reduce package size. - [Fix] Update LinksValidator regexes to match the new `it-{hash}-{uuid}` test topic naming format, fixing test-order dependent failures in explorer controller specs. - [Fix] Fix alerts formatting for the distribution view. - [Fix] Fix 500 error in the Pro Explorer when a message payload parses as valid JSON but contains strings with invalid UTF-8 byte sequences. `JSON.pretty_generate` would raise `JSON::GeneratorError` outside of any error boundary and propagate as an unhandled 500. The pretty-print step is now wrapped in a dedicated `@safe_pretty_payload` SafeRunner; on failure the raw bytes are displayed alongside a deserialization warning. - [Fix] Fix 500 error in the Pro Explorer message JSON export when a payload deserializes correctly but cannot be serialized back to JSON (for example when it contains strings with invalid UTF-8 byte sequences). The export endpoint now responds with 404 in such cases and the export action button is no longer rendered for such messages. - [Fix] Normalize a batch of styling inconsistencies found while auditing #906: a `data-table-wraper` typo left the Cluster replication table unstyled, `Cluster::_config` rendered raw `true`/`false` instead of badges (unlike the identical `Topics::Configs` table), a Recurring Tasks "Trigger" button's disabled state was computed but never applied to its class, several views carried dead pre-Tailwind Bootstrap classes (`col-sm-*`, `col-lg-*`, `row`, `container-wrapper`) with no effect, one Topics Configs action cell was missing the `options` column class, a handful of breadcrumb/title labels had grammar or casing inconsistencies ("Cluster informations", "Consumers Groups Health", "Dead Letter Queue topics"), the OSS Routing topic list hand-rolled a `badge-warning` for inactive topics instead of the `badge_secondary` used by the identical Pro table, the filtered-payload notice used unstyled Bootstrap-era markup instead of the shared `alert_box_warning` primitive, `status-row-stopping` was colored red (`border-l-error`) while `status_badge` treats "stopping" as the same warning tier as "quiet"/"quieting", three Pro Topics checklist notices (before deleting a topic, increasing partitions, or editing a config value) hand-rolled a bare `alert` div with no severity color or icon instead of the shared `alert_box_warning` primitive used by their sibling warning boxes on the same pages, `alert_box_primary`/`alert_box_secondary` displayed the success checkmark icon (copy-pasted from `alert_box_success`) instead of matching their non-box `info_circle`/`pause_circle` siblings, the internal style-guide page demoed the wrong pencil icon for edit actions, and a scheduled message's "Cancel dispatch" button used a passive error-status icon instead of the `trash` icon already used for every other removal action. - [Fix] Continue normalizing styling inconsistencies from the #906 audit: Health and Recurring Tasks tab bars hand-rolled `col-span-12 mb-9` instead of the shared `tab-container-wrapper` class, and the Scheduled Messages per-partition schedule heading used `h3`/`.h3` where the equivalent per-group heading on Health pages uses `h2`/`.h2`. - [Fix] Retire the `.row-table`/`.row-table-wrapper` table primitive, which had drifted to a single real caller (the Pro per-topic Errors table) against 45+ real uses of `.data-table`, and additionally used a different button-alignment convention (`text-center` vs. `.data-table`'s `text-right`) than every other action column in the app. Switched that one table to `.data-table`, removed the now fully unused CSS utilities and their style-guide demo, and fixed a stale ".row-table" label left over in an unrelated `.data-table` demo section. - [Enhancement] Add a standardized `empty_state` helper/component (icon, message, optional description, and optional call-to-action) and replace the ad hoc `alert_info`/`alert_box_info` "There are no X" messages across every empty-list view (Jobs, DLQ, Explorer, Health, Errors, Consumers, Recurring Tasks, Scheduled Messages, dashboard, and paginated tables) with it, for a consistent look across the Web UI. Demoed on the internal style-guide `/ux` page. - [Fix] Fix unreadable `.btn-outline.btn-active` buttons (e.g. the dashboard time-range selector) in both the light and dark themes. The daisyUI 5.6 upgrade left the active state's background color computed from the same `--btn-color` variable as the outline's text color, so the two nearly matched; the button now switches to the color-variant's contrasting foreground color when active, matching its existing `:hover` behavior. - [Enhancement] Expand the internal `/ux` style-guide page to cover every UI component actually used across the app, so upgrades (daisyUI, Tailwind, etc.) can be visually spot-checked in one place: plain `.card`/`.card-body`, `.modal`/`dialog`, `.dropdown`, `.tooltip`, the `.btn-ghost`/`.btn-square`/`.btn-action`/`.btn-lockable`/`.confirm-action` button modifiers, the breadcrumbs component, and the `status_badge`/`lag_trend_badge`/`kafka_state_badge`/`lso_risk_state_badge`/`truncate`/`lag_with_label`/`offset_with_label` helper methods (previously only their raw CSS classes were demoed). Adds a small reusable `ModalOpener` JS component (`[data-modal-open]`) since the CSP disallows the inline `onclick` handler style used by the existing search modal trigger. - [Fix] Fix a flaky Pro Explorer spec (`when requested message exists but is a system entry`) caused by the `produce` test helper's transactional flow: it only waited a fixed `sleep(0.1)` for a transactional produce's commit control record to become visible before the test reads it back, which is too short under CI load and made the spec intermittently 404 or see stale content. Replaced the fixed sleep with a `wait_for_offset_visible` poll that waits until the control record's offset is actually part of the readable watermark range, mirroring the existing `wait_for_message`/`create_topic` readiness-polling pattern instead of a fixed delay. - [Fix] Stop a misclick on a Pro-gated OSS element from fully navigating away to the standalone "Pro Feature" upsell page. This affected the sidebar (Health, Explorer, Cron, Schedules, Dead, Topics), the Consumers tabs (Performance, Controls, Commands), the dashboard's "Data transfers" chart tab, and several unguarded links with no visual gating indicator at all: the dashboard's "Total lag"/"Dead" counters, Cluster topic/partition names, per-message Explorer offset links on the Errors detail page, and consumer process IDs on the Consumers and Jobs list pages. Gated sidebar/tab items are now truly inert `disabled` buttons with an "Available in Karafka Pro" hover tooltip instead of `` links (or, for the dashboard chart tab, a JS-clickable ``) pointing at the real Pro-only content; the previously-unguarded inline links are now plain text in the OSS templates, with a matching Pro-only view override (`dashboard/_counters`, `cluster/_partition`, `errors/_detail`) restoring the links for Pro users, keeping the OSS templates free of any `Karafka.pro?` branching. Also fixes the sidebar's collapse/expand toggle showing the default arrow cursor instead of a pointer on hover, and hardens `TabsManager` (the chart-tab-switching JS) to no-op instead of throwing when a tab's target content or a previously-active tab is missing/disabled, which had broken tab-switching for the Utilization/RSS/Concurrency charts for anyone who had the now-disabled "Data transfers" tab persisted as their last-active tab. Closes #1106. - [Fix] Add `rel="noopener noreferrer"` to every `target="_blank"` link across the Web UI (docs, Slack, GitHub, and "become Pro" links in the support, status, dashboard, and Pro topic-replication warning views). Without it, the opened external page could access `window.opener` and redirect the original Web UI tab to an arbitrary page (reverse tabnabbing). - [Fix] Fix a flaky Pro Explorer spec (`ExplorerController#recent::when getting recent for the partition`) that produced a message and immediately requested the "recent" endpoint with no readiness wait, occasionally racing the broker's propagation of the just-produced message under CI load. Added a `wait_for_message` poll before the request, matching the existing readiness-polling pattern used elsewhere in the suite. - [Enhancement] Replace the bare `assert(response.ok?)` pattern with a new `assert_ok` test helper across the whole controller test suite (381 call sites). On failure it now prints the actual response status and a body excerpt instead of a generic "Expected false to be truthy", making intermittent CI-only non-200 failures actually diagnosable. - [Change] Switch to Karafka 2.6's new, group-type-agnostic `#group`/`group_id` accessors instead of `#consumer_group`/`consumer_group_id` when reading from Karafka's own routing and instrumentation APIs (`topic.group`, `subscription_group.group`, `event[:group_id]`), preparing for upcoming Kafka share group support (KIP-932). `consumer_group`/`consumer_group_id` remain as karafka-web's own internal naming (tracking payloads, commanding schema, UI labels) — only the calls into Karafka's own API surface changed. Closes #1022. ## Karafka Web Changelog / 0.11.6 (2026-02-01) - **[Feature]** Provide ability to pause/resume all partitions of a topic at once across all consumer processes via the Health Overview page (Pro). Topic-level commands are broadcast to all processes, and each process applies the command to partitions it owns within the specified consumer group. This simplifies bulk operations compared to pausing/resuming individual partitions one by one. - [Enhancement] Optimize partition command tracker to use index-based lookup instead of iterating over 10,000 partitions during rebalance events. The tracker now maintains a partition index for O(n) lookups where n is the number of partitions with pending commands. - [Enhancement] Report `group.instance.id` (static membership ID) per subscription group in consumer reports. This enables identifying consumers using Kafka's static group membership feature. The ID is displayed in the per-consumer subscription view header and in Health Overview below each process ID, making it easy to find a process by its static membership ID. Consumer schema version bumped to 1.6.0. - [Enhancement] Display `min.insync.replicas` alongside replication factor on the topic replication page with fault tolerance indicators (Pro). Shows specific warnings for different resilience issues: no redundancy (RF=1), zero fault tolerance (RF ≤ minISR), and low durability (minISR=1). Each warning includes impact details, environment-aware severity messaging, and recommended actions. Helps users identify misconfigured topics that would cause outages or data loss. - [Enhancement] Add `.options` CSS class for table columns containing action buttons, providing consistent `width: 1%; white-space: nowrap` styling to prevent column width fluctuation. - [Enhancement] Add commands topic presence status check for Pro users. Warns when the `karafka_consumers_commands` topic is missing, which is required for commanding features (pause, resume, trace). - [Enhancement] Disable "Quiet All" and "Stop All" buttons when only swarm or embedded consumers are running (Pro). These commands only work on standalone consumer processes. - [Enhancement] Use low-ack producer variant (`acks: 0`) for Web UI reporting. Since Web UI reporting serves analytical purposes, fire-and-forget semantics minimize latency and overhead while occasional message loss is acceptable. Falls back to the original producer for idempotent/transactional producers. - [Refactor] Refactor Status model into a DSL-based architecture with individual check classes. Each status check is now a separate class in `Karafka::Web::Ui::Models::Status::Checks` that declares its dependencies using `depends_on :check_name` DSL. Shared state is managed through a `Context` class, and the `Step` struct has been extracted to its own file. This improves maintainability, testability, and makes it easier to add new status checks in the future. - [Fix] Fix session keys to use strings instead of symbols for compatibility with Roda's session management. - [Fix] Fix actions and selector alignment in explorer and errors views by wrapping col-span elements in proper grid container. ## Karafka Web Changelog / 0.11.5 (2025-11-14) - [Enhancement] Utilize newly released Roda session management `:env_key` to isolate Karafka Web session from the main application session. ## Karafka Web Changelog / 0.11.4 (2025-11-01) - [Enhancement] Show placeholder rows for partitions with no data during rebalances in health view. The UI now displays all topic partitions (0 to N-1) with "No data available" indicators for partitions currently being rebalanced, preventing confusion from disappearing partitions. Consumer reports now include `partitions_cnt` field extracted from librdkafka statistics. Consumer schema version bumped to 1.5.0 (breaking change). - [Enhancement] Track and report UI errors originating from Roda/Puma web processes directly to Kafka errors topic for visibility and debugging. UI errors are dispatched asynchronously from web processes using a dedicated listener. - [Enhancement] Require Karafka 2.5.2 at minimum and migrate from string-based execution mode comparisons to the new ExecutionMode object API. - [Enhancement] Increase Web UI processing consumer backoff time to 30 seconds when encountering incompatible schema errors to prevent error spam during rolling upgrades. - [Enhancement] Add unique `id` field to error reports to track duplicate error occurrences. Error schema version bumped to 1.2.0 while maintaining backward compatibility with older error formats (1.0.0, 1.1.0) in the Web UI. - [Enhancement] Add container-aware metrics collection for Docker/Kubernetes environments. The Web UI now reports accurate container memory limits from cgroups (v1 and v2) instead of misleading host metrics, while maintaining full backward compatibility with non-containerized deployments. - [Enhancement] Add per-message report migration system to handle schema evolution for consumer reports. This allows transparent migration of old report formats (e.g., schema 1.2.x using `process[:name]`) to current expectations (schema 1.3.0+ using `process[:id]`), ensuring backward compatibility with reports from older karafka-web versions (≤ v0.8.2) that may still exist in Kafka topics. - [Change] Reduce `max_messages` for consumer reports processing from 1000 to 200 to prevent excessive memory usage in large-scale deployments. Processing 1000 messages at once can impact memory consumption significantly in big systems, while 200 messages provides better memory efficiency with negligible impact on throughput. - [Refactor] Extract metrics collection logic from monolithic Sampler into focused, single-responsibility classes (Metrics::Base, Metrics::Os, Metrics::Container, Metrics::Network, Metrics::Server, Metrics::Jobs) and consumer groups enrichment into dedicated enricher (Enrichers::Base, Enrichers::ConsumerGroups) for improved maintainability and testability. - [Testing] Add Docker-based integration tests for container metrics collection. Tests verify cgroup v1/v2 detection, memory limit reading, and fallback behavior across multiple containerized scenarios with different resource constraints. - [Fix] Fix "OS memory used" metric on Linux reporting same value as RSS instead of system-wide memory usage. The metric now correctly sums memory usage across all processes (or all container processes when running in Docker/Kubernetes) to match macOS behavior and original design intent. - [Fix] Fix crash when processing old consumer reports from schema versions < 1.3.0 (karafka-web ≤ v0.8.2) that used `process[:name]` field instead of `process[:id]`. The error `undefined method 'to_sym' for nil` would occur when these old reports were encountered during upgrades. Reports are now automatically migrated in-place to the current schema format. ## Karafka Web Changelog / 0.11.3 (2025-09-29) - [Enhancement] Upgrade DaisyUI to 5.1. - [Change] Remove Ruby `3.1` support according to the EOL schedule. - [Change] Normalize how libs and dependencies are required (no functional change for the end user) - [Fix] Fix a case where the states JSON would contain multiple entries for the same processes causing `JSON.parse` with `allow_duplicate_key: false` to fail. - [Fix] Fix incorrect reference to `IncompatibleSchemaError`. ## Karafka Web Changelog / 0.11.2 (2025-08-18) - [Enhancement] Make sure that TTL counters related `#inspect` are thread-safe. - [Change] Add new CI action to trigger auto-doc refresh. - [Change] Update daisyUI to `5.0.50` ## Karafka Web Changelog / 0.11.1 (2025-06-23) - [Fix] Extremely high error turnover from hundreds of partitions can cause a deadlock in the reporter for transactional Web producer. ## Karafka Web Changelog / 0.11.0 (2025-06-15) - **[Feature]** Provide ability to pause/resume partitions on running consumers via the UI (Pro). - **[Feature]** Provide ability to edit offsets of running consumers (Pro). - **[Feature]** Support consumers that have mismatching schema in the Status page. - **[Feature]** Provide ability to navigate to a timestamp in the Explorer (Pro). - **[Feature]** Provide ability to create and delete topics from the Web UI (Pro). - **[Feature]** Provide ability to manage topics configuration from the Web UI (Pro). - **[Feature]** Provide ability to manage topics partitioning from the Web UI (Pro). - **[Feature]** Provide ability to inject custom CSS and JS to adjust the Web UI. - [Enhancement] Support KIP-82 (header values of arrays). - [Enhancement] Include crawl-based link validator to the CI to ensure no dead links are generated. - [Enhancement] Allow for custom links in the navigation (Pro). - [Enhancement] Optimize topic specific lookups (Pro). - [Enhancement] Replace simple in-process metadata cache with user tracking version for multi-process deployments improvements. - [Enhancement] Move web ui topics configuration into config. - [Enhancement] Upgrade DaisyUI to 5.0 and Tailwind to 4.0. - [Enhancement] Make consumer sampler/stats gathering compatible across debian/alpine/wolfi OSes (chen-anders) - [Enhancement] Promote consumers lags statistics chart to OSS. - [Enhancement] Promote consumers RSS statistics chart to OSS. - [Enhancement] Remove state cache usage that complicated ability to manage topics. - [Enhancement] Improve flash messages. - [Enhancement] Improve handling of post-submit redirects. - [Enhancement] Provide better support for fully transactional consumers. - [Enhancement] Error out when `#setup` is called after `#enable!`. - [Enhancement] Use more performant Kafka API calls to describe topics. - [Enhancement] Inject `.action-NAME` and `.controller-NAME` body classes for usage with custom CSS and JS. - [Enhancement] Improve error handling in the commanding iterator listener (Pro). - [Enhancement] Introduce `trace_id` to the errors tracked for DLQ correlation (if in use) (Pro). - [Enhancement] Normalize how topics with partitions data is being displayed (`topic-[0,1,2]` etc). - [Change] Do not fully hide config-disabled features but make them disabled. - [Change] Remove per-consumer process duplicated details from Subscriptions and Jobs tabs. - [Change] Move to trusted-publishers and remove signing since no longer needed. - [Refactor] Make sure all temporary topics have a `it-` prefix in their name. - [Refactor] Introduce a `bin/verify_topics_naming` script to ensure proper test topics naming convention. - [Fix] Closest time based lookup redirect fails. - [Fix] Fi incorrect error type in commanding listener from `web.controlling.controller.error` to `web.commanding.listener.error` (Pro). - [Fix] Topic named messages collides with the explorer routes. - [Fix] Fix a case where live poll button enabling would not immediately start refreshes. - [Fix] Fix negative message deserialization allocation stats. - [Fix] Fix incorrect background color in some of the alert notices. - [Fix] Support dark mode in error pages. - [Fix] Fix incorrect names in some of the tables headers. - [Fix] Normalize position of commanding buttons in regards to other UI elements. - [Fix] Fix incorrect indentation of some of the info messages. - [Fix] Fix tables headers inconsistent alignments. - [Fix] Fix incorrect warning box header color in the dark mode. - [Fix] Fix missing breadcrumbs on the consumers overview page. - [Fix] Fix a case where disabled buttons would be enabled back too early. - [Fix] The recent page breadcrumbs and offset id are not refreshed on change. - [Fix] Direct URL access with too big partition causes librdkafka crash. - [Fix] Fix incorrect breadcrumbs for pending consumer jobs. - [Fix] Allow for using default search matchers in Karafka Web UI topics including Errors. - [Fix] Ensure that when flashes or alerts are visible, pages are not auto-refreshed (would cause them to dissapear). - [Fix] Time selector in the explorer does not disappear after clicking out. - [Fix] Tombstone message presentation epoch doesn't make sense. - [Fix] Fix incorrectly displayed "No jobs" alert info. - [Fix] Previous / next navigation in the explorer does not work when moving to transactional checkpoints. - [Fix] Errors explorer does not work with transactional produced data. - [Fix] Errors explorer in OSS does not have pagination. - [Maintenance] Require `karafka-core` `>= 2.4.8` and `karafka` `>= 2.4.16`. - [Maintenance] Update `AirDatepicker` to `3.6.0`. ## Karafka Web Changelog / 0.10.4 (2024-11-26) - **[Breaking]** Drop Ruby `3.0` support according to the EOL schedule. - [Enhancement] Extract producers tracking `sync_threshold` into an internal config. - [Enhancement] Support complex Pro license loading strategies (Pro). - [Enhancement] Change default `retention.ms` for the metrics topic to support Redpanda Cloud defaults (#450). - [Enhancement] Include subscription group id in the consumers error tracking metadata. - [Enhancement] Collect metadata details of low level client errors when error tracking. - [Enhancement] Collect metadata details of low level listener errors when error tracking. - [Fix] Toggle menu button post-turbo refresh stops working. ## Karafka Web Changelog / 0.10.3 (2024-09-17) - **[Feature]** Introduce ability to brand Web UI with environment (Pro). - [Enhancement] Provide assignment status in the routing (Pro). - [Enhancement] Support schedule cancellation via Web UI. - [Enhancement] Rename "probing" to "tracing" to better reflect what this commanding option does. - [Fix] Fix not working primary and secondary alert styles. ## Karafka Web Changelog / 0.10.2 (2024-09-03) - **[Feature]** Support Future Messages management (Pro). - [Enhancement] Do not live-reload when form active. - [Fix] Undefined method `deep_merge` for an instance of Hash. - [Fix] Prevent live-polling on elements wrapped in a button. - [Fix] Fix errors extractor failure on first message-less tick / eofed ## Karafka Web Changelog / 0.10.1 (2024-08-23) - **[Feature]** Support Recurring Tasks management (Pro). - [Enhancement] Optimize command buttons so they occupy less space. - [Enhancement] Improve tables headers capitalization. - [Enhancement] Prevent live-polling when user hovers over actionable links to mitigate race conditions. - [Fix] Fix partial lack of tables hover in daily mode. - [Fix] Fix lack of tables hover in dark mode. - [Fix] Normalize various tables types styling. - [Fix] Fix ranges selectors position on wide screens. ## Karafka Web Changelog / 0.10.0 (2024-08-19) - **[Breaking]** Rename and reorganize visibility filter to policies engine since it is not only about visibility. - **[Feature]** Replace Bootstrap with with tailwind + DaisyUI. - **[Feature]** Redesign the UI and move navigation to the left to make space for future features. - **[Feature]** Support per request policies for inspection and operations limitation. - **[Feature]** Provide Search capabilities in the Explorer (Pro). - **[Feature]** Provide dark mode. - [Enhancement] Set `enable.partition.eof` to `false` for Web UI consumer group as it is not needed. - [Enhancement] Allow for configuration of extra `kafka` scope options for the Web UI consumer group. - [Enhancement] Support Karafka `#eofed` consumer action. - [Enhancement] Provide topics watermarks inspection page (Pro). - [Enhancement] Use Turbo to improve usability. - [Enhancement] Round poll age reporting to precision of 2 reducing the payload size. - [Enhancement] Round utilization reporting to precision of 2 reducing the payload size. - [Enhancement] Validate states materialization lag in the status view. - [Enhancement] Promote topics data pace to OSS. - [Enhancement] Rename and normalize dashboard tabs. - [Enhancement] Enable live data polling on the first visit so it does not have to be enabled manually. - [Enhancement] Allow disabling ability to republish messages via policies. - [Enhancement] Display raw numerical timestamp alongside message time. - [Enhancement] Support `/topics` root redirect. - [Enhancement] Prevent explorer from displaying too big payloads (bigger than 1MB by default) - [Enhancement] Include deserialization object allocation stats. - [Enhancement] Improve how charts with many topics work. - [Enhancement] Count and display executed jobs independently from processed batches. - [Enhancement] Prevent karafka-web from being configured before karafka is configured. - [Enhancement] Use `ostruct` from RubyGems in testing. - [Enhancement] Indicate in the status reporting whether Karafka is OSS or Pro. - [Enhancement] Ship JS and CSS assets using Brotli and Gzip when possible. - [Enhancement] Introduce a `/ux` page to ease with styling improvements and components management. - [Enhancement] disallow usage of `