Shigoto is a PostgreSQL-backed background job processing library for Erlang, built on OTP.
Features:
- Named queues with configurable concurrency
- Retries with backoff
- Cron scheduling
- Job batches with completion callbacks
- Circuit breakers for failure-heavy queues
- Telemetry integration
Quick example:
%% Enqueue a job
shigoto:insert(#{
worker => my_email_worker,
args => #{<<“to”>> => <<“user@example.com”>>},
queue => <<“emails”>>
}).
%% Define a worker
-module(my_email_worker).
-behaviour(shigoto_worker).
-export([perform/1]).
perform(#{<<“to”>> := To}) →
send_email(To),
ok.
Demo app:
We put together shigoto_demo - a small Nova app that exercises the main features: multiple queues, cron jobs, batches, webhook retries with circuit breaking. It comes with a Python traffic simulator to generate load.
The demo also includes two live dashboards built with Arizona (real-time UI framework for Erlang):
- shigoto_board (/shigoto) - real-time job dashboard with queue stats, job failures, batch progress, and cron entries
- nova_liveboard (/liveboard) - BEAM VM dashboard with process explorer, ETS tables, supervision trees, and system metrics
Both dashboards are still in active development - expect rough edges and missing features. Feedback and ideas welcome.
Links:
shigoto: