Dovecot Design
==============

 * <Overview of Dovecot processes> [Design.Processes.txt]
 * <Design of index files> [Design.Indexes.txt]
    * <API for accessing the index files> [Design.Indexes.MailIndexApi.txt]
 * <Design of authentication process> [Design.AuthProcess.txt]
    * <Authentication protocol> [Design.AuthProtocol.txt]
 * <Design of IMAP/POP3 processes> [Design.MailProcess.txt]
 * <Doveadm server protocol> [Design.DoveadmProtocol.txt] and <Doveadm HTTP
   server protocol> [Design.DoveadmProtocol.HTTP.txt]
 * <Doveadm synchronization> [Design.Dsync.txt]
 * <Dovecot Lua support> [Design.Lua.txt]

Protocol extensions
-------------------

 * <Forwarding parameters in IMAP/POP3/LMTP/SMTP proxying>
   [Design.ParameterForwarding.txt]

Code APIs
---------

 * <Code design> [Design.Code.txt] - explanations how and why the coding style
   is the way it is

Look at the *.h files for the actual API documentation. The documentation below
doesn't attempt to list full API documentation.

liblib:

 * <Memory allocations> [Design.Memory.txt]
 * <Static/dynamic buffers> [Design.Buffers.txt]
 * <Dynamic arrays> [Design.Arrays.txt]
 * <String handling> [Design.Strings.txt]
 * <Input streams> [Design.InputStreams.txt]
 * <Output streams> [Design.OutputStreams.txt]
 * <Events> [Design.Events.txt]
 * <Plugins> [Design.Plugins.txt]

lib-dcrypt:

 * <lib-dcrypt data formats> [Design.Dcrypt.txt]

lib-storage:

 * <Mail user> [Design.Storage.MailUser.txt] contains everything related to a
   single user.
 * <Mail namespace> [Design.Storage.MailNamespace.txt]: A single user can
   contain multiple <namespaces> [Namespaces.txt].
 * <Mailbox list> [Design.Storage.MailboxList.txt] is used to list/manage a
   list of mailboxes for a single namespace (1:1 relationship).
 * <Mail storage> [Design.Storage.MailStorage.txt] is used to access mails in a
   specific location with a specific mailbox format. Multiple namespaces can
   point to the same storage. A single namespace may in future (but not
   currently) point to multiple storages (e.g. a mixed mbox and Maildir
   directory).
 * <Mailbox> [Design.Storage.Mailbox.txt] is used to access a specific mailbox
   in a storage.
 * <Mail> [Design.Storage.Mail.txt] is used to access a specific mail in a
   mailbox.
 * <Error handling> [Design.Storage.ErrorHandling.txt].
 * <Plugins> [Design.Storage.Plugins.txt] - how to hook into lib-storage
   functions.

(This file was created from the wiki on 2019-06-19 12:42)
