Skip to main content
Version: Next

Environment Variables

This is the single reference page for OpenReader environment variables.

Quick Reference Table

VariableAreaDefaultWhen to set
NEXT_PUBLIC_ENABLE_DOCX_CONVERSIONClient feature flagstrue unless set to falseSet false to hide DOCX support
NEXT_PUBLIC_ENABLE_DESTRUCTIVE_DELETE_ACTIONSClient feature flagstrue unless set to falseSet false to hide destructive actions
NEXT_PUBLIC_DEFAULT_TTS_PROVIDERClient feature flagscustom-openaiOverride default TTS provider
NEXT_PUBLIC_DEFAULT_TTS_MODELClient feature flagskokoroOverride default TTS model
NEXT_PUBLIC_SHOW_ALL_DEEPINFRA_MODELSClient feature flagstrue unless set to falseSet false to restrict DeepInfra models
NEXT_PUBLIC_ENABLE_AUDIOBOOK_EXPORTClient feature flagstrue unless set to falseSet false to hide audiobook export UI
NEXT_PUBLIC_ENABLE_WORD_HIGHLIGHTClient feature flagstrue unless set to falseSet false to disable word highlight + alignment
API_BASETTS providernonePoint to your OpenAI-compatible TTS base URL
API_KEYTTS providernone fallback in TTS routeSet when provider requires auth
TTS_CACHE_MAX_SIZE_BYTESTTS caching268435456 (256 MB)Tune in-memory TTS cache size
TTS_CACHE_TTL_MSTTS caching1800000 (30 min)Tune in-memory TTS cache TTL
TTS_MAX_RETRIESTTS retry2Tune retry attempts for upstream 429/5xx
TTS_RETRY_INITIAL_MSTTS retry250Tune initial retry delay
TTS_RETRY_MAX_MSTTS retry2000Tune max retry delay
TTS_RETRY_BACKOFFTTS retry2Tune exponential backoff factor
TTS_ENABLE_RATE_LIMITRate limitingfalseSet true to enable TTS per-user/IP daily character limits
TTS_DAILY_LIMIT_ANONYMOUSRate limiting50000Override anonymous per-user daily character limit
TTS_DAILY_LIMIT_AUTHENTICATEDRate limiting500000Override authenticated per-user daily character limit
TTS_IP_DAILY_LIMIT_ANONYMOUSRate limiting100000Override anonymous IP backstop daily limit
TTS_IP_DAILY_LIMIT_AUTHENTICATEDRate limiting1000000Override authenticated IP backstop daily limit
BASE_URLAuthunsetRequired (with AUTH_SECRET) to enable auth
AUTH_SECRETAuthunsetRequired (with BASE_URL) to enable auth
AUTH_TRUSTED_ORIGINSAuthemptyAdd extra allowed origins
USE_ANONYMOUS_AUTH_SESSIONSAuthfalseSet true to enable anonymous auth sessions
GITHUB_CLIENT_IDAuth/OAuthunsetSet with GITHUB_CLIENT_SECRET to enable GitHub sign-in
GITHUB_CLIENT_SECRETAuth/OAuthunsetSet with GITHUB_CLIENT_ID to enable GitHub sign-in
DISABLE_AUTH_RATE_LIMITRate limitingfalseSet true to disable auth-layer rate limiting
POSTGRES_URLDatabaseunset (SQLite mode)Set to switch metadata/auth DB to Postgres
USE_EMBEDDED_WEED_MINIStoragetrue when unsetSet false to use external S3-compatible storage only
WEED_MINI_DIRStoragedocstore/seaweedfsOverride embedded SeaweedFS data directory
WEED_MINI_WAIT_SECStorage20Tune SeaweedFS startup wait timeout
S3_ACCESS_KEY_IDStorageauto-generated in embedded modeSet explicitly for stable/external credentials
S3_SECRET_ACCESS_KEYStorageauto-generated in embedded modeSet explicitly for stable/external credentials
S3_BUCKETStorageopenreader-documents in embedded modeRequired for external S3-compatible storage
S3_REGIONStorageus-east-1 in embedded modeRequired for external S3-compatible storage
S3_ENDPOINTStoragederived in embedded modeSet for S3-compatible providers (MinIO/SeaweedFS/R2/etc.)
S3_FORCE_PATH_STYLEStoragetrue in embedded modeSet per provider requirement
S3_PREFIXStorageopenreaderCustomize object key prefix
RUN_DRIZZLE_MIGRATIONSDatabase migrationstrueSet false to skip startup Drizzle schema migrations
RUN_FS_MIGRATIONSStorage migrationstrueSet false to skip startup filesystem -> S3/DB migration pass
IMPORT_LIBRARY_DIRLibrary importdocstore/library fallbackSet a single server library root
IMPORT_LIBRARY_DIRSLibrary importunsetSet multiple roots (comma/colon/semicolon separated)
WHISPER_CPP_BINWord timingunsetSet to enable whisper.cpp timestamps
FFMPEG_BINAudio runtimeauto-detected (ffmpeg-static)Override ffmpeg binary path

