Open Index Protocol (OIP) is a neutral data layer for publishing, discovering, and verifying content on permanent storage. It combines cryptographic identity, tamper‑evident records, and flexible templates to power search and apps across networks.
A public, permanent catalog for content and data. OIP standardizes how records are described, signed, stored, and indexed. It is transport‑agnostic and storage‑agnostic with first‑class support for Arweave and search via Elasticsearch.
Identity → Records → Storage → Index → Resolve
OIP began as the Decentralized Library of Alexandria. Its trajectory spans open media indexing, scientific data, and public records. Selected milestones below.
2014–2015
2016
June 2019
2018–2019
PLoS One paper: "A blockchain-based distributed public database for electron tomography".
2020
2020–2025
OSF paper: "DDX: An Interface To Interoperable Scientific Gateways".
arXiv paper: "Towards an Open and Scalable Music Metadata Layer".
The protocol is simple by design. It treats identity, structure, and permanence as first principles. Everything else composes on top.
Message signatures bind records to creators. Delegated publish supported.
Map any domain. Remap per app. Drefs for nested references.
Elasticsearch shards for templates, creators, and records. Fast queries and RAG.
Arweave for durable media. Content addressing for integrity and portability.
Templates standardize inputs. Records power summarization, agents, and RAG pipelines.
Used by Scribes of Alexandria, Fitness Ally, and more in active builds.
OIP is storage‑agnostic and app‑agnostic. These projects illustrate composability across publishing, indexing, and AI.
Browser extension that archives articles to Arweave and publishes OIP records with AI summaries and tags.
Meal plans and workouts as OIP records. Normalized nutrition templates. Private + shared indices.
Decentralized content browser using OIP search across federated nodes and local caches.
Spin up the reference indexer. Point to Arweave gateways. Expose the API layer for templates and records. Start composing.
POST /templates { name, fields, indices }
POST /records { template, data, signature }
GET /records?query=...
GET /records/:id?resolve=true
Node.js + Express • Arweave • Elasticsearch • DID