Build it
Everysaid is one program, everysaid, built from source. It needs Go 1.26 and, for the
interface, Node.js with pnpm.
git clone https://github.com/everysaid/everysaid.git
cd everysaid
cd web && pnpm install && pnpm build && cd .. # the interface
go generate ./internal/webui # put it inside the binary
CGO_ENABLED=0 go build -o everysaid ./cmd/everysaid
The result is a single static binary, with no runtime to install. It builds for Linux, macOS and
Windows, on amd64 or arm64, from any of them
(GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build ./cmd/everysaid).
With Signal. Signal’s client needs Signal’s own library, libsignal, written in Rust.
scripts/build-signal.sh builds it and links it in (Linux and macOS; it needs git, Rust, a C and
C++ compiler, protoc, cmake and libclang).
Try it on invented people
./everysaid demo --dir /tmp/demo --serve
This builds an archive of invented people, groups, calls and pictures in /tmp/demo, with its
own settings and data, never touching yours, and serves it at http://localhost:8530. The first
start prints a one-time setup link: open it, give a name, and choose how to sign in.
Run it for real
./everysaid serve # http://localhost:8520
The first start prints a one-time setup link, valid for an hour. Open it and choose how you will sign in:
- a passkey (a fingerprint, a face, a security key): nothing to type afterwards;
- a password with an authenticator app: the password, and the current six-digit code.
Ten recovery codes are shown once: keep them somewhere safe. everysaid user link prints a new
link at any time, for a new device or a way back in.
Then, in Sources, add what you have: an iPhone, an Android phone, Telegram, WhatsApp, Signal, Viber Desktop, an export of Messenger or Instagram, old Adium or Pidgin logs. Each source says whether it is ready and what it still needs, and keeps a log of every run. An address book (CardDAV or a .vcf file) gives people their names.
What some sources need
| Source | Needs |
|---|---|
| iPhone | libimobiledevice (idevicebackup2), the phone on the cable, and an encrypted backup |
| Android | adb, with USB debugging on |
| Telegram | an api_id and api_hash from my.telegram.org, asked for at login |
| Viber | Viber Desktop, on Linux |
| Pictures | exiftool and ffmpeg |
The archive lives in your data folder (~/.local/share/everysaid on Linux), which your own backups
should cover; what can be made again goes to the cache.
Reach it from your phone
Passkeys and notifications need HTTPS, and passkeys are tied to the address, so set it once in
~/.config/everysaid/config.toml before making them:
[server]
origin = "https://everysaid.example.org"
Then either put it behind a reverse proxy with HTTPS, for example Caddy:
everysaid.example.org {
reverse_proxy 127.0.0.1:8520
}
or keep it on a private network (WireGuard, Tailscale), where
tailscale serve --https=443 http://127.0.0.1:8520 gives it an HTTPS address.
On the phone, open the address and install it: the install prompt on Android, Share, Add to Home Screen on an iPhone. Installed, it runs full screen and can notify you of new messages.
Keep it running
On Linux, as a systemd user service, ~/.config/systemd/user/everysaid.service:
[Unit]
Description=Everysaid
After=network-online.target
[Service]
ExecStart=%h/.local/bin/everysaid serve
Restart=on-failure
[Install]
WantedBy=default.target
systemctl --user enable --now everysaid
loginctl enable-linger $USER # keep it running without a login
Read further
The repository’s documentation goes into every detail: the README (the sources, the archive, the principles), running the app, building, how it is built, and the data sources.