A cross-platform (Linux · macOS · Windows) task scheduler written in Go — cron-level power without the cryptic syntax. CLI-first, with a Go-native Material Design desktop GUI built on top.
Status: Feature-complete (spec-driven via Spec Kit). The CLI, daemon, and Material Design desktop GUI are all implemented and tested: human-readable & one-off scheduling, per-task timezones with DST handling, nested groups, downtime catch-up, and a Fyne GUI (calendar, guided editor with live preview, real-time logs). See CHANGELOG.md. The GUI requires a C toolchain + OpenGL to build (CI/releases handle this); the daemon and CLI are cgo-free.
cron is powerful but its */15 * * * * syntax is hard to read and easy to get wrong.
go-schedule gives you the same scheduling power expressed in plain language — "every 15 minutes",
"every weekday at 9:00 AM", "the 3rd Wednesday of each month", or a single one-off run — with a
calendar/timeline GUI for managing it all.
Implemented (✅) and planned:
- ✅ Human-readable schedules — recurring and one-off, no cron strings.
- ✅ Cron parity — anything cron can express, this can too (intervals, ordinal weekdays, etc.).
- ✅ Per-task timezones with correct Daylight Saving Time handling; UTC backend.
- ✅ Nested task groups (groups within groups) with cascading enable/disable.
- ✅ Downtime catch-up — one catch-up run per task after missed runs, then resume.
- ✅ Overlap control — queue-one-pending by default, configurable per task, with alerts.
- ✅ Starts on boot — runs as a system-wide service (systemd / launchd / Windows Service); single-instance guarded.
- ✅ Material Design desktop GUI — calendar/schedule views, guided task editor with live
schedule preview, group tree, and a real-time logs view. Opening the GUI never leaves a
visible console window (
gosched gui). New to the task editor? See the GUI field reference.
A single background daemon (goschedd) hosts the scheduling engine, persistence, and
executor, and is registered as a system service. The CLI (gosched) and desktop GUI
(gosched-gui) are thin clients that talk to the daemon over local IPC (Unix socket / Windows
named pipe), so both operate on identical state and the engine keeps running regardless of which
client is open.
See specs/001-task-scheduler/plan.md for the full design.
cmd/ goschedd (daemon) · gosched (CLI) · gosched-gui (Fyne GUI)
internal/ engine · schedule · task · store · executor · catchup · timezone · api · ipc · service · config · platform
gui/ Fyne views (schedule list + calendar, editor, logs, groups)
specs/ spec-driven development artifacts (spec, plan, tasks, contracts)
Each release ships installers and
archives per platform. Verify downloads against SHA256SUMS.txt.
Download go-schedule_<ver>_windows_amd64.msi and run it. It installs to Program Files,
registers the background scheduler as an auto-starting Windows service, and adds a Start-Menu
shortcut — no extracting a zip or running an exe from Downloads. Launch go-schedule from the
Start Menu; uninstall via Apps & features. Full steps: the
Windows install guide.
go-schedule-desktop_<ver>_darwin_<arch> bundles the GUI + daemon + CLI together. The GUI
ships as gosched-gui.app (the daemon and CLI live inside it) and auto-starts the background
daemon the first time, so there's nothing to configure:
open gosched-gui.appThe auto-started daemon keeps running so your tasks fire even after you close the window. For a daemon that also starts on boot, install it as a system service (below).
go-schedule_<ver>_<os>_<arch> contains just goschedd + gosched (Linux & macOS, amd64 +
arm64). Register the service to start on boot:
sudo ./gosched service install # admin/root required
sudo ./gosched service start
./gosched health # expect: daemon ok
./gosched task add hello --command /usr/bin/true --schedule "every weekday at 09:00"Windows users: see the step-by-step Windows install guide.
Once the GUI is open, the GUI field reference explains what every field in the task editor accepts.
Spec-driven via Spec Kit. The source of truth lives under
specs/001-task-scheduler/:
spec.md— what & whyplan.md— architecture & tech choicestasks.md— dependency-ordered task listcontracts/— CLI & local API contracts
Engineering standards are governed by the project
constitution: gofmt/go vet/golangci-lint clean,
go test -race, ≥80% coverage on core packages, and a documented dispatch-latency budget.
Licensed under the Apache License 2.0. © 2026 ShruggieTech.