Files
SpacetimeDB/docs/docusaurus.config.ts
Tyler Cloutier 73881e38f7 Further misc docs changes (#4029)
# Description of Changes

Major documentation overhaul focusing on tables, column types, and
indexes.

  **Quickstart Guides:**
- Updated React, TypeScript, Rust, and C# quickstarts with table/reducer
examples
  - Fixed CLI syntax (positional `--database` argument)
  - Improved template consistency across languages

  **Tables Documentation:**
- Added "Why Tables" section explaining table-oriented design philosophy
(tables as fundamental unit, system tables, data-oriented design
principles)
- Added "Physical and Logical Independence" section explaining how
subscription queries use the relational model independently of physical
storage
- Added brief sections linking to related pages (Visibility,
Constraints, Schedule Tables)
- Renamed "Scheduled Tables" to "Schedule Tables" throughout (tables
store schedules; reducers are scheduled)

  **Column Types:**
  - Split into dedicated page with unified type reference table
- Added "Representing Collections" section (Vec/Array vs table
tradeoffs)
  - Added "Binary Data and Files" section for Vec<u8> storage patterns
- Added "Type Performance" section (smaller types, fixed-size types,
column ordering for alignment)
  - Added complete example struct demonstrating all type categories
  - Renamed "Structured" category to "Composite"

  **Indexes:**
  - Complete rewrite with textbook-style documentation
  - Added "When to Use Indexes" guidance
- Documented single-column and multi-column index syntax (field-level
and table-level)
- Comprehensive range query examples with correct TypeScript `Range`
class syntax
  - Explained multi-column index prefix matching semantics
  - Added index-accelerated deletion examples
  - Included index design guidelines

  **Styling:**
  - Added CSS for table border radius and row separators
  - Created Check component for green checkmarks in tables

  # API and ABI breaking changes

  None. Documentation only.

  # Expected complexity level and risk

  1 - Documentation changes only, no code changes.

  # Testing

  - [ ] Verify docs build without errors
  - [ ] Review rendered pages for formatting issues
  - [ ] Confirm code examples are syntactically correct

---------

Signed-off-by: Tyler Cloutier <cloutiertyler@users.noreply.github.com>
Signed-off-by: John Detter <4099508+jdetter@users.noreply.github.com>
Co-authored-by: clockwork-labs-bot <clockwork-labs-bot@users.noreply.github.com>
Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
2026-01-17 17:44:58 +00:00

210 lines
5.2 KiB
TypeScript

import type { Config } from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
import rehypeShiki, { RehypeShikiOptions } from '@shikijs/rehype';
import bash from 'shiki/langs/bash.mjs';
import c from 'shiki/langs/c.mjs';
import csharp from 'shiki/langs/csharp.mjs';
import fsharp from 'shiki/langs/fsharp.mjs';
import json from 'shiki/langs/json.mjs';
import markdown from 'shiki/langs/markdown.mjs';
import protobuf from 'shiki/langs/proto.mjs';
import python from 'shiki/langs/python.mjs';
import rust from 'shiki/langs/rust.mjs';
import sql from 'shiki/langs/sql.mjs';
import toml from 'shiki/langs/toml.mjs';
import typescript from 'shiki/langs/typescript.mjs';
import tsx from 'shiki/langs/tsx.mjs';
import css from 'shiki/langs/css.mjs';
import nginx from 'shiki/langs/nginx.mjs';
import systemd from 'shiki/langs/systemd.mjs';
import ogTheme from 'shiki/themes/dracula.mjs';
import cpp from 'shiki/langs/cpp.mjs';
import { InkeepConfig } from '@inkeep/cxkit-docusaurus';
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const shikiTheme = {
...ogTheme,
name: 'spacetime-dark',
};
shikiTheme.colors!['editor.background'] =
'var(--clockworklabs-code-background-color)';
const inkeepConfig: Partial<InkeepConfig> = {
baseSettings: {
// This API key is public, it's okay to have it in client code, https://docs.inkeep.com/cloud/ui-components/public-api-keys#public-clients
apiKey: '13504c49fb56b7c09a5ea0bcd68c2b55857661be4d6d311b',
organizationDisplayName: 'SpacetimeDB',
primaryBrandColor: '#4cf490',
colorMode: {
forcedColorMode: 'dark',
},
},
};
const config: Config = {
title: 'SpacetimeDB docs',
tagline: 'SpacetimeDB',
favicon: 'https://spacetimedb.com/favicon-32x32.png',
url: 'https://spacetimedb.com',
// this means the site is served at https://spacetimedb.com/docs/
baseUrl: '/docs/',
onBrokenLinks: 'throw',
onBrokenAnchors: 'throw',
markdown: {
hooks: {
onBrokenMarkdownImages: 'throw',
onBrokenMarkdownLinks: 'throw',
},
},
i18n: {
defaultLocale: 'en',
locales: ['en'],
},
clientModules: [
require.resolve('./src/client-modules/fonts'),
require.resolve('./src/client-modules/inkeep-font-override'),
],
headTags: [
{
tagName: 'link',
attributes: {
rel: 'preload',
as: 'font',
type: 'font/woff2',
href: '/docs/fonts/inter-latin-wght-normal.woff2',
crossorigin: 'anonymous',
},
},
{
tagName: 'link',
attributes: {
rel: 'preload',
as: 'font',
type: 'font/woff2',
href: '/docs/fonts/source-code-pro-latin-wght-normal.woff2',
crossorigin: 'anonymous',
},
},
],
presets: [
[
'classic',
{
docs: {
editUrl:
'https://github.com/clockworklabs/SpacetimeDB/edit/master/docs/',
routeBasePath: '/',
sidebarPath: './sidebars.ts',
sidebarCollapsed: false,
beforeDefaultRehypePlugins: [
[
rehypeShiki,
{
theme: shikiTheme,
langs: [
sql,
rust,
csharp,
markdown,
typescript,
bash,
json,
toml,
python,
c,
cpp,
protobuf,
fsharp,
systemd,
tsx,
css,
nginx,
],
} satisfies RehypeShikiOptions,
],
],
},
blog: false,
theme: {
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
navbar: {
logo: {
alt: 'SpacetimeDB Logo',
src: 'https://spacetimedb.com/images/brand.svg',
href: 'https://spacetimedb.com',
target: '_self',
},
hideOnScroll: false,
items: [
{ type: 'search', position: 'left' },
{
href: 'https://spacetimedb.com/install',
label: 'Install',
position: 'right',
},
{
href: 'https://spacetimedb.com/pricing',
label: 'Pricing',
position: 'right',
},
{
href: 'https://spacetimedb.com/blog',
label: 'Blog',
position: 'right',
},
{
href: 'https://spacetimedb.com/community',
label: 'Community',
position: 'right',
},
{
href: 'https://spacetimedb.com/spacerace',
label: 'Spacerace',
position: 'right',
},
{
href: 'https://spacetimedb.com/login',
label: 'Login',
position: 'right',
className: 'navbar__button',
},
],
},
footer: {},
prism: {},
colorMode: {
disableSwitch: true,
defaultMode: 'light',
},
} satisfies Preset.ThemeConfig,
plugins: [
[
'@inkeep/cxkit-docusaurus',
{
SearchBar: {
...inkeepConfig,
},
ChatButton: {
...inkeepConfig,
},
},
],
],
};
export default config;