TTS Provider and Request Behavior

API_BASE

Base URL for OpenAI-compatible TTS API requests.

  • Example: http://host.docker.internal:8880/v1
  • Can be overridden per request from UI settings
  • Related docs: TTS Providers

API_KEY

Default API key for TTS provider requests.

  • Example: none or your provider token
  • Can be overridden by request headers from app settings
  • Related docs: TTS Providers

TTS_CACHE_MAX_SIZE_BYTES

Maximum in-memory TTS audio cache size in bytes.

  • Default: 268435456 (256 MB)

TTS_CACHE_TTL_MS

In-memory TTS audio cache TTL in milliseconds.

  • Default: 1800000 (30 minutes)

TTS_MAX_RETRIES

Maximum retries for upstream TTS failures (429/5xx).

  • Default: 2

TTS_RETRY_INITIAL_MS

Initial retry delay in milliseconds for TTS upstream requests.

  • Default: 250

TTS_RETRY_MAX_MS

Maximum retry delay in milliseconds.

  • Default: 2000

TTS_RETRY_BACKOFF

Exponential backoff multiplier between retries.

  • Default: 2

TTS_ENABLE_RATE_LIMIT

Controls TTS character rate limiting in the TTS API.

  • Default: false (TTS char limits disabled)
  • Set to true to enforce TTS_DAILY_LIMIT_* and TTS_IP_DAILY_LIMIT_*
  • For behavior details and examples, see TTS Rate Limiting

TTS_DAILY_LIMIT_ANONYMOUS

Anonymous per-user daily character limit.

  • Default: 50000

TTS_DAILY_LIMIT_AUTHENTICATED

Authenticated per-user daily character limit.

  • Default: 500000

TTS_IP_DAILY_LIMIT_ANONYMOUS

Anonymous IP backstop daily character limit.

  • Default: 100000

TTS_IP_DAILY_LIMIT_AUTHENTICATED

Authenticated IP backstop daily character limit.

  • Default: 1000000

Auth and Identity

BASE_URL

External base URL for this OpenReader instance.

  • Required with AUTH_SECRET to enable auth
  • Example: http://localhost:3003 or https://reader.example.com
  • Related docs: Auth

AUTH_SECRET

Secret key used by auth/session handling.

  • Required with BASE_URL to enable auth
  • Generate with openssl rand -hex 32
  • Related docs: Auth

AUTH_TRUSTED_ORIGINS

Additional allowed origins for auth requests.

  • Comma-separated list
  • BASE_URL origin is always trusted automatically
  • Related docs: Auth

USE_ANONYMOUS_AUTH_SESSIONS

Controls whether auth-enabled deployments can create/use anonymous sessions.

  • Default: false (anonymous sessions disabled)
  • Set true to allow anonymous sessions and guest-style flows
  • When false, users must sign in or sign up with an account
  • Related docs: Auth

GITHUB_CLIENT_ID

GitHub OAuth client ID.

  • Enable only with GITHUB_CLIENT_SECRET

GITHUB_CLIENT_SECRET

GitHub OAuth client secret.

  • Enable only with GITHUB_CLIENT_ID

DISABLE_AUTH_RATE_LIMIT

Controls Better Auth rate limiting.

  • Default behavior: auth-layer rate limiting enabled
  • Set to true to disable auth-layer rate limiting
  • This does not affect TTS character rate limiting
  • Related docs: Auth

Database and Object Blob Storage

POSTGRES_URL

Switches metadata/auth storage from SQLite to Postgres.

  • Unset: SQLite at docstore/sqlite3.db
  • Set: Postgres mode
  • Related docs: Database

USE_EMBEDDED_WEED_MINI

Controls embedded SeaweedFS startup.

  • Default behavior: treated as enabled when unset
  • Set false to rely on external S3-compatible storage
  • Related docs: Object / Blob Storage

WEED_MINI_DIR

Data directory for embedded SeaweedFS (weed mini).

