Provider comparison
Compare the three job adapters without hiding provider-specific limits.
Choose a job provider according to the execution and recovery behavior your application needs. The selected binding and deployment environment are authoritative. In the current fresh-app Orders CSV check, Inngest and Effect MQ both registered and completed a run. Trigger.dev’s local service did not become healthy. The provider guides show the exact setup and proof checks, including that unresolved outcome. An adapter capability is not a successful application run.
jobs: { default: docker(inngest()) },
defaults: {
bucket: "assets",
cache: "requests",
realtime: "default",
"agent-state": "agents",
jobs: "default",
},
{
"schemaVersion": 1,
"recordedAt": "2026-09-20",
"status": "ready",
"completionScope": {
"certified": ["inngest self-hosted Docker", "effect-mq self-hosted PostgreSQL"],
"deferred": ["Trigger native/Docker evidence", "Pulumi, AWS, and managed-cloud evidence"],
"diagnostic": "Deferred modes remain not-tested and are not support claims for this change."
},
"evidence": [
"tests/jobs/compatibility/evidence/inngest-native.json",
"tests/jobs/compatibility/evidence/phase0-1.6-1.10.json",
"tests/jobs/compatibility/evidence/phase0-1.11.json",
"tests/jobs/compatibility/evidence/phase0-effect-mq.json",
"tests/jobs/compatibility/evidence/phase5-adapters.json",
"tests/jobs/compatibility/evidence/phase9-regressions.json",
"tests/jobs/compatibility/evidence/phase9-native-completion.json",
"tests/jobs/compatibility/evidence/phase9-scaffold.json",
"tests/jobs/compatibility/evidence/phase9-coverage.json"
],
"providerCatalog": [
{ "provider": "inngest", "package": "@relkit/inngest", "recipe": "inngest-docker@2" },
{ "provider": "trigger", "package": "@relkit/trigger", "recipe": "trigger-docker@2" },
{ "provider": "effect-mq", "package": "@relkit/effect-mq", "recipe": "effect-mq-docker@2" }
],
"requiredCommonSubset": {
"features": [
"durable acceptance",
"retryable execution",
"current-state read",
"cancel request",
"native scheduling"
],
"minimumNativeEngines": 2,
"nativeEnginesProven": ["inngest", "effect-mq"],
"gate": "ready",
"diagnostic": "Inngest and effect-mq prove the declared common subset; Trigger has an executable native-shaped adapter and account-free recipe, but provider-native Docker/managed evidence remains not-tested. Inngest local listing and unsupported schedule/version diagnostics remain unchanged."
},
"variants": [
{
"provider": "inngest",
"profile": "managed",
"deployment": "cloud",
"status": "not-tested",
"features": {},
"evidence": []
},
{
"provider": "inngest",
"profile": "self-hosted",
"deployment": "docker",
"status": "passed",
"features": {
"durableAcceptance": "native",
"retryableExecution": "native",
"durableSleep": "native",
"currentStateRead": "native",
"cancelRequest": "native",
"scheduleCron": "native",
"scheduleTimezone": "native",
"scheduleOwnership": "unverified",
"scheduleDst": "unverified",
"scheduleOverlap": "unsupported",
"scheduleMisfire": "unverified",
"workerVersionTargeting": "unsupported",
"boundedFilteredListing": "native",
"historicalBuildResume": "unsupported"
},
"evidence": [
"tests/jobs/compatibility/evidence/inngest-native.json",
"tests/jobs/compatibility/evidence/phase0-1.6-1.10.json",
"tests/jobs/compatibility/evidence/phase0-1.11.json"
],
"diagnostics": [
"The pinned local v2 API proves bounded app/status/function filtering, opaque cursor continuation, event-scoped runs and signing-key authorization without a full scan.",
"Replacement registration resumed an old run on the new worker build; old-build retirement is explicitly blocked unless the old route and key remain retained.",
"The pinned server does not expose native ownership listing, so schedule reconciliation remains unverified.",
"Cron has no portable overlap or misfire control, and DST transition replay is unverified in this SDK/server profile."
]
},
{
"provider": "trigger",
"profile": "managed",
"deployment": "cloud",
"status": "not-tested",
"features": {},
"evidence": []
},
{
"provider": "trigger",
"profile": "self-hosted",
"deployment": "docker",
"status": "not-tested",
"features": {},
"evidence": [
"tests/jobs/compatibility/evidence/phase0-1.6-1.10.json",
"tests/jobs/compatibility/evidence/phase5-adapters.json"
],
"diagnostics": [
"Task registration, scoped subscription cleanup, and schedule declarations have local structural coverage only; this does not certify a Trigger server."
]
},
{
"provider": "effect-mq",
"profile": "managed",
"deployment": "cloud",
"status": "unsupported",
"features": { "durableSleep": "unsupported" },
"evidence": []
},
{
"provider": "effect-mq",
"profile": "self-hosted",
"deployment": "docker",
"status": "passed",
"features": {
"durableAcceptance": "native",
"retryableExecution": "native",
"currentStateRead": "native",
"cancelRequest": "native",
"nativeScheduling": "native",
"scheduleOwnership": "native",
"durableSleep": "unsupported"
},
"evidence": [
"tests/jobs/compatibility/evidence/phase0-1.6-1.10.json",
"tests/jobs/compatibility/evidence/phase0-effect-mq.json",
"tests/jobs/compatibility/evidence/phase5-adapters.json"
],
"diagnostics": [
"LISTEN wake-ups are unavailable under the pinned Effect runtime; native polling fallback was observed and correctness passed.",
"Durable sleep remains unsupported by the queue/retryable profile."
]
}
]
}
| Capability | Inngest | Trigger.dev | Effect MQ |
|---|---|---|---|
| Durable task execution | Native Docker path | Provider-dependent | Not advertised by the retryable profile |
| Retryable execution | Native Docker path | Provider-dependent | Native PostgreSQL path |
| Run reads and controls | Native subset | Provider-dependent | Native adapter subset |
| Durable sleep | Supported path | Not claimed | Unsupported |
| UTC cron | Supported path | Provider-dependent | Configured path |
| Managed cloud evidence | Not tested | Not tested | Unsupported |
Read the Inngest, Trigger.dev, and
Effect MQ guides before selecting a capability. relkit jobs capabilities
reports the binding’s actual limits; the compiler rejects a task that requires an unproven capability.
The evidence matrix keeps unsupported and not-tested variants explicit. Local structural tests do not certify a provider server.