{
"repo": "autobase",
"timestamp": "2026-01-16T23:00:28.105Z",
"entryPoint": "index.js",
"exports": {
"packageJson": {
"main": "index.js"
}
},
"api": {
"file": "index.js",
"exports": [
{
"type": "default",
"name": "class"
}
],
"classes": [
{
"name": "WakeupHandler"
},
{
"name": "Autobase"
}
],
"functions": [
{
"name": "for"
},
{
"name": "for"
},
{
"name": "toKey"
},
{
"name": "isAutobaseMessage"
},
{
"name": "compareNodes"
},
{
"name": "random2over1"
},
{
"name": "noop"
},
{
"name": "crashSoon"
},
{
"name": "isObject"
},
{
"name": "emitWarning"
},
{
"name": "normalize"
}
]
},
"readme": {
"content": "# Autobase\n\nA multiwriter data structure for combining multiple writer cores into a view of the system. Using the event sourcing pattern, writers append blocks which are linearized into an eventually consistent order for building a view of the system, combining their inputs.\n\n## Install\n\n`npm i autobase`\n\n## Usage\n\n```js\nconst Corestore = require('corestore')\nconst Autobase = require('autobase')\n\nconst store = new Corestore('./some-dir')\nconst local = new Autobase(store, remote.key, { apply, open })\nawait local.ready()\n\n// on remote base\n// remote.append({ addWriter: local.local.key })\n\nawait local.append('local 0')\n\n// remote.append('remote 0')\n// remote.append('remote 1')\n\nawait local.update()\nawait local.append('local 1')\n\nfor (let i = 0; i < local.view.length; i++) {\n console.log(await local.view.get(i))\n\n /*\n local 0\n remote 0\n remote 1\n local 1\n */\n}\n\n// create the view\nfunction open(store) {\n return store.get('test')\n}\n\n// use apply to handle to updates\nasync function ap",
"sections": [
"intro",
"install",
"usage",
"api"
],
"hasApi": true,
"hasExamples": true,
"exampleCount": 7,
"examples": [
"const Corestore = require('corestore')\nconst Autobase = require('autobase')\n\nconst store = new Corestore('./some-dir')\nconst local = new Autobase(store, remote.key, { apply, open })\nawait local.ready()\n\n// on remote base\n// remote.append({ addWriter: local.local.key })\n\nawait local.append('local 0')\n\n// remote.append('remote 0')\n// remote.append('remote 1')\n\nawait local.update()\nawait local.append('local 1')\n\nfor (let i = 0; i < local.view.length; i++) {\n console.log(await local.view.get(i))\n\n /*\n local 0\n remote 0\n remote 1\n local 1\n */\n}\n\n// create the view\nfunction open(store) {\n return store.get('test')\n}\n\n// use apply to handle to updates\nasync function apply(nodes, view, host) {\n for (const { value } of nodes) {\n if (value.addWriter) {\n await host.addWriter(value.addWriter, { indexer: true })\n continue\n }\n\n await view.append(value)\n }\n}",
"function open(store) {\n return store.get('my-view')\n}",
"async function apply(nodes, view, host) {\n for (const n of nodes) await view.append(n)\n}"
]
},
"patterns": [
"append-only-log",
"binary-encoding",
"cryptography"
]
}