Announcing River UI

Any developer who's run a job queue in production has likely felt the need to see what is going on with their queue. A SQL-backed system like River offers some level of introspection just by querying the river_job database table, but that can still be tedious and error prone—especially in the heat of an incident.

Whether you're trying to diagnose an ongoing incident, perusing for details on erroring jobs, or merely trying to see whether your jobs are working correctly in development, a visual interface makes the job easier. This is why we're excited to ship River UI, bringing a powerful operational and development tool to River users.

A more human way to interact

River UI comes in two parts: a backend Go API (powered primarily by River itself) and a modern frontend interface built with React and TypeScript. It's intended to be self-hosted in your infrastructure alongside your database and River applications.

The UI makes it easy to see the state of your queues at a glance with a live-updating feed of enqueued, in-progress, and historical jobs. The UI is responsive and mobile-friendly, and of course it includes dark mode 🌙.

As jobs execute, you'll see them progress through execution states until they eventually complete or error. But not only does River UI allow you to see what's happening in your system—you can also interact with it by cancelling, retrying, or deleting jobs.

You'll also get an overview of activity across your queues. If you're in the midst of diagnosing an issue or a third party is having an outage, you can pause a queue altogether. Pausing uses River's notification system to take effect immediately across all nodes, and it persists in the database across restarts.

Try it yourself

Screenshots and videos are a lot less fun than the real thing, so check out the live demo ✨ to explore it further. Or if you're already running River, you can try out the UI in just a few seconds by following the guide.

For most users, the easiest way to get started is with the pre-built Docker images, published directly within the GitHub repo. Stable releases are tagged with semver and the latest release will always be available at These images are also multi-platform, meaning they will run natively on amd64 as well as arm64 and arm64/v8 (Apple Silicon).

docker pull
docker run --env DATABASE_URL

River UI also ships as a pre-built static binary, with all frontend assets bundled into the Go executable. Compiled releases are available on GitHub.

What's next

We have a lot more planned for River and its UI, including database/sql support and advanced features like workflows, rate limiting, and concurrency controls. Stay updated by signing up for River's mailing list.