Brussels / 3 & 4 February 2024


[Protocols] Things we wish we knew before starting an IMAP library

IMAP is a lot. It's a stateful protocol that doesn't lend itself to a simple implementation and can be intimidating. IMAP's syntax is branched, subtle, and has various issues. Above that, the syntax is intertwined with business logic, making separating concerns difficult. It doesn't help either that there are more than 70 extensions, with any of them potentially breaking your understanding of how IMAP operates.

In this talk, Simon and Damian recapitulate what they learned about IMAP while implementing/maintaining go-imap and imap-codec.

After the talk, you will have a much better understanding of IMAP and, hopefully, will avoid making the same mistakes we made.

About the speaker(s)

Simon started writing go-imap v1 7 years ago. Of course, misunderstandings happened, and mistakes were made. Thus, he started working on go-imap v2 earlier this year to fix these mistakes and design a better API informed on everything he learned while maintaining this library.

Damian started imap-codec during a STARTTLS research project. imap-codec was born out of frustration. He struggled to construct syntactically valid IMAP messages while analyzing IMAP clients for a specific behavior. imap-codec helped to prevent the same errors from being made twice.


Photo of Damian Poddebniak Damian Poddebniak
Photo of Simon Ser Simon Ser