Skip to content

Configuration Reference

Remix Studio is configured through environment variables. This page documents the variables read by the application and the supported Docker Compose templates. For local development copy .env.example; for containerized deployments copy the example matching the compose layout.

Ports & URLs

VariableDefaultDescription
PORT3000Port the Node.js process listens on inside its runtime.
APP_PORT3000Host port mapped to the container's PORT by the supplied compose files. It is not read directly by server.ts.
APP_URLhttp://localhost:3000Public base URL. Must match the base of any OAuth callback URLs you register.
POSTGRES_PORT5432Host-published PostgreSQL port (compose).
MINIO_API_PORT9000Host-published MinIO API port (compose).
MINIO_CONSOLE_PORT9001Host-published MinIO console port (compose).

APP_URL must be the browser-visible origin, with no path suffix. It is used to build social, store, Google login/Drive, and other callback URLs. PORT and APP_PORT can differ when a container listens on one port and the host publishes another.

Runtime & Reverse Proxy

VariableDefaultDescription
NODE_ENVdevelopment tooling dependentUse production for the built server. Also changes secure defaults such as storage bucket auto-creation.
TRUST_PROXYfalseWhen 1, true, or yes, rate limiting uses the leading X-Forwarded-For address. Enable only behind a trusted proxy that overwrites this header.
JOB_PROCESSING_TIMEOUT_MS7200000 (2 hours)Maximum time an observed detached provider task may remain non-terminal before the job is failed and its concurrency slot released.
DISABLE_HMRunsetDevelopment-only Vite switch used when hot-module-reload WebSockets are unsuitable.
GEMINI_API_KEYunsetBuild-time/development compatibility variable exposed by Vite. Normal Remix Studio generation and assistant use provider credentials stored in the app.

Trust proxy carefully

If clients can connect directly to the app and supply their own X-Forwarded-For, enabling TRUST_PROXY lets them choose the address used by the in-memory authentication rate limiter. Restrict direct access and configure the proxy to replace forwarded headers.

Database

VariableDescription
DATABASE_URLPostgreSQL connection string used by Prisma. Use @localhost for host dev, @postgres inside Docker Compose.

Storage (S3-Compatible)

VariableDefaultDescription
S3_ENDPOINThttp://localhost:9000Storage endpoint. Leave empty for AWS S3 default resolution. Use http://minio:9000 only inside Compose.
S3_ACCESS_KEY_IDminioadminAccess key. Can be empty when using AWS IAM roles.
S3_SECRET_ACCESS_KEYminioadminSecret key. Can be empty when using AWS IAM roles.
S3_BUCKETremix-studioBucket for project images, workflow assets, and library media.
S3_EXPORT_BUCKETremix-studio-exportsSeparate bucket for completed ZIP export archives.
AWS_REGIONus-east-1Region (use auto for R2/GCS interop).
S3_PUBLIC_ENDPOINTemptyOverride base URL for presigned download links if different from the internal endpoint.
S3_EXPORT_PUBLIC_ENDPOINTemptyPublic endpoint override for export downloads.
S3_PUBLIC_CUSTOM_DOMAINfalseTreat the public endpoint as a custom domain.
S3_EXPORT_PUBLIC_CUSTOM_DOMAINfalseSame, for exports.
S3_AUTO_CREATE_BUCKETtrue (dev) / false (prod)Whether the app creates buckets automatically. Pre-create buckets and set false for managed stores.

See Storage Providers for AWS S3, Cloudflare R2, Google Cloud Storage, and Alibaba Cloud OSS specifics.

Authentication & Security

VariableDefaultDescription
DEFAULT_ADMIN_EMAILadmin@example.comAuto-created admin account email.
DEFAULT_ADMIN_PASSWORDAuto-created admin password. The admin is created on first boot if it does not exist.
PROVIDER_ENCRYPTION_KEY64-character hex string used to encrypt stored provider API keys. See the warning below.
JWT_SECRETSecret for signing JWT session tokens. Change in production.
WEBAUTHN_ORIGINemptyExact external origin for passkeys, including https://. Set when TLS terminates at a proxy.
WEBAUTHN_RP_IDemptyPasskey relying-party ID: public domain only, no protocol or port.
WEBAUTHN_RP_NAMERemix StudioDisplay name shown during passkey registration.

Keep PROVIDER_ENCRYPTION_KEY stable

Do not change PROVIDER_ENCRYPTION_KEY after providers have been created unless you also re-encrypt stored credentials. Generate one with:

bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Google OAuth (Login + Invite Registration)

VariableDefaultDescription
GOOGLE_CLIENT_IDemptyGoogle OAuth client ID for existing-user login and invite-based registration.
GOOGLE_CLIENT_SECRETemptyGoogle OAuth client secret.
GOOGLE_REDIRECT_URIhttp://localhost:3000/api/auth/google/callbackOAuth redirect URI.

Social Channels

VariableDescription
X_CLIENT_ID / X_CLIENT_SECRETOAuth 2.0 credentials for X (Twitter) campaigns. See X Setup.
THREADS_APP_ID / THREADS_APP_SECRETThreads (Meta) use-case credentials. Redirect: ${APP_URL}/api/social/threads/callback. See Threads Setup.

Digital Stores

VariableDefaultDescription
GUMROAD_CLIENT_IDemptyOAuth application client ID used by Exports → Stores.
GUMROAD_CLIENT_SECRETemptyGumroad OAuth client secret.
GUMROAD_SCOPEedit_products view_profile view_salesSpace-separated OAuth scopes requested when connecting Gumroad.

The redirect URL is ${APP_URL}/api/stores/gumroad/callback. Store tokens are encrypted using the same deployment encryption facility as other external credentials.

Backups (Docker)

VariableDefaultDescription
BACKUP_DIR./volumes/backupsHost path mounted to /app/backups for database dumps.
BACKUP_KEEP_DAYS7Retention in days. 0 keeps all backups.

See Backup & Restore.

Compose Service Names, Ports & Volumes

These variables are consumed by the supplied compose files and helper scripts rather than by the Node.js application:

VariablePurpose
POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DBBundled PostgreSQL initialization and connection values. Keep DATABASE_URL consistent with them.
POSTGRES_CONTAINER_NAME, MINIO_CONTAINER_NAME, APP_CONTAINER_NAMEOptional container-name overrides used by compose templates.
POSTGRES_DATA_DIR, MINIO_DATA_DIRHost directories for persistent database and MinIO data.
POSTGRES_PORT, MINIO_API_PORT, MINIO_CONSOLE_PORTHost-published ports.
BACKUP_DIR, BACKUP_KEEP_DAYSDatabase dump mount and helper-script retention.

Deployment Image

VariableDescription
REMIX_STUDIO_IMAGEOverride the image tag in compose templates, e.g. ghcr.io/shinchven/remix-studio:1.5.0. Defaults to :latest.

Notes

  • The app auto-creates a default admin user if DEFAULT_ADMIN_EMAIL and DEFAULT_ADMIN_PASSWORD are provided and the user does not already exist.
  • Storage is implemented against S3-compatible APIs, so MinIO works well for development and AWS S3 works for production.
  • For host-based local development (docker compose up -d postgres minio + npm run dev), reach MinIO at http://localhost:9000.
  • A database backup does not include bucket objects or PROVIDER_ENCRYPTION_KEY; back up all three separately.

Released under the MIT License.