create-fumadocs-app 16.0.1 → 16.0.3

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.
Files changed (64) hide show
  1. package/dist/chunk-3VWJJEHU.js +204 -0
  2. package/dist/chunk-HLHY7KAF.js +181 -0
  3. package/dist/create-app.d.ts +23 -8
  4. package/dist/create-app.js +4 -5
  5. package/dist/index.js +33 -31
  6. package/dist/orama-cloud-VQUOOEZ2.js +313 -0
  7. package/package.json +5 -3
  8. package/template/+next+fuma-docs-mdx/app/(home)/page.tsx +16 -0
  9. package/template/{+next+tailwindcss → +next+fuma-docs-mdx}/app/layout.tsx +1 -1
  10. package/template/{+next → +next+fuma-docs-mdx}/example.gitignore +0 -2
  11. package/template/+next+fuma-docs-mdx/lib/layout.shared.tsx +9 -0
  12. package/template/+next+fuma-docs-mdx/lib/source.ts +1 -1
  13. package/template/{+next → +next+fuma-docs-mdx}/mdx-components.tsx +0 -1
  14. package/template/+next+fuma-docs-mdx/package.json +29 -0
  15. package/template/+next+fuma-docs-mdx/source.config.ts +1 -0
  16. package/template/+next+fuma-docs-mdx/tsconfig.json +2 -2
  17. package/template/+orama-cloud/@app/components/search.tsx +59 -0
  18. package/template/+orama-cloud/@app/lib/export-static-indexes.ts +14 -0
  19. package/template/+orama-cloud/@root/.env.example +6 -0
  20. package/template/react-router/app/docs/page.tsx +4 -4
  21. package/template/react-router/example.gitignore +0 -1
  22. package/template/react-router/react-router.config.ts +3 -3
  23. package/template/react-router-spa/README.md +12 -0
  24. package/template/react-router-spa/app/app.css +3 -0
  25. package/template/react-router-spa/app/components/search.tsx +50 -0
  26. package/template/react-router-spa/app/docs/page.tsx +53 -0
  27. package/template/react-router-spa/app/docs/search.ts +10 -0
  28. package/template/react-router-spa/app/lib/layout.shared.tsx +9 -0
  29. package/template/react-router-spa/app/lib/source.ts +7 -0
  30. package/template/react-router-spa/app/root.tsx +76 -0
  31. package/template/react-router-spa/app/routes/home.tsx +30 -0
  32. package/template/react-router-spa/app/routes.ts +7 -0
  33. package/template/react-router-spa/content/docs/index.mdx +32 -0
  34. package/template/react-router-spa/content/docs/test.mdx +24 -0
  35. package/template/react-router-spa/example.gitignore +7 -0
  36. package/template/react-router-spa/package.json +36 -0
  37. package/template/react-router-spa/public/favicon.ico +0 -0
  38. package/template/react-router-spa/react-router.config.ts +23 -0
  39. package/template/react-router-spa/serve.json +3 -0
  40. package/template/react-router-spa/source.config.ts +7 -0
  41. package/template/react-router-spa/tsconfig.json +28 -0
  42. package/template/react-router-spa/vite.config.ts +10 -0
  43. package/template/tanstack-start/example.gitignore +9 -1
  44. package/template/tanstack-start/package.json +6 -6
  45. package/template/waku/example.gitignore +3 -1
  46. package/template/waku/package.json +3 -3
  47. package/dist/chunk-YVEWA65C.js +0 -370
  48. package/template/+next/README.md +0 -37
  49. package/template/+next/app/(home)/page.tsx +0 -42
  50. package/template/+next/app/layout.tsx +0 -23
  51. package/template/+next/lib/layout.shared.tsx +0 -30
  52. package/template/+next+content-collections/app/docs/[[...slug]]/page.tsx +0 -51
  53. package/template/+next+content-collections/content-collections.ts +0 -26
  54. package/template/+next+content-collections/lib/source.ts +0 -8
  55. package/template/+next+content-collections/next.config.mjs +0 -8
  56. package/template/+next+content-collections/tsconfig.json +0 -35
  57. package/template/+next+tailwindcss/app/(home)/page.tsx +0 -19
  58. package/template/{+next → +next+fuma-docs-mdx}/app/(home)/layout.tsx +0 -0
  59. package/template/{+next → +next+fuma-docs-mdx}/app/api/search/route.ts +0 -0
  60. package/template/{+next → +next+fuma-docs-mdx}/app/docs/layout.tsx +1 -1
  61. /package/template/{+next+tailwindcss → +next+fuma-docs-mdx}/app/global.css +0 -0
  62. /package/template/{+next → +next+fuma-docs-mdx}/content/docs/index.mdx +0 -0
  63. /package/template/{+next → +next+fuma-docs-mdx}/content/docs/test.mdx +0 -0
  64. /package/template/{+next+tailwindcss → +next+fuma-docs-mdx}/postcss.config.mjs +0 -0
