public-inbox-glossary - Man Page

glossary for public-inbox


public-inbox combines several independently-developed protocols and data formats with overlapping concepts.  This document is intended as a guide to identify and clarify overlapping concepts with different names.

This is mainly intended for hackers of public-inbox, but may be useful for administrators of public-facing services and/or users building tools.


IMAP UID, NNTP article number, on-disk Xapian docid

A sequentially-assigned positive integer.  These integers are per-inbox, or per-extindex.  This is the num column of the over table in over.sqlite3


A sequentially-assigned positive integer.  These integers are per-inbox or per-extindex.  In the future, this may be prefixed with T for JMAP (RFC 8621) and RFC 8474.  This may not be strictly compliant with RFC 8621 since inboxes and extindices are considered independent entities from each other.

This is the tid column of the over table in over.sqlite3


For email, this is the git blob object ID (SHA-(1|256)) of an RFC-(822|2822|5322) email message.


To-be-decided.  This will likely be the git blob ID prefixed with g rather than the numeric UID to accommodate the same blob showing up in both an extindex and inbox (or multiple extindices).


The name of the NNTP newsgroup, see public-inbox-config(5).

IMAP (folder|mailbox) slice

A 50K slice of a newsgroup to accommodate the limitations of IMAP clients with public-inbox-imapd(1).  This is the newsgroup name with a .$INTEGER_SUFFIX, e.g. a newsgroup named inbox.test would have its first slice named inbox.test.0, and second slice named inbox.test.1 and so forth.

If implemented, the RFC 8474 MAILBOXID of an IMAP slice will NOT have the same Mailbox Id as the public-facing full JMAP mailbox.

inbox name, public JMAP mailbox name

The HTTP(S) name of the public-inbox (publicinbox.<name>.*).  JMAP will use this name rather than the newsgroup name since public-facing JMAP will be part of the PSGI code and not need a separate daemon like public-inbox-nntpd(1) or public-inbox-imapd(1)


A git repository used for blob storage.  See “GIT EPOCHS” in public-inbox-v2-format(5).

keywords, (IMAP|Maildir) flags, mbox Status + X-Status

Private, per-message keywords or flags as described in RFC 8621 section 10.4.  These are conveyed in the Status: and X-Status: headers for mbox(5), as system IMAP FLAGS (RFC 3501 section 2.3.2), or Maildir info flags.

public-inbox-watch(1) ignores drafts and trashed (deleted) messages.  lei-import(1) ignores trashed (deleted) messages, but it imports drafts.

labels, private JMAP mailboxes

For lei(1) users only.  This will allow lei users to place the same email into one or more virtual folders for ease-of-filtering.  This is NOT tied to public-inbox names, as messages stored by lei may not be public.

These are similar in spirit to arbitrary freeform “tags” in mail software such as notmuch(1) and non-system IMAP FLAGS.

volatile metadata (VMD)

For lei(1) users only, this refers to the combination of keywords and labels which are subject to frequent change independently of immutable message content.

IMAP INTERNALDATE, JMAP receivedAt, rt: search prefix

The first valid timestamp value of Received: headers (top first). If no Received: header exists, the Date: header is used, and the current time if neither header(s) exist.  When mirroring via git, this is the git commit time.

IMAP SENT*, JMAP sentAt, dt: and d: search prefixes

The first valid timestamp value of the Date: header(s). If no Date: header exists, the time from the Received: header is used, and then the current time if neither header exists. When mirroring via git, this is the git author time.

See Also

public-inbox-v2-format(5), public-inbox-v1-format(5), public-inbox-extindex-format(5), gitglossary(7)


1993-10-02 public-inbox.git public-inbox user manual