<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>The InventDB blog</title>
  <subtitle>Technical articles on how the InventDB database engine, its security model and its business engine work.</subtitle>
  <id>https://www.inventdb.com/blog.html</id>
  <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog.html"/>
  <link rel="self" type="application/atom+xml" href="https://www.inventdb.com/blog/feed.xml"/>
  <updated>2026-10-01T09:00:00Z</updated>
  <author><name>InventDB Engineering</name><uri>https://www.inventdb.com/</uri></author>
  <icon>https://www.inventdb.com/assets/brand/inventdb-icon-256.png</icon>

  <entry>
    <id>https://www.inventdb.com/blog/inside-inventdb.html</id>
    <title>Inside InventDB: one engine from the disk to the AI</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/inside-inventdb.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="architecture" label="Architecture"/>
    <summary>The layers of one InventDB instance, from the encrypted storage engine to the business engine, and the path one request takes through them.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/segmented-storage.html</id>
    <title>How a single instance holds 250 million records</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/segmented-storage.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="storage" label="Storage"/>
    <summary>Every InventDB table is a list of 100,000-record segments. One segment takes the writes, the others are sealed, and reads skip the segments that cannot match.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/blink-trees-and-page-cache.html</id>
    <title>Concurrent B-link trees and one shared page cache</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/blink-trees-and-page-cache.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="storage" label="Storage"/>
    <summary>Readers walk InventDB's B-link trees without latches, a writer latches only the leaf it changes, and one page cache shared by every tree holds the live pages.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/how-a-query-runs.html</id>
    <title>How a SQL query runs in InventDB</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/how-a-query-runs.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="query" label="Query engine"/>
    <summary>One SELECT followed through InventDB's parser, rule-based planner and four execution paths, and how much each path reads.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/columnar-aggregates.html</id>
    <title>Columnar aggregates inside a JSON document database</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/columnar-aggregates.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="query" label="Query engine"/>
    <summary>InventDB keeps records as JSON but answers aggregates from totals in its indexes and from dense, encrypted column files built for every sealed segment.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/reading-less.html</id>
    <title>Reading less: zone maps, Bloom filters and the ORDER BY LIMIT walk</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/reading-less.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="query" label="Query engine"/>
    <summary>Bloom filters, zone maps and a k-way merge over sorted indexes let InventDB skip segments that cannot match and stop a top-N query after N rows.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/transactions-and-durability.html</id>
    <title>Transactions and commits that survive a crash</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/transactions-and-durability.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="transactions" label="Transactions"/>
    <summary>How an InventDB commit becomes all-or-nothing, conflict-checked and durable, and exactly which anomalies it prevents.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/crash-recovery.html</id>
    <title>What happens to your data when the power goes out</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/crash-recovery.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="reliability" label="Reliability"/>
    <summary>The first start after a crash, step by step: how InventDB detects it, replays committed writes and repairs only what a crash can damage.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/backups.html</id>
    <title>Hot backups and recovery while writes continue</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/backups.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="reliability" label="Reliability"/>
    <summary>InventDB backs up a live instance file by file to object storage in the same region, proves each backup complete, and checks it again before a restore.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/encryption-at-rest.html</id>
    <title>Encryption at rest that cannot be switched off</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/encryption-at-rest.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="security" label="Security"/>
    <summary>Every InventDB instance encrypts records, indexes, files and its log with AES-256-GCM, and the engine has no mode that stores data in plaintext.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/sign-in-roles-and-grants.html</id>
    <title>Sign-in, roles and grants for people, apps and agents</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/sign-in-roles-and-grants.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="security" label="Security"/>
    <summary>An InventDB instance is its own authorization server: password sign-in for people, OAuth 2.1 with PKCE for AI agents, and one grant check for every caller.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/row-level-security.html</id>
    <title>Row-level security inside the database engine</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/row-level-security.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="security" label="Security"/>
    <summary>The InventDB engine applies each person's row rules to every SQL query and every write, whichever interface the request came through.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/four-kinds-of-search.html</id>
    <title>Four kinds of search, from exact match to meaning</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/four-kinds-of-search.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="search" label="Search"/>
    <summary>Exact, fuzzy, full-text and semantic search run inside the InventDB engine, over the same records and under the same permissions.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/embeddings-in-the-database.html</id>
    <title>Embeddings computed inside the database, in pure Rust</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/embeddings-in-the-database.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="search" label="Search"/>
    <summary>A MiniLM sentence model written out by hand in Rust runs inside the InventDB engine, with caches and HNSW graphs that make its vectors searchable.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/files-and-ocr.html</id>
    <title>Files on every record, read by OCR and searchable by meaning</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/files-and-ocr.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="search" label="Search"/>
    <summary>InventDB stores files with the records they belong to, reads them with local OCR, and searches inside them by words and by meaning under each person's access rules.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/http-api.html</id>
    <title>One HTTP API: REST, SQL and a live OpenAPI spec</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/http-api.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="api" label="API"/>
    <summary>Every InventDB instance answers HTTP itself: records over REST, reads as SQL, bulk writes, transactions, and an OpenAPI 3.1 spec it serves about itself.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/importing-data.html</id>
    <title>Importing CSV, JSON and spreadsheets into a live database</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/importing-data.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="api" label="API"/>
    <summary>One parser infers column types, a preview shows what will be stored, and permissions, row rules and foreign keys are checked as records go in.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/eventing-webhooks.html</id>
    <title>Webhooks and a change feed from the database itself</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/eventing-webhooks.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="api" label="API"/>
    <summary>InventDB records every committed write where all writes pass, then serves the changes as a cursor feed and as signed webhooks that carry no record data.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/mcp-server.html</id>
    <title>An MCP server inside the database, signed in with OAuth</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/mcp-server.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="ai" label="AI"/>
    <summary>An AI client signs in to InventDB as a person, works through 51 typed tools under that person's grants, and stages record changes until a commit.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/ai-agent.html</id>
    <title>How the InventDB SOAR AI answers with SQL you can check</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/ai-agent.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="ai" label="AI"/>
    <summary>The InventDB SOAR agent answers questions by writing SQL, running it as you under your row rules, and showing the query beside the answer.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/safe-ai-changes.html</id>
    <title>Safe AI changes: change sets, approval and an audit log</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/safe-ai-changes.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="ai" label="AI"/>
    <summary>A multi-step AI change in InventDB applies as one transaction after a person approves it; MCP proposals wait for a commit that the audit log records.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/ai-gateway.html</id>
    <title>The AI gateway between your instance and the model</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/ai-gateway.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="ai" label="AI"/>
    <summary>Every AI call from InventDB SOAR passes one gateway that checks the account, enforces the monthly AI allowance, routes to Claude on Amazon Bedrock and meters tokens.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/workflows.html</id>
    <title>Event-driven workflows with a person in the loop</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/workflows.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="business" label="Business engine"/>
    <summary>A workflow in InventDB SOAR is a fixed plan of typed steps that a trigger starts, that acts on your records, and that parks until a person decides.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/reports-and-views.html</id>
    <title>Reports and views with SQL behind every figure</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/reports-and-views.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="business" label="Business engine"/>
    <summary>An InventDB SOAR report stores no numbers: its HTML template runs SQL under the reader's row rules every time it renders, on screen, on paper or in an email.</summary>
  </entry>

  <entry>
    <id>https://www.inventdb.com/blog/sleep-and-wake.html</id>
    <title>Idle instances that sleep, and the energy we measure</title>
    <link rel="alternate" type="text/html" href="https://www.inventdb.com/blog/sleep-and-wake.html"/>
    <published>2026-10-01T09:00:00Z</published>
    <updated>2026-10-01T09:00:00Z</updated>
    <category term="operations" label="Operations"/>
    <summary>An idle InventDB instance stops, keeps every byte of its storage and wakes on the next request. Here is the order of events and how we measure the energy.</summary>
  </entry>
</feed>
