Map the Web offers curated guidance for interacting with websites lacking rich semantics or fully-adopted standards.
Important
This project is in a non-stable, experimental state.
Schemas, data shapes, release cadence, and tag conventions may change without notice and without backwards-compatibility guarantees. Individual Maps may be added, restructured, or removed between releases. Consumers should be prepared for breaking changes. See Versioning for the current scheme.
Map the Web offers guidance on website content via a collection of living website "Maps". These Maps describe various categorical concerns of real websites. While semantics, standards, and specifications can help software developers navigate data concerns on the web, such conventions are sometimes incomplete, not widely implemented, or even leave a particular concern completely unaddressed. The primary goal of this project is to map out live websites that lack the implementation details that would otherwise enable software to interact with them as intended.
With the aforementioned goals and intent in mind, Maps should:
- only describe a website or website page, not how a particular consumer of Maps should behave
- only describe websites where a given concern is not otherwise accessible
- only capture shared web concerns; local network configurations are out of scope
- be as specific as possible while avoiding unrelated concerns
- be removed from a given Map if a site becomes navigable by other standard means for those concerns
- avoid staleness and be kept up-to-date
Because this project strives to deliver accountable curated guidance, the above concerns must ultimately and necessarily be vetted/validated by humans.
Maps are not intended to replace standard functionalities of the web, only to serve as a stopgap pending broader consensus and adoption of accepted standards.
While this project aspires to map all discovered gaps of the web, this is largely expected to be unachievable, given the size and ever-changing nature of the web. Consequently Maps should not be consumed as an absolute guarantee; websites can and will change.
Map-specific limitations can be found in their respective README documents.
Each Map lives in its own subdirectory under maps/, named after its core
concern (e.g. maps/forms/). A Map directory contains the JSON data file
(forms.jsonc), its versioned schema (e.g. forms.v0.schema.json), and a README.md documenting
the Map's structure and usage.
This project has two distinct versioning schemes for independent concerns: schema versions and release tags.
Each Map file includes a required top-level schemaVersion field that identifies
which revision of its schema the file conforms to. Schema versions use
semantic versioning:
- Major: Breaking changes to the data structure or semantics (e.g. removing/renaming required properties, adding required properties)
- Minor: Backwards-compatible additions (e.g. new optional properties, new enum values)
- Patch: Documentation or schema clarifications with no data-level impact
Consumers who wish to validate their Map data should check the
schemaVersion field before processing a Map and reject or warn on unrecognized
major versions. Build filenames include the
schema major version (e.g. forms.v1.json), so a breaking schema change can
ship alongside the previous version (forms.v1.json and forms.v2.json in the
same release), allowing legacy consumers to continue fetching the version they
support.
The major/minor/patch rules above apply once a Map has reached a stable major
version (1.0.0 or later). Maps still under initial development use a separate
prerelease scheme; see Prerelease Maps.
Map-specific versioning guidance can be found in their respective README documents.
Release tags use a date-based format: v<YYYYMMDD>.<run> (e.g. v20260324.1).
The date indicates when the build was produced; the run number disambiguates
multiple releases on the same day. Release tags reflect changes to Map data
(new or updated host entries) and are independent of schema versions.
A Map is considered prerelease when its schemaVersion major component is
0 (e.g. 0.1.0, 0.7.2). This follows the semantic versioning
convention that 0.y.z versions are reserved for initial development, where
"anything MAY change at any time" and "the public API SHOULD NOT be considered
stable".
Prerelease Maps carry no compatibility, stability, or longevity promises:
- The schema, key sets, value semantics, and overall structure may change in
any way between releases. The major/minor/patch bump rules described in
Schema Versions do not apply within
0.y.z; version bumps are at the Map author's discretion. - A prerelease Map may be removed from a release entirely without prior deprecation, notice, or transition period.
- The Backwards Compatibility commitment does not apply to prerelease Maps.
- Consumers should treat each release as effectively independent and re-verify their integration when updating.
Build filenames follow the same major-version convention as stable Maps. A Map
at schemaVersion: "0.3.0" builds to <map name>.v0.json and ships alongside
its schema as <map name>.v0.schema.json.
When a prerelease Map reaches stability, its schemaVersion bumps to 1.0.0
and subsequent releases produce <map name>.v1.json. The corresponding
<map name>.v0.json artifacts may continue to ship for a transition window or
may be dropped from the very next release; consumers must not rely on v0
artifacts remaining available once a v1 exists.
For Maps at a stable major version (1.0.0 or later), this project commits
to supporting the schema one major version back from the current major
version for a minimum of six months after the current major version first
releases. During this window, each release contains both
<map name>.v<N>.json and <map name>.v<N-1>.json artifacts (and their
corresponding schemas), so consumers can upgrade on their own timeline.
After the six-month window, support for v<N-1> may be extended or dropped
from subsequent releases without warning. Consumers depending on v<N-1>
should plan to upgrade within that window, or pin to a specific release tag
that still includes the artifact.
A stable Map's schema may be marked deprecated at any time to signal
that it has entered its end-of-life support window. Deprecation is authored
by setting the standard
JSON Schema 2020-12 "deprecated"
keyword at the root of the schema file; the release manifest mirrors this
with "deprecated": true on the matching version entry. The flag does not
indicate how long the support window will be, nor does it imply that a
newer major necessarily exists; it tells consumers to expect the schema to
be removed in a future release once the window closes. Consumers are
encouraged to read the manifest and surface a warning to their maintainers
prompting a migration; consumers that run a JSON Schema validator that
surfaces annotations against the shipped schema will also see the
deprecation.
This commitment does not apply to Prerelease Maps, which are dropped in their entirety upon graduation to a stable major.
Map data is published as optimized builds via GitHub Releases. Each release contains minified Map JSON files, their schemas, a build manifest, and SHA-256 checksums.
Latest build (always points to the newest release):
https://<project URL>/releases/latest/download/<map name>.v<N>.json
Pinned build (locked to a specific release tag):
https://<project URL>/releases/download/<tag>/<map name>.v<N>.json
<N> is the schema major version (e.g. 0 for prerelease Maps, 1 for the
first stable major).
Example: https://github.com/bitwarden/map-the-web/releases/latest/download/forms.v0.json
Each release includes a manifest.json with build metadata (timestamp, git SHA,
and per-map schema versions) that consumers can use to check staleness or verify
compatibility. A manifest.schema.json is shipped alongside so consumers can
validate the manifest's shape against the same contract the build enforces.
Each release also includes the corresponding schema file for each Map (e.g.
forms.v0.schema.json alongside forms.v0.json). Consumers that validate Map
data should validate against the schema included in the same release, as minor
version bumps may introduce new fields or values that would not pass validation
against a stale schema copy. Consumers that do not validate should be prepared
to gracefully handle unrecognized fields or values introduced by minor or patch
schema changes.
Project-wide mapping principles are described under
Mapping Philosophies. Map-specific authoring
guidance (e.g. how to choose selectors for the Forms Map) lives in each
Map's own README.md. This section captures cross-Map authoring workflows
that affect the project's build and release contract.
When a Map's schema needs a breaking change (see Schema Versions and the Map's own README for what qualifies as breaking for that Map), the maintainer ships the new major alongside the previous one by following these steps:
- Create the new schema file. Copy
maps/<name>/<name>.v<N>.schema.jsonto<name>.v<N+1>.schema.json. In the new file:- Update
$idso its last path segment is the new filename. - Update
properties.schemaVersion.constto the new version (e.g."2.0.0"). - Update
titleanddescriptionif they embed version-specific language.
- Update
- Apply the breaking changes in the new schema only. The old schema continues to ship unchanged so existing consumers aren't broken.
- Update the source data file (
maps/<name>/<name>.jsonc) to setschemaVersionto the new value and adjust the data shape to satisfy the new schema. - Register a downward migration in
scripts/build.mjs. Add an entry underMIGRATIONS["<name>"]keyed by the previous major (N); the function projects new-source-shape data into old-schema-shape data. - Mark the previous schema deprecated by adding
"deprecated": trueat the root of<name>.v<N>.schema.json. The flag flows through to the release manifest and the auto-generated release-notes "Deprecations" section. See Backwards Compatibility for the support semantics. - Update the Map's own README if the schema introduces or changes fields, key sets, categories, or other documented behavior.
- Verify with
npm run check && npm run build. A green build emits both<name>.v<N>.jsonand<name>.v<N+1>.json(with their schemas) and records"deprecated": trueagainst the older entry indist/manifest.json.
The build enforces these author invariants:
- The schema filename's major and
properties.schemaVersion.constmajor must agree. - The schema's
$idmust end with its filename. - The source's
schemaVersionmust match exactly one schema'sconst. - A migration must be registered for every target major below the source's.
- A warning is emitted when a Map has more than one non-deprecated schema (the typical healthy state is exactly one current schema; a draft schema above source is the expected exception).
Per-Map rules for what counts as a major change live in each Map's own README, since the criteria depend on the Map's shape and consumer expectations.
Note
Prerelease Maps (v0) don't follow this workflow; they are dropped in
their entirety upon graduation to a stable v1. See
Prerelease Maps.
-
Map: A JSON structure describing a categorical concern of real websites. Each Map focuses on a single concern (e.g. forms) and lives in a named subdirectory under
maps/alongside its documentation and schema. -
Consumer: Any application or tool that reads and acts on a Map. The Map describes what exists on a page; the consumer decides what to do with that information.
-
Author: Any maintainer of source Maps that get built to release channels.
-
Heuristic detection: Automated inference of page element purposes based on attributes, labels, or surrounding markup.
-
Prerelease Map: A Map whose
schemaVersionmajor component is0. Its shape, contents, and continued availability carry no compatibility or longevity guarantees. See Prerelease Maps. -
Deprecated schema: A Map schema major version that has entered its end-of-life support window. Indicated by
"deprecated": trueat the schema root and on the matching entry in the release manifest. Consumers should plan migration before the schema is removed in a future release. See Backwards Compatibility.