digraph imap_rfcs {
    rankdir=LR;
    node [shape=box, fontname="Helvetica"];

    # --- Node styles ---
    node [color=black];
    obsoleted [color=red, fontcolor=red];

    # --- Core RFCs ---
    "RFC 3501" [label="RFC 3501\nIMAP4rev1 (core)"];
    "RFC 9051" [label="RFC 9051\nIMAP4rev2"];

    # --- Obsolete IMAP RFCs ---
    "RFC 2060" [label="RFC 2060\nIMAP4rev1 (1996)" color=red fontcolor=red];
    "RFC 1730" [label="RFC 1730\nIMAP4 (1994)" color=red fontcolor=red];

    # --- Obsoletion chain ---
    "RFC 1730" -> "RFC 2060" [label="obsoleted by" color=red];
    "RFC 2060" -> "RFC 3501" [label="obsoleted by" color=red];
    "RFC 3501" -> "RFC 9051" [label="obsoleted by" color=red];

    # --- Major IMAP Extensions ---
    "RFC 2087" [label="RFC 2087\nQUOTA"];
    "RFC 2086" [label="RFC 2086\nACL (old)" color=red fontcolor=red];
    "RFC 4314" [label="RFC 4314\nACL (new)"];
    "RFC 2177" [label="RFC 2177\nIDLE"];
    "RFC 2342" [label="RFC 2342\nNAMESPACE"];
    "RFC 2971" [label="RFC 2971\nID extension"];
    "RFC 3502" [label="RFC 3502\nMULTIAPPEND"];
    "RFC 3516" [label="RFC 3516\nURLAUTH"];
    "RFC 4466" [label="RFC 4466\nCol. Ext. Guidelines"];
    "RFC 4467" [label="RFC 4467\nURLAUTH BURL"];
    "RFC 4551" [label="RFC 4551\nCONDSTORE"];
    "RFC 5161" [label="RFC 5161\nENABLE"];
    "RFC 5182" [label="RFC 5182\nIMAP SORT=DISPLAY"];
    "RFC 5255" [label="RFC 5255\nLANGUAGE-TAGS, LANGUAGE"];
    "RFC 5256" [label="RFC 5256\nSORT/THREAD"];
    "RFC 5259" [label="RFC 5259\nCONVERT"];
    "RFC 5267" [label="RFC 5267\nSEARCHres"];
    "RFC 5788" [label="RFC 5788\nIMAP METADATA"];
    "RFC 6851" [label="RFC 6851\nIMAP MOVE"];
    "RFC 7162" [label="RFC 7162\nQRESYNC"];
    "RFC 8474" [label="RFC 8474\nObject Identifiers"];
    "RFC 8437" [label="RFC 8437\nIMAP UNAUTHENTICATE (obsolete)" color=red fontcolor=red];

    # --- Extensions that explicitly update earlier ones ---
    "RFC 4315" [label="RFC 4315\nUIDPLUS"];
    "RFC 4978" [label="RFC 4978\nCOMPRESS=DEFLATE"];

    # SASL/Authentication for IMAP
    "RFC 2595" [label="RFC 2595\nTLS/IMAP, POP3, ACAP"];
    "RFC 4959" [label="RFC 4959\nSASL-IR"];
    "RFC 4616" [label="RFC 4616\nPLAIN SASL"];
    "RFC 4422" [label="RFC 4422\nSASL-Framework"];

    # --- Key relationships ---
    "RFC 3501" -> "RFC 4314"; # ACL new replaces old
    "RFC 3501" -> "RFC 2087"; # QUOTA
    "RFC 3501" -> "RFC 2177"; # IDLE
    "RFC 3501" -> "RFC 2342"; # NAMESPACE
    "RFC 3501" -> "RFC 2971"; # ID
    "RFC 3501" -> "RFC 3502"; # MULTIAPPEND
    "RFC 3501" -> "RFC 3516"; # URLAUTH
    "RFC 3501" -> "RFC 4466"; 
    "RFC 3501" -> "RFC 4551"; # CONDSTORE
    "RFC 3501" -> "RFC 5161"; # ENABLE
    "RFC 3501" -> "RFC 5182";
    "RFC 3501" -> "RFC 5255";
    "RFC 3501" -> "RFC 5256";
    "RFC 3501" -> "RFC 5259";
    "RFC 3501" -> "RFC 5267";
    "RFC 3501" -> "RFC 5788";
    "RFC 3501" -> "RFC 4315";
    "RFC 3501" -> "RFC 4978";
    "RFC 3501" -> "RFC 6851"; # MOVE
    "RFC 3501" -> "RFC 7162"; # QRESYNC
    "RFC 3501" -> "RFC 8474"; # Object identifiers

    # ACL dependency
    "RFC 2086" -> "RFC 4314" [label="obsoleted by" color=red];

    # URLAUTH dependency chain
    "RFC 3516" -> "RFC 4467";

    # QRESYNC updates CONDSTORE
    "RFC 4551" -> "RFC 7162";

    # SASL dependencies
    "RFC 4422" -> "RFC 4616";
    "RFC 4422" -> "RFC 4959";

    # IMAP + TLS
    "RFC 3501" -> "RFC 2595";

    # IMAP modernisation
    "RFC 9051" -> "RFC 3501" [style=dashed, label="based on"];
}
