SingleRunner
Single-process cluster layer for durable entities and workflows. It wires Sharding with no-op runner communication, no-op runner health checks, SQL-backed message storage, environment-based sharding configuration, and either SQL-backed or in-memory runner storage.
This layer is meant for local, embedded, or small single-node setups where the process handles all cluster work itself. It still requires a SQL client because mailbox messages and replies are stored in SQL.
Layers
Signature
declare function layer(options?: { readonly runnerStorage?: "memory" | "sql"; readonly shardingConfig?: Partial<{ readonly assignedShardGroups: readonly Array<string>; readonly availableShardGroups: readonly Array<string>; readonly entityMailboxCapacity: number | "unbounded"; readonly entityMaxIdleTime: Input; readonly entityMessagePollInterval: Input; readonly entityRegistrationTimeout: Input; readonly entityReplyPollInterval: Input; readonly entityTerminationTimeout: Input; readonly preemptiveShutdown: boolean; readonly refreshAssignmentsInterval: Input; readonly runnerAddress: Option<RunnerAddress>; readonly runnerHealthCheckInterval: Input; readonly runnerListenAddress: Option<RunnerAddress>; readonly runnerShardWeight: number; readonly sendRetryInterval: Input; readonly shardLockDisableAdvisory: boolean; readonly shardLockExpiration: Input; readonly shardLockRefreshInterval: Input; readonly shardsPerGroup: number; readonly simulateRemoteSerialization: boolean; }>;}): Layer<Sharding | MessageStorage | Runners, ConfigError, Crypto | SqlClient>
Provides a SQL-backed single-node cluster for running durable entities and workflows.
When to use
Use to run durable cluster entities and workflows in a local, embedded, or small single-node process while keeping mailbox and reply state in SQL.
Details
The layer provides
Sharding,Runners, andMessageStorage. It loadsShardingConfigfrom environment variables and overlaysoptions.shardingConfigwhen provided. Message storage is always SQL-backed; runner storage is SQL-backed by default and switches to in-memory storage whenrunnerStorageis set to"memory".Gotchas
- Even when
runnerStorageis"memory", message storage remains SQL-backed, so callers must still provideSqlClientandCrypto.Crypto(used to hash over-length message deduplication keys). - Runner communication and runner health are no-op services, so this layer is for single-process use rather than multi-runner coordination.See
ShardingConfig.layerFromEnv for loading environment configuration before applyingshardingConfigoverridesSqlMessageStorage.layer for the SQL-backed message storage that this layer providesSqlRunnerStorage.layer for the default SQL-backed runner storage selected whenrunnerStorageis omitted or"sql"RunnerStorage.layerMemory for the in-memory runner storage selected byrunnerStorage: "memory"