r/madeinpython

cronstable: highly-available cron with a web UI, durable state, DAGs, clustering, MCP server, and way more
▲ 14 r/madeinpython+3 crossposts

cronstable: highly-available cron with a web UI, durable state, DAGs, clustering, MCP server, and way more

cronstable is a cron replacement that runs as a single foreground daemon that I've spent an inordinate amount of time on. It will run on basically anything because its been precompiled for basically any compute architecture that people still use. If there's a feature that another cron has that you need, I want to know about it. Beginner friendly, expert friendly. Container friendly, production ready, highly available. You get it.

From orchestrating web-scrapes, data processing, and storage to coordinating Minecraft server snapshots and upgrades. Possibilities are literally endless.

  • Scheduling: modern jobs defined in YAML; classic crontab files run unmodified; per-job timezone; optional second-level granularity
  • Failure handling: define what failed means to you; retries with exponential backoff; reports to Slack-compatible webhooks, email, Sentry, or a shell command.
  • Web dashboard (opt-in): one self-contained page served by the daemon, with live log tailing, run history, DAG graphs, cluster and fleet views, a TV wallboard, and a command palette. A REST API alongside. not sure if I'm competing with other cron solutions or DataDog at this point. But at least you don't need to SSH in to see what's going on.
  • Observability (opt-in): native Prometheus metrics; opt-in per-job CPU and peak-memory monitoring.
  • Durable state (opt-in): run history, retries, and missed-run catch-up survive restarts; job commands get key/value, cursors, fleet-wide locks, idempotency keys, artifacts, and run-scoped secrets through the CLI.
  • DAGs (opt-in): task dependencies, data hand-off between tasks, dynamic fan-out, sensors, human approval gates, backfill, crash-resume.
  • Clustering (opt-in): leader election via gossip over mutual TLS for best effort attempts at gating your jobs. Your self hosted replicas in one network can also bridge to speak to another set of self hosted replicas. Go one step further and harden it via any shared filesystem, a Kubernetes Lease, or etcd, so replicas can share one config without double-running jobs with absolute guarantee. Each job picks its own point on the liveness-vs-duplication trade-off with clusterPolicy: Leader (default) runs on the elected leader and fails closed. No quorum? Nobody runs. For jobs where a duplicate is worse than a skip (like billing, or outbound email); PreferLeader is never-skip and runs anyway when the cluster can't agree. You accept a possible double-run, for idempotent jobs that matter; EveryNode runs everywhere, for genuinely per-node work like local log rotation. No option is true exactly-once. Leader may skip, PreferLeader may double-run. But hey, at least you get to pick which way it breaks. By default the leader runs every job, but distribution: spread assigns each job to an owner by rendezvous hashing so the work fans out and can be more load balanced.
  • MCP server (opt-in): AI agents (Claude, Cursor, Copilot) can inspect jobs, DAGs, the cluster, and metrics; read-only by default, control only if enabled.
  • Packaging: pip/pipx/Homebrew; multi-arch Docker images on GHCR and Docker Hub in eight distro variants; standalone binaries for Linux, macOS, and Windows. Runs non-root with a read-only root filesystem and all capabilities dropped.

Live demo of the control panel UI with a stubbed backend (pretty cool I promise - if anything at least play with the logo cuz I spent a lot of time on it): https://html-preview.github.io/?url=https://github.com/ptweezy/cronstable/blob/develop/docs/demo/index.html ^(you might need to change the theme on your screen because on one of my screens the default theme is just way too dark. Will fix this soon. by play with the logo I mean swipe your mouse across it) 🙂

Feature Comparison chart: https://github.com/ptweezy/cronstable/blob/develop/docs/comparison.md

Source: https://github.com/ptweezy/cronstable

This is under active development, would appreciate any and all feedback. Thanks y'all!

github.com
u/ptweezy — 3 days ago
▲ 680 r/madeinpython+1 crossposts

[OC] Terrascope: an interactive world map for your terminal

Hi! I built Terrascope, an open-source terminal map with live weather, aircraft, radar, earthquakes, and day/night views. It uses Unicode Braille characters to render the map right in your terminal.

I’d love to hear what you think, especially about the terminal rendering and which layers you’d find most useful.

u/ashygun — 7 days ago
▲ 4 r/madeinpython+3 crossposts

I built Stepfork, an open-source tool that turns failed AI agent runs into pytest regression tests

Hey everyone!

I've been working on an open-source Python project called Stepfork, and I wanted to share it with the community.

GitHub: https://github.com/utsab345/stepfork

While building AI agents, I kept running into the same problem: an agent fails, I fix the issue, but reproducing the original failure is difficult because LLM responses and tool outputs can change between runs.

So I built Stepfork to make those failures reproducible.

What it does:

  • Records instrumented LLM responses and tool calls.
  • Saves executions locally as .sftrace bundles.
  • Replays the recorded responses without making those instrumented external calls again.
  • Compares agent behavior before and after a fix.
  • Exports pytest regression tests to catch the same failure in the future.

Install:

pip install --pre stepfork

The repository includes three offline demos covering a missed order notification, an incorrect flight booking, and a wrongly denied refund.

It's still an early alpha. Replay only freezes instrumented boundaries, and native framework integrations are not available yet.

