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.
- 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
- 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
- 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
- In-chat transfers, exchanger flows, and Adelina AI chat integration
- IPFS-based file sharing for attachments and media
- Custom node configuration with health checks and failover
- Open-source, community-driven, and self-hostable by design
| Resource | Link |
|---|---|
| Website | adamant.im |
| Apps | adamant.im/#adm-apps |
| Documentation | docs.adamant.im |
| Whitepaper | adamant-whitepaper-en.pdf |
| Releases | GitHub Releases |
| Media pack | media_pack.zip |
| Project profile | About ADAMANT: Description and Details |
Mainnet app:
- GitHub Pages auto-build: adamant-im.github.io/adamant-im from
masteronly due to GitHub Pages limitations - Vercel auto-build: msg2.adamant.im from
masteron Vercel US - Server-side auto-build: msg.adamant.im and adm.im from
master - Server-side auto-build: msgtest.adamant.im from
dev - Server-side Tor auto-build: http://adamant6457join2rxdkr2y7iqatar7n4n72lordxeknj435i4cjhpyd.onion from
master - Server-side Tor auto-build: http://il2fcw65jrrv4au7mtuvodzfwtc6hje6r4ooz7yoqu2jl422b44iofyd.onion from
dev - Vercel auto-build: dev.adamant.im from the
devbranch 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
masterdeployment
Testnet app:
- GitHub Actions auto-build in Surge: msg-adamant-testnet.surge.sh from
master, mirrored at http://msg-testnet.adamant.im (HTTP-only for the mirror) - GitHub Actions auto-build in Surge: dev-adamant-testnet.surge.sh from
dev, mirrored at http://dev-testnet.adamant.im (HTTP-only for the mirror)
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 devStart a local HTTPS dev server with hot reload:
npm run dev-httpsnpm run https is kept as a shortcut for the same flow.
| 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 |
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.
Baseline validation for non-trivial changes:
npm run lint
npm run typecheck
npm run test -- --runUseful additional checks:
npm run build
npm run test:e2eWhen changes affect schema-driven artifacts:
npm run schema:generate
npm run wallets:types:generateInstall Chromium for local e2e runs:
npm run test:e2e:installRun the smoke suite:
npm run test:e2eRun with extended artifacts:
npm run test:e2e:detailedOpen the latest HTML report:
npm run test:e2e:reportRun Electron locally:
npm run electron:devForce legacy Chrome extension-based Vue DevTools inside Electron:
ELECTRON_USE_CHROME_DEVTOOLS_EXTENSION=true npm run electron:devKeep DevTools open while suppressing noisy Chromium logs in terminal:
npm run electron:devDisable log suppression and show full Chromium/Electron internals:
ELECTRON_SUPPRESS_CHROMIUM_LOGS=false npm run electron:devBuild Electron packages:
npm run electron:buildBuild a macOS arm64 app and notarize it:
npm run electron:build:mac:arm64:notarizePreview the Electron production build:
npm run electron:serveFor distributable macOS builds, use a valid Developer ID Application certificate and notarization.
The notarization hook (scripts/electron/notarize.cjs) supports 3 auth strategies:
- Apple ID + app-specific password
- Keychain profile (
xcrun notarytool store-credentials) - App Store Connect API key
Supported environment variables:
# 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-xxxxxxxxxxxxLocal 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: <Company> (<TEAM_ID>)"
# or CI/base64 P12
CSC_LINK=...
CSC_KEY_PASSWORD=...Prepare and open Android project:
npm run android:prebuild
npm run android:openBuild and sign Android app:
cp capacitor.env.example capacitor.env
npm run android:buildIf 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.
- Fork the repository
- Go to the repository Settings
- Navigate to the Pages tab
- Set the source as GitHub Actions
- 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.
- 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
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