llms.txt
# CronWatch
> Open source cron and scheduled-job monitoring as a library: @cronwatch/sdk for TypeScript (Node, Cloudflare Workers, Deno, Bun), the cronwatch gem for Ruby and Rails, cronwatch-sdk for Python (Django, Celery, APScheduler), cronwatch/cronwatch for PHP (Laravel, Symfony, WordPress, Drupal, Craft CMS), cronwatch.dev/go for Go (robfig/cron, gocron, River, Asynq), the cronwatch crate for Rust (tokio-cron-scheduler, apalis), the cronwatch package on Hex for Elixir (Oban, Quantum), dev.cronwatch:cronwatch on Maven Central for Java (Spring Boot, Quartz, JobRunr), and the Cronwatch package on NuGet for .NET (ASP.NET Core, Hangfire, Quartz.NET). Runs inside your app, writes to your own database, alerts when a run is missed, fails, gets stuck, runs slow or goes over budget.
Platforms: Vercel cron, Next.js, SvelteKit, Nuxt, React Router, NestJS, Strapi, Netlify, Firebase, Convex, Trigger.dev, Inngest, Cloudflare Workers with D1, pg_cron and Supabase Cron, node-cron, BullMQ, GitHub Actions, Rails with ActiveJob, Solid Queue or Sidekiq, Django, Celery and beat, APScheduler, AWS Lambda, Laravel's scheduler and queues, the Symfony Scheduler and Messenger, WordPress's WP-Cron, Drupal cron and queues, Craft CMS console commands and queue jobs, Go's robfig/cron, gocron, River and Asynq, Rust's tokio-cron-scheduler and apalis, Elixir's Oban and Quantum, Java's Spring @Scheduled methods (with ShedLock), Quartz and JobRunr, .NET's Hangfire, Quartz.NET and hosted jobs in the Generic Host.
## Agent setup
- [Setup instructions for an agent](https://cronwatch.dev/prompt.txt): everything an agent needs to add CronWatch to an app, in one file
## TypeScript
- [Getting started](https://cronwatch.dev/docs/index.md): Install @cronwatch/sdk, declare a job, wrap it, mount the dashboard, and run the first check.
- [Next.js and Vercel](https://cronwatch.dev/docs/nextjs.md): Vercel cron, route handlers, the Postgres store, the check cron, and the Node runtime.
- [Node servers and scripts](https://cronwatch.dev/docs/node.md): Long-running Node servers, node-cron, BullMQ, and plain scripts run from crontab.
## More JavaScript platforms
- [SvelteKit](https://cronwatch.dev/docs/sveltekit.md): A +server.ts endpoint for each job, the dashboard in a catch-all route, and the check on adapter-node or a platform cron.
- [Nuxt and Nitro](https://cronwatch.dev/docs/nuxt.md): Nitro scheduled tasks wrapped with job.run(), a Nitro plugin for the check, and the dashboard as a server route.
- [React Router and Remix](https://cronwatch.dev/docs/react-router.md): Resource routes for job endpoints and the dashboard, in React Router framework mode and Remix 2.
- [NestJS](https://cronwatch.dev/docs/nestjs.md): A module that provides the client, @Cron methods wrapped with job.run(), and the dashboard through a controller.
- [Strapi](https://cronwatch.dev/docs/strapi.md): Cron tasks in config/cron-tasks wrapped with job.run(), the check from bootstrap, and the dashboard as a global middleware.
- [Netlify](https://cronwatch.dev/docs/netlify.md): Scheduled functions wrapped with job.run(), a scheduled function for the check, and the dashboard as a function on a path.
- [Firebase](https://cronwatch.dev/docs/firebase.md): Scheduled functions from firebase-functions/v2/scheduler wrapped with job.run(), a scheduled check, and the dashboard as an HTTP function.
- [Convex](https://cronwatch.dev/docs/convex.md): Convex crons calling Node actions wrapped with job.run(), a Postgres store outside Convex, and a cron for the check.
- [Trigger.dev](https://cronwatch.dev/docs/trigger-dev.md): schedules.task runs wrapped with job.run(), attempts and retries, the Postgres store reachable from Trigger.dev, and where the check runs.
- [Inngest](https://cronwatch.dev/docs/inngest.md): Cron-triggered Inngest functions as one run each, started in the first step and finished in the last, with failures from onFailure, and the check as another cron function.
- [Cloudflare Workers](https://cronwatch.dev/docs/cloudflare.md): Cron Triggers, the D1 store, the check on a trigger of its own, the dashboard in fetch, and secrets with wrangler.
- [Supabase and pg_cron](https://cronwatch.dev/docs/supabase.md): Watch pg_cron jobs, including Supabase Cron, by reading cron.job and cron.job_run_details on every check.
## Ruby
- [Ruby on Rails](https://cronwatch.dev/docs/rails.md): The cronwatch gem in a Rails app: the install generator, ActiveJob and Sidekiq jobs, schedules read from Solid Queue or sidekiq-cron, the check job, and the dashboard.
- [Ruby](https://cronwatch.dev/docs/ruby.md): The cronwatch gem in plain Ruby, its API, and sharing one database with Node, Python, PHP, Go, Rust, Elixir, Java, and .NET.
## Python
- [Django](https://cronwatch.dev/docs/django.md): cronwatch-sdk in a Django app: settings, jobs in management commands, the cronwatch_check command for cron, and the dashboard under your URLs.
- [Celery](https://cronwatch.dev/docs/celery.md): Watch Celery tasks and beat schedules with no task changes: every run recorded from Celery's signals, retries and lost workers handled, and a check task for beat.
- [Python](https://cronwatch.dev/docs/python.md): cronwatch-sdk in plain Python: jobs, the check, stores, alert channels, Claude triage, pg_cron, and sharing one database with the other languages.
## PHP
- [Laravel](https://cronwatch.dev/docs/laravel.md): cronwatch/cronwatch in a Laravel app: every scheduled task watched with no code changes, per-task options, queued jobs, the check in the scheduler, the store in the app's database, and the dashboard behind a gate.
- [Symfony](https://cronwatch.dev/docs/symfony.md): cronwatch/cronwatch in a Symfony app: a bundle that watches every Scheduler message with no code changes, Messenger messages that opt in, the check in your default schedule, and the dashboard behind your security.
- [WordPress](https://cronwatch.dev/docs/wordpress.md): The CronWatch plugin for WordPress: every WP-Cron event watched with no code, alerts by email, Slack, Discord, SMS, a webhook, or an error tracker, a real cron for quiet sites, the dashboard in wp-admin, and the JSON API for agents.
- [Drupal](https://cronwatch.dev/docs/drupal.md): The CronWatch module for Drupal: every cron run and each module's hook_cron recorded with no code, queue workers that opt in, drush cronwatch:check, the store in the site's database, and the dashboard under Reports.
- [Craft CMS](https://cronwatch.dev/docs/craft.md): The CronWatch plugin for Craft CMS: the console commands your crontab runs and the queue jobs you choose, craft cronwatch/check, the store in Craft's database, and the dashboard in the Control Panel.
- [PHP](https://cronwatch.dev/docs/php.md): cronwatch/cronwatch in plain PHP: jobs, crontab scripts, vendor/bin/cronwatch check, the dashboard, stores, alert channels, Claude triage, pg_cron, and sharing one database with Node, Ruby, Python, Go, Rust, Elixir, Java, and .NET.
## Go
- [Go](https://cronwatch.dev/docs/go.md): cronwatch.dev/go in a Go app: jobs with context, the check, the dashboard as an http.Handler, job handlers and AWS Lambda, the database/sql store, alert channels, Claude triage, pg_cron, and sharing one database with the other languages.
- [Go schedulers](https://cronwatch.dev/docs/go-schedulers.md): Watch robfig/cron, gocron, River, and Asynq with one line each: entries become jobs with their schedules, every run and retry is recorded, and the check runs beside them.
## Rust
- [Rust](https://cronwatch.dev/docs/rust.md): The cronwatch crate in a Rust service: jobs on tokio, the check, the dashboard nested in axum or served as a tower service, job handlers and AWS Lambda, the sqlx store, alert channels, Claude triage, pg_cron, the blocking client, and sharing one database with the other languages.
- [Rust schedulers](https://cronwatch.dev/docs/rust-schedulers.md): Watch tokio-cron-scheduler and apalis: jobs declared with the scheduler's own schedules, checked against its fire times, every run and retry recorded, and the check running beside them.
## Elixir
- [Elixir](https://cronwatch.dev/docs/elixir.md): The cronwatch package in an Elixir app: an instance in the supervision tree, jobs run in the calling process, the check, the dashboard and job handlers as Plugs in a Phoenix router, the Ecto store, alert channels, Claude triage, pg_cron, telemetry, a release's crontab, and sharing one database with the other languages.
- [Elixir schedulers](https://cronwatch.dev/docs/elixir-schedulers.md): Watch Oban and Quantum with one entry in the instance's options and no change to your workers: jobs declared from the scheduler's own crontab, checked against its fire times, every run and retry recorded through its telemetry, and the check running beside them. Plus a plain crontab.
## Java
- [Java](https://cronwatch.dev/docs/java.md): dev.cronwatch:cronwatch in a JVM service: one client, jobs run in the calling thread, the check, the SQL store over your DataSource, alert channels, Claude triage, pg_cron, the dashboard and job handlers on the JDK's server, a servlet container, or Spring, a crontab's check with CronwatchCli, and sharing one database with the other languages.
- [Java schedulers](https://cronwatch.dev/docs/java-schedulers.md): Watch Spring's @Scheduled methods with no code changes, ShedLock, Quartz, and JobRunr: jobs declared from the scheduler's own schedules, checked against its fire times, every run and retry recorded in the thread that runs it, and the check running once per cluster. Plus a plain crontab.
## .NET
- [.NET](https://cronwatch.dev/docs/dotnet.md): The Cronwatch package in a .NET service: one client, jobs run in the caller's flow, the check, the SQL store over your DbDataSource, alert channels, Claude triage, pg_cron, the dashboard and job handlers on ASP.NET Core or any server, AddCronwatch in the Generic Host, a crontab's check with CronwatchCli, Native AOT, and sharing one database with the other languages.
- [.NET schedulers](https://cronwatch.dev/docs/dotnet-schedulers.md): Watch Hangfire and Quartz.NET with no change to your jobs, or run hosted jobs on a cron in the Generic Host: jobs declared from the scheduler's own schedules, checked against its fire times, every attempt recorded in the flow that runs it, and the check running once per cluster. Plus a plain crontab.
## Reference
- [Schedules, grace, and timeouts](https://cronwatch.dev/docs/schedules.md): Cron expressions, intervals, timezones, and exactly how a missed or stuck run is decided.
- [What it catches](https://cronwatch.dev/docs/conditions.md): The conditions CronWatch reports, how each is decided, baselines, expect rules, budgets, floors, and silence.
- [Alerts](https://cronwatch.dev/docs/alerts.md): Slack, Discord, signed webhooks, email, SMS, error trackers, the console, custom channels, and the alert payload.
- [AI triage](https://cronwatch.dev/docs/triage.md): Attach a short diagnosis from Claude to every alert except recoveries, with your own API key.
- [Stores](https://cronwatch.dev/docs/stores.md): Memory, SQLite, Postgres, and D1 stores, retention, and the interface for writing your own.
- [Dashboard and API](https://cronwatch.dev/docs/dashboard.md): The routes, the token, the endpoints, and the JSON shapes the MCP server reads.
- [MCP server](https://cronwatch.dev/docs/mcp.md): Give Claude Code, Cursor, or any MCP client read and control access to your jobs.
- [Agent skill](https://cronwatch.dev/docs/agent-skill.md): An agent skill so the agent that writes a cron job also writes its monitor.
- [TypeScript API reference](https://cronwatch.dev/docs/api.md): Every option on cronwatch(), cw.job(), the job handle, the job context, and the client.
- [Limits and design notes](https://cronwatch.dev/docs/limits.md): What a library cannot see, how it behaves across instances, and what it deliberately does not do.
- [Environment variables](https://cronwatch.dev/docs/environment.md): Every environment variable each CronWatch library reads, by language and integration, with what it does and what happens when it is not set.
- [Stability](https://cronwatch.dev/docs/stability.md): What every 1.x release promises and what it does not, how deprecations and major releases work, and which language and framework versions are supported.
- [Deprecations](https://cronwatch.dev/docs/deprecations.md): Every deprecated name in every CronWatch library, with what to use instead and the release it goes in.
## Install
- [npm](https://www.npmjs.com/package/@cronwatch/sdk): npm install @cronwatch/sdk
- [RubyGems](https://rubygems.org/gems/cronwatch): bundle add cronwatch
- [PyPI](https://pypi.org/project/cronwatch-sdk/): pip install cronwatch-sdk
- [Packagist](https://packagist.org/packages/cronwatch/cronwatch): composer require cronwatch/cronwatch
- [pkg.go.dev](https://pkg.go.dev/cronwatch.dev/go): go get cronwatch.dev/go
- [crates.io](https://crates.io/crates/cronwatch): cargo add cronwatch
- [Hex](https://hex.pm/packages/cronwatch): {:cronwatch, "~> 0.14"} in mix.exs
- [Maven Central](https://central.sonatype.com/artifact/dev.cronwatch/cronwatch): dev.cronwatch:cronwatch:0.14.1, or dev.cronwatch:cronwatch-spring-boot-starter:0.14.1 in a Spring Boot app
- [NuGet](https://www.nuget.org/packages/Cronwatch): dotnet add package Cronwatch, or Cronwatch.AspNetCore in an ASP.NET Core app
- [WordPress plugin](https://wordpress.org/plugins/cronwatch/): wp plugin install cronwatch --activate, or search for CronWatch under Plugins, Add New Plugin in wp-admin
- [MCP server](https://www.npmjs.com/package/@cronwatch/mcp): npx -y @cronwatch/mcp
## Optional
- [Source on GitHub](https://github.com/cronwatchdev/cronwatch)
- [Changelog](https://github.com/cronwatchdev/cronwatch/blob/main/CHANGELOG.md)