<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Lattice Grid</title><description>Notes on building a data grid: what we measured, why it is built the way it is, and what we got wrong.</description><link>https://www.latticegrid.dev/</link><language>en-gb</language><item><title>The column knows it holds metres</title><link>https://www.latticegrid.dev/blog/column-knows-it-holds-metres/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/column-knows-it-holds-metres/</guid><description>In most grids a unit is a formatter, and a formatter is a lie that shows the moment someone sorts. Lattice Grid makes a quantity a data type, so the column stays a number.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><category>developer</category><category>types</category><category>units</category><author>Tony Goodchild</author></item><item><title>The table is the schema</title><link>https://www.latticegrid.dev/blog/the-table-is-the-schema/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/the-table-is-the-schema/</guid><description>htmx renders the table on the server; Lattice Grid upgrades it into a live grid in place, columns and rows read straight from the markup, and it survives htmx swaps.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><category>integration</category><category>htmx</category><author>Tony Goodchild</author></item><item><title>Swap the import</title><link>https://www.latticegrid.dev/blog/swap-the-import/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/swap-the-import/</guid><description>A compatibility layer gives Lattice Grid the shape of dhtmlx&apos;s dhx.Grid, so the constructor, the data and selection namespaces and the events keep working. Swap the import.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><category>integration</category><category>migration</category><author>Tony Goodchild</author></item><item><title>When the grid became the interface</title><link>https://www.latticegrid.dev/blog/when-the-grid-became-the-interface/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/when-the-grid-became-the-interface/</guid><description>Grids are sold to developers, so they are built for developers. Why Lattice Grid ships redaction, annotation and presentation tools to every user as standard.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>developer</category><author>Tony Goodchild</author></item><item><title>A real spreadsheet, written by the grid</title><link>https://www.latticegrid.dev/blog/excel-export/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/excel-export/</guid><description>Not a CSV renamed to .xlsx. A real workbook with typed cells, a frozen header and your column widths, written in the browser with nothing added to your bundle.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>export</category><author>Tony Goodchild</author></item><item><title>Two ways to show a row&apos;s detail</title><link>https://www.latticegrid.dev/blog/master-detail/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/master-detail/</guid><description>A row that expands into a nested grid, or a pane beside the list where nothing moves. They solve different problems, and one config field switches between them.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><category>developer</category><category>master detail</category><author>Tony Goodchild</author></item><item><title>Put the conversation next to the number</title><link>https://www.latticegrid.dev/blog/cell-comments/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/cell-comments/</guid><description>The question about a figure lives in a chat thread and the figure lives in a grid. Attach the discussion to the cell and both problems go away.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>collaboration</category><author>Tony Goodchild</author></item><item><title>The view someone built on Monday is still there on Friday</title><link>https://www.latticegrid.dev/blog/saved-views/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/saved-views/</guid><description>Everybody rebuilds the same filter every morning. Name it once, and the queue opens the way each role needs it without anyone negotiating.</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>workflow</category><author>Tony Goodchild</author></item><item><title>Hierarchies that survive real data</title><link>https://www.latticegrid.dev/blog/tree-data/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/tree-data/</guid><description>Every tree demo uses data that is already a tree. Yours will not be. Here is what happens to the orphan, the cycle and the missing level.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>developer</category><category>tree data</category><author>Tony Goodchild</author></item><item><title>What did this row say a minute ago?</title><link>https://www.latticegrid.dev/blog/scrubbing-back-through-time/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/scrubbing-back-through-time/</guid><description>On a live grid the useful question is not what you did, it is what the data did. Drag the scrubber back and the cells that moved are marked.</description><pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>live data</category><category>timeline</category><author>Tony Goodchild</author></item><item><title>Pause the feed without losing your place</title><link>https://www.latticegrid.dev/blog/holding-the-feed/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/holding-the-feed/</guid><description>An analyst reading a row while it moves under them will eventually read the wrong number. One button holds the grid still and counts what it is holding.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><category>end user</category><category>live data</category><author>Tony Goodchild</author></item><item><title>A grid that keeps up with the feed</title><link>https://www.latticegrid.dev/blog/live-updates/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/live-updates/</guid><description>Rows arriving faster than anyone can read them, a grid that stays scrollable while they do, and a rate measured in your browser rather than ours.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><category>live data</category><category>performance</category><author>Tony Goodchild</author></item><item><title>Put the actual numbers on the projector</title><link>https://www.latticegrid.dev/blog/presentation-mode/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/presentation-mode/</guid><description>Screenshots of a grid go stale between the export and the meeting. Present the grid itself, step saved views like slides, and answer the question in the room.</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate><category>end user</category><category>meetings</category><author>Tony Goodchild</author></item><item><title>Share your screen without sharing the salaries</title><link>https://www.latticegrid.dev/blog/redaction-for-meetings/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/redaction-for-meetings/</guid><description>Every team has a spreadsheet they cannot put on a projector because of one column. Redaction hides the values and keeps the meeting working.</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate><category>end user</category><category>meetings</category><author>Tony Goodchild</author></item><item><title>What changed since last week</title><link>https://www.latticegrid.dev/blog/diff-mode/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/diff-mode/</guid><description>The reconciliation everybody does with two exports and a lookup, done by the grid instead: what moved, what it was before, what arrived and what went.</description><pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate><category>end user</category><category>diff</category><author>Tony Goodchild</author></item><item><title>Give the grid the whole window</title><link>https://www.latticegrid.dev/blog/maximise-for-editing/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/maximise-for-editing/</guid><description>A panel a few rows tall is a poor place to spend a morning. One control fills the screen with the grid, Escape puts it back, and your work comes with it.</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><category>end user</category><category>editing</category><author>Tony Goodchild</author></item><item><title>Width is the harder problem</title><link>https://www.latticegrid.dev/blog/thirty-columns/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/thirty-columns/</guid><description>Everybody demos a long grid. The one that hurts is the wide one, where the row you are reading loses its name somewhere around column nineteen.</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><category>performance</category><category>columns</category><category>developer</category><author>Tony Goodchild</author></item><item><title>A million rows, timed on your machine</title><link>https://www.latticegrid.dev/blog/a-million-rows/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/a-million-rows/</guid><description>Every grid vendor has a benchmark number from a laptop you have never seen. The grid in this post times itself in your browser instead.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>performance</category><category>developer</category><author>Tony Goodchild</author></item><item><title>Types are not labels</title><link>https://www.latticegrid.dev/blog/types-are-not-labels/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/types-are-not-labels/</guid><description>In most grids a column type picks an alignment. Here it decides storage, comparison, parsing, formatting and the editor, from one word.</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><category>developer</category><category>types</category><author>Tony Goodchild</author></item><item><title>A column definition should read like a description</title><link>https://www.latticegrid.dev/blog/columns-that-read-like-descriptions/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/columns-that-read-like-descriptions/</guid><description>Forty flat properties per column is a config file nobody reads twice. Grouping them by concern, and naming the repeats, makes a column list readable.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><category>developer</category><category>configuration</category><author>Tony Goodchild</author></item><item><title>Get going in two minutes</title><link>https://www.latticegrid.dev/blog/two-minutes/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/two-minutes/</guid><description>One script, one stylesheet, a div with a height and a list of columns. Sorting, filtering, resizing and reordering are already there.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>getting started</category><category>developer</category><author>Tony Goodchild</author></item><item><title>One licence per domain, not per developer</title><link>https://www.latticegrid.dev/blog/one-licence-per-application/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/one-licence-per-application/</guid><description>A grid is installed once and touched by everybody afterwards. Pricing it per developer bills you for a fact about your org chart, not your product.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>licensing</category><category>pricing</category><author>Tony Goodchild</author></item><item><title>Why we built our own grid</title><link>https://www.latticegrid.dev/blog/why-we-built-our-own/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/why-we-built-our-own/</guid><description>Nobody sets out to write a data grid. We drew the comparison table first, and three shapes of problem kept sending us back to the whiteboard.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><category>engineering</category><category>buying</category><author>Tony Goodchild</author></item><item><title>We built this for ourselves. Now you can buy it.</title><link>https://www.latticegrid.dev/blog/lattice-grid-is-public/</link><guid isPermaLink="true">https://www.latticegrid.dev/blog/lattice-grid-is-public/</guid><description>Lattice Grid ran inside our own platform against live customer data for years before it had a price. Here is what that means for you.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><category>launch</category><category>product</category><author>Tony Goodchild</author></item></channel></rss>