What is "Instant Expunge"?

Short answer: Instant Expunge is enabled by default on your Citadel server. It makes message deletion behave the way users and modern email programs expect. You do not need to turn it on, and you will almost certainly never need to turn it off.

How deletion works in standard IMAP

The original IMAP specification (RFC 3501) does not actually delete a message when you hit the delete key. Instead, it requires a two-step process:

  1. The client marks the message with a \Deleted flag (often showing it crossed out or greyed out in older mail clients).
  2. The client later issues a separate, explicit EXPUNGE command to permanently purge those flagged messages from the mailbox.

This design originated with the UW IMAP reference server in the late 1980s. Because UW IMAP stored entire mailboxes in single flat files (the mbox format), deleting one message required rewriting the entire mailbox file to disk. To prevent the disk from grinding to a halt on every single delete, Mark Crispin wrote a workaround where deletions were deferred until an explicit expunge, and then codified that workaround into the internet standard.

Why Citadel does it differently

Citadel does not use flat mailbox files; it stores mail in a high-performance database. Deleting a single record from a database is an immediate, lightweight operation. Keeping deleted messages lingering in a mailbox until an obscure second command is sent makes no sense in a database-backed mail server.

To handle this cleanly, Citadel provides two built-in behaviors:

Do I ever need to change this?

Almost certainly not. Modern desktop and mobile email apps (Apple Mail, Thunderbird, Outlook, iOS, Android) do not rely on two-stage flagging. When a user deletes an email, the app moves it into the Trash folder. Instant Expunge fits this workflow perfectly.

The only time you would ever consider disabling Instant Expunge is if you are running vintage or specialized client software from the 1990s (such as an ancient terminal client) that explicitly depends on seeing the two-phase flag-and-expunge sequence. For everything else, leave the default alone.