Core Concepts
This page explains the key building blocks of Rinda and how they relate to each other.
Architecture Overview
Account
└── Project
└── Environment (dev / staging / production)
├── Queues
│ └── Messages
└── Storage Objects
Account
Your Rinda account is the top-level container. Each account has:
- A billing subscription (Free, Scale, or Dedicated)
- One or more projects
- Per-account encryption — every account gets its own encryption key
Projects
A project groups related queues and storage objects together. Think of it as a workspace for a single application or microservice.
- Each project has its own set of environments
- Queues and storage are isolated per project
Environments
Each project comes with three environments out of the box:
| Environment | Purpose |
|---|---|
| Development | Local development and testing |
| Staging | Pre-production validation |
| Production | Live traffic |
API keys are scoped to an environment, so your dev code can never accidentally write to production queues.
Queues
A queue is a message channel. Rinda supports two types:
Standard Queues
- Best-effort ordering — messages are generally delivered in order, but not guaranteed
- At-least-once delivery — messages may be delivered more than once
- Higher throughput — no ordering constraints
FIFO Queues
- Strict ordering — messages are delivered in the exact order they were sent
- Exactly-once processing — message deduplication prevents duplicates
- Message groups — independent ordering within groups
Messages
Messages are the data you send through queues. Key properties:
| Property | Description |
|---|---|
| body | Any JSON payload (up to 190 KB inline, 1 MB stored) |
| delaySeconds | Delay before the message becomes visible (0-900s) |
| visibilityTimeout | Time a message stays invisible after being received |
| groupId | Message group for FIFO ordering |
| deduplicationId | Prevents duplicate messages in FIFO queues |
Message Lifecycle
Sent → Pending → Received (invisible) → Deleted (acknowledged)
│
└→ Visible again (if not deleted within visibility timeout)
│
└→ Dead Letter Queue (after max retries)
Large Messages
Messages over 190 KB are automatically stored in Rinda Storage and a reference pointer is sent through the queue. This is transparent — you always receive the full message body.
Message Storage
Rinda keeps message bodies so that:
- Large payloads can be sent at all — a body over the queue's limit is stored, and a reference travels on the queue
- Messages can be inspected long after they were processed
- Messages can be replayed, using the body exactly as it was sent
How long they are kept is set per account. See Message Storage.
Dead Letter Queues (DLQ)
When a message fails to be processed after a configurable number of attempts, it is automatically moved to a dead-letter queue for investigation. DLQ can be enabled per queue with a single toggle.
Next Steps
- Quickstart — Send your first message
- Queues Guide — Deep dive into queue configuration
- API Reference — Full API documentation