File-based task scheduling

Task schedules that live with your code.

Define tasks beside your project, commit them with your code, then register once and run them from anywhere.

Task lifecycle
~/reporting $ runbinder add --enable reports.runbinder.yaml
[RUNBINDER] Registered task "reports.daily".
~ $ runbinder run reports.daily
[RUNBINDER] Task "reports.daily" completed successfully.
~ $ runbinder list
ID NAMESPACE ACTIVE DIRECTORY LAST RUN
1 reports.daily true ./reporting 06:00:04 (SUCC)
~ $ runbinder log -n 2 reports.daily
Fetched 142 records
Report written to reports/daily.pdf

How it works

From a file in your project to a task you can manage anywhere.

One definition, one registration, one small service. Everything else is a normal command.

01 / DEFINE

Put the schedule beside the work.

Create one small YAML file in your project. It is readable in review, easy to commit, and travels with the code it runs.

~/reporting/reports.runbinder.yaml
namespace: reports.daily
command:
- ./scripts/build-report.sh
cron: "0 6 * * *"
working_dir: .
timezone: America/New_York
02 / REGISTER

Validate it once.

Register the file on the server when you are ready. RunBinder validates the definition and gives the task a namespace you can use from any directory.

~/reporting
~/reporting $ runbinder add --enable reports.runbinder.yaml
[RUNBINDER] Registered task "reports.daily".
Task is enabled and ready for the service.
03 / SCHEDULE

Start one background service.

RunBinder handles due schedules with bounded concurrency, run history, logs, and overlap protection. It stays out of the way after that.

~/reporting
~/reporting $ runbinder service --detach
[RUNBINDER] Service started in the background (PID 23287).
~/reporting $ runbinder status
Is Service Running: TRUE
04 / OPERATE

Use the namespace from anywhere.

Check the YAML state, run a task now, inspect its output, or pause it. The commands work from any directory once the task is registered.

~
~ $ runbinder list
ID NAMESPACE ACTIVE YAML TZ LAST RUN
1 reports.daily true OK America/New_York 06:00:04 (SUCC)
~ $ runbinder run reports.daily # ad hoc one-off run
~ $ runbinder log reports.daily
Fetched 142 records
Report written to reports/daily.pdf
~ $ runbinder disable reports.daily

Right-sized orchestration

Lightweight task scheduling for projects that run directly on a server. Natural for solo work and useful for teams that want straightforward production jobs to stay straightforward.

Get started

One command. One binary.

Install with Go 1.24 or newer, then run runbinder init inside a project.

go install github.com/evanjhopkins/RunBinder/cmd/runbinder@latest