Client
The client is a small stateless Node program that runs on your machine. It reads your cron folder, compares it with what the server holds, and uploads whatever changed. It keeps no state of its own — the folder on disk is the whole truth.
Coming soon — the client download is still being packaged; the config and flags below are the intended interface.
Download the client
Grab the client zip and unpack it anywhere on your machine. It needs Node v20+ and nothing else.
curl -fLO https://cronhoster.org/downloads/cronhoster-client.zip
unzip cronhoster-client.zip
Write config.json
Point the client at your server's IP, paste the API token the installer
printed, and name the folder you want to sync. On the reference machine that folder is
~/Developer/LIVE/Cron.
{
"apiBase": "https://YOUR_SERVER_IP",
"apiToken": "paste-the-token-from-the-installer",
"contentRoot": "~/Developer/LIVE/Cron"
}
config.json out of version control — the token is a
credential. See the Commands reference for every field and flag.Run a sync
Point the client at your config and it mirrors the whole tree up in one pass, then exits.
node client/sync.js --config config.json
Only top-level files whose name matches the
schedule grammar become jobs. Everything else — helpers,
sub-folders, shared modules — syncs alongside and is imported normally. Files and folders that begin
with _ or . are ignored entirely: never uploaded, never run, so you can draft
and test a job locally before it goes live.
Keep it in sync as you edit
Run it on a timer, or hand it --watch to stay resident and re-sync as you save. Each sync
is promoted atomically on the server, so a job never runs against a half-written change — see
Usage → Client.
# stay resident and push edits as they land
node client/sync.js --config config.json --watch
Next steps
The server is running and the client is pushing your folder. Now learn the folder itself — how names become schedules and how the runner executes them.