Scheduled jobs for TypeScript developers

Human-readable scheduled jobs for TypeScript developers.

Schedule one-time and recurring HTTP jobs with one clean API. No cron expressions, no queues, no workers. Just runner.schedule() and done.

Schedule anything in 3 lines

Install the SDK, create a Runner instance, and schedule your first job.

schedule.ts
import { Runner } from "@maksymdolynchuk/runner"

const runner = new Runner(process.env.RUNNER_API_KEY)

// One-time job
await runner.schedule({
  url: "https://myapp.com/api/welcome-email",
  runAt: Date.now() + 1000 * 60 * 60,
  payload: { userId: "user_123" }
})

// Recurring job — human-readable
await runner.schedule({
  url: "https://myapp.com/api/daily-digest",
  runEvery: "morning"
})

Forget cron. Use words.

Schedule with presets like "midnight", "morning", "endOfMonth" or pass a custom day/time object.

"midnight"

Every day at 00:00

"morning"

Every day at 08:00

"evening"

Every day at 18:00

"startOfMonth"

1st of every month

"endOfMonth"

Last day of every month

{ day: "monday", hour: 9 }

Every Monday at 09:00

Built for real use cases

Welcome emails

Send onboarding emails 30 minutes after signup.

Daily digests

Run digest generation every morning automatically.

Monthly reports

Trigger invoice and report generation at endOfMonth.

Retry workflows

Retry failed webhook deliveries with backoff.

Payment reminders

Schedule payment reminders 3 days before due date.

Cleanup jobs

Purge expired tokens and temp files at midnight.

How it works

1

Sign up

Create a free account.

2

Create a project

Get your API key.

3

Install the SDK

npm install @maksymdolynchuk/runner

4

Schedule jobs

runner.schedule() from your app.

Start scheduling in minutes

Free tier included. No credit card required.

Get started free