page.tsx139 lines · main
1import { DocsShell } from '../../../components/shell';
2
3export const metadata = {
4 title: 'doltgres beta + limitations',
5};
6
7const NOT_YET: readonly [string, string][] = [
8 ['Git-style CLI', 'version control is driven through the SQL interface only — no separate command-line tool yet'],
9 ['push to DoltHub / DoltLab', 'only custom remotes work today (filesystem and S3)'],
10 ['backup & replication', 'both are works in progress'],
11 ['GSSAPI auth', 'not supported'],
12 ['statement-level triggers', 'row-level triggers work; statement-level do not'],
13 ['stored procedures', 'partial — described as "almost done" as of October 2025, not yet complete'],
14 ['window functions', 'not supported yet (verified: row_number() OVER (...) errors on a live instance)'],
15 ['custom operators / indexing / aggregates', 'not supported at Beta'],
16 ['multi-table single-statement UPDATE', 'updating several tables in one UPDATE is not supported'],
17 ['ALTER SEQUENCE / COMMENT ON', 'these DDL statements are not yet supported'],
18 ['collations', 'currently ignored'],
19 ['some psql backslash commands', 'e.g. \\d <table> is not supported'],
20];
21
22export default function LimitationsPage() {
23 return (
24 <DocsShell>
25 <h1 className="font-mono text-2xl tracking-tight">beta + limitations</h1>
26 <p className="mt-2 font-mono text-sm text-[var(--color-text-muted)]">
27 DoltGres is in Beta. This page is the calm, honest list of what to expect — so nothing
28 surprises you in production. The team ships fast, so treat this as a snapshot, not a
29 permanent ceiling.
30 </p>
31
32 <Section title="where it is in its life">
33 <ul className="mt-2 list-inside list-disc">
34 <li>
35 Still <strong>pre-1.0 Beta</strong>; 1.0 is targeted for around{' '}
36 <strong>October 2026</strong>.
37 </li>
38 <li>
39 Roughly <strong>5.2× slower than stock Postgres</strong> overall today (about 6.3× on
40 reads, 3.6× on writes). DoltHub expects this gap to close well before 1.0.
41 </li>
42 <li>
43 About <strong>91% correctness</strong> on the sqllogictest suite.
44 </li>
45 <li>
46 The biggest open issue is <strong>general Postgres compatibility</strong>: there are
47 still many unresolved <code>.pgdump</code> import failures, so importing an existing
48 Postgres dump may not work cleanly yet.
49 </li>
50 </ul>
51 </Section>
52
53 <Section title="not yet supported">
54 <p>
55 The following are known gaps at Beta. (For the type system specifically — including the{' '}
56 <code>SERIAL</code> gap — see{' '}
57 <a className="underline" href="/doltgres/types">
58 types + sql support
59 </a>
60 .)
61 </p>
62 <div className="mt-3 overflow-x-auto rounded-md border border-[var(--color-border-subtle)]">
63 <table className="w-full border-collapse font-mono text-xs">
64 <thead>
65 <tr className="border-b border-[var(--color-border-subtle)] bg-[var(--color-surface)] text-left">
66 <th className="px-3 py-2 font-semibold text-[var(--color-text)]">area</th>
67 <th className="px-3 py-2 font-semibold text-[var(--color-text)]">status</th>
68 </tr>
69 </thead>
70 <tbody>
71 {NOT_YET.map(([area, status]) => (
72 <tr
73 key={area}
74 className="border-b border-[var(--color-border-subtle)] last:border-0"
75 >
76 <td className="px-3 py-2 align-top text-[var(--color-text)]">{area}</td>
77 <td className="px-3 py-2 align-top text-[var(--color-text-muted)]">{status}</td>
78 </tr>
79 ))}
80 </tbody>
81 </table>
82 </div>
83 </Section>
84
85 <Section title="verified working (live probe)">
86 <p>
87 Confirmed against a live DoltGres instance (so you don&apos;t have to take an old changelog
88 on faith):
89 </p>
90 <ul className="mt-2 list-inside list-disc">
91 <li>
92 <strong>Common table expressions</strong> (<code>WITH … SELECT</code>) work — including{' '}
93 <code>UNION ALL</code> inside the CTE.
94 </li>
95 <li>
96 <code>current_setting(...)</code> reads work; the default transaction isolation is{' '}
97 <strong>read committed</strong>.
98 </li>
99 <li>
100 The engine reports itself as <strong>PostgreSQL 15.5</strong> over the wire, and the{' '}
101 <code>dolt.</code> version-control system tables (e.g. <code>dolt.branches</code>) resolve.
102 </li>
103 </ul>
104 </Section>
105
106 <Callout tone="info">
107 <strong className="text-[var(--color-text)]">What Beta IS good for.</strong> You can build
108 and evaluate real solutions on DoltGres today — DoltHub explicitly frames Beta as &quot;you
109 can begin building a production solution.&quot; The headline superpowers already work: branch,
110 merge, fork, clone, diff, and time-travel over your data, all versioned the way Git versions
111 code. If those are why you&apos;re here, they&apos;re here now. Just keep this page&apos;s
112 gaps in mind, pin to a known-good version, and expect the rough edges to keep getting smoother.
113 </Callout>
114 </DocsShell>
115 );
116}
117
118function Section({ title, children }: { title: string; children: React.ReactNode }) {
119 return (
120 <section className="mt-10">
121 <h2 className="font-mono text-lg">{title}</h2>
122 <div className="mt-3 space-y-2 font-mono text-sm text-[var(--color-text-muted)]">
123 {children}
124 </div>
125 </section>
126 );
127}
128
129function Callout({ tone, children }: { tone: 'warn' | 'info'; children: React.ReactNode }) {
130 const color = tone === 'warn' ? 'var(--color-warning)' : 'var(--color-primary)';
131 return (
132 <div
133 className="mt-8 rounded-md border bg-[var(--color-surface)] p-4 font-mono text-sm text-[var(--color-text-muted)]"
134 style={{ borderColor: color }}
135 >
136 {children}
137 </div>
138 );
139}