<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
    <title>SchemaStack Blog</title>
    <link>https://schemastack.io/blog</link>
    <description>One feature per post, verified against the real product before publishing.</description>
    <item>
      <title>The table that points at itself</title>
      <link>https://schemastack.io/blog/self-referencing-tables</link>
      <guid isPermaLink="true">https://schemastack.io/blog/self-referencing-tables</guid>
      <pubDate>Fri, 28 Aug 2026 09:00:00 GMT</pubDate>
      <description>Categories with a parent category, employees with a manager, comments replying to comments — one table, one foreign key pointing home. You can build it from the picker now, and read a whole chain of it in the grid.</description>
    </item>
    <item>
      <title>Importing the same file twice</title>
      <link>https://schemastack.io/blog/import-without-duplicating</link>
      <guid isPermaLink="true">https://schemastack.io/blog/import-without-duplicating</guid>
      <pubDate>Fri, 28 Aug 2026 09:00:00 GMT</pubDate>
      <description>Imports only ever added, so re-importing a corrected export gave you everything twice. Name the columns that identify a row and the second import skips or corrects instead of duplicating.</description>
    </item>
    <item>
      <title>A key that can't see the whole workspace</title>
      <link>https://schemastack.io/blog/mcp-key-scoping</link>
      <guid isPermaLink="true">https://schemastack.io/blog/mcp-key-scoping</guid>
      <pubDate>Wed, 26 Aug 2026 09:00:00 GMT</pubDate>
      <description>An MCP key you hand an agent isn't all-or-nothing. It carries one of three access levels, capped by what the workspace allows, and can be narrowed to named views with a role on each — so a key scoped to one table is refused every other table's data, reads included.</description>
    </item>
    <item>
      <title>The join table is a real table</title>
      <link>https://schemastack.io/blog/join-tables</link>
      <guid isPermaLink="true">https://schemastack.io/blog/join-tables</guid>
      <pubDate>Wed, 26 Aug 2026 09:00:00 GMT</pubDate>
      <description>A many-to-many in SchemaStack is a genuine join table — composite key, two cascading foreign keys — and when it carries columns of its own, a role or a rate, it stays a first-class table you drill through rather than a detail hidden from you.</description>
    </item>
    <item>
      <title>The export is a snapshot, not the exit</title>
      <link>https://schemastack.io/blog/export-downloads</link>
      <guid isPermaLink="true">https://schemastack.io/blog/export-downloads</guid>
      <pubDate>Wed, 26 Aug 2026 09:00:00 GMT</pubDate>
      <description>You can export a view to a CSV whenever you like — filtered, streamed by a worker, downloaded from a link only you can open. But it's a convenience, not the escape hatch, because the escape hatch is that the data was already in a Postgres database you own.</description>
    </item>
    <item>
      <title>The widget is not the column type</title>
      <link>https://schemastack.io/blog/column-widgets</link>
      <guid isPermaLink="true">https://schemastack.io/blog/column-widgets</guid>
      <pubDate>Wed, 26 Aug 2026 09:00:00 GMT</pubDate>
      <description>A widget decides how a value is typed in and drawn — a date picker, an email link, a currency reading. It sits on top of a plain database column, and the formatting it adds lives in the browser, so the API and the export still see the raw value underneath.</description>
    </item>
    <item>
      <title>Rules the API can't skip</title>
      <link>https://schemastack.io/blog/validation-rules</link>
      <guid isPermaLink="true">https://schemastack.io/blog/validation-rules</guid>
      <pubDate>Mon, 24 Aug 2026 09:00:00 GMT</pubDate>
      <description>A validation rule that lives in a form protects the form. Attach it to the column instead and every writer gets the same answer — the REST API, the grid, the import, the Zap, the agent.</description>
    </item>
    <item>
      <title>Someone else's keystroke</title>
      <link>https://schemastack.io/blog/realtime-collaboration</link>
      <guid isPermaLink="true">https://schemastack.io/blog/realtime-collaboration</guid>
      <pubDate>Mon, 24 Aug 2026 09:00:00 GMT</pubDate>
      <description>What it takes for a colleague's edit to land in your grid without a refresh — two scoped streams, a keepalive that outlives sleeping laptops, and the three tests that turned out to pass whether any of it worked or not.</description>
    </item>
    <item>
      <title>The arrangement you keep rebuilding</title>
      <link>https://schemastack.io/blog/filter-presets</link>
      <guid isPermaLink="true">https://schemastack.io/blog/filter-presets</guid>
      <pubDate>Mon, 24 Aug 2026 09:00:00 GMT</pubDate>
      <description>You filtered, sorted three ways, hid four columns and widened two. A preset saves that whole arrangement — and shares it, so the answer to "how are you looking at this?" is a name instead of a screenshot.</description>
    </item>
    <item>
      <title>One cell, five columns</title>
      <link>https://schemastack.io/blog/display-groups</link>
      <guid isPermaLink="true">https://schemastack.io/blog/display-groups</guid>
      <pubDate>Mon, 24 Aug 2026 09:00:00 GMT</pubDate>
      <description>An address reads as one thing and stores as five. Display groups give you the single cell without giving up the columns underneath it — the query still sorts, filters and exports the parts.</description>
    </item>
    <item>
      <title>Your database, wired to 7,000 apps</title>
      <link>https://schemastack.io/blog/zapier-integration</link>
      <guid isPermaLink="true">https://schemastack.io/blog/zapier-integration</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>SchemaStack has a Zapier integration — three triggers, two actions and a search — so a row in a database you own can start a workflow, or be what a workflow writes to.</description>
    </item>
    <item>
      <title>Why your green rule never fires</title>
      <link>https://schemastack.io/blog/row-styles</link>
      <guid isPermaLink="true">https://schemastack.io/blog/row-styles</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>Two conditional style rules, one row, and the order you put them in decides the colour — plus the four places the styling engine quietly disagrees with the filters on your API.</description>
    </item>
    <item>
      <title>The other table's data, without writing the join</title>
      <link>https://schemastack.io/blog/relationship-columns</link>
      <guid isPermaLink="true">https://schemastack.io/blog/relationship-columns</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>A foreign key holds a number. Point a column at the relationship and the grid shows the related row's name, or a count of the rows on the far side, or several values at once — and it will walk more than one hop to get there.</description>
    </item>
    <item>
      <title>Polling is not real-time, and here is what that costs</title>
      <link>https://schemastack.io/blog/polling-is-not-realtime</link>
      <guid isPermaLink="true">https://schemastack.io/blog/polling-is-not-realtime</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>The grid updates the instant a row changes; a Zap finds out on its next poll. Both are correct, and knowing which is which decides what you should build on.</description>
    </item>
    <item>
      <title>The list that isn't in your email tool</title>
      <link>https://schemastack.io/blog/own-the-list</link>
      <guid isPermaLink="true">https://schemastack.io/blog/own-the-list</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>Signups usually live inside whichever tool captured them. Put them in a database you own instead and every tool becomes downstream — replaceable without an export, queryable without asking.</description>
    </item>
    <item>
      <title>The column that isn't there</title>
      <link>https://schemastack.io/blog/formula-columns</link>
      <guid isPermaLink="true">https://schemastack.io/blog/formula-columns</guid>
      <pubDate>Sun, 23 Aug 2026 09:00:00 GMT</pubDate>
      <description>Write an expression and a column appears in the grid — computed on every query, stored nowhere, with nothing to migrate and nothing that can go stale.</description>
    </item>
    <item>
      <title>Half our readers aren't people</title>
      <link>https://schemastack.io/blog/written-for-machines</link>
      <guid isPermaLink="true">https://schemastack.io/blog/written-for-machines</guid>
      <pubDate>Sat, 22 Aug 2026 09:00:00 GMT</pubDate>
      <description>Every page on this site has a Markdown twin at the same address, the API surfaces are described in a machine-readable catalog, and authentication is published as a document an agent can follow — all generated at build time, so none of it can fall behind.</description>
    </item>
    <item>
      <title>Sometimes the right answer is no</title>
      <link>https://schemastack.io/blog/migration-dry-run</link>
      <guid isPermaLink="true">https://schemastack.io/blog/migration-dry-run</guid>
      <pubDate>Sat, 22 Aug 2026 09:00:00 GMT</pubDate>
      <description>Before altering a column, SchemaStack counts the rows, classifies the operation against the engine you actually run, estimates how long it will take and names what it will lock — and while it runs, the API says 503 rather than hanging.</description>
    </item>
    <item>
      <title>Everything you can ask the API for</title>
      <link>https://schemastack.io/blog/filtering-and-sorting</link>
      <guid isPermaLink="true">https://schemastack.io/blog/filtering-and-sorting</guid>
      <pubDate>Sat, 22 Aug 2026 09:00:00 GMT</pubDate>
      <description>Twelve filter operators in bracket notation, multi-field sorting against a whitelist, depth-capped relationship expansion and field selection — the full query surface, including the parts that behave badly.</description>
    </item>
    <item>
      <title>Your spreadsheet, in a real database</title>
      <link>https://schemastack.io/blog/csv-import</link>
      <guid isPermaLink="true">https://schemastack.io/blog/csv-import</guid>
      <pubDate>Sat, 22 Aug 2026 09:00:00 GMT</pubDate>
      <description>A CSV becomes typed SQL columns with real constraints — and the rows that don't fit are caught and named before they land, instead of becoming nulls you find in six months.</description>
    </item>
    <item>
      <title>When someone ALTERs your table behind our back</title>
      <link>https://schemastack.io/blog/schema-drift</link>
      <guid isPermaLink="true">https://schemastack.io/blog/schema-drift</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <description>SchemaStack isn't the only thing touching your database. Here's how it notices when the schema moved without it, what the report tells you, and what sync will and won't reconcile.</description>
    </item>
    <item>
      <title>Revoking an agent's access, instantly</title>
      <link>https://schemastack.io/blog/instant-revocation</link>
      <guid isPermaLink="true">https://schemastack.io/blog/instant-revocation</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <description>Access tokens are stateless, so revoking one is usually a polite request that takes effect when it expires. Here's the approach that doesn't work, and the one we shipped.</description>
    </item>
    <item>
      <title>The REST API you didn't write</title>
      <link>https://schemastack.io/blog/instant-rest-api</link>
      <guid isPermaLink="true">https://schemastack.io/blog/instant-rest-api</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <description>Every workspace publishes a full REST API generated from its schema — filtering, sorting, pagination, relationship expansion and an OpenAPI document — with no code generation step and nothing to deploy.</description>
    </item>
    <item>
      <title>Bring the database you already have</title>
      <link>https://schemastack.io/blog/import-existing-schema</link>
      <guid isPermaLink="true">https://schemastack.io/blog/import-existing-schema</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <description>Point SchemaStack at an existing Postgres or MySQL database and it reads the schema you already run — tables, columns, types, keys, indexes — then gets out of the way.</description>
    </item>
    <item>
      <title>The spreadsheet that builds your schema</title>
      <link>https://schemastack.io/blog/spreadsheet-builds-schema</link>
      <guid isPermaLink="true">https://schemastack.io/blog/spreadsheet-builds-schema</guid>
      <pubDate>Thu, 20 Aug 2026 09:00:00 GMT</pubDate>
      <description>Add a column in the grid and a real column appears in your database — with the migration previewed first, rows, locking behaviour, SQL and all.</description>
    </item>
    <item>
      <title>Share one table, not your workspace</title>
      <link>https://schemastack.io/blog/guest-links</link>
      <guid isPermaLink="true">https://schemastack.io/blog/guest-links</guid>
      <pubDate>Thu, 20 Aug 2026 09:00:00 GMT</pubDate>
      <description>Guest links give a client, contractor or auditor live access to exactly one view — read or edit, time-limited, revocable, no account required.</description>
    </item>
    <item>
      <title>Your users, their login, their rows</title>
      <link>https://schemastack.io/blog/external-idp-rls</link>
      <guid isPermaLink="true">https://schemastack.io/blog/external-idp-rls</guid>
      <pubDate>Thu, 20 Aug 2026 09:00:00 GMT</pubDate>
      <description>Point a workspace at your Auth0, Clerk or Firebase and your end-users call the generated REST API with their own identities — row-level security narrows every query to their rows.</description>
    </item>
    <item>
      <title>Add your database to Claude with one URL</title>
      <link>https://schemastack.io/blog/agent-connector</link>
      <guid isPermaLink="true">https://schemastack.io/blog/agent-connector</guid>
      <pubDate>Thu, 20 Aug 2026 09:00:00 GMT</pubDate>
      <description>Paste one URL into Claude or ChatGPT and an agent can work in your workspace — after a consent screen, inside scopes that never reach your schema, and revocable in one click.</description>
    </item>
</channel></rss>
