Skip to main content
NameRequiredDefaultDescription
Secrets
SESSION_SECRETYesSession encryption secret. Run: openssl rand -hex 16
MAGIC_LINK_SECRETYesMagic link encryption secret. Run: openssl rand -hex 16
ENCRYPTION_KEYYesSecret store encryption key. Run: openssl rand -hex 16
MANAGED_WORKER_SECRETNomanaged-secretManaged worker secret. Should be changed and match supervisor.
Domains & ports
REMIX_APP_PORTNo3030Remix app port.
APP_ORIGINYeshttp://localhost:3030App origin URL.
LOGIN_ORIGINYeshttp://localhost:3030Login origin URL. Most likely the same as APP_ORIGIN.
API_ORIGINNoAPP_ORIGINAPI origin URL.
STREAM_ORIGINNoAPP_ORIGINRealtime stream origin URL.
ELECTRIC_ORIGINNohttp://localhost:3060Electric origin URL.
Postgres
DATABASE_URLYesPostgreSQL connection string.
DIRECT_URLYesDirect DB connection string used for migrations etc.
DATABASE_CONNECTION_LIMITNo10Max DB connections.
DATABASE_POOL_TIMEOUTNo60DB pool timeout (s).
DATABASE_CONNECTION_TIMEOUTNo20DB connect timeout (s).
DATABASE_READ_REPLICA_URLNoDATABASE_URLRead-replica DB string.
Redis
REDIS_HOSTYesRedis host.
REDIS_PORTYesRedis port.
REDIS_READER_HOSTNoREDIS_HOSTRedis reader host.
REDIS_READER_PORTNoREDIS_PORTRedis reader port.
REDIS_USERNAMENoRedis username.
REDIS_PASSWORDNoRedis password.
REDIS_TLS_DISABLEDNoDisable Redis TLS.
Auth
WHITELISTED_EMAILSNoWhitelisted emails regex.
AUTH_GITHUB_CLIENT_IDNoGitHub client ID.
AUTH_GITHUB_CLIENT_SECRETNoGitHub client secret.
Email
EMAIL_TRANSPORTNoEmail transport type. One of resend, smtp, aws-ses.
FROM_EMAILNoFrom email address.
REPLY_TO_EMAILNoReply-to email address.
RESEND_API_KEYNoResend API key.
SMTP_HOSTNoSMTP host.
SMTP_PORTNoSMTP port.
SMTP_SECURENoSMTP secure flag.
SMTP_USERNoSMTP user.
SMTP_PASSWORDNoSMTP password.
AWS_REGIONNoAWS region for SES.
AWS_ACCESS_KEY_IDNoAWS access key ID for SES.
AWS_SECRET_ACCESS_KEYNoAWS secret access key for SES.
Graphile & Redis worker
WORKER_CONCURRENCYNo10Redis worker concurrency.
WORKER_POLL_INTERVALNo1000Redis worker poll interval (ms).
WORKER_SCHEMANographile_workerGraphile worker schema.
GRACEFUL_SHUTDOWN_TIMEOUTNo60000 (1m)Graphile graceful shutdown timeout (ms). Affects shutdown time.
Concurrency limits
DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMITNo100Default env execution concurrency.
DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMITNo300Default org execution concurrency, needs to be 3x env concurrency.
Dev
DEV_MAX_CONCURRENT_RUNSNo25Sets the max concurrency for dev runs via the CLI.
DEV_OTEL_EXPORTER_OTLP_ENDPOINTNoAPP_ORIGIN/otelOTel endpoint for dev runs.
Rate limiting
API_RATE_LIMIT_REFILL_INTERVALNo10sAPI rate limit refill interval.
API_RATE_LIMIT_MAXNo750API rate limit max.
API_RATE_LIMIT_REFILL_RATENo250API rate limit refill rate.
API_RATE_LIMIT_REQUEST_LOGS_ENABLEDNo0API rate limit request logs.
API_RATE_LIMIT_REJECTION_LOGS_ENABLEDNo1API rate limit rejection logs.
API_RATE_LIMIT_LIMITER_LOGS_ENABLEDNo0API rate limit limiter logs.
API_RATE_LIMIT_JWT_WINDOWNo1mAPI rate limit JWT window.
API_RATE_LIMIT_JWT_TOKENSNo60API rate limit JWT tokens.
Deploy & Registry
DEPLOY_REGISTRY_HOSTYesDeploy registry host.
DEPLOY_REGISTRY_USERNAMENoDeploy registry username.
DEPLOY_REGISTRY_PASSWORDNoDeploy registry password.
DEPLOY_REGISTRY_NAMESPACENotriggerDeploy registry namespace.
DEPLOY_IMAGE_PLATFORMNolinux/amd64Deploy image platform, same values as docker --platform flag.
DEPLOY_TIMEOUT_MSNo480000 (8m)Deploy timeout (ms).
Object store (S3)
OBJECT_STORE_BASE_URLNoObject store base URL (default provider).
OBJECT_STORE_ACCESS_KEY_IDNoObject store access key (default provider).
OBJECT_STORE_SECRET_ACCESS_KEYNoObject store secret key (default provider).
OBJECT_STORE_REGIONNoObject store region (default provider).
OBJECT_STORE_SERVICENos3Object store service (default provider).
OBJECT_STORE_DEFAULT_PROTOCOLNoProtocol to use for new uploads (e.g., s3, r2). Enables protocol-prefixed storage. See migration guide below.
OBJECT_STORE_{PROTOCOL}_BASE_URLNoNamed provider base URL (replace {PROTOCOL} with protocol name, e.g., OBJECT_STORE_S3_BASE_URL).
OBJECT_STORE_{PROTOCOL}_ACCESS_KEY_IDNoNamed provider access key.
OBJECT_STORE_{PROTOCOL}_SECRET_ACCESS_KEYNoNamed provider secret key.
OBJECT_STORE_{PROTOCOL}_REGIONNoNamed provider region.
OBJECT_STORE_{PROTOCOL}_SERVICENoNamed provider service.
Alerts
ORG_SLACK_INTEGRATION_CLIENT_IDNoSlack client ID. Required for Slack alerts.
ORG_SLACK_INTEGRATION_CLIENT_SECRETNoSlack client secret. Required for Slack alerts.
ALERT_EMAIL_TRANSPORTNoAlert email transport.
ALERT_FROM_EMAILNoAlert from email.
ALERT_REPLY_TO_EMAILNoAlert reply-to email.
ALERT_RESEND_API_KEYNoAlert Resend API key.
ALERT_SMTP_HOSTNoAlert SMTP host.
ALERT_SMTP_PORTNoAlert SMTP port.
ALERT_SMTP_SECURENoAlert SMTP secure.
ALERT_SMTP_USERNoAlert SMTP user.
ALERT_SMTP_PASSWORDNoAlert SMTP password.
Limits
TASK_PAYLOAD_OFFLOAD_THRESHOLDNo524288 (512KB)Max task payload size before offloading to S3.
TASK_PAYLOAD_MAXIMUM_SIZENo3145728 (3MB)Max task payload size.
BATCH_TASK_PAYLOAD_MAXIMUM_SIZENo1000000 (1MB)Max batch payload size.
TASK_RUN_METADATA_MAXIMUM_SIZENo262144 (256KB)Max metadata size.
MAX_BATCH_V2_TRIGGER_ITEMSNo500Max batch size (legacy v2 API).
STREAMING_BATCH_MAX_ITEMSNo1000Max items in streaming batch (v3 API, requires SDK 4.3.1+).
STREAMING_BATCH_ITEM_MAXIMUM_SIZENo3145728 (3MB)Max size per item in streaming batch.
MAXIMUM_DEV_QUEUE_SIZENoMax dev queue size.
MAXIMUM_DEPLOYED_QUEUE_SIZENoMax deployed queue size.
OTel limits
TRIGGER_OTEL_SPAN_ATTRIBUTE_COUNT_LIMITNo1024OTel span attribute count limit.
TRIGGER_OTEL_LOG_ATTRIBUTE_COUNT_LIMITNo1024OTel log attribute count limit.
TRIGGER_OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMITNo131072OTel span attribute value length limit.
TRIGGER_OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMITNo131072OTel log attribute value length limit.
TRIGGER_OTEL_SPAN_EVENT_COUNT_LIMITNo10OTel span event count limit.
TRIGGER_OTEL_LINK_COUNT_LIMITNo2OTel link count limit.
TRIGGER_OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMITNo10OTel attribute per link count limit.
TRIGGER_OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMITNo10OTel attribute per event count limit.
SERVER_OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMITNo8192OTel span attribute value length limit.
Realtime
REALTIME_STREAM_MAX_LENGTHNo1000Realtime stream max length.
REALTIME_STREAM_TTLNo86400 (1d)Realtime stream TTL (s).
Bootstrap
TRIGGER_BOOTSTRAP_ENABLEDNo0Trigger bootstrap enabled.
TRIGGER_BOOTSTRAP_WORKER_GROUP_NAMENoTrigger bootstrap worker group name.
TRIGGER_BOOTSTRAP_WORKER_TOKEN_PATHNoTrigger bootstrap worker token path.
Run engine
RUN_ENGINE_WORKER_COUNTNo4Run engine worker count.
RUN_ENGINE_TASKS_PER_WORKERNo10Run engine tasks per worker.
RUN_ENGINE_WORKER_CONCURRENCY_LIMITNo10Run engine worker concurrency limit.
RUN_ENGINE_WORKER_POLL_INTERVALNo100Run engine worker poll interval (ms).
RUN_ENGINE_WORKER_IMMEDIATE_POLL_INTERVALNo100Run engine worker immediate poll interval (ms).
RUN_ENGINE_WORKER_SHUTDOWN_TIMEOUT_MSNo60000 (1m)Run engine worker shutdown timeout (ms).
RUN_ENGINE_RATE_LIMIT_REFILL_INTERVALNo10sRun engine rate limit refill interval.
RUN_ENGINE_RATE_LIMIT_MAXNo1200Run engine rate limit max.
RUN_ENGINE_RATE_LIMIT_REFILL_RATENo400Run engine rate limit refill rate.
RUN_ENGINE_RATE_LIMIT_REQUEST_LOGS_ENABLEDNo0Run engine rate limit request logs.
RUN_ENGINE_RATE_LIMIT_REJECTION_LOGS_ENABLEDNo1Run engine rate limit rejection logs.
RUN_ENGINE_RATE_LIMIT_LIMITER_LOGS_ENABLEDNo0Run engine rate limit limiter logs.
RUN_ENGINE_DEFAULT_MAX_TTLNoMaximum TTL for all runs (e.g. “14d”). Runs without a TTL use this as default; runs with a larger TTL are clamped.
MAXIMUM_DEV_QUEUE_SIZENoMaximum queued runs per queue in development environments.
MAXIMUM_DEPLOYED_QUEUE_SIZENoMaximum queued runs per queue in deployed (staging/prod) environments.
Misc
TRIGGER_TELEMETRY_DISABLEDNoDisable telemetry.
NODE_MAX_OLD_SPACE_SIZENo8192Maximum memory allocation for Node.js heap in MiB (e.g. “4096” for 4GB).
OPENAI_API_KEYNoOpenAI API key.
MACHINE_PRESETS_OVERRIDE_PATHNoPath to machine presets override file. See machine overrides.
APP_ENVNoNODE_ENVApp environment. Used for things like the title tag.
ADMIN_EMAILSNoRegex of user emails to automatically promote to admin on signup. Does not apply to existing users.
EVENT_LOOP_MONITOR_ENABLEDNo1Node.js event loop lag monitor.

