Every time I needed to run a background job in a Python app, the answer was always the same: add Redis, add Celery, add a worker process, add a broker.
Just to send an email every morning.
So I built Kron. It runs embedded inside your Python process — no Redis, no broker, no daemon. Timers persist across restarts. If the process crashes, Kron recovers everything from a local append-only log.
pythonimport kron
kron.schedule("email_digest", cron="0 8 * * *", fn=send_digest)
kron.schedule("cleanup", every="30m", fn=cleanup_temp_files)
kron.start(data_dir=".kron")
That's it. No infrastructure.
You can inspect everything from the CLI:
bashkron job list
kron job status email_digest
kron job history email_digest
The core is Rust. Python bindings via PyO3. It also has a distributed server mode backed by OpenRaft with worker leases, fencing tokens, and a tamper-evident audit log with SHA256 hash chaining.
pip install kron-scheduler
GitHub: https://github.com/BuildByNexora/Kron
Still alpha — but already useful for small services, local agents, and edge devices.
Top comments (0)