[{"data":1,"prerenderedAt":861},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Freference\u002Fadapters":209,"\u002Fdocs\u002Freference\u002Fadapters-surround":856},[4,22,117],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Blog","\u002Fblog","blog",[9,13,17],{"title":10,"path":11,"stem":12},"Memory that outlives the process","\u002Fblog\u002Fmemory-that-outlives-the-process","blog\u002Fmemory-that-outlives-the-process",{"title":14,"path":15,"stem":16},"I Believe We Need a New Class of Agents: Officers","\u002Fblog\u002Fofficers-a-new-class-of-agents","blog\u002Fofficers-a-new-class-of-agents",{"title":18,"path":19,"stem":20},"Shared memory for multi-agent AI systems","\u002Fblog\u002Fshared-memory-for-multi-agent-ai","blog\u002Fshared-memory-for-multi-agent-ai",false,{"title":23,"path":24,"stem":25,"children":26,"page":21},"Docs","\u002Fdocs","docs",[27,31,35,64,105,109,113],{"title":28,"path":29,"stem":30},"What is Akashik?","\u002Fdocs\u002Fintroduction","docs\u002F1.introduction",{"title":32,"path":33,"stem":34},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F2.quickstart",{"title":36,"path":37,"stem":38,"children":39,"page":21},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F3.concepts",[40,44,48,52,56,60],{"title":41,"path":42,"stem":43},"The Field","\u002Fdocs\u002Fconcepts\u002Ffield","docs\u002F3.concepts\u002F1.field",{"title":45,"path":46,"stem":47},"Writing with Intent","\u002Fdocs\u002Fconcepts\u002Fwriting-with-intent","docs\u002F3.concepts\u002F2.writing-with-intent",{"title":49,"path":50,"stem":51},"Attunement","\u002Fdocs\u002Fconcepts\u002Fattunement","docs\u002F3.concepts\u002F3.attunement",{"title":53,"path":54,"stem":55},"Conflicts","\u002Fdocs\u002Fconcepts\u002Fconflicts","docs\u002F3.concepts\u002F4.conflicts",{"title":57,"path":58,"stem":59},"Draft Lifecycle","\u002Fdocs\u002Fconcepts\u002Fdraft-lifecycle","docs\u002F3.concepts\u002F5.draft-lifecycle",{"title":61,"path":62,"stem":63},"Managing Entries","\u002Fdocs\u002Fconcepts\u002Fmanaging-entries","docs\u002F3.concepts\u002F6.managing-entries",{"title":65,"path":66,"stem":67,"children":68,"page":21},"Reference","\u002Fdocs\u002Freference","docs\u002F4.reference",[69,73,77,81,85,89,93,97,101],{"title":70,"path":71,"stem":72},"createField","\u002Fdocs\u002Freference\u002Fcreate-field","docs\u002F4.reference\u002F1.create-field",{"title":74,"path":75,"stem":76},"write \u002F read","\u002Fdocs\u002Freference\u002Fwrite-read","docs\u002F4.reference\u002F2.write-read",{"title":78,"path":79,"stem":80},"attune \u002F reckon","\u002Fdocs\u002Freference\u002Fattune-reckon","docs\u002F4.reference\u002F3.attune-reckon",{"title":82,"path":83,"stem":84},"register \u002F deregister","\u002Fdocs\u002Freference\u002Fregister","docs\u002F4.reference\u002F4.register",{"title":86,"path":87,"stem":88},"draft \u002F commit \u002F discard","\u002Fdocs\u002Freference\u002Fdraft-lifecycle","docs\u002F4.reference\u002F5.draft-lifecycle",{"title":90,"path":91,"stem":92},"retract \u002F supersede","\u002Fdocs\u002Freference\u002Fretract-supersede","docs\u002F4.reference\u002F6.retract-supersede",{"title":94,"path":95,"stem":96},"Errors","\u002Fdocs\u002Freference\u002Ferrors","docs\u002F4.reference\u002F7.errors",{"title":98,"path":99,"stem":100},"replay","\u002Fdocs\u002Freference\u002Freplay","docs\u002F4.reference\u002F8.replay",{"title":102,"path":103,"stem":104},"Storage Adapters","\u002Fdocs\u002Freference\u002Fadapters","docs\u002F4.reference\u002F9.adapters",{"title":106,"path":107,"stem":108},"Conformance Levels","\u002Fdocs\u002Fconformance","docs\u002F5.conformance",{"title":110,"path":111,"stem":112},"Why Akashik Exists","\u002Fdocs\u002Fwhy","docs\u002F6.why",{"title":114,"path":115,"stem":116},"Roadmap","\u002Fdocs\u002Froadmap","docs\u002F7.roadmap",{"title":118,"path":119,"stem":120,"children":121,"page":21},"Specifications","\u002Fspecifications","specifications",[122],{"title":123,"path":124,"stem":125,"children":126},"Specification v0.1.0","\u002Fspecifications\u002Fv0.1","specifications\u002F4.v0.1\u002F1.index",[127,128,153,194,198,201,205],{"title":123,"path":124,"stem":125},{"title":129,"path":130,"stem":131,"children":132,"page":21},"Types","\u002Fspecifications\u002Fv0.1\u002Ftypes","specifications\u002F4.v0.1\u002F2.types",[133,137,141,145,149],{"title":134,"path":135,"stem":136},"MemoryUnit","\u002Fspecifications\u002Fv0.1\u002Ftypes\u002Fmemory-unit","specifications\u002F4.v0.1\u002F2.types\u002F1.memory-unit",{"title":138,"path":139,"stem":140},"Agent","\u002Fspecifications\u002Fv0.1\u002Ftypes\u002Fagent","specifications\u002F4.v0.1\u002F2.types\u002F2.agent",{"title":142,"path":143,"stem":144},"Scope","\u002Fspecifications\u002Fv0.1\u002Ftypes\u002Fscope","specifications\u002F4.v0.1\u002F2.types\u002F3.scope",{"title":146,"path":147,"stem":148},"Conflict","\u002Fspecifications\u002Fv0.1\u002Ftypes\u002Fconflict","specifications\u002F4.v0.1\u002F2.types\u002F4.conflict",{"title":150,"path":151,"stem":152},"Message Envelope","\u002Fspecifications\u002Fv0.1\u002Ftypes\u002Fmessage-envelope","specifications\u002F4.v0.1\u002F2.types\u002F5.message-envelope",{"title":154,"path":155,"stem":156,"children":157,"page":21},"Operations","\u002Fspecifications\u002Fv0.1\u002Foperations","specifications\u002F4.v0.1\u002F3.operations",[158,162,166,170,174,178,182,186,190],{"title":159,"path":160,"stem":161},"RECORD","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Frecord","specifications\u002F4.v0.1\u002F3.operations\u002F1.record",{"title":163,"path":164,"stem":165},"ATTUNE","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fattune","specifications\u002F4.v0.1\u002F3.operations\u002F2.attune",{"title":167,"path":168,"stem":169},"REGISTER","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fregister","specifications\u002F4.v0.1\u002F3.operations\u002F3.register",{"title":171,"path":172,"stem":173},"DEREGISTER","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fderegister","specifications\u002F4.v0.1\u002F3.operations\u002F4.deregister",{"title":175,"path":176,"stem":177},"DETECT","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fdetect","specifications\u002F4.v0.1\u002F3.operations\u002F5.detect",{"title":179,"path":180,"stem":181},"MERGE","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fmerge","specifications\u002F4.v0.1\u002F3.operations\u002F6.merge",{"title":183,"path":184,"stem":185},"SUBSCRIBE","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fsubscribe","specifications\u002F4.v0.1\u002F3.operations\u002F7.subscribe",{"title":187,"path":188,"stem":189},"REPLAY","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Freplay","specifications\u002F4.v0.1\u002F3.operations\u002F8.replay",{"title":191,"path":192,"stem":193},"COMPACT","\u002Fspecifications\u002Fv0.1\u002Foperations\u002Fcompact","specifications\u002F4.v0.1\u002F3.operations\u002F9.compact",{"title":195,"path":196,"stem":197},"Error Model","\u002Fspecifications\u002Fv0.1\u002Ferrors","specifications\u002F4.v0.1\u002F4.errors",{"title":106,"path":199,"stem":200},"\u002Fspecifications\u002Fv0.1\u002Fconformance","specifications\u002F4.v0.1\u002F5.conformance",{"title":202,"path":203,"stem":204},"Transport Bindings","\u002Fspecifications\u002Fv0.1\u002Ftransport","specifications\u002F4.v0.1\u002F6.transport",{"title":206,"path":207,"stem":208},"Security","\u002Fspecifications\u002Fv0.1\u002Fsecurity","specifications\u002F4.v0.1\u002F7.security",{"id":210,"title":102,"body":211,"description":850,"extension":851,"links":852,"meta":853,"navigation":357,"path":103,"seo":854,"stem":104,"__hash__":855},"docs\u002Fdocs\u002F4.reference\u002F9.adapters.md",{"type":212,"value":213,"toc":842},"minimark",[214,219,236,299,305,308,311,385,388,391,518,533,536,539,685,751,757,761,768,804,811,815,838],[215,216,218],"h2",{"id":217},"overview","Overview",[220,221,222,223,227,228,231,232,235],"p",{},"As of v0.3, ",[224,225,226],"code",{},"createField()"," accepts an ",[224,229,230],{},"adapter"," option that determines where entries and the event log actually live. Three adapters ship with ",[224,233,234],{},"@akashikprotocol\u002Fcore",":",[237,238,239,257],"table",{},[240,241,242],"thead",{},[243,244,245,250,254],"tr",{},[246,247,249],"th",{"align":248},"left","Adapter",[246,251,253],{"align":252},"center","Durable",[246,255,256],{"align":248},"Use for",[258,259,260,274,287],"tbody",{},[243,261,262,268,271],{},[263,264,265],"td",{"align":248},[224,266,267],{},"MemoryAdapter",[263,269,270],{"align":252},"No",[263,272,273],{"align":248},"Tests, single-run scripts, the default when no adapter is given",[243,275,276,281,284],{},[263,277,278],{"align":248},[224,279,280],{},"FileAdapter",[263,282,283],{"align":252},"Yes",[263,285,286],{"align":248},"Local development, single-machine services",[243,288,289,294,296],{},[263,290,291],{"align":248},[224,292,293],{},"PostgresAdapter",[263,295,283],{"align":252},[263,297,298],{"align":248},"Production, multi-machine \u002F multi-process deployments",[220,300,301,302,304],{},"All three implement the same interface, so switching adapters never changes application code — only how ",[224,303,226],{}," is constructed.",[215,306,267],{"id":307},"memoryadapter",[220,309,310],{},"The default. State lives in a JS array and disappears when the process exits.",[312,313,318],"pre",{"className":314,"code":315,"language":316,"meta":317,"style":317},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createField } from '@akashikprotocol\u002Fcore'\n\nconst field = createField()\n\u002F\u002F Uses MemoryAdapter implicitly — no configuration needed\n","typescript","",[224,319,320,352,359,378],{"__ignoreMap":317},[321,322,325,329,333,337,340,343,346,349],"span",{"class":323,"line":324},"line",1,[321,326,328],{"class":327},"s7zQu","import",[321,330,332],{"class":331},"sMK4o"," {",[321,334,336],{"class":335},"sTEyZ"," createField",[321,338,339],{"class":331}," }",[321,341,342],{"class":327}," from",[321,344,345],{"class":331}," '",[321,347,234],{"class":348},"sfazB",[321,350,351],{"class":331},"'\n",[321,353,355],{"class":323,"line":354},2,[321,356,358],{"emptyLinePlaceholder":357},true,"\n",[321,360,362,366,369,372,375],{"class":323,"line":361},3,[321,363,365],{"class":364},"spNyl","const",[321,367,368],{"class":335}," field ",[321,370,371],{"class":331},"=",[321,373,336],{"class":374},"s2Zo4",[321,376,377],{"class":335},"()\n",[321,379,381],{"class":323,"line":380},4,[321,382,384],{"class":383},"sHwdD","\u002F\u002F Uses MemoryAdapter implicitly — no configuration needed\n",[215,386,280],{"id":387},"fileadapter",[220,389,390],{},"Persists entries and the event log to a JSONL file.",[312,392,394],{"className":314,"code":393,"language":316,"meta":317,"style":317},"import { createField } from '@akashikprotocol\u002Fcore'\nimport { createFileAdapter } from '@akashikprotocol\u002Fcore\u002Ffile'\n\nconst adapter = createFileAdapter({ path: '.\u002Ffield.jsonl' })\nawait adapter.init()\n\nconst field = createField({ adapter })\n",[224,395,396,414,434,438,474,491,496],{"__ignoreMap":317},[321,397,398,400,402,404,406,408,410,412],{"class":323,"line":324},[321,399,328],{"class":327},[321,401,332],{"class":331},[321,403,336],{"class":335},[321,405,339],{"class":331},[321,407,342],{"class":327},[321,409,345],{"class":331},[321,411,234],{"class":348},[321,413,351],{"class":331},[321,415,416,418,420,423,425,427,429,432],{"class":323,"line":354},[321,417,328],{"class":327},[321,419,332],{"class":331},[321,421,422],{"class":335}," createFileAdapter",[321,424,339],{"class":331},[321,426,342],{"class":327},[321,428,345],{"class":331},[321,430,431],{"class":348},"@akashikprotocol\u002Fcore\u002Ffile",[321,433,351],{"class":331},[321,435,436],{"class":323,"line":361},[321,437,358],{"emptyLinePlaceholder":357},[321,439,440,442,445,447,449,452,455,459,461,463,466,469,471],{"class":323,"line":380},[321,441,365],{"class":364},[321,443,444],{"class":335}," adapter ",[321,446,371],{"class":331},[321,448,422],{"class":374},[321,450,451],{"class":335},"(",[321,453,454],{"class":331},"{",[321,456,458],{"class":457},"swJcz"," path",[321,460,235],{"class":331},[321,462,345],{"class":331},[321,464,465],{"class":348},".\u002Ffield.jsonl",[321,467,468],{"class":331},"'",[321,470,339],{"class":331},[321,472,473],{"class":335},")\n",[321,475,477,480,483,486,489],{"class":323,"line":476},5,[321,478,479],{"class":327},"await",[321,481,482],{"class":335}," adapter",[321,484,485],{"class":331},".",[321,487,488],{"class":374},"init",[321,490,377],{"class":335},[321,492,494],{"class":323,"line":493},6,[321,495,358],{"emptyLinePlaceholder":357},[321,497,499,501,503,505,507,509,511,513,516],{"class":323,"line":498},7,[321,500,365],{"class":364},[321,502,368],{"class":335},[321,504,371],{"class":331},[321,506,336],{"class":374},[321,508,451],{"class":335},[321,510,454],{"class":331},[321,512,444],{"class":335},[321,514,515],{"class":331},"}",[321,517,473],{"class":335},[220,519,520,524,525,529,530,532],{},[521,522,523],"strong",{},"Caveat:"," the file path ",[526,527,528],"em",{},"is"," the Field's identity — two ",[224,531,226],{}," calls pointed at different paths are two different Fields, and pointed at the same path, they share state. Relative paths resolve against the current working directory at construction time, not the location of the source file. Use absolute paths in production code.",[215,534,293],{"id":535},"postgresadapter",[220,537,538],{},"Backed by a Postgres table, for concurrent access from multiple machines or processes.",[312,540,542],{"className":314,"code":541,"language":316,"meta":317,"style":317},"import { createField } from '@akashikprotocol\u002Fcore'\nimport { createPostgresAdapter } from '@akashikprotocol\u002Fcore\u002Fpostgres'\n\nconst adapter = createPostgresAdapter({\n  connectionString: process.env.DATABASE_URL,\n  fieldId: 'production',\n})\nawait adapter.init()\n\nconst field = createField({ adapter })\n",[224,543,544,562,582,586,601,624,640,646,659,664],{"__ignoreMap":317},[321,545,546,548,550,552,554,556,558,560],{"class":323,"line":324},[321,547,328],{"class":327},[321,549,332],{"class":331},[321,551,336],{"class":335},[321,553,339],{"class":331},[321,555,342],{"class":327},[321,557,345],{"class":331},[321,559,234],{"class":348},[321,561,351],{"class":331},[321,563,564,566,568,571,573,575,577,580],{"class":323,"line":354},[321,565,328],{"class":327},[321,567,332],{"class":331},[321,569,570],{"class":335}," createPostgresAdapter",[321,572,339],{"class":331},[321,574,342],{"class":327},[321,576,345],{"class":331},[321,578,579],{"class":348},"@akashikprotocol\u002Fcore\u002Fpostgres",[321,581,351],{"class":331},[321,583,584],{"class":323,"line":361},[321,585,358],{"emptyLinePlaceholder":357},[321,587,588,590,592,594,596,598],{"class":323,"line":380},[321,589,365],{"class":364},[321,591,444],{"class":335},[321,593,371],{"class":331},[321,595,570],{"class":374},[321,597,451],{"class":335},[321,599,600],{"class":331},"{\n",[321,602,603,606,608,611,613,616,618,621],{"class":323,"line":476},[321,604,605],{"class":457},"  connectionString",[321,607,235],{"class":331},[321,609,610],{"class":335}," process",[321,612,485],{"class":331},[321,614,615],{"class":335},"env",[321,617,485],{"class":331},[321,619,620],{"class":335},"DATABASE_URL",[321,622,623],{"class":331},",\n",[321,625,626,629,631,633,636,638],{"class":323,"line":493},[321,627,628],{"class":457},"  fieldId",[321,630,235],{"class":331},[321,632,345],{"class":331},[321,634,635],{"class":348},"production",[321,637,468],{"class":331},[321,639,623],{"class":331},[321,641,642,644],{"class":323,"line":498},[321,643,515],{"class":331},[321,645,473],{"class":335},[321,647,649,651,653,655,657],{"class":323,"line":648},8,[321,650,479],{"class":327},[321,652,482],{"class":335},[321,654,485],{"class":331},[321,656,488],{"class":374},[321,658,377],{"class":335},[321,660,662],{"class":323,"line":661},9,[321,663,358],{"emptyLinePlaceholder":357},[321,665,667,669,671,673,675,677,679,681,683],{"class":323,"line":666},10,[321,668,365],{"class":364},[321,670,368],{"class":335},[321,672,371],{"class":331},[321,674,336],{"class":374},[321,676,451],{"class":335},[321,678,454],{"class":331},[321,680,444],{"class":335},[321,682,515],{"class":331},[321,684,473],{"class":335},[237,686,687,700],{},[240,688,689],{},[243,690,691,694,697],{},[246,692,693],{"align":248},"Option",[246,695,696],{"align":252},"Required",[246,698,699],{"align":248},"Description",[258,701,702,717,736],{},[243,703,704,709,711],{},[263,705,706],{"align":248},[224,707,708],{},"connectionString",[263,710],{"align":252},[263,712,713,714,485],{"align":248},"A Postgres connection string. Provide this or ",[224,715,716],{},"pool",[243,718,719,723,725],{},[263,720,721],{"align":248},[224,722,716],{},[263,724],{"align":252},[263,726,727,728,731,732,735],{"align":248},"An existing ",[224,729,730],{},"pg"," ",[224,733,734],{},"Pool"," instance, if your app already manages one.",[243,737,738,743,745],{},[263,739,740],{"align":248},[224,741,742],{},"fieldId",[263,744],{"align":252},[263,746,747,748,485],{"align":248},"Namespaces multiple Fields within one database. Defaults to ",[224,749,750],{},"\"default\"",[220,752,753,754,756],{},"The ",[224,755,730],{}," package is an optional peer dependency — only required if you use this adapter.",[215,758,760],{"id":759},"writing-a-custom-adapter","Writing a custom adapter",[220,762,763,764,767],{},"All adapters implement the same ",[224,765,766],{},"StorageAdapter"," interface, so a conforming custom backend (Redis, SQLite, a hosted API) is possible. Two invariants every adapter must uphold:",[769,770,771,782],"ul",{},[772,773,774,777,778,781],"li",{},[521,775,776],{},"Atomic batch writes"," — ",[224,779,780],{},"supersede()"," produces two events (a status change on the predecessor and a record for the new entry). Both must succeed or both must fail; a partial write corrupts the chain.",[772,783,784,787,788,791,792,795,796,799,800,803],{},[521,785,786],{},"Serialized sequence assignment"," — concurrent writers must not hand out overlapping ",[224,789,790],{},"seq"," \u002F ",[224,793,794],{},"epoch"," values. Gaps or collisions cause incremental readers (",[224,797,798],{},"replay({ sinceSeq })",", ",[224,801,802],{},"attune({ since_epoch })",") to silently skip events.",[220,805,806,807,810],{},"Snapshots, if an adapter implements them, are optional optimizations — a corrupt snapshot should return ",[224,808,809],{},"null"," and force a rebuild from the event log rather than fail the read.",[215,812,814],{"id":813},"next","Next",[769,816,817,827,833],{},[772,818,819,823,824,826],{},[820,821,822],"a",{"href":71},"createField() reference"," — the ",[224,825,230],{}," option",[772,828,829,832],{},[820,830,831],{"href":99},"replay() reference"," — reading back what an adapter persisted",[772,834,835,837],{},[820,836,41],{"href":42}," — what persistence does and doesn't change about Field semantics",[839,840,841],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":317,"searchDepth":324,"depth":354,"links":843},[844,845,846,847,848,849],{"id":217,"depth":354,"text":218},{"id":307,"depth":354,"text":267},{"id":387,"depth":354,"text":280},{"id":535,"depth":354,"text":293},{"id":759,"depth":354,"text":760},{"id":813,"depth":354,"text":814},"Memory, File, and Postgres adapters — make a Field durable.","md",null,{},{"title":102,"description":850},"jAYE7Xz8W8FYsCcxmjZ1HMiOHSYCA30i_Q4tz4DyZiU",[857,859],{"title":98,"path":99,"stem":100,"description":858,"children":-1},"Walk the Field's append-only event log — reconstruct chains, history, and past state.",{"title":106,"path":107,"stem":108,"description":860,"children":-1},"Progressive adoption - start with shared memory in an afternoon, grow to production-grade coordination.",1785956550287]