Multi-Provider Object Storage

The object storage system supports multiple S3-compatible providers (R2, S3, GCS, MinIO, etc.) using protocol prefixes. This enables migrating between providers without breaking existing runs.

How It Works

When data exceeds the configured threshold (TASK_PAYLOAD_OFFLOAD_THRESHOLD), it’s uploaded to object storage. The storage location is saved in the database with an optional protocol prefix:
  • With protocol: s3://run_abc/payload.json or r2://batch_123/item_0/payload.json
  • Without protocol (legacy): batch_123/item_0/payload.json (uses default provider)

Configuration

Default Provider (Backward Compatible)

The default provider is used for data without a protocol prefix:
# Default provider (backward compatible - no protocol prefix)
OBJECT_STORE_BASE_URL=https://r2.example.com
OBJECT_STORE_ACCESS_KEY_ID=...
OBJECT_STORE_SECRET_ACCESS_KEY=...
OBJECT_STORE_REGION=auto
OBJECT_STORE_SERVICE=s3

Named Providers

Named providers are accessed via protocol-prefixed URIs. Configure them using OBJECT_STORE_{PROTOCOL}_* variables:
# S3 provider (accessed via s3:// prefix)
OBJECT_STORE_S3_BASE_URL=https://s3.amazonaws.com
OBJECT_STORE_S3_ACCESS_KEY_ID=...
OBJECT_STORE_S3_SECRET_ACCESS_KEY=...
OBJECT_STORE_S3_REGION=us-east-1
OBJECT_STORE_S3_SERVICE=s3

