<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>selfstore blog</title><description>selfstore is a local-first storage library for browser apps: an automatic working copy in IndexedDB, portable encrypted ZIP backups, durable homes (a disk file, Google Drive, WebDAV, an S3 bucket) and serverless multi-device sync.</description><link>https://selfstore.dev/</link><item><title>Schema migrations when you do not hold the database</title><link>https://selfstore.dev/blog/schema-migrations-without-a-database/</link><guid isPermaLink="true">https://selfstore.dev/blog/schema-migrations-without-a-database/</guid><description>Local-first inverts who owns the data, and with it who can run a migration. What replaces the deploy-time script - a read-time upgrade, a version that travels with the file, and a loud refusal in the other direction.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Designing an interface when the network is optional</title><link>https://selfstore.dev/blog/offline-first-interfaces/</link><guid isPermaLink="true">https://selfstore.dev/blog/offline-first-interfaces/</guid><description>Offline-first deletes most of the UI states a server app needs - spinners, retry toasts, optimistic rollback - and adds three smaller obligations in their place.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Why IndexedDB is the right working copy for a local-first app</title><link>https://selfstore.dev/blog/indexeddb-as-working-copy/</link><guid isPermaLink="true">https://selfstore.dev/blog/indexeddb-as-working-copy/</guid><description>A local database as the app&apos;s live state - not a server round-trip, not localStorage - and the separation between a working copy and a durable home that makes it safe.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Local-first is a security posture, not just a privacy feature</title><link>https://selfstore.dev/blog/local-first-is-a-security-posture/</link><guid isPermaLink="true">https://selfstore.dev/blog/local-first-is-a-security-posture/</guid><description>The largest breaches are server-side. Keeping one person&apos;s data on their own device removes a whole class of them - and here is exactly which class, and which threats it does not touch.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Encrypted backups in the browser, done right</title><link>https://selfstore.dev/blog/encrypted-backups-browser/</link><guid isPermaLink="true">https://selfstore.dev/blog/encrypted-backups-browser/</guid><description>What client-side encryption actually protects against, why AES-256-GCM over Argon2id, and why a format spec beats a vendor promise.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Your side project does not need a backend (yet)</title><link>https://selfstore.dev/blog/no-backend/</link><guid isPermaLink="true">https://selfstore.dev/blog/no-backend/</guid><description>An honest decision tree for when a web app actually needs a server - and how far durability, backups and multi-device sync go without one.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Multi-device sync without a sync server</title><link>https://selfstore.dev/blog/sync-without-server/</link><guid isPermaLink="true">https://selfstore.dev/blog/sync-without-server/</guid><description>Storage-as-mailbox, hybrid logical clocks and per-collection merge strategies - how deterministic convergence works when nobody runs a server.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate></item></channel></rss>