<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-dispatch-mime-protobuf-07" number="9996" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="en" updates="" obsoletes="" prepTime="2026-07-30T19:43:49" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-dispatch-mime-protobuf-07" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9996" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Media Types for Protocol Buffers">Media Types for Protocol Buffers</title>
    <seriesInfo name="RFC" value="9996" stream="IETF"/>
    <author initials="M." surname="Kucherawy" fullname="Murray S. Kucherawy" role="editor">
      <organization showOnFrontPage="true"/>
      <address>
        <email>superuser@gmail.com</email>
      </address>
    </author>
    <author initials="W." surname="Kumari" fullname="Warren Kumari">
      <organization showOnFrontPage="true">Google</organization>
      <address>
        <email>warren@kumari.net</email>
      </address>
    </author>
    <author initials="R." surname="Sloan" fullname="Rob Sloan">
      <organization showOnFrontPage="true">Google</organization>
      <address>
        <email>varomodt@gmail.com</email>
      </address>
    </author>
    <date month="07" year="2026"/>
    <area>ART</area>
    <workgroup>dispatch</workgroup>
    <keyword>MIME</keyword>
    <keyword>Protobuf</keyword>
    <keyword>media type</keyword>
    <keyword>application</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document registers media types for Protocol Buffers, a common extensible mechanism for serializing structured data.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9996" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2026 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-words">Key Words</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-payload-description">Payload Description</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encoding-considerations">Encoding Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-versions">Versions</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-media-type-application-prot">Media Type: <tt>application/protobuf</tt></xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-media-type-application-proto">Media Type: <tt>application/protobuf+json</tt></xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="intro" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">Protocol Buffers (also called "Protobuf") were introduced in 2008 as a free, open-source, platform-independent mechanism for transport and storage of structured data.  The use of Protobuf has become increasingly common, and Protobuf implementations exist in many languages (C++, C#, Dart, Go, Java, Kotlin, Objective-C, Python, JavaScript, Ruby, Swift, and perhaps others). See <xref target="Protobuf" format="default" sectionFormat="of" derivedContent="Protobuf"/> for more information.</t>
      <t indent="0" pn="section-1-2">Protobuf consists of an interface definition language (IDL), wire encoding formats, and language-specific implementations (typically involving a generated API) so that clients and servers can be easily deployed using a common schema.  Protobuf supports two wire formats for interchange: the format in <xref target="Binary" format="default" sectionFormat="of" derivedContent="Binary"/> (which is optimized for wire efficiency) and the format in <xref target="ProtoJSON" format="default" sectionFormat="of" derivedContent="ProtoJSON"/> (which maps the Protobuf schema onto a JSON structure).</t>
      <t indent="0" pn="section-1-3">Serialized objects are occasionally transported within media that make use of media types (see <xref target="RFC2045" format="default" sectionFormat="of" derivedContent="RFC2045"/>) to identify payloads. Accordingly,
current and historical media types used for this purpose would benefit from registration. IANA has registered two Protobuf media types; see <xref target="iana" format="default" sectionFormat="of" derivedContent="Section 7"/>.</t>
    </section>
    <section anchor="key-words" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-key-words">Key Words</name>
      <t indent="0" pn="section-2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="description" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-payload-description">Payload Description</name>
      <t indent="0" pn="section-3-1">The media types defined in this document are used in the transport of serialized objects only.  The IDL and object definitions, if transported, would be used with any appropriate text media type.
In the three examples below, only the third (depicted in JSON) would ever be used with these media types.</t>
      <ol spacing="normal" indent="adaptive" start="1" type="1" pn="section-3-2">
  <li pn="section-3-2.1" derivedCounter="1.">
          <t indent="0" pn="section-3-2.1.1">An example of using the IDL to specify a "Person" object:</t>
          <sourcecode markers="false" pn="section-3-2.1.2">
edition = "2023";

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}</sourcecode>
        </li>
        <li pn="section-3-2.2" derivedCounter="2.">
          <t indent="0" pn="section-3-2.2.1">An example of python code that uses code generated from the IDL definition above to create an instance of a "Person" object:</t>
          <sourcecode type="python" markers="false" pn="section-3-2.2.2">
