<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-frindell-moq-moqpack-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="moq-moqpack">QPACK Compression for MoQ Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-frindell-moq-moqpack-00"/>
    <author initials="A." surname="Frindell" fullname="Alan Frindell">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <keyword>qpack</keyword>
    <keyword>compression</keyword>
    <abstract>
      <?line 40?>

<t>This document defines an extension to Media over QUIC Transport (MOQT) that
enables QPACK compression for control messages. By leveraging QPACK's dynamic
table, this extension significantly reduces the overhead of repeated
values such as track names and authorization tokens, improving efficiency for
sessions with many subscriptions or frequent redundant values.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://afrind.github.io/draft-frindell-moq-moqpack/draft-frindell-moq-moqpack.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-frindell-moq-moqpack/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/afrind/draft-frindell-moq-moqpack"/>.</t>
    </note>
  </front>
  <middle>
    <?line 48?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC Transport (MOQT) <xref target="MOQT"/> control message fields and
parameters can contain large values that are repeated across many messages
within a session. The base MOQT specification transmits this information in full
each time it appears, which can result in significant overhead.</t>
      <t>This document defines an extension that uses QPACK <xref target="QPACK"/> to compress MOQT
message parameters. QPACK provides:</t>
      <ul spacing="normal">
        <li>
          <t>Dynamic table for referencing previously transmitted values</t>
        </li>
        <li>
          <t>Static table with pre-defined common values</t>
        </li>
        <li>
          <t>Stream blocking semantics suitable for QUIC</t>
        </li>
      </ul>
      <t>By treating MOQT parameters as QPACK field lines, this extension enables
efficient compression of repeated values while maintaining compatibility with
QPACK's existing infrastructure.</t>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>Consider a session where a client sends 100 SUBSCRIBE messages, each carrying
the same 500-byte authorization token. Without compression, this results in
50,000 bytes of token data. With QPACK compression, the token is transmitted
once and subsequent references require only a few bytes, reducing total
overhead to approximately 600 bytes.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The terms "endpoint", "session", "publisher", and "subscriber" are defined in
<xref target="MOQT"/>.</t>
    </section>
    <section anchor="extension-negotiation">
      <name>Extension Negotiation</name>
      <t>This extension is negotiated during MOQT session establishment using Setup
Options. CLIENT_SETUP and SERVER_SETUP messages always use standard MOQT
encoding and are never MOQPACK compressed.</t>
      <section anchor="moqtqpackmaxtablecapacity">
        <name>MOQT_QPACK_MAX_TABLE_CAPACITY</name>
        <t>The MOQT_QPACK_MAX_TABLE_CAPACITY setup option (Option Type 0x10)
specifies the maximum size in bytes of the QPACK dynamic table the endpoint
is willing to maintain for decoding. This corresponds to
SETTINGS_QPACK_MAX_TABLE_CAPACITY in HTTP/3.</t>
        <t>The value is encoded as a variable-length integer. The default value is 0.</t>
        <t>QPACK compression is enabled when both endpoints send this parameter with a
value greater than 0. If either endpoint omits this parameter or sends a
value of 0, QPACK compression <bcp14>MUST NOT</bcp14> be used and control messages use the
standard MOQT format.</t>
      </section>
      <section anchor="moqtqpackblockedstreams">
        <name>MOQT_QPACK_BLOCKED_STREAMS</name>
        <t>The MOQT_QPACK_BLOCKED_STREAMS setup option (Option Type 0x11) specifies
the maximum number of streams that can be blocked waiting for dynamic table
updates. This corresponds to SETTINGS_QPACK_BLOCKED_STREAMS in HTTP/3.</t>
        <t>The value is encoded as a variable-length integer. The default value is 0,
which prevents any stream from being blocked. When set to 0, encoders <bcp14>MUST NOT</bcp14>
reference dynamic table entries that have not been acknowledged.</t>
        <t>This option is only meaningful when QPACK compression is enabled.</t>
      </section>
      <section anchor="implicit-dynamic-table-seeding">
        <name>MOQT_QPACK_INDEX_SETUP_AUTH</name>
        <t>The MOQT_QPACK_INDEX_SETUP_AUTH setup option (Option Type 0x12) controls
whether AUTHORIZATION TOKEN options from the Setup messages are implicitly
inserted into the dynamic table.</t>
        <t>The value is encoded as a variable-length integer:</t>
        <ul spacing="normal">
          <li>
            <t>0: Do not implicitly insert setup auth tokens (default)</t>
          </li>
          <li>
            <t>1: Implicitly insert setup auth tokens</t>
          </li>
        </ul>
        <t>When either endpoint omits this option or sends 0, implicit insertion does
not occur and endpoints that wish to reference auth tokens explicitly
insert them via the encoder stream.</t>
        <t>This allows endpoints to authenticate the connection via setup auth tokens
while still using Never-Indexed Literals for subsequent auth token references
if desired.</t>
        <t>When both endpoints send MOQT_QPACK_INDEX_SETUP_AUTH with value 1, any
AUTHORIZATION TOKEN options from the Setup messages are implicitly inserted
into the dynamic table without requiring encoder stream instructions.</t>
        <t>Tokens from the Setup message, in the order they appeared, are inserted into
the receiver's decoder dynamic table (indices 0, 1, 2, ...)</t>
        <t>This allows the client to immediately reference its setup auth token in
the first SUBSCRIBE message using a dynamic table reference, without
resending it on the encoder stream.</t>
        <t>The implicit entries count against the MOQT_QPACK_MAX_TABLE_CAPACITY limit.
If the implicit entries would exceed the peer's advertised capacity, the
excess entries (in reverse order) are not inserted and cannot be referenced.</t>
        <t>Encoder stream insertions after setup use indices starting after the
implicit entries. For example, if CLIENT_SETUP contained 2 auth tokens,
the first explicit insertion would be at index 2.</t>
      </section>
    </section>
    <section anchor="qpack-streams">
      <name>QPACK Streams</name>
      <t>When QPACK compression is negotiated, each endpoint opens two unidirectional
streams for QPACK signaling.</t>
      <section anchor="stream-types">
        <name>Stream Types</name>
        <t>This extension defines two new MOQT unidirectional stream types:</t>
        <dl>
          <dt>QPACK_ENCODER_STREAM (0x1f107a60):</dt>
          <dd>
            <t>Carries QPACK encoder instructions from the endpoint that opens the stream.
The format and semantics are defined in Section 4.3.1 of <xref target="QPACK"/>.</t>
          </dd>
          <dt>QPACK_DECODER_STREAM (0x1f107a61):</dt>
          <dd>
            <t>Carries QPACK decoder instructions from the endpoint that opens the stream.
The format and semantics are defined in Section 4.4.1 of <xref target="QPACK"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-initialization">
        <name>Stream Initialization</name>
        <t>Each endpoint <bcp14>MUST</bcp14> open exactly one QPACK encoder stream and one QPACK decoder
stream for QPACK use. These streams <bcp14>MUST</bcp14> be opened before sending any message
with a Compressed Block.</t>
        <t>An endpoint <bcp14>MAY</bcp14> open these streams immediately after sending its Setup message
if it included MOQT_QPACK_MAX_TABLE_CAPACITY with a non-zero value. If a
receiving endpoint does not enable QPACK (omits the parameter or sends value 0),
it <bcp14>MAY</bcp14> send STOP_SENDING on these streams; this is not an error and the streams
<bcp14>SHOULD</bcp14> be reset.</t>
        <t>Note that implicitly-inserted dynamic table entries from Setup auth tokens
