Skip to main content

Server Options

Complete reference for yopass-server. All flags can also be set via environment variable.

Configuration methods​

Flags take precedence. Environment variables are the flag name uppercased with dashes replaced by underscores (e.g. --max-length → MAX_LENGTH).


Core​

FlagEnv varDefaultDescription
--addressADDRESS0.0.0.0Listen address
--portPORT1337Listen port
--log-levelLOG_LEVELinfoLog level: debug, info, warn, error
--metrics-portMETRICS_PORT-1Port for the Prometheus metrics server. Disabled when -1
--health-checkHEALTH_CHECKfalseCheck database connectivity and exit
--asset-pathASSET_PATHpublicPath to the built frontend assets directory

Database​

FlagEnv varDefaultDescription
--databaseDATABASEmemcachedStorage backend: memcached or redis
--memcachedMEMCACHEDlocalhost:11211Memcached address (host:port)
--redisREDISredis://localhost:6379/0Redis connection URL

Secrets​

FlagEnv varDefaultDescription
--max-lengthMAX_LENGTH10000Maximum encrypted secret size in bytes
--allow-custom-expirationALLOW_CUSTOM_EXPIRATIONfalseAllow custom expiration for secrets, uploads, and secret requests; available without a license
--min-expirationMIN_EXPIRATION1mInclusive minimum custom duration
--max-expirationMAX_EXPIRATION90dInclusive maximum custom duration
--default-expiryDEFAULT_EXPIRY1hDefault expiration pre-selected in the UI: 1h, 1d, or 1w; custom durations are accepted when enabled
--force-expirationFORCE_EXPIRATION—Force secrets, file uploads, and secret requests to a fixed expiration: 1h, 1d, or 1w, or a custom duration when enabled. The server rejects any create request with a different value (400 Expiration does not match server policy). The UI replaces the expiration selector with the fixed duration
--default-onetime-secretsDEFAULT_ONETIME_SECRETStrueCheck One-time download by default on the text and file forms; users can change it unless --force-onetime-secrets is enabled
--force-onetime-secretsFORCE_ONETIME_SECRETSfalseReject secrets that are not set to one-time viewing
--prefetch-secretPREFETCH_SECRETtrueShow a warning that the secret may be one-time use before revealing it
--argon2ARGON2falseUse Argon2id for password key derivation instead of iterated SHA-256. See Argon2 key derivation

Custom expiration​

Custom expiration is disabled by default and needs no business license. Enable it with:

yopass-server --allow-custom-expiration --min-expiration=1m --max-expiration=90d

Duration flags and the CLI accept positive integer amounts with s, m, h, d, and w units, including combinations such as 1d12h. A day is 24 hours and a week is 7 days. Fractions, negative values, zero lifetimes, and integer overflow are rejected. The API continues to accept whole seconds in expiration and X-Yopass-Expiration.

The web UI offers a date and time picker in the browser’s local time zone. Policies whose minimum and maximum differ by less than one minute use a relative duration selector, keeping those narrow ranges usable during editing. The selected deadline is converted to remaining whole seconds when submitting, including time spent editing or encrypting. The server receives a duration rather than a local date string, and storage deadlines use Unix timestamps, so the server’s time zone does not affect expiration.

File uploads have a timing limitation: the browser calculates the remaining lifetime before sending the encrypted file, but database-backed file data and download metadata start that lifetime after the upload finishes. A slow upload can therefore remain available beyond the selected date/time by approximately the transfer duration. Disk/S3 blob cleanup deadlines and read receipts are set earlier, so their expiration can differ from the download metadata. The server’s upload timeout limits this drift: --file-transfer-timeout defaults to 5m (0 uses --request-timeout). Increasing the timeout permits longer transfers and a larger timing difference.

The default bounds are 1 minute through 90 days, inclusive. Defaults and forced values must fit those bounds; when changing the minimum above one hour, also set a valid --default-expiry. Forced expiration takes precedence over user selection. Bounds apply to new creations; existing secrets and requests keep their original deadlines. Disabling the option restores the standard one-hour, one-day, and one-week choices.

Memcached supports longer durations using absolute timestamps, which Yopass converts automatically. Its client uses signed 32-bit timestamps; configurations exceeding that range fail at startup, and writes also check for overflow. Memcached may evict unexpired secrets under memory pressure, and file metadata still depends on the database even when blobs use disk or S3. Expiration is a maximum lifetime, not a guarantee of availability until that date.

Argon2 key derivation​

The --argon2 flag switches the S2K (string-to-key) function used when encrypting secrets from the default iterated SHA-256 to Argon2id, a memory-hard function that better resists GPU-accelerated brute-force attacks. This mostly matters for user-chosen passwords; auto-generated keys are random and already infeasible to brute-force.

When enabled, the server:

  • Exposes ARGON2: true in the /config endpoint, so the web frontend and the CLI encrypt with Argon2
yopass-server --argon2

# or via environment variable
ARGON2=true yopass-server

