# Workhorse > A durable job queue for PostgreSQL, with TypeScript, Python, and Go workers on one SQL protocol. Start at [Workhorse for AI coding agents](https://workhorse.run/docs/for-ai-agents.md). Read the agent-facing documentation, decide whether Workhorse fits, then integrate one transactional job from enqueue through confirmation. Append `.md` to any page URL for its Markdown source. A Markdown page shows all three languages where the HTML page shows one. Install with the commands on [Installation](https://workhorse.run/docs/installation.md). They name no version, and the runtime compatibility check confirms the schema before a process starts. [llms-full.txt](https://workhorse.run/llms-full.txt) is every page below in one file, about 279 KB. ## Getting started - [What is Workhorse?](https://workhorse.run/docs.md): A durable job queue that lives inside PostgreSQL, so your jobs commit with your data. - [Installation](https://workhorse.run/docs/installation.md): Add the core package, install its PostgreSQL schema, and check compatibility before a process starts. - [Quickstart](https://workhorse.run/docs/quickstart.md): Install the schema, run your first job, then kill the worker mid-job and watch it finish anyway. - [Core concepts](https://workhorse.run/docs/concepts.md): The mental model behind every job — identity, live state, ownership, delivery, and evidence. ## Producing work - [Enqueue and transactions](https://workhorse.run/docs/enqueue.md): Accept immediate, delayed, batched, or transactional jobs without separating them from application state. - [Payload contracts](https://workhorse.run/docs/contracts.md): Version payload and result validators, bound durable JSON, and keep sensitive fields out of operator views. - [Idempotent enqueue](https://workhorse.run/docs/idempotency.md): Use scoped enqueue keys so repeated acceptance returns the original durable job. - [Keyed debounce](https://workhorse.run/docs/debounce.md): Replace pending work under a stable key while updates continue arriving. - [Keyed throttle](https://workhorse.run/docs/throttle.md): Accept one equivalent job during a busy window and coalesce later triggers into it. - [Priority](https://workhorse.run/docs/priority.md): Run urgent ready jobs before ordinary work while preserving FIFO order among peers. - [Job dependencies](https://workhorse.run/docs/job-dependencies.md): Keep downstream work blocked until its prerequisites reach declared outcomes. - [Schedules](https://workhorse.run/docs/schedules.md): Synchronize named cron definitions during deployment and let any matching worker fire them safely. - [Concurrency policies](https://workhorse.run/docs/concurrency-policies.md): Synchronize durable queue and keyed dispatch budgets that every worker shares. - [Rate limits](https://workhorse.run/docs/rate-limits.md): Synchronize PostgreSQL-owned queue and keyed token buckets across every worker. ## Executing work - [Workers](https://workhorse.run/docs/workers.md): Register handlers, size concurrency, tune the lease, and drain active work safely. - [Batch handlers](https://workhorse.run/docs/batch-handlers.md): Process several jobs of one type through a shared application call while preserving per-job outcomes. - [Retries](https://workhorse.run/docs/retries.md): Give jobs an attempt budget and a persisted backoff policy that PostgreSQL applies consistently. - [Durable execution](https://workhorse.run/docs/durable-execution.md): Use named checkpoints and durable waits so a handler survives retries, crashes, and long pauses. - [Signals](https://workhorse.run/docs/signals.md): Release a worker slot until another process delivers a named JSON payload. - [Human waits](https://workhorse.run/docs/human-waits.md): Store decision context and pause a job until an authenticated operator responds. - [Child jobs](https://workhorse.run/docs/child-jobs.md): Delegate durable work from a handler and join its result without holding a worker slot. - [Progress](https://workhorse.run/docs/progress.md): Publish a live, bounded status value for operators without changing durable control flow. - [Cancellation](https://workhorse.run/docs/cancellation.md): Request a cooperative stop and let PostgreSQL preserve the winning terminal outcome. - [Deadlines and timeouts](https://workhorse.run/docs/deadlines.md): Bound a job by wall-clock time, or bound one attempt's execution, with two independent clocks. ## Operating - [Queries and timelines](https://workhorse.run/docs/queries.md): Inspect any job's state, list work with bounded payloads, replay lifecycle evidence, and ask the queue how it feels. - [Dead letters and redrive](https://workhorse.run/docs/dead-letters.md): Inspect terminal failures, then create fresh, fully audited jobs from them once the underlying incident is fixed. - [Operations](https://workhorse.run/docs/operations.md): A map of Workhorse's operational surface — which page owns each concern, and the fleet controls that live nowhere else. - [Worker processes](https://workhorse.run/docs/worker-processes.md): Run workers as dedicated processes with one configuration file, graceful drain on SIGTERM, and probe endpoints for your orchestrator. - [Maintenance and retention](https://workhorse.run/docs/maintenance.md): Workers keep PostgreSQL tidy automatically — promotion, recovery, partitions, and evidence retirement — while you set policy and watch for lag. - [Queue health](https://workhorse.run/docs/queue-health.md): Read one bounded snapshot with a verdict and stable reason codes for exceeded budgets. ## Integrations - [Which integrations does Workhorse support?](https://workhorse.run/docs/integrations.md): The two support tiers, what each one proves, and every integration Workhorse documents. - [Drizzle](https://workhorse.run/docs/drizzle.md): Adapt a node-postgres Drizzle database and enqueue jobs inside caller-owned transactions. - [Prisma](https://workhorse.run/docs/prisma.md): Adapt a Prisma client and enqueue jobs inside caller-owned interactive transactions. - [TypeORM](https://workhorse.run/docs/typeorm.md): Adapt a TypeORM data source and enqueue jobs through transactional entity managers. - [Kysely](https://workhorse.run/docs/kysely.md): Adapt a Kysely database and enqueue jobs inside caller-owned transactions. - [Can I use Workhorse from a serverless app?](https://workhorse.run/docs/serverless.md): Decide where Workhorse can enqueue and where its worker process must run. - [Can I use Workhorse with my web framework?](https://workhorse.run/docs/frameworks.md): Three decisions a framework changes, and the one question that answers each for any framework. - [Dashboard](https://workhorse.run/docs/dashboard.md): Mount the operator interface behind application authorization, or run it standalone with a built-in administrator login. ## Reference - [Examples](https://workhorse.run/docs/examples.md): Seven end-to-end patterns, from transactional enqueue to a durable agentic flow. - [Durable agentic flow](https://workhorse.run/docs/agentic-flow.md): Compose checkpoints, child tools, durable timers, and approval signals in an ordinary handler. - [Workhorse for AI coding agents](https://workhorse.run/docs/for-ai-agents.md): Read the agent-facing documentation, decide whether Workhorse fits, then integrate one transactional job from enqueue through confirmation. - [API overview](https://workhorse.run/docs/api.md): The public surface grouped by concern — Queue, Admin, Worker, HandlerContext, errors, schema tools, and the CLI. - [Compatibility](https://workhorse.run/docs/compatibility.md): The tested runtimes and database versions for all three SDKs, what "supported" proves, and how a client and an installed schema agree. - [Releases](https://workhorse.run/docs/releases.md): The current published version of the TypeScript, Python, and Go lines, when each shipped, and which versions receive fixes. - [Limitations](https://workhorse.run/docs/limitations.md): What Workhorse does not do today — with the workaround for each boundary that has one. ## Optional - [Repository](https://github.com/stablemates/workhorse) - [npm](https://www.npmjs.com/package/@stablemates/workhorse)