ADAMANT Messenger is a decentralized anonymous messenger designed to provide secure and private communication through the ADAMANT Blockchain. Built as a Progressive Web Application (PWA), it ensures accessibility and performance across devices, accessible at msg.adamant.im.
Key Features:
End-to-End Encryption: Ensures that only the sender and recipient can read messages.
Decentralized Network: Operates without central servers, reducing risks of surveillance or censorship.
Anonymous Profiles: Users can create accounts without providing personal details.
Cross-Platform Support: Available on multiple platforms for seamless communication.
Self-Hosting Option: Allows users to run their own nodes, enhancing privacy and control.
Audience & Benefit:
Ideal for privacy-conscious individuals, activists, journalists, and anyone needing secure communication. ADAMANT Messenger provides a reliable tool for protecting conversations from unauthorized access, ensuring freedom of expression in a secure environment. It can be installed via winget, offering an easy setup process.
README
ADAMANT Messenger PWA
ADAMANT Messenger is an open-source decentralized messenger and non-custodial wallet built on the ADAMANT blockchain.
This repository contains the main client for Web, Tor, Android (Capacitor), and Desktop (Electron).
ADAMANT is designed around privacy, censorship resistance, and user custody.
Accounts do not require phone numbers or emails, private keys stay on the user side, and the client can work with distributed nodes instead of a single provider.
> Your ADAMANT passphrase cannot be recovered by developers, support, or infrastructure operators. Store it offline and treat it like a wallet seed phrase.
Why ADAMANT
No phone numbers, no emails, no contact-book scraping by default
End-to-end encrypted messaging using Diffie-Hellman Curve25519, Salsa20, Poly1305, SHA-256, and Ed25519
Censorship-resistant account model backed by a decentralized blockchain network
Non-custodial wallets and in-chat crypto transfers with full user-side key control
Multi-node architecture with failover, self-hostability, and Tor-friendly deployment options
What This Repository Powers
Progressive Web App for the public web
Tor build for users who need stronger network anonymity
Electron desktop app for macOS, Windows, and Linux
Capacitor Android app
Highlights
Anonymous onboarding without a phone number or email
Encrypted chats with blockchain-backed message ordering and authenticity
Built-in wallets for ADM, BTC, ETH, DOGE, DASH, USDT, USDC, and ERC20 tokens
Vercel auto-build: dev.adamant.im from the dev branch on Vercel US
Massa DeWeb auto-build: adm.massahub.network from master, hosted on the Massa blockchain
GitHub Actions auto-build can also be configured by any user for their own master deployment
Testnet app:
GitHub Actions auto-build in Surge: msg-adamant-testnet.surge.sh from master, mirrored at (HTTP-only for the mirror)
GitHub Actions auto-build in Surge: dev-adamant-testnet.surge.sh from dev, mirrored at (HTTP-only for the mirror)
Quick Start
Recommended environment:
Node.js ^20.19.0 || >=22.12.0
npm >=10
Clone and run the app locally:
git clone --recursive https://github.com/Adamant-im/adamant-im.git
cd adamant-im
npm install
npm run dev
Start a local HTTPS dev server with hot reload:
npm run dev-https
npm run https is kept as a shortcut for the same flow.
Common Commands
Task
Command
Start local development
npm run dev
Start local HTTPS development
npm run dev-https
Start localnet development on 0.0.0.0
npm run dev:localnet
Start testnet development
npm run dev:testnet
Start Tor-mode development
npm run dev:tor
Build production PWA
npm run build
Build testnet PWA
npm run build:testnet
Build Tor PWA
npm run build:tor
Preview production build
npm run serve
Preview testnet build
npm run serve:testnet
Build Electron app
npm run electron:build
Run Electron in development
npm run electron:dev
Preview Electron production build
npm run electron:serve
Prepare Android build assets
npm run android:prebuild
Open Android Studio project
npm run android:open
Run Android app on device/emulator
npm run android:run
CSP hardening on Vercel builds
Vercel preview/dev hosts use the same soft CSP profile as production domains (including current unsafe-inline and unsafe-eval allowances) to avoid behavior drift between environments.
Strict CSP hardening (removing unsafe-eval) is tracked separately and must be done only after runtime dependency cleanup.
Validation
Baseline validation for non-trivial changes:
npm run lint
npm run typecheck
npm run test -- --run
Useful additional checks:
npm run build
npm run test:e2e
When changes affect schema-driven artifacts:
npm run schema:generate
npm run wallets:types:generate
Playwright Smoke Checks
Install Chromium for local e2e runs:
npm run test:e2e:install
Run the smoke suite:
npm run test:e2e
Run with extended artifacts:
npm run test:e2e:detailed
Open the latest HTML report:
npm run test:e2e:report
Desktop and Android Notes
Run Electron locally:
npm run electron:dev
Force legacy Chrome extension-based Vue DevTools inside Electron:
ELECTRON_USE_CHROME_DEVTOOLS_EXTENSION=true npm run electron:dev
Keep DevTools open while suppressing noisy Chromium logs in terminal:
npm run electron:dev
Disable log suppression and show full Chromium/Electron internals:
ELECTRON_SUPPRESS_CHROMIUM_LOGS=false npm run electron:dev
Build Electron packages:
npm run electron:build
Build a macOS arm64 app and notarize it:
npm run electron:build:mac:arm64:notarize
Preview the Electron production build:
npm run electron:serve
macOS signing and notarization (local/CI)
For distributable macOS builds, use a valid Developer ID Application certificate and notarization.
The notarization hook (scripts/electron/notarize.cjs) supports 3 auth strategies:
# Common
APPLE_NOTARIZE=true
# Strategy 1 (Apple ID)
APPLE_ID=...
APPLE_APP_SPECIFIC_PASSWORD=...
APPLE_TEAM_ID=...
# Strategy 2 (Keychain profile)
APPLE_KEYCHAIN_PROFILE=...
# optional
APPLE_KEYCHAIN=...
# Strategy 3 (App Store Connect API key)
APPLE_API_KEY=/absolute/path/to/AuthKey_XXXXXXXXXX.p8
APPLE_API_KEY_ID=XXXXXXXXXX
# optional for team keys
APPLE_API_ISSUER=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Local builds can store these variables in electron-builder.env.local or electron-builder.env and the hook will load them automatically.
For Apple ID strategy, APPLE_APP_PASSWORD is also accepted as an alias for APPLE_APP_SPECIFIC_PASSWORD.
Code-signing for electron-builder:
# local identity in Keychain
CSC_NAME="Developer ID Application: ()"
# or CI/base64 P12
CSC_LINK=...
CSC_KEY_PASSWORD=...
Prepare and open Android project:
npm run android:prebuild
npm run android:open
Build and sign Android app:
cp capacitor.env.example capacitor.env
npm run android:build
Self-hosted
If you are unable to access adm.im (e.g., due to censorship), you can run a self-hosted instance of ADAMANT Messenger to:
Increase reliability and decentralization of the ADAMANT Messenger ecosystem
Help other users access the messenger in countries with strong Internet limitations
We always encourage people to build it from source.
As an option, you can build and deploy the app to GitHub Pages.
Follow the instructions below.
Enable GH Actions
Fork the repository
Go to the repository Settings
Navigate to the Pages tab
Set the source as GitHub Actions
Run GH Workflow
Go to the Actions tab
Enable workflows
Select the GitHub Pages workflow
Click Run workflow
Wait until the build succeeds
Open ADAMANT Messenger at username.github.io/adamant-im
You can as well point your GitHub Pages subdomain to a custom domain.
Security and Privacy Notes
Private keys are derived and stored client-side
Do not log or share passphrases, mnemonic material, or exported private keys
Treat the browser runtime as potentially hostile and prefer trusted devices
For stronger network anonymity, use the Tor build or a self-hosted instance
Contributing
Issues and pull requests are welcome.
When contributing, prioritize security, privacy, decentralization, and compatibility with the existing ADAMANT protocol and user data.
Before opening a substantial PR, it is helpful to run:
npm run lint
npm run typecheck
npm run test -- --run
npm run build