Cronboard

A keyboard-driven terminal dashboard for managing cron jobs on local machines and remote servers via SSH.

1.4Kstars
56forks
MIT License
Python

Cronboard is a terminal-based TUI application built with Textual that lets you view, create, edit, pause, resume, search, and delete cron jobs without ever touching a raw crontab file. It provides a rich table interface showing each job’s expression, command, last run, next run, and real-time status, with live translation of cron syntax into plain English through the cron-descriptor library.

The application supports both local cron management and remote server access over SSH using either key-based or password authentication. When connecting remotely, Cronboard reads and writes crontabs via Paramiko with full sudo support for managing other users’ jobs. Passwords are encrypted locally using Fernet symmetric encryption before being stored, with a per-installation key generated on first run.

Version 0.6.0 introduced integrated job logging through a shell wrapper script that captures stdout and stderr for each cron execution and stores timestamped log files locally or on the remote host. Users can view logs directly inside the TUI with a dedicated log viewer modal. Path autocompletion with directory caching, vim-style keybindings (hjkl navigation), and case-insensitive job search make the day-to-day workflow fast and fully keyboard-driven.

Cronboard is distributed via PyPI, Homebrew, uv, Nix flake, and AUR, requires Python 3.13+ with a working crontab installation, and is actively maintained with approximately 19 releases since its first public version in October 2025. Full documentation is available at cronboard.dev.

What You Get

  • Interactive cron table - A DataTable widget showing each job’s ID, expression, command, log-enabled flag, last run, next run, and color-coded status (Active in green / Paused in red / Inactive in yellow) updated on each refresh.
  • Remote SSH cron management - Connect to multiple servers with password or key authentication, manage crontabs for other users with sudo, and write changes back atomically over the same SSH session via Paramiko.
  • Built-in job logging - A shell wrapper script automatically installed on local and remote hosts captures every cron job’s stdout and stderr into timestamped per-job log files, with a dedicated TUI modal to view them without leaving the app.
  • Human-readable expression parser - Cron expressions including special syntax like @daily, @weekly, and @monthly are translated to plain English using cron-descriptor so you can validate schedules at a glance before saving.
  • Path autocompletion with caching - Tab-triggered autocomplete for command fields starts from the user’s home directory, caches directory listings to reduce I/O, filters dotfiles by default, and correctly handles multi-argument commands without losing surrounding context.
  • Case-insensitive job search - Press / to open a search prompt and find jobs by identifier, command, or expression; matched cells are highlighted in bold yellow and n/N cycle through results across the entire table.
  • Pause and resume without deletion - Toggle any job between Active and Paused state in place, preserving its configuration for later resumption with a single keypress — no need to delete and recreate entries.
  • Vim-style keybindings - Navigate with h/j/k/l, create with c, delete with D, edit with e, view logs with L, and quit with q — the complete workflow is keyboard-accessible without a mouse.

Common Use Cases

  • Multi-server cron auditing - A DevOps engineer connects to a fleet of Linux servers sequentially to inspect and update scheduled jobs across all of them from a single terminal session without opening multiple SSH terminals.
  • Debugging failing scheduled tasks - A developer enables logging on a misbehaving cron job, waits for the next run, and opens the log viewer inside Cronboard to read the captured output and error messages without SSHing into the host separately.
  • Safe schedule iteration - A sysadmin pauses a high-frequency cleanup job, edits its expression, reads the live next-run time to verify correctness, then resumes it — all without deleting and recreating the crontab entry.
  • Cron onboarding for new engineers - A tech lead uses Cronboard’s real-time expression parser as an interactive teaching tool to demonstrate how cron schedules work and validate new engineers’ understanding hands-on.
  • Service account cron management - An administrator uses Cronboard’s sudo-based user switching to inspect and update crontabs for system service accounts without switching Linux users in the terminal.
  • Remote job creation with autocompletion - A backend engineer creates a new deployment script cron job on a staging server using path autocompletion to avoid typos, immediately seeing the computed next-run time before saving.

Under The Hood

