Features
- Simple and predictable task handling - Task handlers are just async functions with a macro-free API
- Robust task execution - Built-in support for retries, timeouts, and error handling
- Multiple storage backends - Support for Redis, PostgreSQL, SQLite, and in-memory storage
- Advanced task management - Task prioritization, scheduling, metadata, and result tracking
- Scalable by design - Distributed backends with configurable concurrency and multi-threaded execution
- Familiar dependency injection - Similar to popular frameworks like
actixandaxum - Runtime agnostic - Works with tokio, async-std, and other async runtimes
- Production ready - Built-in monitoring, metrics, graceful shutdown, and comprehensive error reporting
- Extensible middleware system - Take full advantage of the
towerecosystem of services and utilities - Optional web interface - Manage and monitor your tasks through a web UI
Crate ecosystem
| Source | Crate | Examples |
|---|---|---|
apalis-cron |
||
apalis-redis |
||
apalis-sqlite |
||
apalis-postgres |
||
apalis-mysql |
||
apalis-amqp |
||
apalis-core |
||
apalis-workflow |
||
apalis-board |
||
apalis-board-api |
Getting Started
To get started, just add to Cargo.toml
[]
= { = "1.0.0-beta.1" }
# apalis-redis = { version = "1.0.0-alpha.1" } # Use redis/sqlite/postgres etc
Usage
use *;
use ;
/// A function called for every task
async
async
Workflows
apalishas first class support for sequential, dag and conditional workflows.
use *;
use *;
use Duration;
use JsonStorage;
async
For more functionality like fold, filter_map and other combinators checkout the docs
Feature flags
- full - All the available features
- tracing (enabled by default) — Support Tracing 👀
- sentry — Support for Sentry exception and performance monitoring
- prometheus — Support Prometheus metrics
- retry — Support direct retrying tasks
- timeout — Support timeouts on tasks
- limit — Support for concurrency and rate-limiting
- filter — Support filtering tasks based on a predicate
- catch-panic - Catch panics that occur during execution
How apalis works
Here is a basic example of how the core parts integrate
sequenceDiagram
participant App
participant Worker
participant Backend
App->>+Backend: Add task to queue
Backend-->>+Worker: Job data
Worker->>+Backend: Update task status to 'Running'
Worker->>+App: Started task
loop task execution
Worker-->>-App: Report task progress
end
Worker->>+Backend: Update task status to 'completed'
Integrations
- zino: Next-generation framework for composable applications in Rust.
- spring-rs: Application framework written in Rust, inspired by Java's SpringBoot
Projects using apalis
- Ryot: A self hosted platform for tracking various facets of your life - media, fitness etc.
- Hyprnote: Local-first AI Notepad for Private Meetings
- oxy: A framework for building SQL agents and automations for analytics.
- OpenZeppelin Relayer: OpenZeppelin relayer service
- Summarizer: Podcast summarizer
- Universal Inbox: Universal Inbox is a solution that centralizes all your notifications and tasks in one place to create a unique inbox.
- Hatsu: Self-hosted and fully-automated ActivityPub bridge for static sites.
- Stamon: A lightweight self-hosted status monitoring tool
- Gq: open-source filtering tool for JSON and YAML files
External examples
- Shuttle: Using apalis-cron with shuttle.rs
- Actix-Web: Using apalis-redis with actix-web
- Zino-Example: Using zino
Resources
- Background job processing with rust using actix and redis
- Feasibility of implementing cronjob with Rust programming language
- How to schedule and run cron jobs in Rust using apalis
Web UI
If you are running the web UI, you can easily manage your jobs. See a working rest API example here

Thanks to
tower- Tower is a library of modular and reusable components for building robust networking clients and servers.redis-rs- Redis library for rustsqlx- The Rust SQL Toolkitcron- A cron expression parser and schedule explorer
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
Contributors
See also the list of contributors who participated in this project.
License
This project is licensed under the MIT License - see the LICENSE.md file for details