@@ -0,0 +1,204 @@
1
+ import {
2
+ copy,
3
+ cwd,
4
+ depVersions,
5
+ pick,
6
+ sourceDir,
7
+ templates,
8
+ tryGitInit
9
+ } from "./chunk-HLHY7KAF.js";
10
+
11
+ // src/create-app.ts
12
+ import path from "path";
13
+ import fs from "fs/promises";
14
+
15
+ // src/auto-install.ts
16
+ import { x } from "tinyexec";
17
+ var managers = ["npm", "yarn", "bun", "pnpm"];
18
+ function getPackageManager() {
19
+ const userAgent = process.env.npm_config_user_agent ?? "";
20
+ if (userAgent.startsWith("yarn")) {
21
+ return "yarn";
22
+ }
23
+ if (userAgent.startsWith("pnpm")) {
24
+ return "pnpm";
25
+ }
26
+ if (userAgent.startsWith("bun")) {
27
+ return "bun";
28
+ }
29
+ return "npm";
30
+ }
31
+ async function autoInstall(manager, dest) {
32
+ await x(manager, ["install"], {
33
+ throwOnError: true,
34
+ nodeOptions: {
35
+ env: {
36
+ ...process.env,
37
+ NODE_ENV: "development",
38
+ DISABLE_OPENCOLLECTIVE: "1"
39
+ },
40
+ cwd: dest
41
+ }
42
+ });
43
+ }
44
+
45
+ // src/create-app.ts
46
+ function defaults(options) {
47
+ return {
48
+ ...options,
49
+ plugins: options.plugins ?? [],
50
+ useSrcDir: options.template.startsWith("+next") && options.useSrcDir === true,
51
+ lint: options.lint ?? false,
52
+ initializeGit: options.initializeGit ?? false,
53
+ installDeps: options.installDeps ?? false,
54
+ log: console.log
55
+ };
56
+ }
57
+ function isRelative(dir, file) {
58
+ return !path.relative(dir, file).startsWith(`..${path.sep}`);
59
+ }
60
+ async function create(createOptions) {
61
+ const options = defaults(createOptions);
62
+ const {
63
+ outputDir,
64
+ useSrcDir,
65
+ log,
66
+ installDeps,
67
+ template,
68
+ lint,
69
+ initializeGit,
70
+ packageManager,
71
+ plugins
72
+ } = options;
73
+ const projectName = path.basename(outputDir);
74
+ const dest = path.resolve(cwd, outputDir);
75
+ const isNext = options.template.startsWith("+next");
76
+ const pluginContext = {
77
+ template: templates.find((item) => item.value === template),
78
+ dest,
79
+ options
80
+ };
81
+ await copy(path.join(sourceDir, `template/${template}`), dest, {
82
+ rename(file) {
83
+ file = file.replace("example.gitignore", ".gitignore");
84
+ if (useSrcDir && (path.basename(file) === "mdx-components.tsx" || isRelative(path.join(dest, "app"), file) || isRelative(path.join(dest, "lib"), file))) {
85
+ return path.join(dest, "src", path.relative(dest, file));
86
+ }
87
+ return file;
88
+ }
89
+ });
90
+ if (isNext && lint) {
91
+ await copy(path.join(sourceDir, `template/+next+${lint}`), dest);
92
+ log("Configured Linter");
93
+ }
94
+ if (isNext && useSrcDir) {
95
+ const tsconfigPath = path.join(dest, "tsconfig.json");
96
+ const content = (await fs.readFile(tsconfigPath)).toString();
97
+ const config = JSON.parse(content);
98
+ if (config.compilerOptions?.paths) {
99
+ Object.assign(config.compilerOptions.paths, {
100
+ "@/*": ["./src/*"]
101
+ });
102
+ }
103
+ await fs.writeFile(tsconfigPath, JSON.stringify(config, null, 2));
104
+ }
105
+ let packageJson = await createPackageJson(projectName, dest, options);
106
+ for (const plugin of plugins) {
107
+ const result = await plugin.packageJson?.call(pluginContext, packageJson);
108
+ if (result) packageJson = result;
109
+ }
110
+ await fs.writeFile(
111
+ path.join(dest, "package.json"),
112
+ JSON.stringify(packageJson, null, 2)
113
+ );
114
+ let readme = await getReadme(dest, projectName);
115
+ for (const plugin of plugins) {
116
+ readme = await plugin.readme?.call(pluginContext, readme) ?? readme;
117
+ }
118
+ await fs.writeFile(path.join(dest, "README.md"), readme);
119
+ for (const plugin of plugins) {
120
+ await plugin.afterWrite?.call(pluginContext);
121
+ }
122
+ if (installDeps) {
123
+ try {
124
+ await autoInstall(packageManager, dest);
125
+ log("Installed dependencies");
126
+ } catch (err) {
127
+ log(`Failed to install dependencies: ${err}`);
128
+ }
129
+ }
130
+ if (initializeGit && await tryGitInit(dest)) {
131
+ log("Initialized Git repository");
132
+ }
133
+ }
134
+ async function getReadme(dest, projectName) {
135
+ const template = await fs.readFile(path.join(dest, "README.md")).then((res) => res.toString());
136
+ return `# ${projectName}
137
+
138
+ ${template}`;
139
+ }
140
+ async function createPackageJson(projectName, dir, { template, lint }) {
141
+ const isNext = template.startsWith("+next");
142
+ function replaceWorkspaceDeps(deps) {
143
+ for (const k in deps) {
144
+ if (deps[k].startsWith("workspace:") && k in depVersions) {
145
+ deps[k] = depVersions[k];
146
+ }
147
+ }
148
+ return deps;
149
+ }
150
+ let packageJson = JSON.parse(
151
+ await fs.readFile(path.join(dir, "package.json")).then((res) => res.toString())
152
+ );
153
+ packageJson = {
154
+ name: projectName,
155
+ ...packageJson,
156
+ dependencies: replaceWorkspaceDeps(packageJson.dependencies),
157
+ devDependencies: replaceWorkspaceDeps(packageJson.devDependencies)
158
+ };
159
+ if (isNext) {
160
+ packageJson = {
161
+ ...packageJson,
162
+ scripts: {
163
+ ...packageJson.scripts,
164
+ postinstall: "fumadocs-mdx"
165
+ }
166
+ };
167
+ }
168
+ if (isNext && lint === "biome") {
169
+ packageJson = {
170
+ ...packageJson,
171
+ scripts: {
172
+ ...packageJson.scripts,
173
+ lint: "biome check",
174
+ format: "biome format --write"
175
+ },
176
+ devDependencies: {
177
+ ...packageJson.devDependencies,
178
+ ...pick(depVersions, ["@biomejs/biome"])
179
+ }
180
+ };
181
+ }
182
+ if (isNext && lint === "eslint") {
183
+ packageJson = {
184
+ ...packageJson,
185
+ scripts: {
186
+ ...packageJson.scripts,
187
+ lint: "eslint"
188
+ },
189
+ devDependencies: {
190
+ ...packageJson.devDependencies,
191
+ eslint: "^9",
192
+ "eslint-config-next": depVersions.next,
193
+ "@eslint/eslintrc": "^3"
194
+ }
195
+ };
196
+ }
197
+ return packageJson;
198
+ }
199
+
200
+ export {
201
+ managers,
202
+ getPackageManager,
203
+ create
204
+ };
@@ -0,0 +1,181 @@
1
+ // src/utils.ts
2
+ import fs from "fs/promises";
3
+ import path, { join } from "path";
4
+ import { x } from "tinyexec";
5
+ async function writeFile(file, content) {
6
+ await fs.mkdir(path.dirname(file), { recursive: true });
7
+ await fs.writeFile(file, content);
8
+ }
9
+ async function copy(from, to, options = {}) {
10
+ const {
11
+ rename = (s) => s,
12
+ filterDir = () => true,
13
+ filter = () => true
14
+ } = options;
15
+ const stats = await fs.stat(from);
16
+ if (stats.isDirectory() && filterDir(from)) {
17
+ const files = await fs.readdir(from);
18
+ await Promise.all(
19
+ files.map(
20
+ (file) => copy(path.join(from, file), path.join(to, file), options)
21
+ )
22
+ );
23
+ }
24
+ if (stats.isFile() && filter(from)) {
25
+ to = rename(to);
26
+ await fs.mkdir(path.dirname(to), { recursive: true });
27
+ await fs.copyFile(from, to);
28
+ }
29
+ }
30
+ async function isInGitRepository(cwd2) {
31
+ const { exitCode } = await x("git", ["rev-parse", "--is-inside-work-tree"], {
32
+ nodeOptions: { cwd: cwd2 }
33
+ });
34
+ return exitCode === 0;
35
+ }
36
+ async function isDefaultBranchSet(cwd2) {
37
+ const { exitCode } = await x("git", ["config", "init.defaultBranch"], {
38
+ nodeOptions: { cwd: cwd2 }
39
+ });
40
+ return exitCode === 0;
41
+ }
42
+ async function tryGitInit(cwd2) {
43
+ const { exitCode } = await x("git", ["--version"]);
44
+ if (exitCode !== 0) return false;
45
+ if (await isInGitRepository(cwd2)) return false;
46
+ try {
47
+ await x("git", ["init"], {
48
+ throwOnError: true,
49
+ nodeOptions: { cwd: cwd2 }
50
+ });
51
+ if (!await isDefaultBranchSet(cwd2)) {
52
+ await x("git", ["checkout", "-b", "main"], {
53
+ throwOnError: true,
54
+ nodeOptions: {
55
+ cwd: cwd2
56
+ }
57
+ });
58
+ }
59
+ await x("git", ["add", "-A"], {
60
+ throwOnError: true,
61
+ nodeOptions: {
62
+ cwd: cwd2
63
+ }
64
+ });
65
+ await x(
66
+ "git",
67
+ ["commit", "-m", "Initial commit from Create Fumadocs App"],
68
+ {
69
+ throwOnError: true,
70
+ nodeOptions: {
71
+ cwd: cwd2
72
+ }
73
+ }
74
+ );
75
+ return true;
76
+ } catch {
77
+ await fs.rmdir(join(cwd2, ".git"), { recursive: true }).catch(() => null);
78
+ return false;
79
+ }
80
+ }
81
+ function pick(obj, keys) {
82
+ const result = {};
83
+ for (const key of keys) {
84
+ if (key in obj) {
85
+ result[key] = obj[key];
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+
91
+ // src/constants.ts
92
+ import { fileURLToPath } from "url";
93
+
94
+ // src/versions.js
95
+ var versions = { "fumadocs-core": "16.0.3", "fumadocs-ui": "16.0.3", "fumadocs-mdx": "13.0.1", "@fumadocs/mdx-remote": "1.4.3", "@fumadocs/content-collections": "1.2.4" };
96
+
97
+ // ../create-app-versions/package.json
98
+ var package_default = {
99
+ name: "example-versions",
100
+ version: "0.0.0",
101
+ private: true,
102
+ description: "Used to track dependency versions in create-fumadocs-app",
103
+ dependencies: {
104
+ "@biomejs/biome": "^2.2.6",
105
+ "@content-collections/core": "^0.11.1",
106
+ "@content-collections/mdx": "^0.2.2",
107
+ "@content-collections/next": "^0.2.8",
108
+ "@orama/core": "^1.2.13",
109
+ "@react-router/dev": "^7.9.4",
110
+ "@react-router/node": "^7.9.4",
111
+ "@react-router/serve": "^7.9.4",
112
+ "@tailwindcss/postcss": "^4.1.15",
113
+ "@tailwindcss/vite": "^4.1.15",
114
+ "@tanstack/react-router": "^1.133.21",
115
+ "@tanstack/react-start": "^1.133.21",
116
+ "@types/mdx": "^2.0.13",
117
+ "@types/node": "24.9.1",
118
+ "@types/react": "^19.2.2",
119
+ "@types/react-dom": "^19.2.2",
120
+ "@vitejs/plugin-react": "^5.0.4",
121
+ "gray-matter": "^4.0.3",
122
+ isbot: "^5.1.31",
123
+ "lucide-react": "^0.546.0",
124
+ next: "16.0.0",
125
+ postcss: "^8.5.6",
126
+ react: "^19.2.0",
127
+ "react-dom": "^19.2.0",
128
+ "react-router": "^7.9.4",
129
+ "react-router-devtools": "^5.1.3",
130
+ shiki: "^3.13.0",
131
+ tailwindcss: "^4.1.15",
132
+ tinyglobby: "^0.2.15",
133
+ typescript: "^5.9.3",
134
+ vinxi: "^0.5.8",
135
+ vite: "^7.1.11",
136
+ "vite-tsconfig-paths": "^5.1.4"
137
+ }
138
+ };
139
+
140
+ // src/constants.ts
141
+ var sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
142
+ var cwd = process.cwd();
143
+ var templates = [
144
+ {
145
+ value: "+next+fuma-docs-mdx",
146
+ label: "Next.js: Fumadocs MDX",
147
+ hint: "recommended"
148
+ },
149
+ {
150
+ value: "waku",
151
+ label: "Waku: Fumadocs MDX"
152
+ },
153
+ {
154
+ value: "react-router",
155
+ label: "React Router: Fumadocs MDX (not RSC)"
156
+ },
157
+ {
158
+ value: "react-router-spa",
159
+ label: "React Router SPA: Fumadocs MDX (not RSC)",
160
+ hint: "SPA mode allows you to host the site statically, compatible with a CDN."
161
+ },
162
+ {
163
+ value: "tanstack-start",
164
+ label: "Tanstack Start: Fumadocs MDX (not RSC)"
165
+ }
166
+ ];
167
+ var depVersions = {
168
+ ...versions,
169
+ ...package_default.dependencies
170
+ };
171
+
172
+ export {
173
+ writeFile,
174
+ copy,
175
+ tryGitInit,
176
+ pick,
177
+ sourceDir,
178
+ cwd,
179
+ templates,
180
+ depVersions
181
+ };
@@ -1,8 +1,13 @@
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", "waku"];
5
- type Template = (typeof templates)[number];
4
+ interface TemplateInfo {
5
+ value: '+next+fuma-docs-mdx' | 'waku' | 'react-router' | 'react-router-spa' | 'tanstack-start';
6
+ label: string;
7
+ hint?: string;
8
+ }
9
+
10
+ type Template = TemplateInfo['value'];
6
11
  interface Options {
7
12
  outputDir: string;
8
13
  template: Template;
@@ -15,11 +20,6 @@ interface Options {
15
20
  * @defaultValue false
16
21
  */
17
22
  useSrcDir?: boolean;
18
- /**
19
- * (Next.js only) Configure Tailwind CSS
20
- * @defaultValue true
21
- */
22
- tailwindcss?: boolean;
23
23
  /**
24
24
  * (Next.js Only) Configure Lint
25
25
  * @defaultValue false
@@ -28,7 +28,22 @@ interface Options {
28
28
  installDeps?: boolean;
29
29
  initializeGit?: boolean;
30
30
  log?: (message: string) => void;
31
+ plugins?: TemplatePlugin[];
32
+ }
33
+ interface TemplatePluginContext {
34
+ template: TemplateInfo;
35
+ options: Required<Options>;
36
+ /**
37
+ * output directory
38
+ */
39
+ dest: string;
40
+ }
41
+ type Awaitable<T> = T | Promise<T>;
42
+ interface TemplatePlugin {
43
+ packageJson?: (this: TemplatePluginContext, packageJson: any) => Awaitable<void | any>;
44
+ afterWrite?: (this: TemplatePluginContext) => Awaitable<void>;
45
+ readme?: (this: TemplatePluginContext, content: string) => Awaitable<void | string>;
31
46
  }
32
47
  declare function create(createOptions: Options): Promise<void>;
33
48
 
34
- export { type Options, type Template, create, templates };
49
+ export { type Options, type Template, type TemplatePlugin, type TemplatePluginContext, create };
@@ -1,8 +1,7 @@
1
1
  import {
2
- create,
3
- templates
4
- } from "./chunk-YVEWA65C.js";
2
+ create
3
+ } from "./chunk-3VWJJEHU.js";
4
+ import "./chunk-HLHY7KAF.js";
5
5
  export {
6
- create,
7
- templates
6
+ create
8
7
  };
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  create,
4
- cwd,
5
4
  getPackageManager,
6
- managers,
5
+ managers
6
+ } from "./chunk-3VWJJEHU.js";
7
+ import {
8
+ cwd,
7
9
  templates
8
- } from "./chunk-YVEWA65C.js";
10
+ } from "./chunk-HLHY7KAF.js";
9
11
 
10
12
  // src/index.ts
11
13
  import fs from "fs/promises";
@@ -35,9 +37,9 @@ program.option("--no-install", "Disable installing packages automatically");
35
37
  program.option("--no-git", "Disable auto Git repository initialization");
36
38
  program.option(
37
39
  "--template <name>",
38
- `template to choose: ${templates.join(", ")}`,
40
+ `template to choose: ${templates.map((v) => v.value).join(", ")}`,
39
41
  (value) => {
40
- if (!templates.includes(value)) {
42
+ if (!templates.some((item) => item.value === value)) {
41
43
  throw new Error(`Invalid template: ${value}.`);
42
44
  }
43
45
  return value;
@@ -71,29 +73,7 @@ async function main(config) {
71
73
  return select({
72
74
  message: "Choose a template",
73
75
  initialValue: "+next+fuma-docs-mdx",
74
- options: [
75
- {
76
- value: "+next+fuma-docs-mdx",
77
- label: "Next.js: Fumadocs MDX",
78
- hint: "recommended"
79
- },
80
- {
81
- value: "+next+content-collections",
82
- label: "Next.js: Content Collections"
83
- },
84
- {
85
- value: "waku",
86
- label: "Waku: Fumadocs MDX"
87
- },
88
- {
89
- value: "react-router",
90
- label: "React Router: Fumadocs MDX (not RSC)"
91
- },
92
- {
93
- value: "tanstack-start",
94
- label: "Tanstack Start: Fumadocs MDX (not RSC)"
95
- }
96
- ]
76
+ options: templates
97
77
  });
98
78
  },
99
79
  src: async (v) => {
@@ -116,6 +96,10 @@ async function main(config) {
116
96
  message: "Configure linter?",
117
97
  initialValue: false,
118
98
  options: [
99
+ {
100
+ value: false,
101
+ label: "Disabled"
102
+ },
119
103
  {
120
104
  value: "eslint",
121
105
  label: "ESLint"
@@ -123,10 +107,23 @@ async function main(config) {
123
107
  {
124
108
  value: "biome",
125
109
  label: "Biome"
110
+ }
111
+ ]
112
+ });
113
+ },
114
+ search: () => {
115
+ return select({
116
+ message: "Choose a search solution?",
117
+ options: [
118
+ {
119
+ value: "orama",
120
+ label: "Default",
121
+ hint: "local search powered by Orama, recommended"
126
122
  },
127
123
  {
128
- value: false,
129
- label: "Disabled"
124
+ value: "orama-cloud",
125
+ label: "Orama Cloud",
126
+ hint: "3rd party search solution, signup needed"
130
127
  }
131
128
  ]
132
129
  });
@@ -173,15 +170,20 @@ async function main(config) {
173
170
  }
174
171
  const info = spinner();
175
172
  info.start(`Generating Project`);
173
+ const plugins = [];
174
+ if (options.search === "orama-cloud") {
175
+ const { oramaCloud } = await import("./orama-cloud-VQUOOEZ2.js");
176
+ plugins.push(oramaCloud());
177
+ }
176
178
  await create({
177
179
  packageManager: manager,
178
- tailwindcss: true,
179
180
  template: options.template,
180
181
  outputDir: dest,
181
182
  installDeps: options.installDeps,
182
183
  lint: options.lint,
183
184
  useSrcDir: options.src,
184
185
  initializeGit: config.git ?? true,
186
+ plugins,
185
187
  log: (message) => {
186
188
  info.message(message);
187
189
  }