Everything clients, users and operators meet now carries the fork's name, with no aliases (SPEC.md §2.4, changed here from "protocol identifiers stay"): - JMAP: upstream's registry capability is urn:inbuxa:jmap:registry, beside the fork's own urn:inbuxa:jmap. - WebDAV lock and sync tokens are urn:inbuxa:dav*; clients resync once. - Sieve: vnd.inbuxa.while and vnd.inbuxa.expressions. sieve-rs spells these into its compiler, so it's vendored (vendor/sieve-rs, 0.7.3) and patched in; a unit test fails if Cargo.lock ever moves past the vendored copy. The trusted runtime now names itself too, rather than answering sieve-rs's default. - The web interface's OAuth client is inbuxa-webui. On every start the old stalwart-webui client is removed and any application naming it is moved over. - The spam filter's blobs are INBUXA_SPAM_*; every start moves any left under the old keys, so a trained model survives. - SQL stores and log files default to inbuxa, in the code and in the schema served to the admin (checksum regenerated). - Settings are INBUXA_* only. A STALWART_* variable that's set where its INBUXA_* one isn't stops the server at startup, naming it. - The version-upgrade messages link docs.inbuxa.org's migration page, and the OpenAPI description, smtp crate metadata and web-push test fixtures lose the name. Kept on purpose, allowlisted with reasons: the OAuth key-derivation contexts (renaming them would end every session and invalidate every sealed client id) and the hashed application prefix. Also fixes a latent start-up failure: ensure_client updated an existing first-party client with a revision of 0, which the registry's assertion never matches, so adding a redirect URI or changing the webmail secret failed start-up. And the principal session test now expects legacyProtocols (C-1, added 2026-09-21), which it had missed. Tested: the server builds without warnings; common's 106 unit tests, including the vendoring check; a new integration test for the two start-up migrations; and the webdav, jmap, imap and SMTP Sieve suites.
72 lines
3.1 KiB
Markdown
72 lines
3.1 KiB
Markdown
<p align="center">
|
|
<img src="./img/brand/inbuxa-lockup-light.svg" alt="inbuxa" height="140">
|
|
</p>
|
|
|
|
<h3 align="center">
|
|
A complete mail and collaboration server, every feature included, under the AGPL
|
|
</h3>
|
|
|
|
---
|
|
|
|
**INBUXA** is a mail and collaboration server: JMAP, IMAP, POP3, SMTP,
|
|
CalDAV, CardDAV and WebDAV, in one Rust binary, with ihasmail as its web front
|
|
end. It is a fork of [Stalwart](https://github.com/stalwartlabs/stalwart).
|
|
Project site: [inbuxa.org](https://inbuxa.org). Documentation: [docs.inbuxa.org](https://docs.inbuxa.org).
|
|
|
|
Stalwart ships some features only in a paid Enterprise Edition: multi-tenancy,
|
|
masked email, undelete and others. INBUXA ships everything to everybody under
|
|
the AGPL-3.0, rebuilding those features independently and without using any
|
|
of Stalwart's Enterprise code.
|
|
|
|
## What's different from Stalwart
|
|
|
|
- **Every feature, one edition.** No license key, no edition checks, no
|
|
upsell. See `docs/spec/SPEC.md` §4 for the features being rebuilt, and
|
|
`docs/spec/features/` for each one's specification.
|
|
- **Webmail and administration by ihasmail,** as a separate service that can
|
|
run beside the server or elsewhere. Stalwart's own web interface is removed,
|
|
so there's no web front end on the mail host.
|
|
- **Clean-room rebuilds.** Enterprise-only code is stripped from every
|
|
upstream release before it's imported. The rebuilt features are written
|
|
from specifications that use only public sources (`docs/spec/SPEC.md` §3).
|
|
|
|
## How the fork is kept
|
|
|
|
Upstream releases arrive as stripped snapshots, never with upstream's git
|
|
history, which contains Enterprise code. `tools/fork/strip.py` builds each
|
|
snapshot on top of upstream's own `ossify.py`, then verifies it independently.
|
|
The report for every import is in `docs/fork/strip-reports/`. See
|
|
`docs/spec/SPEC.md` §2.
|
|
|
|
## Building
|
|
|
|
```bash
|
|
cargo build --release -p inbuxa # the binary is target/release/inbuxa
|
|
docker build -t inbuxa . # or the container image
|
|
```
|
|
|
|
Settings are read from `INBUXA_*` environment variables. An existing Stalwart
|
|
install's `STALWART_*` variables aren't read: the server stops at startup and
|
|
names each one to rename.
|
|
New installs keep their data in `/var/lib/inbuxa` and logs in
|
|
`/var/log/inbuxa`. Existing installs keep the paths their configuration
|
|
already names, so none of their data moves.
|
|
|
|
## License and credits
|
|
|
|
INBUXA is free software under the [GNU Affero General Public License,
|
|
version 3](./LICENSES/AGPL-3.0-only.txt).
|
|
|
|
It is a fork of Stalwart, copyright © Stalwart Labs LLC, **modified by
|
|
Coffey Labs in 2026**. Upstream's copyright notices are kept on every file
|
|
they cover, and every upstream file this fork changed says so in its header,
|
|
under the notice it came with. Stalwart's files are dual-licensed
|
|
AGPL-3.0-only or Stalwart's Enterprise License, and INBUXA takes them under
|
|
the AGPL-3.0 only. A few of those files also carry code from other projects
|
|
under MIT or BSD licenses, which stays under those licenses;
|
|
[THIRD-PARTY.md](./THIRD-PARTY.md) lists it with its notices. "Stalwart" is
|
|
Stalwart Labs' name. INBUXA isn't affiliated with or endorsed by Stalwart
|
|
Labs.
|
|
|
|
The INBUXA mark reuses ihasmail's cat-and-envelope artwork.
|