Developer guide
Move AWS EventBridge, Cloud Scheduler, and EasyCron onto a runner you own
Cloud cron is a timer in someone else’s account. Self-hosting puts the schedule next to the process it wakes, on disk you already back up.

AWS EventBridge Scheduler, Google Cloud Scheduler, and EasyCron all store the expression, the target URL, and often a bearer token outside your VPC. You pay per invocation or per job cap. Latency includes a hop from their region to yours. When the rule is deleted in the console, the history goes with it.
NexusCron inverts that. The scheduler is a Docker service on the same machine (or the same private network) as the job. SQLite holds definitions and run rows. HTTP fires locally. One payment for NexusCron.
Why self-hosting wins on architecture
Same-host fire
No public ingress required for internal jobs. The ping never leaves the box.
Disk is the source of truth
Jobs and logs are files you rsync. Cloud consoles are not a backup.
No invocation tax
Five-minute health checks do not belong on a metered EventBridge rule.
Docker Compose
Deploy next to the app the jobs call. Secrets stay in cron.env.
services:
nexuscron:
image: nexuscron:latest
restart: unless-stopped
ports:
- "127.0.0.1:8787:8787"
environment:
TZ: UTC
NEXUSCRON_DATA: /data
NEXUS_TELEMETRY: "off"
CRON_ADMIN_TOKEN: ${CRON_ADMIN_TOKEN}
volumes:
- ./data:/data
- ./jobs.json:/app/jobs.json:ro
- ./cron.env:/run/secrets/env:roMap cloud rules to jobs.json
Keep the same cadence. Point HTTP at loopback when the worker is local.
{
"jobs": [
{
"id": "was-eventbridge-invoice-sweep",
"cron": "0 */6 * * *",
"timezone": "UTC",
"http": {
"url": "http://127.0.0.1:8080/jobs/invoice-sweep",
"method": "POST",
"headers": { "Authorization": "Bearer ${INTERNAL_JOB_TOKEN}" }
},
"retry": { "max": 3, "backoff_ms": 5000 }
},
{
"id": "was-cloud-scheduler-health",
"cron": "*/5 * * * *",
"http": {
"url": "https://app.yourdomain.com/internal/health",
"method": "GET"
}
}
]
}Cutover
- Export every cloud timer (expression, URL, headers, timezone).
- Compose up NexusCron. Hit /health.
- Load jobs.json. Run one job immediately.
- Dual-run one interval if the endpoint is idempotent.
- Disable the EventBridge rule, Cloud Scheduler job, or EasyCron entry.
# Inventory EventBridge / Cloud Scheduler / EasyCron, then: curl -sS http://127.0.0.1:8787/health curl -sS -X POST http://127.0.0.1:8787/api/jobs/was-cloud-scheduler-health/run \ -H "Authorization: Bearer $CRON_ADMIN_TOKEN" # Dual-run one interval, then disable the cloud rule.
Product page: NexusCron Self-Hosted Task Scheduler. Related: self-hosted cron setup.
NexusCron
Own the scheduler
$94.99one-time
- Source license for NexusCron
- Docker Compose and jobs.json examples
- HTTP jobs, retries, SQLite history
- No monthly EventBridge or EasyCron bill
Checkout stays on Whop. You get the source after payment.
Questions people ask before they switch
What counts as a cloud cron provider here?
AWS EventBridge Scheduler, Google Cloud Scheduler, Azure Logic Apps recurrences, EasyCron, cron-job.org, and GitHub Actions cron. If the timer lives in someone else’s account, it belongs on this list.
Do I need a public URL for every job after the move?
No. Jobs that only wake an app on the same host can use http://billing.internal or 127.0.0.1. That is the main architectural win versus a SaaS ping from the public internet.
How do I keep EventBridge rate expressions?
Map rate(5 minutes) to */5 * * * * and rate(1 day) to a daily cron with TZ set. One-shot EventBridge schedules become delayed jobs, not cron rows.
What if a job needs secrets from the cloud provider?
Copy them into cron.env on the host. Do not paste IAM keys into jobs.json. Pair EnvSync if you already distribute .env files across boxes.
Keep reading
Guide
Self-hosted cron alternative
Stop paying a monthly bill to fire HTTP on a timer. NexusCron is a self-hosted cron alternative you deploy with Docker on machines you already own.
Guide
EasyCron and cron-job.org alternative
Compare EasyCron, cron-job.org, and other hosted cron products with NexusCron. Same job, no subscription, logs and secrets stay on your disk.
Guide
Migrate off EasyCron to a self-hosted runner
Step-by-step migration from EasyCron to a self-hosted cron runner. Export jobs, map cron expressions, Docker Compose, HTTP pings, and cutover without downtime.
Guide
Replace cloud cron services with self-hosted NexusCron
Architecture, Docker Compose, production env vars, and cutover for replacing hosted cron with NexusCron on a VPS you already run. One lifetime payment.
Guide
Migrate EasyCron jobs to self-hosted NexusCron
Architecture, Docker Compose, and cost math for replacing $20–$50/month hosted cron with NexusCron on a VPS you already run. One lifetime payment.
Guide
Self-hosted webhook router
A self-hosted webhook router that receives, transforms, and forwards events on your infrastructure. One payment. No Zapier tax for simple routing.
Guide
Replace cloud webhook services with self-hosted Webhook Router
Architecture, Docker Compose, and config mapping to replace Hookdeck, Svix, Zapier, and Make with NexusCore Webhook Router on your VPS. One lifetime payment.
Guide
Replace cloud webhook queues with local SQLite routing
Technical architecture for replacing cloud webhook queues with local SQLite routing. Production Docker Compose, under 50MB RAM, WAL mode, retries, and dead-letter replay.
Guide
Self-hosted pipeline setup
NexusPipeline is a FastAPI Docker execution engine. Clone it, compose up, and keep job state on disk you control. One payment. No worker SaaS.
Guide
Self-hosted admin dashboard setup
NexusAdmin is the self-hosted dashboard that sits next to NexusPipeline. One payment, Docker Compose, no SaaS admin tenant.
Guide
Self-hosted log stream setup
LogStream is a single-binary Node.js collector. HTTP and UDP ingest, SQLite, live dashboard, webhook alerts. One payment. No observability SaaS.
Guide
Self-hosted env sync setup
EnvSync Agent syncs .env values across VPS hosts, laptops, and microservices. Encrypted key-value store. One payment. No secrets tenant.
Guide
Self-hosted API proxy setup
API Proxy Service sits between your code and upstream APIs. Retries, rate limits, fallbacks, circuit breakers. One payment. No gateway SaaS.