Usage
Cronhoster has two halves, joined by the sync. On the client side you keep a local folder of plain JavaScript and work in it — authoring, editing and testing jobs. On the server side the runner takes the folder the client pushed up, discovers which files are jobs, and executes each on its schedule.
Server →
How the runner works: the schedule filename grammar, the single-instance mutex, the script module contract, and what happens each tick.
Client →
The local workflow: your cron folder, what syncs and what stays local, developing in place, and how a set of edits becomes live safely.
The name is the schedule
The only magic is in the filenames. A top-level file whose name matches the schedule
grammar is an entry point; it runs on the cadence its name declares. Nested files never run on their
own — they are libraries the entry points import. Prefix a name with _ and it is ignored
entirely, so you can keep work-in-progress in the same folder.
cron/
digest.every.30m.cron.js → every 30 minutes
backup.daily.0300.cron.js → daily at 03:00 (UTC)
sweep.hourly.15.cron.js → at :15 past every hour
ping.every.30s.cron.js → every 30 seconds
lib/format.js → supporting module (imported, never run)
_draft.every.10s.cron.js → ignored (leading _ = local only)
The full grammar, with every unit and range, lives in the Schedules reference. Start with the server to see how a tick turns into a running process.