Skip to content
Open Job Spec
Search
Ctrl
K
Cancel
GitHub
Select theme
Dark
Light
Auto
Getting Started
Quickstart
Core Concepts
Comparisons
Why Choose OJS?
Migration Calculator
Specification
Core
JSON Format
Protobuf Format
HTTP Binding
gRPC Binding
AMQP Binding
Retry
Workflows
Unique Jobs
Scheduling
Middleware
Events
Errors
Dead Letter Queue
Priority
Timeouts
Rate Limiting
Results
Progress
Bulk Operations
Worker Protocol
Graceful Shutdown
Observability
Distributed Tracing
Webhooks
Queue Configuration
Fair Scheduling
Backpressure
Structured Logging
Delivery Guarantees
Security
Encryption
Payload Limits
Admin API
Federation
Disaster Recovery
Multi-Tenancy
Job Versioning
CloudEvents Interop
Framework Adapters
Testing
Extension Lifecycle
Extension Interactions
ML Extensions
Durable Execution
Schema Registry
Tutorials
Your First Job (Go)
Your First Job (TypeScript)
Your First Job (Python)
Your First Job (Java)
Your First Job (Rust)
Your First Job (Ruby)
Your First Job (PHP)
Your First Job (.NET)
Workflow Patterns
Observability
Production Deployment
Guides
Implement a Backend
Implement an SDK
Deployment Guide
Migrate from Sidekiq
Migrate from BullMQ
Migrate from Celery
Migrate from Go
Migrate from Oban
Reference
HTTP API
JSON Schemas
Error Codes
Error Catalog
Events
Conformance
Benchmarks
SDK Guidelines
Migration Guide
Glossary
Ecosystem
Backends
SDKs
Framework Integrations
Tools
Adopters
Cloud
Blog
Introducing Open Job Spec
Why Background Jobs Need a Standard
Designing the 8-State Lifecycle
How We Test 5 Backends
Migrating from Sidekiq
Governance
RFC Process
Contributing
Architecture Decisions
Roadmap
Security Policy
Changelog
GitHub
Select theme
Dark
Light
Auto
Why OJS?