MCPcopy Index your code
hub / github.com/chatmail/core

github.com/chatmail/core @v2.53.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.53.0 ↗ · + Follow
4,912 symbols 24,066 edges 250 files 1,885 documented · 38%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Chatmail logo

Rust CI dependency status

The chatmail core library implements low-level network and encryption protocols, integrated by many chat bots and higher level applications, allowing to securely participate in the globally scaled e-mail server network. We provide reproducibly-built deltachat-rpc-server static binaries that offer a stdio-based high-level JSON-RPC API for instant messaging purposes.

The following protocols are handled without requiring API users to know much about them:

Installing Rust and Cargo

To download and install the official compiler for the Rust programming language, and the Cargo package manager, run the command in your user environment:

$ curl https://sh.rustup.rs -sSf | sh

On Windows, you may need to also install Perl to be able to compile deltachat-core.

Using the CLI client

Compile and run the command line utility, using cargo:

$ cargo run --locked -p deltachat-repl -- ~/profile-db

where ~/profile-db is the database file. The utility will create it if it does not exist.

Optionally, install deltachat-repl binary with

$ cargo install --locked --path deltachat-repl/

and run as

$ deltachat-repl ~/profile-db

Configure your account (if not already configured):

Chatmail is awaiting your commands.
> set addr your@email.org
> set mail_pw yourpassword
> configure

Connect to your mail server (if already configured):

> connect

Export your public key to a vCard file:

> make-vcard my.vcard 1

Create contacts by address or vCard file:

> addcontact yourfriends@email.org
> import-vcard key-contact.vcard

List contacts:

> listcontacts
Contact#Contact#11: key-contact@email.org <key-contact@email.org>
Contact#Contact#Self: Me √ <your@email.org>
2 key contacts.
Contact#Contact#10: yourfriends@email.org <yourfriends@email.org>
1 address contacts.

Create a chat with your friend and send a message:

> createchat 10
Single#Chat#12 created successfully.
> chat 12
Selecting chat Chat#12
Single#Chat#12: yourfriends@email.org [yourfriends@email.org] Icon: profile-db-blobs/4138c52e5bc1c576cda7dd44d088c07.png
0 messages.
81.252µs to create this list, 123.625µs to mark all messages as noticed.
> send hi

List messages when inside a chat:

> chat

For more commands type:

> help

Installing libdeltachat system wide

$ git clone https://github.com/chatmail/core.git
$ cd deltachat-core-rust
$ cmake -B build . -DCMAKE_INSTALL_PREFIX=/usr
$ cmake --build build
$ sudo cmake --install build

Development

# run tests
$ cargo test --all
# build c-ffi
$ cargo build -p deltachat_ffi --release

Debugging environment variables

  • DCC_MIME_DEBUG: if set outgoing and incoming message will be printed

  • RUST_LOG=async_imap=trace,async_smtp=trace: enable IMAP and SMTP tracing in addition to info messages.

Expensive tests

Some tests are expensive and marked with #[ignore], to run these use the --ignored argument to the test binary (not to cargo itself):

$ cargo test -- --ignored

Fuzzing

Install cargo-bolero with

$ cargo install cargo-bolero

Run fuzzing tests with

$ cd fuzz
$ cargo bolero test fuzz_mailparse -s NONE

Corpus is created at fuzz/fuzz_targets/corpus, you can add initial inputs there. For fuzz_mailparse target corpus can be populated with ../test-data/message/*.eml.

Features

  • vendored: When using Openssl for TLS, this bundles a vendored version.

Update Provider Data

To add the updates from the provider-db to the core, check line REV= inside ./scripts/update-provider-database.sh and then run the script.

Language bindings and frontend projects

Language bindings are available for:

The following "frontend" projects make use of the Rust-library or its language bindings:

Extension points exported contracts — how you extend this code

ToSql (Interface)
Extension to [`rusqlite::ToSql`] trait which also includes [`Send`] and [`Sync`]. [11 implementers]
src/sql.rs
Strdup (Interface)
Convenience methods to turn strings into C strings. To interact with (legacy) C APIs we often need to convert from Rust [4 …
deltachat-ffi/src/string.rs
SessionStream (Interface)
(no doc) [10 implementers]
src/net/session.rs
DcKey (Interface)
Convenience trait for working with keys. This trait is implemented for rPGP's [SignedPublicKey] and [SignedSecretKey] t [2 …
src/key.rs
ToOption (Interface)
(no doc) [3 implementers]
src/tools.rs
StockStringMods (Interface)
Helper trait only meant to be implemented for [`String`]. [1 implementers]
src/stock_str.rs
IntoOption (Interface)
(no doc) [1 implementers]
deltachat-jsonrpc/src/api/types/login_param.rs
HeaderDefMap (Interface)
(no doc) [1 implementers]
src/headerdef.rs

Core symbols most depended-on inside this repo

get
called by 504
src/param.rs
clone
called by 374
deltachat-rpc-client/src/deltachat_rpc_client/account.py
execute
called by 290
src/sql.rs
is_empty
called by 266
src/param.rs
receive_imf
called by 213
src/receive_imf.rs
to_u32
called by 199
src/chat.rs
time
called by 172
src/tools.rs
get_snapshot
called by 163
deltachat-rpc-client/src/deltachat_rpc_client/contact.py

Shape

Function 2,599
Method 1,890
Class 298
Enum 106
Interface 18
Route 1

Languages

Rust77%
Python22%
TypeScript1%
C++1%

Modules by API surface

deltachat-ffi/src/lib.rs293 symbols
deltachat-jsonrpc/src/api.rs188 symbols
src/receive_imf/receive_imf_tests.rs164 symbols
src/chat.rs163 symbols
src/chat/chat_tests.rs159 symbols
src/test_utils.rs116 symbols
src/message.rs109 symbols
src/stock_str.rs104 symbols
src/contact.rs79 symbols
src/mimeparser/mimeparser_tests.rs78 symbols
python/src/deltachat/account.py75 symbols
python/src/deltachat/testplugin.py72 symbols

For agents

$ claude mcp add core \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact