Skip to content

Convars

Convars wire Blixt to your server infrastructure: framework, storage, trust allowlists, debug flags. Set them in server.cfg before ensure blixt.

config.json covers the player-visible product surface (apps, wallpapers, branding); convars cover everything else.


The full set, copy-pasteable:

# Core
set blixt:framework "auto" # auto | qbox | qbcore | esx | standalone
set blixt:debug "false" # "true" enables verbose logs + the _dev tRPC router
set blixt:telemetry "true" # anonymous boot ping; see docs/PRIVACY.md
setr blixt:custom_prop "false" # "true" swaps the GTA phone for the streamed Blixt prop
# Trust
set blixt:trusted_resources "" # comma-separated list of resources allowed to call exports.blixt:*
# Photo + video + voice memo storage
set blixt:image_storage "auto" # auto | r2 | s3 | fivemanage | discord
set blixt:video_storage "auto" # auto | r2 | s3 | fivemanage
set blixt:voice_memo_storage "auto" # auto | r2 | s3 | fivemanage
set blixt:message_image_hosts "" # extra trusted hosts for pasted image URLs
set blixt:image_path "photos"
set blixt:video_path "videos"
set blixt:voice_memo_path "voice-memos"
# Cloudflare R2 (account + bucket reused across images and voice memos)
set blixt:r2_account_id ""
set blixt:r2_bucket ""
set blixt:r2_access_key_id ""
set blixt:r2_secret_access_key ""
set blixt:r2_public_url "" # optional pubsub.r2.dev or custom CDN
# Generic S3 (alternative to R2)
set blixt:s3_endpoint ""
set blixt:s3_bucket ""
set blixt:s3_access_key_id ""
set blixt:s3_secret_access_key ""
set blixt:s3_region "us-east-1"
set blixt:s3_public_url ""
# Fivemanage (third option)
set blixt:fivemanage_token ""
# Discord (cheapest, least durable)
set blixt:image_webhook ""
# Database (read by oxmysql + Blixt)
set mysql_connection_string "mysql://user:pass@host:3306/blixt"

All convars also surface under txAdmin → Server Configuration → Blixt.


Selects the framework adapter. Adapter source: packages/framework-adapter/src/.

ValueBehaviour
auto (default)Detects qbox, then qbcore, then esx; falls back to standalone.
qboxForce qbox.
qbcoreForce qbcore.
esxForce ESX.
standaloneNo framework integration. Useful for staging or custom forks.

Override auto when you run multiple frameworks side-by-side during a migration, or when auto-detection picks the wrong one.

"true" enables verbose Winston logs and mounts the internal _dev tRPC router (used by the dev HTTP API and the e2e harness). When explicitly set, it overrides debug.enabled in config.json. Off in production.

Optional. One of error, warn, info, debug, trace. Overrides the debug.level field in config.json. Use this when you want to flip verbosity from txAdmin without editing JSON.

Anonymous boot ping. "true" (default) sends one POST per resource start with a hashed license key, framework name, version, and boot timestamp. See Privacy and telemetry for the exact payload.

Set "false" to disable; the network call is suppressed at the source.

Replicated convar (setr, not set) — clients read it. When "true", Blixt streams the blixt_phone model and swaps the default GTA prop_amb_phone_01 whenever the player holds the phone.

Default "false" so out-of-the-box installs don’t depend on the streamed asset reaching every client.


Comma-separated allowlist of resources permitted to call gated Blixt exports (e.g. RegisterExternalApp payload exports, internal data readers). Without this allowlist, satellite apps can register themselves but cannot call privileged APIs.

set blixt:trusted_resources "blixt-business,my-gov-app"

The trust list is one-way: Blixt trusts these resources to call into it. It does not give those resources access to one another.

Note. RegisterExternalApp itself is intentionally not gated by this convar — gating it creates a chicken-and-egg where unregistered resources can never become trusted. Only the privileged read/write exports are gated.


Blixt persists three media types: photos (camera + gallery), camera videos, and voice memos (messages, voice notes). Each can target a different backend, configured independently.

