Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

👻 Ghostline

Encrypted terminal conversations through a small Rust relay.

Rust 2024 Tokio Ratatui Status: prototype

Ghostline pairs two terminal clients with a temporary invite key, exchanges encrypted profiles, and relays encrypted chat frames without giving the server message plaintext.


How it is structured

Crate Role
ghostline-client Ratatui interface for creating and joining invites, choosing contacts, and chatting.
ghostline-server Tokio TCP relay that pairs users by room key and forwards encrypted message frames.
ghostline-core Shared operation codes, identifiers, room keys, frame sizes, and protocol helpers.

Security model

🔐 Messages Encrypted client-side with ChaChaBox; every message uses a fresh ephemeral key pair and nonce.
🗄️ Local data Friend information, room keys, chat keys, and history are protected with XChaCha20-Poly1305 using an Argon2-derived key.
🌐 Relay Routes room and message frames but does not decrypt chat contents.
🧹 Secrets Private and derived key material uses zeroization where implemented.

Experimental: Ghostline has not been independently audited. The current handshake does not provide an out-of-band identity verification step, so do not treat this prototype as production-secure messaging.

Run locally

Ghostline currently uses 127.0.0.1:1278, so start the relay and clients on the same machine.

1. Start the relay

cargo run -p ghostline-server

2. Create an invite

cargo run -p ghostline-client -- --invite

3. Join from another terminal

cargo run -p ghostline-client -- --join <invite-key>

4. Open a conversation

cargo run -p ghostline-client -- --talk

Running the client without arguments opens the interactive menu:

cargo run -p ghostline-client

Local data

Path Contents
~/.ghostline/user_id Persistent random user identifier.
~/.ghostline/friend_ids.toml Encrypted friend store, room keys, chat keys, and message history.

The client prompts for a storage password. For non-interactive local runs, it can be supplied through GHOSTLINE_STORAGE_PASSWORD; remember that environment variables may be exposed to other processes or tooling on the machine.

Current limitations

  • The relay address is the compile-time SERVE_IP constant; there is no runtime config or deployment profile yet.
  • Rooms exist only in server memory and disappear when the relay restarts.
  • Invite keys are temporary connection secrets and must be shared through a trusted channel.
  • The protocol and stored-data format may change while the project is a prototype.

Development

cargo fmt --all --check
cargo test --workspace
cargo clippy --workspace --all-targets
Quiet transport. Private words.

About

A open sourve encrypted private terminal chat app

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages