All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Workflow detail: add on-canvas zoom controls for click/touch navigation and improve controls styling for dark mode. PR #524.
- Workflow detail: improve default workflow diagram framing for legibility while still allowing manual zoom-out to view the full graph. PR #524.
- Workflow detail: truncate long workflow names in the header to prevent overflow and add a copy button for the full name. PR #524.
- JSON viewer: sort keys alphabetically in rendered and copied output for object payloads. PR #525.
- Job state sidebar: only highlight
Runningwhen the selected jobs state is actually running, even with retained search filters in the URL. Fixes #526. PR #527. - Job delete actions: require confirmation before deleting a single job or selected jobs in bulk. Fixes #545. PR #546.
- Upgrade supported Go versions to 1.25 and 1.26, and update CI accordingly. PR #508.
- Upgrade River to v0.31.0 and River Pro to v0.22.0. PR #511.
- Numerous dependency upgrades.
- Prevent double slash in URLs for root path prefix. Thanks Jan Kott! PR #487.
- Serve UI HTML for wildcard or missing Accept headers and return 406 for explicit non-HTML requests. Fixes #485. PR #493.
- Prevent jobs detail navigation from bouncing back to
/jobs/on slow networks due to stale filter-sync URL updates. Fixes #495. PR #504. - Workflow detail: improve dependency edge routing to avoid turns under task cards, avoid line segments crossing node bodies, and keep fan-in edges visually converged into shared merge lanes when possible. PR #507.
- Added a
-silent-healthchecksflag toriveruiandriveruiproexecutables to avoid noisy HTTP logs from healthcheck endpoints. PR #444.
- Remove accidentally left in
replacestatement inriverproui/go.mod. PR #480.
- Added the ability to cancel workflows from the workflow detail page. PR #407.
- Added the ability to retry workflows from the workflow detail page. PR #430.
- Workflow detail: prevent the viewport from getting stuck zoomed into empty space after navigating between the workflow list and detail pages by remounting the diagram per workflow and enabling fit-to-view on mount. PR #408
- Workflow detail: make MiniMap render nodes correctly and respect dark mode by setting explicit node bounds and theme-aware colors. PR #408
- Job detail: show correct wait duration for running or completed jobs. PR #430.
No changes from v0.12.0 except fixes to the release process. v0.12.0 is not usable, this version should be used instead.
No changes from v0.12.0 except fixes to the release process. v0.12.0 is not usable, this version should be used instead.
riverui as an embedded http.Handler or via a Docker image. The ghcr.io/riverqueue/riverui images no longer include Pro-specific functionality; Pro customers must use new riverqueue.com/riverproui images to access Pro features. The main type was also renamed from Server to Handler for correctness since it functions as an http.Handler. See details below.
-
Go binary now built without debug symbols for a ~35% reduction in output size. PR #391.
-
Breaking change: River UI has been split into two modules and two executables:
riveruifor OSS-only functionality, andriverprouiwhich adds Pro-specific functionality through dependencies onriverqueue.com/riverpro. This change makes it far easier to continue extending the UI for everybody but especially for Pro-specific feature.As part of this, the
ServerandServerOptstypes were also renamed toHandlerandHandlerOptsrespectively. Users who embedriveruiinto their Go app as a handler will need to update theirriverui.NewServerinitialization toriverui.NewHandlerand to provide anEndpointsoption inriverui.HandlerOpts, usingriverui.NewEndpoints(client, nil)for the OSSriveruifunctionality orriverproui.NewEndpoints(client, nil)with ariverpro.Clientforriverprofunctionality:handler, err := riverui.NewHandler(&riverui.HandlerOpts{ // For OSS riverui: Endpoints: riverui.NewEndpoints(client, nil), // Or, for riverpro: Endpoints: riverproui.NewEndpoints(client, nil), // ... other options })
This structure enables Pro-specific API handlers and feature flags to be added to the Pro endpoint bundle.
Users who run River UI from a Docker image can continue using the published OSS
ghcr.io/riverqueue/riveruiimages for OSS-only functionality, while those using River Pro will want to migrate to theriverqueue.com/riverprouiDocker images which are now being published. The Pro images are hosted with a Docker repository that leverages the same credentials as the River Pro Go module server. For details on how to configure this, see the River UI docs.For users who directly run the published
riveruiexecutables (published as GitHub release artifacts), there are noriverprouiequivalents; those who need one can build it directly fromriverproui/cmd/riverprouiin this repository. Alternatively, migrate to either theriverqueue.com/riverprouiDocker images or embed thehttp.Handlerin your app as shown above.As part of this change, all database queries were removed from
riveruiin favor of being implemented directly in the underlying OSS and Pro drivers. PR #379 and PR 400. -
For job kind and queue name searching, match input against substrings instead of only prefixes. Particularly for long names, this is far more convenient. PR #398.
- Remove
__riverUiBasePathand__riverUiAssetUrlglobal functions to eliminate Content Security Policy issues. The application now uses the existing JSON configuration approach consistently for all path resolution. PR #382.
- Upgraded all dependencies.
- Compatibility with River Pro v0.15.0 and River v0.23.0.
- Added a flexible search filter UI for the job list. PR #344.
- Added
riverlogmiddleware logs to the job detail UI via a new unified attempts list, rather than separate lists for errors, attempted by, and now logs. PR #346. - Added a
RIVER_JOB_LIST_HIDE_ARGS_BY_DEFAULTenv andServerOpts.JobListHideArgsByDefaultsetting to give the backend the ability to choose to hide args from the job list by default. This is useful if your args tend to be encoded or encrypted and not worth looking at in bulk. It can also be overridden in a new settings screen in the UI. PR #354. - Added a
RIVER_LOG_FORMATenv which can be set tojsonto set theriveruiexecutable to output JSON instead ofkey=valuetext. PR #381.
- Job args and metadata on the job detail view now use an interactive collapsible JSON view rather than pretty-printing the entire payload on screen. For large payloads this is a better UX and doesn't disrupt the page flow by default. PR #351.
- Corrected links on queue list page to use the TanStack Router
<Link>component instead of raw<a>tags so that settings like path prefix will be respected. PR #353.
- Added a queue detail page with the ability to view queue stats. For River Pro customers, this page offers the ability to dynamically override concurrency limits and to view individual clients for each queue, along with how many jobs each is working. PR #326.
- Updated JS dependencies.
- Fix negative wait times in job timeline. PR #288.
- Fix occasionally incorrect job durations for errored jobs. PR #288.
- Improve display of job attempt errors. PR #291.
- Allow
PG*env vars as an alternative toDATABASE_URL. PR #256.
- Queue list columns no longer resize when pausing/resuming a queue. PR #286.
- Add support for basic auth to the riverui executable. Thanks Taras Turchenko! PR #241.
- Updated internal dependency of
riverqueue/riverto compensate for a change tobaseservice.Archetypeand a utility function. PR #253.
- Add
RIVER_LOG_LEVELenv for env-based configuration of River UI's log level. Thank you Taras Turchenko! 🙏🏻 PR #183.
- Allow
RIVER_HOSTvariable to specify specific host variable to bind to. PR #157.
- Remove
.gitignorefrom Go module bundle because it messes with vendoring in some situations. Thanks Pedro Henrique! 🙏🏻 PR #149.
- Fix
ListenAndServe()inverted error check. Thanks Martin Tournoij! 🙏🏻 PR #137. - Fix refresh and theme selector dropdown positioning. PR #146.
- Downgrade
@headlessui/reactversion to v2.1.1 to fix issues with listbox menus (refresh settings and theme selector). PR #139.
- The module name was changed from
github.com/riverqueue/riveruitoriverqueue.com/riverui. This change was made to facilitate bundling of module releases that include vendored frontend assets, which will enable the embeddedHandlertype to be usable by anybody whogo getinstalls the module without requiring a complex build setup. - Rename
HandlerOptstoServerOptsfor consistency. TheHandlertype was renamed toServerin PR #108 but the opts type was not renamed until now. PR #133. - Implement
http.HandleronServertype via aServeHTTPmethod so that it can be used directly without needing to call.Handler()on it. PR #133. - Directly specify
DBinterface type and rename it. Avoids relying on embedding a type from an internal package. PR #133.
- Removed the vendored Inter font to reduce bundle size with no noticeable impact on the UI.
- Job counts are cached for very large job tables to make request timeouts less likely. PR #108.
- River UI has been restructured to properly support a dynamic path prefix on built static assets. The
-prefixCLI option or thePATH_PREFIXDocker container env can both be used to set a URL prefix on both the API routes and the frontend HTML routes. PR #115.
- Job detail: handle snoozed jobs without erroring. PR #104.
- Added support for workflows. PR #99.
- The UI now serves a
/robots.txtthat instructs crawlers to not crawl any part an installation. (You should still use an authentication layer though.) PR #97.
- Add health check endpoints. PR #61.
GET /api/health-checks/complete(Returns okay if the Go process is running and the database is healthy.)GET /api/health-checks/minimal(Returns okay as long as Go process is running.)
- Interpret some types of Postgres errors to be user facing to produce better error messages in the UI. PR #76.
- Fix prebuilt binaries to correctly set required envs before JS build step. PR #61.
- Make job list items selectable so they can be cancelled, retried, or deleted as a batch. PR #57.
- Fix job list pagination flashing using TanStack Query's
placeholderDatafeature. PR #56.
- This is the initial release of River UI.