<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>XKV.org</title>
    <link>https://xkv.org/</link>
    <description>Recent content on XKV.org</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://xkv.org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Credit Limit Dropped From 100 to 50 and XKV Shows the Three Steps Behind It</title>
      <link>https://xkv.org/a-credit-limit-dropped-from-100-to-50-and-xkv-shows-the-three-steps-behind-it/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/a-credit-limit-dropped-from-100-to-50-and-xkv-shows-the-three-steps-behind-it/</guid>
      <description>&lt;p&gt;A customer calls support. Their credit limit was 100 yesterday and it&amp;rsquo;s 50 today, and nobody told them why. The support agent can see the 50. Everything else is spread across three services.&lt;/p&gt;&#xA;&lt;p&gt;The limits service set the 50, under its risk policy. The risk model raised the account&amp;rsquo;s score the day before. Billing had recorded a chargeback from the bank that morning. Each service did one reasonable thing, and each logged it in its own way. Putting the story together means knowing which logs to open and in what order.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Q4 Price List Goes Out as One Transaction With One Reason</title>
      <link>https://xkv.org/a-q4-price-list-goes-out-as-one-transaction-with-one-reason/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/a-q4-price-list-goes-out-as-one-transaction-with-one-reason/</guid>
      <description>&lt;p&gt;Prices change together. A new quarter&amp;rsquo;s price list touches every plan at once, and a half-applied list is worse than an old one: for a few minutes Pro might cost less than Basic. The list also has one reason behind it, usually a decision made in a meeting, with a ticket that tracked the rollout.&lt;/p&gt;&#xA;&lt;p&gt;XKV writes the whole list in one transaction. Every price commits or none does, and every price carries the same reason, ticket and cause, given once.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Timeout Raised During an Incident Explains Itself Three Weeks Later</title>
      <link>https://xkv.org/a-timeout-raised-during-an-incident-explains-itself-three-weeks-later/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/a-timeout-raised-during-an-incident-explains-itself-three-weeks-later/</guid>
      <description>&lt;p&gt;At two in the morning an alert fires: the orders database is answering slowly, and order requests are timing out. The on-call engineer raises the database timeout from 5 seconds to 30 so requests stop failing while a replica catches up. It works. The alert resolves. Everyone goes back to bed.&lt;/p&gt;&#xA;&lt;p&gt;Three weeks later someone notices the timeout is 30 seconds and wonders whether that&amp;rsquo;s a typo. Changing it back might be right. It might also bring the incident back. The person who knows is on holiday, and the incident channel has scrolled far out of sight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An AI Agent Changed a Cache Setting and XKV Kept the Tool Call Behind It</title>
      <link>https://xkv.org/an-ai-agent-changed-a-cache-setting-and-xkv-kept-the-tool-call-behind-it/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/an-ai-agent-changed-a-cache-setting-and-xkv-kept-the-tool-call-behind-it/</guid>
      <description>&lt;p&gt;An operations agent watches the product catalog. Its metrics show 4.1% of reads returning stale data, above the 2% target, so it shortens the catalog cache&amp;rsquo;s time-to-live from 300 seconds to 30. That&amp;rsquo;s a reasonable move. An hour later the catalog database is at 91% CPU, because the cache now sends ten times as many reads its way. An engineer puts the TTL back.&lt;/p&gt;&#xA;&lt;p&gt;The next morning the team wants to know what happened. The questions are the usual ones, with a new twist: which change did the agent make, what was it looking at, and which of its tool calls did it? Agents act fast and often, so their changes need a trail at least as good as a person&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How XKV Was Tested With 1000 Kills, Torn Writes and a Million Revisions</title>
      <link>https://xkv.org/how-xkv-was-tested-with-1000-kills-torn-writes-and-a-million-revisions/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/how-xkv-was-tested-with-1000-kills-torn-writes-and-a-million-revisions/</guid>
      <description>&lt;p&gt;A store that keeps the reason behind every value is only useful if it keeps the value too. So before 0.1.0 went out, each promise XKV makes got a test aimed straight at it, and every number below sits in the repository&amp;rsquo;s &lt;a href=&#34;https://github.com/explainable-kv/xkv/tree/main/test/results&#34;&gt;test results&lt;/a&gt;, written by one script on a 2-CPU Linux machine.&lt;/p&gt;&#xA;&lt;p&gt;The promises are short. A transaction is all or nothing. An acknowledged write survives a crash. Committed data is never dropped quietly. Compaction never breaks a chain of causes. Here is how each was tried.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What an Explainable Key-Value Store Is and Why Small Values Need One</title>
      <link>https://xkv.org/what-an-explainable-key-value-store-is-and-why-small-values-need-one/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/what-an-explainable-key-value-store-is-and-why-small-values-need-one/</guid>
      <description>&lt;p&gt;The values that cause the most trouble are small. A credit limit. A timeout. A price. A flag that switches a feature on for ten percent of users. Each one fits in a few bytes, and each one can stop a business for an afternoon when it changes and nobody knows why.&lt;/p&gt;&#xA;&lt;p&gt;Every key-value store keeps the value. Some keep old values too. What none of them keep is the reason, and above all the link from one change to the change that caused it. That link is what people ask about. Support can already see the customer&amp;rsquo;s limit. What they need is why it&amp;rsquo;s 50 when it was 100 yesterday.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why the Project Is Called XKV</title>
      <link>https://xkv.org/why-the-project-is-called-xkv/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/why-the-project-is-called-xkv/</guid>
      <description>&lt;p&gt;XKV stands for explainable key-value. KV is the usual shorthand for a key-value store, the simplest kind of database there is: you put a value under a key and get it back later. The X is the part this project adds.&lt;/p&gt;&#xA;&lt;p&gt;An X marks the spot on a map, and it&amp;rsquo;s the letter that stands for an unknown in algebra. Both fit. Every value in a store has a story behind it, and in most stores that story is the unknown. XKV keeps it next to the value, so the question every value should be able to answer, why, has an answer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XKV 0.1.0 Is Released as an Open Source Key-Value Store That Remembers Why</title>
      <link>https://xkv.org/xkv-0.1.0-is-released-as-an-open-source-key-value-store-that-remembers-why/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/xkv-0.1.0-is-released-as-an-open-source-key-value-store-that-remembers-why/</guid>
      <description>&lt;p&gt;XKV 0.1.0 is out. It&amp;rsquo;s a small key-value store for Go that keeps one thing other stores throw away: the reason. Every write records who made it, why, and which earlier change caused it. Ask a value how it got there and XKV walks the chain back, across keys, to where it started.&lt;/p&gt;&#xA;&lt;p&gt;The release has four parts. The Go package, with no dependencies, stores everything in one file. The &lt;code&gt;xkv&lt;/code&gt; command reads and writes that file from a shell and can serve it over HTTP for other languages. A WebAssembly build runs the same code in a browser, and the &lt;a href=&#34;https://xkv.org/demo/&#34;&gt;live demo&lt;/a&gt; is built on it. Four example programs act out the case studies on this site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://xkv.org/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/about/</guid>
      <description>&lt;p&gt;XKV is a small key-value store that remembers why. Every write records who made it, why, and which earlier change caused it. Any value can then explain itself, one cause at a time, back across keys to where the chain started. It is open source, written in Go, and the first release is out.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-the-project-exists&#34;&gt;Why the Project Exists&lt;/h2&gt;&#xA;&lt;p&gt;Most outages and most support calls begin with a small value that changed. A limit, a price, a timeout, a feature switch. The store holds the new value. The reason sits somewhere else: in a log that rotated away, a chat thread, a ticket, or the head of whoever was on call.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://xkv.org/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/contact/</guid>
      <description>&lt;p&gt;The project would like to hear from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Teams&lt;/strong&gt; who keep limits, prices, settings or flags in a store and keep getting asked why a value changed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Engineers&lt;/strong&gt; who tried XKV and hit a bug, a missing feature, or a number that didn&amp;rsquo;t match their own test.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone&lt;/strong&gt; with a question about the store, the demo or the figures on this site.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Write to &lt;strong&gt;&lt;a href=&#34;mailto:info@xkv.org&#34;&gt;info@xkv.org&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bugs and feature requests are also welcome as issues on &lt;a href=&#34;https://github.com/explainable-kv/xkv/issues&#34;&gt;GitHub&lt;/a&gt;. For a bug, the output of &lt;code&gt;xkv check&lt;/code&gt; on the file and the version from &lt;code&gt;xkv version&lt;/code&gt; help a lot.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download XKV</title>
      <link>https://xkv.org/download/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/download/</guid>
      <description>&lt;p&gt;The &lt;code&gt;xkv&lt;/code&gt; command reads and writes a store from the shell and serves it over HTTP. Each archive holds the command with the license files and the README. The links always point to the latest release.&lt;/p&gt;&#xA;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;System&lt;/th&gt;&#xA;          &lt;th&gt;Download&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/xkv_linux_amd64.tar.gz&#34;&gt;xkv_linux_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, ARM64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/xkv_linux_arm64.tar.gz&#34;&gt;xkv_linux_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Apple silicon&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/xkv_darwin_arm64.tar.gz&#34;&gt;xkv_darwin_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Intel&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/xkv_darwin_amd64.tar.gz&#34;&gt;xkv_darwin_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Windows, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/xkv_windows_amd64.zip&#34;&gt;xkv_windows_amd64.zip&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/explainable-kv/xkv/releases/latest/download/SHA256SUMS&#34;&gt;SHA256SUMS&lt;/a&gt; lists the checksums. Every release and its notes are on the &lt;a href=&#34;https://github.com/explainable-kv/xkv/releases&#34;&gt;releases page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The binaries are pure Go with no outside libraries; the Linux ones are static. The macOS binaries aren&amp;rsquo;t signed by Apple, so macOS may ask you to allow them the first time, or you can run &lt;code&gt;xattr -d com.apple.quarantine xkv&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Live Demo</title>
      <link>https://xkv.org/demo/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/demo/</guid>
      <description>&lt;p&gt;The demo runs XKV in your browser. It&amp;rsquo;s the Go package itself, compiled to WebAssembly, with the store&amp;rsquo;s file kept in memory. Nothing needs installing, and nothing you type leaves the page.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://xkv.org/demo/app/&#34;&gt;Open the live demo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-can-do&#34;&gt;What You Can Do&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Load a story.&lt;/strong&gt; Three short histories are ready to load: a credit limit that dropped, a timeout raised during an incident, and a cache setting an AI agent changed before an engineer put it back. Each is a handful of real writes made through the store, with their causes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Click a value.&lt;/strong&gt; The store answers why, and the tree unfolds one level at a time: the value, the change that caused it, the change that caused that, and so on, across keys. Each step shows who made it, the reason they gave, the value before, and any outside reference such as a ticket or a tool call id.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Write your own change.&lt;/strong&gt; Pick a key, a value and a reason, tick the keys whose current value caused your change, and write it. It joins the chain at once. Leave the reason out and the store refuses, with the same error the Go package and the &lt;code&gt;xkv&lt;/code&gt; command give.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;See the history.&lt;/strong&gt; The History tab lists every revision of a key, newest first, with what caused each one.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://xkv.org/images/xkv-demo.png&#34; alt=&#34;The live demo showing why a credit limit is 50. The limit&amp;rsquo;s revision points at the risk score that caused it, which points at the chargeback that raised the score.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Start</title>
      <link>https://xkv.org/quick-start/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/quick-start/</guid>
      <description>&lt;p&gt;Ten minutes from nothing to a value that explains itself. Use the &lt;code&gt;xkv&lt;/code&gt; command first to see the idea, then the Go package to build it into a program.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-get-the-command&#34;&gt;1. Get the Command&lt;/h2&gt;&#xA;&lt;p&gt;Download the archive for your system from the &lt;a href=&#34;https://xkv.org/download/&#34;&gt;download page&lt;/a&gt;, unpack it, and put &lt;code&gt;xkv&lt;/code&gt; on your PATH. Check it runs:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xkv version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-write-a-chain&#34;&gt;2. Write a Chain&lt;/h2&gt;&#xA;&lt;p&gt;Three services each write one value. Each names what it acted on with &lt;code&gt;--cause&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reference</title>
      <link>https://xkv.org/reference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://xkv.org/reference/</guid>
      <description>&lt;p&gt;Everything XKV offers, on one page: the Go package, the &lt;code&gt;xkv&lt;/code&gt; command, the HTTP mode, and the file. The &lt;a href=&#34;https://github.com/explainable-kv/xkv#readme&#34;&gt;README&lt;/a&gt; is the full manual, and the Go documentation is on &lt;a href=&#34;https://pkg.go.dev/github.com/explainable-kv/xkv&#34;&gt;pkg.go.dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;revisions&#34;&gt;Revisions&lt;/h2&gt;&#xA;&lt;p&gt;Every write is a revision. A revision has:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Field&lt;/th&gt;&#xA;          &lt;th&gt;Meaning&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Rev&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;store-wide revision number; only goes up&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Tx&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;transaction id; revisions written together share it&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Key&lt;/code&gt;, &lt;code&gt;Value&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the key and its new value&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Deleted&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;true when the revision deletes the key&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Actor&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;who made it&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Reason&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;why; required unless the store is relaxed&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Ref&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;an outside reference: a ticket, a request id, a tool call id&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Causes&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;up to 8 earlier revisions, as key and revision number&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Time&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;when it was written&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;the-go-package&#34;&gt;The Go Package&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Call&lt;/th&gt;&#xA;          &lt;th&gt;Does&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Open(path, opts)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;opens or creates a store file; one writer per file&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;OpenMemory(opts)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;a store in memory, for tests and the browser&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Put(ctx, key, value, opts...)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;writes one value&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Delete(ctx, key, opts...)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;deletes a key; the delete is a revision too&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Update(ctx, fn, opts...)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;writes several keys in one transaction&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Get(ctx, key)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the current revision&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;GetAt(ctx, key, rev)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the key as the store stood at revision &lt;code&gt;rev&lt;/code&gt;, or &lt;code&gt;ErrCompacted&lt;/code&gt; if compaction removed that state&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Revision(ctx, rev)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;one revision by number&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;History(ctx, key, limit)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;a key&amp;rsquo;s revisions, newest first&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Why(ctx, key, depth)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the tree of causes behind the current value&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;WhyRev(ctx, rev, depth)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the same for one revision&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Keys(ctx, prefix)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;keys that have a value&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Compact(ctx, opts)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;drops old revisions, keeping every one a kept value points at. On Windows it fails with nothing changed while another process has the file open&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Check(path)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;reads every record and cause of a file&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Write options: &lt;code&gt;Reason(s)&lt;/code&gt;, &lt;code&gt;Actor(s)&lt;/code&gt;, &lt;code&gt;Ref(s)&lt;/code&gt;, &lt;code&gt;Cause(key, rev)&lt;/code&gt; and &lt;code&gt;CauseLatest(key)&lt;/code&gt;. &lt;code&gt;WithActor(ctx, name)&lt;/code&gt; sets the actor for every write made with that context.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
