# Azure Queue Storage vs Inngest

Canonical: https://inetgeek.com/compare/azure-queue-storage-vs-inngest/

Every value below is read from Azure Queue Storage's and Inngest's own documentation. See https://inetgeek.com/methodology/ for how.

## At a glance

| Criterion | Azure Queue Storage | Inngest |
| --- | --- | --- |
| Pricing model | Per 10,000 operations plus stored data, with the rate set by redundancy: LRS Class 1 operations are $0.004 per 10,000, ZRS and GRS cost more for the same call. There is no plan fee and no included allowance. | Per execution, where a step counts the same as a run, plus separate meters for events ingested, span data, scores and realtime connections. The pricing page ships a calculator because the execution count is not the run count. |
| Included per month | None included — every operation is billed. Class 1 operations are $0.004 per 10,000 on LRS in East US, which is $0.40 per million, matching Amazon SQS's standard rate exactly. | 50,000 executions a month on the free Hobby plan and 1,000,000 on Pro, pay-as-you-go to 20M. An execution is one function run or one step, so a run with two steps counts as three. |
| Maximum message size | 64 KB per message. A queue may hold millions of messages, bounded only by the storage account's capacity rather than a queue-level ceiling. | 4 MiB per step-returned payload; 32 MiB total function run state; 10 MiB hard cap per event batch. |
| Message retention | Messages in the queue are billed as stored data at $0.045 per GB-month on LRS, rather than granted as a retention window. Azure charges for depth, not for time. | Queue depth rather than a time window: 100,000 queued items on the free plan and 1,000,000 or more on Pro. Trace retention is 7 days on Pro and 90 on Enterprise. |
| Maximum delay | Time-to-live defaults to seven days and can be set to any positive number, or to -1 for a message that never expires — the only queue here with an unbounded option. | Step sleeps up to 1 year on paid plans; the free plan supports sleeps up to 7 days. |
| SOC 2 | Listed among Azure's compliance offerings (SOC 1, SOC 2, SOC 3) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service. | SOC 2 Type II compliant; report available on request via the trust center. |
| HIPAA | Listed among Azure's compliance offerings (HIPAA) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service. | HIPAA BAAs offered as an add-on for healthcare compliance (Enterprise column of the pricing table). |

## Where they differ

### Pricing model

- Azure Queue Storage: Per 10,000 operations plus stored data, with the rate set by redundancy: LRS Class 1 operations are $0.004 per 10,000, ZRS and GRS cost more for the same call. There is no plan fee and no included allowance. ([source](https://prices.azure.com/api/retail/prices))
- Inngest: Per execution, where a step counts the same as a run, plus separate meters for events ingested, span data, scores and realtime connections. The pricing page ships a calculator because the execution count is not the run count. ([source](https://www.inngest.com/pricing))

### Included per month

- Azure Queue Storage: None included — every operation is billed. Class 1 operations are $0.004 per 10,000 on LRS in East US, which is $0.40 per million, matching Amazon SQS's standard rate exactly. ([source](https://prices.azure.com/api/retail/prices))
- Inngest: 50,000 executions a month on the free Hobby plan and 1,000,000 on Pro, pay-as-you-go to 20M. An execution is one function run or one step, so a run with two steps counts as three. ([source](https://www.inngest.com/pricing))

### Maximum message size

- Azure Queue Storage: 64 KB per message. A queue may hold millions of messages, bounded only by the storage account's capacity rather than a queue-level ceiling. ([source](https://learn.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction))
- Inngest: 4 MiB per step-returned payload; 32 MiB total function run state; 10 MiB hard cap per event batch. ([source](https://www.inngest.com/docs/usage-limits/inngest))

### Message retention

- Azure Queue Storage: Messages in the queue are billed as stored data at $0.045 per GB-month on LRS, rather than granted as a retention window. Azure charges for depth, not for time. ([source](https://prices.azure.com/api/retail/prices))
- Inngest: Queue depth rather than a time window: 100,000 queued items on the free plan and 1,000,000 or more on Pro. Trace retention is 7 days on Pro and 90 on Enterprise. ([source](https://www.inngest.com/pricing))

### Maximum delay

- Azure Queue Storage: Time-to-live defaults to seven days and can be set to any positive number, or to -1 for a message that never expires — the only queue here with an unbounded option. ([source](https://learn.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction))
- Inngest: Step sleeps up to 1 year on paid plans; the free plan supports sleeps up to 7 days. ([source](https://www.inngest.com/docs/usage-limits/inngest))

### SOC 2

- Azure Queue Storage: Listed among Azure's compliance offerings (SOC 1, SOC 2, SOC 3) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service. ([source](https://learn.microsoft.com/en-us/azure/compliance/))
- Inngest: SOC 2 Type II compliant; report available on request via the trust center. ([source](https://www.inngest.com/security))

### HIPAA

- Azure Queue Storage: Listed among Azure's compliance offerings (HIPAA) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service. ([source](https://learn.microsoft.com/en-us/azure/compliance/))
- Inngest: HIPAA BAAs offered as an add-on for healthcare compliance (Enterprise column of the pricing table). ([source](https://www.inngest.com/pricing))

## Which should you choose?

Pick Azure Queue Storage if Azure-resident systems that want a queue billed like storage — operations plus depth, no plan to choose and no capacity to provision.

Pick Inngest if Multi-step workflows that need durable execution and retries between steps, rather than a bare queue you write a consumer for.

Consider something else: Azure Queue Storage — Queued messages are billed as stored data, so a backlog costs money by the gigabyte-month, and there is no free allowance at all where SQS gives a million requests a month.

Consider something else: Inngest — Every step is a billable execution, so a three-step workflow costs three times what the run count implies, and the free plan allows five concurrent steps.

## Documented by only one

- Free tier: Inngest: Yes
- Entry paid plan: Inngest: $99/month for Pro, described as a starting price with usage above the included allowance billed on top.
- Regions: Inngest: All customer data hosted on AWS databases located in the United States; no other region offered on the security page.
- Concurrency: Inngest: 5 concurrent steps on the free plan, 100 or more on Pro, custom on Enterprise.
- ISO 27001: Azure Queue Storage: Listed among Azure's compliance offerings (ISO 27001) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service.
- PCI DSS: Azure Queue Storage: Listed among Azure's compliance offerings (PCI DSS) on Microsoft's own compliance documentation — a platform-wide list, not scoped to this specific service.
- Encryption at rest: Inngest: All data in Inngest databases is encrypted at rest and in transit; optional encryption middleware lets you bring your own key.
- Customer-managed keys: Inngest: Bring-your-own-key via SDK encryption middleware that encrypts payloads client-side before they reach Inngest; not a server-side KMS option.
- Role-based access control: Inngest: SAML, RBAC and audit trails listed as Enterprise plan features.

## Questions this comparison answers

**Should I choose Azure Queue Storage or Inngest?**

Pick Azure Queue Storage if Azure-resident systems that want a queue billed like storage — operations plus depth, no plan to choose and no capacity to provision.
Pick Inngest if Multi-step workflows that need durable execution and retries between steps, rather than a bare queue you write a consumer for.