(see <xref target="implicit-dynamic-table-seeding"/>) do not require encoder stream
instructions. A Compressed Block <bcp14>MAY</bcp14> reference these implicit entries even
if no encoder stream instructions have been sent.</t>
        <t>If an endpoint receives a Compressed Block that references a dynamic table
entry beyond the implicit entries before receiving any encoder stream data,
it <bcp14>MUST</bcp14> buffer the message until the required encoder instructions arrive
or close the session with PROTOCOL_VIOLATION if buffering limits are exceeded.</t>
      </section>
      <section anchor="stream-lifetime">
        <name>Stream Lifetime</name>
        <t>QPACK encoder and decoder streams <bcp14>MUST</bcp14> remain open for the duration of the MOQT
session. If either stream is closed after QPACK is negotiated, the endpoint <bcp14>MUST</bcp14>
close the MOQT session with PROTOCOL_VIOLATION.</t>
      </section>
    </section>
    <section anchor="compressed-message-formats">
      <name>Compressed Message Formats</name>
      <section anchor="moqpack-flag-bit">
        <name>MOQPACK Flag Bit</name>
        <t>This extension uses a flag bit in the message type to indicate if QPACK is
used. Bit 6 (0x40) of the message type indicates MOQPACK format:</t>
        <ul spacing="normal">
          <li>
            <t>Type &amp; 0x40 == 0: Standard MOQT format</t>
          </li>
          <li>
            <t>Type &amp; 0x40 == 0x40: MOQPACK format</t>
          </li>
        </ul>
        <t>For example:
- SUBSCRIBE standard = 0x03
- SUBSCRIBE MOQPACK = 0x43</t>
        <t>All MOQPACK message types listed in this document are reserved in the MOQT
message type registry and <bcp14>MUST NOT</bcp14> be used for other purposes.</t>
        <t>When MOQPACK is negotiated, endpoints <bcp14>MUST</bcp14> accept both standard and MOQPACK
formats for all applicable messages. An endpoint <bcp14>MAY</bcp14> send either format, but
<bcp14>SHOULD</bcp14> prefer MOQPACK format to benefit from compression.</t>
        <t>When MOQPACK is NOT negotiated, endpoints <bcp14>MUST NOT</bcp14> send MOQPACK format messages
and <bcp14>MUST</bcp14> close the session with PROTOCOL_VIOLATION if they receive one.</t>
        <t>In MOQPACK format, Track Namespace, Track Name, and Parameters are moved into a
QPACK Compressed Block. Other message-specific fields including Properties
remain unchanged.</t>
        <t>When the Compressed Block is the last field in the message, it extends to the
end of the message payload (as determined by the message Length field) and no
explicit Compressed Block Length is needed. When additional fields follow the
Compressed Block (such as Properties), an explicit Compressed Block Length
field is present to delimit the block.</t>
      </section>
      <section anchor="pseudo-parameter-types">
        <name>Pseudo-Parameter Types</name>
        <t>The following pseudo-parameter types are reserved for encoding namespace and
track name fields in the Compressed Block:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">TRACK_NAMESPACE_ELEMENT</td>
              <td align="left">Single element of a namespace tuple</td>
            </tr>
            <tr>
              <td align="left">0x0B</td>
              <td align="left">TRACK_NAMESPACE_SET</td>
              <td align="left">Full serialized namespace tuple</td>
            </tr>
            <tr>
              <td align="left">0x0C</td>
              <td align="left">TRACK_NAME</td>
              <td align="left">Track Name</td>
            </tr>
          </tbody>
        </table>
        <t>These pseudo-types use the same encoding as regular parameters: Literal with
Static Name Reference for new values, or Indexed with Dynamic Table for
previously-inserted values.</t>
        <section anchor="tracknamespaceset-value-format">
          <name>TRACK_NAMESPACE_SET Value Format</name>
          <t>The value of a TRACK_NAMESPACE_SET field uses the standard MOQT Track Namespace
serialization as defined in <xref target="MOQT"/>:</t>
          <artwork><![CDATA[
TRACK_NAMESPACE_SET Value {
  Number of Track Namespace Fields (vi64),
  Track Namespace Field (..) ...
}

Track Namespace Field {
  Track Namespace Field Length (vi64),
  Track Namespace Field Value (..)
}
]]></artwork>
          <t>Each Track Namespace Field Value <bcp14>MUST</bcp14> contain at least one byte, consistent
with the requirement in <xref target="MOQT"/>.</t>
        </section>
      </section>
      <section anchor="namespace-reconstruction">
        <name>Namespace Reconstruction</name>
        <t>A Track Namespace, Track Namespace Prefix or Track Namespace Suffix is
reconstructed by assembling consecutive TRACK_NAMESPACE_ELEMENT and
TRACK_NAMESPACE_SET field lines, which <bcp14>MUST</bcp14> appear first in the Compressed Block
before TRACK_NAME or any parameters.</t>
        <t>TRACK_NAMESPACE_ELEMENT adds a single element to the namespace tuple.
TRACK_NAMESPACE_SET appends all elements from a serialized tuple. These
can be intermixed and appear in any combination. For example:</t>
        <artwork><![CDATA[
Namespace ("conference", "room1", "audio"):

Option A - All elements:
  TRACK_NAMESPACE_ELEMENT: "conference"
  TRACK_NAMESPACE_ELEMENT: "room1"
  TRACK_NAMESPACE_ELEMENT: "audio"

Option B - Full set:
  TRACK_NAMESPACE_SET: ("conference", "room1", "audio")

Option C - Mixed:
  TRACK_NAMESPACE_ELEMENT: "conference"
  TRACK_NAMESPACE_SET: ("room1", "audio")
]]></artwork>
        <t>This allows encoders to maximize compression by inserting commonly-reused
elements or partial tuples into the dynamic table.</t>
        <t>The message type determines the semantics of the assembled namespace:</t>
        <ul spacing="normal">
          <li>
            <t>SUBSCRIBE, PUBLISH, FETCH, TRACK_STATUS, PUBLISH_NAMESPACE: Full namespace</t>
          </li>
          <li>
            <t>SUBSCRIBE_NAMESPACE: Namespace prefix</t>
          </li>
          <li>
            <t>NAMESPACE, NAMESPACE_DONE: Namespace suffix</t>
          </li>
        </ul>
      </section>
      <section anchor="field-ordering">
        <name>Field Ordering</name>
        <t>Namespace elements (TRACK_NAMESPACE_ELEMENT and TRACK_NAMESPACE_SET) <bcp14>MUST</bcp14>
appear first in the Compressed Block, followed by TRACK_NAME (if present),
followed by parameters in increasing order of parameter type.</t>
        <t>Within the namespace elements section, entries appear in the order they
contribute to the namespace tuple and are not required to be in increasing
order of type. TRACK_NAMESPACE_ELEMENT (0x0A) and TRACK_NAMESPACE_SET (0x0B)
<bcp14>MAY</bcp14> be intermixed.</t>
        <t>Parameters (excluding pseudo-parameter types) <bcp14>MUST</bcp14> appear in increasing order
of their parameter type. If parameters appear out of order, the receiver <bcp14>MUST</bcp14>
close the session with PROTOCOL_VIOLATION.</t>
      </section>
      <section anchor="required-fields">
        <name>Required Fields</name>
        <t>When decoding a Compressed Block, the receiver <bcp14>MUST</bcp14> verify that all required
