<?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-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="portableweb-format">Portable Web Content Format (PortableWeb): Container and Manifest Specification</title>
    <seriesInfo name="Internet-Draft" value="draft-selvaraj-portableweb-format-01"/>
    <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="10"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>portable web content format</keyword>
    <keyword>portableweb</keyword>
    <keyword>pweb</keyword>
    <keyword>portable</keyword>
    <keyword>web content</keyword>
    <keyword>offline</keyword>
    <keyword>bundle</keyword>
    <keyword>interactive</keyword>
    <abstract>
      <?line 76?>

<t>This document defines the Portable Web Content Format (PortableWeb),
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 91?>

<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 Portable Web Content Format (PortableWeb) 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>Portable Web Content Format (PortableWeb):</strong></dt>
        <dd>
          <t>The file format defined by this specification for packaging
interactive web
content into a single self-contained, portable bundle. "PortableWeb" is
used as the short form throughout this document.</t>
        </dd>
        <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.",
  "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 653?>

<section numbered="false" anchor="changes-from-version-00">
      <name>Changes from Version 00</name>
      <t>The following changes were made in this revision:</t>
      <ul spacing="normal">
        <li>
          <t>The format's full name, "Portable Web Content Format
(PortableWeb)", is now
introduced explicitly on first use in the document title, abstract,
Introduction section, and Terminology section. Subsequent references
throughout the document continue to use "PortableWeb" as the short form.</t>
        </li>
        <li>
          <t>A formal terminology entry for
"Portable Web Content Format (PortableWeb)"
has been added to Section 2 to establish the short-form usage.</t>
        </li>
        <li>
          <t>The keyword list has been updated to include
"portable web content format" for improved discoverability.</t>
        </li>
        <li>
          <t>Editorial clarifications throughout; no normative changes.</t>
        </li>
      </ul>
    </section>
    <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:
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
uWnNXW8z2lXES3u0xq4QwkOy0vANBLaDknVeRCFXcm/azS7/bOJ7LeYFDJxJ
Mj1Mg1mbw15pt0+rHbwLyoGl4h40LBoXneh6jArHkLJPHqPd57v2O/97lYHI
HrbdOSRIrIOmx+4cm/Mx9jkV/TBykRVxvQ2iyYk9d2cB7DlTjamC6JP7tnxv
dndfGKT0yUjHUtBF7Pa+r6Q7w0JyuFkIcFgrubttozd8Wxvfk3ZPYkiEkJsF
NFRCYYu/0t3GJxze+FgDhsVHIsAEH31ie9A/giTxLtrZ6xhJPL6gjdQgRyYu
1JpPJoh/xmrWC5rk5Z2gjcFR0JQyp5BObrsDWViGj5bshQAkbgRSzmhcZoYj
OKhFG0qAAK4ZT3QpRfSoLfnLyp7AutyHgYM2ppTeyTzbZPZGjBJCFLbZow1B
jyJ7UrVFEx8wjC1QqN+sR7Iv2sIKX6RbOSWbm7bBEUuG4tIwfNpI+hlY31jL
uutPBt3a9h3LvTYajPrXr/Fx3rrkC6GcM4K7MVyW2nrj/pRoXy6sSPf9bXYZ
8JIQ1uHeZUICP1mundwqF6jxzWLWdd5z5LQrp3XV/C6BGaGBVDyvHcWV5Jqj
wlT6UNvMrLv1iFvYzQJfJNoze2AenVNGpFjQ6/dB2OLdFFaCzmuz7sBv8NuQ
68LVDMNYh6gSXGMc3lk8vN2i5mfidYf9X50hJOXBUPhq6+ikd5FQNGsXTfhw
Tzd3FPluTSQ6SLL4sO6Juirh7UXXLgDf+/QcTaS2Bz7YIka8Zt1KY5642QJj
ZkGLzytf0g3Oke+k2T4O44t9MG58znJwYuGk3/aNoHrn4kukCiQVGmD8pGe7
dt1vM7KNu8IjZW5Gwe1d8gPu6/KJXjfILWVM/hLxNbOAmH4kYDK+sQgPkLDq
boRkYO7eo961Z/5d8P3phTdP9t5QP7NtGOdU3ii8CUyP3FHjkU85y72vetQp
MbVPn6BLnlSRXDvVVZB3CbhvlLHdoV2X+fA2hDq86ds2etLK9zf2cifN47pE
6nvPdMb18vlMrwp1Rj24gSIUf86etHl3LnOPESBo4SHvC1wtsOy1MzzRzWDv
tulvK8iG7kPclvb8frQHRy6Fr1RbgYzoyTrteiSCsjmplBMlx+qLdrPQ9TPz
/OSjB+vxQv9kv7xij/YzuAT3UJDOlosSoJWQViBNcniKAfbO+4vgxgB5RIGc
YT5Vtupvj/pwhNFf9r6r/Ucfu9Cf9QvnSdibAgT0n1xfQStK6CLNJkU3wGq+
U3ub/N4/JxCdyQX93jA/ORA3H+OYCN/EwC+J8XJt0Wo6jT6cCBl0+s8HXFg7
+GXYD5zYVx81n6FKtb9OBfeumswe0Lrzt4N9ZqS5ouC7zj72BzFwQU54WckB
OoVwAbFcOsI3NcuNjy6ihEBy719rtHPjvUXjGvDI32IObRPe9+xO/IjKCi6t
8UeB8DcrxCVtOk8DMtK7jiSYEUTICmnDwor6F5zsXGvCF076+lgTrMA2eJe4
GPPT/4QICo5ILi3gQPEJGyzEWaxjfNF8kxccGr8U/oMgzse3lLN/oYN8MtN0
IK008yFzTolqLgo//Qc8DtydUjWO7UDX8y3fsbsVDPfaklog6wWvGieUloFN
dDj+IyJu/+cuHAOyz3OaIL1N3ihrJ/M0/+5X1u76mzp+ZMkL+i46TIklkPt3
o+7+XX/r1fBCDHBTF/d5Y+yuBmLrwdfFogcmLDV0JQF/56CfxV1ZZe/zxZbE
7uNuSfjNGMQeYKf/jb0J2d5zihHfvzj72GWX0eB2XFskySgsbvw9XxnhTesU
qgTbsa4y/t6Mb5WLBoHz/wIJXKj8EWcAAA==

-->

</rfc>