# R2 provider (accessed via r2:// prefix)
OBJECT_STORE_R2_BASE_URL=https://...r2.cloudflarestorage.com
OBJECT_STORE_R2_ACCESS_KEY_ID=...
OBJECT_STORE_R2_SECRET_ACCESS_KEY=...
OBJECT_STORE_R2_REGION=auto
OBJECT_STORE_R2_SERVICE=s3

Default Protocol for New Uploads

Set OBJECT_STORE_DEFAULT_PROTOCOL to specify which provider to use for new uploads:
# Use S3 for new uploads (old data without prefix still uses default provider)
OBJECT_STORE_DEFAULT_PROTOCOL=s3

Migration Guide

To migrate from R2 to S3 without breaking existing runs:
1

Configure S3 provider

Add S3 credentials as a named provider:
OBJECT_STORE_S3_BASE_URL=https://s3.amazonaws.com
OBJECT_STORE_S3_ACCESS_KEY_ID=...
OBJECT_STORE_S3_SECRET_ACCESS_KEY=...
OBJECT_STORE_S3_REGION=us-east-1
Keep your existing OBJECT_STORE_* variables (R2) as the default provider.
2

Test the configuration

Restart the webapp and verify both providers work:
  • Old runs (no prefix) should still access R2
  • New runs with s3:// prefix should use S3
3

Switch to S3 for new uploads

Set the default protocol to use S3 for new uploads:
OBJECT_STORE_DEFAULT_PROTOCOL=s3
After this change:
  • New data uses s3:// prefix and goes to S3
  • Old data (no prefix) still uses R2
  • Data with explicit protocol uses the corresponding provider
4

Optionally decommission R2

Once all active runs using R2 data have completed (check your data retention policies), you can remove the R2 credentials. Keep OBJECT_STORE_DEFAULT_PROTOCOL=s3 to ensure new data continues using S3.