From 750905fa612e9633151454cbdd62aebbb473c90c Mon Sep 17 00:00:00 2001 From: Yusuf GUNDOGDU Date: Wed, 30 Sep 2026 12:18:05 +0300 Subject: [PATCH] site: move to studio 0.17.0 and add the two engines it introduced The version chip, the badge and the schema.org softwareVersion all read from site.config.json, so every page has been saying 0.16.2 since 0.17.0 shipped on 26 September. 0.17.0 added Prometheus and Apache Kafka, and neither appeared anywhere on the site. Leaving them out while moving the version would have made the engine count wrong rather than merely stale, so both get a card, the two categories they need, and the count moves from seventeen to nineteen. The FAQ now also says why that is not the eighteen the product listings quote: the site counts LibreDB itself, the embedded store the playground runs on, and the listings count only the engines you point Studio at. Trino is also called by its own name. It is not an Apache Software Foundation project; the product repository corrected this on 27 September and the site still carried the old form. --- public/engines/kafka.svg | 1 + public/engines/prometheus.svg | 1 + site.config.json | 4 ++-- src/data/compare.ts | 2 +- src/data/engines.ts | 25 ++++++++++++++++++++++--- src/data/faq.ts | 2 +- src/data/home.ts | 6 +++--- src/pages/databases.astro | 20 ++++++++++++++++---- tests/engines.test.ts | 6 +++--- 9 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 public/engines/kafka.svg create mode 100644 public/engines/prometheus.svg diff --git a/public/engines/kafka.svg b/public/engines/kafka.svg new file mode 100644 index 0000000..1404c10 --- /dev/null +++ b/public/engines/kafka.svg @@ -0,0 +1 @@ +Apache Kafka diff --git a/public/engines/prometheus.svg b/public/engines/prometheus.svg new file mode 100644 index 0000000..0689d33 --- /dev/null +++ b/public/engines/prometheus.svg @@ -0,0 +1 @@ +Prometheus diff --git a/site.config.json b/site.config.json index f07f1b5..fc3d15f 100644 --- a/site.config.json +++ b/site.config.json @@ -4,8 +4,8 @@ "url": "https://libredb.org", "domain": "libredb.org", "tagline": "The database editor that deploys next to your data.", - "description": "LibreDB Studio is the open-source database IDE that deploys next to your data instead of onto your laptop — one browser tab for PostgreSQL, MySQL, MongoDB, Redis and thirteen more engines, with SSO and audit built in.", - "version": "0.16.2", + "description": "LibreDB Studio is the open-source database IDE that deploys next to your data instead of onto your laptop — one browser tab for PostgreSQL, MySQL, MongoDB, Redis and fifteen more engines, with SSO and audit built in.", + "version": "0.17.0", "license": "MIT", "company": "Sekoya Grup Bilişim ve Teknoloji Ltd. Şti., İstanbul", "copyrightYear": 2026, diff --git a/src/data/compare.ts b/src/data/compare.ts index 7647933..cc43bb0 100644 --- a/src/data/compare.ts +++ b/src/data/compare.ts @@ -98,7 +98,7 @@ export const consequences: Consequence[] = [ { question: 'Working across several engines at once', desktop: 'Depends on the tool; often several tools.', - beside: 'Seventeen engines behind one tab and one grid.', + beside: 'Nineteen engines behind one tab and one grid.', }, ]; diff --git a/src/data/engines.ts b/src/data/engines.ts index 809b86b..6c97a03 100644 --- a/src/data/engines.ts +++ b/src/data/engines.ts @@ -1,12 +1,13 @@ /** - * The seventeen engines shown in the hexagon grid (design/Home.dc.html → engineData). + * The nineteen engines shown in the hexagon grid (design/Home.dc.html → engineData). * Copy, transport strings and the "what this engine does not do" lines are final — * they are the honest-capability claim the design is built around. * * `logo` points at a self-hosted copy under public/engines/; the prototype * hot-linked devicon / simpleicons CDNs (see scripts/fetch-engine-logos.sh). */ -export type EngineCategory = 'SQL' | 'Analytics' | 'Federated' | 'Document' | 'Key-value' | 'Wide-column' | 'Search'; +export type EngineCategory = + 'SQL' | 'Analytics' | 'Federated' | 'Document' | 'Key-value' | 'Wide-column' | 'Search' | 'Time-series' | 'Streaming'; export interface Engine { id: string; @@ -104,7 +105,7 @@ export const engines: Engine[] = [ }, { id: 'trino', - name: 'Apache Trino', + name: 'Trino', cat: 'Federated', logo: '/engines/trino.svg', desc: 'Federated SQL — one query across the catalogs you already have, from object storage to RDBMS.', @@ -174,6 +175,24 @@ export const engines: Engine[] = [ tr: 'http · 9200', not: 'Search engines are query-and-browse: no row editing, no ER diagrams.', }, + { + id: 'prometheus', + name: 'Prometheus', + cat: 'Time-series', + logo: '/engines/prometheus.svg', + desc: 'PromQL over the HTTP API, with the metric, rule and target browser beside it.', + tr: 'http \u00b7 9090', + not: 'Read-only: Studio calls the read APIs only, so there is nothing to write back.', + }, + { + id: 'kafka', + name: 'Apache Kafka', + cat: 'Streaming', + logo: '/engines/kafka.svg', + desc: 'Topic, group and broker browser that reads by offset or by time.', + tr: 'kafka \u00b7 9092', + not: 'Read-only: it reads records, it does not produce them.', + }, ]; export const defaultEngineId = 'postgresql'; diff --git a/src/data/faq.ts b/src/data/faq.ts index bf326e0..fd9eb99 100644 --- a/src/data/faq.ts +++ b/src/data/faq.ts @@ -10,7 +10,7 @@ export const faq = [ }, { q: 'Which databases are supported?', - a: 'Seventeen engines: PostgreSQL, MySQL, Oracle, SQL Server, SQLite, libSQL, DuckDB, ClickHouse, Apache Druid, Apache Trino, MongoDB, Couchbase, Redis, LibreDB, Cassandra, Elasticsearch and OpenSearch — relational, document, key-value, wide-column, analytical, search and federated query.', + a: 'Nineteen engines: PostgreSQL, MySQL, Oracle, SQL Server, SQLite, libSQL, DuckDB, ClickHouse, Apache Druid, Trino, MongoDB, Couchbase, Redis, LibreDB, Cassandra, Elasticsearch, OpenSearch, Prometheus and Apache Kafka — relational, document, key-value, wide-column, analytical, search, time-series, streaming and federated query. One of the nineteen is LibreDB itself, the embedded store the playground runs on, so the count you will see on the product listings is eighteen: those count the engines you point Studio at, not the one it carries.', }, { q: 'Is anything held back from the open-source build?', diff --git a/src/data/home.ts b/src/data/home.ts index cc6ac3b..2de2e2e 100644 --- a/src/data/home.ts +++ b/src/data/home.ts @@ -22,7 +22,7 @@ export const hero = { lineOne: ['You', 'created', 'the', 'database.'], lineTwo: ['The', 'editor', 'is', 'already', 'beside', 'it.'], }, - sub: 'LibreDB Studio is the database IDE that deploys next to your data instead of onto your laptop — one browser tab for PostgreSQL, MySQL, MongoDB, Redis and thirteen more engines, with SSO and audit built in.', + sub: 'LibreDB Studio is the database IDE that deploys next to your data instead of onto your laptop — one browser tab for PostgreSQL, MySQL, MongoDB, Redis and fifteen more engines, with SSO and audit built in.', primaryCta: { label: 'Open live demo', href: 'https://app.libredb.org' }, secondaryCta: { label: 'Deploy in one click', href: '#deploy' }, command: 'docker run -p 3000:3000 libredb/libredb-studio', @@ -151,7 +151,7 @@ export const how = { /* --- databases ------------------------------------------------------------ */ export const databases = { - eyebrow: 'Seventeen engines', + eyebrow: 'Nineteen engines', headline: { lineOne: 'One interface.', gradient: 'Different engines.' }, intro: "Relational, document, key-value, analytical, search and federated query — the same tree, editor and grid over each of them, and each engine's real limits declared rather than papered over.", @@ -159,7 +159,7 @@ export const databases = { notDoNote: 'Stated because the alternative is a feature list that quietly breaks on the fourth engine. Capability flags come from the provider itself — a control that cannot work is hidden, not offered and then failed.', footnote: - 'The claim is the span, not a count — seventeen engines, one interface. Per-engine detail lives in the provider docs.', + 'The claim is the span, not a count — nineteen engines, one interface. Per-engine detail lives in the provider docs.', } as const; /* --- product demo --------------------------------------------------------- */ diff --git a/src/pages/databases.astro b/src/pages/databases.astro index d3b249f..bf2c131 100644 --- a/src/pages/databases.astro +++ b/src/pages/databases.astro @@ -6,9 +6,19 @@ import { site } from '../lib/site'; // The homepage shows one engine at a time behind a hexagon tablist — good for a // first impression, useless for the question this page exists to answer: "is my -// engine in here, and what exactly does it not do?" So this renders all seventeen +// engine in here, and what exactly does it not do?" So this renders all nineteen // at once, grouped, with every limit visible without a click. -const ORDER: EngineCategory[] = ['SQL', 'Analytics', 'Federated', 'Document', 'Key-value', 'Wide-column', 'Search']; +const ORDER: EngineCategory[] = [ + 'SQL', + 'Analytics', + 'Federated', + 'Document', + 'Key-value', + 'Wide-column', + 'Search', + 'Time-series', + 'Streaming', +]; const BLURBS: Record = { SQL: 'Pooled connections, catalog introspection, visual EXPLAIN and ER diagrams.', @@ -18,6 +28,8 @@ const BLURBS: Record = { 'Key-value': 'Ordered keyspaces. Tables and collections are conventions over the keys.', 'Wide-column': 'Partition-and-clustering-key stores, where a scan is a decision, not a default.', Search: 'Index-first engines queried through their own DSL as well as SQL where offered.', + 'Time-series': 'Metric stores read through their own query language; the series is the table.', + Streaming: 'Logs of records, browsed by offset or by time rather than queried.', }; const groups = ORDER.map((cat) => ({ @@ -44,7 +56,7 @@ const schema = [
@@ -164,7 +176,7 @@ const schema = [ text-wrap: pretty; } - /* Category jump strip — seventeen engines is enough to need one. */ + /* Category jump strip — nineteen engines is enough to need one. */ .dbp__counts { display: flex; flex-wrap: wrap; diff --git a/tests/engines.test.ts b/tests/engines.test.ts index b83e63f..909a99f 100644 --- a/tests/engines.test.ts +++ b/tests/engines.test.ts @@ -71,10 +71,10 @@ describe('the engine count is stated consistently', () => { // The count appears as prose in five places. It has already drifted once — the // site said sixteen while docs/providers/README.md listed seventeen providers, // because LibreDB (the embedded store /playground runs) was never added. - const WORD = 'seventeen'; + const WORD = 'nineteen'; it('matches the number of engines actually defined', () => { - expect(engines.length).toBe(17); + expect(engines.length).toBe(19); }); it('is spelled the same way everywhere it is written out', () => { @@ -86,7 +86,7 @@ describe('the engine count is stated consistently', () => { ] as const; for (const f of sources) { const text = readFileSync(f, 'utf8').toLowerCase(); - expect(text.includes('sixteen'), `${f} still says "sixteen"`).toBe(false); + expect(text.includes('seventeen'), `${f} still says "seventeen"`).toBe(false); expect(text.includes(WORD), `${f} should name the count`).toBe(true); } });