create-better-fullstack 1.5.4 → 1.6.1

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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import "./bts-config-BYD8mHt-.mjs";
2
+ import "./bts-config-B_rZ4_sj.mjs";
3
3
  import { t as startMcpServer } from "./mcp-entry.mjs";
4
4
 
5
5
  export { startMcpServer };
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { i as getLatestCLIVersion, r as writeBtsConfig, t as readBtsConfig } from "./bts-config-BYD8mHt-.mjs";
2
+ import { i as getLatestCLIVersion, r as writeBtsConfig, t as readBtsConfig } from "./bts-config-B_rZ4_sj.mjs";
3
3
  import z from "zod";
4
- import { AISchema, APISchema, AddonsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BackendSchema, CMSSchema, CSSFrameworkSchema, CachingSchema, DatabaseSchema, DatabaseSetupSchema, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GoApiSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, JobQueueSchema, LoggingSchema, ORMSchema, ObservabilitySchema, PackageManagerSchema, PaymentsSchema, PythonAiSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, RealtimeSchema, RuntimeSchema, RustApiSchema, RustCliSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SearchSchema, ServerDeploySchema, StateManagementSchema, TestingSchema, UILibrarySchema, ValidationSchema, WebDeploySchema, analyzeStackCompatibility } from "@better-fullstack/types";
4
+ import { AISchema, APISchema, AddonsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BackendSchema, CMSSchema, CSSFrameworkSchema, CachingSchema, DatabaseSchema, DatabaseSetupSchema, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GoApiSchema, GoAuthSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, I18nSchema, JavaAuthSchema, JavaBuildToolSchema, JavaLibrariesSchema, JavaOrmSchema, JavaTestingLibrariesSchema, JavaWebFrameworkSchema, JobQueueSchema, LoggingSchema, ORMSchema, ObservabilitySchema, PackageManagerSchema, PaymentsSchema, PythonAiSchema, PythonAuthSchema, PythonGraphqlSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, RealtimeSchema, RuntimeSchema, RustApiSchema, RustAuthSchema, RustCachingSchema, RustCliSchema, RustErrorHandlingSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SearchSchema, ServerDeploySchema, StateManagementSchema, TestingSchema, UILibrarySchema, ValidationSchema, WebDeploySchema, analyzeStackCompatibility } from "@better-fullstack/types";
5
5
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
7
 
8
8
  //#region src/mcp.ts
9
- const INSTRUCTIONS = `Better-Fullstack scaffolds fullstack projects across TypeScript, Rust, Go, and Python ecosystems with 270+ configurable options.
9
+ const INSTRUCTIONS = `Better-Fullstack scaffolds fullstack projects across TypeScript, Rust, Go, Python, and Java ecosystems with 270+ configurable options.
10
10
 
11
11
  RECOMMENDED WORKFLOW:
12
12
  1. Call bfs_get_guidance to understand field semantics, required fields, and workflow rules.
@@ -21,10 +21,10 @@ For existing projects:
21
21
 
22
22
  CRITICAL RULES:
23
23
  - Dependency installation is ALWAYS skipped in MCP mode (timeout risk). After scaffolding, tell the user to run install manually.
24
- - "frontend" is an ARRAY (multiple frontends in one monorepo). All other fields are strings.
24
+ - Array fields: "frontend", "addons", "examples", "aiDocs", "rustLibraries", "pythonAi", "javaLibraries", and "javaTestingLibraries". Most other option fields are strings.
25
25
  - "none" means "skip this feature entirely", not "use the default".
26
26
  - Always specify "ecosystem" first — it determines which other fields are relevant.
