WindowsmacOSLinux

Where Does signal-cli Store Accounts and Config?

signal-cli keeps accounts in the XDG data dir and layered JSON configs in system plus user config dirs.

Last updated

signal-cli separates secrets from settings. Account data (keys, sessions, messages) lives in the data dir, defaulting to ~/.local/share/signal-cli and movable with --data-dir. JSON configs layer system (/etc/signal-cli/config.json), env (SIGNAL_CLI_CONFIG) and user (~/.config/signal-cli/config.json) paths with CLI flags on top.

Select accounts with -a (phone or ACI); single-account setups can skip it. Daemon and JSON-RPC modes reuse the same dirs, so bots and interactive use share state cleanly.

Where signal-cli stores this, by platform

Windows
%USERPROFILE%\.local\share\signal-cli

Accounts, keys, sessions, downloaded attachments. Move with --data-dir (legacy --config). Register with -a number register, verify, then send.

macOS
~/.local/share/signal-cli

Same XDG layout. Daemon socket defaults under $XDG_RUNTIME_DIR/signal-cli; config merge order is flags, user file, system file, builtins.

Linux
~/.local/share/signal-cli

Same files. System defaults in /etc/signal-cli/config.json suit multi-user hosts; per-user files override them without touching system state.

Frequently asked questions

How do I migrate signal-cli to another host?

Copy the data dir to the new machine (same path or via --data-dir). It holds keys and sessions; without it you must re-register or re-link the number.

Where do received attachments go?

Attachments land inside the data dir on receive. Pass --ignore-attachments (or per-type ignore flags) to skip downloads for bots that only need text.

Notice an outdated path? Let us know.