Configuration
The DEJA Server stores all of its configuration in the ~/.deja/ directory inside your home folder. The installer sets this up automatically.
The easiest way to change settings is deja config — an interactive walkthrough for the WebSocket server, WiThrottle, MQTT, cloud sync, and your Cloudflare tunnel token:
deja config # interactive walkthrough
deja config get # show all settings
deja config set withrottle.port 12091 # change one value
Settings saved by deja config live in config.json and take priority over the environment variables below. The reference that follows is for troubleshooting and advanced setups — you generally won't need to edit these files by hand.
Directory Structure
~/.deja/
├── bin/
│ └── deja # The deja CLI command
├── server/ # Server runtime files
│ ├── index.js # Server entry point
│ └── version.txt # Installed version
├── config.json # Account and layout configuration
├── .env # Environment variables
├── server.pid # Process ID of running server
├── logs/
│ ├── server.log # Current server log
│ └── server.log.1 # Previous log (rotated at 10 MB)
└── tunnel.pid # Process ID of running tunnel (if active)
config.json
Your account, layout, and secure authentication credentials, plus any subsystem settings saved by deja config (in ws, withrottle, mqtt, and cloud sections). This file is created during installation and updated when running deja login or deja config.
[!WARNING] Secure File Permissions:
config.jsoncontains a sensitive Firebase AuthenticationrefreshTokenused to fetch custom tokens for your layout access. This file is automatically written with restricted owner-only permissions (0600/rw-------) to prevent other local users on the machine from reading its contents.
{
"uid": "your-user-id",
"layoutId": "your-layout-id",
"serverId": "01J0...",
"refreshToken": "AIzaSy..."
}
| Field | Description |
|---|---|
uid | Your DEJA Cloud user ID |
layoutId | The layout this server is connected to |
serverId | Secure server instance identifier generated during login |
refreshToken | Long-lived authentication token used to sync layout state |
The server also caches your subscription status here after each check. You don't need to edit this — it's managed automatically.
Environment Variables (.env)
The ~/.deja/.env file controls which features are enabled and how the server connects to external services. The installer creates this file with sensible defaults.
Core Settings
| Variable | Default | Description |
|---|---|---|
LAYOUT_ID | (from install) | Your layout identifier — matches config.json |
ENABLE_DEJACLOUD | true | Connect to Firebase for real-time cloud sync |
ENABLE_WS | true | Start the WebSocket server for browser communication |
ENABLE_MQTT | false | Connect to an MQTT broker for IoT devices |
ENABLE_WITHROTTLE | true | WiThrottle protocol server for ProtoThrottle, Engine Driver, and other JMRI-compatible throttles — on by default; set false to turn it off |
WITHROTTLE_PORT | 12090 | TCP port for the WiThrottle server |
WITHROTTLE_NAME | (WS id) | mDNS/service name shown to WiThrottle clients |
VITE_WS_PORT | 8082 | Port for the WebSocket server |
WS_ID | DEJA.js | Server identifier string |
Firebase Credentials
These are public client SDK keys set automatically during installation to connect the server to your DEJA Cloud layout.
| Variable | Description |
|---|---|
VITE_FIREBASE_API_KEY | Firebase API key (public) |
VITE_FIREBASE_AUTH_DOMAIN | Firebase auth domain |
VITE_FIREBASE_PROJECT_ID | Firebase project ID |
VITE_FIREBASE_DATABASE_URL | Firebase Realtime Database URL |
VITE_FIREBASE_STORAGE_BUCKET | Firebase storage bucket |
VITE_FIREBASE_MESSAGING_SENDER_ID | Firebase messaging sender ID |
VITE_FIREBASE_APP_ID | Firebase app ID |
[!NOTE] No Service Account Keys Required: Historically, the server required a service account email and private key (
FIREBASE_CLIENT_EMAILandFIREBASE_PRIVATE_KEY). These are deprecated for end-user installations and have been removed. Authentication is now handled dynamically and securely viadeja login.
Optional Settings
| Variable | Description |
|---|---|
CLOUDFLARE_TUNNEL_TOKEN | Token for a named Cloudflare tunnel (see Remote Monitoring) |
MQTT_BROKER | MQTT broker URL (default: mqtt://localhost) |
MQTT_PORT | MQTT broker port (default: 1883) |
AUDIO_CACHE_SIZE_MB | Max size of the server's sound-effect cache in MB (default: 200) |
AUDIO_CACHE_DIR | Directory for cached sound files (default: temp-sounds-cache) |
Editing Configuration
The safest way to change the settings the server exposes is the interactive /settings panel, available from the console while the server is running (deja start, no -b flag). It writes changes straight to config.json — no manual file editing, no risk of a typo breaking JSON syntax.
deja start
Then type /settings (or press m for the menu). The panel covers:
| Setting | What it controls |
|---|---|
| MQTT | Toggle the MQTT subsystem on/off |
| WebSocket | Toggle the WebSocket server on/off |
| Tunnel | Toggle the remote monitoring tunnel on/off |
| MQTT Port | Broker port (default 1883) |
| MQTT Broker | Broker URL (default mqtt://localhost) |
| WS Port | WebSocket server port (default 8082) |
Use ↑/↓ to navigate, Enter to toggle or edit a field, and Esc to go back. Changes take effect on restart — the panel reminds you when a field requires one.
For anything the /settings panel doesn't cover (Firebase credentials, LAYOUT_ID, audio cache settings, etc.), edit ~/.deja/.env directly in a text editor:
nano ~/.deja/.env
After making changes, restart the server for them to take effect:
deja restart
Log Rotation
Server logs are stored at ~/.deja/logs/server.log. When the log file reaches 10 MB, it's automatically rotated — the current log is saved as server.log.1 and a new log file is started.