Shigoto - Background job processing

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:

6 Likes

Thank you for building this @Taure. Shigoto is exactly the kind of library the Erlang ecosystem has been missing. This is something Elixir developers have long taken for granted with libraries like Oban, and it is wonderful to see this gap finally being closed on the Erlang side.

This is a meaningful contribution to the community. Looking forward to following its development.

1 Like

Thank you.

I have been working on Nova and tooling around for some time and now felt it is time that we have the same tooling as Elixir.

Erlang have the same things, maybe a bit hidden but you can build web apps the same way as Phoenix and ecto in Erlang. Maybe not as mature but we need to start somewhere. :grin:

3 Likes