github web-infra-dev/rspress v2.0.0

7 hours ago

Rspress 2.0 🚀

banner

🦀 Rspress 2.0 is officially released, featuring a brand new theme, AI-native SSG-MD and llms.txt generation, Shiki code highlighting, lazyCompilation, an improved documentation development experience.

Read more 👉 https://rspress.rs/blog/rspress-v2

What's Changed

New Features 🎉

  • feat(plugin-algolia): init plugin-algolia by @SoonIter in #1905
  • feat(nav): improve dropdown menu interaction by @chenjiahan in #1910
  • feat(theme)!: use named export instead of default export, for circular imports by @SoonIter in #1873
  • feat!(plugin-shiki): bump shiki to v3, migrate to official transformers by @JounQin in #1672
  • feat: expose builder preview result for programming usage by @JounQin in #1944
  • feat(plugin-algolia): add plugin-algolia and optimize some DX on customizing Search by @SoonIter in #1909
  • feat!: enable search.codeBlocks by default by @chenjiahan in #1952
  • feat(style): add link icon for external links by @chenjiahan in #1964
  • feat(cleanUrl)!: shorter link, "/index" -> "/" when cleanUrls: true by @SoonIter in #1976
  • feat(theme)!: add prefix for isolating tailwind css by @SoonIter in #1990
  • feat(config)!: force successful SSG generation, remove ssg.strict and add ssg.fallback by @SoonIter in #2015
  • feat(plugin-shiki): improve line diff colors by @chenjiahan in #2042
  • feat(theme-default): add beforeHeroActions and afterHeroActions by @SoonIter in #2057
  • feat(ssg)!: remove ssg fallback and add ssg: false hint by @SoonIter in #2055
  • feat: plugin preview add custom entry option by @LonelySnowman in #2043
  • feat(ssg): add printFileSize to SSG, and refactor renderPages to a rsbuildPluginSSG by @SoonIter in #2065
  • feat(deps)!: bump to react@19 and react-dom@19 by default by @SoonIter in #2073
  • feat: migrate all the packages to "type: module" and pure esm with publint by @SoonIter in #2084
  • feat!: drop support for Node 16 by @chenjiahan in #2085
  • feat(plugin-llms): init @rspress/plugin-llms by @SoonIter in #2034
  • feat(plugin-llms): add include option and only generate for default lang by @SoonIter in #2093
  • feat(theme/toc)!: use dynamic toc generation by @ktiays in #2018
  • feat: add localeRedirect: 'only-default-lang' support by @JounQin in #2125
  • feat!: enable dev.lazyCompilation: true by default by @SoonIter in #2123
  • feat: upgrade create-rspress to support npm create rspress@beta by @SoonIter in #2128
  • feat!: support shiki by default, drop prism support by @SoonIter in #2122
  • feat: add _meta.json json schema in rspress/meta-json-schema.json by @SoonIter in #2079
  • feat(theme/dynamic-toc): add .rspress-toc-exclude escape hatch by @SoonIter in #2136
  • feat: update Rsbuild 1.3.18 and set caller name by @chenjiahan in #2139
  • feat(theme): expose classname for crawler by @SoonIter in #2161
  • feat(core): support md definition syntax url by @SoonIter in #2164
  • feat: support file:// protocol and URL for icon by @JounQin in #2167
  • feat(plugin-shiki): upgrade to shiki@^3.4.2 to support langAlias option by @SoonIter in #2177
  • feat: add new CodeBlockRuntime component by @JounQin in #2190
  • feat: enable rehype-raw plugin by default by @JounQin in #2199
  • feat(CodeBlockRuntime): add shikiOptions prop by @SoonIter in #2208
  • feat(plugin-shiki): add @rspress/plugin-shiki/transformers exports and transformerCompatibleMetaHighlight by @SoonIter in #2209
  • feat(CodeBlockRuntime): add onRendered prop by @SoonIter in #2211
  • feat: enable rehype-raw plugin by default by @JounQin in #2213
  • feat(mdx): add markdown.crossCompilerCache for speed up build process by @SoonIter in #2256
  • feat: support async entry by @2heal1 in #2267
  • feat(auto-nav-sidebar)!: rename the top level _meta.json to _nav.json in order to support single Nav Mode by @SoonIter in #2314
  • feat(theme-default): support binary execution commands in PackageManagerTabs component by @artus9033 in #2343
  • feat(plugin-llms): multiple configuration for multiple llms.txt by @SoonIter in #2347
  • feat(rsbuild)!: enable persistent cache by default via performance.buildCache by @SoonIter in #2349
  • feat: change pnpm install packageName to pnpm add packageName on PackageManagerTabs by @Marukome0743 in #2364
  • feat(mdx)!: support File Code Block of ```tsx file="./filename" to write demo code in another file by @SoonIter in #2361
  • feat!: expose type RspressPlugin from "rspress/core", "@rspress/shared" which is a private package should not be installed by users by @SoonIter in #2360
  • feat(auto-nav-sidebar): support custom-link group by @SoonIter in #2379
  • feat(ssg): add ssg.experimentalExcludeRoutePaths by @SoonIter in #2405
  • feat(plugin-sitemap): init @rspress/plugin-sitemap by @SoonIter in #2416
  • feat!: enable checkDeadLinks by default and add markdown.link.autoPrefix by @SoonIter in #2415
  • feat(core)!: routeService ignore "_" prefix files by default by @SoonIter in #2149
  • feat(plugin-llms): add LlmsCopyButton by @SoonIter in #2426
  • feat(plugin-llms/runtime): add markdownLink for copy by @SoonIter in #2439
  • feat: add npm icon to social links by @saseungmin in #2441
  • feat(plugin-llms)!: default value for i18n by @SoonIter in #2448
  • feat(theme)!: add layer for base.css to support tailwind v4 by @SoonIter in #2477
  • feat: generate Open Graph title and type tags by default by @chenjiahan in #2490
  • feat(link): support asset link by @SoonIter in #2498
  • style(theme): update primary text color for better contrast by @chenjiahan in #2499
  • feat(create-rspress): update tsconfig.json by @Timeless0911 in #2509
  • feat(theme): Make it possible to mark elements to be excluded when copying by @Karibash in #2512
  • feat(plugin-llms): support mdFiles.remarkPlugins by @SoonIter in #2516
  • feat: Add a twoslash plugin by @Karibash in #2527
  • feat: enable rspack native watcher by default by @GiveMe-A-Name in #2472
  • feat(plugin-twoslash): Improve error handling with enhanced logging by @Karibash in #2544
  • feat(auto-nav-sidebar): support _meta.json and _nav.json hmr by @SoonIter in #2549
  • feat(twoslash): improve underline styling and adjust popup docs font-size by @chenjiahan in #2554
  • feat: export star from react-router-dom by @zoolsher in #2577
  • feat(plugin-twoslash): Make the popup that is always displayed not flip its display position by @Karibash in #2580
  • feat(theme-default): Make the tab component usable in layouts other than DocLayout by @Karibash in #2589
  • feat(theme/style)!: keep the html style be consistent with markdown syntax and .rp-not-doc escape hatch (#2579) by @SoonIter in #2600
  • feat!: update @rspress/plugin-algolia to docsearch v4.1.0 by @Copilot in #2620
  • feat: support basic usage of remark-lint for link plugin by @JounQin in #2618
  • feat(theme): add prop dlx to PackageManagerTabs for npx pnpm dlx etc by @Nsttt in #2623
  • feat(auto-nav-sidebar): add new type: "dir-section-header" by @SoonIter in #2643
  • feat(theme)!: fully theme refactor by @SoonIter in #2533
  • feat(theme): add Banner Component by @SoonIter in #2654
  • feat(theme)!: add CodeBlock / CodeButtonGroup components and migrate .rp-doc-outline to rp-toc-include by @SoonIter in #2656
  • feat(theme): add Deno support to PackageManagerTabs component by @Copilot in #2663
  • style: deno svg adapt to dark mode by @Timeless0911 in #2676
  • feat: add new Component and fix link should have search query by @SoonIter in #2683
  • feat: ssg-md by @SoonIter in #2666
  • feat(plugin-twoslash): add cache options by @Timeless0911 in #2712
  • feat(theme)!: add config.i18nSource and default i18n text and remove serveral i18nKeys in themeConfig by @SoonIter in #2738
  • feat(codeblock): lineNumbers and wrapCode meta props support '''tsx lineNumbers wrapCode by @Copilot in #2746
  • feat(CLI): Add rspress eject CLI command for theme component customization by @Copilot in #2726
  • feat(theme): add pageType: doc-wide by @SoonIter in #2759
  • feat(theme): add transition isPending UI to Sidebar by @SoonIter in #2778
  • feat(plugin-twoslash): Make it possible to configure compilerOptions for TypeScript in twoslash by @Karibash in #2773
  • feat(plugin-preview)!: simplify the usage via tsx preview="iframe-fixed" and support hmr by @SoonIter in #2806
  • feat(plugin-preview): should support dark mode by @SoonIter in #2816
  • feat(i18n): add Russian translation for built-in i18n text by @dragomano in #2827
  • feat(rspack)!: revert Rspack native watcher by default by @Timeless0911 in #2830
  • feat(plugin-typedoc): Upgrade to TypeDoc v0.28 with new API by @Karibash in #2790
  • feat(mdx): support absolute paths with <root>/ prefix in remarkFileCodeBlock by @Copilot in #2665
  • feat(theme)!: custom theme should use @rspress/core/theme-original by @SoonIter in #2860
  • feat(theme/Root): add ejectable component to theme by @Copilot in #2858
  • feat(theme/Toc): Add data-depth attribute to TOC items by @Copilot in #2859
  • feat(plugin-typedoc): Add setup callback for TypeDoc customization by @Karibash in #2841
  • feat(plugin-typedoc): allow customize the docs/api/_meta.json and track in git by @SoonIter in #2869
  • feat(theme/tags): allow frontmatter tag by @SoonIter in #2879
  • feat(theme): add text-autospace: normal; by @SoonIter in #2920
  • feat(ssg-md): support Overview and HomeLayout by @SoonIter in #2933
  • feat(core): add import.meta.env.SSR and import.meta.env.SSG_MD by @SoonIter in #2948
  • feat(theme/nav): support multiple level nested navigation items by @SoonIter in #2943
  • feat(nodejs)!: drop support of node 18, upgrade engines to node >= 20.9.0 by @SoonIter in #2924
  • feat(theme): support clickable badge in HomeHero by @SoonIter in #2969
  • feat(ssg-md): add SSG-MD support to OverviewGroup and FallbackHeading components (Vibe Kanban) by @SoonIter in #2966
  • feat(core): auto-extract description from first contentful line in extractPageData by @SoonIter in #3006
  • feat(theme/nav): Added fancy transition to nav background by @elliotcourant in #3017
  • feat(theme): make NavTitle component ejectable by @SoonIter in #3022
  • feat(core): add markdown.extractDescription config by @SoonIter in #3023
  • feat(core): move Llms runtime components from plugin-llms to core/theme by @SoonIter in #3026
  • feat(core): add logoHref config option by @SoonIter in #3012
  • feat(ssg-md)!: add llmsUI config option to automatically show LlmsCopyButton and LlmsViewOptions when set llms: true by @SoonIter in #3029
  • feat(theme/SvgWrapper): icon field support svg and img icon in HomeLayout by @SoonIter in #3036
  • feat(theme/icon): extract IconLink use in LlmsViewOptions by @jaworek in #3046
  • feat(theme/HomeHero): add new hero image slot and add interactive to document by @SoonIter in #3051
  • feat(plugin-playground)!: change defaultRenderMode to 'pure' and support combined usage with plugin-preview by @SoonIter in #3059
  • feat(nodejs)!: update engines.node to ^20.19.0 || >=22.12.0 by @SoonIter in #3073

Performance 🚀

  • perf(search): add index async to avoid blocking the main thread by @chenjiahan in #1892
  • perf(search): remove group calculation by @chenjiahan in #1893
  • perf: use matchPath rather than matchRoutes, remove unused group.title by @SoonIter in #1895
  • perf(search): improve initialization and prefetching logic by @chenjiahan in #1899
  • perf(theme): add preload to Link comp by @SoonIter in #1974
  • perf(plugin-auto-nav): optimize sidebar configuration loading with Promise.all by @Simon-He95 in #2006
  • perf: remove React 17 compatibility code by @chenjiahan in #2174
  • perf: remove useless rehype-codeMeta from prism highlighting by @SoonIter in #2214
  • perf(ssg/async): ssg concurrency and use react18 renderToPipeableStream instead of renderToString by @SoonIter in #2243
  • perf(ssg/client): use React 18 startTransition for hydration by @SoonIter in #2245
  • perf(core/client): add useTransition when switch route by @SoonIter in #2313
  • perf(ssg): add ssg.experimentalWorker based on tinypool to speed up ssg process by @SoonIter in #2394
  • perf(mdx/crossCompilerCache): free the memory after one read by @SoonIter in #2418
  • perf: simple matchRoutes alternative #1863 by @SoonIter in #2673
  • perf(ssg): regression after output.asyncChunks = true by @SoonIter in #2674
  • perf(theme/useWindowSize): optimize useWindowSize with debounce to reduce resize handler calls by @Copilot in #2849
  • perf(core): skip search index generation when search is disabled by @SoonIter in #3031

Bug Fixes 🐞

  • fix(plugin-api-docgen): add Russian support by @liamli-0822 in #1890
  • fix(search): should use index.searchAsync by @chenjiahan in #1898
  • fix: display outline correctly on >=960px <=1280px screen width by @JounQin in #1914
  • fix: remove outdated hero default values by @chenjiahan in #1927
  • fix: Revert "fix: display outline correctly on >=960px <=1280px screen width (#1914)" by @SoonIter in #1929
  • fix: remove async fs to avoid empty global style by @SoonIter in #1934
  • fix: rework sidebar menu responsive issues by @JounQin in #1928
  • fix(cli): should catch build errors by @chenjiahan in #1938
  • fix(mdxjs): not need to add base on normalizing links with base enabled by @JounQin in #1943
  • fix!: remove the builtin Sass and Less plugins by @chenjiahan in #1937
  • fix(core): memfs should be dev dependency by @chenjiahan in #1946
  • fix(theme): unset overflow style when sidebar destroy by @quanquan2100 in #1949
  • fix: failed to update search index after switching lang by @chenjiahan in #1950
  • fix(deps): update react-helmet-async 2.0.0 by @SoonIter in #1951
  • fix(deps): update react-helmet-async 2.0.0(#1951) by @SoonIter in #1953
  • fix: improve reported responsive issues by @JounQin in #1956
  • fix: overview page overflow by @JounQin in #1960
  • fix(style): unset the navItem bg color by @SoonIter in #1966
  • fix: update search placeholder text to 'Search' by @chenjiahan in #1965
  • fix(theme/PrevNextPage): should be hidden when text is undefined or "" by @SoonIter in #1978
  • fix: normalize jsx img src attribute correctly by @JounQin in #1979
  • fix: continue work on responsive styling issues by @JounQin in #1983
  • fix(mdxjs): add version and lang part when normalizing links by @JounQin in #1988
  • fix(plugin-api-docgen): fallback to en, and should report warning msg when no replacing by @SoonIter in #2004
  • fix(theme/style): SearchPanel is not styled by tailwind by @SoonIter in #2008
  • fix(cli): polish theme namedExport breaking change hint by @SoonIter in #2012
  • fix(plugin-playground): disable monaco editor ts check for supporting tsx by @LonelySnowman in #2028
  • fix(plugin-container): incorrect trimming in some cases by @chenjiahan in #2044
  • fix(plugin-container): avoid unexpected line breaks by @chenjiahan in #2049
  • fix(plugin-shiki): no code title by @SoonIter in #2050
  • fix(firefox): location too much change firefox issue #2047 by @SoonIter in #2056
  • fix: wrong hydration, hydrate twice by @SoonIter in #2063
  • fix(ssg): the hydration error when using typeof window === undefined by @SoonIter in #2066
  • fix: remove useless peerDependencies and pin react-router-dom version by @SoonIter in #2083
  • fix: reduce react-router-dom bundle size by @SoonIter in #2086
  • fix(style): change flex to rp-flex by @LonelySnowman in #2088
  • fix: the nav bar lowerCase by @SoonIter in #2100
  • fix(plugin-llms): group routes correctly without locales config by @jbroma in #2116
  • fix(theme/dynamic-toc): should abandon all elements with display: none. by @SoonIter in #2119
  • fix: the pkg type error in moduleResolution: node16 by @SoonIter in #2127
  • fix(theme/dynamic-toc): skip element in TOC by @SoonIter in #2134
  • fix(deps): remove unused react-syntax-highlighter by @chenjiahan in #2138
  • fix(plugin-api-doc-gen): plugin-api-doc-gen should have anchor (#2140) by @SoonIter in #2146
  • fix(shiki): shiki langs perf regression by @SoonIter in #2151
  • fix(theme): highlight the manually by @SoonIter in #2153
  • fix(core/mdx-loader): due to frontmatter stack error loc and remove useless hmr old codes by @SoonIter in #2168
  • fix(shiki/css): add diff language token and remove useless prism token by @SoonIter in #2175
  • fix(theme-default): improve redirect URL handling in NotFoundLayout by @HyaCiovo in #2184
  • fix(theme-default): export type CodeButtonGroupProps by @SoonIter in #2188
  • fix(plugin-llms): support usage in ssg: false by @SoonIter in #2194
  • fix: sidebar type=file with data-context by @zoolsher in #2189
  • fix(plugin-shiki/style): for force wrap style by @SoonIter in #2195
  • fix(CodeBlockRuntime): CodeBlockRuntime should render the same dom structure with compile-time code block by @SoonIter in #2206
  • fix: exclude .rspress-toc-exclude ancestor nodes in dynamic TOC by @JounQin in #2212
  • fix: empty blockquote crash the compiler by @zoolsher in #2221
  • fix(ssg): expose the error stack hiden by Suspense by @SoonIter in #2219
  • fix: add rehype codeMeta plugin back but shiki compatible metastring property instead by @JounQin in #2222
  • fix(infra): bundle size regression after migrating to bundleless dist by @SoonIter in #2228
  • fix(theme/style): Tabs wrong margin by @SoonIter in #2246
  • fix(theme/style): add preEntry to ensure css order by @SoonIter in #2248
  • fix: default lang redirect regression due to base/version by @JounQin in #2258
  • fix(theme-default/style): vars should be unified to vars.css by @SoonIter in #2259
  • fix: should replaced by / instead by @JounQin in #2262
  • fix(mdx): should respect the space in the title by @SoonIter in #2268
  • fix: incorrect types for shiki-transformers entry by @JounQin in #2274
  • fix: rspress/shiki-transformers should work by @SoonIter in #2296
  • fix: auto-nav-sidebar should respect locales config by @SoonIter in #2307
  • fix(rehypeHeaderAnchor): trim anchor for better format with React Component by @SoonIter in #2318
  • fix(publicDir): should work with base in rspress dev and rspress preview by @SoonIter in #2317
  • fix: should add nav-json-schema.json and expose rspress/shiki-transformers by @SoonIter in #2327
  • fix: sidebarGroup should add SidebarSectionHeader by @SoonIter in #2328
  • fix(ssg): better format of mdx compile time error in SSG by @SoonIter in #2332
  • fix(theme/dynamic-toc): remove comment for props replacing in SSG by @SoonIter in #2345
  • fix(remarkNormalizeLink)!: support relative path subfolder which is equal to subfolder by @SoonIter in #2348
  • fix(plugin-typedoc): skip patch raw links by @fu050409 in #2356
  • fix: support mutations from child nodes for dynamic TOC by @JounQin in #2363
  • fix: use withBase from runtime by @jbroma in #2373
  • fix(buildCache): other configuration files besides rspress.config.ts should be added to persistent cache deps by @SoonIter in #2378
  • fix: use SvgWrapper in LinkCard & NavScreenMenuGroup by @jbroma in #2381
  • fix(auto-nav-sidebar): custom link should support collapsible and collapsed like "type": dir by @SoonIter in #2382
  • fix!: remove rspress package, rspress => @rspress/core rspress/theme => @rspress/core/theme rspress/runtime => @rspress/core/runtime by @SoonIter in #2386
  • fix(fileCodeBlock): optimize the error message and fix .length is not defined by @SoonIter in #2387
  • fix: use _nav.json in template by @Timeless0911 in #2391
  • fix(ssg): ssg error with "base" configuration by @SoonIter in #2392
  • fix(ssg): regression in V2, csr should also output html files for deploy by @SoonIter in #2393
  • fix: use SocialLinks & SwitchAppearance components from theme by @jbroma in #2395
  • fix(theme): aside should not cover the top buttons by @SoonIter in #2400
  • fix(theme): aside should not cover the top buttons (#2400) by @SoonIter in #2401
  • fix: directive node should have name field by @JounQin in #2403
  • fix: search link with base by @JounQin in #2406
  • fix(fileCodeBlock): should support hmr by @SoonIter in #2423
  • fix(plugin-llms)!: default value change mdxToMd: false by @SoonIter in #2428
  • fix(tab-list): Fix tabs scrolling when not overflowing by @howlettt in #2433
  • fix(link): should support public folder asset by @SoonIter in #2440
  • fix(plugin-llms): some md files sometimes do not emit by @SoonIter in #2443
  • fix(auto-nav-sidebar): correct both _meta.json and _nav.json exist behavior by @SoonIter in #2453
  • fix(plugin-llms): support dark mode by @SoonIter in #2455
  • fix(theme/Link): Link and HomeHero should support relative url by @SoonIter in #2456
  • fix: export usePage to replace deprecated usePageData by @JounQin in #2471
  • fix: revert asset link support and fix the corner case when filename contains dot by @SoonIter in #2473
  • fix(deps): remove unused dependencies from multiple packages by @chenjiahan in #2493
  • fix(theme): move rspress-logo and some other styles out of rp-base layer by @SoonIter in #2488
  • fix(virtual-module): should addDependencies in virtual-module for persistent cache by @SoonIter in #2519
  • fix: command using object fully customize don't call normalize by @zoolsher in #2528
  • fix(core): allow user can deploy to both http://a.com/base/ and http://a.com/base by @SoonIter in #2536
  • fix(native-watcher): Infinite watch removed i18n.json by @SoonIter in #2540
  • fix(plugin-twoslash): Prevent the contents of the popup from being copied when copying code by @Karibash in #2538
  • fix(theme-default/style): add color: inherit back by @SoonIter in #2546
  • fix: hmr not work by @SoonIter in #2545
  • fix(plugin-api-docgen): too much apiDocMap clone in pageData cause performance issue in runtime by @SoonIter in #2524
  • fix(plugin-playground): normalizeUrl skip protocol(#2563) (#2565) by @SoonIter in #2584
  • fix: suggestions object key with constructor by @zoolsher in #2586
  • fix(theme/style): some components should not be included in rp-doc by @SoonIter in #2602
  • fix(plugin-llms): should be compilatable to user manual nav and sidebar configuration by @SoonIter in #2606
  • fix: render HTML entities correctly in dynamic TOC by @JounQin in #2613
  • fix(theme): llms component should not be included in rp-doc by @SoonIter in #2614
  • fix(auto-nav-sidebar): watch h1 change for sidebar by @SoonIter in #2619
  • fix(auto-nav-sidebar): should extract tag and fix the chunks word break by @SoonIter in #2652
  • fix(theme): add --rp-banner-height to scroll-padding-top by @SoonIter in #2678
  • fix(theme/Tabs): keepDOM default value should be true by @SoonIter in #2682
  • fix(theme/code): fix the table code font-size and separate inline-code-block and code-block by @SoonIter in #2688
  • fix(theme): hydration error in NavHamburger and fix Search color by @SoonIter in #2697
  • fix(theme)!: add frontmatter UI control back and remove uiSwitch by @SoonIter in #2698
  • fix(theme): OverviewGroup and title margin by @SoonIter in #2699
  • fix(theme/Banner): cannot be closed due to hydration error by @SoonIter in #2703
  • fix(mdx): preserve error stack traces from MDX plugins and limit output to 10 lines by @Copilot in #2711
  • fix(mdx): error stack is empty by @SoonIter in #2716
  • fix(theme): Outline font family was hardcoded by @elliotcourant in #2739
  • fix(plugin-preview): @theme module not found regression by @SoonIter in #2741
  • fix(theme): use pointer cursor for menu by @fi3ework in #2750
  • fix: pathnameToRouteService to handle URLs with hash and search parameters by @Copilot in #2743
  • fix: do not expose scrollToTarget as public API by @SoonIter in #2761
  • fix(theme): Edit link should show by @SoonIter in #2763
  • fix(theme): nprogress bar color by @SoonIter in #2770
  • fix(theme): button gradient color and add line-height back by @SoonIter in #2771
  • fix(theme): Link click area should be same by @SoonIter in #2777
  • fix(search): SearchPanel Enter keyboard not work regression by @SoonIter in #2775
  • fix(route): should be compatiable to lowercase routePath by @SoonIter in #2776
  • fix(theme): scroll should work in afterNav by @SoonIter in #2779
  • fix(theme): line-height of SourceCode component by @SoonIter in #2783
  • fix(theme): adjust line-height of sidebar and outline by @SoonIter in #2784
  • fix(theme): unused code by @SoonIter in #2781
  • fix(theme): section-header margin-top wrong selector by @SoonIter in #2782
  • fix(theme): h2 gap and twoslash codeblock style by @SoonIter in #2786
  • fix(theme): moon svg white border by @SoonIter in #2788
  • fix(theme): css vars color by @SoonIter in #2791
  • fix(theme): table should be scrollable and startTransition should not be a html attribute by @SoonIter in #2792
  • fix(theme): th width should be same with td by @SoonIter in #2804
  • fix(theme): plugin-preview should hide the toc by @SoonIter in #2803
  • fix(theme/Sidebar): pass down onClick prop by @JounQin in #2811
  • fix(plugin-twoslash): Make twoslashOptions optional by @Karibash in #2819
  • fix(ssg): wrong html selector for crawlers regression due to react@19.2.0 progressiveChunkSize change by @SoonIter in #2831
  • fix(theme/callout): link in callout should use currentColor by @SoonIter in #2838
  • fix(plugin-typedoc): allow typedoc plugin interface as usual by @SoonIter in #2836
  • fix(theme/outline): line-height of toc item by @SoonIter in #2840
  • fix(cli): should not restart when public folder change files by @SoonIter in #2847
  • fix(core): Fix an issue where the PackageManagerTabs component outputs broken Markdown by @Karibash in #2861
  • fix(core): Fix an issue where llms.txt was not generated when locales was not set by @Karibash in #2866
  • fix(plugin-algolia): add missing constant by @dragomano in #2865
  • fix(theme/Link): add forwardRef for react 18 by @SoonIter in #2871
  • fix(theme/NavScreen): Disable clicks on active language/version entries in mobile nav by @Copilot in #2883
  • fix(cli/eject): fix the component path not right by @SoonIter in #2896
  • fix(theme/CodeBlockRuntime): Render SSR fallback for CodeBlockRuntime to avoid first-paint empty DOM/CLS by @Copilot in #2902
  • fix: do not modify singleton global sidebar by @JounQin in #2911
  • fix(core): Iterator#map is only available on Node 22+ by @JounQin in #2923
  • fix(theme/Sidebar): sidebar should also listen location changes by @JounQin in #2922
  • fix(theme): improve SSR compatibility by @SoonIter in #2934
  • fix: hover group links should also calc active with matchNavbar by default by @JounQin in #2930
  • fix(theme/Nav): render empty nav items correctly not link by @JounQin in #2929
  • fix(theme/Layout): render beforeNavMenu correctly by @JounQin in #2822
  • fix(ssg-md): use .md links instead of .html in Overview SSG-MD mode by @SoonIter in #2944
  • fix(plugin-algolia): upgrade docsearch and fix the css regression by @SoonIter in #2946
  • fix(theme/Codeblock): revert the code shadow and enhance the separator line by @SoonIter in #2931
  • fix(plugin-algolia): should remove base by @SoonIter in #2949
  • fix: use layout effect for theme sync by @SoonIter in #2961
  • fix(theme): use modern sidebar CSS to respect system scrollbar settings by @SoonIter in #2973
  • fix(theme/nav): Fixed small layout shift on scroll by @elliotcourant in #2980
  • fix(theme): Fixed step counter text alignment by @elliotcourant in #2981
  • fix(theme): fix inline code style in Callout when code is direct child of content by @SoonIter in #2997
  • fix(config/types): defineConfig should support asyncFn by @SoonIter in #3000
  • fix(core): improve i18n missing keys warning with configuration hints by @SoonIter in #3030
  • fix(ssg): collapse experimentalExcludeRoutePaths log when too many routes are ignored by @SoonIter in #3032
  • fix(theme/Llms): use SvgWrapper in Llms by @jaworek in #3045
  • fix(plugin-preview): handle preEntry as string type by @SoonIter in #3065
  • fix(Nav): conditionally render appearance switch based on darkMode setting (#3068) by @maccuaa in #3069
  • fix(llms): support multi-version + multi-language in SSG-MD and plugin-llms by @SoonIter in #3076

Document 📖

  • docs: improve Rsbuild plugin guides by @chenjiahan in #1900
  • docs: enhance runtime API with types and dark mode usages by @chenjiahan in #1906
  • docs: replace generic framework references with Rspress by @chenjiahan in #1907
  • docs: update i18n messages by @chenjiahan in #1958
  • docs: add editLink and outline config by @9aoy in #1969
  • docs: enhance front matter documentation by @chenjiahan in #1987
  • docs: format command bash space by @9aoy in #1991
  • docs: correct meta tags generation example by @chenjiahan in #2071
  • docs: migrate to docsearch new account by @SoonIter in #2077
  • docs: add 1.x doc link by @SoonIter in #2108
  • docs(algolia-search): use new docsearch account and optimize the dark mode by @SoonIter in #2131
  • docs: replace Helmet with Head by @jbroma in #2150
  • docs: update website contributing guide by @chenjiahan in #2157
  • docs(algolia): update index name by @SoonIter in #2163
  • docs: add Rstest to homepage by @chenjiahan in #2169
  • docs: update Rstack introduction by @chenjiahan in #2179
  • docs: incorrect usage of socialLinks by @JounQin in #2192
  • docs: switch to new domain by @chenjiahan in #2218
  • docs: upgrade the algolia template by @SoonIter in #2226
  • docs: update community plugins links to point to the correct repository by @chenjiahan in #2257
  • docs: fix Rsbuild url in README.md by @superpung in #2304
  • docs: add deepwiki badge by @Timeless0911 in #2342
  • docs: update copyright year to match format by @Marukome0743 in #2362
  • docs: update PackageManagerTabs tips for pnpm by @Marukome0743 in #2365
  • docs: beta.22 @rspress/core breakingchange fix by @SoonIter in #2414
  • docs: add @rspress/plugin-sitemap by @SoonIter in #2417
  • docs: polish the use-mdx/components by @SoonIter in #2425
  • docs(typo): update plugin-llms by @SoonIter in #2432
  • docs(v2): update code block line highlighting syntax to v2 by @saseungmin in #2431
  • docs: add npm icon to social links in theme config documentation by @saseungmin in #2442
  • docs: add Rslint and version badges to Rstack tools table by @chenjiahan in #2451
  • docs(mdx): add markdown container part by @SoonIter in #2467
  • docs: upgrade readme and add npm link to docsite by @SoonIter in #2491
  • docs: add asset links and format with biome by @SoonIter in #2507
  • docs: add codeblock by @SoonIter in #2500
  • docs(codeblocks): polish some write style by @SoonIter in #2508
  • docs: polish codeblocks doc V2 by @SoonIter in #2517
  • docs: polish twoslash usage doc by @SoonIter in #2542
  • docs(plugin-twoslash): fix typo by @SoonIter in #2543
  • docs(codeblocks): add diff block by @SoonIter in #2551
  • docs: add Zephyr to docs by @Nsttt in #2555
  • docs: add zh docs of deploy with Zephyr Cloud by @Timeless0911 in #2572
  • docs(ui): upgrade Rspress UI part by @SoonIter in #2591
  • docs(ui): upgrade shiki vars by @SoonIter in #2598
  • docs: fix the ui dark mode color by @SoonIter in #2621
  • docs: adjust the folder layout by @SoonIter in #2622
  • docs: fixed navbar example typo by @ulivz in #2645
  • docs: stabilize the codeblock css vars by @SoonIter in #2689
  • docs: update logo references to use SVG version by @chenjiahan in #2737
  • docs: update package manager command from beta to rc by @chenjiahan in #2800
  • docs: Add "new" tag to plugin documentation for new v1 plugins by @Copilot in #2851
  • docs(codeblock): a typo by @SoonIter in #2868
  • docs(temp-fix-workaround): add shiki langs for markdown codeblock unstable bundle size by @SoonIter in #2874
  • docs: Polish Rspress V2 bilingual docs for navigation, MDX usage, and UI components by @Copilot in #2875
  • docs: add Chinese guide for llms.txt SSG-MD output by @Copilot in #2877
  • docs: adjust structure by @SoonIter in #2884
  • docs(ui): Add PackageManagerTabs component docs in en/zh UI sections by @Copilot in #2882
  • docs(api): add rspress eject command documentation by @Copilot in #2886
  • docs: Split runtime hook docs into dedicated UI hook pages by @Copilot in #2885
  • docs: describe useSite/usePage runtime hooks by @Copilot in #2887
  • docs: add components by @SoonIter in #2891
  • docs(theme): Clarify LastUpdated configuration and customization guidance by @Copilot in #2901
  • docs: add preview for some codeblocks by @SoonIter in #2907
  • docs: Add usePages and useFrontmatter hook docs with overview example and HMR note by @Copilot in #2905
  • docs: add pluginOg and og-image to rspress docsite by @SoonIter in #2835
  • docs: Add wrap vs eject guides for customizing Rspress theme by @Copilot in #2906
  • docs: upgrade custom-theme and add wrap and eject by @SoonIter in #2925
  • docs: upgrade llms.txt and ssg-md by @SoonIter in #2927
  • docs: fix og-image cjk wrong font and title slice logic by @SoonIter in #2919
  • docs: typo translate by @SoonIter in #2932
  • docs: fix the shiki highlighter ansi "/" by @SoonIter in #2947
  • docs: add SSG vs SSG-MD comparison table by @SoonIter in #2950
  • docs: update links from rspack-contrib to rstackjs by @chenjiahan in #2953
  • docs: add migrate from V1 by @SoonIter in #2954
  • docs: add missing Layout slots (beforeNavMenu, afterNav) and add Layout Slots heading (Vibe Kanban) by @SoonIter in #2964
  • docs: remove work-in-progress warning from CSS variables documentation (Vibe Kanban) by @SoonIter in #2972
  • docs: add prettier-ignore to wrapCode examples in code-blocks documentation by @SoonIter in #2974
  • docs: improve plugin-llms warning about implementation limitations and SSR compatibility by @SoonIter in #2975
  • docs: add rspress-plugin-file-tree and use tree syntax for file tree code blocks by @SoonIter in #2976
  • docs: update auto-nav-sidebar to recommend index.mdx for dir, index convention by @SoonIter in #2978
  • docs: Update introduction and index for Rspress V2 by @SoonIter in #2971
  • docs: add documentation for markdown.crossCompilerCache option by @SoonIter in #2979
  • docs: add troubleshooting tip for @rspress/core/theme-original export errors in migration guide by @SoonIter in #2984
  • docs(guide): rewrite SSG documentation with comprehensive explanations by @SoonIter in #2985
  • docs(ssg): add 404.html to output structure and troubleshooting for page refresh 404 by @SoonIter in #2987
  • docs: improve conventional route documentation with better examples and best practices by @SoonIter in #2995
  • docs: add Callout component documentation by @SoonIter in #2998
  • docs: add tip for pageType: doc-wide usage with outline: false by @SoonIter in #3005
  • docs: add frontmatter description to guide docs (zh & en) by @SoonIter in #3007
  • docs: Update documentation and improve frontmatter references by @SoonIter in #3009
  • docs: improve static assets documentation structure and clarifiy public folder usage by @SoonIter in #3011
  • docs: simplify CSS modification state management by @SoonIter in #3014
  • docs(zh): rename "预览页" to "Overview 页" for terminology consistency by @SoonIter in #3016
  • docs(theme): refactor home page and component documentation by @SoonIter in #3015
  • docs: remove URL parameters as switches section from custom page docs by @SoonIter in #3024
  • docs(description): add description frontmatter to ui documentation files by @SoonIter in #3008
  • docs: fix custom theme examples and update documentation by @SoonIter in #3035
  • docs: improve Overview page and custom-theme related pages by @SoonIter in #3037
  • docs: improve documentation and sync zh/en by @SoonIter in #3040
  • docs(ssg-md): improve document structure for better usability by @SoonIter in #3047
  • docs(css-vars): improve generateThemeCssVariables scope matching for better theme color extraction by @SoonIter in #3058
  • docs: update home feature gap and remove V2 badge from homepage by @SoonIter in #3064
  • docs: improve generateThemeCssVariables scope matching for better theme color extraction by @SoonIter in #3066
  • docs(plugin-preview): add preEntry usage tips for iframe-fixed mode by @SoonIter in #3067
  • docs: update Rspress 1.x documentation links by @chenjiahan in #3071
  • docs(ssg-md): add React 19 version requirement notice by @SoonIter in #3072
  • docs: 2.0.0 publish blog draft by @SoonIter in #2940
  • docs: update 2.0 blog and theme styles by @SoonIter in #3075

Other Changes

New Contributors

Full Changelog: v1.42.1...v2.0.0

Don't miss a new rspress release

NewReleases is sending notifications on new releases.