The Camera app requires screenshot-basic to be started before blixt. After that, configure where Blixt uploads image files by setting blixt:image_storage and video files by setting blixt:video_storage.

Use one of these image backends:

  • Cloudflare R2 ("r2") for most production servers. You control the bucket, credentials, and optional public CDN URL.
  • Generic S3 ("s3") for AWS S3, MinIO, Wasabi, Backblaze B2, or another S3-compatible provider.
  • Fivemanage ("fivemanage") if your server already uses Fivemanage media hosting.
  • Discord webhook ("discord") for cheap testing only. It works for images, but is the least durable option and does not support voice memos.

Video storage supports R2, S3, and Fivemanage. Discord webhook storage remains image-only.

If you leave a media storage convar as "auto", Blixt chooses the first complete credential set in the order below. If you pin a backend explicitly, missing credentials do not fall back to another provider.

When blixt:image_storage, blixt:video_storage, or blixt:voice_memo_storage is "auto" (default), Blixt picks the first backend whose credentials are set, in this order:

  1. Cloudflare R2 — if blixt:r2_account_id + blixt:r2_bucket + access keys are set.
  2. Generic S3 — if blixt:s3_endpoint + blixt:s3_bucket + access keys are set.
  3. Fivemanage — if blixt:fivemanage_token is set.
  4. Discord (images only) — if blixt:image_webhook is set.
  5. None — uploads fail with a user-visible error.

Pin a specific backend with the explicit value ("r2", "s3", "fivemanage", "discord") when you have multiple sets of credentials configured and want to be explicit about which one wins.

Messages turn a pasted image URL into a rich image only when the URL is HTTPS and its host is trusted. Built-in trusted hosts cover Blixt’s bundled demo images plus Discord and Fivemanage storage. blixt:r2_public_url, blixt:r2_endpoint, blixt:s3_public_url, and blixt:s3_endpoint are trusted automatically when configured. Add any other CDN hosts with blixt:message_image_hosts as a comma-separated list.

blixt:image_path (default "photos"), blixt:video_path (default "videos"), and blixt:voice_memo_path (default "voice-memos") are the bucket key prefix. Object keys are <prefix>/<id>.<ext>.

Recommended for production: free egress, S3-compatible API, easy CDN.

ConvarRequired
blixt:r2_account_idyes
blixt:r2_bucketyes
blixt:r2_access_key_idyes
blixt:r2_secret_access_keyyes
blixt:r2_public_urloptional (defaults to pubsub.r2.dev)

Generate the access keys under Cloudflare → R2 → Manage R2 API Tokens. Scope them to read+write on the single bucket.

For AWS S3, MinIO, Wasabi, Backblaze B2 (S3-compatible mode), or any provider exposing the S3 API.

ConvarRequired
blixt:s3_endpointyes — full URL incl. scheme
blixt:s3_bucketyes
blixt:s3_access_key_idyes
blixt:s3_secret_access_keyyes
blixt:s3_regionoptional (default "us-east-1")
blixt:s3_public_urloptional (default: derived from endpoint)

If you already have a Fivemanage subscription:

set blixt:image_storage "fivemanage"
set blixt:video_storage "fivemanage"
set blixt:voice_memo_storage "fivemanage"
set blixt:fivemanage_token "your-token"

Lowest setup, least durable — Discord may delete your channel or rate-limit you. Fine for testing.

set blixt:image_storage "discord"
set blixt:image_webhook "https://discord.com/api/webhooks/.../..."

These convars are read by the e2e test harness and the dev HTTP API. Leave them at defaults in production.

ConvarPurpose
blixt:test_mode"1" enables the harness HTTP control surface.
blixt:test_resourcesComma-separated list of resources permitted to drive it.

Read by both oxmysql and Blixt’s @blixt/database package. Connection URL form:

mysql://user:password@host:port/database

Blixt runs all pending migrations against this database on startup, using a tracking table called blixt_migrations. The user needs CREATE, ALTER, DROP, INDEX, plus the standard CRUD grants.

If neither this convar nor the DATABASE_URL env var (used in the browser-mode dev server) is set, Blixt fails to start and logs:

No database connection string found. Set DATABASE_URL env var or mysql_connection_string convar.