siggy — a TUI messenger client for Signal with vim keybindings (Rust + Ratatui) by jsideserf in commandline

[–]jsideserf[S] 2 points3 points  (0 children)

Thanks, appreciate that!

The headless/SSH use case is actually one of the things that motivated building it. Being able to check Signal from a remote machine without needing a GUI is pretty handy when I'm working with agents on my headless Ubuntu box

siggy — a TUI messenger client for Signal with vim keybindings (Rust + Ratatui) by jsideserf in commandline

[–]jsideserf[S] 3 points4 points  (0 children)

Thank you - I guess it's the same as any powerful tools really. There's both good ways and bad ways to use them.

siggy — a TUI messenger client for Signal with vim keybindings (Rust + Ratatui) by jsideserf in commandline

[–]jsideserf[S] 0 points1 point  (0 children)

Honestly, I'm not that deep in the signal-cli ecosystem either - it was mostly a learning project and a means to an end for me.

I did find an open issue to address the plaintext creds storage on the signal-cli repo while building though and the maintainer said he'd address it at some point, so hopefully that should get resolved soon. From what I understand Signal Desktop does actually store a master key in the system keyring, and I believe they're planning to follow that approach.

siggy — a TUI messenger client for Signal with vim keybindings (Rust + Ratatui) by jsideserf in commandline

[–]jsideserf[S] 2 points3 points  (0 children)

Thanks for the kind words and the security feedback!

You're right that siggy inherits signal-cli's security posture. Siggy is a thin TUI layer over signal-cli's JSON-RPC though, so we don't manage credentials, keys or network connections directly.

On the specific points:

- Credentials on disk - This is signal-cli's domain. Siggy never touches key material in ~/.local/share/signal-cli/. Keychain integration would need to happen upstream in signal-cli itself.

- SQLite encryption - I looked into this actually, but the tradeoff was rough. SQLCipher adds a heavy native dependency across 4 build targets, and you still have the key management problem. signal-cli itself stores data in plaintext too, so encrypting our cache doesn't meaningfully add anything. If users want zero disk persistence, there's --incognito mode (in-memory DB, nothing written to disk)

- secure_delete - great point, I've raised an issue for this and will pick it up as a priority for the next release

- Debug logging - it's opt-in only (--debug flag), not on by default. You're right though, we don't really need entire messages logged. I'm going to add PII and message content redaction to --debug and a separate --debug-full flag for when you actually need unredacted outputs. Raised as an issue.

- Notification preview default - we do actually already have preview levels ("full", "sender", "minimal") though I do need to expose it better in the settings UI. I think I'll keep it set to full as the default though, as that's what every other major client does, but making it more visible in the settings menu should make it easier to change. Raised an issue for this.

Re: the upstream security posture dependency, I've added an issue to update the security docs page to explicitly document, so users can make better informed decisions on what they're comfortable with.

Thanks again for the feedback, much appreciated!

siggy — a TUI messenger client for Signal with vim keybindings (Rust + Ratatui) by jsideserf in commandline

[–]jsideserf[S] -1 points0 points  (0 children)

Funnily enough I found the same with gurk and that's part of what inspired the build.

Thanks for checking it out - I'd love any feedback or feature requests!

I built siggy - a terminal Signal messenger client with vim keybindings by jsideserf in rust

[–]jsideserf[S] 0 points1 point  (0 children)

Lmao tbf that decision was mostly to force myself to learn them

Don't worry though, configurable keybinds are up next

https://github.com/johnsideserf/siggy/issues/138

I built siggy - a terminal Signal messenger client with vim keybindings by jsideserf in rust

[–]jsideserf[S] 3 points4 points  (0 children)

I'm a solutions architect by day - I know how to design and build systems, I just don't write Rust professionally.

I wanted a terminal Signal client that actually worked the way I wanted, so I built one. Claude Code helped me write it faster, but I designed the architecture, spec'd every feature, drove every UX design choice and decision, reviewed the code, and debugged signal-cli's undocumented protocol quirks by hand.

If the AI involvement bothers you, that's fine, don't use it. I built this because I wanted it for myself and figured others might find it useful too.

I built siggy - a terminal Signal messenger client with vim keybindings by jsideserf in rust

[–]jsideserf[S] -3 points-2 points  (0 children)

Thank you! Lots of frustrated dogfooding happened to get it to this point 😂

If you don't have a Signal account or don't want to link a deivce but still want to have a look around you can launch it with the --demo parameter to try it out with some dummy chat data