Add ENSIP: ENS Package Manifest

I’m proposing a new draft ENSIP for a JSON package manifest format for ENS names.

The basic idea is that an ENS name can point to a package manifest using its contenthash record, following ENSIP-7. That manifest would then describe the package name, version, files, executable commands, and where clients can fetch the actual package contents.

The format is intentionally familiar. It follows the general shape of package metadata used by tools like npm, yarn, and bun, so existing package tooling concepts should carry over naturally. The difference is that the package can be discovered through ENS and distributed through ENS-compatible storage systems like IPFS.

What it specifies

  • Manifest location: published at the ENS name’s contenthash resource as a JSON document; recommended MIME type application/ens-pkg+json.

  • Top-level envelope: { manifest, signatures } so optional signatures sign the manifest object without mutating it.

  • Manifest fields: name, version, dist required; standard package metadata (author, contributors, description, license, repository, dependencies, devDependencies, scripts) optional; files and bin optional with npm-style semantics.

  • Distribution: a dist object with exactly one of tarball or directory. URIs may use https:, ipfs:, data:, or any other client-supported scheme. SRI-style integrity is required for non-content-addressed sources and optional for content-addressed ones (e.g. IPFS CIDs).

  • Signatures: optional signatures array, with EIP-191 as the recommended scheme, signing the canonical JSON serialization of the manifest object.

  • Client behavior: resolve contenthash β†’ fetch manifest β†’ verify signatures (optionally) β†’ fetch package contents β†’ verify integrity β†’ select file or executable

Please feel free to give feedback, including proposed improvements to the format. The main goal of this post is just to get the dialogue started around a canonical ENS-based package format.

1 Like

Users can already use contenthash to point to a package manifest using an existing format. It looks to me like the only new thing included in this ENSIP is the definition of a new package manifest format, which is unrelated to ENS functionality. Can you explain a realistic use case that can’t be achieved with existing standards and features, that this ENSIP would solve?