Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VaultChat — E2EE Messaging Relay

Encryption



Status Version Node.js Express Prisma PM2 License: GPL v3



Overview

VaultChat is a self-hosted, end-to-end encrypted messaging relay.
The server is opaque — it never reads, stores, or processes any plaintext.
All encryption happens client-side using AES-256-GCM, ECDH P-256 and ECDSA P-256.


Features

Encryption

Algorithm Usage
AES-256-GCM Message & file encryption
ECDH P-256 Key agreement (pairwise & sealed)
ECDSA P-256 Identity signatures
HKDF-SHA-256 Key derivation

Messaging

Feature Description
Direct Messages 1-to-1 encrypted conversations
Group Chats Multi-member with shared group key
File Sharing Encrypted file upload & download (20 MB max)
GIF Picker Integrated search via Gifukai & Openverse
Emoji Picker Full emoji panel with categories
GIF Favorites Save and reuse favorite GIFs

Security

Feature Description
Zero-Knowledge Server never sees plaintext data
Signed Requests Every API call is identity-signed
Rate Limiting Sliding-window per-route limits
CSP + Helmet Strict Content Security Policy
HSTS Enforced in production
ID Validation Strict format checks on all identifiers

Real-time

Feature Description
WebSocket Instant message delivery
Polling Backup Light 12s fallback polling
Notifications Browser push notifications

UI

Feature Description
Bilingual French & English (live switch)
Responsive Desktop & mobile layout
Dark Theme Modern dark UI
Custom Dialogs No native browser alerts
Password Manager Auto-fill compatible login
Session Resume Instant reload without flash

How It Works

Client generates identity keys (ECDSA + ECDH)
        ↓
Vault encrypted with login key (AES-256-GCM)
        ↓
Sealed envelopes sent through opaque relay
        ↓
Recipient decrypts with their private key
        ↓
Server only stores encrypted blobs + indexes

Requirements

Requirement Details
Node.js >= 18.0.0
PM2 Recommended for production
SQLite Via Prisma (auto-managed)
Browser Modern browser with Web Crypto API

Setup

1. Clone the repository
2. Edit config.json (project name, logo, credits)
3. npm install
4. npm start

Install

git clone https://github.com/Kurama250/VaultChat.git
cd VaultChat
npm install

Start with PM2

npm install -g pm2

pm2 start server/index.js --name vaultchat
pm2 save
pm2 startup

PM2 commands

pm2 status              # Check process status
pm2 logs vaultchat      # Live logs
pm2 restart vaultchat   # Restart after config change
pm2 stop vaultchat      # Stop the relay
pm2 delete vaultchat    # Remove from PM2

config.json

{
  "name": "Chat.kurama.info",
  "logo": "/img/kurama.png",
  "url": "https://chat.kurama.info",
  "credits": {
    "author": "Kurama",
    "github": "https://github.com/Kurama250/"
  }
}

Change the project name and logo here — the entire UI updates automatically.


Scripts

Command Description
npm start Push DB schema & start server
npm run dev Dev mode with auto-reload
pm2 start server/index.js --name vaultchat Production with PM2

Project Structure

VaultChat/
├── config.json
├── package.json
├── prisma/
│   └── schema.prisma
├── server/
│   ├── index.js
│   ├── core/
│   │   ├── db.js
│   │   ├── paths.js
│   │   ├── config.js
│   │   └── verify.js
│   ├── middleware/
│   │   ├── auth.js
│   │   └── security.js
│   ├── data/
│   │   └── store.js
│   ├── services/
│   │   ├── avatar.js
│   │   ├── profile.js
│   │   └── gifs.js
│   └── routes/
│       ├── http.js
│       └── ws.js
├── client/
│   ├── index.html
│   ├── styles.css
│   └── js/
│       ├── app.js
│       ├── boot-early.js
│       ├── core/
│       │   ├── state.js
│       │   ├── util.js
│       │   ├── vault.js
│       │   ├── api.js
│       │   ├── crypto.js
│       │   ├── idb.js
│       │   ├── i18n.js
│       │   ├── profile.js
│       │   └── media.js
│       ├── chat/
│       │   ├── session.js
│       │   ├── protocol.js
│       │   ├── conversations.js
│       │   ├── contacts.js
│       │   └── messages.js
│       └── ui/
│           ├── render.js
│           ├── modals.js
│           ├── dialog.js
│           ├── lang.js
│           ├── picker.js
│           ├── emoji-data.js
│           └── gif-favs.js
└── data/
    ├── index.db
    ├── vaults/
    ├── envelopes/
    └── files/

Startup Preview

  ╔════════════════════════════════════════════╗
  ║      Chat.kurama.info relay               ║
  ╠════════════════════════════════════════════╣
  ║  Status     Running                        ║
  ║  Address    http://127.0.0.1:8787          ║
  ║  Crypto     E2EE · AES-256-GCM            ║
  ║  Mode       Opaque relay (zero-knowledge)  ║
  ║  Author     Kurama                         ║
  ║  GitHub     https://github.com/Kurama250/  ║
  ╚════════════════════════════════════════════╝

Support

Discord Support

If you like this project don't hesitate to give it a star ⭐ !


Developer

Kurama250


VaultChat — Self-hosted end-to-end encrypted messaging with an opaque relay

About

Self-hosted E2EE messaging with an opaque relay — the server never sees your data.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages