Skip to content

Feature coverage ​

What yarilo implements, feature by feature, so that planning a migration is a matter of reading a list rather than of trying things out.

Three values are used, and no is as legitimate an answer as yes:

meaning
yesimplemented and exercised by tests; a configuration that uses it has an equivalent here
partialusable, with a stated limit — read the note before relying on it
nonot implemented. Where an issue exists it is linked, and that issue is where the plan lives

This page is maintained in the same change that alters coverage: a row is updated by the PR that moves it, not by a later sweep. A matrix that lags is worse than none, because every row here is a promise somebody may migrate on.

The IMAP extension table below is exhaustive for what is advertised: every capability in the server's CAPABILITY reply has a row here, and the rows marked no name the notable extensions that are not advertised. Where this page and a protocol page disagree, this one is the one kept current — the disagreement is a bug in the other, and both are fixed together.

Version: 2.4.x line (stable), from 2.4.1. Last reviewed 2026-10-04.

Protocols ​

FeatureyariloNotes
IMAP4rev1 / IMAP4rev2yesRFC 3501 / RFC 9051
POP3yesincluding TOP, UIDL
LMTPyesdelivery, proxying to backends, a synthesised Message-ID when one is missing
Submission (MSA)yesseparate service, relay to an external MTA
ManageSieveyesRFC 5804
JMAPpartialreads, writes and submits; no push. Mailbox/{get,query,set,changes}, Email/{get,query,set,import,changes} (Email/set creates, updates keywords and mailboxIds, and destroys), Thread/{get,changes}, SearchSnippet/get, blob upload and download, back-references and creation ids across calls, real state strings. Quota/{get,changes,query,queryChanges} (RFC 9425, read-only). SieveScript/{get,set,query,validate} (RFC 9661) over the ManageSieve store; VacationResponse/{get,set} as the managed Sieve script ManageSieve also sees. EmailSubmission/{get,set,query,queryChanges,changes} and Identity/{get,changes,set} when a Submission relay is configured; identities are read-only and come from the login address and identity_aliases. Push (EventSource, WebSocket RFC 8887, PushSubscription) is not implemented (#714). Email/queryChanges and Mailbox/queryChanges answer cannotCalculateChanges by design — a query result depends on its filter and sort, and this server keeps no per-client result set, so canCalculateChanges is advertised as false. See JMAP

IMAP extensions ​

ExtensionyariloNotes
IDLE, UNSELECT, LITERAL+, ENABLE, SASL-IRyes
UIDPLUS, MOVE, NAMESPACEyes
CONDSTORE / QRESYNCyesRFC 7162
ESEARCH, SEARCHRESyesRFC 4731
LIST-EXTENDED, LIST-STATUS, STATUS=SIZEyes
SPECIAL-USE, CREATE-SPECIAL-USEyesRFC 6154
SORTyesRFC 5256, all keys; SORT=DISPLAY (RFC 5957) is not implemented
THREADyesRFC 5256, REFERENCES and ORDEREDSUBJECT
OBJECTIDyesRFC 8474 — MAILBOXID, EMAILID, THREADID
BINARYyesRFC 3516
NOTIFYpartialRFC 5465; annotation/metadata events are not reported
METADATAyesRFC 5464, when a metadata dict is configured
ACLyesRFC 4314, enforced on every path — off by default (acl.enabled); a configuration with a shared, public or other users namespace and ACL off is refused at startup. See Namespaces
QUOTAyesRFC 9208
IDyesRFC 2971; always offered before login, after login only while imap_id_send is non-empty
COMPRESSno
URLAUTH, CATENATE, BURLnoRFC 4467 / RFC 4469 / RFC 4468. Until 2026-08-25 the IMAP page listed URLAUTH as supported; it never was, and the claim is removed rather than kept
SEARCH=FUZZY, CONTEXT=SEARCH, CONTEXT=SORT, ESORTno
REPLACE, SAVEDATE, PREVIEWno
I18NLEVELnocollation follows i;unicode-casemap in SORT/THREAD, but the extension is not advertised

Storage ​

FormatyariloNotes
MaildiryesMaildir++, filename and flag conventions match
sdboxyes
mdboxyesincluding the map, alt storage, and purge
mboxnono plan; the format is legacy everywhere it still appears
obox / object storageno#247
Index formatyesthe established on-disk index layout, byte-compatible where documented

Authentication ​

FeatureyariloNotes
SASL PLAIN / LOGINyes
SASL SCRAM-SHA-1 / SHA-1-PLUS / SHA-256 / SHA-256-PLUSyesIMAP, POP3 and submission, channel binding included
SASL XOAUTH2 / OAUTHBEARERyesIMAP, POP3 and submission, run by yarilo-auth with token introspection; RFC 7628 failure with the client's acknowledgement
SASL CRAM-MD5, DIGEST-MD5no#245
SASL EXTERNAL (client certificates)no#615
SASL GSSAPI / Kerberosno#245
passdb/userdb: SQL (MySQL, PostgreSQL, SQLite)yes
passdb/userdb: passwd-file, staticyes
passdb/userdb: LDAP, PAM, Lua, IMAPno#558
Password schemespartialPLAIN, CLEARTEXT, CRYPT, BCRYPT/BLF-CRYPT, SHA512-CRYPT, SCRAM-SHA-1, SCRAM-SHA-256. The older MD5 and SHA1 scheme families are not implemented
Master usersyes
Auth policy / penalty (weakforced-style)yes

Filtering and delivery ​

FeatureyariloNotes
Sieve (RFC 5228)yes
Sieve extensionsyes43 extensions, including imap4flags, editheader, enotify, imapsieve, mailboxid, spamtest/virustest and the RFC 5703 MIME set. The full list is on the Sieve page rather than repeated here — one list cannot disagree with itself
Sieve pipe / external programsyeswith a configured binary directory
Local delivery agentpartialdelivery is via LMTP; there is no standalone local-delivery binary
Recipient rate limitingyescluster-wide, per (sender IP, recipient)
FeatureyariloNotes
FTS with Xapian (flatcurve)yesseparate yarilo-fts service
FTS: Solr, Elasticsearchnothe engine is pluggable, no other engine is implemented
Language handling, stemmingyesper-language filters, tokeniser knobs

Quota ​

FeatureyariloNotes
Storage and message-count quotasyescounted from the index, no dict drift
quota_rule / per-user overridesyes
Quota warningsyes
quota-status policy service for MTAsyesseparate service

Clustering and operations ​

FeatureyariloNotes
Director (per-user backend affinity)yesown ring and peer sync, plus a per-user flush hook (flush_program) — see Director
Replication (dsync)no#249
Shared and public namespacespartialnamespaces and ACLs work; cross-user delivery and some enforcement gaps remain (#544)
Virtual mailboxespartiala namespace whose mailboxes are defined by a configuration file of folders and SEARCH rules; kept in sync while open, with FETCH, SEARCH, SORT, THREAD, STORE, EXPUNGE, COPY and MOVE acting on the real message, APPEND/COPY/MOVE into one storing to its save folder, and annotation lines filtering the folders. + has no effect, as \Recent is not tracked. See Virtual Mailboxes
imap-hibernatenoidle IMAP sessions are not parked into a separate process; each holds its own. No issue open yet — this row is the record
Prometheus metrics, health endpointsyesper-command latencies, storage and index counters, /healthz and /readyz
Command-line administrationyesyarctl covers the operations the services expose — routing, storage, index, quota, ACL, metadata, sessions, auth — and each family is documented on the administration page. The command set is not a one-to-one map of any other server's, so a migrated runbook is translated rather than copied

What migration involves ​

Configuration keys keep their established names where the setting means the same thing, so translating an existing configuration into yarilo.yaml is mechanical for the covered surface. The on-disk formats — Maildir, dbox, the index — are the same layouts, which is what makes a migration a matter of pointing yarilo at existing mail rather than converting it.

Where a row above says no, a configuration that relies on that feature has no equivalent here yet, and the linked issue is the honest state of the plan.