WEED_MINI_WAIT_SEC

Maximum seconds to wait for embedded SeaweedFS startup.

S3_ACCESS_KEY_ID

Access key for S3-compatible storage.

  • Auto-generated in embedded mode if unset
  • Set explicitly for stable credentials or external providers
  • Related docs: Object / Blob Storage

S3_SECRET_ACCESS_KEY

Secret key for S3-compatible storage.

  • Auto-generated in embedded mode if unset
  • Set explicitly for stable credentials or external providers
  • Related docs: Object / Blob Storage

S3_BUCKET

Bucket name used for document blobs.

  • Default in embedded mode: openreader-documents
  • Required for external S3-compatible storage
  • Related docs: Object / Blob Storage

S3_REGION

Region used by the S3 client.

S3_ENDPOINT

Endpoint URL for S3-compatible storage.

  • In embedded mode, defaults to http://<BASE_URL host>:8333 (or detected host)
  • For AWS S3, usually leave unset
  • For MinIO/SeaweedFS/R2/B2-style APIs, typically set explicitly
  • Related docs: Object / Blob Storage

S3_FORCE_PATH_STYLE

Path-style S3 addressing toggle.

  • Default in embedded mode: true
  • Set according to provider requirements
  • Related docs: Object / Blob Storage

S3_PREFIX

Prefix prepended to stored object keys.

Migration Controls

RUN_DRIZZLE_MIGRATIONS

Controls startup migration execution in shared entrypoint.

  • Default: true
  • Set false to skip automatic startup Drizzle schema migrations
  • Related docs: Migrations, Database

RUN_FS_MIGRATIONS

Controls startup filesystem-to-object-store migration execution in shared entrypoint.

Library Import

IMPORT_LIBRARY_DIR

Single directory root for server library import.

  • Used when IMPORT_LIBRARY_DIRS is unset
  • Default fallback root: docstore/library
  • Related docs: Server Library Import

IMPORT_LIBRARY_DIRS

Multiple library roots for server library import.

  • Separator: comma, colon, or semicolon
  • Takes precedence over IMPORT_LIBRARY_DIR
  • Related docs: Server Library Import

Audio Tooling and Alignment

WHISPER_CPP_BIN

Absolute path to compiled whisper.cpp binary for word-level timestamps.

  • Example: /whisper.cpp/build/bin/whisper-cli
  • Required only for optional word-by-word highlighting

FFMPEG_BIN

Absolute path or executable name for the ffmpeg binary used by audiobook/processing routes.

  • Resolution order: FFMPEG_BIN -> ffmpeg-static
  • Example: /var/task/node_modules/ffmpeg-static/ffmpeg

Client Runtime and Feature Flags

NEXT_PUBLIC_ENABLE_DOCX_CONVERSION

Controls whether the experimental DOCX-to-PDF conversion and upload feature is enabled.

  • Default: true (enabled)
  • Set false to hide DOCX support in the upload UI

NEXT_PUBLIC_ENABLE_DESTRUCTIVE_DELETE_ACTIONS

Controls whether the "Delete all user docs" and other bulk-delete buttons are shown in Settings.

  • Default: true (enabled)
  • Set false to hide destructive actions (recommended for production)

NEXT_PUBLIC_DEFAULT_TTS_PROVIDER

Sets the default TTS provider for new users.

  • Default: custom-openai
  • Example values: deepinfra, openai, custom-openai

NEXT_PUBLIC_DEFAULT_TTS_MODEL

Sets the default TTS model for new users.

  • Default: kokoro
  • Example values: hexgrad/Kokoro-82M, tts-1

NEXT_PUBLIC_SHOW_ALL_DEEPINFRA_MODELS

Controls whether the DeepInfra model list shows all models or just the free tier when no API key is set.

  • Default: true (show all)
  • Set false to restrict to free tier models when no API key is provided

NEXT_PUBLIC_ENABLE_AUDIOBOOK_EXPORT

Controls whether audiobook export UI/actions are shown in the client.

  • Default behavior: enabled unless explicitly set to false
  • Applies in both development and production
  • Affects export entry points in PDF/EPUB pages and document settings UI

NEXT_PUBLIC_ENABLE_WORD_HIGHLIGHT

Controls word-by-word highlighting UI and timestamp-alignment behavior.

  • Default behavior: enabled unless explicitly set to false
  • Applies in both development and production
  • Requires working timestamp generation (for example WHISPER_CPP_BIN)
  • Affects:
    • Word-highlight toggles in document settings
    • Alignment requests during TTS playback