About this project
go-schedule is a cross-platform task scheduler implemented in Go for Linux, macOS, and Windows. It is designed around making recurring schedules understandable: users can write plain-language expressions such as 'every 15 minutes' or 'weekdays at 09:00', or use a documented subset of cron, including conventional five-field and bounded six-field seconds forms. Accepted schedules are echoed back with the scheduler's interpretation and next run times, helping catch misreadings before they fire.
The project provides three main interfaces: a CLI (gosched), a Wails-based desktop GUI, and a background daemon (goschedd). The daemon owns the scheduling engine, SQLite store, and executor, while the CLI and GUI are thin clients over a local IPC endpoint (Unix domain socket on Linux/macOS, named pipe on Windows). This design means closing the GUI does not stop schedules, and the CLI and GUI operate on the same state. The daemon can register as a system service through systemd, launchd, or Windows Service, so schedules start on boot and can run without an interactive login.
Scheduling behavior includes IANA timezone support, explicit handling of daylight saving transitions, UTC-based storage, and recurrence semantics based on RFC 5545. After downtime, each task that missed runs gets one catch-up run and then resumes normally. Per-task overlap policies can queue one pending run (the default), skip the new run, or allow concurrent runs. Calendar edge cases—such as tasks scheduled for the 31st, 29 February, or the fifth Friday—are handled by a declared policy: skip the period, fall back to the last valid date, or roll into the next period.
Additional capabilities include nested groups with cascading enable/disable, draft tasks that can be saved before all details are known, manual-only tasks, and chaining where a task completion with success, failure, or any terminal result can trigger a target task. Chains are described as durable at-least-once delivery, and pending work survives daemon restart. Local external triggers and trigger sets let other processes request normal scheduler runs using opaque keys; trigger sets support 1–99 independently usable keys per task. Filesystem watchers can request a task run when a selected file is created, written, or atomically replaced and becomes stable; directory watchers use a basename glob and can optionally include real subdirectories.
Cron interoperability includes gosched cron import, explain, and export. Import reads an existing crontab, shows each line in plain language and its next run, and creates tasks; --dry-run previews changes. Unsupported or ambiguous constructs are refused rather than approximated. The @reboot form and readable 'at scheduler startup' form create a cross-platform startup task that runs once per daemon process start.
The project is Apache-2.0 licensed. Releases include a Windows MSI installer, macOS desktop bundle, Linux desktop bundle, and headless daemon-and-CLI archives. Documentation covers installation, the CLI reference, GUI fields, cron interoperability, security, and maintainer test scripts. Development is spec-driven with specifications under specs/001-task-scheduler and uses Go tooling standards including gofmt, go vet, golangci-lint, go test -race, and coverage targets on core packages.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.