{"id":15152954,"url":"https://github.com/ipld/specs","last_synced_at":"2025-09-30T01:32:07.765Z","repository":{"id":46155770,"uuid":"64120719","full_name":"ipld/specs","owner":"ipld","description":"Content-addressed, authenticated, immutable data structures","archived":true,"fork":false,"pushed_at":"2022-06-28T23:04:58.000Z","size":10894,"stargazers_count":589,"open_issues_count":70,"forks_count":93,"subscribers_count":57,"default_branch":"master","last_synced_at":"2025-09-12T05:52:38.202Z","etag":null,"topics":["content-addressed","graph","hash","ipfs","ipld","linked-data"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-25T09:16:29.000Z","updated_at":"2025-08-28T13:44:43.000Z","dependencies_parsed_at":"2022-08-26T16:51:18.988Z","dependency_job_id":null,"html_url":"https://github.com/ipld/specs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ipld/specs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipld%2Fspecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipld%2Fspecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipld%2Fspecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipld%2Fspecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipld","download_url":"https://codeload.github.com/ipld/specs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipld%2Fspecs/sbom","scorecard":{"id":493940,"data":{"date":"2025-08-11","repo":{"name":"github.com/ipld/specs","commit":"a7b9376ebd43aeabba7d78487db3d9df456b7714"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":6,"reason":"Found 9/15 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/ipld/specs/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/ipld/specs/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/ipld/specs/main.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T19:57:32.534Z","repository_id":46155770,"created_at":"2025-08-19T19:57:32.534Z","updated_at":"2025-08-19T19:57:32.534Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274784432,"owners_count":25349091,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["content-addressed","graph","hash","ipfs","ipld","linked-data"],"created_at":"2024-09-26T16:42:13.019Z","updated_at":"2025-09-30T01:32:07.428Z","avatar_url":"https://github.com/ipld.png","language":"JavaScript","readme":"\n!!!\n\nThis document has **moved**.\n\nYou'll now find information like this in the [ipld/ipld](https://github.com/ipld/ipld/) meta-repo,\nand published to the web at https://ipld.io/ .\n\nAll documentation, fixtures, specifications, and web content is now gathered into that repo.\nPlease update your links, and direct new contributions there.\n\n!!!\n\n----\n\nIPLD Specifications\n===================\n\nThe goal of IPLD is to enable decentralized data-structures that are universally addressable and linkable which in turn will enable more decentralized applications.\nThese data-structures allow us to do for data what URLs and links did for HTML web pages.\nRead more about the principles that are guiding the ongoing development of IPLD in **[IPLD Foundational Principles](FOUNDATIONS.md)**.\n\nIPLD is not a single specification, it is a set of specifications.\nMany of the specifications in IPLD are inter-dependent.\n\n![What is IPLD?](./what_is_ipld.png)\n\n## IPLD Blocks\n\nThe block layer encompasses all content addressed block formats and specifies how blocks are addressed, how they self-describe their codec for encoding/decoding, and how blocks link between each other.\n\nIPLD blocks alone do not define data structures or types, although many codecs may convert these formats into native types, there are no type requirements or assurances about types at the block layer.\n\n**Documents:**\n\n|     |      |\n|-----|------|\n| [Concept: Block](block-layer/block.md) | [block-layer/block.md](block-layer/block.md) |\n| [Concept: Content Addressability](concepts/content-addressability.md) | [concepts/content-addressability.md](concepts/content-addressability.md) |\n| [Concept: Multihash](block-layer/multihash.md) | [block-layer/multihash.md](block-layer/multihash.md) |\n| [Specification: Content Addressable aRchives (CAR / .car)](block-layer/content-addressable-archives.md) | [block-layer/content-addressable-archives.md](block-layer/content-addressable-archives.md) |\n| [Specification: Graphsync](block-layer/graphsync/graphsync.md) | [block-layer/graphsync/graphsync.md](block-layer/graphsync/graphsync.md) |\n\n## IPLD Codecs\n\nCodecs serve as an intermediary between raw bytes and the IPLD Data Model. They determine how data is converted to and from the Data Model.\n\nCodecs vary in the completeness in which they can represent the IPLD Data Model. [DAG-CBOR](block-layer/codecs/dag-cbor.md) and [DAG-JSON](block-layer/codecs/dag-json.md) are native IPLD codecs that currently enable the most complete form of the Data Model. Their base codecs, CBOR and JSON, are also valid IPLD codecs, are unable to represent some Data Model kinds on their own, in particular the Link (CID) kind (and Bytes for JSON), so DAG-JSON and DAG-CBOR provide mechanisms to represent these kinds.\n\nIPLD can operate across a broad range of content-addressable codecs, including Git, Ethereum, Bitcoin, and more. [DAG-PB](block-layer/codecs/dag-pb.md) is a legacy IPLD format that is still actively used for representing file data for [IPFS](https://ipfs.io).\n\n|     |      |\n|-----|------|\n| [Concept: Serialization and Formats](block-layer/serialization-and-formats.md) | [block-layer/serialization-and-formats.md](block-layer/serialization-and-formats.md) |\n| [Specification: CIDs](block-layer/CID.md) | [block-layer/CID.md](block-layer/CID.md) |\n| [Specification: DAG-CBOR](block-layer/codecs/dag-cbor.md) | [block-layer/codecs/dag-cbor.md](block-layer/codecs/dag-cbor.md) |\n| [Specification: DAG-JSON](block-layer/codecs/dag-json.md) | [block-layer/codecs/dag-json.md](block-layer/codecs/dag-json.md) |\n| [Specification: DAG-PB](block-layer/codecs/dag-pb.md) | [block-layer/codecs/dag-pb.md](block-layer/codecs/dag-pb.md) |\n| [Specification: DAG-JOSE](block-layer/codecs/dag-jose.md) | [block-layer/codecs/dag-jose.md](block-layer/codecs/dag-jose.md) |\n\n## The IPLD Data Model\n\nThe Data Model describes a set of base required types to be implemented by a subset of IPLD codecs.\n\nWith these basic types authors can create various single-block data structures which can be read with predictable paths and selectors.\n\nWith just the data model, several data structures can be authored and put into a single block.\nThese data  structures can also link to one another, but a *single* collection (Map or List) cannot be spread across many blocks with only the Data Model.\n\nSince different systems and transports may impose block size limits (often 2mb or more) in order to control memory usage, larger collections need to be sharded over many blocks at the Schema Layer.\n\n**Documents:**\n\n|     |      |\n|-----|------|\n| [Specification: IPLD Data Model](data-model-layer/data-model.md) | [data-model-layer/data-model.md](data-model-layer/data-model.md) |\n| [Specification: IPLD Paths](data-model-layer/paths.md) | [data-model-layer/paths.md](data-model-layer/paths.md)\n| [Specification: IPLD Selectors](selectors/selectors.md) | [selectors/selectors.md](selectors/selectors.md) |\n\n### Schemas and Advanced Data Layouts\n\nIPLD Schemas define a mapping from the Data Model to instantiated data structures comprising complex layouts.\nSchemas add the ability to extend the IPLD Data Model to the wide variety of types required for typical programmatic interaction with a data source without the need to implement custom translation abstractions.\n\nSchemas will also serve as an enabling layer for complex multi-block data structures via Advanced Data Layouts by providing stability and consistency of data model use within individual blocks and defined interaction points for the logic required for building and interacting with advanced data layouts, such as multi-block Maps, Lists and Sets.\n\n**Documents:**\n\n|     |      |\n|-----|------|\n| [Concept: IPLD Multi-block Collections](data-structures/multiblock-collections.md) | [data-structures/multiblock-collections.md](data-structures/multiblock-collections.md) |\n| [Specification: IPLD Schemas](schemas/README.md) | [schemas/README.md](schemas/README.md) |\n| [Specification: HashMap](data-structures/hashmap.md) | [data-structures/hashmap.md](data-structures/hashmap.md) |\n| [Specification: FlexibleByteLayout](data-structures/flexible-byte-layout.md) | [data-structures/flexible-byte-layout.md](data-structures/flexible-byte-layout.md) |\n\n## Specification document status\n\nSpecification documents in this repository fit into one of two categories and have one of three possible statuses:\n\n- Prescriptive\n  - Exploratory\n  - Draft\n  - Final\n- Descriptive\n  - Draft\n  - Final\n\n**Prescriptive** specifications are intended to describe future  implementations or, in some cases, changes to existing implementations.\n\n**Descriptive** specifications describe existing behavior.\nIn many cases these specifications are not intended to drive new implementations and are only written to understand existing behaviors.\n\nDocuments labelled \"Specification\" in this repository will also be labelled with a descriptor that indicates the category and status.\ne.g. _\"Status: Prescriptive - Draft\"_ or _\"Status: Descriptive - Final\"_.\n\n## Design documentation \u0026 Library recommendations\n\nIncluded in this repository are some documents which chronicle our process in developing these specs,\nas well as some documents which are advisory to library authors (but not specifications, per se):\n\n- [design/...](/design) -- gathers all such documents\n- [design/history/...](/design/history) -- gathers research work and pre-spec content and notes\n- [design/libraries/...](/design/libraries) -- gathers recommendations for library authors\n\nThese documents may be useful to read for those who want to participate more deeply in the\ndesign and specification processes (as well as implementation processes!) of IPLD.\n\n## Contributing \u0026 Discussion\n\nSuggestions, contributions, criticisms are welcome.\n\nDiscussion of specifications happens in [this repository's issues](https://github.com/ipld/specs/issues) or via pull request. Discussion of IPLD more generally happens in the [IPLD repository](https://github.com/ipld/ipld/issues).\n\nCheck out our [contributing document](https://github.com/ipld/ipld/blob/master/contributing.md) for more information on how we work, and about contributing in general.\nPlease be aware that all interactions related to IPLD are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\n## Governance\n\nAll changes to documents must take place via pull request.\n\nPull requests are governed by different rules depending on the document type and status of that document:\n\nSpecifications:\n\n * Exploratory Stage\n   * Authors can merge changes into exploratory specifications at their own discretion\n   * Exploratory specifications live in the `design` directory until they reach the draft stage. Specs\n     names should include an alternative friendly naming convention (`-A`, `-B`, etc) while in this stage.\n * Draft Stage\n   * Authors must attempt to reach a consensus between all active participants before a merge\n   * If no objections are raised in a 48 hours period changes can be merged\n   * If objections cannot be resolved the change can be voted on by the IPLD Team\n * Final Stage\n   * Improvements that have a consensus can be merged\n   * Changes to behavior should not be merged unless absolutely necessary and  agreed upon by a vote of the IPLD Team\n\nConcepts and other documents (including README.md):\n\n * Authors must attempt to reach a consensus between all active participants before a merge\n * If no objections are raised in a 48 hours period changes can be merged\n * If objections cannot be resolved the change can be voted on by the IPLD Team\n\n## Glossary\n\n* **DAG**: Short for [\"Directed Acyclic Graph.\"](https://en.m.wikipedia.org/wiki/Directed_acyclic_graph)\nIt's a tree where two branches can point to the same sub-branch, but only in one direction\nso there's no possibility of recursion.\n\n## IPLD Team\n\nThe IPLD Team consists of currently active IPLD developers.\n\n* [@mikeal](https://github.com/mikeal)\n* [@vmx](https://github.com/vmx)\n* [@warpfork](https://github.com/warpfork)\n* [@rvagg](https://github.com/rvagg)\n* [@ribasushi](https://github.com/ribasushi)\n* [@mvdan](https://github.com/mvdan)\n\n## License\n\nThis repository is only for documents.\nAll of these are licensed under the [CC-BY-SA 3.0](https://ipfs.io/ipfs/QmVreNvKsQmQZ83T86cWSjPu2vR3yZHGPm5jnxFuunEB9u) license, © 2016 Protocol Labs Inc.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipld%2Fspecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipld%2Fspecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipld%2Fspecs/lists"}