This is an automated email from the ASF dual-hosted git repository. chibenwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 857be92056c8f3c09edcc9376827a987ff952fc9 Author: Benoit TELLIER <[email protected]> AuthorDate: Fri Aug 28 17:21:56 2026 +0700 [DOC] Server feature matrix --- docs/modules/servers/pages/index.adoc | 288 +++++++++++++++++++++++++++++ docs/ui-overrides/partials/head-styles.hbs | 50 +++++ 2 files changed, 338 insertions(+) diff --git a/docs/modules/servers/pages/index.adoc b/docs/modules/servers/pages/index.adoc index 7e57d97388..24ec8aff81 100644 --- a/docs/modules/servers/pages/index.adoc +++ b/docs/modules/servers/pages/index.adoc @@ -19,6 +19,9 @@ The available James Servers are: * <<spring,James Spring Mail Server>> (deprecated) * <<test,James Test Server>> +The <<feature-matrix,feature matrix>> below compares them side by side: protocols, administration APIs, storage +dependencies and available components. + Whichever one you pick, once it is up and running you will likely need to bring your existing emails into it: xref:migrating.adoc[migrating existing data] is documented once for all the servers. @@ -78,6 +81,291 @@ migration, and the <<postgres,Postgres Server>> is the recommended target for a +[#feature-matrix] +== Feature matrix + +James components are assembled in various ways, called *packaging*. The packaging you pick determines the +protocols the mail server speaks, the components you can wire into it, and the storage dependencies you will have +to operate. The table below compares the applications the project ships. + +[.feature-matrix] +-- +[cols="16,14,14,14,14,14,14", options="header"] +|=== +| +| xref:distributed/index.adoc[Distributed] +| xref:postgres/index.adoc[Postgres] +| xref:test.adoc[Memory] +| xref:jpa/index.adoc[JPA] +| xref:jpa/smtp-only.adoc[JPA SMTP] +| xref:spring/index.adoc[Spring] + +7+| Packaging + +| Application +| link:https://github.com/apache/james-project/tree/master/server/apps/distributed-app[`distributed-app`] +| link:https://github.com/apache/james-project/tree/master/server/apps/postgres-app[`postgres-app`] +| link:https://github.com/apache/james-project/tree/master/server/apps/memory-app[`memory-app`] +| link:https://github.com/apache/james-project/tree/master/server/apps/jpa-app[`jpa-app`] +| link:https://github.com/apache/james-project/tree/master/server/apps/jpa-smtp-app[`jpa-smtp-app`] +| link:https://github.com/apache/james-project/tree/master/server/apps/spring-app[`spring-app`] + +| IoC container +| Guice +| Guice +| Guice +| Guice +| Guice +| Spring + +| Docker tag +| `distributed-latest` +| `postgres-latest` +| `memory-latest` +| `jpa-latest` +| `jpa-smtp-latest` +| None + +| Deployment +| Multi-node +| Single or multi +| Single node +| Single node +| Single node +| Single node + +| Status +| Supported +| Supported +| Testing +| Deprecated +| Deprecated +| Do not deploy + +7+| Protocols + +| SMTP +| Yes +| Yes +| Yes +| Yes +| Yes +| Yes + +| LMTP +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| IMAP +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| POP3 +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| JMAP +| Yes +| Yes +| Yes +| No +| No +| No + +| ManageSieve +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| Mailbox sharing +| Yes +| Yes +| Yes +| No +| — +| No + +7+| Administration + +| WebAdmin API +| Yes +| Yes +| Yes +| Yes +| Yes +| No + +| CLI +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| Metrics +| Yes +| Yes +| Yes +| Yes +| Yes +| No + +| Extensions +| `extensions-jars` +| `extensions-jars` +| `extensions-jars` +| `extensions-jars` +| `extensions-jars` +| `conf/lib` + +7+| Storage + +| Mailbox +| Cassandra +| Postgres +| Memory +| JPA +| — +| JPA or memory + +| Search index +| OpenSearch +| OpenSearch +| Scanning +| Lucene +| — +| Lucene + +| Server data +| Cassandra +| Postgres +| Memory +| JPA +| JPA +| JPA or file + +| Mail queue +| RabbitMQ or Pulsar +| ActiveMQ or RabbitMQ +| Memory +| ActiveMQ +| ActiveMQ +| ActiveMQ + +| Mail repository +| `cassandra://` +| `postgres://` +| `file://` +| `file://` +| `file://` +| `file://` + +| BlobStore +| Cassandra or S3 +| Postgres or S3 +| Memory +| No +| No +| No + +| Event bus +| RabbitMQ +| Memory or RabbitMQ +| Memory +| Memory +| — +| Memory + +| Task manager +| Distributed +| Memory or distributed +| Memory +| Memory +| Memory +| None + +7+| Components + +| Deleted Messages Vault +| Yes +| Yes +| Yes +| No +| No +| No + +| DropLists +| Yes +| Yes +| Yes +| Yes +| No +| No + +| Sieve filtering +| Yes +| Yes +| Yes +| Yes +| No +| Yes + +| Re-indexing +| Yes +| Yes +| — +| Yes +| — +| Yes + +| Fetchmail +| No +| No +| No +| No +| No +| Yes +|=== +-- + +A few precisions on the table above: + +* Docker tags are to be prefixed with `apache/james:`, for instance `apache/james:distributed-latest`. +* The command line interface is a *JMX* client on every application exposing it. The Spring application, which +ships no WebAdmin API, can only be administered that way. +* Prometheus metrics are exposed by the WebAdmin API, hence their availability follows it. +* On the Postgres server, the mail queue, the event bus and the task manager become distributed as soon as +*rabbitmq.properties* is supplied, and stay local otherwise. +* OpenSearch is the default search implementation of the Distributed and Postgres servers. Scanning search, which +requires no search engine but performs poorly, can be selected in *search.properties*. +* All of these applications run on *Java 21* and are built from the very same code base: they differ by the set of +components wired into them, not by their behaviour. The configuration files of a given component are thus the +same everywhere it is available. + +The <<demo,Demo Server>> does not appear in this table: it is not a distinct application, but the JPA image +shipped with a domain and a user already created, so that it can be started with no set up at all. + +Note that building your own combination of components is possible - this is precisely what Guice buys you - but +leads to an untested and unsupported server. Read xref:distributed/extending.adoc[extending the Distributed +server] if you wish to go down that path. + + [#test] == James Test Server diff --git a/docs/ui-overrides/partials/head-styles.hbs b/docs/ui-overrides/partials/head-styles.hbs index 98b1539aaa..f7f57331d4 100644 --- a/docs/ui-overrides/partials/head-styles.hbs +++ b/docs/ui-overrides/partials/head-styles.hbs @@ -28,4 +28,54 @@ background-color: #cf1124; color: #fff; } + /* Server comparison table, see the `feature-matrix` role. The columns of the deprecated + applications are tinted with the very same colors as their deprecation banners: yellow + for the JPA ones, red for Spring. */ + .doc .feature-matrix .content { + overflow-x: auto; + } + .doc .feature-matrix table { + font-size: 0.72rem; + table-layout: fixed; + } + .doc .feature-matrix table th, + .doc .feature-matrix table td { + padding: 0.3rem 0.35rem; + line-height: 1.35; + word-wrap: anywhere; + } + .doc .feature-matrix table code { + font-size: 0.95em; + padding: 0; + background: none; + } + .doc .feature-matrix table td[colspan] { + background: #f0f0f0; + font-weight: 600; + } + .doc .feature-matrix table th:nth-child(5), + .doc .feature-matrix table th:nth-child(6), + .doc .feature-matrix table td:nth-child(5), + .doc .feature-matrix table td:nth-child(6) { + background: #fff8db; + color: #4a3b00; + } + .doc .feature-matrix table th:nth-child(5), + .doc .feature-matrix table th:nth-child(6) { + background: #fceec4; + border-bottom: 3px solid #f0b429; + } + .doc .feature-matrix table th:nth-child(7), + .doc .feature-matrix table td:nth-child(7) { + background: #ffeeee; + color: #610316; + } + .doc .feature-matrix table th:nth-child(7) { + background: #ffd9d9; + border-bottom: 3px solid #cf1124; + } + .doc .feature-matrix table td[colspan]:nth-child(1) { + background: #f0f0f0; + color: inherit; + } </style> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
