Skip to main content

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.json contains a sensitive Firebase Authentication refreshToken used 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..."
}
FieldDescription
uidYour DEJA Cloud user ID
layoutIdThe layout this server is connected to
serverIdSecure server instance identifier generated during login
refreshTokenLong-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

VariableDefaultDescription
LAYOUT_ID(from install)Your layout identifier — matches config.json
ENABLE_DEJACLOUDtrueConnect to Firebase for real-time cloud sync
ENABLE_WStrueStart the WebSocket server for browser communication
ENABLE_MQTTfalseConnect to an MQTT broker for IoT devices
ENABLE_WITHROTTLEtrueWiThrottle protocol server for ProtoThrottle, Engine Driver, and other JMRI-compatible throttles — on by default; set false to turn it off
WITHROTTLE_PORT12090TCP port for the WiThrottle server
WITHROTTLE_NAME(WS id)mDNS/service name shown to WiThrottle clients
VITE_WS_PORT8082Port for the WebSocket server
WS_IDDEJA.jsServer identifier string

Firebase Credentials

These are public client SDK keys set automatically during installation to connect the server to your DEJA Cloud layout.

VariableDescription
VITE_FIREBASE_API_KEYFirebase API key (public)
VITE_FIREBASE_AUTH_DOMAINFirebase auth domain
VITE_FIREBASE_PROJECT_IDFirebase project ID
VITE_FIREBASE_DATABASE_URLFirebase Realtime Database URL
VITE_FIREBASE_STORAGE_BUCKETFirebase storage bucket
VITE_FIREBASE_MESSAGING_SENDER_IDFirebase messaging sender ID
VITE_FIREBASE_APP_IDFirebase app ID

[!NOTE] No Service Account Keys Required: Historically, the server required a service account email and private key (FIREBASE_CLIENT_EMAIL and FIREBASE_PRIVATE_KEY). These are deprecated for end-user installations and have been removed. Authentication is now handled dynamically and securely via deja login.

Optional Settings

VariableDescription
CLOUDFLARE_TUNNEL_TOKENToken for a named Cloudflare tunnel (see Remote Monitoring)
MQTT_BROKERMQTT broker URL (default: mqtt://localhost)
MQTT_PORTMQTT broker port (default: 1883)
AUDIO_CACHE_SIZE_MBMax size of the server's sound-effect cache in MB (default: 200)
AUDIO_CACHE_DIRDirectory 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:

SettingWhat it controls
MQTTToggle the MQTT subsystem on/off
WebSocketToggle the WebSocket server on/off
TunnelToggle the remote monitoring tunnel on/off
MQTT PortBroker port (default 1883)
MQTT BrokerBroker URL (default mqtt://localhost)
WS PortWebSocket 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.