Skip to main content
FastAPI + arq . Self-hosted . Open source

FastAPI arq Dashboard

Run arq inside a FastAPI app and you have working background jobs. Run arq with z4j and you also have a dashboard, persistent history, the task controls this adapter can execute safely, scheduler integration, RBAC with invitations, and a tamper-evident audit log. z4j is one container or one Python process; the agent is one pip extra in your existing FastAPI venv.

FastAPI + arq is the async-native pairing we recommend. arq's Redis-only deploy footprint stays tiny, FastAPI's lifespan hook starts and stops the worker cleanly, and z4j-fastapi's lifespan integration ships the agent under the same primitive. Quickstart: pip install, pass arq_redis_settings= to z4j_lifespan(), and attach z4j's hooks to the arq worker with attach_to_worker_settings.

install

Install z4j alongside FastAPI + arq

1. Install the brain

bash
pip install z4j && z4j serve

First boot prints a setup URL to stderr. Open it, create the first admin, and mint a token + HMAC secret for this agent.

2. Add the agent to your FastAPI venv

bash
pip install z4j-fastapi[arq]

3. Wire it into FastAPI

python
from arq.connections import RedisSettings
from fastapi import FastAPI
from z4j_fastapi import z4j_lifespan

# The engine handle registers the arq adapter in the web process.
app = FastAPI(
    lifespan=z4j_lifespan(
        arq_redis_settings=RedisSettings(),
        arq_function_names=["my_task"],
    ),
)

Task lifecycle events come from the arq worker process, which needs the z4j-arq worker hook. See the arq docs.

What you get

  • Persistent arq task history in Postgres or SQLite
  • Adapter-advertised controls: submit_task, cancel_task (Job.abort)
  • Scheduler integration via arq cron; available controls depend on that scheduler adapter
  • RBAC with invitations and password reset
  • HMAC-chained tamper-evident audit log
  • Notifications: email, Slack, Telegram, webhook
License

z4j-fastapi and z4j-arq are Apache 2.0. Importing them into your FastAPI app does not affect your application's licensing. z4j is AGPL-3.0-or-later, isolated in its own process.

arq actions exposed

What the dashboard can actually do

Native actions

  • submit_task
  • cancel_task (Job.abort)

Event capture

attach_to_worker_settings() chains onto on_job_start / on_job_end; it must be attached for lifecycle capture.

Reconciliation

arq.jobs.Job.status() + result_info(): clean deferred/queued/in_progress/complete mapping.

other FastAPI stacks

FastAPI with a different engine

arq on other frameworks

Same engine, different framework

Start using FastAPI arq Dashboard

Self-hosted, open source, no SaaS, no telemetry. z4j runs anywhere Python or Docker runs.