Releases: kpumuk/lazykiq
Release list
v0.1.1
This is mostly a maintenance release, which simplifies and cleans up the code, as well as Go version bump to pick up CVE fixes for TLS library.
Lazykiq will now ask for a confirmation before pausing or stopping a Sidekiq process in dangerous mode:
Changelog
- 06c3f12: Unify empty table states (@kpumuk)
- 9d95c95: Deduplicate sorted set APIs (@kpumuk)
- eee04ef: Deduplicate lazy detail views (@kpumuk)
- 69338f9: Trim redundant sorted view wrappers (@kpumuk)
- f46e56c: Narrow devtools Redis command interface (@kpumuk)
- 2e7569b: Bumped Go to 1.26.2 to address multiple CVEs in crypto/x509 (@kpumuk)
- e075dab: Adopt zizmor for GitHub Actions (@kpumuk)
- e494476: Run zizmor in pedantic mode (@kpumuk)
- e8fc660: Run zizmor in local CI (@kpumuk)
- 1501b5b: Update CodeQL SARIF upload pin (@kpumuk)
- c746f2c: Make Sidekiq client initialization explicit (@kpumuk)
- 3796578: Confirm dangerous process actions (@kpumuk)
- fb11e35: Share terminal text rendering helpers (@kpumuk)
- ad8ed0b: Simplify popped view refresh flow (@kpumuk)
- c21d19a: Refresh agent structure notes (@kpumuk)
v0.1.0
This release addresses visual artifacts for people that don't have Nerd fonts installed. We only used a single glyph to render the navbar, but for those who don't have it — it made the UI look broken due to missing UTF8 character.
There is a performance optimization for Errors screen, and some visual artifacts addressed when switching between screens.
I decided to promote this release to a minor version. The project turned 90 days yesterday, can't believe!
Changelog
- 75b51ac: Scale errors screens with stale snapshots (@kpumuk)
- 171d8ad: Reset error details column widths (@kpumuk)
- 3b26518: Simplify errors summary helpers (@kpumuk)
- 53fa8b6: Show rows meta in error details view (@kpumuk)
- d31d8ce: Remove queue size from jobs meta (@kpumuk)
- 05f94ad: Reset horizontal scroll when clearing tables (@kpumuk)
- 51356ae: Add help dialog scrollbar (@kpumuk)
- 6d635ce: Remove Nerd Font-only stackbar glyph (@kpumuk)
- 1a08eab: Remove unused stackbar arrow styles (@kpumuk)
v0.0.16
This release is mostly about performance and consistency. When filtering sorted sets, we loaded and parsed JSON for all items, but then rendered only some — but no more, cutting memory in half and saving on some CPU (especially when skipping some of the rows for pagination).
Speaking of pagination, previously I forgot to hook up [ and ] for filtered views, and now they should work fine. Another performance optimization is that previously when switching between views, old Redis requests continued and then the results were discarded — now we will cancel the request right away.
Oh, and speaking of consistency you can filter jobs in the queue view, which was not previously not possible (and is still impossible in native Sidekiq web).
Changelog
- 0dd8e43: Exclude Hugo template from CodeQL analysis (@kpumuk)
- 8cf4bf6: Add Scorecard badge to README (@kpumuk)
- 357743d: Improve filtered sorted-set browsing performance (@kpumuk)
- 3057de2: Simplify sorted-set window API wiring (@kpumuk)
- 59d98fb: Add filtering to queued jobs view (@kpumuk)
- d7643b7: Simplify queued job filtering flow (@kpumuk)
- c33f3f7: Unify filtered view paging navigation (@kpumuk)
- c12b93f: Add cancellable Redis request contexts (@kpumuk)
- fd0b97c: Simplify request cancellation flow (@kpumuk)
v0.0.15
One more release to strengthen the release process: introduced release provenance bundles to the release artifacts (see Signed-Releases).
Changelog
- 1f6827b: Lighten demo stack and stretch process view (@kpumuk)
- 22aa9aa: Pin demo Ruby and tune Redis (@kpumuk)
- 6d1658a: Guard process busy count int conversion (@kpumuk)
- 1036a11: Split demo launchers by Sidekiq version (@kpumuk)
- cc6dfaf: Restrict release workflow token permissions (@kpumuk)
- 9a9fef8: Attach release provenance bundles (@kpumuk)
v0.0.14
There are no functional changes in this release, I have been refactoring the codebase and tightening security in a preparation for a 0.1 (or 1.0 if I feel brave) release.
Changelog
- 2f3c83e: Added a golden test for the layout where there are more dangerous shortcuts than normal (@kpumuk)
- 0dd87c2: Refactored style helpers to reduce duplication in initialyzing view layouts (@kpumuk)
- 621ff0b: Refactored lazy loading for sorted sets using a shared helpers (@kpumuk)
- b8d86d5: Refactored confirmation dialogs into a generic helper (@kpumuk)
- 5c233bc: Refactored status message dialog into a helper function (@kpumuk)
- 03db501: Don't need the awkward 'no queues' message on the queues page (@kpumuk)
- 7c082b5: Framed table size calculation extracted into a separate helper (@kpumuk)
- 2b2b4ed: Further generalized sorted entries data fetching (@kpumuk)
- fbae8b7: Simplify Sidekiq client version detection (@kpumuk)
- 539f58a: Bump Go to 1.25.6 for security fixes (@kpumuk)
- fefadc1: Updated Go to 1.26.0, and fixed linter issues by renaming 'format' to 'display' and 'metrics' to 'stats' (@kpumuk)
- aebf2c3: Updated golangci-lint to 2.9 in CI (@kpumuk)
- 56f93ea: Keep the metrics fetch command side effect free. (@kpumuk)
- 4ca92bf: Upgrade Charm TUI dependencies to v2 (@kpumuk)
- 5a894a0: Upgrade Go to 1.26.1 and golangci-lint to 2.11.2 (@kpumuk)
- 042f0bf: Reduce lazykiq binary size (@kpumuk)
- 7a881a0: Pin GitHub Actions and ungroup Dependabot (@kpumuk)
- 20744e5: Add release artifact attestations (@kpumuk)
- a57fc3a: Generate release SBOMs with Syft (@kpumuk)
- b20d8e5: Sign release checksums with cosign (@kpumuk)
- 4826ab6: Add dependency review workflow (@kpumuk)
- 26c7668: Add security policy (@kpumuk)
- 352fad4: Document release process (@kpumuk)
- 6206dcc: Add OSSF Scorecards workflow (@kpumuk)
- e4819f2: Pin Hugo version in docs workflow (@kpumuk)
v0.0.13
With this release we truly embrace TUI instead of simply replicating the Web view by implementing native scrolling instead of pagination. Now when there are more jobs that we can show on the screen — you will see a scrollbar, and scrolling down will automatically fetch more rows from Redis, never loading all the jobs at the same time. Magical experience!
Can you spot another new feature on the screenshot? Yes, we've got bulk actions (make sure you understand the limitations before using the --danger mode!)
Changelog
- 9a4509b: Added job retries to scheduled/retry/dead views (@kpumuk)
- 47406c3: Fixed light-blue metrics background being out of place on a dark theme (@kpumuk)
- f68b3cb: Refactored paginated views to lazy loading of the data (@kpumuk)
- 9a0af2d: Clamp all the things (math simplified) (@kpumuk)
- 2c5e903: Added g/G shortcuts to lazytable so that all views behave similarly (@kpumuk)
- f62ad37: Implemented 'all' actions on the queues - delete all, retry all, kill all (@kpumuk)
- e2634d1: Added dialog tests (@kpumuk)
v0.0.12
It took a long time to bake this release for a very unexpected reason — some time in the middle I decided to patch ntchart for Bubbletea v2, and did not realize that using replace in the go.mod would stop goreleaser from doing its job. But enough complaining, huge kudos to @neomantra for releasing ntcharts v2, and let's check out what's new.
We have got mini-help in the context bar at the top, and help window to check the shortcuts you might have forgotten:
New process view screen that allows to pause or stop Sidekiq processes (press s on "Busy" page):
New queues view screen that allows to clear a queue (press s on Queues page):
New dangerous mode (--danger or --yolo) allows some of the modifying operations, like pausing/stopping processes, deleted jobs from the queues, clearing queues. We will have more!
And other minor changes:
- numbers formatting and alignment improved across all the screends
- treeview rendering and interactions for busy view
- developer console to debug issues and look the exact Redis commands Lazykiq is sending (
--developer, and then press~/F12in the UI)
Changelog
- bebd7e5: Renamed interface.go to api.go to better represent the purpose (@kpumuk)
- f2e74b9: Filter uses a popup dialog instead of always taking a line on the screen (@kpumuk)
- 6591e06: Added filter by jobs to the Busy page (@kpumuk)
- 3bcb261: Introduced help and context bar to show contextual view key bindings (@kpumuk)
- 9f50cd6: Optimized context items rendering in the context bar (header) (@kpumuk)
- 07b72a6: Optimized rendering of the help modal (@kpumuk)
- 6286d89: Updated ntcharts with bubbletea v2 compatibility, moved all theme colors into the theme (@kpumuk)
- 72ed1d7: Added govulncheck as a tool so that we don't have undeclared dependencies (used in lefthook) (@kpumuk)
- f0d3b37: Configured dependabot to update dependencies every week on Monday (@kpumuk)
- 7d5ed5e: Refactored charts code to move it from the views to components for better readability (@kpumuk)
- 66a5b85: Run Sidekiq 8.0 and 8.1 side by side in the simulation stand (@kpumuk)
- 907244f: Fix Sidekiq 7 version detection by properly iterating SCAN (@kpumuk)
- 032ffd2: Added a specialized queues view, and limit number of queues in the header to 5 (@kpumuk)
- f342669: Align counts to the right when it makes sense (and refactored metrics) (@kpumuk)
- 70b9143: Added process view to the Busy page (@kpumuk)
- 5e56e9f: Select the whole row in the treeview on busy page (@kpumuk)
- dff8b45: Updated color theme to fix yellow on blow for row selection on xterm (@kpumuk)
- 02c9f50: Added pagination to the metrics table, switched period adjustment keys from brackets to braces (@kpumuk)
- 99e5f99: Render aggregated data in the metrics view header (@kpumuk)
- 3abfcd7: Compressed pagination hints into a single row (@kpumuk)
- cf0d764: Render job details in the header (queue and class name) (@kpumuk)
- f58f268: Introducing dangerous actions, along with process management (@kpumuk)
- dc33bbd: Added queue deletion operation (@kpumuk)
- 29f1e4f: Can delete or kill jobs using shift-d / shift-k in retry, scheduled, and dead sets (@kpumuk)
- 97282e8: Refactored timestamp parsing for consistency (supports both Sidekiq 7 and Sidekiq 8) (@kpumuk)
- 46d9afa: Added "c" shortcut to copy JID from the job tables, process identity from the process list, and JSON data from job details view (@kpumuk)
- fd14b7c: Fixed danger shortcut background in light theme (@kpumuk)
- b56effc: Initial implementation of dev console (@kpumuk)
- 235c828: Refactored to overlay on top of the data views like in Quake, tracks context and duration as well (@kpumuk)
- 19e79dd: Removed the command stats from the navbar, as it adds more confusion than necessary (@kpumuk)
- 269a9cc: Refactored contextbar for better readability, switched rendering to use Table from lipgloss, and introduced golden tests for layout testing (@kpumuk)
- 25977f3: Use timestamps as a score for all job sets. When killing a job (to move to dead set) - calculate Ruby-compatible score (@kpumuk)
v0.0.11
🚤 The theme of this release is SPEED 🚤
- 9x+ faster global Sidekiq stats fetching (top bar, every 5 seconds)
- 2.5x faster Busy page loading
- 2x faster Sidekiq stats loading (and that is ON TOP of 9x from 2 lines above) - switched to Lua
- 1.5x faster dashboard, and also removed a separate statistics call - the dashboard reuses global stats that we have optimized 18x above
- 2x faster job metrics with significant reduction of redis operations performed over the wire (down to 5ms for 8hr period)
- Refactored job metrics panel to reduce allocations (and forgot to write down the measurement with all that excitement)
Visually, metrics summary page got formatted counters (and I think this is the only visual change):
Changelog
- 5539cb6: Use "slices" package for more idiomatic slice copying and search (@kpumuk)
- f88f963: Optimized performance of statistics fetching (@kpumuk)
- bb61699: Performance optimization for the Busy page (@kpumuk)
- 14ef1f3: Switched stats to use Lua script for ultimate performance (@kpumuk)
- 88b61d6: Performance optimization for the dashboard of about 1.5x (@kpumuk)
- d34f18a: Optimized dashboard to avoid separate realtime data fetching (@kpumuk)
- 289f989: Switched job metrics to Lua and refactored Sidekiq version detection (@kpumuk)
- 2312fd6: Optimized how job metrics view processes histogram data (@kpumuk)
- b5c22c4: Formatted numbers on the job metrics table view (@kpumuk)
- 0934c31: Limit metric periods to 8h on Sidekiq 7, and display better error message when there are no jobs stats for a given period (@kpumuk)
v0.0.10
First release of 2026! Feels like 2025 was just yesterday.
A huge new feature is a tree view for active jobs. In it, Lazykiq will show all processes, and all threads in them that are running a job:
Note
Click "t" to activate or deactivate tree view mode on the "Busy page.
Those cyan tags represent queue weights, and they also can be seen in the default view:
In addition to this:
- Dashboard now shows redis connection URL.
- Version is shown in bottom right corner
- Selected job on the table persists when the table is refreshed. This might move cursor on the screen, but the job you highlighted should still be selected as long as it is still in the same queue or job set.
Changelog
- 13d4ec3: Demo stand now produces ActiveJob wrapped jobs, ActionMailer in ActiveJob wrapper, and tags (@kpumuk)
- 6779b38: Empty state on busy and queues pages is 1 line short. Size does matter after all (@kpumuk)
- 4c578c0: Remove style allocation from the rendering path in the frame component (@kpumuk)
- 0c8b9ce: Show URL of the Redis instance we are currently connected to (@kpumuk)
- 58ee9dd: Show queue weights on the Busy page (@kpumuk)
- 7ecc7ad: Tree mode for the busy view: press 't' to see active jobs grouped by process (@kpumuk)
- 3291d42: When table data is updated, make sure cursor stays on the same row even if the row index shifted (@kpumuk)
- d17efdc: Sidekiq 8.0.6 introduced 'capsules' struct into the process info, and plans to remove queues and weights soon (@kpumuk)
- c396447: Show Lazykiq version in the bottom right corner (@kpumuk)
- 4c8928f: Switch from using queues and weights to capsules for all UI purposes (@kpumuk)