27
- - TypeScript-specific fields (frontend, backend, orm, etc.) are IGNORED for rust/python/go ecosystems.
27
+ - TypeScript-specific fields (frontend, backend, orm, etc.) are IGNORED for rust/python/go/java ecosystems.
28
28
  - The compatibility engine auto-adjusts invalid combinations — always call bfs_check_compatibility first to see adjustments.`;
29
29
  function getGuidance() {
30
30
  return {
@@ -40,19 +40,21 @@ function getGuidance() {
40
40
  typescript: "Full-featured: frontend + backend + database + ORM + auth + payments + 20+ feature categories.",
41
41
  rust: "Backend/CLI: web framework (axum/actix-web), ORM (sea-orm/sqlx), gRPC, GraphQL, CLI tools.",
42
42
  python: "Backend/AI: web framework (fastapi/django), ORM (sqlalchemy/sqlmodel), AI/ML integrations, task queues.",
43
- go: "Backend/CLI: web framework (gin/echo), ORM (gorm/sqlc), gRPC, CLI tools, logging."
43
+ go: "Backend/CLI: web framework (gin/echo), ORM (gorm/sqlc), gRPC, CLI tools, logging.",
44
+ java: "Backend/API: Spring Boot with Maven or Gradle Wrapper, optional Spring Data JPA, Spring Security, app libraries, and Java testing libraries."
44
45
  },
45
46
  fieldRules: {
46
47
  projectName: "kebab-case directory name. Required for bfs_create_project.",
47
48
  ecosystem: "Must be set first. Determines which other fields are relevant.",
48
49
  frontend: "ARRAY of strings. TypeScript only. Supports multiple frontends in one monorepo. Use [] for API-only.",
50
+ arrayFields: "Use arrays for frontend, addons, examples, aiDocs, rustLibraries, pythonAi, javaLibraries, and javaTestingLibraries. Use [] for \"none\" on multi-select fields.",
49
51
  backend: "String. \"self\" means fullstack mode (Next.js/TanStack Start/Nuxt/Astro API routes). \"none\" for frontend-only.",
50
52
  runtime: "\"bun\" or \"node\". Must be \"none\" when backend is \"self\" or \"convex\".",
51
53
  addons: "ARRAY of strings. Monorepo tools, code quality, desktop (tauri), browser extensions (wxt), etc."
52
54
  },
53
55
  ambiguityRules: [
54
56
  "If the user request leaves major stack choices unspecified, ASK the user before proceeding. Do not guess.",
55
- "Do not infer addons, examples, or optional features the user did not mention. Default to \"none\".",
57
+ "Do not infer addons, examples, or optional features the user did not mention. Default strings to \"none\" and multi-select arrays to [].",
56
58
  "When the user says 'fullstack Next.js', use backend='self', frontend=['next'], runtime='none'.",
57
59
  "When the user says 'React + Hono', use frontend=['tanstack-router'] (or ask which React framework), backend='hono'."
58
60
  ],
@@ -99,6 +101,7 @@ const SCHEMA_MAP = {
99
101
  analytics: AnalyticsSchema,
100
102
  cms: CMSSchema,
101
103
  caching: CachingSchema,
104
+ i18n: I18nSchema,
102
105
  search: SearchSchema,
103
106
  fileStorage: FileStorageSchema,
104
107
  addons: AddonsSchema,
@@ -115,17 +118,29 @@ const SCHEMA_MAP = {
115
118
  rustCli: RustCliSchema,
116
119
  rustLibraries: RustLibrariesSchema,
117
120
  rustLogging: RustLoggingSchema,
121
+ rustErrorHandling: RustErrorHandlingSchema,
122
+ rustCaching: RustCachingSchema,
123
+ rustAuth: RustAuthSchema,
118
124
  pythonWebFramework: PythonWebFrameworkSchema,
119
125
  pythonOrm: PythonOrmSchema,
120
126
  pythonValidation: PythonValidationSchema,
121
127
  pythonAi: PythonAiSchema,
128
+ pythonAuth: PythonAuthSchema,
122
129
  pythonTaskQueue: PythonTaskQueueSchema,
130
+ pythonGraphql: PythonGraphqlSchema,
123
131
  pythonQuality: PythonQualitySchema,
124
132
  goWebFramework: GoWebFrameworkSchema,
125
133
  goOrm: GoOrmSchema,
126
134
  goApi: GoApiSchema,
127
135
  goCli: GoCliSchema,
128
- goLogging: GoLoggingSchema
136
+ goLogging: GoLoggingSchema,
137
+ goAuth: GoAuthSchema,
138
+ javaWebFramework: JavaWebFrameworkSchema,
139
+ javaBuildTool: JavaBuildToolSchema,
140
+ javaOrm: JavaOrmSchema,
141
+ javaAuth: JavaAuthSchema,
142
+ javaLibraries: JavaLibrariesSchema,
143
+ javaTestingLibraries: JavaTestingLibrariesSchema
129
144
  };
130
145
  const ECOSYSTEM_CATEGORIES = {
131
146
  typescript: [
@@ -156,6 +171,7 @@ const ECOSYSTEM_CATEGORIES = {
156
171
  "analytics",
157
172
  "cms",
158
173
  "caching",
174
+ "i18n",
159
175
  "search",
160
176
  "fileStorage",
161
177
  "astroIntegration"
@@ -167,14 +183,19 @@ const ECOSYSTEM_CATEGORIES = {
167
183
  "rustApi",
168
184
  "rustCli",
169
185
  "rustLibraries",
170
- "rustLogging"
186
+ "rustLogging",
187
+ "rustErrorHandling",
188
+ "rustCaching",
189
+ "rustAuth"
171
190
  ],
172
191
  python: [
173
192
  "pythonWebFramework",
174
193
  "pythonOrm",
175
194
  "pythonValidation",
176
195
  "pythonAi",
196
+ "pythonAuth",
177
197
  "pythonTaskQueue",
198
+ "pythonGraphql",
178
199
  "pythonQuality"
179
200
  ],
180
201
  go: [
@@ -182,7 +203,16 @@ const ECOSYSTEM_CATEGORIES = {
182
203
  "goOrm",
183
204
  "goApi",
184
205
  "goCli",
185
- "goLogging"
206
+ "goLogging",
207
+ "goAuth"
208
+ ],
209
+ java: [
210
+ "javaWebFramework",
211
+ "javaBuildTool",
212
+ "javaOrm",
213
+ "javaAuth",
214
+ "javaLibraries",
215
+ "javaTestingLibraries"
186
216
  ],
187
217
  shared: [
188
218
  "ecosystem",
@@ -215,11 +245,12 @@ function getSchemaOptions(category, ecosystem) {
215
245
  }
216
246
  return result;
217
247
  }
218
- function getInstallCommand(ecosystem, projectName, packageManager) {
248
+ function getInstallCommand(ecosystem, projectName, packageManager, javaBuildTool) {
219
249
  switch (ecosystem) {
220
250
  case "rust": return `cd ${projectName} && cargo build`;
221
251
  case "python": return `cd ${projectName} && uv sync`;
222
252
  case "go": return `cd ${projectName} && go mod tidy`;
253
+ case "java": return javaBuildTool === "gradle" ? `cd ${projectName} && ./gradlew test && ./gradlew bootRun` : `cd ${projectName} && ./mvnw test && ./mvnw spring-boot:run`;
223
254
  default: return `cd ${projectName} && ${packageManager ?? "bun"} install`;
224
255
  }
225
256
  }
@@ -285,6 +316,7 @@ function buildProjectConfig(input, overrides) {
285
316
  analytics: "none",
286
317
  cms: input.cms ?? "none",
287
318
  caching: input.caching ?? "none",
319
+ i18n: input.i18n ?? "none",
288
320
  search: input.search ?? "none",
289
321
  fileStorage: input.fileStorage ?? "none",
290
322
  addons: input.addons ?? [],
@@ -305,17 +337,29 @@ function buildProjectConfig(input, overrides) {
305
337
  rustCli: input.rustCli ?? "none",
306
338
  rustLibraries: input.rustLibraries ?? [],
307
339
  rustLogging: input.rustLogging ?? "none",
340
+ rustErrorHandling: input.rustErrorHandling ?? "none",
341
+ rustCaching: input.rustCaching ?? "none",
342
+ rustAuth: input.rustAuth ?? "none",
308
343
  pythonWebFramework: input.pythonWebFramework ?? "none",
309
344
  pythonOrm: input.pythonOrm ?? "none",
310
345
  pythonValidation: input.pythonValidation ?? "none",
311
346
  pythonAi: input.pythonAi ?? [],
347
+ pythonAuth: input.pythonAuth ?? "none",
312
348
  pythonTaskQueue: input.pythonTaskQueue ?? "none",
349
+ pythonGraphql: input.pythonGraphql ?? "none",
313
350
  pythonQuality: input.pythonQuality ?? "none",
314
351
  goWebFramework: input.goWebFramework ?? "none",
315
352
  goOrm: input.goOrm ?? "none",
316
353
  goApi: input.goApi ?? "none",
317
354
  goCli: input.goCli ?? "none",
318
- goLogging: input.goLogging ?? "none"
355
+ goLogging: input.goLogging ?? "none",
356
+ goAuth: input.goAuth ?? "none",
357
+ javaWebFramework: input.javaWebFramework ?? "spring-boot",
358
+ javaBuildTool: input.javaBuildTool ?? "maven",
359
+ javaOrm: input.javaOrm ?? "none",
360
+ javaAuth: input.javaAuth ?? "none",
361
+ javaLibraries: input.javaLibraries ?? [],
362
+ javaTestingLibraries: input.javaTestingLibraries ?? ["junit5"]
319
363
  };
320
364
  }
321
365
  function sanitizePath(input) {
@@ -367,9 +411,17 @@ function buildCompatibilityInput(input) {
367
411
  realtime: input.realtime ?? "none",
368
412
  jobQueue: input.jobQueue ?? "none",
369
413
  caching: input.caching ?? "none",
414
+ i18n: input.i18n ?? "none",
370
415
  animation: input.animation ?? "none",
371
416
  cssFramework: input.cssFramework ?? "tailwind",
372
417
  uiLibrary: input.uiLibrary ?? "none",
418
+ shadcnBase: input.shadcnBase ?? "radix",
419
+ shadcnStyle: input.shadcnStyle ?? "nova",
420
+ shadcnIconLibrary: input.shadcnIconLibrary ?? "lucide",
421
+ shadcnColorTheme: input.shadcnColorTheme ?? "neutral",
422
+ shadcnBaseColor: input.shadcnBaseColor ?? "neutral",
423
+ shadcnFont: input.shadcnFont ?? "inter",
424
+ shadcnRadius: input.shadcnRadius ?? "default",
373
425
  cms: input.cms ?? "none",
374
426
  search: input.search ?? "none",
375
427
  fileStorage: input.fileStorage ?? "none",
@@ -392,19 +444,31 @@ function buildCompatibilityInput(input) {
392
444
  rustOrm: input.rustOrm ?? "none",
393
445
  rustApi: input.rustApi ?? "none",
394
446
  rustCli: input.rustCli ?? "none",
395
- rustLibraries: (input.rustLibraries ?? []).join(",") || "none",
447
+ rustLibraries: input.rustLibraries ?? [],
396
448
  rustLogging: input.rustLogging ?? "none",
449
+ rustErrorHandling: input.rustErrorHandling ?? "none",
450
+ rustCaching: input.rustCaching ?? "none",
451
+ rustAuth: input.rustAuth ?? "none",
397
452
  pythonWebFramework: input.pythonWebFramework ?? "none",
398
453
  pythonOrm: input.pythonOrm ?? "none",
399
454
  pythonValidation: input.pythonValidation ?? "none",
400
- pythonAi: (input.pythonAi ?? []).join(",") || "none",
455
+ pythonAi: input.pythonAi ?? [],
456
+ pythonAuth: input.pythonAuth ?? "none",
401
457
  pythonTaskQueue: input.pythonTaskQueue ?? "none",
458
+ pythonGraphql: input.pythonGraphql ?? "none",
402
459
  pythonQuality: input.pythonQuality ?? "none",
403
460
  goWebFramework: input.goWebFramework ?? "none",
404
461
  goOrm: input.goOrm ?? "none",
405
462
  goApi: input.goApi ?? "none",
406
463
  goCli: input.goCli ?? "none",
407
- goLogging: input.goLogging ?? "none"
464
+ goLogging: input.goLogging ?? "none",
465
+ goAuth: input.goAuth ?? "none",
466
+ javaWebFramework: input.javaWebFramework ?? "spring-boot",
467
+ javaBuildTool: input.javaBuildTool ?? "maven",
468
+ javaOrm: input.javaOrm ?? "none",
469
+ javaAuth: input.javaAuth ?? "none",
470
+ javaLibraries: input.javaLibraries ?? [],
471
+ javaTestingLibraries: input.javaTestingLibraries ?? ["junit5"]
408
472
  };
409
473
  }
410
474
  function summarizeTree(tree) {
@@ -456,7 +520,7 @@ const COMPATIBILITY_RULES_MD = `# Better-Fullstack Compatibility Rules
456
520
  - Polar requires better-auth and a web frontend.
