Skip to main content
Version: 0.16

InMemoryStore

Configures the in-memory cache and lookup store.

This object can be configured from the WebUI under Settings › Storage › In-Memory Store

Fields

InMemoryStore is a multi-variant object: each instance has an @type discriminator selecting one of the variants below, and each variant carries its own set of fields.

@type: "Default"

Use data store

@type: "Sharded"

Sharded Store

stores

Type: InMemoryStoreBase[] · min items: 2

Stores to use for sharding

@type: "Redis"

Redis/Valkey

url

Type: Uri · default: "redis://127.0.0.1"

URL of the Redis server

timeout

Type: Duration · default: "10s"

Connection timeout to the database

poolMaxConnections

Type: UnsignedInt · default: 10 · max: 8192 · min: 1

Maximum number of connections to the store

poolTimeoutCreate

Type: Duration? · default: "30s"

Timeout for creating a new connection

poolTimeoutWait

Type: Duration? · default: "30s"

Timeout for waiting for a connection from the pool

poolTimeoutRecycle

Type: Duration? · default: "30s"

Timeout for recycling a connection

@type: "RedisCluster"

Redis Cluster

urls

Type: Uri[] · default: ["redis://127.0.0.1"]

URL(s) of the Redis server(s)

timeout

Type: Duration · default: "10s"

Connection timeout to the database

authUsername

Type: String? · default: "stalwart"

Username to connect to the store

authSecret

Type: SecretKeyOptional · required

Password to connect to the store

maxRetryWait

Type: Duration? · max: 1024 · min: 1

Maximum time to wait between retries

minRetryWait

Type: Duration? · max: 1024 · min: 1

Minimum time to wait between retries

maxRetries

Type: UnsignedInt? · max: 1024 · min: 1

Number of retries to connect to the Redis cluster

readFromReplicas

Type: Boolean · default: true

Whether to read from replicas

protocolVersion

Type: RedisProtocol · default: "resp2"

Protocol Version

poolMaxConnections

Type: UnsignedInt · default: 10 · max: 8192 · min: 1

Maximum number of connections to the store

poolTimeoutCreate

Type: Duration? · default: "30s"

Timeout for creating a new connection

poolTimeoutWait

Type: Duration? · default: "30s"

Timeout for waiting for a connection from the pool

poolTimeoutRecycle

Type: Duration? · default: "30s"

Timeout for recycling a connection

JMAP API

The InMemoryStore singleton is available via the urn:stalwart:jmap capability.

x:InMemoryStore/get

This is a standard Foo/get method as defined in RFC 8620, Section 5.1.

For singletons, the ids argument should be the literal singleton (or null to return the single instance).

This method requires the sysInMemoryStoreGet permission.

curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:InMemoryStore/get",
{
"ids": [
"singleton"
]
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

x:InMemoryStore/set

This is a standard Foo/set method as defined in RFC 8620, Section 5.3.

For singletons, only the update argument with id singleton is accepted; create and destroy arguments are rejected.

This method requires the sysInMemoryStoreUpdate permission.

curl -X POST https://mail.example.com/api \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"methodCalls": [
[
"x:InMemoryStore/set",
{
"update": {
"singleton": {
"id": "id1"
}
}
},
"c1"
]
],
"using": [
"urn:ietf:params:jmap:core",
"urn:stalwart:jmap"
]
}'

CLI

stalwart-cli wraps the same JMAP calls. See the CLI reference for installation, authentication, and general usage.

Fetch

stalwart-cli get in-memory-store

Update

stalwart-cli update in-memory-store --field description='Updated'

Nested types

InMemoryStoreBase

In-memory store backends.

RedisStore

Redis/Valkey store.

url

Type: Uri · default: "redis://127.0.0.1"

URL of the Redis server

timeout

Type: Duration · default: "10s"

Connection timeout to the database

poolMaxConnections

Type: UnsignedInt · default: 10 · max: 8192 · min: 1

Maximum number of connections to the store

poolTimeoutCreate

Type: Duration? · default: "30s"

Timeout for creating a new connection

poolTimeoutWait

Type: Duration? · default: "30s"

Timeout for waiting for a connection from the pool

poolTimeoutRecycle

Type: Duration? · default: "30s"

Timeout for recycling a connection

RedisClusterStore

Redis Cluster store.

urls

Type: Uri[] · default: ["redis://127.0.0.1"]

URL(s) of the Redis server(s)

timeout

Type: Duration · default: "10s"

Connection timeout to the database

authUsername

Type: String? · default: "stalwart"

Username to connect to the store

authSecret

Type: SecretKeyOptional · required

Password to connect to the store

maxRetryWait

Type: Duration? · max: 1024 · min: 1

Maximum time to wait between retries

minRetryWait

Type: Duration? · max: 1024 · min: 1

Minimum time to wait between retries

maxRetries

Type: UnsignedInt? · max: 1024 · min: 1

Number of retries to connect to the Redis cluster

readFromReplicas

Type: Boolean · default: true

Whether to read from replicas

protocolVersion

Type: RedisProtocol · default: "resp2"

Protocol Version

poolMaxConnections

Type: UnsignedInt · default: 10 · max: 8192 · min: 1

Maximum number of connections to the store

poolTimeoutCreate

Type: Duration? · default: "30s"

Timeout for creating a new connection

poolTimeoutWait

Type: Duration? · default: "30s"

Timeout for waiting for a connection from the pool

poolTimeoutRecycle

Type: Duration? · default: "30s"

Timeout for recycling a connection

SecretKeyOptional

An optional secret value, or none.

  • None: No secret. No additional fields.
  • Value: Secret value. Carries the fields of SecretKeyValue.
  • EnvironmentVariable: Secret read from environment variable. Carries the fields of SecretKeyEnvironmentVariable.
  • File: Secret read from file. Carries the fields of SecretKeyFile.
SecretKeyValue

A secret value provided directly.

secret

Type: String · required · secret

Password or secret value

SecretKeyEnvironmentVariable

A secret value read from an environment variable.

variableName

Type: String · required

Environment variable name to read the secret from

SecretKeyFile

A secret value read from a file.

filePath

Type: String · required

File path to read the secret from

Enums

RedisProtocol

ValueLabel
resp2RESP2
resp3RESP3