Configuration¶
fbadmin is configured with command-line options and environment variables.
Command line¶
fbadmin [--host HOST] [--port PORT] [--no-browser] [--reload]
[--log-level {critical,error,warning,info,debug}] [--log-format {text,json}]
fbadmin-desktop [--port PORT] [--browser] [--log-level LEVEL]
Environment variables¶
| Variable | Default | Meaning |
|---|---|---|
FBADMIN_DATA_DIR |
~/.fbadmin |
Data directory (servers.json, mode 0600) |
FBADMIN_HOST / FBADMIN_PORT |
127.0.0.1 / 5050 |
Bind address |
FBADMIN_MAX_ROWS |
1000 |
Default row limit per query result |
FBADMIN_SESSION_IDLE_TIMEOUT |
3600 |
Seconds before an idle Query Tool connection is closed |
FBADMIN_LOG_LEVEL |
info |
Same as --log-level |
FBADMIN_LOG_FORMAT |
text |
json for structured logs (same as --log-format) |
FBADMIN_ACCESS_LOG |
1 |
0 turns off the per-request log |
FBADMIN_RATE_LIMIT |
0 (off) |
API requests per minute per client IP (token bucket, same burst) |
FBADMIN_RATE_LIMIT_TRUST_PROXY |
0 |
1: identify clients by X-Forwarded-For (only behind a trusted proxy) |
FBADMIN_MAX_REQUEST_BYTES |
33554432 (32 MiB) |
Maximum request body; larger requests get HTTP 413. 0 = unlimited |
FBADMIN_META_POOL_SIZE |
3 |
Metadata connections per database (see below) |
FBADMIN_DRIVER |
firebirdsql |
native to use firebird-driver + libfbclient for metadata connections |
FBADMIN_FBCLIENT |
Path of libfbclient for the native driver |
|
FBADMIN_UPDATE_CHECK |
ask |
off forbids the opt-in update check (see Privacy) |
FBADMIN_SERVERS_FILE |
unset | YAML/JSON file of Firebird servers to register at startup; see Deployment |
FBADMIN_PLUGINS |
on | off loads no plugins: a safe mode for troubleshooting, also used when generating the API types |
Logging¶
Text logs look like 2026-10-18 20:01:02,345 INFO fbadmin.access: GET /api/servers 200 3.1ms.
With --log-format json every line is one JSON object:
{"ts": "2026-10-18T20:01:02.345+00:00", "level": "info", "logger": "fbadmin.access",
"msg": "GET /api/servers 200 3.1ms", "method": "GET", "path": "/api/servers",
"status": 200, "duration_ms": 3.1, "client": "10.0.0.7"}
Requests for static assets are logged at debug level, server errors (5xx) at error.
Query text and parameters are never logged.
Request limits¶
The rate limiter and the body size limit are generic and apply to every API request
(login throttling in server mode is separate). A rejected request gets HTTP 429 with a
Retry-After header (/api/health is never throttled, so probes keep working), or HTTP 413, and a JSON body with code rate_limited or
request_too_large. The UI polls a few endpoints every few seconds per open tab, so keep
the rate limit well above 60 requests per minute per user.
Metadata connections¶
The object explorer, dashboards, DDL and the data grid share a small pool of
connections per database (FBADMIN_META_POOL_SIZE). The first connection is used
whenever it is free; extra ones open only while it is busy (a slow DDL extraction, a big
MON$ query) and close again after two idle minutes. Every Query Tool tab has its own
connection, separate from the pool.
Native driver (optional)¶
FBADMIN_DRIVER=native uses firebird-driver
on top of the Firebird client library for metadata connections:
pip install "firebird-admin[native]" # plus libfbclient: apt install libfbclient2, or a Firebird install
FBADMIN_DRIVER=native FBADMIN_FBCLIENT=/opt/firebird/lib/libfbclient.so fbadmin
Limitations: Query Tool sessions, creating and dropping databases and the Services API
(backup, restore, gstat, log) keep using the pure-Python driver, because they rely on its
transaction parameter blocks and statement information. Wire encryption follows the client
library's firebird.conf (WireCrypt), not the per-server checkbox. The official Docker
image does not contain libfbclient.