diff --git a/src/components/sections/HomeSection.astro b/src/components/sections/HomeSection.astro
index 0f03db4..4f2c4f0 100644
--- a/src/components/sections/HomeSection.astro
+++ b/src/components/sections/HomeSection.astro
@@ -28,12 +28,14 @@ const flagship = [
-
+
One editor for{' '}
{
@@ -44,7 +46,7 @@ const flagship = [
>
))
}
- — in your browser, with SSO built in.
+ — in your browser, in your cluster, or inside your own product.
diff --git a/src/components/sections/ManifestoSection.astro b/src/components/sections/ManifestoSection.astro
new file mode 100644
index 0000000..dcd2bbe
--- /dev/null
+++ b/src/components/sections/ManifestoSection.astro
@@ -0,0 +1,149 @@
+---
+import SectionHeader from './SectionHeader.astro';
+
+// The five consequences of the belief. Each is a row of the `manifesto` table
+// in sections.ts (rows: 5) — keep the two in step if either changes.
+const consequences = [
+ {
+ belief: 'It runs in a browser',
+ consequence:
+ 'Because the data is not on your machine, and neither are your teammates. A tool that has to be installed is a tool that half the team never opens.',
+ },
+ {
+ belief: 'It reaches a phone',
+ consequence:
+ 'Because the incident that needs a query does not wait for you to open a laptop. The same editor, the same connections, on the screen you already have with you.',
+ },
+ {
+ belief: 'It deploys like infrastructure',
+ consequence:
+ 'A container, a Helm chart, an OpenShift operator, a one-click template on your platform. The way everything else that sits next to a database gets installed.',
+ },
+ {
+ belief: 'It embeds',
+ consequence:
+ 'One npm package, inside your own product. The most useful place for a database editor is the thing that created the database in the first place.',
+ },
+ {
+ belief: 'It holds nothing back',
+ consequence:
+ 'Single sign-on, ER diagrams, the AI assistant and the NoSQL engines all ship in the MIT build. There is no edition where the useful parts live.',
+ },
+];
+---
+
+
+
+
+
+ Open source · MIT · nothing held back
+
+
+
+
+
+ The tool goes to the data. Not the data to the tool.{' '}
+ Everything else about LibreDB Studio follows from that one line — including the licence.
+
+
+
+
+
+
+
+ Forty seconds, then an afternoon
+
+ You create a Postgres on a managed platform. It is ready in forty seconds. Then you want to look inside it —
+ so you open a port to the internet, dig an SSH tunnel, or install a desktop client on every machine that needs
+ one. The database took forty seconds. The window into it takes the rest of the day.
+
+
+
+ Now multiply it
+
+ The team runs Postgres for the application, Mongo for documents, Redis for the cache, ClickHouse for the
+ events. An engineer joins on Monday and spends their first days working out which data lives where, hunting
+ connection strings, waiting on access, and installing a different tool per engine.
+
+
+
+
+
+
+
+
+ Databases moved. They live in Kubernetes now, on managed platforms, in a customer's VPC reached through a jump
+ host. The tools that read them did not move. They are still desktop applications: heavy, licensed per seat,
+ install-first, built on the assumption of one database, one laptop, and one person who never changes machines.
+
+
+
+
+
+
+
+ {
+ consequences.map((c) => (
+
+ {c.belief}
+ {c.consequence}
+
+ ))
+ }
+
+
+
+
+
+
MIT is not generosity. It is a requirement of the architecture.
+
+ You cannot place a per-seat licensed, feature-gated tool into every environment you own. The moment single sign-on
+ costs extra, the tool stops being deployable by default.
+
+
+
+
+
+
Then why is Platform paid?
+
+ Because it is a service rather than an environment. LibreDB Studio is MIT because it
+ has to go everywhere. LibreDB Platform is hosting, tenancy, billing and support for
+ teams that would rather not run Studio themselves.
+
+
+ The line holds under pressure, which is the point. The editor you deploy is free and stays free. No capability is
+ moved across that line to manufacture a reason to upgrade.
+
+
+
+
+
+
diff --git a/src/data/engines.ts b/src/data/engines.ts
index 5cffdc7..05d40e4 100644
--- a/src/data/engines.ts
+++ b/src/data/engines.ts
@@ -1,4 +1,15 @@
// Single source of truth for the supported engine list. Every surface that
// names or counts the engines (hero subtitle, JSON-LD, SEO copy) must derive
// from this array — the 7/5/4 count drift across surfaces is what this fixes.
-export const ENGINES = ['PostgreSQL', 'MySQL', 'Oracle', 'SQL Server', 'SQLite', 'MongoDB', 'Redis'] as const;
+export const ENGINES = [
+ 'PostgreSQL',
+ 'MySQL',
+ 'Oracle',
+ 'SQL Server',
+ 'SQLite',
+ 'MongoDB',
+ 'Redis',
+ 'Couchbase',
+ 'ClickHouse',
+ 'Apache Druid',
+] as const;
diff --git a/src/data/sections.test.ts b/src/data/sections.test.ts
index 8612647..3b9497f 100644
--- a/src/data/sections.test.ts
+++ b/src/data/sections.test.ts
@@ -29,6 +29,26 @@ test('support section exists at /support and names the platform columns', () =>
expect(s.columns.map((c) => c.name)).toEqual(['component', 'supported', 'validated']);
});
+test('studio manifesto section exists at /manifesto and names the story columns', () => {
+ const m = sectionById['manifesto'];
+ expect(m).toBeDefined();
+ expect(m.slug).toBe('manifesto');
+ expect(m.table).toBe('manifesto');
+ expect(m.schema).toBe('studio');
+ // The page renders one card per consequence of the belief; renaming a column
+ // silently breaks the parity with docs/BRAND_MESSAGING.md in libredb-studio.
+ expect(m.columns.map((c) => c.name)).toEqual(['belief', 'consequence']);
+});
+
+test('no section copy hardcodes an engine count', () => {
+ // engines.ts is the single source of truth precisely so counts cannot drift.
+ // Copy that spells out "7+ engines" goes stale the moment a provider lands.
+ for (const s of sections) {
+ expect(s.explain).not.toMatch(/\d\s*\+?\s*(engines|databases)/i);
+ expect(s.pageDescription).not.toMatch(/\d\s*\+?\s*(engines|databases)/i);
+ }
+});
+
test('every section has page SEO fields', () => {
for (const s of sections) {
expect(typeof s.slug).toBe('string');
diff --git a/src/data/sections.ts b/src/data/sections.ts
index 138d113..5c6cdde 100644
--- a/src/data/sections.ts
+++ b/src/data/sections.ts
@@ -40,10 +40,30 @@ export const sections: SectionMeta[] = [
{ name: 'stats', type: 'JSONB' },
],
explain:
- 'Returns the LibreDB Studio overview: a modern, AI-powered, browser-based SQL IDE with SSO across 7+ engines — free and open source under MIT.',
+ 'Returns the LibreDB Studio overview: the database editor that deploys next to your data instead of onto your laptop, with SSO and audit across ten engines — free and open source under MIT.',
slug: '',
- pageTitle: 'LibreDB Studio - AI-Powered Open-Source SQL IDE',
- pageDescription: 'LibreDB Studio - The Modern, AI-Powered Open-Source SQL IDE for Cloud-Native Teams',
+ pageTitle: 'LibreDB Studio - The Open-Source SQL IDE That Deploys Next to Your Data',
+ pageDescription:
+ 'LibreDB Studio is the database editor that deploys next to your data instead of onto your laptop. Ten engines in one browser tab, with SSO and audit built in. Open source under MIT.',
+ schema: 'studio',
+ },
+ {
+ id: 'manifesto',
+ table: 'manifesto',
+ query: 'SELECT belief, consequence FROM manifesto;',
+ rows: 5,
+ cols: 2,
+ execMs: 2,
+ columns: [
+ { name: 'belief', type: 'TEXT' },
+ { name: 'consequence', type: 'TEXT' },
+ ],
+ explain:
+ 'Why LibreDB Studio exists: databases moved to the cloud and their editors stayed on the laptop. The tool goes to the data — which forces it to be browser-based, deployable, embeddable and unrestricted.',
+ slug: 'manifesto',
+ pageTitle: 'Why LibreDB Studio exists - the tool goes to the data',
+ pageDescription:
+ 'Databases moved to the cloud. The tools that read them stayed on the laptop. LibreDB Studio deploys next to the data instead — which is why it is browser-based, deployable, embeddable, and MIT licensed with nothing held back.',
schema: 'studio',
},
{
@@ -63,7 +83,7 @@ export const sections: SectionMeta[] = [
slug: 'features',
pageTitle: 'Features — LibreDB Studio SQL IDE',
pageDescription:
- 'Everything you need to master your data: Monaco SQL editor, NL2SQL Copilot, AI query safety, 7+ databases, pro data grid, visual EXPLAIN, ER diagrams, data masking, SSO and more.',
+ 'Everything you need to master your data: Monaco SQL editor, NL2SQL Copilot, AI query safety, ten database engines, pro data grid, visual EXPLAIN, ER diagrams, data masking, SSO and more.',
schema: 'studio',
},
{
@@ -79,7 +99,7 @@ export const sections: SectionMeta[] = [
{ name: 'driver', type: 'VARCHAR' },
],
explain:
- 'The database engines LibreDB Studio connects to — PostgreSQL, MySQL, Oracle, SQL Server, SQLite, MongoDB, Redis — behind one unified interface, plus LibreDB, our own embedded engine.',
+ 'The database engines LibreDB Studio connects to — PostgreSQL, MySQL, Oracle, SQL Server, SQLite, MongoDB, Redis, Couchbase, ClickHouse and Apache Druid — behind one unified interface, plus LibreDB, our own embedded engine.',
slug: 'providers',
pageTitle: 'Supported Providers — PostgreSQL, MySQL, Oracle, SQL Server, MongoDB, Redis & LibreDB',
pageDescription:
diff --git a/src/pages/[section].astro b/src/pages/[section].astro
index d3f4232..d96c18a 100644
--- a/src/pages/[section].astro
+++ b/src/pages/[section].astro
@@ -6,6 +6,7 @@ import SectionShell from '../components/studio/SectionShell.astro';
import { sections, sectionById } from '../data/sections';
import { sectionSeo } from '../data/section-seo';
+import ManifestoSection from '../components/sections/ManifestoSection.astro';
import FeaturesSection from '../components/sections/FeaturesSection.astro';
import ProvidersSection from '../components/sections/ProvidersSection.astro';
import CompareSection from '../components/sections/CompareSection.astro';
@@ -29,6 +30,7 @@ export function getStaticPaths() {
}
const COMPONENTS: Record