From 24a997bad878e4c4172783cd56d00eeabfb649ad Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 16 Apr 2026 03:38:16 +0000
Subject: [PATCH 1/7] feat: replace rspress examples with v2 scaffolds
Agent-Logs-Url: https://github.com/rstackjs/rstack-examples/sessions/2a336486-a4eb-439c-8a87-2d6ef6a5942d
Co-authored-by: SoonIter <79413249+SoonIter@users.noreply.github.com>
---
rspress/basic/.gitignore | 27 +--
rspress/basic/README.md | 29 +++
rspress/basic/docs/_meta.json | 16 --
rspress/basic/docs/_nav.json | 16 ++
rspress/basic/docs/api/_meta.json | 1 +
rspress/basic/docs/api/commands.mdx | 7 +
rspress/basic/docs/api/index.mdx | 6 +
rspress/basic/docs/guide/_meta.json | 13 +-
rspress/basic/docs/guide/index.md | 210 ------------------
rspress/basic/docs/guide/start/_meta.json | 1 +
.../basic/docs/guide/start/getting-started.md | 51 +++++
.../basic/docs/guide/start/introduction.md | 15 ++
rspress/basic/docs/guide/use-mdx/_meta.json | 1 +
.../docs/guide/use-mdx/code-blocks/_meta.json | 1 +
.../docs/guide/use-mdx/code-blocks/index.mdx | 9 +
.../docs/guide/use-mdx/code-blocks/meta.md | 7 +
.../docs/guide/use-mdx/code-blocks/title.md | 5 +
.../basic/docs/guide/use-mdx/components.mdx | 47 ++++
rspress/basic/docs/guide/use-mdx/container.md | 33 +++
rspress/basic/docs/hello.md | 5 -
rspress/basic/docs/index.md | 24 +-
rspress/basic/package.json | 9 +-
rspress/basic/rspress.config.ts | 13 +-
rspress/basic/tsconfig.json | 24 +-
rspress/custom-theme/.gitignore | 27 +--
rspress/custom-theme/README.md | 29 +++
rspress/custom-theme/docs/_nav.json | 16 ++
rspress/custom-theme/docs/api/_meta.json | 1 +
rspress/custom-theme/docs/api/commands.mdx | 7 +
rspress/custom-theme/docs/api/index.mdx | 6 +
rspress/custom-theme/docs/guide/_meta.json | 12 +
.../custom-theme/docs/guide/start/_meta.json | 1 +
.../docs/guide/start/getting-started.md | 51 +++++
.../docs/guide/start/introduction.md | 15 ++
.../docs/guide/use-mdx/_meta.json | 1 +
.../docs/guide/use-mdx/code-blocks/_meta.json | 1 +
.../docs/guide/use-mdx/code-blocks/index.mdx | 9 +
.../docs/guide/use-mdx/code-blocks/meta.md | 7 +
.../docs/guide/use-mdx/code-blocks/title.md | 5 +
.../docs/guide/use-mdx/components.mdx | 47 ++++
.../docs/guide/use-mdx/container.md | 33 +++
rspress/custom-theme/docs/hello.md | 5 -
rspress/custom-theme/docs/index.md | 25 ++-
.../docs/public/rspress-dark-logo.png | Bin 0 -> 6296 bytes
.../custom-theme/docs/public/rspress-icon.png | Bin 0 -> 102713 bytes
.../docs/public/rspress-light-logo.png | Bin 0 -> 6379 bytes
rspress/custom-theme/package.json | 7 +-
rspress/custom-theme/rspress.config.ts | 20 +-
rspress/custom-theme/theme/index.css | 6 +
rspress/custom-theme/theme/index.tsx | 21 +-
rspress/custom-theme/tsconfig.json | 24 +-
51 files changed, 618 insertions(+), 328 deletions(-)
create mode 100644 rspress/basic/README.md
delete mode 100644 rspress/basic/docs/_meta.json
create mode 100644 rspress/basic/docs/_nav.json
create mode 100644 rspress/basic/docs/api/_meta.json
create mode 100644 rspress/basic/docs/api/commands.mdx
create mode 100644 rspress/basic/docs/api/index.mdx
delete mode 100644 rspress/basic/docs/guide/index.md
create mode 100644 rspress/basic/docs/guide/start/_meta.json
create mode 100644 rspress/basic/docs/guide/start/getting-started.md
create mode 100644 rspress/basic/docs/guide/start/introduction.md
create mode 100644 rspress/basic/docs/guide/use-mdx/_meta.json
create mode 100644 rspress/basic/docs/guide/use-mdx/code-blocks/_meta.json
create mode 100644 rspress/basic/docs/guide/use-mdx/code-blocks/index.mdx
create mode 100644 rspress/basic/docs/guide/use-mdx/code-blocks/meta.md
create mode 100644 rspress/basic/docs/guide/use-mdx/code-blocks/title.md
create mode 100644 rspress/basic/docs/guide/use-mdx/components.mdx
create mode 100644 rspress/basic/docs/guide/use-mdx/container.md
delete mode 100644 rspress/basic/docs/hello.md
create mode 100644 rspress/custom-theme/README.md
create mode 100644 rspress/custom-theme/docs/_nav.json
create mode 100644 rspress/custom-theme/docs/api/_meta.json
create mode 100644 rspress/custom-theme/docs/api/commands.mdx
create mode 100644 rspress/custom-theme/docs/api/index.mdx
create mode 100644 rspress/custom-theme/docs/guide/_meta.json
create mode 100644 rspress/custom-theme/docs/guide/start/_meta.json
create mode 100644 rspress/custom-theme/docs/guide/start/getting-started.md
create mode 100644 rspress/custom-theme/docs/guide/start/introduction.md
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/_meta.json
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/code-blocks/_meta.json
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/code-blocks/index.mdx
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/code-blocks/meta.md
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/code-blocks/title.md
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/components.mdx
create mode 100644 rspress/custom-theme/docs/guide/use-mdx/container.md
delete mode 100644 rspress/custom-theme/docs/hello.md
create mode 100644 rspress/custom-theme/docs/public/rspress-dark-logo.png
create mode 100644 rspress/custom-theme/docs/public/rspress-icon.png
create mode 100644 rspress/custom-theme/docs/public/rspress-light-logo.png
create mode 100644 rspress/custom-theme/theme/index.css
diff --git a/rspress/basic/.gitignore b/rspress/basic/.gitignore
index 044373fb2..23a4bc92f 100644
--- a/rspress/basic/.gitignore
+++ b/rspress/basic/.gitignore
@@ -1,25 +1,14 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
+# Local
+.DS_Store
+*.local
+*.log*
+# Dist
node_modules
-dist
-dist-ssr
-*.local
+dist/
+doc_build/
-# Editor directories and files
+# IDE
.vscode/*
!.vscode/extensions.json
.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-doc_build
diff --git a/rspress/basic/README.md b/rspress/basic/README.md
new file mode 100644
index 000000000..8a9c78ca4
--- /dev/null
+++ b/rspress/basic/README.md
@@ -0,0 +1,29 @@
+# Rspress website
+
+## Setup
+
+Install the dependencies:
+
+```bash
+npm install
+```
+
+## Get started
+
+Start the dev server:
+
+```bash
+npm run dev
+```
+
+Build the website for production:
+
+```bash
+npm run build
+```
+
+Preview the production build locally:
+
+```bash
+npm run preview
+```
diff --git a/rspress/basic/docs/_meta.json b/rspress/basic/docs/_meta.json
deleted file mode 100644
index c11a345e9..000000000
--- a/rspress/basic/docs/_meta.json
+++ /dev/null
@@ -1,16 +0,0 @@
-[
- {
- "text": "Guide",
- "link": "/guide/",
- "activeMatch": "/guide/"
- },
- {
- "text": "Hello World",
- "link": "/hello/",
- "activeMatch": "/hello/"
- },
- {
- "text": "API",
- "link": "https://rspress.rs/api/"
- }
-]
diff --git a/rspress/basic/docs/_nav.json b/rspress/basic/docs/_nav.json
new file mode 100644
index 000000000..44093ff4c
--- /dev/null
+++ b/rspress/basic/docs/_nav.json
@@ -0,0 +1,16 @@
+[
+ {
+ "text": "Guide",
+ "link": "/guide/start/introduction",
+ "activeMatch": "/guide/"
+ },
+ {
+ "text": "API",
+ "link": "/api/",
+ "activeMatch": "/api/"
+ },
+ {
+ "text": "Document",
+ "link": "https://rspress.rs/"
+ }
+]
diff --git a/rspress/basic/docs/api/_meta.json b/rspress/basic/docs/api/_meta.json
new file mode 100644
index 000000000..f0ff0de6d
--- /dev/null
+++ b/rspress/basic/docs/api/_meta.json
@@ -0,0 +1 @@
+["index", "commands"]
diff --git a/rspress/basic/docs/api/commands.mdx b/rspress/basic/docs/api/commands.mdx
new file mode 100644
index 000000000..8a8b53dd9
--- /dev/null
+++ b/rspress/basic/docs/api/commands.mdx
@@ -0,0 +1,7 @@
+# Commands
+
+## dev
+
+## build
+
+## preview
diff --git a/rspress/basic/docs/api/index.mdx b/rspress/basic/docs/api/index.mdx
new file mode 100644
index 000000000..939b29565
--- /dev/null
+++ b/rspress/basic/docs/api/index.mdx
@@ -0,0 +1,6 @@
+---
+title: API Overview
+overview: true
+---
+
+This is an API Overview page which outlines all the available APIs.
diff --git a/rspress/basic/docs/guide/_meta.json b/rspress/basic/docs/guide/_meta.json
index a7d5eda49..090820a48 100644
--- a/rspress/basic/docs/guide/_meta.json
+++ b/rspress/basic/docs/guide/_meta.json
@@ -1 +1,12 @@
-["index"]
+[
+ {
+ "type": "dir-section-header",
+ "name": "start",
+ "label": "Getting Started"
+ },
+ {
+ "type": "dir-section-header",
+ "name": "use-mdx",
+ "label": "Markdown & MDX"
+ }
+]
diff --git a/rspress/basic/docs/guide/index.md b/rspress/basic/docs/guide/index.md
deleted file mode 100644
index c0b78e74a..000000000
--- a/rspress/basic/docs/guide/index.md
+++ /dev/null
@@ -1,210 +0,0 @@
-# Markdown & MDX
-
-Rspress supports not only Markdown but also [MDX](https://mdxjs.com/), a powerful way to develop content.
-
-## Markdown
-
-MDX is a superset of Markdown, which means you can write Markdown files as usual. For example:
-
-```md
-# Hello World
-```
-
-## Use Component
-
-When you want to use React components in Markdown files, you should name your files with `.mdx` extension. For example:
-
-```mdx
-// docs/index.mdx
-import { CustomComponent } from './custom';
-
-# Hello World
-
-
-```
-
-## Front Matter
-
-You can add Front Matter at the beginning of your Markdown file, which is a YAML-formatted object that defines some metadata. For example:
-
-```yaml
----
-title: Hello World
----
-```
-
-> Note: By default, Rspress uses h1 headings as html headings.
-
-You can also access properties defined in Front Matter in the body, for example:
-
-```markdown
----
-title: Hello World
----
-
-# {frontmatter.title}
-```
-
-The previously defined properties will be passed to the component as `frontmatter` properties. So the final output will be:
-
-```html
-
Hello World
-```
-
-## Custom Container
-
-You can use the `:::` syntax to create custom containers and support custom titles. For example:
-
-**Input:**
-
-```markdown
-:::tip
-This is a `block` of type `tip`
-:::
-
-:::info
-This is a `block` of type `info`
-:::
-
-:::warning
-This is a `block` of type `warning`
-:::
-
-:::danger
-This is a `block` of type `danger`
-:::
-
-::: details
-This is a `block` of type `details`
-:::
-
-:::tip Custom Title
-This is a `block` of `Custom Title`
-:::
-
-:::tip{title="Custom Title"}
-This is a `block` of `Custom Title`
-:::
-```
-
-**Output:**
-
-:::tip
-This is a `block` of type `tip`
-:::
-
-:::info
-This is a `block` of type `info`
-:::
-
-:::warning
-This is a `block` of type `warning`
-:::
-
-:::danger
-This is a `block` of type `danger`
-:::
-
-::: details
-This is a `block` of type `details`
-:::
-
-:::tip Custom Title
-This is a `block` of `Custom Title`
-:::
-
-:::tip{title="Custom Title"}
-This is a `block` of `Custom Title`
-:::
-
-## Code Block
-
-### Basic Usage
-
-You can use the \`\`\` syntax to create code blocks and support custom titles. For example:
-
-**Input:**
-
-````md
-```js
-console.log('Hello World');
-```
-
-```js title="hello.js"
-console.log('Hello World');
-```
-````
-
-**Output:**
-
-```js
-console.log('Hello World');
-```
-
-```js title="hello.js"
-console.log('Hello World');
-```
-
-### Show Line Numbers
-
-If you want to display line numbers, you can enable the `showLineNumbers` option in the config file:
-
-```ts title="rspress.config.ts"
-export default {
- // ...
- markdown: {
- showLineNumbers: true,
- },
-};
-```
-
-### Wrap Code
-
-If you want to wrap long code line by default, you can enable the `defaultWrapCode` option in the config file:
-
-```ts title="rspress.config.ts"
-export default {
- // ...
- markdown: {
- defaultWrapCode: true,
- },
-};
-```
-
-### Line Highlighting
-
-You can also apply line highlighting and code block title at the same time, for example:
-
-**Input:**
-
-````md
-```js title="hello.js" {1,3-5}
-console.log('Hello World');
-
-const a = 1;
-
-console.log(a);
-
-const b = 2;
-
-console.log(b);
-```
-````
-
-**Ouput:**
-
-```js title="hello.js" {1,3-5}
-console.log('Hello World');
-
-const a = 1;
-
-console.log(a);
-
-const b = 2;
-
-console.log(b);
-```
-
-## Rustify MDX compiler
-
-You can enable Rustify MDX compiler by following config:
diff --git a/rspress/basic/docs/guide/start/_meta.json b/rspress/basic/docs/guide/start/_meta.json
new file mode 100644
index 000000000..88181a30a
--- /dev/null
+++ b/rspress/basic/docs/guide/start/_meta.json
@@ -0,0 +1 @@
+["introduction", "getting-started"]
diff --git a/rspress/basic/docs/guide/start/getting-started.md b/rspress/basic/docs/guide/start/getting-started.md
new file mode 100644
index 000000000..0b7b8d0fe
--- /dev/null
+++ b/rspress/basic/docs/guide/start/getting-started.md
@@ -0,0 +1,51 @@
+# Getting started
+
+## Project structure
+
+After creating a project with `create-rspress`, you will get the following project structure:
+
+- `docs/` — The documentation source directory, configured via `root` in `rspress.config.ts`.
+- `docs/_nav.json` — The navigation bar configuration.
+- `docs/guide/_meta.json` — The sidebar configuration for the guide section.
+- `docs/public/` — Static assets directory.
+- `theme/` — Optional custom theme directory, generated when you choose the custom theme scaffold.
+- `rspress.config.ts` — The Rspress configuration file.
+
+## Development
+
+Start the local development server:
+
+```bash
+npm run dev
+```
+
+:::tip
+
+You can specify the port number or host with `--port` or `--host`, such as `rspress dev --port 8080 --host 0.0.0.0`.
+
+:::
+
+## Production build
+
+Build the site for production:
+
+```bash
+npm run build
+```
+
+By default, Rspress will output to `doc_build` directory.
+
+## Preview
+
+Preview the production build locally:
+
+```bash
+npm run preview
+```
+
+## Next steps
+
+- Learn how to use [MDX & React Components](/guide/use-mdx/components) in your docs.
+- Learn about [Code Blocks](/guide/use-mdx/code-blocks/) syntax highlighting and line highlighting.
+- Learn about [Custom Containers](/guide/use-mdx/container) for tips, warnings, and more.
+- Explore the full [Rspress documentation](https://rspress.rs/) for advanced features.
diff --git a/rspress/basic/docs/guide/start/introduction.md b/rspress/basic/docs/guide/start/introduction.md
new file mode 100644
index 000000000..b2d4e3ec4
--- /dev/null
+++ b/rspress/basic/docs/guide/start/introduction.md
@@ -0,0 +1,15 @@
+# Introduction
+
+Rspress is a static site generator based on [Rsbuild](https://rsbuild.rs/), rendered with the React framework. It comes with a default documentation theme, and you can quickly build a documentation site with Rspress.
+
+## Why Rspress
+
+- **Build Performance**. The core compilation module is based on the Rust front-end toolchain, providing millisecond-level startup and a more ultimate development experience.
+- **AI-native**. Technical documentation not only serves human readers but can also be better understood and utilized by AI through SSG-MD.
+- **MDX Support**. MDX is a powerful way to write content, allowing you to use React components in Markdown.
+- **Basic Capabilities**. Including full-text search, internationalization, multi-version support, component library documentation, etc.
+- **Extensibility**. Provides a built-in plugin system, supports extending Rspress through plugin API.
+
+## Try Rspress
+
+Go to [Getting Started](/guide/start/getting-started) to learn how to use Rspress to build a documentation site.
diff --git a/rspress/basic/docs/guide/use-mdx/_meta.json b/rspress/basic/docs/guide/use-mdx/_meta.json
new file mode 100644
index 000000000..c188254f1
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/_meta.json
@@ -0,0 +1 @@
+["components", { "type": "dir", "name": "code-blocks" }, "container"]
diff --git a/rspress/basic/docs/guide/use-mdx/code-blocks/_meta.json b/rspress/basic/docs/guide/use-mdx/code-blocks/_meta.json
new file mode 100644
index 000000000..0a9e1bc25
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/code-blocks/_meta.json
@@ -0,0 +1 @@
+["title", "meta"]
diff --git a/rspress/basic/docs/guide/use-mdx/code-blocks/index.mdx b/rspress/basic/docs/guide/use-mdx/code-blocks/index.mdx
new file mode 100644
index 000000000..c193115b8
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/code-blocks/index.mdx
@@ -0,0 +1,9 @@
+# Code blocks
+
+Rspress uses [Shiki](https://shiki.style) for syntax highlighting at compile time, which means better runtime performance.
+
+When using code blocks in multiple languages, the corresponding language is automatically detected at compile time, and the runtime bundle size does not increase. For supported programming languages, refer to the [Shiki supported languages list](https://shiki.style/languages).
+
+```js
+console.log('Hello World');
+```
diff --git a/rspress/basic/docs/guide/use-mdx/code-blocks/meta.md b/rspress/basic/docs/guide/use-mdx/code-blocks/meta.md
new file mode 100644
index 000000000..16385f283
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/code-blocks/meta.md
@@ -0,0 +1,7 @@
+# Meta
+
+Besides the title, we also have some other meta attributes.
+
+```ts lineNumbers wrapCode title="example.ts"
+const longLine = 'This code block has line numbers, code wrapping, and a title';
+```
diff --git a/rspress/basic/docs/guide/use-mdx/code-blocks/title.md b/rspress/basic/docs/guide/use-mdx/code-blocks/title.md
new file mode 100644
index 000000000..cc6c9349c
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/code-blocks/title.md
@@ -0,0 +1,5 @@
+# Title
+
+```js title="foo.js"
+console.log('Hello World');
+```
diff --git a/rspress/basic/docs/guide/use-mdx/components.mdx b/rspress/basic/docs/guide/use-mdx/components.mdx
new file mode 100644
index 000000000..5e6465661
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/components.mdx
@@ -0,0 +1,47 @@
+# MDX & React components
+
+Rspress supports not only Markdown but also [MDX](https://mdxjs.com/), a powerful way to develop content.
+
+## Markdown
+
+MDX is a superset of Markdown, which means you can write Markdown files as usual. For example:
+
+```md
+# Hello world
+```
+
+## Use components
+
+When you want to use React components in Markdown files, you should name your files with `.mdx` extension.
+
+```mdx
+// docs/index.mdx
+import { CustomComponent } from './custom';
+
+# Hello world
+
+
+```
+
+## Use Rspress built-in components
+
+import { Tabs, Tab } from '@rspress/core/theme';
+
+
+
+
+
+```js
+console.log('foo');
+```
+
+
+
+
+```js
+console.log('bar');
+```
+
+
+
+
diff --git a/rspress/basic/docs/guide/use-mdx/container.md b/rspress/basic/docs/guide/use-mdx/container.md
new file mode 100644
index 000000000..0b121f07b
--- /dev/null
+++ b/rspress/basic/docs/guide/use-mdx/container.md
@@ -0,0 +1,33 @@
+# Container
+
+You can use the `:::` syntax to create custom containers and support custom titles.
+
+## Examples
+
+:::tip
+This is a `block` of type `tip`
+:::
+
+:::info
+This is a `block` of type `info`
+:::
+
+:::warning
+This is a `block` of type `warning`
+:::
+
+:::danger
+This is a `block` of type `danger`
+:::
+
+::: details
+This is a `block` of type `details`
+:::
+
+:::tip Custom Title
+This is a `block` of `Custom Title`
+:::
+
+:::tip{title="Custom Title"}
+This is a `block` of `Custom Title`
+:::
diff --git a/rspress/basic/docs/hello.md b/rspress/basic/docs/hello.md
deleted file mode 100644
index d08771599..000000000
--- a/rspress/basic/docs/hello.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Hello World!
-
-## Start
-
-Write something to build your own docs! 🎁
diff --git a/rspress/basic/docs/index.md b/rspress/basic/docs/index.md
index e6500ed37..8c04d408d 100644
--- a/rspress/basic/docs/index.md
+++ b/rspress/basic/docs/index.md
@@ -2,36 +2,42 @@
pageType: home
hero:
- name: Rspress
- text: Rspack-based Static Site Generator
- tagline: Rspress tagline
+ name: My Site
+ text: A cool website!
+ tagline: This is the tagline
actions:
- theme: brand
text: Quick Start
- link: /guide/
+ link: /guide/start/introduction
- theme: alt
- text: Github
+ text: GitHub
link: https://github.com/web-infra-dev/rspress
image:
src: /rspress-icon.png
- alt: Rspress Logo
+ alt: Logo
features:
- title: Blazing fast build speed
details: The core compilation module is based on the Rust front-end toolchain, providing a more ultimate development experience.
icon: 🏃🏻♀️
+ link: /guide/start/introduction
- title: Support for MDX content writing
details: MDX is a powerful way to write content, allowing you to use React components in Markdown.
icon: 📦
+ link: /guide/use-mdx/components
- title: Built-in full-text search
details: Automatically generates a full-text search index for you during construction, providing out-of-the-box full-text search capabilities.
icon: 🎨
- - title: Simpler I18n solution
- details: With the built-in I18n solution, you can easily provide multi-language support for documents or components.
- icon: 🌍
+ link: https://rspress.rs/guide/advanced/custom-search
+ - title: AI-friendly
+ details: Generate llms.txt and Markdown files compliant with the llms.txt specification through SSG-MD, making it easier for large language models to understand and use your documentation.
+ icon: 🤖
+ link: https://rspress.rs/guide/basic/ssg-md
- title: Static site generation
details: In production, it automatically builds into static HTML files, which can be easily deployed anywhere.
icon: 🌈
+ link: https://rspress.rs/guide/basic/ssg
- title: Providing multiple custom capabilities
details: Through its extension mechanism, you can easily extend theme UI and build process.
icon: 🔥
+ link: https://rspress.rs/guide/basic/custom-theme
---
diff --git a/rspress/basic/package.json b/rspress/basic/package.json
index f60350d81..7509d6d1f 100644
--- a/rspress/basic/package.json
+++ b/rspress/basic/package.json
@@ -2,15 +2,20 @@
"name": "@rspress-example/basic",
"version": "1.0.0",
"private": true,
+ "type": "module",
"scripts": {
"build": "rspress build",
"dev": "rspress dev",
"preview": "rspress preview"
},
"dependencies": {
- "rspress": "^1.47.1"
+ "@rspress/core": "^2.0.9"
},
"devDependencies": {
- "@types/node": "^24.10.9"
+ "@types/node": "^22.8.1",
+ "@types/react": "^19.2.14",
+ "@types/react-dom": "^19.2.3",
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4"
}
}
diff --git a/rspress/basic/rspress.config.ts b/rspress/basic/rspress.config.ts
index c18acabb4..0263899ff 100644
--- a/rspress/basic/rspress.config.ts
+++ b/rspress/basic/rspress.config.ts
@@ -1,10 +1,9 @@
-import * as path from 'path';
-import { defineConfig } from 'rspress/config';
+import * as path from 'node:path';
+import { defineConfig } from '@rspress/core';
export default defineConfig({
root: path.join(__dirname, 'docs'),
- title: 'Rspress',
- description: 'Rspack-based Static Site Generator',
+ title: 'My Site',
icon: '/rspress-icon.png',
logo: {
light: '/rspress-light-logo.png',
@@ -12,7 +11,11 @@ export default defineConfig({
},
themeConfig: {
socialLinks: [
- { icon: 'github', mode: 'link', content: 'https://github.com/web-infra-dev/rspress' },
+ {
+ icon: 'github',
+ mode: 'link',
+ content: 'https://github.com/web-infra-dev/rspress',
+ },
],
},
});
diff --git a/rspress/basic/tsconfig.json b/rspress/basic/tsconfig.json
index fb91f14d0..d3b51dd2a 100644
--- a/rspress/basic/tsconfig.json
+++ b/rspress/basic/tsconfig.json
@@ -1,6 +1,28 @@
{
"compilerOptions": {
+ "lib": ["DOM", "ES2020"],
"jsx": "react-jsx",
- "esModuleInterop": true
+ "target": "ES2020",
+ "noEmit": true,
+ "skipLibCheck": true,
+ "useDefineForClassFields": true,
+
+ /* modules */
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "bundler",
+ "verbatimModuleSyntax": true,
+ "resolveJsonModule": true,
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+
+ /* type checking */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true
+ },
+ "include": ["docs", "theme", "rspress.config.ts"],
+ "mdx": {
+ "checkMdx": true
}
}
diff --git a/rspress/custom-theme/.gitignore b/rspress/custom-theme/.gitignore
index 044373fb2..23a4bc92f 100644
--- a/rspress/custom-theme/.gitignore
+++ b/rspress/custom-theme/.gitignore
@@ -1,25 +1,14 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
+# Local
+.DS_Store
+*.local
+*.log*
+# Dist
node_modules
-dist
-dist-ssr
-*.local
+dist/
+doc_build/
-# Editor directories and files
+# IDE
.vscode/*
!.vscode/extensions.json
.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-doc_build
diff --git a/rspress/custom-theme/README.md b/rspress/custom-theme/README.md
new file mode 100644
index 000000000..8a9c78ca4
--- /dev/null
+++ b/rspress/custom-theme/README.md
@@ -0,0 +1,29 @@
+# Rspress website
+
+## Setup
+
+Install the dependencies:
+
+```bash
+npm install
+```
+
+## Get started
+
+Start the dev server:
+
+```bash
+npm run dev
+```
+
+Build the website for production:
+
+```bash
+npm run build
+```
+
+Preview the production build locally:
+
+```bash
+npm run preview
+```
diff --git a/rspress/custom-theme/docs/_nav.json b/rspress/custom-theme/docs/_nav.json
new file mode 100644
index 000000000..44093ff4c
--- /dev/null
+++ b/rspress/custom-theme/docs/_nav.json
@@ -0,0 +1,16 @@
+[
+ {
+ "text": "Guide",
+ "link": "/guide/start/introduction",
+ "activeMatch": "/guide/"
+ },
+ {
+ "text": "API",
+ "link": "/api/",
+ "activeMatch": "/api/"
+ },
+ {
+ "text": "Document",
+ "link": "https://rspress.rs/"
+ }
+]
diff --git a/rspress/custom-theme/docs/api/_meta.json b/rspress/custom-theme/docs/api/_meta.json
new file mode 100644
index 000000000..f0ff0de6d
--- /dev/null
+++ b/rspress/custom-theme/docs/api/_meta.json
@@ -0,0 +1 @@
+["index", "commands"]
diff --git a/rspress/custom-theme/docs/api/commands.mdx b/rspress/custom-theme/docs/api/commands.mdx
new file mode 100644
index 000000000..8a8b53dd9
--- /dev/null
+++ b/rspress/custom-theme/docs/api/commands.mdx
@@ -0,0 +1,7 @@
+# Commands
+
+## dev
+
+## build
+
+## preview
diff --git a/rspress/custom-theme/docs/api/index.mdx b/rspress/custom-theme/docs/api/index.mdx
new file mode 100644
index 000000000..939b29565
--- /dev/null
+++ b/rspress/custom-theme/docs/api/index.mdx
@@ -0,0 +1,6 @@
+---
+title: API Overview
+overview: true
+---
+
+This is an API Overview page which outlines all the available APIs.
diff --git a/rspress/custom-theme/docs/guide/_meta.json b/rspress/custom-theme/docs/guide/_meta.json
new file mode 100644
index 000000000..090820a48
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/_meta.json
@@ -0,0 +1,12 @@
+[
+ {
+ "type": "dir-section-header",
+ "name": "start",
+ "label": "Getting Started"
+ },
+ {
+ "type": "dir-section-header",
+ "name": "use-mdx",
+ "label": "Markdown & MDX"
+ }
+]
diff --git a/rspress/custom-theme/docs/guide/start/_meta.json b/rspress/custom-theme/docs/guide/start/_meta.json
new file mode 100644
index 000000000..88181a30a
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/start/_meta.json
@@ -0,0 +1 @@
+["introduction", "getting-started"]
diff --git a/rspress/custom-theme/docs/guide/start/getting-started.md b/rspress/custom-theme/docs/guide/start/getting-started.md
new file mode 100644
index 000000000..0b7b8d0fe
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/start/getting-started.md
@@ -0,0 +1,51 @@
+# Getting started
+
+## Project structure
+
+After creating a project with `create-rspress`, you will get the following project structure:
+
+- `docs/` — The documentation source directory, configured via `root` in `rspress.config.ts`.
+- `docs/_nav.json` — The navigation bar configuration.
+- `docs/guide/_meta.json` — The sidebar configuration for the guide section.
+- `docs/public/` — Static assets directory.
+- `theme/` — Optional custom theme directory, generated when you choose the custom theme scaffold.
+- `rspress.config.ts` — The Rspress configuration file.
+
+## Development
+
+Start the local development server:
+
+```bash
+npm run dev
+```
+
+:::tip
+
+You can specify the port number or host with `--port` or `--host`, such as `rspress dev --port 8080 --host 0.0.0.0`.
+
+:::
+
+## Production build
+
+Build the site for production:
+
+```bash
+npm run build
+```
+
+By default, Rspress will output to `doc_build` directory.
+
+## Preview
+
+Preview the production build locally:
+
+```bash
+npm run preview
+```
+
+## Next steps
+
+- Learn how to use [MDX & React Components](/guide/use-mdx/components) in your docs.
+- Learn about [Code Blocks](/guide/use-mdx/code-blocks/) syntax highlighting and line highlighting.
+- Learn about [Custom Containers](/guide/use-mdx/container) for tips, warnings, and more.
+- Explore the full [Rspress documentation](https://rspress.rs/) for advanced features.
diff --git a/rspress/custom-theme/docs/guide/start/introduction.md b/rspress/custom-theme/docs/guide/start/introduction.md
new file mode 100644
index 000000000..b2d4e3ec4
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/start/introduction.md
@@ -0,0 +1,15 @@
+# Introduction
+
+Rspress is a static site generator based on [Rsbuild](https://rsbuild.rs/), rendered with the React framework. It comes with a default documentation theme, and you can quickly build a documentation site with Rspress.
+
+## Why Rspress
+
+- **Build Performance**. The core compilation module is based on the Rust front-end toolchain, providing millisecond-level startup and a more ultimate development experience.
+- **AI-native**. Technical documentation not only serves human readers but can also be better understood and utilized by AI through SSG-MD.
+- **MDX Support**. MDX is a powerful way to write content, allowing you to use React components in Markdown.
+- **Basic Capabilities**. Including full-text search, internationalization, multi-version support, component library documentation, etc.
+- **Extensibility**. Provides a built-in plugin system, supports extending Rspress through plugin API.
+
+## Try Rspress
+
+Go to [Getting Started](/guide/start/getting-started) to learn how to use Rspress to build a documentation site.
diff --git a/rspress/custom-theme/docs/guide/use-mdx/_meta.json b/rspress/custom-theme/docs/guide/use-mdx/_meta.json
new file mode 100644
index 000000000..c188254f1
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/_meta.json
@@ -0,0 +1 @@
+["components", { "type": "dir", "name": "code-blocks" }, "container"]
diff --git a/rspress/custom-theme/docs/guide/use-mdx/code-blocks/_meta.json b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/_meta.json
new file mode 100644
index 000000000..0a9e1bc25
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/_meta.json
@@ -0,0 +1 @@
+["title", "meta"]
diff --git a/rspress/custom-theme/docs/guide/use-mdx/code-blocks/index.mdx b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/index.mdx
new file mode 100644
index 000000000..c193115b8
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/index.mdx
@@ -0,0 +1,9 @@
+# Code blocks
+
+Rspress uses [Shiki](https://shiki.style) for syntax highlighting at compile time, which means better runtime performance.
+
+When using code blocks in multiple languages, the corresponding language is automatically detected at compile time, and the runtime bundle size does not increase. For supported programming languages, refer to the [Shiki supported languages list](https://shiki.style/languages).
+
+```js
+console.log('Hello World');
+```
diff --git a/rspress/custom-theme/docs/guide/use-mdx/code-blocks/meta.md b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/meta.md
new file mode 100644
index 000000000..16385f283
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/meta.md
@@ -0,0 +1,7 @@
+# Meta
+
+Besides the title, we also have some other meta attributes.
+
+```ts lineNumbers wrapCode title="example.ts"
+const longLine = 'This code block has line numbers, code wrapping, and a title';
+```
diff --git a/rspress/custom-theme/docs/guide/use-mdx/code-blocks/title.md b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/title.md
new file mode 100644
index 000000000..cc6c9349c
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/code-blocks/title.md
@@ -0,0 +1,5 @@
+# Title
+
+```js title="foo.js"
+console.log('Hello World');
+```
diff --git a/rspress/custom-theme/docs/guide/use-mdx/components.mdx b/rspress/custom-theme/docs/guide/use-mdx/components.mdx
new file mode 100644
index 000000000..5e6465661
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/components.mdx
@@ -0,0 +1,47 @@
+# MDX & React components
+
+Rspress supports not only Markdown but also [MDX](https://mdxjs.com/), a powerful way to develop content.
+
+## Markdown
+
+MDX is a superset of Markdown, which means you can write Markdown files as usual. For example:
+
+```md
+# Hello world
+```
+
+## Use components
+
+When you want to use React components in Markdown files, you should name your files with `.mdx` extension.
+
+```mdx
+// docs/index.mdx
+import { CustomComponent } from './custom';
+
+# Hello world
+
+
+```
+
+## Use Rspress built-in components
+
+import { Tabs, Tab } from '@rspress/core/theme';
+
+
+
+
+
+```js
+console.log('foo');
+```
+
+
+
+
+```js
+console.log('bar');
+```
+
+
+
+
diff --git a/rspress/custom-theme/docs/guide/use-mdx/container.md b/rspress/custom-theme/docs/guide/use-mdx/container.md
new file mode 100644
index 000000000..0b121f07b
--- /dev/null
+++ b/rspress/custom-theme/docs/guide/use-mdx/container.md
@@ -0,0 +1,33 @@
+# Container
+
+You can use the `:::` syntax to create custom containers and support custom titles.
+
+## Examples
+
+:::tip
+This is a `block` of type `tip`
+:::
+
+:::info
+This is a `block` of type `info`
+:::
+
+:::warning
+This is a `block` of type `warning`
+:::
+
+:::danger
+This is a `block` of type `danger`
+:::
+
+::: details
+This is a `block` of type `details`
+:::
+
+:::tip Custom Title
+This is a `block` of `Custom Title`
+:::
+
+:::tip{title="Custom Title"}
+This is a `block` of `Custom Title`
+:::
diff --git a/rspress/custom-theme/docs/hello.md b/rspress/custom-theme/docs/hello.md
deleted file mode 100644
index d08771599..000000000
--- a/rspress/custom-theme/docs/hello.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Hello World!
-
-## Start
-
-Write something to build your own docs! 🎁
diff --git a/rspress/custom-theme/docs/index.md b/rspress/custom-theme/docs/index.md
index 250b98610..8c04d408d 100644
--- a/rspress/custom-theme/docs/index.md
+++ b/rspress/custom-theme/docs/index.md
@@ -2,33 +2,42 @@
pageType: home
hero:
- name: Rspress
- text: Rspack-based Static Site Generator
- tagline: Rspress tagline
+ name: My Site
+ text: A cool website!
+ tagline: This is the tagline
actions:
- theme: brand
text: Quick Start
- link: /hello/
+ link: /guide/start/introduction
- theme: alt
- text: Github
+ text: GitHub
link: https://github.com/web-infra-dev/rspress
+ image:
+ src: /rspress-icon.png
+ alt: Logo
features:
- title: Blazing fast build speed
details: The core compilation module is based on the Rust front-end toolchain, providing a more ultimate development experience.
icon: 🏃🏻♀️
+ link: /guide/start/introduction
- title: Support for MDX content writing
details: MDX is a powerful way to write content, allowing you to use React components in Markdown.
icon: 📦
+ link: /guide/use-mdx/components
- title: Built-in full-text search
details: Automatically generates a full-text search index for you during construction, providing out-of-the-box full-text search capabilities.
icon: 🎨
- - title: Simpler I18n solution
- details: With the built-in I18n solution, you can easily provide multi-language support for documents or components.
- icon: 🌍
+ link: https://rspress.rs/guide/advanced/custom-search
+ - title: AI-friendly
+ details: Generate llms.txt and Markdown files compliant with the llms.txt specification through SSG-MD, making it easier for large language models to understand and use your documentation.
+ icon: 🤖
+ link: https://rspress.rs/guide/basic/ssg-md
- title: Static site generation
details: In production, it automatically builds into static HTML files, which can be easily deployed anywhere.
icon: 🌈
+ link: https://rspress.rs/guide/basic/ssg
- title: Providing multiple custom capabilities
details: Through its extension mechanism, you can easily extend theme UI and build process.
icon: 🔥
+ link: https://rspress.rs/guide/basic/custom-theme
---
diff --git a/rspress/custom-theme/docs/public/rspress-dark-logo.png b/rspress/custom-theme/docs/public/rspress-dark-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..928bcc9169c8c0b3c747e0d15c84267b609a94e7
GIT binary patch
literal 6296
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
zms
O1D`M!hah+UGbWpS8CtZ>OQEc>zFnd(|
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