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
%USERPROFILE%\.local\share\signal-cli
Accounts, keys, sessions, downloaded attachments. Move with --data-dir (legacy --config). Register with -a number register, verify, then send.
~/.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.
~/.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.