Decryption is unaffected by the flag in either direction: the key derivation type is stored inside each PGP message, so secrets created before enabling (or after disabling) the flag keep working.

CSP and reverse proxies

The server always includes 'wasm-unsafe-eval' in the Content-Security-Policy so existing Argon2 messages remain decryptable when the encryption flag is disabled or differs between instances. Reverse proxies that override the Content-Security-Policy header can silently break decryption in the browser. If your proxy (Nginx, Caddy, Apache, …) sets its own CSP, add 'wasm-unsafe-eval' to script-src:

Content-Security-Policy: ... script-src 'self' 'wasm-unsafe-eval'; ...

'wasm-unsafe-eval' is a CSP Level 3 source keyword that only permits WebAssembly compilation — it does not enable eval() or Function(). Proxies that pass backend headers through unchanged need no configuration.


File Storage​

FlagEnv varDefaultDescription
--max-file-sizeMAX_FILE_SIZE512KBMaximum file upload size (e.g. 10KB, 512KB, 1MB). Capped at 1 MB without a license key
--disable-uploadDISABLE_UPLOADfalseDisable the /create/file upload endpoint entirely
--file-storeFILE_STORE(database)File storage backend: disk, s3, or empty to use the database
--file-store-pathFILE_STORE_PATH/tmp/yopass-filesBase directory for the disk file store
--file-store-s3-bucketFILE_STORE_S3_BUCKET—S3 bucket name (required for S3 storage)
--file-store-s3-prefixFILE_STORE_S3_PREFIXyopass/Key prefix for objects stored in S3
--file-store-s3-endpointFILE_STORE_S3_ENDPOINT—S3-compatible endpoint URL (e.g. MinIO at http://minio:9000)
--file-store-s3-regionFILE_STORE_S3_REGIONus-east-1S3 region
--cleanup-intervalCLEANUP_INTERVAL60How often (seconds) the built-in file cleanup runs
--disable-file-cleanupDISABLE_FILE_CLEANUPfalseDisable the built-in cleanup goroutine (use when relying on S3 lifecycle rules instead)

See File Storage for backend setup and S3 lifecycle rule examples.


TLS​

FlagEnv varDefaultDescription
--tls-certTLS_CERT—Path to the TLS certificate file
--tls-keyTLS_KEY—Path to the TLS private key file

See TLS / HTTPS for built-in TLS setup and reverse proxy examples.


Security & Networking​

FlagEnv varDefaultDescription
--cors-allow-originCORS_ALLOW_ORIGIN*Value for the Access-Control-Allow-Origin response header
--trusted-proxiesTRUSTED_PROXIES—Comma-separated IP addresses or CIDR ranges whose X-Forwarded-For headers are trusted (e.g. 192.168.1.0/24,10.0.0.0/8)
--request-timeoutREQUEST_TIMEOUT30sMaximum duration for ordinary request reads and response writes. Set to 0 to disable
--file-transfer-timeoutFILE_TRANSFER_TIMEOUT5mMaximum duration for streaming file uploads and downloads. Increase for large files; 0 uses --request-timeout

For both timeout flags and their environment variables, include a unit: 30s for 30 seconds, 5m for 5 minutes, or 1h for 1 hour. Use 0 without a unit for the special behavior described above.

These are whole-request deadlines, not idle timeouts. Keep the backend port private and configure the public ingress with its own body/write timeouts and per-client and total connection limits. Set both timeout flags to 0 to disable the configurable whole-request read/write deadlines; header and idle timeouts remain enabled. With built-in TLS, HTTP/2 connections are also closed if they accept no response bytes for 30 seconds while data is waiting to be sent. This progress limit stays active when both timeout flags are 0; slow connections that keep accepting bytes remain supported.

Application and metrics request headers are limited to 16 KiB, with Go's protocol-specific accounting and allowances. This also limits HTTP/2 headers after decompression. Oversized headers are rejected before reaching handlers.


Frontend / UI​

FlagEnv varDefaultDescription
--read-onlyREAD_ONLYfalseDisable secret creation endpoints. Retrieval and deletion remain active
--disable-featuresDISABLE_FEATURESfalseHide the features section on the homepage
--disable-one-click-linkDISABLE_ONE_CLICK_LINKfalseHide the combined link containing the decryption key on text and file result pages. The short link and key remain available to share separately. This controls the UI only; existing combined links still work
--no-theme-switcherNO_THEME_SWITCHERfalseHide the theme switcher and always use the light theme, ignoring browser and saved dark-mode preferences
--no-language-switcherNO_LANGUAGE_SWITCHERfalseHide the language switcher in the navigation bar
--privacy-notice-urlPRIVACY_NOTICE_URL—URL linked from the privacy notice in the footer
--imprint-urlIMPRINT_URL—URL linked from the imprint / legal notice in the footer
--public-urlPUBLIC_URL—Base URL of the public read-only instance. Secret links generated by the creation instance will use this URL

See Read-Only Mode for split-instance deployments.


License​

FlagEnv varDefaultDescription
--license-keyLICENSE_KEY—License key that unlocks OIDC authentication, theming, audit logging, and file sizes above 1 MB

Expiry behavior​

The expiry timestamp is checked continuously at runtime, not just at startup, so a long-running server degrades to the non-business feature set the moment its license expires — no restart needed. The server logs a daily warning during the last 30 days and an error at expiry; the yopass_license_days_until_expiry metric counts down live (negative once expired).

When the license expires — whether at runtime or on a restart with an expired key:

  • Disabled: creating new secret requests, read receipts on new secrets, custom theming/branding/logo, file uploads above the 1 MB cap, audit logging, webhooks, and new OIDC logins.
  • Kept working, by design: existing OIDC sessions and requireAuth enforcement stay fully active so secrets created with authentication required remain protected and accessible to already-authenticated users — an expiring license never weakens access control or strands data. Already-issued secret requests can still be viewed, fulfilled, and retrieved until their original expiration.
  • Startup without any license key: the server refuses to start with --oidc-issuer, --audit-log, or --webhook-url configured. This catches misconfiguration — providing these flags without ever having a license is an error, not a degradation.

Authentication (requires license key)​

FlagEnv varDefaultDescription
--oidc-issuerOIDC_ISSUER—OIDC provider URL (e.g. https://accounts.google.com)
--oidc-client-idOIDC_CLIENT_ID—OAuth 2.0 client ID
--oidc-client-secretOIDC_CLIENT_SECRET—OAuth 2.0 client secret
--oidc-redirect-urlOIDC_REDIRECT_URL—Callback URL registered with your OIDC provider (e.g. https://yopass.example.com/auth/callback)
--require-authREQUIRE_AUTHfalseRequire users to be authenticated before they can create secrets
--api-tokenAPI_TOKEN—Static bearer token(s) letting machine clients create secrets when --require-auth is set, formatted as name:secret (comma-separated for multiple)
--oidc-allowed-domainsOIDC_ALLOWED_DOMAINS—Comma-separated email domains allowed to log in (e.g. corp.example.com,example.com)
--oidc-require-verified-emailOIDC_REQUIRE_VERIFIED_EMAILtrueRequire email_verified: true for new OIDC logins. Set to false only when the provider controls email assertions and application access; domain restrictions still apply.
--oidc-session-keyOIDC_SESSION_KEY—Optional 64-byte hex-encoded session key for sharing sessions across instances; an invalid nonempty key prevents startup. Generate with openssl rand -hex 64
--frontend-urlFRONTEND_URL—Frontend base URL for post-login redirect in split-origin (OIDC + separate frontend) deployments

See OpenID Connect for provider-specific setup and multi-instance configuration.


Branding (requires license key)​

FlagEnv varDefaultDescription
--app-nameAPP_NAME—Custom application name shown in the UI (default: Yopass)
--hide-app-nameHIDE_APP_NAMEfalseHide the application name in the navbar while keeping the logo; does not change the browser tab title
--logo-urlLOGO_URL—URL to a custom logo image (e.g. /mylogo.svg for a file in the public/ directory, or an external CDN URL)
--theme-lightTHEME_LIGHTemeraldDaisyUI theme name for light mode
--theme-darkTHEME_DARKdimDaisyUI theme name for dark mode
--theme-custom-lightTHEME_CUSTOM_LIGHT—JSON object of CSS variables for a fully custom light theme (keys must start with --; only --color-* is officially supported, see theming docs)
--theme-custom-darkTHEME_CUSTOM_DARK—JSON object of CSS variables for a fully custom dark theme (keys must start with --; only --color-* is officially supported, see theming docs)

See Theming & Branding for available theme names and CSS variable examples.


Audit Logging (requires license key)​

FlagEnv varDefaultDescription
--audit-logAUDIT_LOGfalseEnable structured NDJSON audit logging
--audit-log-fileAUDIT_LOG_FILE(stdout)File path for audit log output

See Audit Logging for log format, event types, and log rotation.


Secret Requests (requires license key)​

Secret requests are enabled automatically with a valid license key.

FlagEnv varDefaultDescription
--disable-secret-requestsDISABLE_SECRET_REQUESTSfalseDisable the secret request feature

See Secret Requests for the full flow, security model, and REST API.


Webhooks & Read Receipts (requires license key)​

Read receipts are enabled automatically with a valid license key; webhooks require a URL.

FlagEnv varDefaultDescription
--webhook-urlWEBHOOK_URL—Endpoint receiving secret and request lifecycle events (created, viewed, fulfilled, expired)
--webhook-secretWEBHOOK_SECRET—HMAC-SHA256 signing key for webhook payloads
--default-read-receiptDEFAULT_READ_RECEIPTfalseCheck Read receipt by default on the text and file forms when read receipts are enabled; users can uncheck it
--disable-read-receiptsDISABLE_READ_RECEIPTSfalseDisable the read receipt feature

See Webhooks for payload format and signature verification, and Read Receipts for the per-secret "was it opened?" flow.