<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>bkpdb</title>
    <link>https://bkpdb.com/</link>
    <description>Recent content on bkpdb</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bkpdb.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What&#39;s actually inside your Postgres data directory</title>
      <link>https://bkpdb.com/blog/inside-pgdata/</link>
      <pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/blog/inside-pgdata/</guid>
      <description>&lt;p&gt;When you install Postgres, run &lt;code&gt;initdb&lt;/code&gt;, and start it up, all of your data lives inside one directory. The Postgres documentation calls it &amp;ldquo;the data directory.&amp;rdquo; The environment variable points at it: &lt;code&gt;PGDATA&lt;/code&gt;. On Debian it&amp;rsquo;s at &lt;code&gt;/var/lib/postgresql/16/main&lt;/code&gt;. On macOS via Homebrew it&amp;rsquo;s &lt;code&gt;/opt/homebrew/var/postgresql@16&lt;/code&gt;. Inside a Docker image it&amp;rsquo;s wherever the volume is mounted. Wherever you find it, the contents look about the same: a couple of dozen short, cryptic directory names, a handful of config files, and a little file called &lt;code&gt;PG_VERSION&lt;/code&gt; that&amp;rsquo;s there to keep you honest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>v0.5.3</title>
      <link>https://bkpdb.com/changelog/v0.5.3/</link>
      <pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.5.3/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.5.2</title>
      <link>https://bkpdb.com/changelog/v0.5.2/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.5.2/</guid>
      <description></description>
    </item>
    <item>
      <title>Why we restore every backup, every week</title>
      <link>https://bkpdb.com/blog/why-we-restore-every-backup/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/blog/why-we-restore-every-backup/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Editor’s note.&lt;/em&gt; Verified restores are a roadmap feature, not a shipped one. The agent and storage pipeline exist; the scheduled verifier on the control plane does not yet. This essay is the working principle that shapes how we are building it.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;For the first six months of bkpdb’s development, we had a perfectly respectable backup pipeline that nobody had ever asked to give anything back. Files appeared in a bucket on schedule. The control plane recorded their sizes and their checksums. The dashboard showed a calm row of green ticks. By every measure we had bothered to define, the product worked.&lt;/p&gt;</description>
    </item>
    <item>
      <title>v0.5.1</title>
      <link>https://bkpdb.com/changelog/v0.5.1/</link>
      <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.5.1/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.5.0</title>
      <link>https://bkpdb.com/changelog/v0.5.0/</link>
      <pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.5.0/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.4.1</title>
      <link>https://bkpdb.com/changelog/v0.4.1/</link>
      <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.4.1/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.4.0</title>
      <link>https://bkpdb.com/changelog/v0.4.0/</link>
      <pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.4.0/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.3.0</title>
      <link>https://bkpdb.com/changelog/v0.3.0/</link>
      <pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.3.0/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.2.0</title>
      <link>https://bkpdb.com/changelog/v0.2.0/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.2.0/</guid>
      <description></description>
    </item>
    <item>
      <title>v0.1.0</title>
      <link>https://bkpdb.com/changelog/v0.1.0/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/changelog/v0.1.0/</guid>
      <description></description>
    </item>
    <item>
      <title>Privacy</title>
      <link>https://bkpdb.com/privacy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/privacy/</guid>
      <description>&lt;p class=&#34;prose-meta&#34;&gt;&lt;span class=&#34;dateline&#34;&gt;Effective.&lt;/span&gt; 12 May 2026.&lt;br&gt;&lt;span class=&#34;dateline&#34;&gt;Form.&lt;/span&gt; This notice is written to be read by people, in the order in which they tend to want to know things. The structural clauses are at the end, where they belong.&lt;/p&gt;&#xA;&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;1. The shape of the promise&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Most privacy notices read like a confession dressed as a disclosure. This one is set up the other way around: we begin with what we have built the product so that we &lt;em&gt;cannot&lt;/em&gt; see, and only then describe what we hold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Security</title>
      <link>https://bkpdb.com/security/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/security/</guid>
      <description>&lt;p class=&#34;prose-meta&#34;&gt;&lt;span class=&#34;dateline&#34;&gt;Effective.&lt;/span&gt; 12 May 2026.&lt;br&gt;&lt;span class=&#34;dateline&#34;&gt;Status.&lt;/span&gt; bkpdb is in beta. The threat model and the cryptography below describe the architecture as it ships today; the operational maturity is still being built out. Where the two diverge, this page says so.&lt;/p&gt;&#xA;&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;1. The defining principle&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;A managed-backup company is only as trustworthy as the worst thing one of its engineers can do at 3 a.m. after a bad week. We took that observation seriously when we drew the architecture, and the result is a system in which the bkpdb company (including its own database, its own engineers, and its own infrastructure) &lt;em&gt;cannot&lt;/em&gt; read a customer&amp;rsquo;s backup contents using its own resources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terms of Service</title>
      <link>https://bkpdb.com/terms/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/terms/</guid>
      <description>&lt;p class=&#34;prose-meta&#34;&gt;&lt;span class=&#34;dateline&#34;&gt;Effective.&lt;/span&gt; 12 May 2026.&lt;br&gt;&lt;span class=&#34;dateline&#34;&gt;Status.&lt;/span&gt; bkpdb is in beta. These terms apply to that beta. They will be revised on general availability. The substantive promises here will not get less protective of you between now and then; what we may add are the structural pieces a v1.0 contract needs (registered legal entity, governing jurisdiction, dispute mechanics).&lt;/p&gt;&#xA;&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;1. What this is&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;These Terms of Service (&amp;ldquo;Terms&amp;rdquo;) govern your access to and use of the bkpdb product: the agent binary, the control plane (the dashboard and APIs at &lt;code&gt;bkpdb.com&lt;/code&gt; and its subdomains), the documentation, and anything else we publish under the bkpdb name. By using any of it, you agree to these Terms. If you do not, do not use the service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What bkpdb backs up today, and what is next</title>
      <link>https://bkpdb.com/databases/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/databases/</guid>
      <description>&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;Supported today&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;engines&#34;&gt;&#xA;  &lt;article class=&#34;engine&#34;&gt;&#xA;    &lt;div class=&#34;head&#34;&gt;&#xA;      &lt;h3&gt;PostgreSQL&lt;/h3&gt;&#xA;      &lt;span class=&#34;versions&#34;&gt;13 &amp;middot; 14 &amp;middot; 15 &amp;middot; 16 &amp;middot; 17 &amp;middot; 18&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p&gt;Logical backups via &lt;code&gt;pg_dump&lt;/code&gt;, custom format. The agent fetches a matching dump binary for the server&amp;rsquo;s major version on demand, from a signed registry, so you do not have to install anything alongside it.&lt;/p&gt;&#xA;    &lt;p class=&#34;row&#34;&gt;&lt;span class=&#34;status ok&#34;&gt;Available&lt;/span&gt;&lt;span class=&#34;sep&#34;&gt;|&lt;/span&gt;Self-hosted Postgres&lt;span class=&#34;sep&#34;&gt;|&lt;/span&gt;Logical, v1&lt;/p&gt;&#xA;  &lt;/article&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;Next for Postgres&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;engines&#34;&gt;&#xA;  &lt;article class=&#34;engine&#34;&gt;&#xA;    &lt;div class=&#34;head&#34;&gt;&#xA;      &lt;h3&gt;Point-in-time recovery&lt;/h3&gt;&#xA;      &lt;span class=&#34;versions&#34;&gt;base backup + WAL&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p&gt;Continuous WAL streaming on top of the scheduled base backup. Recover to a specific second by picking a base and replaying WAL up to a timestamp or LSN. Target RPO is measured in seconds, set by how aggressively WAL is shipped, not by the daily schedule. Lands after verified restores.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What bkpdb does, in detail</title>
      <link>https://bkpdb.com/features/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://bkpdb.com/features/</guid>
      <description>&lt;div class=&#34;stub&#34;&gt;&lt;span class=&#34;ornament-glyph ornament-left&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;span&gt;The Agent&lt;/span&gt;&lt;span class=&#34;ornament-glyph ornament-right&#34;&gt;&amp;#x2766;&lt;/span&gt;&lt;/div&gt;&#xA;&#xA;&lt;p style=&#34;max-width:42em;color:var(--mute);&#34;&gt;&lt;span class=&#34;dateline&#34;&gt;Plate I.&lt;/span&gt; A small static binary that lives on the database host. It listens on no ports. It speaks outbound mTLS to the control plane for heartbeats and configuration, talks to the database it tends, and to your storage destination. It does nothing else, and it requires no root and no system service to run.&lt;/p&gt;&#xA;&lt;figure class=&#34;plate&#34;&gt;&#xA;  &lt;figcaption class=&#34;plate-title&#34;&gt;&lt;span&gt;The agent in situ&lt;/span&gt;&lt;span class=&#34;num&#34;&gt;Fig. 1&lt;/span&gt;&lt;/figcaption&gt;&#xA;  &lt;div class=&#34;plate-body&#34;&gt;&#xA;&lt;pre&gt;&#xA;                    ┌─ database host ─────────────────────────────┐&#xA;                    │                                             │&#xA;   ╔══════════╗     │   ┌──────────┐         ┌─────────────────┐  │&#xA;   ║ control  ║◀──mTLS──│  agent   │────────▶│   PostgreSQL    │  │&#xA;   ║  plane   ║     │   │          │         │   (read role)   │  │&#xA;   ╚══════════╝     │   └────┬─────┘         └─────────────────┘  │&#xA;                    │        │                                    │&#xA;                    │        │ stream:  pg_dump → zstd → encrypt  │&#xA;                    │        ▼                                    │&#xA;                    │   ┌──────────┐                              │&#xA;                    │   │  upload  │──────▶ your bucket / SFTP    │&#xA;                    │   └──────────┘                              │&#xA;                    │                                             │&#xA;                    └─────────────────────────────────────────────┘&#xA;&#xA;         no inbound ports         no plaintext on disk        no shared keys&#xA;&lt;/pre&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p class=&#34;plate-caption&#34;&gt;The agent listens on no ports. The control plane never sees backup plaintext.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