457
521
 
458
522
  ## Ecosystem Isolation
459
- - Rust, Python, Go ecosystems are independent — TypeScript fields are ignored.
523
+ - Rust, Python, Go, and Java ecosystems are independent — TypeScript fields are ignored.
460
524
  - Each ecosystem generates a standalone project with its own build system.
461
525
  `;
462
526
  const GETTING_STARTED_MD = `# Getting Started with Better-Fullstack MCP
@@ -496,6 +560,14 @@ const GETTING_STARTED_MD = `# Getting Started with Better-Fullstack MCP
496
560
  - goOrm: "gorm"
497
561
  2. Tell the user to run: cd my-go-app && go mod tidy && go run cmd/server/main.go
498
562
 
563
+ ## Quick Start — Java Project
564
+ 1. Call bfs_create_project with:
565
+ - projectName: "my-java-app"
566
+ - ecosystem: "java"
567
+ - javaWebFramework: "spring-boot"
568
+ - javaBuildTool: "maven"
569
+ 2. Tell the user to run: cd my-java-app && ./mvnw test && ./mvnw spring-boot:run
570
+
499
571
  ## Adding Features to Existing Projects
500
572
  1. Call bfs_add_feature with projectDir pointing to the project root.
501
573
  2. Provide addons array with features to add (e.g., ["biome", "turborepo"]).
@@ -537,7 +609,13 @@ async function startMcpServer() {
537
609
  payments: z.string().optional().describe("Payments provider"),
538
610
  uiLibrary: z.string().optional().describe("UI component library"),
539
611
  cssFramework: z.string().optional().describe("CSS framework"),
540
- addons: z.array(z.string()).optional().describe("Addon list")
612
+ addons: z.array(z.string()).optional().describe("Addon list"),
613
+ javaWebFramework: JavaWebFrameworkSchema.optional().describe("Java web framework"),
614
+ javaBuildTool: JavaBuildToolSchema.optional().describe("Java build tool"),
615
+ javaOrm: JavaOrmSchema.optional().describe("Java ORM"),
616
+ javaAuth: JavaAuthSchema.optional().describe("Java authentication library"),
617
+ javaLibraries: z.array(JavaLibrariesSchema).optional().describe("Java application libraries"),
618
+ javaTestingLibraries: z.array(JavaTestingLibrariesSchema).optional().describe("Java testing libraries")
541
619
  }, async (input) => {
542
620
  try {
543
621
  const filtered = filterCompatibilityResult(analyzeStackCompatibility(buildCompatibilityInput(input)), input.ecosystem);
@@ -584,6 +662,7 @@ async function startMcpServer() {
584
662
  observability: ObservabilitySchema.optional().describe("Observability"),
585
663
  search: SearchSchema.optional().describe("Search engine"),
586
664
  caching: CachingSchema.optional().describe("Caching solution"),
665
+ i18n: I18nSchema.optional().describe("Internationalization (i18n) library"),
587
666
  cms: CMSSchema.optional().describe("CMS"),
588
667
  fileStorage: FileStorageSchema.optional().describe("File storage"),
589
668
  fileUpload: FileUploadSchema.optional().describe("File upload"),
@@ -597,17 +676,28 @@ async function startMcpServer() {
597
676
  rustCli: RustCliSchema.optional().describe("Rust CLI framework"),
598
677
  rustLibraries: z.array(RustLibrariesSchema).optional().describe("Rust libraries"),
599
678
  rustLogging: RustLoggingSchema.optional().describe("Rust logging library"),
679
+ rustErrorHandling: RustErrorHandlingSchema.optional().describe("Rust error handling library"),
680
+ rustCaching: RustCachingSchema.optional().describe("Rust caching library"),
681
+ rustAuth: RustAuthSchema.optional().describe("Rust authentication library"),
600
682
  pythonWebFramework: PythonWebFrameworkSchema.optional().describe("Python web framework"),
601
683
  pythonOrm: PythonOrmSchema.optional().describe("Python ORM"),
602
684
  pythonValidation: PythonValidationSchema.optional().describe("Python validation"),
603
685
  pythonAi: z.array(PythonAiSchema).optional().describe("Python AI libraries"),
686
+ pythonAuth: PythonAuthSchema.optional().describe("Python auth library"),
604
687
  pythonTaskQueue: PythonTaskQueueSchema.optional().describe("Python task queue"),
605
688
  pythonQuality: PythonQualitySchema.optional().describe("Python code quality"),
606
689
  goWebFramework: GoWebFrameworkSchema.optional().describe("Go web framework"),
607
690
  goOrm: GoOrmSchema.optional().describe("Go ORM"),
608
691
  goApi: GoApiSchema.optional().describe("Go API layer"),
609
692
  goCli: GoCliSchema.optional().describe("Go CLI framework"),
610
- goLogging: GoLoggingSchema.optional().describe("Go logging library")
693
+ goLogging: GoLoggingSchema.optional().describe("Go logging library"),
694
+ goAuth: GoAuthSchema.optional().describe("Go authentication library"),
695
+ javaWebFramework: JavaWebFrameworkSchema.optional().describe("Java web framework"),
696
+ javaBuildTool: JavaBuildToolSchema.optional().describe("Java build tool"),
697
+ javaOrm: JavaOrmSchema.optional().describe("Java ORM"),
698
+ javaAuth: JavaAuthSchema.optional().describe("Java authentication library"),
699
+ javaLibraries: z.array(JavaLibrariesSchema).optional().describe("Java application libraries"),
700
+ javaTestingLibraries: z.array(JavaTestingLibrariesSchema).optional().describe("Java testing libraries")
611
701
  };
612
702
  server.tool("bfs_plan_project", "Dry-run: generates a project in-memory and returns the file tree WITHOUT writing to disk. Use this to preview what would be created.", planCreateSchema, async (input) => {
613
703
  try {
@@ -676,10 +766,10 @@ async function startMcpServer() {
676
766
  await writeBtsConfig(config);
677
767
  let addonWarnings = [];
678
768
  if (config.addons.length > 0 && config.addons[0] !== "none") {
679
- const { setupAddons } = await import("./addons-setup-CWGwxN68.mjs");
769
+ const { setupAddons } = await import("./addons-setup-Cx9DU_sr.mjs");
680
770
  addonWarnings = await setupAddons(config);
681
771
  }
682
- const installCmd = getInstallCommand(input.ecosystem ?? "typescript", projectName, input.packageManager);
772
+ const installCmd = getInstallCommand(input.ecosystem ?? "typescript", projectName, input.packageManager, input.javaBuildTool);
683
773
  return { content: [{
684
774
  type: "text",
685
775
  text: JSON.stringify({
@@ -777,7 +867,8 @@ async function startMcpServer() {
777
867
  packageManager: input.packageManager
778
868
  });
779
869
  if (result?.success) {
780
- const installCmd = getInstallCommand((await readBtsConfig(safePath))?.ecosystem ?? "typescript", safePath.split("/").pop() ?? "project", input.packageManager);
870
+ const existingConfig = await readBtsConfig(safePath);
871
+ const installCmd = getInstallCommand(existingConfig?.ecosystem ?? "typescript", safePath.split("/").pop() ?? "project", input.packageManager, existingConfig?.javaBuildTool);
781
872
  return { content: [{
782
873
  type: "text",
783
874
  text: JSON.stringify({
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { EMBEDDED_TEMPLATES, GeneratorOptions, GeneratorResult, TEMPLATE_COUNT, VirtualDirectory, VirtualFile, VirtualFileSystem, VirtualFileTree, VirtualNode, generateVirtualProject } from "@better-fullstack/template-generator";
3
2
  import { API, Addons, Auth, Backend, Database, DatabaseSetup, Examples, Frontend, ORM, PackageManager, Payments, ProjectConfig, Runtime, ServerDeploy, WebDeploy } from "@better-fullstack/types";
3
+ import { EMBEDDED_TEMPLATES, GeneratorOptions, GeneratorResult, TEMPLATE_COUNT, VirtualDirectory, VirtualFile, VirtualFileSystem, VirtualFileTree, VirtualNode, generateVirtualProject } from "@better-fullstack/template-generator";
4
4
  export { type API, type Addons, type Auth, type Backend, type Database, type DatabaseSetup, EMBEDDED_TEMPLATES, type Examples, type Frontend, type GeneratorOptions, type GeneratorResult, type ORM, type PackageManager, type Payments, type ProjectConfig, type Runtime, type ServerDeploy, TEMPLATE_COUNT, type VirtualDirectory, type VirtualFile, VirtualFileSystem, type VirtualFileTree, type VirtualNode, type WebDeploy, generateVirtualProject };
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "create-better-fullstack",
3
- "version": "1.5.4",
4
- "description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from 270+ options — the CLI wires everything together.",
3
+ "version": "1.6.1",
4
+ "description": "Scaffold production-ready fullstack apps in seconds. Pick your stack from 340+ options — the CLI wires everything together.",
5
5
  "keywords": [
6
+ "algolia",
6
7
  "angular",
7
8
  "astro",
8
9
  "authentication",
@@ -16,27 +17,38 @@
16
17
  "create-app",
17
18
  "desktop",
18
19
  "developer-tools",
20
+ "diesel",
19
21
  "docker",
20
22
  "drizzle",
21
23
  "elysia",
24
+ "ent",
22
25
  "expo",
23
26
  "fastapi",
27
+ "fiber",
28
+ "flask",
24
29
  "fullstack",
25
30
  "go",
26
31
  "golang",
32
+ "graphql-yoga",
27
33
  "hono",
34
+ "i18next",
35
+ "litestar",
28
36
  "mobile",
37
+ "moka",
29
38
  "monorepo",
39
+ "next-intl",
30
40
  "nextjs",
31
41
  "nuxt",
32
42
  "payments",
33
43
  "pnpm",
44
+ "pothos",
34
45
  "prisma",
35
46
  "project-generator",
36
47
  "pwa",
37
48
  "python",
38
49
  "react",
39
50
  "react-native",
51
+ "rocket",
40
52
  "rust",
41
53
  "scaffold",
42
54
  "scaffolding",
@@ -44,6 +56,7 @@
44
56
  "solid",
45
57
  "starter",
46
58
  "starter-kit",
59
+ "strawberry",
47
60
  "svelte",
48
61
  "sveltekit",
49
62
  "tailwind",
@@ -54,10 +67,12 @@
54
67
  "turborepo",
55
68
  "type-safety",
56
69
  "typescript",
70
+ "vercel",
57
71
  "vite",
58
72
  "vue",
59
73
  "web-app",
60
- "yarn"
74
+ "yarn",
75
+ "zerolog"
61
76
  ],
62
77
  "homepage": "https://better-fullstack.dev/",
63
78
  "license": "MIT",
@@ -112,11 +127,11 @@
112
127
  "prepublishOnly": "npm run build"
113
128
  },
114
129
  "dependencies": {
115
- "@better-fullstack/template-generator": "^1.5.4",
116
- "@better-fullstack/types": "^1.5.4",
130
+ "@better-fullstack/template-generator": "^1.6.1",
131
+ "@better-fullstack/types": "^1.6.1",
117
132
  "@clack/core": "^0.5.0",
118
133
  "@clack/prompts": "^1.2.0",
119
- "@orpc/server": "^1.13.13",
134
+ "@orpc/server": "^1.13.14",
120
135
  "consola": "^3.4.2",
121
136
  "env-paths": "^4.0.0",
122
137
  "execa": "^9.6.1",
@@ -126,7 +141,7 @@
126
141
  "jsonc-parser": "^3.3.1",
127
142
  "oxfmt": "^0.19.0",
128
143
  "picocolors": "^1.1.1",
129
- "tinyglobby": "^0.2.15",
144
+ "tinyglobby": "^0.2.16",
130
145
  "@modelcontextprotocol/sdk": "^1.29.0",
131
146
  "trpc-cli": "^0.12.1",
132
147
  "ts-morph": "^27.0.2",
@@ -134,9 +149,9 @@
134
149
  "zod": "^4.3.6"
135
150
  },
136
151
  "devDependencies": {
137
- "@types/bun": "^1.3.11",
152
+ "@types/bun": "^1.3.12",
138
153
  "@types/fs-extra": "^11.0.4",
139
- "@types/node": "^25.5.2",
154
+ "@types/node": "^25.6.0",
140
155
  "publint": "^0.3.18",
141
156
  "tsdown": "^0.18.2",
142
157
  "typescript": "^5.9.3"
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./bts-config-BYD8mHt-.mjs";
3
- import { i as setupLefthook, n as setupBiome, r as setupHusky, t as setupAddons } from "./addons-setup-Bll5VFJd.mjs";
4
-
5
- export { setupAddons };