Skip to content

Commit 3d0a537

Browse files
committed
Refine and advance docs; refine README
1 parent cc33b77 commit 3d0a537

File tree

22 files changed

+2620
-542
lines changed

22 files changed

+2620
-542
lines changed

README.md

Lines changed: 137 additions & 143 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 834 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
"chalk": "^5.4.1",
6464
"coveralls": "^3.1.0",
6565
"esbuild": "^0.20.2",
66+
"markdown-it-mathjax3": "^4.3.2",
6667
"mocha": "^10.3.0",
6768
"mocha-lcov-reporter": "^1.3.0",
6869
"vitepress": "^1.6.4"

site/.vitepress/cache/deps/_metadata.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
{
2-
"hash": "a52c67bf",
3-
"configHash": "f504b6fd",
4-
"lockfileHash": "c59430c8",
5-
"browserHash": "abbd1bf8",
2+
"hash": "632758c0",
3+
"configHash": "60d1ba4e",
4+
"lockfileHash": "4eb9abd1",
5+
"browserHash": "82cc4f0f",
66
"optimized": {
77
"vue": {
88
"src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
99
"file": "vue.js",
10-
"fileHash": "545f3855",
10+
"fileHash": "c314bada",
1111
"needsInterop": false
1212
},
1313
"vitepress > @vue/devtools-api": {
1414
"src": "../../../../node_modules/@vue/devtools-api/dist/index.js",
1515
"file": "vitepress___@vue_devtools-api.js",
16-
"fileHash": "ff8415a2",
16+
"fileHash": "8e97e6d6",
1717
"needsInterop": false
1818
},
1919
"vitepress > @vueuse/core": {
2020
"src": "../../../../node_modules/@vueuse/core/index.mjs",
2121
"file": "vitepress___@vueuse_core.js",
22-
"fileHash": "b5415e52",
22+
"fileHash": "bb5355b9",
2323
"needsInterop": false
2424
},
2525
"vitepress > @vueuse/integrations/useFocusTrap": {
2626
"src": "../../../../node_modules/@vueuse/integrations/useFocusTrap.mjs",
2727
"file": "vitepress___@vueuse_integrations_useFocusTrap.js",
28-
"fileHash": "4a0f0366",
28+
"fileHash": "cfbd4c69",
2929
"needsInterop": false
3030
},
3131
"vitepress > mark.js/src/vanilla.js": {
3232
"src": "../../../../node_modules/mark.js/src/vanilla.js",
3333
"file": "vitepress___mark__js_src_vanilla__js.js",
34-
"fileHash": "aba5bada",
34+
"fileHash": "cf440e4b",
3535
"needsInterop": false
3636
},
3737
"vitepress > minisearch": {
3838
"src": "../../../../node_modules/minisearch/dist/es/index.js",
3939
"file": "vitepress___minisearch.js",
40-
"fileHash": "1498c7fe",
40+
"fileHash": "5aa2b656",
4141
"needsInterop": false
4242
}
4343
},

site/.vitepress/config.ts

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import { defineConfig } from 'vitepress'
22

33
export default defineConfig({
4-
lang: 'en-US',
54
title: 'LinkedQL',
65
description: 'A modern take on SQL and SQL databases — with reactivity, versioning, and more.',
7-
appearance: 'force-dark',
8-
base: '/',
9-
cleanUrls: true,
106
themeConfig: {
117
// Site logo
128
logo: {
@@ -20,10 +16,11 @@ export default defineConfig({
2016
],
2117
// Top nav
2218
nav: [
23-
{ text: 'About', link: '/docs/about' },
19+
{ text: 'What is LinkedQL', link: '/docs/about' },
2420
{ text: 'Capabilities', link: '/docs/capabilities' },
2521
{ text: 'FlashQL', link: '/docs/flashql' },
26-
{ text: 'Docs', link: '/docs' },
22+
{ text: 'Docs', link: '/docs', activeMatch: '/docs' },
23+
{ text: 'Engineering', link: '/engineering/realtime-engine', activeMatch: '/engineering' },
2724
{
2825
text: 'Star on GitHub',
2926
link: 'https://github.com/linked-db/linked-ql',
@@ -36,7 +33,7 @@ export default defineConfig({
3633
{
3734
text: 'Intro',
3835
items: [
39-
{ text: 'About', link: '/docs/about' },
36+
{ text: 'What is LinkedQL', link: '/docs/about' },
4037
]
4138
},
4239
{
@@ -48,6 +45,7 @@ export default defineConfig({
4845
{
4946
text: 'Capabilities',
5047
link: '/docs/capabilities',
48+
collapsed: false,
5149
items: [
5250
{ text: 'DeepRefs', link: '/docs/capabilities/deeprefs' },
5351
{ text: 'JSON Literals', link: '/docs/capabilities/json-literals' },
@@ -60,7 +58,21 @@ export default defineConfig({
6058
{
6159
text: 'FlashQL',
6260
items: [
63-
{ text: 'FlashQL', link: '/docs/flashql' },
61+
{
62+
text: 'FlashQL',
63+
link: '/docs/flashql',
64+
collapsed: false,
65+
items: [
66+
{ text: 'Foreign I/O', link: '/docs/flashql/foreign-io' },
67+
{ text: 'Language Reference', link: '/docs/flashql/lang' },
68+
]
69+
},
70+
]
71+
},
72+
{
73+
text: 'Engineering',
74+
items: [
75+
{ text: 'Realtime Engine', link: '/engineering/realtime-engine' },
6476
]
6577
}
6678
]
@@ -73,16 +85,19 @@ export default defineConfig({
7385
},
7486

7587
// Search: VitePress ships built-in local search
76-
search: {
77-
provider: 'local'
78-
},
79-
80-
// Appearance (dark mode)
81-
appearance: 'auto' // auto | dark | light
88+
search: { provider: 'local' },
8289
},
8390

8491
// VitePress defaults are great; you can add head tags here if needed
85-
head: [
86-
['meta', { name: 'theme-color', content: '#0f172a' }]
87-
]
92+
head: [['meta', { name: 'theme-color', content: '#0f172a' }]],
93+
94+
lang: 'en-US',
95+
base: '/',
96+
cleanUrls: true,
97+
appearance: 'force-dark',
98+
toc: { level: [1, 2] },
99+
markdown: {
100+
math: true,
101+
theme: 'material-theme-palenight',
102+
},
88103
})

site/.vitepress/theme/custom.css

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,34 @@
11
:root {
22
/* Logo */
33
--vp-nav-logo-height: 40px;
4+
5+
/* Dark background for code blocks */
6+
--vp-code-block-bg: #212327;
47
}
8+
59
.nowrap {
6-
white-space: nowrap;
10+
white-space: nowrap;
11+
}
12+
13+
h1 { counter-reset: h2_c; }
14+
15+
h2 {
16+
counter-increment: h2_c;
17+
counter-reset: h3_c;
18+
}
19+
h2:not(.title, .text, :has(em)):before { content: counter(h2_c) ". "; }
20+
21+
h3 {
22+
counter-increment: h3_c;
23+
counter-reset: h4_c;
24+
}
25+
h3:not(.text):before { content: counter(h2_c) "." counter(h3_c) ". "; }
26+
27+
h4 {
28+
counter-increment: h4_c;
29+
}
30+
h4:not(.text):before { content: counter(h2_c) "." counter(h3_c) "." counter(h4_c) ". "; }
31+
32+
:is(h2, h3, h4)::before {
33+
font-family: "Roboto Mono", monospace;
734
}

site/.vitepress/theme/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import DefaultTheme from 'vitepress/theme'
22
import './custom.css'
33

44
export default {
5-
...DefaultTheme
5+
extends: DefaultTheme
66
}

site/docs.md

Lines changed: 0 additions & 40 deletions
This file was deleted.

site/docs/about.md

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,57 @@
1-
# Idea
1+
# LinkedQL <br>— A Modern Take on SQL and SQL Databases
2+
3+
Try an advanced form of SQL right on your database. 🛸
24

35
## What is LinkedQL
46

5-
LinkedQL is a database client that solves the modern database capability problem in a single interface.
6-
Same familiar API as a classic client (`client.query()`), but **advanced SQL over your database** — bringing relational queries, live queries, a schema versioning system, offline capabilities and more.
7+
LinkedQL is both:
8+
9+
+ a query client — `client.query()`
10+
+ and, more broadly, an idea — **SQL reimagined for modern apps**.
11+
12+
The broader idea captures the **intent** behind each tool in the compensatory layers built around SQL — query builders, ORMs, schema mappers, GraphQL servers, and other application-level boilerplates — and enables these natively within the language.
713

8-
LinkedQL is more **a modern take on SQL and SQL databases** than just a client.
14+
This brings us to SQL that finally internalizes the external capabilities built around it — **an upgrade**.
915

10-
Need the full power of SQL locally? LinkedQL bundles an **embeddable, in-memory database** — codenamed **FlashQL**.
11-
Use it as a lighter replacement for SQLite or PGLite, with all of LinkedQL’s power built in.
16+
Think of LinkedQL as **SQL, upgraded** — for modern applications.
1217

1318
## Why LinkedQL
1419

15-
SQL and SQL databases have a **capability problem.**
16-
Modern applications built around them have to wade through layers of **external tooling** as a consequence.<br>
17-
(For example, need relational queries and realtime data? → typical setup: ORM + GraphQL servers.)
20+
“Modern” SQL shouldn’t require an entire scaffolding layer to fit within modern applications.
21+
22+
Ideally, there should be a declarative way to express relationships in SQL rather than through an external ORM; a syntax for JSON composition instead of an imperative set of JSON functions; first-class support for application-land fundamentals like reactivity over external subscription servers; native handling of meta-concerns like schema versioning over manual migration tooling.
23+
24+
The goal with LinkedQL is to bring these capabilities to the database itself and retire the historic compensation layer around SQL.
25+
26+
## Capabilities
27+
28+
| Capability | Description |
29+
| :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------- |
30+
| 🔗 **DeepRef Operators** | Traverse relationships using simple path notation (`~>` / `<~`). Insert or update nested structures using same notation. |
31+
|**Live Queries** | Turn on reactivity over any SQL query with `{ live: true }`. No extra infrastructure required. |
32+
| 🧩 **JSON Literals** | Bring JSON-like clearity to your queries with LinkedQL's first-class support for JSON notation. |
33+
| 🪄 **Upserts** | Do upserts with a literal UPSERT statement. |
34+
| 🧠 **Schema Versioning** | (Coming soon) Get automatic schema versioning on your database: automatic snapshots and historical introspection. |
35+
| 💾 **Edge & Offline Runtime** | (FlashQL) Run or embed SQL locally — in browsers, workers, or edge devices — for local-first and offline-first applications. |
36+
| 🌐 **Federation & Sync** | (Alpha) Unify remote databases, REST endpoints, and local stores into a single relational graph with seamless synchronization. |
37+
38+
## Features
39+
40+
| Feature | Description |
41+
| :---------------------------------------- | :------------------------------------------------------------------------------------------------------ |
42+
| 💻 **Classic `client.query()` Interface** | Same classic client interface; advanced capabalities for modern applications. |
43+
| 🔗 **Multi-Dialect Support** | A universal parser that understands PostgreSQL, MySQL, MariaDB, and FlashQL — one client, many dialects. |
44+
| 💡 **Lightweight Footprint** | A full reactive data layer in one compact library — under 80 KiB (min/zip). |
45+
| 🎯 **Automatic Schema Inference** | No upfront schema work. LinkedQL auto-discovers your schema and stays schema-driven across complex tasks. |
46+
| 🪄 **Diff-Based Migrations** | (Coming soon) Evolve schemas declaratively through change detection instead of hand-written migration scripts. |
47+
48+
## Next Steps
1849

19-
Rather than extend that layer with yet another prosthetic arm for a missing limb in SQL, **LinkedQL extends SQL itself** to close the gaps at their level — **syntax gaps at the language layer**, **runtime problems at the runtime layer.**
50+
Choose where to start:
2051

21-
All of that comes built-in with the classic client API — giving your database an **automatic upgrade** in both **language** and **runtime capabilities**.
52+
| Path | Focus |
53+
|:--|:--|
54+
| [Getting Started](./) | Get started with LinkedQL in under three minutes. No database required |
55+
| [Explore Capabilities](./capabilities) | Jump to the Capabilities section. |
56+
| [Meet FlashQL](./flashql) | Meet FlashQL — LinkedQL's embeddable SQL engine. |
57+
| [Engineering Deep Dive](../engineering/realtime-engine) | Dig into LinkedQL's engineering in the engineering section. |

0 commit comments

Comments
 (0)