openstatus logoPricingDashboard

Logs View: Two years in the making, one day of migration

Sep 20, 2026 | by Maximilian Kaske | [engineering]

In August 2024 I started a data table for openstatus and we secured the logs.run domain. In August 2026 we finally moved it into the openstatus dashboard.

It took us two years of constant improvements, on the UI/UX and on the DX side. It took us one day to migrate it.

The new Logs tab in the openstatus dashboard.
The new Logs tab in the openstatus dashboard.

Why it lived outside openstatus

We started data-table-filters as a standalone test repository to build really good logs interfaces, with the main focus on filters. As you might know from template.openstatus.dev, we like to experiment first before moving something into our core repo.

I wanted a DX architecture that lets you create clean, opinionated data tables over and over again, from clean primitives. shadcn was the obvious choice. Back then the registry was brand new, the directory didn't exist, and AI could barely help you build any of it.

We built it on the libraries we think are the best out there:

Base UI is supported too. Our own repo still runs on Radix. There's an open issue if you want to help move it.

We recently upgraded everything (TanStack Table v9, date-fns v4, Recharts v3), so there shouldn't be a version mismatch when you bring it into your project. If there is, open an issue or send a PR.

How it grew

The first iterations were hand-crafted, including the design of how you configure a data table.

Then it grew: first the sidebar, then the command palette, then the infinite data table (the hero), the zoomable timeline chart, live mode, and more on top.

And now with AI, you can go a lot further:

  • DataTableAuto infers the columns from your row types. Docs
  • createDrizzleHandler gives you filtering, sorting and cursor pagination for the infinite table without rebuilding that logic yourself. Docs
  • createTableMCPHandler exposes your table schema as an MCP endpoint. Docs
  • DataTableFilterAICommand and createAIFilterHandler turn natural language in the command palette into filters. Docs
  • DataTableRemote renders a headless table from an endpoint that returns the schema and the data, so the server decides how the table looks. Docs

There's so much you can do with it. I'm a bit obsessed with this repo. I care a lot about it, and I also know it doesn't bring openstatus any money. Awareness is always good, but devs often do not pay for open-source work.

Getting started

We kept making it faster to pick up:

  • Every docs page is also available as markdown. Append .md to the URL, for example /docs/quick-start.md. Agents with text/markdown headers will also access it.
  • llms.txt tells your agent exactly where to pick up.
  • We own the @data-table-filters namespace in the shadcn directory, so there's no registry config to set up in your components.json.
  • One shadcn init command gets you from nothing to a working app:
npx shadcn@latest init @data-table-filters/data-table-example-infinite --name data-table-app --template next -p nova

That creates a Next.js app on Base UI with a working /example route: filters, facets, cursor pagination, URL state, the row sheet and the timeline chart. Add -b radix before -p nova if you prefer Radix.

Already have a project?

npx shadcn@latest add @data-table-filters/data-table

While you're here, don't forget to star it on GitHub.

Cheers, Max