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.

1

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
2

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"
}
Keep config.json out of version control — the token is a credential. See the Commands reference for every field and flag.
3

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.

4

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.