person = Person()
person.id = 1234
person.name = "John Doe"
person.email = "jdoe@example.com"</sourcecode>
        </li>
        <li pn="section-3-2.3" derivedCounter="3.">
          <t indent="0" pn="section-3-2.3.1">An example of the above instance expressed in JSON:</t>
          <sourcecode type="json" markers="false" pn="section-3-2.3.2">
{
  "name": "John Doe",
  "id": 1234,
  "email": "jdoe@example.com"
}</sourcecode>
        </li>
      </ol>
    </section>
    <section anchor="encoding" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-encoding-considerations">Encoding Considerations</name>
      <t indent="0" pn="section-4-1">Protobuf supports the formats in <xref target="Binary" format="default" sectionFormat="of" derivedContent="Binary"/> and <xref target="ProtoJSON" format="default" sectionFormat="of" derivedContent="ProtoJSON"/> for interchange, both of which are platform-independent.
      For binary forms that need to transit non-binary transports, a base64 encoding (e.g., <xref target="RFC4648" format="default" sectionFormat="of" derivedContent="RFC4648"/>) is recommended.</t>
      <t indent="0" pn="section-4-2">Both of the media types defined in this document include an optional "encoding" parameter indicating which encoding format is to be used with that particular payload.  This is included for future extensibility. Valid values for this parameter are "binary" and "json", and other values <bcp14>MUST</bcp14> be treated as an error.  See <xref target="iana" format="default" sectionFormat="of" derivedContent="Section 7"/> for the defaults for each of the two registered media types. Using "binary" for the JSON type or "json" for the binary type <bcp14>MUST</bcp14> be treated as an error.</t>
    </section>
    <section anchor="versions" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-versions">Versions</name>
      <t indent="0" pn="section-5-1"><xref target="Proto2" format="default" sectionFormat="of" derivedContent="Proto2"/> was the first public version of the Protobuf schema language; <xref target="Proto3" format="default" sectionFormat="of" derivedContent="Proto3"/>, <xref target="Edition2023" format="default" sectionFormat="of" derivedContent="Edition2023"/>, and <xref target="Edition2024" format="default" sectionFormat="of" derivedContent="Edition2024"/> came later, with <xref target="Edition2024" format="default" sectionFormat="of" derivedContent="Edition2024"/> being current at the time of writing. Future editions of the IDL are expected.</t>
      <t indent="0" pn="section-5-2">These versions refer to evolutions of the schema of the IDL, not the wire format. Accordingly, a serialized object generated by any of these is compatible with any other. The media type registrations in <xref target="iana" format="default" sectionFormat="of" derivedContent="Section 7"/> include support for versioning of the wire format, should it ever change, but do not refer to the IDL, which can evolve independently.</t>
      <t indent="0" pn="section-5-3">Note that there may be semantic changes implicit in the IDL version, which can affect the interpretation of otherwise compatible bits on the wire. For example, in Proto2, unknown values of an enumeration were interpreted as invalid, whereas in Proto3, they are retained.</t>
      <t indent="0" pn="section-5-4">Clients <bcp14>MUST</bcp14> reject payloads with an unsupported version number.</t>
    </section>
    <section anchor="security" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">The payload for these media types contains no directly executable code. While it is common for a Protobuf definition to be used as input to a code generator, which then produces something executable, that applies to the schema language, not serializations.</t>
      <t indent="0" pn="section-6-2">Protobuf provides no security, privacy, integrity, or compression services. Clients or servers for which this is a concern should avail themselves of solutions that provide such capabilities (e.g., <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/>). Implementations should be careful when processing Protobuf like any binary format; for example, a malformed request to a Protobuf server could be crafted to allocate a very large amount of memory, potentially impacting other operations on that server.</t>
      <t indent="0" pn="section-6-3">Protobuf supports embedded content in <tt>string</tt> or <tt>bytes</tt> fields: In both cases, applications should ensure that the format of the content is precisely as expected. Note that UTF-8 validation of <tt>string</tt> fields is optional (see <xref target="ProtoFeatures" format="default" sectionFormat="of" derivedContent="ProtoFeatures"/>), and a manual well-formedness check may be necessary. Further, handling Unicode text generally can be quite complex (due to the problems discussed in <xref target="RFC9839" format="default" sectionFormat="of" derivedContent="UniChars"/> and <xref target="RFC8264" format="default" sectionFormat="of" derivedContent="RFC8264"/>, for example), so it is best to rely on well-supported internationalization libraries whenever possible.</t>
      <t indent="0" pn="section-6-4">In order to safely use Protobuf serializations on the Web, it is important to ensure that they are not interpreted as another document type, such as JavaScript: We recommend base64-encoding binary Protobuf responses whenever possible to prevent parsing as active content. Servers should generally follow the advice of <xref target="RFC9205" format="default" sectionFormat="of" derivedContent="RFC9205"/> to prevent content sniffing for all binary formats.</t>
      <t indent="0" pn="section-6-5">Further, when using JSON serializations, it is important that it is clear to browsers that the content is pure JSON so that they can inhibit Cross-Site Script Inclusion or side-channel attacks using techniques such as Cross-Origin Read Blocking <xref target="CORB" format="default" sectionFormat="of" derivedContent="CORB"/>. Per <xref target="RFC6839" format="default" sectionFormat="of" derivedContent="RFC6839"/>, pure JSON content is indicated by a <tt>+json</tt> subtype suffix (see also <xref target="MIMESNIFF" format="default" sectionFormat="of" derivedContent="MIMESNIFF"/>); thus, when serializing Protobuf content to JSON, users <bcp14>MUST</bcp14> use the <tt>application/protobuf+json</tt> media type. When using JSON, <tt>charset</tt> can prevent certain encoding confusion attacks, so users should specify it for all JSON encodings.</t>
      <t indent="0" pn="section-6-6">In the type described in <xref target="Any" format="default" sectionFormat="of" derivedContent="Any"/>, there is technically a link that was intended to be dereferenced to obtain schemas for a given type; however, this is not supported by widely used Protobuf implementations.</t>
    </section>
    <section anchor="iana" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">As per the process defined in <xref target="RFC6838" format="default" sectionFormat="of" derivedContent="RFC6838"/>, IANA has registered <tt>application/protobuf</tt> and <tt>application/protobuf+json</tt> in the "Media Types" registry. The following are deprecated aliases: <tt>application/x-protobuf</tt>, <tt>application/x-protobuffer</tt>, and <tt>application/x-protobuf+json</tt>.</t>
      <section anchor="registration-for-the-applicationprotobuf-media-type" numbered="true" removeInRFC="false" toc="include" pn="section-7.1">
        <name slugifiedName="name-media-type-application-prot">Media Type: <tt>application/protobuf</tt></name>
        <dl spacing="normal" newline="false" indent="3" pn="section-7.1-1">
          <dt pn="section-7.1-1.1">Type name:</dt>
          <dd pn="section-7.1-1.2">application</dd>
          <dt pn="section-7.1-1.3">Subtype name:</dt>
          <dd pn="section-7.1-1.4">protobuf</dd>
          <dt pn="section-7.1-1.5">Required parameters:</dt>
          <dd pn="section-7.1-1.6">N/A</dd>
          <dt pn="section-7.1-1.7">Optional parameters:</dt>
          <dd pn="section-7.1-1.8">
            <t indent="0" pn="section-7.1-1.8.1"><br/></t>
            <dl spacing="normal" newline="true" indent="3" pn="section-7.1-1.8.2">
              <dt pn="section-7.1-1.8.2.1"><tt>encoding</tt></dt>
              <dd pn="section-7.1-1.8.2.2">Indicates the type of Protobuf
            encoding and is "binary" by default for
            <tt>application/protobuf</tt>, indicating the format in <xref target="Binary" format="default" sectionFormat="of" derivedContent="Binary"/>. At the time of writing, no other
            encoding can be used for <tt>application/protobuf</tt>, so this
            parameter is for extensibility.</dd>
              <dt pn="section-7.1-1.8.2.3"><tt>version</tt></dt>
              <dd pn="section-7.1-1.8.2.4">Indicates the version of the
            wire encoding specification (not the schema language), with
            a default of <tt>1</tt>. At the time of writing, no Protobuf wire
            encodings are versioned, so this parameter is for
            extensibility. Unversioned wire encodings should be treated as
            having version <tt>1</tt>.</dd>
            </dl>
          </dd>
          <dt pn="section-7.1-1.9">Encoding considerations:</dt>
          <dd pn="section-7.1-1.10">binary</dd>
          <dt pn="section-7.1-1.11">Security considerations:</dt>
          <dd pn="section-7.1-1.12">See <xref target="security" format="default" sectionFormat="of" derivedContent="Section 6"/> of RFC 9996.</dd>
          <dt pn="section-7.1-1.13">Interoperability considerations:</dt>
          <dd pn="section-7.1-1.14">The Protobuf
        specification <xref target="Protobuf" format="default" sectionFormat="of" derivedContent="Protobuf"/> includes versioning provisions to ensure backward
        compatibility when encountering payloads with unknown properties.</dd>
          <dt pn="section-7.1-1.15">Published specification:</dt>
          <dd pn="section-7.1-1.16">
            <xref target="Protobuf" format="default" sectionFormat="of" derivedContent="Protobuf"/></dd>
          <dt pn="section-7.1-1.17">Applications that use this media type:</dt>
          <dd pn="section-7.1-1.18">Any application
        with a need to exchange or store structured objects across platforms
        or implementations.</dd>
          <dt pn="section-7.1-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-7.1-1.20">N/A</dd>
          <dt pn="section-7.1-1.21">Additional information:</dt>
          <dd pn="section-7.1-1.22">
            <t indent="0" pn="section-7.1-1.22.1"><br/></t>
            <dl spacing="compact" indent="3" newline="false" pn="section-7.1-1.22.2">
              <dt pn="section-7.1-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-7.1-1.22.2.2">
                <tt>application/x-protobuf</tt>, <tt>application/x-protobuffer</tt></dd>
              <dt pn="section-7.1-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-7.1-1.22.2.4">N/A</dd>
              <dt pn="section-7.1-1.22.2.5">File extension(s):</dt>
              <dd pn="section-7.1-1.22.2.6">N/A</dd>
              <dt pn="section-7.1-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-7.1-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-7.1-1.23">Person &amp; email address to contact for further
        information:</dt>
          <dd pn="section-7.1-1.24">Protobuf Team &lt;protobuf-team@google.com&gt;</dd>
          <dt pn="section-7.1-1.25">Intended usage:</dt>
          <dd pn="section-7.1-1.26">COMMON</dd>
          <dt pn="section-7.1-1.27">Restrictions on usage:</dt>
          <dd pn="section-7.1-1.28">N/A</dd>
          <dt pn="section-7.1-1.29">Author:</dt>
          <dd pn="section-7.1-1.30">
            <t indent="0" pn="section-7.1-1.30.1"><contact fullname="Rob Sloan"/> &lt;rmsj@google.com&gt;, Protobuf Team &lt;protobuf-team@google.com&gt;</t>
          </dd>
          <dt pn="section-7.1-1.31">Change controller:</dt>
          <dd pn="section-7.1-1.32">IETF</dd>
        </dl>
      </section>
      <section anchor="registration-for-applicationprotobufjson-media-type" numbered="true" removeInRFC="false" toc="include" pn="section-7.2">
        <name slugifiedName="name-media-type-application-proto">Media Type: <tt>application/protobuf+json</tt></name>
        <dl spacing="normal" newline="false" indent="3" pn="section-7.2-1">
          <dt pn="section-7.2-1.1">Type name:</dt>
          <dd pn="section-7.2-1.2">application</dd>
          <dt pn="section-7.2-1.3">Subtype name:</dt>
          <dd pn="section-7.2-1.4">protobuf+json</dd>
          <dt pn="section-7.2-1.5">Required parameters:</dt>
          <dd pn="section-7.2-1.6">
            <tt>charset</tt>, which must be set to <tt>utf-8</tt> (case-insensitive)</dd>
          <dt pn="section-7.2-1.7">Optional parameters:</dt>
          <dd pn="section-7.2-1.8">
            <t indent="0" pn="section-7.2-1.8.1"><br/></t>
            <dl spacing="normal" newline="true" indent="3" pn="section-7.2-1.8.2">
              <dt pn="section-7.2-1.8.2.1"><tt>encoding</tt></dt>
              <dd pn="section-7.2-1.8.2.2">Indicates the type of
            Protobuf encoding and is <tt>json</tt> by default for
            <tt>application/protobuf+json</tt>, indicating the format in <xref target="ProtoJSON" format="default" sectionFormat="of" derivedContent="ProtoJSON"/>. At the time of writing, no other
            encoding can be used for <tt>application/protobuf+json</tt>, so
            this parameter is for extensibility.</dd>
              <dt pn="section-7.2-1.8.2.3"><tt>version</tt></dt>
              <dd pn="section-7.2-1.8.2.4">Indicates the version of the
            wire encoding specification (not the schema language), with a 
            default of <tt>1</tt>. At the time of writing, no protobuf wire
            encodings are versioned, so this parameter is for
            extensibility. Unversioned wire encodings should be treated as
            having version <tt>1</tt>.</dd>
            </dl>
          </dd>
          <dt pn="section-7.2-1.9">Encoding considerations:</dt>
          <dd pn="section-7.2-1.10">Same as encoding considerations
        of <tt>application/json</tt> as specified in <xref target="RFC8259" sectionFormat="comma" section="11" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8259#section-11" derivedContent="RFC8259"/>.</dd>
          <dt pn="section-7.2-1.11">Security considerations:</dt>
          <dd pn="section-7.2-1.12">See <xref target="security" format="default" sectionFormat="of" derivedContent="Section 6"/> of RFC 9996.</dd>
          <dt pn="section-7.2-1.13">Interoperability considerations:</dt>
          <dd pn="section-7.2-1.14">The Protobuf
        specification <xref target="Protobuf" format="default" sectionFormat="of" derivedContent="Protobuf"/> includes versioning provisions to ensure backward
        compatibility when encountering payloads with unknown properties.</dd>
          <dt pn="section-7.2-1.15">Published specification:</dt>
          <dd pn="section-7.2-1.16">
            <xref target="Protobuf" format="default" sectionFormat="of" derivedContent="Protobuf"/></dd>
          <dt pn="section-7.2-1.17">Applications that use this media type:</dt>
          <dd pn="section-7.2-1.18">Any application
        with a need to exchange or store structured objects across platforms
        or implementations.</dd>
          <dt pn="section-7.2-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-7.2-1.20">N/A</dd>
          <dt pn="section-7.2-1.21">Additional information:</dt>
          <dd pn="section-7.2-1.22">
            <t indent="0" pn="section-7.2-1.22.1"><br/></t>
            <dl spacing="compact" indent="3" newline="false" pn="section-7.2-1.22.2">
              <dt pn="section-7.2-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-7.2-1.22.2.2">application/x-protobuf+json</dd>
              <dt pn="section-7.2-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-7.2-1.22.2.4">N/A</dd>
              <dt pn="section-7.2-1.22.2.5">File extension(s):</dt>
              <dd pn="section-7.2-1.22.2.6">N/A</dd>
              <dt pn="section-7.2-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-7.2-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-7.2-1.23">Person &amp; email address to contact for further
        information:</dt>
          <dd pn="section-7.2-1.24">Protobuf Team &lt;protobuf-team@google.com&gt;</dd>
          <dt pn="section-7.2-1.25">Intended usage:</dt>
          <dd pn="section-7.2-1.26">COMMON</dd>
          <dt pn="section-7.2-1.27">Restrictions on usage:</dt>
          <dd pn="section-7.2-1.28">N/A</dd>
          <dt pn="section-7.2-1.29">Author:</dt>
          <dd pn="section-7.2-1.30">
            <t indent="0" pn="section-7.2-1.30.1"><contact fullname="Rob Sloan"/> &lt;rmsj@google.com&gt;, Protobuf Team &lt;protobuf-team@google.com&gt;</t>
          </dd>
          <dt pn="section-7.2-1.31">Change controller:</dt>
          <dd pn="section-7.2-1.32">IETF</dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9839" to="UniChars"/>
    <references anchor="sec-combined-references" pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references anchor="sec-normative-references" pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="Protobuf" target="https://protobuf.dev/" quoteTitle="true" derivedAnchor="Protobuf">
          <front>
            <title>Protocol Buffers</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2045" target="https://www.rfc-editor.org/info/rfc2045" quoteTitle="true" derivedAnchor="RFC2045">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t indent="0">This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2045"/>
          <seriesInfo name="DOI" value="10.17487/RFC2045"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" quoteTitle="true" derivedAnchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t indent="0">This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" quoteTitle="true" derivedAnchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t indent="0">This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6839" target="https://www.rfc-editor.org/info/rfc6839" quoteTitle="true" derivedAnchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t indent="0">A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" quoteTitle="true" derivedAnchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t indent="0">JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t indent="0">This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
      </references>
      <references anchor="sec-informative-references" pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="Any" target="https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/any.proto" quoteTitle="true" derivedAnchor="Any">
          <front>
            <title>any.proto Schema Definition</title>
            <author/>
            <date day="12" month="February" year="2026"/>
          </front>
          <refcontent>commit 97921a5</refcontent>
        </reference>
        <reference anchor="Binary" target="https://protobuf.dev/programming-guides/encoding" quoteTitle="true" derivedAnchor="Binary">
          <front>
            <title>Protobuf Binary Wire Encoding Spec</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="CORB" target="https://www.chromium.org/Home/chromium-security/corb-for-developers" quoteTitle="true" derivedAnchor="CORB">
          <front>
            <title>Cross-Origin Read Blocking for Web Developers</title>
            <author>
              <organization showOnFrontPage="true">Chromium</organization>
            </author>
          </front>
        </reference>
        <reference anchor="Edition2023" target="https://protobuf.dev/reference/protobuf/edition-2023-spec" quoteTitle="true" derivedAnchor="Edition2023">
          <front>
            <title>Protocol Buffers Edition 2023 Language Specification</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="Edition2024" target="https://protobuf.dev/reference/protobuf/edition-2024-spec" quoteTitle="true" derivedAnchor="Edition2024">
          <front>
            <title>Protocol Buffers Edition 2024 Language Specification</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="MIMESNIFF" target="https://mimesniff.spec.whatwg.org/#mime-type-groups" quoteTitle="true" derivedAnchor="MIMESNIFF">
          <front>
            <title>MIME Sniffing - MIME Type Groups</title>
            <author>
              <organization showOnFrontPage="true">WHATWG</organization>
            </author>
          </front>
          <refcontent>WHATWG Living Standard</refcontent>
          <annotation>Commit snapshot: <eref target="https://mimesniff.spec.whatwg.org/commit-snapshots/67bde18bc4f75a5c5b5dfb1217161137ce385124/" brackets="angle"/>.</annotation>
        </reference>
        <reference anchor="Proto2" target="https://protobuf.dev/reference/protobuf/proto2-spec" quoteTitle="true" derivedAnchor="Proto2">
          <front>
            <title>Protocol Buffers Language Specification (Proto2 Syntax)</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="Proto3" target="https://protobuf.dev/reference/protobuf/proto3-spec" quoteTitle="true" derivedAnchor="Proto3">
          <front>
            <title>Protocol Buffers Language Specification (Proto3)</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="ProtoFeatures" target="https://protobuf.dev/editions/features/" quoteTitle="true" derivedAnchor="ProtoFeatures">
          <front>
            <title>Protobuf Feature Settings for Editions</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="ProtoJSON" target="https://protobuf.dev/programming-guides/json" quoteTitle="true" derivedAnchor="ProtoJSON">
          <front>
            <title>Protobuf JSON Wire Encoding Spec</title>
            <author>
              <organization showOnFrontPage="true">Google, LLC</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC8264" target="https://www.rfc-editor.org/info/rfc8264" quoteTitle="true" derivedAnchor="RFC8264">
          <front>
            <title>PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="M. Blanchet" initials="M." surname="Blanchet"/>
            <date month="October" year="2017"/>
            <abstract>
              <t indent="0">Application protocols using Unicode code points in protocol strings need to properly handle such strings in order to enforce internationalization rules for strings placed in various protocol slots (such as addresses and identifiers) and to perform valid comparison operations (e.g., for purposes of authentication or authorization). This document defines a framework enabling application protocols to perform the preparation, enforcement, and comparison of internationalized strings ("PRECIS") in a way that depends on the properties of Unicode code points and thus is more agile with respect to versions of Unicode. As a result, this framework provides a more sustainable approach to the handling of internationalized strings than the previous framework, known as Stringprep (RFC 3454). This document obsoletes RFC 7564.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8264"/>
          <seriesInfo name="DOI" value="10.17487/RFC8264"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9205" target="https://www.rfc-editor.org/info/rfc9205" quoteTitle="true" derivedAnchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t indent="0">This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="RFC9839" target="https://www.rfc-editor.org/info/rfc9839" quoteTitle="true" derivedAnchor="UniChars">
          <front>
            <title>Unicode Character Repertoire Subsets</title>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="August" year="2025"/>
            <abstract>
              <t indent="0">This document discusses subsets of the Unicode character repertoire for use in protocols and data formats and specifies three subsets recommended for use in IETF specifications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9839"/>
          <seriesInfo name="DOI" value="10.17487/RFC9839"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.a-1"><contact fullname="Orie Steele"/> provided valuable feedback to this work.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="M." surname="Kucherawy" fullname="Murray S. Kucherawy" role="editor">
        <organization showOnFrontPage="true"/>
        <address>
          <email>superuser@gmail.com</email>
        </address>
      </author>
      <author initials="W." surname="Kumari" fullname="Warren Kumari">
        <organization showOnFrontPage="true">Google</organization>
        <address>
          <email>warren@kumari.net</email>
        </address>
      </author>
      <author initials="R." surname="Sloan" fullname="Rob Sloan">
        <organization showOnFrontPage="true">Google</organization>
        <address>
          <email>varomodt@gmail.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