fields are present:</t>
        <ul spacing="normal">
          <li>
            <t>SUBSCRIBE, PUBLISH, TRACK_STATUS, Standalone FETCH: At least one namespace
element (TRACK_NAMESPACE_ELEMENT or TRACK_NAMESPACE_SET) and TRACK_NAME</t>
          </li>
          <li>
            <t>SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, NAMESPACE, NAMESPACE_DONE: At least
one namespace element</t>
          </li>
          <li>
            <t>Joining FETCH, parameter-only messages: No required pseudo-parameters</t>
          </li>
        </ul>
        <t>An empty namespace (zero elements) is valid only if explicitly allowed by the
message semantics.</t>
        <t>If a required field is missing, the receiver <bcp14>MUST</bcp14> close the session with
PROTOCOL_VIOLATION.</t>
      </section>
      <section anchor="moqpack-message-formats">
        <name>MOQPACK Message Formats</name>
        <section anchor="subscribe">
          <name>SUBSCRIBE</name>
          <artwork><![CDATA[
SUBSCRIBE Message (MOQPACK) {
  Type (vi64) = 0x43,
  Length (16),
  Request ID (vi64),
  Track Alias (vi64),
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace elements (TRACK_NAMESPACE_ELEMENT and/or
TRACK_NAMESPACE_SET), TRACK_NAME (0x0C), and any parameters
(AUTHORIZATION_TOKEN, SUBSCRIBER_PRIORITY, etc.).</t>
        </section>
        <section anchor="publish">
          <name>PUBLISH</name>
          <artwork><![CDATA[
PUBLISH Message (MOQPACK) {
  Type (vi64) = 0x5D,
  Length (16),
  Request ID (vi64),
  Track Alias (vi64),
  Compressed Block Length (vi64),
  Compressed Block (..),
  Properties (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace elements, TRACK_NAME, and any
parameters.  Properties remain outside the compressed block and use
standard MOQT encoding, including IMMUTABLE_EXTENSIONS which are not QPACK
compressed.</t>
        </section>
        <section anchor="fetch">
          <name>FETCH</name>
          <artwork><![CDATA[
Standalone Fetch (MOQPACK) {
  Start Location (Location),
  End Location (Location),
  Compressed Block (..)
}

Joining Fetch (MOQPACK) {
  Joining Request ID (vi64),
  Join Type (vi64),
  Joining Start (vi64),
  Compressed Block (..)
}

FETCH Message (MOQPACK) {
  Type (vi64) = 0x56,
  Length (16),
  Request ID (vi64),
  Fetch Type (vi64),
  [Standalone (Standalone Fetch QPACK),]
  [Joining (Joining Fetch QPACK),]
}
]]></artwork>
          <t>For Standalone Fetch, the Compressed Block contains namespace elements,
TRACK_NAME, and parameters. For Joining Fetch, the Compressed Block contains
only parameters (the track is inherited from the joined subscription).</t>
        </section>
        <section anchor="subscribenamespace">
          <name>SUBSCRIBE_NAMESPACE</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message (MOQPACK) {
  Type (vi64) = 0x51,
  Length (16),
  Request ID (vi64),
  Subscribe Options (vi64),
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace prefix elements and any parameters.</t>
        </section>
        <section anchor="publishnamespace">
          <name>PUBLISH_NAMESPACE</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message (MOQPACK) {
  Type (vi64) = 0x46,
  Length (16),
  Request ID (vi64),
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace elements and any parameters.</t>
        </section>
        <section anchor="namespace">
          <name>NAMESPACE</name>
          <artwork><![CDATA[
NAMESPACE Message (MOQPACK) {
  Type (vi64) = 0x48,
  Length (16),
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace suffix elements. This message has
no parameters.</t>
        </section>
        <section anchor="namespacedone">
          <name>NAMESPACE_DONE</name>
          <artwork><![CDATA[
NAMESPACE_DONE Message (MOQPACK) {
  Type (vi64) = 0x4E,
  Length (16),
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains namespace suffix elements. This message has
no parameters.</t>
        </section>
        <section anchor="trackstatus">
          <name>TRACK_STATUS</name>
          <t>TRACK_STATUS uses the same format as SUBSCRIBE but with type 0x4D.
The Compressed Block contains namespace elements, TRACK_NAME, and any applicable
parameters.</t>
        </section>
        <section anchor="subscribeok">
          <name>SUBSCRIBE_OK</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message (MOQPACK) {
  Type (vi64) = 0x44,
  Length (16),
  Request ID (vi64),
  Compressed Block Length (vi64),
  Compressed Block (..),
  Properties (..)
}
]]></artwork>
          <t>The Compressed Block contains only parameters. Properties remain outside the
Compressed Block and use standard MOQT encoding. The Compressed Block Length
is required because Properties consume the remainder of the message.</t>
        </section>
        <section anchor="fetchok">
          <name>FETCH_OK</name>
          <artwork><![CDATA[
FETCH_OK Message (MOQPACK) {
  Type (vi64) = 0x58,
  Length (16),
  Request ID (vi64),
  Compressed Block Length (vi64),
  Compressed Block (..),
  Properties (..)
}
]]></artwork>
          <t>The Compressed Block contains only parameters. Properties remain outside the
Compressed Block and use standard MOQT encoding. The Compressed Block Length
is required because Properties consume the remainder of the message.</t>
        </section>
        <section anchor="parameter-only-messages">
          <name>Parameter-Only Messages</name>
          <t>The following messages have parameters but no namespace, track name, or
trailing properties. When MOQPACK is negotiated, these messages <bcp14>MAY</bcp14> use
MOQPACK format with the 0x40 flag bit set. The MOQPACK format replaces the
standard Parameters field with a Compressed Block that consumes the remainder
of the message:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Standard Type</th>
                <th align="left">MOQPACK Type</th>
                <th align="left">Message</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x02</td>
                <td align="left">0x42</td>
                <td align="left">REQUEST_UPDATE</td>
              </tr>
              <tr>
                <td align="left">0x05</td>
                <td align="left">0x45</td>
                <td align="left">REQUEST_ERROR</td>
              </tr>
              <tr>
                <td align="left">0x07</td>
                <td align="left">0x47</td>
                <td align="left">REQUEST_OK</td>
              </tr>
              <tr>
                <td align="left">0x1E</td>
                <td align="left">0x5E</td>
                <td align="left">PUBLISH_OK</td>
              </tr>
            </tbody>
          </table>
          <artwork><![CDATA[
Parameter-Only Message (MOQPACK) {
  Type (vi64) = <standard type> | 0x40,
  Length (16),
  [Message-specific fields...],
  Compressed Block (..)
}
]]></artwork>
          <t>The Compressed Block contains only parameters (no pseudo-parameter types).
Message-specific fields (Request ID, error codes, etc.) remain unchanged.</t>
        </section>
      </section>
    </section>
    <section anchor="qpack-encoding">
      <name>QPACK Encoding</name>
      <t>This extension uses QPACK's wire encoding formats exactly as specified in
<xref target="QPACK"/>. The only difference is the interpretation of static table
references: instead of indexing into the HTTP static table of string
name-value pairs, the static table index IS the MOQT parameter type.</t>
      <t>This allows existing QPACK encoder/decoder implementations to be reused
with minimal modification.</t>
      <section anchor="compressed-block-format">
        <name>Compressed Block Format</name>
        <t>Each Compressed Block begins with the standard QPACK encoded field section
prefix as defined in Section 4.5.1 of <xref target="QPACK"/>:</t>
        <artwork><![CDATA[
Compressed Block {
  Required Insert Count (8+),
  Sign and Delta Base (8+),
  Encoded Field Lines (..)
}
]]></artwork>
        <dl>
          <dt>Required Insert Count:</dt>
          <dd>
            <t>Encoded as specified in Section 4.5.1.1 of <xref target="QPACK"/>. Indicates the
minimum dynamic table state needed to decode this block. A value of 0
means the block has no dynamic table references.</t>
          </dd>
          <dt>Base:</dt>
          <dd>
            <t>Encoded as a sign bit and Delta Base as specified in Section 4.5.1.2
of <xref target="QPACK"/>. Used to resolve relative indices in field line
representations.</t>
          </dd>
        </dl>
      </section>
      <section anchor="indexing">
        <name>Indexing</name>
        <t>Dynamic table references in field lines use relative indexing as specified
in <xref target="QPACK"/> Section 3.2.5. A relative index of 0 refers to the entry with
absolute index equal to Base - 1. Encoders and decoders <bcp14>MUST</bcp14> use relative
indices, not absolute indices, in Compressed Blocks.</t>
        <t>Post-Base indexing (Section 3.2.6 of <xref target="QPACK"/>) <bcp14>MAY</bcp14> be used for entries
inserted after the Base. This enables single-pass encoding where the encoder
inserts entries while encoding a field section and references them using
Post-Base indices.</t>
      </section>
      <section anchor="moqt-static-table-semantics">
        <name>MOQT Static Table Semantics</name>
        <t>In standard QPACK, a static table index retrieves a predefined (name, value)
pair. In this extension, the static table conceptually contains entries
where the "name" is the parameter type integer and there is no predefined
value.</t>
        <t>The static table index equals the MOQT parameter type:</t>
        <t>For example:
* Static index 0x02 represents DELIVERY_TIMEOUT
* Static index 0x03 represents AUTHORIZATION_TOKEN
* Static index 0x0A represents TRACK_NAMESPACE_ELEMENT
* Static index 0x0C represents TRACK_NAME
* Static index 0x20 represents SUBSCRIBER_PRIORITY</t>
        <t>This means any valid MOQT parameter type can be referenced by static index
without requiring pre-registration in a table.</t>
        <section anchor="field-line-interpretation">
          <name>Field Line Interpretation</name>
          <t>In QPACK field line encodings, the T bit selects between static table (T=1)
and dynamic table (T=0). Since MOQT parameter types are integers that map
directly to static table indices, the following encodings are used:</t>
          <dl>
            <dt>Literal Field Line With Static Name Reference (T=1):</dt>
            <dd>
              <t>The Name Index is the MOQT parameter type. The Value field contains the
parameter value. Use this to send a parameter value.</t>
            </dd>
            <dt>Indexed Field Line with Dynamic Table (T=0):</dt>
            <dd>
              <t>References the dynamic table using a relative index. The retrieved entry
contains a complete MOQT parameter (type and value).</t>
            </dd>
            <dt>Indexed Field Line with Post-Base Index:</dt>
            <dd>
              <t>References a dynamic table entry inserted after the Base. Used for
single-pass encoding. See <xref target="QPACK"/> Section 4.5.3.</t>
            </dd>
          </dl>
          <t>The following QPACK field line encodings are prohibited:</t>
          <dl>
            <dt>Indexed Field Line with Static Table (T=1):</dt>
            <dd>
              <t>PROHIBITED. The MOQT static table has no predefined values.</t>
            </dd>
            <dt>Literal Field Line With Dynamic Name Reference (T=0):</dt>
            <dd>
              <t>PROHIBITED. Parameter types are always known integers; there is no need
to reference the dynamic table for a parameter type.</t>
            </dd>
            <dt>Literal Field Line with Post-Base Name Reference:</dt>
            <dd>
              <t>PROHIBITED. Parameter types are always known integers; there is no need
to reference the dynamic table for a parameter type.</t>
            </dd>
            <dt>Literal Field Line With Literal Name:</dt>
            <dd>
              <t>PROHIBITED. Parameter types are integers, never string literals.</t>
            </dd>
            <dt>Huffman-encoded string literals (H=1):</dt>
            <dd>
              <t>PROHIBITED. The CPU cost outweighs the minimal space savings for typical
MOQT values. Encoders <bcp14>MUST</bcp14> set the H bit to 0 for all string literals.</t>
            </dd>
          </dl>
          <t>Receivers <bcp14>MUST</bcp14> treat prohibited encodings as a PROTOCOL_VIOLATION.</t>
        </section>
      </section>
      <section anchor="dynamic-table">
        <name>Dynamic Table</name>
        <t>Dynamic table entries store complete MOQT parameters (type and value).
The entry size calculation follows <xref target="QPACK"/> Section 3.2.1: the size of an
entry is the sum of its name size, value size, and 32 bytes of overhead.
This extension uses a fixed name size of 4 bytes for the parameter type
regardless of its encoded length.</t>
        <section anchor="encoder-stream-instructions">
          <name>Encoder Stream Instructions</name>
          <dl>
            <dt>Set Dynamic Table Capacity:</dt>
            <dd>
              <t>Sets the dynamic table capacity up to the peer's
MOQT_QPACK_MAX_TABLE_CAPACITY. Encoders <bcp14>MAY</bcp14> reduce capacity dynamically.
See <xref target="QPACK"/> Section 4.3.1.</t>
            </dd>
            <dt>Insert With Static Name Reference (T=1):</dt>
            <dd>
              <t>The Name Index is the MOQT parameter type. Inserts a new dynamic table
entry with that parameter type and the provided value.</t>
            </dd>
            <dt>Duplicate:</dt>
            <dd>
              <t>Duplicates an existing dynamic table entry at a new index. Useful when
an entry is near eviction but still frequently referenced. See <xref target="QPACK"/>
Section 4.3.4.</t>
            </dd>
            <dt>Insert With Dynamic Name Reference (T=0):</dt>
            <dd>
              <t>PROHIBITED. Parameter types are always known integers.</t>
            </dd>
            <dt>Insert With Literal Name:</dt>
            <dd>
              <t>PROHIBITED. Parameter types are integers, never strings.</t>
            </dd>
          </dl>
          <t>Receivers <bcp14>MUST</bcp14> close the session with PROTOCOL_VIOLATION if a prohibited
encoder instruction is received.</t>
        </section>
        <section anchor="parameter-value-encoding">
          <name>Parameter Value Encoding</name>
          <t>QPACK values contain the raw parameter value bytes without any MOQT length
prefix. The QPACK value length field serves as the length for binary values.</t>
          <dl>
            <dt>For binary parameters (odd parameter types in MOQT):</dt>
            <dd>
              <t>The QPACK value contains the raw binary bytes. The QPACK value length
replaces the MOQT Length field. No length prefix is included in the value.</t>
            </dd>
            <dt>For integer parameters (even parameter types in MOQT):</dt>
            <dd>
              <t>The QPACK value contains the varint-encoded integer. Note that this
encoding carries redundant length information: the QPACK value length
specifies the byte count, while the varint encoding is self-delimiting.
If the varint-encoded length does not match the QPACK value length, the
receiver <bcp14>MUST</bcp14> close the session with PROTOCOL_VIOLATION.</t>
            </dd>
          </dl>
          <t>For example, DELIVERY_TIMEOUT with value 200:
~~~
QPACK Value Length: 2
QPACK Value: 0xC8 0x01  (varint encoding of 200)
~~~</t>
          <t>The receiver decodes the varint and verifies it consumed exactly 2 bytes.</t>
        </section>
        <section anchor="authorization-token-encoding">
          <name>Authorization Token Encoding</name>
          <t>The AUTHORIZATION TOKEN parameter value contains the Token structure:</t>
          <artwork><![CDATA[
Token Value = Token Type (vi64) || Token Payload (..)
]]></artwork>
          <t>For example, a JWT token (Token Type 1) is encoded as:</t>
          <artwork><![CDATA[
Literal Field Line With Name Reference:
  Name Index: 0x03 (AUTHORIZATION_TOKEN)
  Value: 0x01 || "eyJhbGciOiJIUzI1NiIs..."
]]></artwork>
          <t>When this token is inserted into the dynamic table, subsequent references
use only a single-byte Indexed Field Line.</t>
        </section>
      </section>
      <section anchor="decoding">
        <name>Decoding</name>
        <t>When receiving a message with a Compressed Block, the receiver:</t>
        <ol spacing="normal" type="1"><li>
            <t>Parses fixed message fields (Request ID, Track Alias, etc.)</t>
          </li>
          <li>
            <t>If a Compressed Block is present:
a. Waits for any referenced dynamic table entries to become available,
   subject to MOQT_QPACK_BLOCKED_STREAMS limits
b. Decodes the QPACK Compressed Block to recover namespace elements,
   track name, and parameters</t>
          </li>
          <li>
            <t>Processes the fully decoded message</t>
          </li>
        </ol>
        <t>If QPACK decoding fails, the receiver <bcp14>MUST</bcp14> close the session with
MOQPACK_DECOMPRESSION_FAILED.</t>
        <t>The total size of the decompressed message fields (the sum of all parameter
values, namespace elements, and track name, excluding interior length fields)
<bcp14>MUST NOT</bcp14> exceed 65535 bytes. If a decompressed message exceeds this limit,
the receiver <bcp14>MUST</bcp14> close the session with MOQPACK_DECOMPRESSION_FAILED.</t>
      </section>
    </section>
    <section anchor="dynamic-table-management">
      <name>Dynamic Table Management</name>
      <section anchor="encoder-behavior">
        <name>Encoder Behavior</name>
        <t>Encoders <bcp14>SHOULD</bcp14> insert frequently-used parameter values into the dynamic table.
Authorization tokens, Track Namespace Elements and Track names that will be
reused across multiple messages are prime candidates for insertion.</t>
        <t>Short values like brief track names ("audio", "video") <bcp14>MAY</bcp14> be sent as literals
rather than inserted, since the overhead of insertion and indexed reference
is similar to sending the literal value. Insertion is more beneficial for:
- Long values (large auth tokens, long namespace elements)
- Values that will be reused across multiple messages (namespace elements
  shared by many tracks, auth tokens used for many subscriptions)</t>
        <t>Encoders <bcp14>MUST</bcp14> respect the peer's MOQT_QPACK_MAX_TABLE_CAPACITY and
MOQT_QPACK_BLOCKED_STREAMS limits when making insertion and reference
decisions.</t>
        <t>Encoders <bcp14>SHOULD</bcp14> use the QPACK duplicate instruction when a dynamic table
entry is at risk of eviction but is still frequently referenced.</t>
        <section anchor="known-received-count">
          <name>Known Received Count</name>
          <t>Encoders track the Known Received Count as specified in <xref target="QPACK"/> Section 2.1.4
to determine which entries can be referenced without blocking. Encoders <bcp14>MUST</bcp14>
only reference dynamic table entries with absolute index less than the Known
Received Count when the number of streams that would be blocked by the
reference equals MOQT_QPACK_BLOCKED_STREAMS.</t>
        </section>
        <section anchor="never-indexed-literals">
          <name>Never-Indexed Literals</name>
          <t>The 'N' bit in Literal Field Line representations signals that a value
<bcp14>MUST NOT</bcp14> be indexed by intermediaries. Encoders <bcp14>MAY</bcp14> set the 'N' bit
for sensitive values when:
- The value should not be cached by relays
- The value has low entropy and is vulnerable to compression attacks</t>
          <t>Note that when MOQT_QPACK_INDEX_SETUP_AUTH is enabled, setup auth tokens are
implicitly inserted into the dynamic table (see
<xref target="implicit-dynamic-table-seeding"/>).  Endpoints that require 'N' bit semantics
for auth tokens <bcp14>MUST NOT</bcp14> enable MOQT_QPACK_INDEX_SETUP_AUTH and <bcp14>SHOULD</bcp14> instead
send tokens as Never-Indexed Literals in each message.</t>
          <t>Intermediaries that re-encode MOQT messages <bcp14>MUST</bcp14> preserve the 'N' bit
semantics: values encoded with N=1 <bcp14>MUST NOT</bcp14> be inserted into the dynamic
table.</t>
        </section>
        <section anchor="avoiding-flow-control-deadlocks">
          <name>Avoiding Flow Control Deadlocks</name>
          <t>Writing large encoder instructions can cause deadlocks if the decoder
withholds flow control credit until the instruction is complete. To avoid
this, encoders <bcp14>SHOULD NOT</bcp14> write an encoder instruction unless sufficient
stream and connection flow-control credit is available for the entire
instruction. If sufficient credit is not available, encoders <bcp14>SHOULD</bcp14> use
literal encodings instead. See <xref target="QPACK"/> Section 2.1.3.</t>
        </section>
      </section>
      <section anchor="decoder-behavior">
        <name>Decoder Behavior</name>
        <t>Decoders <bcp14>MUST</bcp14> process encoder instructions from the QPACK encoder stream
before processing any message that might reference those insertions.</t>
        <t>Decoders <bcp14>MUST</bcp14> send Section Acknowledgment instructions on the QPACK decoder
stream after successfully decoding a Compressed Block that references the
dynamic table (Required Insert Count &gt; 0). Compressed Blocks that contain
only Literal Field Lines with Static Name References do not require
acknowledgment.</t>
        <section anchor="decoder-instructions-with-request-ids">
          <name>Decoder Instructions with Request IDs</name>
          <t>QPACK decoder instructions that reference streams (Section Acknowledgment,
Stream Cancellation) use Request IDs instead of QUIC Stream IDs. This
allows MOQT to operate over WebTransport where QUIC Stream IDs are not
exposed to the application.</t>
          <dl>
            <dt>Section Acknowledgment:</dt>
            <dd>
              <t>Carries a Request ID. Acknowledges successful decoding of a Compressed
Block that referenced the dynamic table. For streams with multiple such
Compressed Blocks (e.g., SUBSCRIBE_NAMESPACE response stream with multiple
NAMESPACE messages referencing the dynamic table), successive Section
Acknowledgments for the same Request ID acknowledge successive Compressed
Blocks in the order they were sent. Compressed Blocks with no dynamic
table references are not counted.</t>
            </dd>
            <dt>Stream Cancellation:</dt>
            <dd>
              <t>Carries a Request ID. Indicates the stream was cancelled before the
Compressed Block(s) could be decoded. The encoder <bcp14>MUST NOT</bcp14> count
references from that stream when determining eviction eligibility.</t>
            </dd>
            <dt>Insert Count Increment:</dt>
            <dd>
              <t>Unchanged from <xref target="QPACK"/>. Carries an increment value, no Request ID.</t>
            </dd>
          </dl>
          <t>The encoder tracks how many Compressed Blocks it has sent for each
Request ID. When it receives a Section Acknowledgment for a Request ID,
it knows which Compressed Block was acknowledged based on the count.</t>
        </section>
      </section>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <section anchor="moqpack_decompression_failed">
        <name>MOQPACK_DECOMPRESSION_FAILED</name>
        <t>This document defines a new MOQT session error code:</t>
        <dl>
          <dt>MOQPACK_DECOMPRESSION_FAILED (0xTBD):</dt>
          <dd>
            <t>A QPACK Compressed Block could not be decoded, or the decompressed message
exceeded implementation limits. This is always a session error; the
endpoint <bcp14>MUST</bcp14> close the MOQT session.</t>
          </dd>
        </dl>
      </section>
      <section anchor="qpack-errors">
        <name>QPACK Errors</name>
        <t>QPACK decoding errors (as defined in Section 6 of <xref target="QPACK"/>) result in
session termination. The specific mapping is:</t>
        <table>
          <thead>
            <tr>
              <th align="left">QPACK Error</th>
              <th align="left">MOQT Session Error</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">QPACK_DECOMPRESSION_FAILED</td>
              <td align="left">MOQPACK_DECOMPRESSION_FAILED</td>
            </tr>
            <tr>
              <td align="left">QPACK_ENCODER_STREAM_ERROR</td>
              <td align="left">PROTOCOL_VIOLATION</td>
            </tr>
            <tr>
              <td align="left">QPACK_DECODER_STREAM_ERROR</td>
              <td align="left">PROTOCOL_VIOLATION</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="dynamic-table-state">
        <name>Dynamic Table State</name>
        <t>The QPACK dynamic table maintains state across messages. An attacker with
knowledge of dynamic table contents could potentially:</t>
        <ul spacing="normal">
          <li>
            <t>Determine which authorization tokens have been used</t>
          </li>
          <li>
            <t>Infer subscription patterns from parameter compression ratios</t>
          </li>
        </ul>
        <t>Implementations <bcp14>SHOULD</bcp14> consider these privacy implications when deciding
which values to insert into the dynamic table.</t>
      </section>
      <section anchor="compression-oracle-attacks">
        <name>Compression Oracle Attacks</name>
        <t>As with HTTP compression, implementers need to take care to avoid compression
oracle attacks where an attacker can infer secret values by observing compressed
message sizes. Applications <bcp14>SHOULD NOT</bcp14> mix attacker-controlled data with
secret authorization tokens in the same field section.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Endpoints <bcp14>MUST</bcp14> enforce the negotiated table capacity limits to prevent
resource exhaustion attacks. An endpoint that attempts to exceed these
limits causes a session error.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="setup-option-types">
        <name>Setup Option Types</name>
        <t>This document registers the following Setup Option Types in the
"MOQT Setup Options" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x10</td>
              <td align="left">MOQT_QPACK_MAX_TABLE_CAPACITY</td>
              <td align="left">
                <xref target="extension-negotiation"/></td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">MOQT_QPACK_BLOCKED_STREAMS</td>
              <td align="left">
                <xref target="extension-negotiation"/></td>
            </tr>
            <tr>
              <td align="left">0x12</td>
              <td align="left">MOQT_QPACK_INDEX_SETUP_AUTH</td>
              <td align="left">
                <xref target="extension-negotiation"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="unidirectional-stream-types">
        <name>Unidirectional Stream Types</name>
        <t>This document registers the following unidirectional stream types in the
"MOQT Stream Types" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Stream Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1f107a60</td>
              <td align="left">QPACK_ENCODER_STREAM</td>
              <td align="left">
                <xref target="stream-types"/></td>
            </tr>
            <tr>
              <td align="left">0x1f107a61</td>
              <td align="left">QPACK_DECODER_STREAM</td>
              <td align="left">
                <xref target="stream-types"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="pseudo-parameter-types-1">
        <name>Pseudo-Parameter Types</name>
        <t>This document registers the following pseudo-parameter types in the
"MOQT Message Parameters" registry. These types are reserved for use in
QPACK Compressed Blocks and <bcp14>MUST NOT</bcp14> appear in standard Parameters fields.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">TRACK_NAMESPACE_ELEMENT</td>
              <td align="left">
                <xref target="pseudo-parameter-types"/></td>
            </tr>
            <tr>
              <td align="left">0x0B</td>
              <td align="left">TRACK_NAMESPACE_SET</td>
              <td align="left">
                <xref target="pseudo-parameter-types"/></td>
            </tr>
            <tr>
              <td align="left">0x0C</td>
              <td align="left">TRACK_NAME</td>
              <td align="left">
                <xref target="pseudo-parameter-types"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-types">
        <name>Message Types</name>
        <t>This document reserves the following message types in the "MOQT Message
Types" registry for use as MOQPACK-format messages:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Message Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x42</td>
              <td align="left">MOQPACK REQUEST_UPDATE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x43</td>
              <td align="left">MOQPACK SUBSCRIBE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x44</td>
              <td align="left">MOQPACK SUBSCRIBE_OK</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x45</td>
              <td align="left">MOQPACK REQUEST_ERROR</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x46</td>
              <td align="left">MOQPACK PUBLISH_NAMESPACE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x47</td>
              <td align="left">MOQPACK REQUEST_OK</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x48</td>
              <td align="left">MOQPACK NAMESPACE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x4D</td>
              <td align="left">MOQPACK TRACK_STATUS</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x4E</td>
              <td align="left">MOQPACK NAMESPACE_DONE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x51</td>
              <td align="left">MOQPACK SUBSCRIBE_NAMESPACE</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x56</td>
              <td align="left">MOQPACK FETCH</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x58</td>
              <td align="left">MOQPACK FETCH_OK</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x5D</td>
              <td align="left">MOQPACK PUBLISH</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
            <tr>
              <td align="left">0x5E</td>
              <td align="left">MOQPACK PUBLISH_OK</td>
              <td align="left">
                <xref target="moqpack-message-formats"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="session-error-codes">
        <name>Session Error Codes</name>
        <t>This document registers the following session error code in the
"MOQT Session Error Codes" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Error Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">MOQPACK_DECOMPRESSION_FAILED</td>
              <td align="left">
                <xref target="moqpack_decompression_failed"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="QPACK">
          <front>
            <title>QPACK: Field Compression for HTTP/3</title>
            <author fullname="C. Krasic" initials="C." surname="Krasic"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="A. Frindell" initials="A." role="editor" surname="Frindell"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification defines QPACK: a compression format for efficiently representing HTTP fields that is to be used in HTTP/3. This is a variation of HPACK compression that seeks to reduce head-of-line blocking.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9204"/>
          <seriesInfo name="DOI" value="10.17487/RFC9204"/>
        </reference>
        <reference anchor="MOQT">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="13" month="January" year="2026"/>
            <abstract>
              <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-16"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HPACK">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="H. Ruellan" initials="H." surname="Ruellan"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7541"/>
          <seriesInfo name="DOI" value="10.17487/RFC7541"/>
        </reference>
      </references>
    </references>
    <?line 959?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The QPACK specification <xref target="QPACK"/> provides the foundation for this work.
The design of HTTP/3 header compression informed many decisions in this
document.</t>
      <t>Claude, by Anthropic, assisted in drafting this document.</t>
    </section>
    <section numbered="false" anchor="example-encoding">
      <name>Example Encoding</name>
      <t>This appendix provides an example of QPACK-compressed MOQT messages,
demonstrating the Required Insert Count, Base, and relative indexing.</t>
      <section numbered="false" anchor="scenario">
        <name>Scenario</name>
        <t>A client sends three SUBSCRIBE messages to the same track with the same
authorization token:</t>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: ("conference", "room42")</t>
          </li>
          <li>
            <t>Track Name: "audio"</t>
          </li>
          <li>
            <t>Token Type: 1 (e.g., JWT)</t>
          </li>
          <li>
            <t>Token Value: "eyJhbGciOiJIUzI1NiIs..." (500 bytes)</t>
          </li>
        </ul>
        <t>The auth token was sent in CLIENT_SETUP and is implicitly inserted at
dynamic table absolute index 0 after QPACK negotiation succeeds.</t>
      </section>
      <section numbered="false" anchor="first-subscribe">
        <name>First SUBSCRIBE</name>
        <t>The encoder inserts namespace elements on the encoder stream. The short track
name "audio" is sent as a literal rather than inserted:</t>
        <artwork><![CDATA[
Encoder Stream:
  Insert With Static Name Reference
    Name Index: 0x0A (TRACK_NAMESPACE_ELEMENT)
    Value: "conference"
  Insert With Static Name Reference
    Name Index: 0x0A (TRACK_NAMESPACE_ELEMENT)
    Value: "room42"
]]></artwork>
        <t>Dynamic table state after insertions:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Absolute Index</th>
              <th align="left">Parameter Type</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">AUTH_TOKEN (implicit)</td>
              <td align="left">Token Type 1, "eyJ..."</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">TRACK_NAMESPACE_ELEMENT</td>
              <td align="left">"conference"</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">TRACK_NAMESPACE_ELEMENT</td>
              <td align="left">"room42"</td>
            </tr>
          </tbody>
        </table>
        <t>The encoder sends the SUBSCRIBE with Required Insert Count = 3 and Base = 3:</t>
        <artwork><![CDATA[
SUBSCRIBE Message:
  Type: 0x43
  Request ID: 1
  Track Alias: 100
  Compressed Block:
    Required Insert Count: 3 (encoded per RFC 9204 Section 4.5.1.1)
    Base: Sign=0, Delta=0 (Base = Required Insert Count = 3)
    Indexed Field Line (Dynamic, relative index 1)  // abs 1 = "conference"
    Indexed Field Line (Dynamic, relative index 0)  // abs 2 = "room42"
    Literal Field Line (Static Name 0x0C, Value "audio")  // TRACK_NAME
    Indexed Field Line (Dynamic, relative index 2)  // abs 0 = AUTH_TOKEN
]]></artwork>
        <t>Relative index calculation: relative = Base - 1 - absolute</t>
        <ul spacing="normal">
          <li>
            <t>"conference": relative = 3 - 1 - 1 = 1</t>
          </li>
          <li>
            <t>"room42": relative = 3 - 1 - 2 = 0</t>
          </li>
          <li>
            <t>AUTH_TOKEN: relative = 3 - 1 - 0 = 2</t>
          </li>
        </ul>
        <t>Compressed Block: ~12 bytes (including prefix and literal track name)
Uncompressed equivalent: ~526 bytes</t>
      </section>
      <section numbered="false" anchor="subsequent-subscribes-to-same-track">
        <name>Subsequent SUBSCRIBEs to Same Track</name>
        <t>No encoder stream instructions needed; namespace elements are in the table,
track name is sent as literal again:</t>
        <artwork><![CDATA[
SUBSCRIBE Message:
  Type: 0x43
  Request ID: 2
  Track Alias: 101
  Compressed Block:
    Required Insert Count: 3
    Base: Sign=0, Delta=0
    Indexed Field Line (Dynamic, relative index 1)  // "conference"
    Indexed Field Line (Dynamic, relative index 0)  // "room42"
    Literal Field Line (Static Name 0x0C, Value "audio")  // TRACK_NAME
    Indexed Field Line (Dynamic, relative index 2)  // AUTH_TOKEN
]]></artwork>
        <t>Each subsequent SUBSCRIBE to the same track: ~12 bytes instead of ~526 bytes.</t>
      </section>
      <section numbered="false" anchor="subscribe-to-different-track-same-namespace">
        <name>SUBSCRIBE to Different Track, Same Namespace</name>
        <t>The track name "video" is also short, so we send it as a literal. No encoder
stream instructions needed:</t>
        <artwork><![CDATA[
SUBSCRIBE Message:
  Type: 0x43
  Request ID: 3
  Track Alias: 102
  Compressed Block:
    Required Insert Count: 3
    Base: Sign=0, Delta=0
    Indexed Field Line (Dynamic, relative index 1)  // "conference"
    Indexed Field Line (Dynamic, relative index 0)  // "room42"
    Literal Field Line (Static Name 0x0C, Value "video")  // TRACK_NAME
    Indexed Field Line (Dynamic, relative index 2)  // AUTH_TOKEN
]]></artwork>
        <t>The namespace elements are reused; the different track name is sent as a literal.</t>
      </section>
    </section>
    <section numbered="false" anchor="code-point-summary">
      <name>Code Point Summary</name>
      <t>This appendix summarizes all code points defined or used by this extension.</t>
      <section numbered="false" anchor="setup-options">
        <name>Setup Options</name>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x10</td>
              <td align="left">MOQT_QPACK_MAX_TABLE_CAPACITY</td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">MOQT_QPACK_BLOCKED_STREAMS</td>
            </tr>
            <tr>
              <td align="left">0x12</td>
              <td align="left">MOQT_QPACK_INDEX_SETUP_AUTH</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="false" anchor="stream-types-1">
        <name>Stream Types</name>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1f107a60</td>
              <td align="left">QPACK_ENCODER_STREAM</td>
            </tr>
            <tr>
              <td align="left">0x1f107a61</td>
              <td align="left">QPACK_DECODER_STREAM</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="false" anchor="pseudo-parameter-types-2">
        <name>Pseudo-Parameter Types</name>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">TRACK_NAMESPACE_ELEMENT</td>
            </tr>
            <tr>
              <td align="left">0x0B</td>
              <td align="left">TRACK_NAMESPACE_SET</td>
            </tr>
            <tr>
              <td align="left">0x0C</td>
              <td align="left">TRACK_NAME</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="false" anchor="moqpack-message-types">
        <name>MOQPACK Message Types</name>
        <t>The MOQPACK flag bit (0x40) is OR'd with standard MOQT message types:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Standard</th>
              <th align="left">MOQPACK</th>
              <th align="left">Message</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x02</td>
              <td align="left">0x42</td>
              <td align="left">REQUEST_UPDATE</td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">0x43</td>
              <td align="left">SUBSCRIBE</td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">0x44</td>
              <td align="left">SUBSCRIBE_OK</td>
            </tr>
            <tr>
              <td align="left">0x05</td>
              <td align="left">0x45</td>
              <td align="left">REQUEST_ERROR</td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">0x46</td>
              <td align="left">PUBLISH_NAMESPACE</td>
            </tr>
            <tr>
              <td align="left">0x07</td>
              <td align="left">0x47</td>
              <td align="left">REQUEST_OK</td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">0x48</td>
              <td align="left">NAMESPACE</td>
            </tr>
            <tr>
              <td align="left">0x0D</td>
              <td align="left">0x4D</td>
              <td align="left">TRACK_STATUS</td>
            </tr>
            <tr>
              <td align="left">0x0E</td>
              <td align="left">0x4E</td>
              <td align="left">NAMESPACE_DONE</td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">0x51</td>
              <td align="left">SUBSCRIBE_NAMESPACE</td>
            </tr>
            <tr>
              <td align="left">0x16</td>
              <td align="left">0x56</td>
              <td align="left">FETCH</td>
            </tr>
            <tr>
              <td align="left">0x18</td>
              <td align="left">0x58</td>
              <td align="left">FETCH_OK</td>
            </tr>
            <tr>
              <td align="left">0x1D</td>
              <td align="left">0x5D</td>
              <td align="left">PUBLISH</td>
            </tr>
            <tr>
              <td align="left">0x1E</td>
              <td align="left">0x5E</td>
              <td align="left">PUBLISH_OK</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="false" anchor="qpack-library-adaptation-notes">
      <name>QPACK Library Adaptation Notes</name>
      <t>This appendix summarizes the modifications needed to use a standard QPACK
library (designed for HTTP/3) with this extension.</t>
      <section numbered="false" anchor="static-table">
        <name>Static Table</name>
        <t>Standard QPACK libraries include a static table of 99 predefined HTTP header
(name, value) pairs. For MOQPACK, the static table is reinterpreted: the
static table index directly represents the MOQT parameter type integer, and
there are no predefined values. Implementations need to replace or bypass the
HTTP static table. A simple approach is to treat the static table as a
mapping from index to a 4-byte big-endian representation of the parameter
type, with no predefined value.</t>
      </section>
      <section numbered="false" anchor="prohibited-encodings">
        <name>Prohibited Encodings</name>
        <t>Standard QPACK supports all field line representations. MOQPACK prohibits
several (see <xref target="field-line-interpretation"/>). Implementations should configure
the encoder to only emit:</t>
        <ul spacing="normal">
          <li>
            <t>Literal Field Line With Static Name Reference (for new parameter values)</t>
          </li>
          <li>
            <t>Indexed Field Line with Dynamic Table (for previously-inserted values)</t>
          </li>
          <li>
            <t>Indexed Field Line with Post-Base Index</t>
          </li>
        </ul>
        <t>And should configure the decoder to reject:</t>
        <ul spacing="normal">
          <li>
            <t>Indexed Field Line with Static Table</t>
          </li>
          <li>
            <t>Literal Field Line With Dynamic Name Reference</t>
          </li>
          <li>
            <t>Literal Field Line with Post-Base Name Reference</t>
          </li>
          <li>
            <t>Literal Field Line With Literal Name</t>
          </li>
          <li>
            <t>Huffman-encoded string literals (H=1)</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="encoder-stream-instructions-1">
        <name>Encoder Stream Instructions</name>
        <t>Only two insertion forms are used:</t>
        <ul spacing="normal">
          <li>
            <t>Insert With Static Name Reference</t>
          </li>
          <li>
            <t>Duplicate</t>
          </li>
        </ul>
        <t>Insert With Dynamic Name Reference and Insert With Literal Name are
not used.</t>
      </section>
      <section numbered="false" anchor="decoder-stream-request-ids-instead-of-stream-ids">
        <name>Decoder Stream: Request IDs Instead of Stream IDs</name>
        <t>Standard QPACK decoder instructions (Section Acknowledgment, Stream
Cancellation) carry QUIC stream IDs. In MOQPACK, these carry MOQT
Request IDs instead (see <xref target="decoder-instructions-with-request-ids"/>).
The encoder needs to track Compressed Blocks per Request ID rather than
per stream ID. This also enables MOQPACK to operate over WebTransport
where QUIC stream IDs are not exposed to the application.</t>
      </section>
      <section numbered="false" anchor="entry-size-calculation">
        <name>Entry Size Calculation</name>
        <t>The name size for all entries is fixed at 4 bytes (rather than the
variable-length header name strings used in HTTP). The 32-byte per-entry
overhead from <xref target="QPACK"/> Section 3.2.1 still applies.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
MRBTf8hsgPJ0CJsze6pPEo5moymgcEJCp3ckCvTGCWlG9CmHSTH2zDZkQWs/
l1SSt6UIVJwWhovGjW9wRTiGzgE7EE5HmEVwLz1GVsO/zif0RQwDrvnRnMUL
wGvAj+kYZAFg1efdISrFhWaGtQFey0vpixqs9RxHFnGtUuGtyA+AMiQTgMQo
Q6UuY1FX0KnyllraCV4OtPPbdIpu8oP22XnSwNDOxeX5m+NXx5PxkTFzJz4B
i5LkCAATANlGr3rhmwQ7bAx6EdheUsMD8+szs9e+8fg9qn1Yz87Nmm5SE0W9
N82DANw1AvAh/xeFmXCtnyPE28CpQetJ/RO2u4CqOJUbRnqzvr4GXaGv7ZHa
F6rzpoV2Di/ewjbEuIg1cNz05lZKm4j9JK7k+I7olpJsHlag5y+kEp6mK6sP
kgpIZRvQaiSmjgUcTDJDE/ZLCQKQtlRYy9ke7r7BHd0WDuBxrrpirXW2ssIA
yRa+UwYYz8QoxlTlBWY+Wy9YAPJWL1uU7t0D1qawFQYRZ5LPJZy+BNMIDe2K
feD0nehn8jdC8WzPFpWxxdhaEoMoeNJ0hk32pbVOjvIJFIz/G1AnF5goLaBo
8uHSDSLXdfazyQG1SWFRdAUr7cuMQ0nERmqDtyGBoXO11XqljQ9O6Baqas2e
dOmMsviwBKHtTkZBZRWTX9u49TOw7JDnktn7GwvrYzESYgpa9xP6lGNisRZS
08t0uqUUwZsbaX20puOPiriF+SH198RVEpJ0eEBDgIhEBgGnC5tgpdBMGZrM
MDgsuUsZR+jQ5RISuqSiW3RgXhOEhGqL3P0acn8XyVIb47fhqAFu9FmpSrHD
tqJAEqUilz31P6+73kXFs55C1h+k/J+OjSevc3xfV+hkn2utHbV/ok7ex+KP
YobvdCuvjd1akNkoOUnyCjgHhl4XD1aDeG2fuawzn88bendKDv6J2UTu4K4a
S3OSPrmMXgus7FAxXnyepZvZNMDANwFe3HCpTtWyKX96X+FUtHXqzgWzf3/9
ZLACTlYZWWzqItlcaVTPiR2I72AmSf+2bqkpnmNqebI8CaLEL0tGlRepAEdP
fBQWKDtkitG1i+u+JFVRsQalpABHbQYCjMlFB4Bmty3g9MQs2Sa0LyzLvbIY
dWPdrSezNxwekC+ToeANxMRwoPbcpwdgQB9+hfb2rlKdOipA+EFXXXuSYGBn
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
AXyB0xYCnwAA

-->

</rfc>