The project is Apache-2.0 licensed, and I'm actively improving it.

I'd love to hear what other developers think, especially those building AI agents. If you spot a bug, have an idea for an integration, or want to contribute, feel free to open an issue or PR.

GitHub Issues: https://github.com/utsab345/stepfork/issues

Thanks for checking it out!

u/Low-Cut-528 — 6 days ago
▲ 1 r/madeinpython+1 crossposts

I'm 11, and I built a multi-threaded, cross-platform hardware profile scanner in Python! Meet BoardLens v0.5.4.

Hey everyone!

Over the last few weeks, I’ve been working really hard on a project called BoardLens. It is a cross-platform hardware detection utility written completely in Python using Tkinter for a clean, modern dark-mode GUI.

I wanted to build something that could accurately grab system specs no matter what OS a person is running. To make it work, I had to dive deep into platform-specific commands. It runs:

* Windows: Custom PowerShell CimInstance queries

* macOS: Native parsing of `system_profiler` logs

* Linux: Processing `/proc/cpuinfo`, `/proc/meminfo`, and automated `lsblk` blocks

Some technical challenges I had to solve:

  1. Multi-threading: Running hardware scans on the main thread was freezing my Tkinter GUI, so I migrated the scanner to a background thread using Python’s `threading` library so the UI stays responsive.

  2. Packaging: I managed to compile it into a native `.exe` for Windows, a `.dmg` for macOS (which I built on my upgraded 2011 MacBook Pro!), and I'm currently setting up a native `.deb` package for Debian/Ubuntu distributions.

Right now, Linux can be run directly from source (working on Debian & Ubuntu for now).

How to run from source on Linux:

  1. Download the source code from my repository's Releases page.

  2. Open your terminal and navigate to the extracted folder.

  3. Run the command: `python3` `main.py` (make sure Python 3 is installed on your system!)

The project is completely free and open-source. I would absolutely love it if you could check out the repository, run it on your own hardware, and let me know if it detects your components correctly! If you find any bugs or edge cases, please drop them in the comments or open an issue.

Check out the project here: GitHub - https://github.com/CodeAnd-Copper/BoardLens

Check out my YouTube Channel: https://www.youtube.com/@CodeAndcopper1

Thank you so much for reading and for any feedback

reddit.com
u/Equivalent-Stress307 — 9 days ago

I built Yellow Olive - a retro Game Boy-style Kubernetes learning tool, written in Python

I’ve been building Yellow Olive - an open-source, gamified way to learn Kubernetes, built primarily with Python.

The idea is simple: instead of reading through Kubernetes tutorials, you enter a retro, Game Boy-inspired environment and complete missions against a real Kubernetes cluster.

The project uses Python + Textual for the terminal experience and challenge engine. Each mission gives you an objective, lets you work with a real cluster, and then validates whether you actually completed it - so learning feels closer to progressing through a game than following a tutorial.

More recently, I’ve also started building Yellow Olive Academy using Pyxel. It adds pixel-art classrooms, characters, diagrams and interactive lessons before you jump into the hands-on challenges.

The goal is to combine gamification, retro aesthetics and real hands-on infrastructure learning rather than building another Kubernetes tutorial.

It’s still evolving, and I’d love feedback from Python folks - especially anyone who has worked with Textual, Pyxel, TUIs or educational games.

And if you like the idea, a ⭐ would be hugely appreciated :)

GitHub: https://github.com/Anubhav9/Yellow-Olive

u/Content_Ad_4153 — 9 days ago
▲ 2 r/madeinpython+1 crossposts

I built pyrig: scaffold a fully configured Python project with one command, and keep it in sync

Every new Python project needs the same setup: linting, type checking, tests, pre-commit hooks, CI/CD, docs, release workflow, repo protection. I got tired of copying it between projects and watching the copies drift as the tools changed, so I built pyrig (written in Python).

What it does

pyrig init generates a complete, working project:

  • project layout, pyproject.toml, README, LICENSE and other standard files

  • dev tooling configured out of the box: ruff, ty, pytest, prek hooks, deptry, bandit, zizmor and more

  • GitHub Actions CI/CD and GitHub branch protection rules

  • a working CLI for your project (pyrig mk cmd <name> adds commands)

  • test skeletons that mirror your source tree

    uv init my-project --python 3.12 cd my-project uv add pyrig --dev uv run pyrig init

How it works

Every file pyrig manages is a Python class that declares the state the file should have. pyrig sync creates or updates the files to match, so the project doesn't drift when tools change. You customize by subclassing (pyrig mk subcls), not with flags or template edits. A small plugin system, pyrig-runtime, discovers your subclasses automatically across installed packages, so any behavior can be changed, removed or extended.

Trade-offs

It's deliberately opinionated: no on/off toggles (you override a class instead), GitHub only, signed commits and linear history on the generated branch rules, and it adopts new tools like ty and zensical quickly, so expect rough edges. pyrig rm pyrig removes it, and most generated files keep working without it. Full list: https://winipedia.github.io/pyrig/drawbacks

Links

I'd like feedback on which defaults you'd disagree with and what's missing for your workflow.

reddit.com
u/Win_ipedia — 11 days ago