create-fumadocs-app 15.6.7 → 15.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,13 +10,13 @@ async function isInGitRepository(cwd2) {
10
10
  const { exitCode } = await x("git", ["rev-parse", "--is-inside-work-tree"], {
11
11
  nodeOptions: { cwd: cwd2 }
12
12
  });
13
- return exitCode !== 0;
13
+ return exitCode === 0;
14
14
  }
15
15
  async function isDefaultBranchSet(cwd2) {
16
16
  const { exitCode } = await x("git", ["config", "init.defaultBranch"], {
17
17
  nodeOptions: { cwd: cwd2 }
18
18
  });
19
- return exitCode !== 0;
19
+ return exitCode === 0;
20
20
  }
21
21
  async function tryGitInit(cwd2) {
22
22
  const { exitCode } = await x("git", ["--version"]);
@@ -59,7 +59,7 @@ async function tryGitInit(cwd2) {
59
59
  }
60
60
 
61
61
  // src/versions.js
62
- var versions = { "fumadocs-core": "15.6.7", "fumadocs-ui": "15.6.7", "fumadocs-mdx": "11.7.1", "@fumadocs/mdx-remote": "1.4.0", "@fumadocs/content-collections": "1.2.1" };
62
+ var versions = { "fumadocs-core": "15.6.8", "fumadocs-ui": "15.6.8", "fumadocs-mdx": "11.7.3", "@fumadocs/mdx-remote": "1.4.0", "@fumadocs/content-collections": "1.2.1" };
63
63
 
64
64
  // ../create-app-versions/package.json
65
65
  var package_default = {
@@ -77,27 +77,27 @@ var package_default = {
77
77
  "@react-router/serve": "^7.7.1",
78
78
  "@tailwindcss/postcss": "^4.1.11",
79
79
  "@tailwindcss/vite": "^4.1.11",
80
- "@tanstack/react-router": "^1.129.0",
81
- "@tanstack/react-start": "^1.129.0",
80
+ "@tanstack/react-router": "^1.130.12",
81
+ "@tanstack/react-start": "^1.130.14",
82
82
  "@types/mdx": "^2.0.13",
83
83
  "@types/node": "24.1.0",
84
- "@types/react": "^19.1.8",
85
- "@types/react-dom": "^19.1.6",
84
+ "@types/react": "^19.1.9",
85
+ "@types/react-dom": "^19.1.7",
86
86
  "@vitejs/plugin-react": "^4.7.0",
87
87
  "gray-matter": "^4.0.3",
88
- isbot: "^5.1.28",
89
- next: "15.4.4",
88
+ isbot: "^5.1.29",
89
+ next: "15.4.5",
90
90
  postcss: "^8.5.6",
91
- react: "^19.1.0",
92
- "react-dom": "^19.1.0",
91
+ react: "^19.1.1",
92
+ "react-dom": "^19.1.1",
93
93
  "react-router": "^7.7.1",
94
94
  "react-router-devtools": "^5.0.6",
95
- shiki: "^3.8.1",
95
+ shiki: "^3.9.1",
96
96
  tailwindcss: "^4.1.11",
97
97
  tinyglobby: "^0.2.14",
98
- typescript: "^5.8.3",
98
+ typescript: "^5.9.2",
99
99
  vinxi: "^0.5.8",
100
- vite: "^7.0.5",
100
+ vite: "^7.0.6",
101
101
  "vite-tsconfig-paths": "^5.1.4"
102
102
  }
103
103
  };
@@ -142,7 +142,8 @@ var templates = [
142
142
  "+next+content-collections",
143
143
  "+next+fuma-docs-mdx",
144
144
  "react-router",
145
- "tanstack-start"
145
+ "tanstack-start",
146
+ "waku"
146
147
  ];
147
148
  async function create(options) {
148
149
  const {
@@ -207,7 +208,7 @@ async function create(options) {
207
208
  defaultRename
208
209
  );
209
210
  }
210
- const packageJson = await createPackageJson(projectName, dest, options);
211
+ const packageJson = isNext ? await createNextPackageJson(projectName, options) : await createPackageJson(projectName, dest);
211
212
  await fs2.writeFile(
212
213
  path.join(dest, "package.json"),
213
214
  JSON.stringify(packageJson, null, 2)
@@ -246,26 +247,7 @@ async function copy(from, to, rename = (s) => s) {
246
247
  await fs2.copyFile(from, to);
247
248
  }
248
249
  }
249
- async function createPackageJson(projectName, dir, options) {
250
- function replaceWorkspaceDeps(deps) {
251
- for (const k in deps) {
252
- if (deps[k].startsWith("workspace:") && k in versions) {
253
- deps[k] = versions[k];
254
- }
255
- }
256
- return deps;
257
- }
258
- if (options.template === "tanstack-start" || options.template === "react-router") {
259
- const packageJson = JSON.parse(
260
- await fs2.readFile(path.join(dir, "package.json")).then((res) => res.toString())
261
- );
262
- return {
263
- name: projectName,
264
- ...packageJson,
265
- dependencies: replaceWorkspaceDeps(packageJson.dependencies),
266
- devDependencies: replaceWorkspaceDeps(packageJson.devDependencies)
267
- };
268
- }
250
+ async function createNextPackageJson(projectName, options) {
269
251
  return {
270
252
  name: projectName,
271
253
  version: "0.0.0",
@@ -311,6 +293,25 @@ async function createPackageJson(projectName, dir, options) {
311
293
  }
312
294
  };
313
295
  }
296
+ async function createPackageJson(projectName, dir) {
297
+ function replaceWorkspaceDeps(deps) {
298
+ for (const k in deps) {
299
+ if (deps[k].startsWith("workspace:") && k in versions) {
300
+ deps[k] = versions[k];
301
+ }
302
+ }
303
+ return deps;
304
+ }
305
+ const packageJson = JSON.parse(
306
+ await fs2.readFile(path.join(dir, "package.json")).then((res) => res.toString())
307
+ );
308
+ return {
309
+ name: projectName,
310
+ ...packageJson,
311
+ dependencies: replaceWorkspaceDeps(packageJson.dependencies),
312
+ devDependencies: replaceWorkspaceDeps(packageJson.devDependencies)
313
+ };
314
+ }
314
315
  function pick(obj, keys) {
315
316
  const result = {};
316
317
  for (const key of keys) {
@@ -1,7 +1,7 @@
1
1
  type PackageManager = (typeof managers)[number];
2
2
  declare const managers: readonly ["npm", "yarn", "bun", "pnpm"];
3
3
 
4
- declare const templates: readonly ["+next+content-collections", "+next+fuma-docs-mdx", "react-router", "tanstack-start"];
4
+ declare const templates: readonly ["+next+content-collections", "+next+fuma-docs-mdx", "react-router", "tanstack-start", "waku"];
5
5
  type Template = (typeof templates)[number];
6
6
  interface Options {
7
7
  outputDir: string;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  create,
3
3
  templates
4
- } from "./chunk-RFLPQS6Z.js";
4
+ } from "./chunk-AMOOH67F.js";
5
5
  export {
6
6
  create,
7
7
  templates
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  getPackageManager,
6
6
  managers,
7
7
  templates
8
- } from "./chunk-RFLPQS6Z.js";
8
+ } from "./chunk-AMOOH67F.js";
9
9
 
10
10
  // src/index.ts
11
11
  import fs from "fs/promises";
@@ -30,6 +30,7 @@ program.option("--eslint", "(Next.js only) enable ESLint configuration");
30
30
  program.option("--no-eslint", "(Next.js only) disable ESLint configuration");
31
31
  program.option("--install", "Enable installing packages automatically");
32
32
  program.option("--no-install", "Disable installing packages automatically");
33
+ program.option("--no-git", "Disable auto Git repository initialization");
33
34
  program.option(
34
35
  "--template <name>",
35
36
  `template to choose: ${templates.join(", ")}`,
@@ -78,14 +79,17 @@ async function main(config) {
78
79
  value: "+next+content-collections",
79
80
  label: "Next.js: Content Collections"
80
81
  },
82
+ {
83
+ value: "waku",
84
+ label: "Waku: Fumadocs MDX"
85
+ },
81
86
  {
82
87
  value: "react-router",
83
- label: "React Router: MDX Remote"
88
+ label: "React Router: Fumadocs MDX (not RSC)"
84
89
  },
85
90
  {
86
91
  value: "tanstack-start",
87
- label: "Tanstack Start: MDX Remote",
88
- hint: "Experimental"
92
+ label: "Tanstack Start: Fumadocs MDX (not RSC)"
89
93
  }
90
94
  ]
91
95
  });
@@ -156,6 +160,7 @@ async function main(config) {
156
160
  installDeps: options.installDeps,
157
161
  eslint: options.eslint === true,
158
162
  useSrcDir: options.src === true,
163
+ initializeGit: config.git,
159
164
  log: (message) => {
160
165
  info.message(message);
161
166
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fumadocs-app",
3
- "version": "15.6.7",
3
+ "version": "15.6.8",
4
4
  "description": "Create a new documentation site with Fumadocs",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -9,26 +9,26 @@
9
9
  "start": "node .output/server/index.mjs"
10
10
  },
11
11
  "dependencies": {
12
- "@tanstack/react-router": "^1.129.0",
13
- "@tanstack/react-router-devtools": "^1.129.0",
14
- "@tanstack/react-start": "^1.129.0",
12
+ "@tanstack/react-router": "^1.130.12",
13
+ "@tanstack/react-router-devtools": "^1.130.13",
14
+ "@tanstack/react-start": "^1.130.14",
15
15
  "fumadocs-core": "workspace:*",
16
16
  "fumadocs-mdx": "workspace:*",
17
17
  "fumadocs-ui": "workspace:*",
18
- "lucide-static": "^0.525.0",
19
- "react": "^19.0.0",
20
- "react-dom": "^19.0.0",
18
+ "lucide-static": "^0.536.0",
19
+ "react": "^19.1.1",
20
+ "react-dom": "^19.1.1",
21
21
  "tailwind-merge": "^3.3.1",
22
- "vite": "^7.0.5"
22
+ "vite": "^7.0.6"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@tailwindcss/vite": "^4.1.11",
26
- "@types/node": "^24.0.15",
27
- "@types/react": "^19.0.8",
28
- "@types/react-dom": "^19.0.3",
26
+ "@types/node": "^24.1.0",
27
+ "@types/react": "^19.1.9",
28
+ "@types/react-dom": "^19.1.7",
29
29
  "@vitejs/plugin-react": "^4.7.0",
30
30
  "tailwindcss": "^4.1.11",
31
- "typescript": "^5.7.2",
31
+ "typescript": "^5.9.2",
32
32
  "vite-tsconfig-paths": "^5.1.4"
33
33
  }
34
34
  }
@@ -0,0 +1,11 @@
1
+ This is a Waku application generated with [Create Fumadocs](https://github.com/fuma-nama/fumadocs).
2
+
3
+ Run development server:
4
+
5
+ ```bash
6
+ npm run dev
7
+ # or
8
+ pnpm dev
9
+ # or
10
+ yarn dev
11
+ ```
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Hello World
3
+ description: Your favourite docs framework.
4
+ icon: Rocket
5
+ ---
6
+
7
+ Hey there! Fumadocs is a docs framework that works on Waku!
8
+
9
+ ## Heading
10
+
11
+ Hello World!
12
+
13
+ <Cards>
14
+ <Card title="Learn more about Waku" href="https://waku.gg" />
15
+ <Card title="Learn more about Fumadocs" href="https://fumadocs.vercel.app" />
16
+ </Cards>
17
+
18
+ ### CodeBlock
19
+
20
+ ```ts
21
+ console.log('Hello World');
22
+ ```
23
+
24
+ #### Table
25
+
26
+ | Head | Description |
27
+ | ------------------------------- | ----------------------------------- |
28
+ | `hello` | Hello World |
29
+ | very **important** | Hey |
30
+ | _Surprisingly_ | Fumadocs |
31
+ | very long text that looks weird | hello world hello world hello world |
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Test
3
+ description: This is another page
4
+ ---
5
+
6
+ Hello World again!
7
+
8
+ ## Installation
9
+
10
+ ```npm
11
+ npm i fumadocs-core fumadocs-ui
12
+ ```
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ /node_modules/
3
+
4
+ dist
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "example-waku",
3
+ "private": true,
4
+ "sideEffects": false,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "waku dev",
8
+ "build": "waku build",
9
+ "start": "waku start"
10
+ },
11
+ "dependencies": {
12
+ "fumadocs-core": "workspace:*",
13
+ "fumadocs-mdx": "workspace:*",
14
+ "fumadocs-ui": "workspace:*",
15
+ "react": "^19.1.1",
16
+ "react-dom": "^19.1.1",
17
+ "react-server-dom-webpack": "^19.1.1",
18
+ "waku": "^0.23.7"
19
+ },
20
+ "devDependencies": {
21
+ "@tailwindcss/postcss": "^4.1.11",
22
+ "@types/node": "^24.1.0",
23
+ "@types/react": "^19.1.9",
24
+ "@types/react-dom": "^19.1.7",
25
+ "postcss": "^8.5.6",
26
+ "tailwindcss": "^4.1.11",
27
+ "typescript": "^5.9.2",
28
+ "vite": "^7.0.6"
29
+ }
30
+ }
@@ -0,0 +1,5 @@
1
+ export default {
2
+ plugins: {
3
+ '@tailwindcss/postcss': {},
4
+ },
5
+ };
@@ -0,0 +1,7 @@
1
+ import { defineConfig, defineDocs } from 'fumadocs-mdx/config';
2
+
3
+ export const docs = defineDocs({
4
+ dir: 'content/docs',
5
+ });
6
+
7
+ export default defineConfig();
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import type { ReactNode } from 'react';
3
+ import { WakuProvider } from 'fumadocs-core/framework/waku';
4
+ import { RootProvider } from 'fumadocs-ui/provider/base';
5
+
6
+ export function Provider({ children }: { children: ReactNode }) {
7
+ return (
8
+ <WakuProvider>
9
+ <RootProvider>{children}</RootProvider>
10
+ </WakuProvider>
11
+ );
12
+ }
@@ -0,0 +1,18 @@
1
+ import '../styles/globals.css';
2
+ import type { ReactNode } from 'react';
3
+ import { Provider } from '../components/provider';
4
+
5
+ export default function RootLayout({
6
+ children,
7
+ }: {
8
+ children: ReactNode;
9
+ path: string;
10
+ }) {
11
+ return <Provider>{children}</Provider>;
12
+ }
13
+
14
+ export const getConfig = async () => {
15
+ return {
16
+ render: 'static',
17
+ };
18
+ };
@@ -0,0 +1,4 @@
1
+ import { createFromSource } from 'fumadocs-core/search/server';
2
+ import { source } from '../../source';
3
+
4
+ export const { GET } = createFromSource(source);
@@ -0,0 +1,50 @@
1
+ import { source } from '../../source';
2
+ import { PageProps } from 'waku/router';
3
+ import defaultMdxComponents from 'fumadocs-ui/mdx';
4
+ import {
5
+ DocsBody,
6
+ DocsDescription,
7
+ DocsPage,
8
+ DocsTitle,
9
+ } from 'fumadocs-ui/page';
10
+
11
+ export default function DocPage({ slugs }: PageProps<'/docs/[...slugs]'>) {
12
+ const page = source.getPage(slugs);
13
+
14
+ if (!page) {
15
+ return (
16
+ <div className="text-center py-12">
17
+ <h1 className="text-3xl font-bold mb-4 text-gray-900 dark:text-gray-100">
18
+ Page Not Found
19
+ </h1>
20
+ <p className="text-gray-600 dark:text-gray-400">
21
+ The page you are looking for does not exist.
22
+ </p>
23
+ </div>
24
+ );
25
+ }
26
+
27
+ const MDX = page.data.default;
28
+ return (
29
+ <DocsPage toc={page.data.toc}>
30
+ <DocsTitle>{page.data.title}</DocsTitle>
31
+ <DocsDescription>{page.data.description}</DocsDescription>
32
+ <DocsBody>
33
+ <MDX
34
+ components={{
35
+ ...defaultMdxComponents,
36
+ }}
37
+ />
38
+ </DocsBody>
39
+ </DocsPage>
40
+ );
41
+ }
42
+
43
+ export async function getConfig() {
44
+ const pages = source.getPages().map((page) => page.slugs);
45
+
46
+ return {
47
+ render: 'static' as const,
48
+ staticPaths: pages,
49
+ } as const;
50
+ }
@@ -0,0 +1,27 @@
1
+ import type { ReactNode } from 'react';
2
+ import { DocsLayout } from 'fumadocs-ui/layouts/docs';
3
+ import { source } from '../../source';
4
+
5
+ export default function Layout({
6
+ children,
7
+ }: {
8
+ children: ReactNode;
9
+ path: string;
10
+ }) {
11
+ return (
12
+ <DocsLayout
13
+ tree={source.pageTree}
14
+ nav={{
15
+ title: 'Waku',
16
+ }}
17
+ >
18
+ {children}
19
+ </DocsLayout>
20
+ );
21
+ }
22
+
23
+ export const getConfig = async () => {
24
+ return {
25
+ render: 'static',
26
+ };
27
+ };
@@ -0,0 +1,27 @@
1
+ import { HomeLayout } from 'fumadocs-ui/layouts/home';
2
+ import { Link } from 'waku';
3
+
4
+ export default function Home() {
5
+ return (
6
+ <HomeLayout
7
+ nav={{
8
+ title: 'Waku',
9
+ }}
10
+ className="text-center py-32 justify-center"
11
+ >
12
+ <h1 className="font-medium text-xl mb-4">Fumadocs on Waku.</h1>
13
+ <Link
14
+ to="/docs"
15
+ className="px-3 py-2 rounded-lg bg-fd-primary text-fd-primary-foreground font-medium text-sm mx-auto"
16
+ >
17
+ Open Docs
18
+ </Link>
19
+ </HomeLayout>
20
+ );
21
+ }
22
+
23
+ export const getConfig = async () => {
24
+ return {
25
+ render: 'static',
26
+ };
27
+ };
@@ -0,0 +1,7 @@
1
+ import { loader } from 'fumadocs-core/source';
2
+ import { create, docs } from '../source.generated.js';
3
+
4
+ export const source = loader({
5
+ source: await create.sourceAsync(docs.doc, docs.meta),
6
+ baseUrl: '/docs',
7
+ });
@@ -0,0 +1,9 @@
1
+ @import 'tailwindcss';
2
+ @import 'fumadocs-ui/css/neutral.css';
3
+ @import 'fumadocs-ui/css/preset.css';
4
+
5
+ body {
6
+ display: flex;
7
+ flex-direction: column;
8
+ min-height: 100vh;
9
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["dom", "dom.iterable", "ES2022"],
5
+ "jsx": "react-jsx",
6
+ "module": "ESNext",
7
+ "moduleResolution": "bundler",
8
+ "resolveJsonModule": true,
9
+ "allowJs": true,
10
+ "checkJs": true,
11
+ "esModuleInterop": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "strict": true,
14
+ "skipLibCheck": true,
15
+ "noUncheckedIndexedAccess": true,
16
+ "noEmit": true
17
+ },
18
+ "exclude": ["node_modules", "dist"]
19
+ }
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from 'waku/config';
2
+ import mdx from 'fumadocs-mdx/vite';
3
+ import * as MdxConfig from './source.config.js';
4
+
5
+ export default defineConfig({
6
+ unstable_viteConfigs: {
7
+ common() {
8
+ return {
9
+ // avoid type problems due to Vite version conflicts
10
+ plugins: [mdx(MdxConfig) as any],
11
+ };
12
+ },
13
+ },
14
+ });