Skip to content

VrushankPatel/bluelink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BlueLink

Build & Release Download

Encrypted, anonymous CLI chat backed by Firebase Realtime Database.

Messages are encrypted end-to-end with AES-256-GCM (key derived from the room ID, random nonce per message). No account required — just pick a username on first run.


Download

Grab the latest JAR from the Releases page and run it — no installation, no config:

java -jar bluelink-1.0.0.jar

Requires Java 17+ only.


Requirements

Tool Version
Java 17+
Maven 3.8+ (build only)

Building a shareable JAR

Anyone who has the JAR can chat — no extra setup needed. The Firebase credentials and database URL are bundled inside at build time.

1. Add your Firebase credentials

Copy your Firebase service-account JSON to:

src/main/resources/firebase-credentials.json

This file is in .gitignore — it will never be committed.

2. Set the database URL

Edit src/main/resources/bluelink.properties:

firebase.database.url=https://<your-project-id>-default-rtdb.firebaseio.com

3. Build

mvn package -q

This produces target/bluelink-1.0.0.jar — a self-contained fat JAR with everything bundled in.

4. Share

Send target/bluelink-1.0.0.jar to anyone. They only need Java 17+:

java -jar bluelink-1.0.0.jar

Usage

# Create a new room (prints the room ID — share it with friends)
java -jar bluelink-1.0.0.jar

# Join an existing room
java -jar bluelink-1.0.0.jar <room-id>

On first run you will be prompted for a display name. Your identity is saved to ~/.bluelink/config.json — completely local, nothing sent to any server.

In-chat commands

Command Description
/help Show available commands
/clear Clear the screen
/exit Leave the room and quit
Ctrl+C Graceful disconnect

How it works

  1. Each room has an 8-digit numeric ID — share it out-of-band with whoever you want to chat with.
  2. Messages are encrypted with AES-256-GCM before being written to Firebase. The server never sees plaintext.
  3. The encryption key is derived from the room ID — only people who know the room ID can decrypt messages.
  4. User identity (ID, display name, color) is stored locally in ~/.bluelink/config.json — no accounts, no sign-up.

Project structure

src/main/
├── java/io/github/vrushankpatel/bluelink/
│   ├── Main.java               # Entry point, argument parsing
│   ├── ChatSession.java        # Input loop + message polling
│   ├── config/
│   │   └── UserConfig.java     # Local identity persistence
│   └── firebase/
│       ├── FirebaseClient.java # All Firebase Realtime DB operations
│       ├── Crypto.java         # AES-256-GCM encrypt/decrypt
│       ├── Message.java        # Message model
│       └── Participant.java    # Participant model
└── resources/
    ├── firebase-credentials.json  # ← add before building (gitignored)
    └── bluelink.properties        # ← set firebase.database.url here

License

MIT

About

Whispers in the shell – encrypted echoes across digital terminals.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages