<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-selvaraj-portableweb-format-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="portableweb-format">PortableWeb Format: Container and Manifest Specification</title>
    <seriesInfo name="Internet-Draft" value="draft-selvaraj-portableweb-format-00"/>
    <author initials="O." surname="Selvaraj" fullname="Omprakash Selvaraj">
      <organization/>
      <address>
        <email>maintainer@portableweb.org</email>
        <uri>https://portableweb.org</uri>
      </address>
    </author>
    <date year="2026" month="June" day="09"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>portableweb</keyword>
    <keyword>pweb</keyword>
    <keyword>portable</keyword>
    <keyword>web content</keyword>
    <keyword>offline</keyword>
    <keyword>bundle</keyword>
    <keyword>interactive</keyword>
    <abstract>
      <?line 75?>

<t>This document defines the PortableWeb format, a file format for packaging
interactive web content — including HTML, CSS, JavaScript, and associated
media — into a single self-contained, portable bundle. A PortableWeb bundle
(<tt>.pweb</tt> file) can be saved, shared, and rendered by a compatible viewer
application on any platform, entirely offline, without a web server, without
association with a Web origin, and without being confined to a web browser.</t>
      <t>This specification defines the container format and manifest schema for
PortableWeb bundles at version 0.1. Companion specifications covering the
runtime sandbox, storage model, signing, and inter-bundle communication are
forthcoming.</t>
    </abstract>
  </front>
  <middle>
    <?line 89?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The emergence of AI-assisted development tools has fundamentally changed the
economics of creating interactive web content. Presentations, educational
simulations, small games, data visualizations, and scientific models that
previously required days of skilled development can now be generated in
minutes. This has created a massive and growing category of ephemeral Web
applications that need to be shared and used immediately across devices and
platforms, without a traditional server for distribution, without association
with a Web origin, and without being confined to a web browser.</t>
      <t>No existing file format treats interactive web content as a portable,
self-contained, immediately runnable unit. Current options each force an
unacceptable tradeoff:</t>
      <ul spacing="normal">
        <li>
          <t>Deploying to a web server requires hosting infrastructure and network
connectivity, and is unsuitable for ephemeral or single-use content.</t>
        </li>
        <li>
          <t>Publishing to an application store requires developer accounts, review
cycles, and ongoing maintenance — appropriate for long-lived commercial
software, but not for the large volumes of interactive artifacts being
created today.</t>
        </li>
        <li>
          <t>PDF loses interactivity entirely.</t>
        </li>
        <li>
          <t>EPUB 3 <xref target="EPUB3"/> is constrained to a document and book model. Its
JavaScript support is an enhancement to a reading experience, not a
general-purpose runtime. EPUB cannot meaningfully represent a game loop,
a real-time simulation, or an interactive scientific model.</t>
        </li>
        <li>
          <t>Web Bundles, proposed in the Web Platform Incubator Community Group, was
designed as a network transport optimization and never achieved broad
implementation. It has no offline-first execution model and no
inter-bundle communication mechanism.</t>
        </li>
        <li>
          <t>The Web Application Manifest describes how an already-deployed web
application presents itself when installed on a device. It is
fundamentally tied to a Web origin — the application lives on a server
and the manifest is a descriptor for that server-hosted experience. It
does not address content that has no server and no origin.</t>
        </li>
        <li>
          <t>WebAssembly <xref target="WASM"/> is a runtime technology, not a distribution format.
It may be used as a resource within a PortableWeb bundle — alongside
HTML, CSS, and JavaScript — where high-performance code execution is
needed. However, WebAssembly defines no packaging structure, manifest,
viewer model, or permission system for self-contained content
distribution. The relationship is complementary: WebAssembly can run
inside a PortableWeb bundle; it does not address the same problem.</t>
        </li>
      </ul>
      <t>The PortableWeb format addresses this gap. A <tt>.pweb</tt> bundle is a single file
that contains all the HTML, CSS, JavaScript, and media required to render an
interactive experience. It can be opened by a compatible viewer application
on any platform — desktop, mobile, or otherwise — entirely offline, without
deployment infrastructure, without a Web origin, and without being confined
to a web browser. The content inside is built entirely on standard web
technologies, keeping the format firmly within the web platform ecosystem.</t>
      <t>The format is content-model agnostic. A PortableWeb bundle may contain a
book, a game, an interactive presentation, an educational simulation, a 3D
experience, a scientific model, a collaborative application, or any other
interactive content built on web technologies. The format imposes no
constraints on the content model.</t>
      <section anchor="design-goals">
        <name>Design Goals</name>
        <t>The PortableWeb format is designed to:</t>
        <ul spacing="normal">
          <li>
            <t>Be openable by any compatible viewer on any platform, entirely offline.</t>
          </li>
          <li>
            <t>Behave like a document: saveable, copyable, shareable, and archivable.</t>
          </li>
          <li>
            <t>Support any interactive content built on standard web technologies.</t>
          </li>
          <li>
            <t>Operate without a Web origin and without being confined to a web browser.</t>
          </li>
          <li>
            <t>Declare capabilities and permissions upfront in a structured manifest.</t>
          </li>
          <li>
            <t>Provide a stable, versioned format with long-term backwards compatibility.</t>
          </li>
          <li>
            <t>Be identifiable without unpacking (via magic bytes and a mimetype entry).</t>
          </li>
          <li>
            <t>Remain simple enough that a conforming implementation can be built quickly.</t>
          </li>
        </ul>
      </section>
      <section anchor="scope-of-this-document">
        <name>Scope of This Document</name>
        <t>This document defines:</t>
        <ol spacing="normal" type="1"><li>
            <t>The container format: how a <tt>.pweb</tt> file is structured as a ZIP archive
(Section 3).</t>
          </li>
          <li>
            <t>The manifest schema: the <tt>manifest.json</tt> file that every bundle must
contain (Section 4).</t>
          </li>
          <li>
            <t>Security considerations for implementations (Section 6).</t>
          </li>
          <li>
            <t>IANA considerations for the <tt>application/vnd.portableweb+zip</tt> media type
(Section 7).</t>
          </li>
        </ol>
        <t>The following are out of scope for this document and will be addressed in
companion specifications:</t>
        <ul spacing="normal">
          <li>
            <t>The runtime sandbox and security model (<tt>SANDBOX</tt>).</t>
          </li>
          <li>
            <t>The frozen subset of supported web platform features per spec version
(<tt>RUNTIME-PROFILE</tt>).</t>
          </li>
          <li>
            <t>Cryptographic signing of bundles (<tt>SIGNING</tt>).</t>
          </li>
          <li>
            <t>Storage, permissions, and user data isolation (<tt>STORAGE</tt>).</t>
          </li>
          <li>
            <t>Inter-bundle communication via local channels such as Bluetooth and
Wi-Fi Direct (<tt>COMMS</tt>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>
      <t>The following terms are used throughout this document:</t>
      <dl>
        <dt><strong>Bundle:</strong></dt>
        <dd>
          <t>A single <tt>.pweb</tt> file conforming to this specification.</t>
        </dd>
        <dt><strong>Viewer:</strong></dt>
        <dd>
          <t>Software that opens, renders, and sandboxes a bundle.</t>
        </dd>
        <dt><strong>Manifest:</strong></dt>
        <dd>
          <t>The <tt>manifest.json</tt> file at the root of a bundle archive.</t>
        </dd>
        <dt><strong>Entry file:</strong></dt>
        <dd>
          <t>The HTML file the viewer loads first, declared in the manifest.</t>
        </dd>
        <dt><strong>Package boundary:</strong></dt>
        <dd>
          <t>The set of files contained within a bundle. Resources outside this
boundary are external resources.</t>
        </dd>
      </dl>
    </section>
    <section anchor="container-format">
      <name>Container Format</name>
      <section anchor="file-extension-and-media-type">
        <name>File Extension and Media Type</name>
        <t>A PortableWeb bundle uses the following identifiers:</t>
        <ul spacing="normal">
          <li>
            <t><strong>File extension:</strong> <tt>.pweb</tt></t>
          </li>
          <li>
            <t><strong>Media type:</strong> <tt>application/vnd.portableweb+zip</tt></t>
          </li>
          <li>
            <t><strong>Magic bytes:</strong> <tt>50 4B 03 04</tt> (PK\003\004) — the standard ZIP local
file header signature.</t>
          </li>
        </ul>
        <t>A viewer MUST accept files with the <tt>.pweb</tt> extension or the
<tt>application/vnd.portableweb+zip</tt> media type. A viewer SHOULD also identify
bundles by inspecting the <tt>mimetype</tt> entry described in Section 3.3.</t>
      </section>
      <section anchor="outer-container">
        <name>Outer Container</name>
        <t>A bundle MUST be a valid ZIP archive. The ISO/IEC 21320-1 Document Container
File profile <xref target="ISO21320"/> is RECOMMENDED. Specifically:</t>
        <ul spacing="normal">
          <li>
            <t>The archive MUST NOT be encrypted.</t>
          </li>
          <li>
            <t>The archive MUST NOT be split across multiple files.</t>
          </li>
          <li>
            <t>File and directory names inside the archive MUST use forward slashes (<tt>/</tt>)
as path separators, encoded in UTF-8.</t>
          </li>
          <li>
            <t>The archive SHOULD NOT contain absolute paths or <tt>..</tt> path components.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-mimetype-entry">
        <name>The <tt>mimetype</tt> Entry</name>
        <t>A bundle MUST contain a file named <tt>mimetype</tt> at the archive root with the
following properties:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Contents:</strong> the ASCII string <tt>application/vnd.portableweb+zip</tt> with no
trailing newline or whitespace.</t>
          </li>
          <li>
            <t><strong>Position:</strong> the first entry in the ZIP archive.</t>
          </li>
          <li>
            <t><strong>Compression:</strong> STORED (method 0, uncompressed).</t>
          </li>
          <li>
            <t><strong>No extra fields</strong> in the local file header.</t>
          </li>
        </ul>
        <t>This convention, borrowed from EPUB <xref target="EPUB3"/>, allows a tool to identify a
PortableWeb bundle by reading the first approximately 80 bytes of the file
without unpacking the archive.</t>
      </section>
      <section anchor="the-manifestjson-entry">
        <name>The <tt>manifest.json</tt> Entry</name>
        <t>A bundle MUST contain a file named <tt>manifest.json</tt> at the archive root,
encoded as UTF-8 JSON <xref target="RFC8259"/> without a byte order mark. The manifest
schema is defined in Section 4. At minimum, the manifest declares:</t>
        <ul spacing="normal">
          <li>
            <t>The spec version the bundle targets.</t>
          </li>
          <li>
            <t>A unique bundle identifier.</t>
          </li>
          <li>
            <t>The bundle version.</t>
          </li>
          <li>
            <t>A human-readable title.</t>
          </li>
          <li>
            <t>The path to the entry HTML file.</t>
          </li>
          <li>
            <t>Any declared permissions.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-entry-file">
        <name>The Entry File</name>
        <t>A bundle MUST contain the file referenced by the manifest's <tt>entry</tt> field.
The entry file MUST have a <tt>.html</tt> or <tt>.htm</tt> extension and MUST be valid
HTML5. The entry file is loaded by the viewer in a sandboxed context. All
other files in the bundle are addressable from the entry file using relative
paths.</t>
      </section>
      <section anchor="recommended-file-layout">
        <name>Recommended File Layout</name>
        <t>The following layout is RECOMMENDED but not required. Bundles MAY use any
layout consistent with this section.</t>
        <artwork><![CDATA[
example.pweb (zip)
├── mimetype                  (required, first, uncompressed)
├── manifest.json             (required, at root)
├── index.html                (required, entry file)
├── assets/                   (recommended: images, fonts, icons)
├── scripts/                  (recommended: JavaScript files)
├── styles/                   (recommended: CSS files)
├── media/                    (recommended: audio and video)
└── data/                     (recommended: JSON and static data)
]]></artwork>
      </section>
      <section anchor="reserved-paths">
        <name>Reserved Paths</name>
        <t>The following paths at the archive root are reserved by this specification.
Bundles SHOULD NOT create files at these paths unless following an explicit
PortableWeb sub-specification:</t>
        <ul spacing="normal">
          <li>
            <t><tt>mimetype</tt></t>
          </li>
          <li>
            <t><tt>manifest.json</tt></t>
          </li>
          <li>
            <t><tt>META-INF/</tt> (reserved for signature manifests and integrity data)</t>
          </li>
          <li>
            <t><tt>.well-known/</tt> (reserved for future use)</t>
          </li>
        </ul>
      </section>
      <section anchor="bundle-identification">
        <name>Bundle Identification</name>
        <t>A viewer SHOULD identify a file as a PortableWeb bundle if any of the
following conditions are true:</t>
        <ol spacing="normal" type="1"><li>
            <t>The file extension is <tt>.pweb</tt>.</t>
          </li>
          <li>
            <t>The file's declared media type is <tt>application/vnd.portableweb+zip</tt>.</t>
          </li>
          <li>
            <t>The first ZIP entry is a STORED file named <tt>mimetype</tt> containing exactly
<tt>application/vnd.portableweb+zip</tt>.</t>
          </li>
        </ol>
        <t>A viewer SHOULD reject any file claiming to be a PortableWeb bundle that
fails to validate against this section.</t>
      </section>
      <section anchor="versioning">
        <name>Versioning</name>
        <t>The container format is versioned independently from companion
specifications. This document describes container version 0.1.</t>
        <t>Future container versions MUST remain backwards compatible. A bundle
declaring <tt>spec_version: "1.0"</tt> in its manifest MUST remain openable by any
future viewer that claims support for v1.0 bundles. New features are added
in new spec versions; existing features are not removed. This guarantee is
the foundation of the PortableWeb archival promise.</t>
      </section>
    </section>
    <section anchor="manifest-schema">
      <name>Manifest Schema</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>Every PortableWeb bundle contains a <tt>manifest.json</tt> file at its archive root.
The manifest is the bundle's structured metadata: it identifies the bundle,
declares its entry point, specifies requested permissions, and carries rights
and authorship information.</t>
      </section>
      <section anchor="format">
        <name>Format</name>
        <t>The manifest MUST be a valid JSON document <xref target="RFC8259"/> encoded as UTF-8
without a byte order mark. The top-level value MUST be a JSON object.</t>
      </section>
      <section anchor="required-fields">
        <name>Required Fields</name>
        <t>The following fields MUST be present in every conforming manifest:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>spec_version</tt></td>
              <td align="left">string</td>
              <td align="left">The PortableWeb container spec version this bundle targets. Format: <tt>"MAJOR.MINOR"</tt>. For v0.1 bundles, the value MUST be <tt>"0.1"</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>id</tt></td>
              <td align="left">string</td>
              <td align="left">A globally unique identifier for this bundle in reverse-domain notation (e.g., <tt>"org.example.my-bundle"</tt>). MUST contain only lowercase alphanumeric characters, dots, and hyphens.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>version</tt></td>
              <td align="left">string</td>
              <td align="left">The bundle's own version, following Semantic Versioning 2.0 <xref target="SEMVER"/> (e.g., <tt>"1.0.0"</tt>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>title</tt></td>
              <td align="left">string</td>
              <td align="left">A human-readable title for the bundle. MUST NOT exceed 200 characters.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>entry</tt></td>
              <td align="left">string</td>
              <td align="left">The path within the bundle to the HTML entry file. MUST end in <tt>.html</tt> or <tt>.htm</tt>. MUST NOT begin with <tt>/</tt>.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="recommended-fields">
        <name>Recommended Fields</name>
        <t>The following fields are RECOMMENDED:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>description</tt></td>
              <td align="left">string</td>
              <td align="left">A short description of the bundle. MUST NOT exceed 1000 characters.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>author</tt></td>
              <td align="left">object</td>
              <td align="left">An object with <tt>name</tt> (required), <tt>email</tt> (optional), and <tt>url</tt> (optional).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>created</tt></td>
              <td align="left">string</td>
              <td align="left">The creation date in ISO 8601 format (e.g., <tt>"2026-05-24T00:00:00Z"</tt>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>icon</tt></td>
              <td align="left">string</td>
              <td align="left">Path within the bundle to a square icon (SVG or PNG RECOMMENDED).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>permissions</tt></td>
              <td align="left">object</td>
              <td align="left">Declared capabilities (see Section 4.5). If omitted, all permissions default to their specified default values.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>rights</tt></td>
              <td align="left">object</td>
              <td align="left">Copyright and license information (see Section 4.6).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>viewport</tt></td>
              <td align="left">object</td>
              <td align="left">Hints to the viewer for initial window sizing (see Section 4.7).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>content_type</tt></td>
              <td align="left">string</td>
              <td align="left">A hint describing the nature of the content. RECOMMENDED values: <tt>"game"</tt>, <tt>"presentation"</tt>, <tt>"book"</tt>, <tt>"simulation"</tt>, <tt>"tool"</tt>, <tt>"report"</tt>, <tt>"visualization"</tt>, <tt>"education"</tt>.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="permissions">
        <name>Permissions</name>
        <t>Permissions are declared upfront in the manifest and are not requested at
runtime. Any permission not declared is denied by default. Viewers SHOULD
present declared permissions to the user when a bundle is first opened.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Permission</th>
              <th align="left">Type</th>
              <th align="left">Default</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>network</tt></td>
              <td align="left">boolean</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow fetch and XMLHttpRequest to non-bundle URLs. Archival bundles SHOULD keep this <tt>false</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>camera</tt></td>
              <td align="left">boolean or string</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow getUserMedia video access. A string value is shown to the user as a justification.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>microphone</tt></td>
              <td align="left">boolean or string</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow getUserMedia audio access.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>geolocation</tt></td>
              <td align="left">boolean or string</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow the Geolocation API.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>clipboard_write</tt></td>
              <td align="left">boolean</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow programmatic writes to the system clipboard.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>notifications</tt></td>
              <td align="left">boolean</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow OS-level notifications while the bundle is open.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>fullscreen</tt></td>
              <td align="left">boolean</td>
              <td align="left">
                <tt>true</tt></td>
              <td align="left">Allow the Fullscreen API. Default is <tt>true</tt> due to low risk.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>storage</tt></td>
              <td align="left">string</td>
              <td align="left">
                <tt>"isolated"</tt></td>
              <td align="left">Storage mode. Allowed values: <tt>"none"</tt> (no persistent storage), <tt>"isolated"</tt> (scoped localStorage and IndexedDB, isolated per bundle).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>peers</tt></td>
              <td align="left">boolean</td>
              <td align="left">
                <tt>false</tt></td>
              <td align="left">Allow inter-bundle communication via local channels. Defined in the companion COMMS specification.</td>
            </tr>
          </tbody>
        </table>
        <t>Future versions of this specification MAY define additional permission keys.
Viewers MUST ignore unknown permission keys when the bundle targets a spec
version the viewer supports.</t>
      </section>
      <section anchor="the-rights-object">
        <name>The <tt>rights</tt> Object</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>copyright</tt></td>
              <td align="left">string</td>
              <td align="left">Human-readable copyright notice (e.g., <tt>"© 2026 Jane Doe"</tt>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>license</tt></td>
              <td align="left">string</td>
              <td align="left">An SPDX license identifier <xref target="SPDX"/> (e.g., <tt>"MIT"</tt>, <tt>"CC-BY-4.0"</tt>, <tt>"CC0-1.0"</tt>, <tt>"proprietary"</tt>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>license_url</tt></td>
              <td align="left">string</td>
              <td align="left">URL to the full license text.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>contact</tt></td>
              <td align="left">string</td>
              <td align="left">Contact information for licensing inquiries.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="the-viewport-object">
        <name>The <tt>viewport</tt> Object</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>preferred_width</tt></td>
              <td align="left">integer</td>
              <td align="left">Suggested initial window width in CSS pixels.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>preferred_height</tt></td>
              <td align="left">integer</td>
              <td align="left">Suggested initial window height in CSS pixels.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>resizable</tt></td>
              <td align="left">boolean</td>
              <td align="left">Whether the viewer window should be resizable. Default: <tt>true</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>min_width</tt></td>
              <td align="left">integer</td>
              <td align="left">Minimum window width in CSS pixels.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>min_height</tt></td>
              <td align="left">integer</td>
              <td align="left">Minimum window height in CSS pixels.</td>
            </tr>
          </tbody>
        </table>
        <t>These are hints, not requirements. Viewers MAY override them based on the
user's environment or platform conventions.</t>
      </section>
      <section anchor="example-minimal-valid-manifest">
        <name>Example: Minimal Valid Manifest</name>
        <sourcecode type="json"><![CDATA[
{
  "spec_version": "0.1",
  "id": "org.example.minimal",
  "version": "1.0.0",
  "title": "Minimal Example",
  "entry": "index.html"
}
]]></sourcecode>
      </section>
      <section anchor="example-full-manifest">
        <name>Example: Full Manifest</name>
        <sourcecode type="json"><![CDATA[
{
  "spec_version": "0.1",
  "id": "org.example.solar-system",
  "version": "1.2.0",
  "title": "Interactive Solar System",
  "description": "Explore planet orbits and relative scales of our solar system.",
  "content_type": "simulation",
  "author": {
    "name": "Jane Doe",
    "email": "jane@example.com",
    "url": "https://janedoe.example.com"
  },
  "created": "2026-05-24T00:00:00Z",
  "icon": "assets/icon.svg",
  "entry": "index.html",
  "permissions": {
    "network": false,
    "camera": false,
    "microphone": false,
    "storage": "isolated",
    "fullscreen": true,
    "peers": false
  },
  "rights": {
    "copyright": "© 2026 Jane Doe",
    "license": "CC-BY-4.0",
    "license_url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "viewport": {
    "preferred_width": 1280,
    "preferred_height": 800,
    "resizable": true,
    "min_width": 800,
    "min_height": 600
  }
}
]]></sourcecode>
      </section>
      <section anchor="validation">
        <name>Validation</name>
        <t>Viewers and tools SHOULD validate manifests against the schema before
opening a bundle. A formal JSON Schema document for this manifest will be
published at <tt>https://portableweb.org/spec/manifest.schema.json</tt>.</t>
      </section>
    </section>
    <section anchor="interoperability-considerations">
      <name>Interoperability Considerations</name>
      <t>PortableWeb bundles are ZIP-based containers with a manifest that identifies
the package structure, entry resource, declared capabilities, and packaged
resources. Interoperability depends on viewers interpreting the manifest
consistently, resolving resource paths consistently, and enforcing package
boundaries consistently.</t>
      <t>Implementations SHOULD use UTF-8 for manifest data and resource identifiers.
Resource paths SHOULD be treated as case-sensitive, package-relative paths.
Implementations SHOULD avoid relying on platform-specific filesystem
behavior such as case-insensitive path matching, absolute paths, drive
letters, symbolic links, or path separators other than <tt>/</tt>.</t>
      <t>Viewers SHOULD reject or normalize ambiguous paths, duplicate entries, and
references that resolve outside the package boundary.</t>
      <t>PortableWeb bundles may contain common web resource formats including HTML,
CSS, JavaScript, JSON, images, fonts, audio, and video. Rendering behavior
may vary between web engines and viewer implementations, particularly for
optional web platform features, media codecs, and device APIs. Bundle
authors SHOULD use widely supported web standards and SHOULD declare
required or requested capabilities in the manifest. Viewers SHOULD ignore
unknown manifest fields that are not required for safe processing.</t>
      <t>A conforming local PortableWeb bundle SHOULD be interpretable using only
the resources it contains, unless the manifest and viewer policy explicitly
allow external network access.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>PortableWeb files may contain active web content including HTML, CSS,
ECMAScript, WebAssembly (if permitted by the viewer), and other resources
referenced by the manifest. Implementations MUST treat PortableWeb files as
untrusted content unless obtained from a verified trusted source.</t>
      <section anchor="sandboxed-execution">
        <name>Sandboxed Execution</name>
        <t>PortableWeb content is intended to be processed by a viewer, not executed
as native operating-system code. Viewers that render active content SHOULD
do so in a sandboxed execution environment with no ambient access to the
host application, local files, device APIs, credentials, cookies, or other
user data except where the user has explicitly granted access. Viewers
SHOULD:</t>
        <ul spacing="normal">
          <li>
            <t>Isolate storage per bundle.</t>
          </li>
          <li>
            <t>Restrict or mediate network access according to user or application policy.</t>
          </li>
          <li>
            <t>Prevent script access to the viewer application's privileged interface.</t>
          </li>
          <li>
            <t>Apply the security model of the underlying web rendering engine.</t>
          </li>
          <li>
            <t>Prevent active content from escaping the sandbox through navigation,
popups, downloads, same-origin confusion, or unrestricted access to
host-provided APIs.</t>
          </li>
        </ul>
      </section>
      <section anchor="permission-model">
        <name>Permission Model</name>
        <t>A PortableWeb manifest declares the capabilities requested by the bundle.
These declarations are inputs to the viewer's security policy and are not
security guarantees by themselves. Viewers SHOULD apply a deny-by-default
policy and SHOULD allow only the capabilities explicitly permitted by both
the manifest and the viewer or user policy. Viewers MAY ignore or further
restrict manifest-declared capabilities.</t>
      </section>
      <section anchor="confidentiality-and-integrity">
        <name>Confidentiality and Integrity</name>
        <t>The media type itself provides no confidentiality, integrity, authentication,
authorization, or replay protection. Where confidentiality or integrity is
required, it SHOULD be provided externally, for example by HTTPS or TLS
during transport, operating-system file protections, digital signatures, or
checksums. Viewers SHOULD make trust decisions based on the source and
integrity of the package before enabling higher-risk capabilities.</t>
        <t>Cryptographic signing of PortableWeb bundles is defined in the companion
SIGNING specification.</t>
      </section>
      <section anchor="zip-container-security">
        <name>ZIP Container Security</name>
        <t>PortableWeb files are ZIP-based binary containers. The security
considerations for ZIP containers and compressed content apply.
Implementations SHOULD protect against:</t>
        <ul spacing="normal">
          <li>
            <t>Decompression bombs and excessive memory or disk usage.</t>
          </li>
          <li>
            <t>Deeply nested archives.</t>
          </li>
          <li>
            <t>Duplicate or ambiguous filenames.</t>
          </li>
          <li>
            <t>Absolute paths and path traversal sequences such as <tt>../</tt>.</t>
          </li>
          <li>
            <t>Symbolic links and platform-specific path handling issues.</t>
          </li>
          <li>
            <t>Filename normalization conflicts.</t>
          </li>
          <li>
            <t>Mismatches between ZIP metadata and actual content.</t>
          </li>
        </ul>
        <t>Implementations SHOULD impose reasonable limits on total uncompressed size,
file count, nesting depth, path length, and individual resource size before
extraction or rendering. Implementations SHOULD NOT extract files outside
an application-controlled storage area.</t>
      </section>
      <section anchor="external-resources">
        <name>External Resources</name>
        <t>PortableWeb packages may contain internal links between packaged resources
and may optionally reference external resources when the <tt>network</tt> permission
is granted. Viewers SHOULD clearly distinguish packaged local resources from
external resources and SHOULD mediate or block external navigation and
network requests according to user or application policy.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-type-registration">
        <name>Media Type Registration</name>
        <t>This document registers the following media type:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>vnd.portableweb+zip</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>Binary.</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See Section 6 of this document.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>See Section 5 of this document.</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>This document.</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>PortableWeb viewer applications, authoring tools, packaging tools,
validation tools, document-management systems, file managers, web servers,
content-distribution systems, and AI content generation tools that create,
distribute, inspect, validate, store, or render PortableWeb packages.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>Fragment identifier semantics are not defined by this registration for the
PortableWeb container as a whole. Fragment identifiers within packaged
resources are interpreted according to the rules of the individual resource
media type. If a future version of this specification defines
PortableWeb-specific fragment identifier syntax, this registration will be
updated.</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t>Magic number(s): <tt>50 4B 03 04</tt> (PK\003\004)</t>
          </dd>
          <dt/>
          <dd>
            <t>File extension(s): <tt>.pweb</tt></t>
          </dd>
          <dt/>
          <dd>
            <t>Macintosh file type code: N/A</t>
          </dd>
          <dt/>
          <dd>
            <t>Object Identifiers: N/A</t>
          </dd>
          <dt>Person to contact for further information:</dt>
          <dd>
            <t>Omprakash Selvaraj, maintainer@portableweb.org</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None.</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>Omprakash Selvaraj</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>Omprakash Selvaraj</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray">
              <organization/>
            </author>
            <date year="2017" month="December"/>
          </front>
        </reference>
        <reference anchor="ISO21320" target="https://www.iso.org/standard/60101.html">
          <front>
            <title>ISO/IEC 21320-1: Document Container File — Part 1: Core</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed">
              <organization/>
            </author>
            <author initials="J." surname="Klensin">
              <organization/>
            </author>
            <author initials="T." surname="Hansen">
              <organization/>
            </author>
            <date year="2013" month="January"/>
          </front>
        </reference>
        <reference anchor="EPUB3" target="https://www.w3.org/TR/epub-33/">
          <front>
            <title>EPUB 3.3</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="SEMVER" target="https://semver.org/">
          <front>
            <title>Semantic Versioning 2.0.0</title>
            <author>
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="SPDX" target="https://spdx.org/licenses/">
          <front>
            <title>SPDX License List</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ZIP" target="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT">
          <front>
            <title>APPNOTE.TXT — .ZIP File Format Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="WASM" target="https://www.w3.org/TR/wasm-core-2/">
          <front>
            <title>WebAssembly Core Specification</title>
            <author>
              <organization/>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WAM" target="https://www.w3.org/TR/appmanifest/">
          <front>
            <title>Web Application Manifest</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 644?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The PortableWeb container format draws on conventions established by EPUB 3
<xref target="EPUB3"/> for the <tt>mimetype</tt> entry and ZIP-based packaging, and on the
broader web platform standards ecosystem for the runtime model. The author
thanks the IANA media types reviewer and the W3C Portable Web Content Format
Community Group participants for their feedback on early drafts of this
specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61d63LjxpX+j6foUn54xktSlGY8cZjaqtVoNLac0WVF2U5S
qbJAoEnCAgEEDUhDj53KQ+TnvsC+xj5KnmTPd053owFSYzu7Ka8tAo3T3ed+
697xeBw1WZPrmTq4LusmXuT6W71Qb8t6EzczdVoWTZwVulZxkaqLuMiW2jRq
XukkW2ZJ3GRlcRDFi0WtHwhEZUE86sV4ySAOorRMinhDE6R1vGzGRucPcR1/
P94dO55OIwKpV2W9namsWJaRaRebzBiapdlWBOP87PZtlFX1TDV1a5rj6fR3
0+MornU8UydVldslGV7ujY7z8W220dFjWd+v6rKtCEKR6krTvwrahoce3est
DUpnkVJjFSxNfvs/7Av+QQ9VQgsjSPy7XC5zQhX/vWiL1A7LaEQdJ032oKPI
NLSw7+K8LGgzW20is4nr5ru/tmWjzUwVZVRlWENTJvJeKUNz1npp/O/tpvsZ
xW2zLmtZtqD5alPV8X1s1mpuUU0vldKbOMtniv5tKfofwS4nZb3iUW2dzdS6
aSozOzwcDogKJhNtBPPdvD09Pjr6nf3z86PfvnR/Hn/GT2kXwlm3a62+ih/i
eVJnVaOuFt/rpFGXZcO0Us++ml9dPldv4iYm6hCyknVcrLTlQQbU7RL/A05p
/7cT9bqOt/wwJbaZqePp0W/HR8f05Hx+dXz04njaW8cBPT08PztV/Gp8NFNv
yqTdgBM6Pn+b5Vr98+//UNdEGHUEEaj1gYCJ65VuOvw8Pj5OMlMCN4dM2LhO
D19Nj6ZHk3WzyfsL+yyKwNF9BL76/MXnvSVe6DSL1S3xel/GHEOvMtPUgrbr
ukx02tbMFE+g6HKi3tZap/2nX03UH3JdmKzYQeiXcWF00V/5i/H0iJ6cXX/9
+kVvsXiiXkxePImcxxeMm9ubQ121i/GLF4c9yMf4cn528c3ZTQ/unHi1aLJE
faNrCGdWrNTxZDqZ7p3I6M2DrnmiwboB/frNH/uw6YF6lyW0fU3/Nc1+mFX6
niHmMtIA9J/Pr3ugTq6vL69uzya3f7xlhpnQAGEf4dw+BffOU90/ku6aJHGy
1st8Oyl0c0jSRirTHCYxzdu0aUazB1MRnG9P5he9lZDGPjGEh0W+ZXb9BTP3
yfMYm804oS/HxwMSHfN8O9OFytabhV8wUVxVGzt6hxei8Xis4gUYPGmi6Had
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

-->

</rfc>