Architecture Cronboard follows a layered Textual application structure where a top-level App class manages global state and screen navigation while delegating cron-specific logic to a widget tier (CronTable, CronTabs, CronTree) and a service tier (encryption, logging, messages, autocomplete). Screens handle modal flows for job creation, deletion, SSH connection, and log viewing, communicating results back to the main app through Textual’s callback and message-passing system. The cron wrapper service is the most architecturally interesting piece: it installs a shell script on local or remote hosts, base64-encodes command payloads to avoid shell quoting hazards, and abstracts local versus remote execution behind a uniform interface. Some coupling between UI widgets and system-level cron operations remains, but the service extraction in recent releases has meaningfully improved separation compared to earlier versions.

Tech Stack The application is built on Python 3.13+ with Textual as the terminal UI framework and textual-autocomplete for interactive path input. Cron schedule management uses python-crontab for reading and writing crontab files and croniter for computing next and previous run times, while cron-descriptor converts expressions to English prose. Remote server access relies on Paramiko for SSH connections and SFTP file transfers. Encryption of stored server passwords uses the cryptography library’s Fernet symmetric cipher with per-installation key generation managed through a dedicated encryption service. Build and packaging use setuptools with a pyproject.toml definition and a cronboard CLI entrypoint, with distribution extended through a Nix flake and AUR package beyond PyPI and Homebrew.

Code Quality The project has comprehensive CI coverage with dedicated GitHub Actions workflows for running the pytest test suite on every pull request, automated releases, and a stale issue bot for triage hygiene. Tests use pytest-asyncio and Textual’s pilot API to drive the app in headless mode, covering tab navigation, refresh behavior, quit handling, and message dispatch — a notably higher quality bar than pure unit tests with mocks. The services layer uses explicit type annotations throughout, and the cron wrapper’s base64 payload encoding is well-documented with a named prefix constant to distinguish legacy and current wrapped commands. Error handling in the SSH code uses typed exception catches with meaningful fallback behavior. Some areas like the CronTable widget still mix display and data concerns, and inline comment density is moderate rather than abundant, but overall the codebase has matured substantially since its initial release.

What Makes It Unique Cronboard’s integrated logging wrapper is its most distinctive technical contribution: rather than merely displaying cron jobs, it installs a shell script that intercepts execution, captures stdout and stderr, and writes timestamped log files to per-job directories — transparently on both local systems and remote SSH hosts. Combined with the in-TUI log viewer modal, this gives operators a debugging workflow that no other open-source cron manager provides in a terminal context. The autocompletion engine with directory-level caching and multi-argument command awareness goes beyond typical TUI autocomplete implementations, correctly handling commands like cp PATH_1 PATH_2 by detecting which path segment is being completed. Real-time next-run and last-run computation via croniter, plus support for special expressions like @daily, means users get immediate feedback for schedule validation without leaving the interface.

Self-Hosting

Cronboard is released under the Apache License 2.0, a permissive open-source license that allows use in commercial products, modification, redistribution in source or binary form, and sublicensing without any copyleft requirements. The only obligations are preserving copyright notices and providing attribution in derived works. There are no enterprise editions, commercial add-ons, license checks, or feature flags in the codebase — the full feature set is freely available to anyone, and the project is funded entirely through voluntary GitHub Sponsors.

Running Cronboard yourself means accepting responsibility for the operational environment: the application requires Python 3.13+ and a working crontab installation on every host where jobs are managed. Remote access relies on SSH connectivity and appropriate sudo permissions, which must be configured independently by the operator. There is no persistent daemon, no database, and no web server — Cronboard reads and writes crontabs directly through the system crontab command, so its attack surface is limited to permissions already held by the running user. The cron wrapper script is installed automatically into ~/.config/cronboard/ on first use; no system-level installation is required beyond the pip or Homebrew package.

As a single-binary TUI tool with no hosted backend, Cronboard offers no managed upgrade path, no high-availability configuration, no cloud backups, and no vendor support channels. The project moves quickly with roughly two releases per month on GitHub, but patch timing depends entirely on the open-source maintainer. Users operating in regulated environments or requiring formal SLAs should evaluate whether a commercial cron management or job scheduling platform with enterprise support contracts better fits their risk and compliance requirements.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search