
CronWatch
Cron monitoring as a library for TypeScript, Ruby, Python, PHP, Go, Rust, Elixir, Java, and.NET.
Is this your product? Claim it to edit the listing, post updates and answer questions. Prove it with an email address at the product's domain (the listing becomes Claimed), or put the LotsDirectory badge on your website (the listing becomes Verified, and its link to your website is followed while the badge is live).
Description
Cron monitoring as a library for TypeScript, Ruby, Python, PHP, Go, Rust, Elixir, Java, and.NET. Every run recorded in your own database, and an alert when one is missed, fails, or gets stuck.
About CronWatch
What is CronWatch?
CronWatch is a library that records every run of scheduled jobs in a database the app already has, and it speaks up when a run is missed, fails, gets stuck, runs slow, goes over budget, or quietly does nothing. It is open source under the MIT license. There is no server to run and no account to make.
What CronWatch does
One client per app declares each job once. The schedule, the grace period, and the timeout sit next to the code, and every run lands in SQLite, Postgres, MySQL, or D1. Alerts can go to Slack, Discord, a webhook, email, SMS, or an error tracker, and to Anthropic only when triage is turned on. A dashboard and a JSON API mount inside the app, at /cronwatch by default. An MCP server lets Claude Code, Cursor, or any MCP client read the same records. The same library ships for TypeScript, Ruby, Python, PHP, Go, Rust, Elixir, Java, and .NET.
Who CronWatch is for
Apps that already run scheduled jobs, in TypeScript, Ruby, Python, PHP, Go, Rust, Elixir, Java, or .NET, plus WordPress, Drupal, and Craft CMS. CronWatch is made and maintained by Jon C. Phillips, a product designer and developer.
How CronWatch works
Install the package in the app, pick a store, and create one client. Declare each job with a schedule, a grace period, and a timeout, then wrap the work. For an HTTP job, the handler checks a bearer secret before running, answers 200 with the run id on success and 500 on failure, and a 4xx or 5xx counts as failed. Without a secret the handler fails closed and answers 503, except in development. The check runs every few minutes. Every condition sends one message when it opens, and a successful run that left nothing open sends one recovered message.
Key features
- Missed means a run was due and none started within the grace period. Schedules can be cron expressions, hourly, or every 15m, in any timezone.
- Failed means the function threw, the handler answered 4xx or 5xx, or the output did not satisfy expect.
- Stuck means a run started and was still going past its timeout, or never reported finishing. Slow means a successful run took longer than maxDuration, or more than twice the recent p95.
- Over budget means a reported number went above its ceiling, or three times its median. A number can also go below its floor, or fall to 0 after runs that never did.
- Recovered means a successful run left nothing open. One message names everything that was open. A job that fails all night pages once, and the fix announces itself.
- Triage with an Anthropic API key adds a diagnosis of two to four sentences on each alert. That key is optional.
- The same library ships for TypeScript, Ruby, Python, PHP, Go, Rust, Elixir, Java, and .NET, held to the same behaviour by a shared conformance suite.
- Channels include Slack, Discord, webhook, email, SMS, and error trackers. The alert carries the error and the last lines of output.
Facts from cronwatch.dev, checked 13 October 2026
- CronWatch is open source under the MIT license. Nothing is sent to cronwatch.dev.
- Without a store, runs live in memory and vanish on restart. Without alerts, they go to the console.
- The handler fails closed and answers 503 when the secret is unset, except in development.
- An MCP server can be read by Claude Code, Cursor, or any MCP client.
Written from CronWatch's own website (Homepage, About, Docs). The maker can claim this listing to edit it.
Categories
Frequently asked questions
Is CronWatch a hosted service?
It is a library, not a service. There is no server to run, no account to make, and nothing is sent to cronwatch.dev. Runs, output, and alerts stay in the database the app already has.
What does a check catch?
The check catches a run that was due and never started, a run that started and never finished, and a run that went over budget or below its floor. A recovered message names what was open.
Where do alerts go?
Channels include Slack, Discord, a webhook, email through Resend, Postmark, SendGrid, Mailgun, or SES, SMS through Twilio, and error trackers such as Sentry. Anthropic is used only when triage is on.
Who maintains CronWatch?
CronWatch is made and maintained by Jon C. Phillips, a product designer and developer who has spent over twenty years launching web products. Questions, bug reports, and ideas are welcome on GitHub or through the contact form.