Lattice Grid Buy a licence

blog

We built this for ourselves. Now you can buy it.

Building…
Loading a live grid…

Most data grids on the market were designed to be sold. This one was designed to be used, by us, on a platform where the grid failing meant our own support queue filling up on a Monday morning.

It ran against live customer data across more than 430 entity types. Not a demo dataset, not a benchmark: real records with the awkward shapes real records have, in front of people who would tell us immediately when something was wrong. It has been doing that for years. Today it has a price and a licence, and you can put it in your product.

What “extracted from production” actually buys you

Software written to be sold optimises for the first ten minutes. It demos well, the getting started page is beautiful, and the difficulty arrives in month four when your data turns out to have nulls in a column somebody promised would never have nulls.

Software written to be used optimises for month four, because month four is when the person who wrote it is still the person answering for it. Every hard-won feature in this grid exists because somebody internally hit the problem and would not let it go. Rows that keep their identity when the server reorders them. Totals that stay correct when a filter is applied. A grid that does not lose your selection because a background refresh happened to land.

None of that shows up in a feature comparison. All of it shows up in your support queue.

The things we decided not to do

We did not make it headless. Headless is a good answer if building the UI is the part you enjoy, and a bad answer if you wanted a grid. You get the whole thing: the rendering, the interactions, the keyboard handling, the accessibility work.

We did not couple it to a framework. It is vanilla JavaScript, so it behaves identically in React, Vue, Svelte or a plain HTML page. Adapters for the first three ship as optional bundles, and there is a web component if you would rather write a tag. None of them is required, and none of them is a second copy of the grid.

We did not take a single runtime dependency. Not “few dependencies”. None. No date library, no virtualisation library, no icon font. Two files go into your page and nothing else arrives with them.

And we did not price it per developer

A grid gets installed once and touched by everybody afterwards: the person who built the screen, the contractor covering a sprint, the engineer fixing a bug two years later, the agency doing the redesign. Per-seat pricing turns every one of those into a cost and, worse, into a conversation with procurement.

One licence covers one application, however many people work on it. Add developers, contractors and agencies without adding cost and without an audit.

Development on localhost is free and needs no key at all, so you can build the real screen against your real data and decide afterwards whether it earned the money. There is no trial clock and no sales call in the way.

The grid above is what we ran internally. Sort it, filter it, drag a column somewhere else. It is the product, not a video of it.

Get going in two minutes or see it running.

Read next

  • The column knows it holds metres

    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.

  • The table is the schema

    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.

  • Swap the import

    A compatibility layer gives Lattice Grid the shape of dhtmlx's dhx.Grid, so the constructor, the data and selection namespaces and the events keep working. Swap the import.

All posts RSS