create-better-fullstack 1.0.0-canary.1d67537e → 1.0.5

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.
package/README.md CHANGED
@@ -1,110 +1,71 @@
1
1
  # Better Fullstack CLI
2
2
 
3
- A modern CLI tool for scaffolding end-to-end type-safe TypeScript projects with best practices and customizable configurations.
3
+ A CLI-first toolkit for building Full Stack applications. Skip the configuration. Ship the code.
4
4
 
5
5
  ## Quick Start
6
6
 
7
- Run without installing globally:
8
-
9
7
  ```bash
10
8
  # Using bun (recommended)
11
- bun create better-t-stack@latest
9
+ bun create better-fullstack@latest
12
10
 
13
11
  # Using pnpm
14
- pnpm create better-t-stack@latest
12
+ pnpm create better-fullstack@latest
15
13
 
16
14
  # Using npm
17
- npx create-better-t-stack@latest
15
+ npx create-better-fullstack@latest
18
16
  ```
19
17
 
20
- Follow the prompts to configure your project or use the `--yes` flag for defaults.
21
-
22
- ## Features
23
-
24
- | Category | Options |
25
- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
26
- | **TypeScript** | End-to-end type safety across all parts of your application |
27
- | **Frontend** | • React with TanStack Router<br>• React with React Router<br>• React with TanStack Start (SSR)<br>• Next.js<br>• SvelteKit<br>• Nuxt (Vue)<br>• SolidJS<br>• React Native with NativeWind (via Expo)<br>• React Native with Unistyles (via Expo)<br>• None |
28
- | **Backend** | • Hono<br>• Express<br>• Elysia<br>• Next.js API routes<br>• Convex<br>• Fastify<br>• None |
29
- | **API Layer** | • tRPC (type-safe APIs)<br>• oRPC (OpenAPI-compatible type-safe APIs)<br>• None |
30
- | **Runtime** | • Bun<br>• Node.js<br>• Cloudflare Workers<br>• None |
31
- | **Database** | • SQLite<br>• PostgreSQL<br>• MySQL<br>• MongoDB<br>• None |
32
- | **ORM** | • Drizzle (TypeScript-first)<br>• Prisma (feature-rich)<br>• Mongoose (for MongoDB)<br>• None |
33
- | **Database Setup** | • Turso (SQLite)<br>• Cloudflare D1 (SQLite)<br>• Neon (PostgreSQL)<br>• Supabase (PostgreSQL)<br>• Prisma Postgres<br>• MongoDB Atlas<br>• None (manual setup) |
34
- | **Authentication** | Better-Auth (email/password, with more options coming soon) |
35
- | **Styling** | Tailwind CSS with shadcn/ui components |
36
- | **Addons** | • PWA support<br>• Tauri (desktop applications)<br>• Starlight (documentation site)<br>• Biome (linting and formatting)<br>• Lefthook, Husky (Git hooks)<br>• Turborepo (optimized builds) |
37
- | **Examples** | • Todo app<br>• AI Chat interface (using Vercel AI SDK) |
38
- | **Developer Experience** | • Automatic Git initialization<br>• Package manager choice (npm, pnpm, bun)<br>• Automatic dependency installation |
39
-
40
18
  ## Usage
41
19
 
42
20
  ```bash
43
- Usage: create-better-t-stack [project-directory] [options]
21
+ Usage: create-better-fullstack [project-directory] [options]
44
22
 
45
23
  Options:
46
24
  -V, --version Output the version number
47
25
  -y, --yes Use default configuration
26
+ --yolo Random configuration (experimental)
48
27
  --database <type> Database type (none, sqlite, postgres, mysql, mongodb)
49
- --orm <type> ORM type (none, drizzle, prisma, mongoose)
50
- --auth Include authentication
51
- --no-auth Exclude authentication
52
- --frontend <types...> Frontend types (tanstack-router, react-router, tanstack-start, next, nuxt, svelte, solid, native-bare, native-uniwind, native-unistyles, none)
53
- --addons <types...> Additional addons (pwa, tauri, starlight, biome, lefthook, husky, turborepo, fumadocs, ultracite, oxlint, none)
28
+ --orm <type> ORM type (drizzle, prisma, mongoose, typeorm, kysely, mikroorm, sequelize, none)
29
+ --auth <type> Authentication (better-auth, clerk, nextauth, none)
30
+ --payments <type> Payments (polar, stripe, lemon-squeezy, paddle, dodo, none)
31
+ --frontend <types...> Frontend types
32
+ --backend <framework> Backend framework
33
+ --runtime <runtime> Runtime (bun, node, workers, none)
34
+ --api <type> API type (trpc, orpc, ts-rest, garph, none)
35
+ --addons <types...> Additional addons
54
36
  --examples <types...> Examples to include (todo, ai, none)
55
- --git Initialize git repository
56
- --no-git Skip git initialization
37
+ --git / --no-git Initialize git repository
57
38
  --package-manager <pm> Package manager (npm, pnpm, bun)
58
- --install Install dependencies
59
- --no-install Skip installing dependencies
60
- --db-setup <setup> Database setup (turso, d1, neon, supabase, prisma-postgres, mongodb-atlas, docker, none)
61
- --web-deploy <setup> Web deployment (workers, alchemy, none)
62
- --server-deploy <setup> Server deployment (workers, alchemy, none)
63
- --backend <framework> Backend framework (hono, express, elysia, next, convex, fastify, none)
64
- --runtime <runtime> Runtime (bun, node, workers, none)
65
- --api <type> API type (trpc, orpc, none)
39
+ --install / --no-install Install dependencies
40
+ --db-setup <setup> Database setup
66
41
  -h, --help Display help
67
42
  ```
68
43
 
69
44
  ## Examples
70
45
 
71
- Create a project with default configuration:
72
-
73
- ```bash
74
- npx create-better-t-stack --yes
75
- ```
76
-
77
- Create a project with specific options:
78
-
79
46
  ```bash
80
- npx create-better-t-stack --database postgres --orm drizzle --auth --addons pwa biome
81
- ```
47
+ # Default configuration
48
+ npx create-better-fullstack --yes
82
49
 
83
- Create a project with Elysia backend and Node.js runtime:
50
+ # With specific options
51
+ npx create-better-fullstack --database postgres --orm drizzle --auth better-auth --addons pwa biome
84
52
 
85
- ```bash
86
- npx create-better-t-stack --backend elysia --runtime node
87
- ```
53
+ # Elysia backend with Node.js
54
+ npx create-better-fullstack --backend elysia --runtime node
88
55
 
89
- Create a project with multiple frontend options (one web + one native):
90
-
91
- ```bash
92
- npx create-better-t-stack --frontend tanstack-router native-bare
56
+ # Multiple frontends (web + native)
57
+ npx create-better-fullstack --frontend tanstack-router native-bare
93
58
  ```
94
59
 
95
60
  ## Project Structure
96
61
 
97
- The created project follows a clean monorepo structure:
98
-
99
62
  ```
100
- my-better-t-app/
63
+ my-app/
101
64
  ├── apps/
102
65
  │ ├── web/ # Frontend application
103
66
  │ ├── server/ # Backend API
104
67
  │ ├── native/ # (optional) Mobile application
105
68
  │ └── docs/ # (optional) Documentation site
106
69
  ├── packages/ # Shared packages
107
- └── README.md # Auto-generated project documentation
70
+ └── README.md
108
71
  ```
109
-
110
- After project creation, you'll receive detailed instructions for next steps and additional setup requirements.
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { o as createBtsCli } from "./src-CwAb8MVO.mjs";
2
+ import { o as createBtsCli } from "./src-B1JV3DqF.mjs";
3
3
 
4
4
  //#region src/cli.ts
5
5
  createBtsCli().run();
package/dist/index.d.mts CHANGED
@@ -458,7 +458,7 @@ declare function createBtsCli(): trpc_cli0.TrpcCli;
458
458
  *
459
459
  * @example
460
460
  * ```typescript
461
- * import { create } from "create-better-t-stack";
461
+ * import { create } from "create-better-fullstack";
462
462
  *
463
463
  * const result = await create("my-app", {
464
464
  * frontend: ["tanstack-router"],
@@ -484,7 +484,7 @@ declare function builder(): Promise<void>;
484
484
  *
485
485
  * @example
486
486
  * ```typescript
487
- * import { createVirtual, EMBEDDED_TEMPLATES } from "create-better-t-stack";
487
+ * import { createVirtual, EMBEDDED_TEMPLATES } from "create-better-fullstack";
488
488
  *
489
489
  * const result = await createVirtual({
490
490
  * frontend: ["tanstack-router"],
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { a as create, c as docs, d as sponsors, i as builder, l as generateVirtualProject, n as TEMPLATE_COUNT, o as createBtsCli, r as VirtualFileSystem, s as createVirtual, t as EMBEDDED_TEMPLATES, u as router } from "./src-CwAb8MVO.mjs";
2
+ import { a as create, c as docs, d as sponsors, i as builder, l as generateVirtualProject, n as TEMPLATE_COUNT, o as createBtsCli, r as VirtualFileSystem, s as createVirtual, t as EMBEDDED_TEMPLATES, u as router } from "./src-B1JV3DqF.mjs";
3
3
 
4
4
  export { EMBEDDED_TEMPLATES, TEMPLATE_COUNT, VirtualFileSystem, builder, create, createBtsCli, createVirtual, docs, generateVirtualProject, router, sponsors };
@@ -2099,7 +2099,7 @@ const getLatestCLIVersion = () => {
2099
2099
  */
2100
2100
  function isTelemetryEnabled() {
2101
2101
  const BTS_TELEMETRY_DISABLED = process.env.BTS_TELEMETRY_DISABLED;
2102
- const BTS_TELEMETRY = "0";
2102
+ const BTS_TELEMETRY = "1";
2103
2103
  if (BTS_TELEMETRY_DISABLED !== void 0) return BTS_TELEMETRY_DISABLED !== "1";
2104
2104
  if (BTS_TELEMETRY !== void 0) return BTS_TELEMETRY === "1";
2105
2105
  return true;
@@ -2193,11 +2193,11 @@ function generateReproducibleCommand(config) {
2193
2193
  flags.push(config.git ? "--git" : "--no-git");
2194
2194
  flags.push(`--package-manager ${config.packageManager}`);
2195
2195
  flags.push(config.install ? "--install" : "--no-install");
2196
- let baseCommand = "npx create-better-t-stack@latest";
2196
+ let baseCommand = "npx create-better-fullstack@latest";
2197
2197
  const pkgManager = config.packageManager;
2198
- if (pkgManager === "bun") baseCommand = "bun create better-t-stack@latest";
2199
- else if (pkgManager === "pnpm") baseCommand = "pnpm create better-t-stack@latest";
2200
- else if (pkgManager === "npm") baseCommand = "npx create-better-t-stack@latest";
2198
+ if (pkgManager === "bun") baseCommand = "bun create better-fullstack@latest";
2199
+ else if (pkgManager === "pnpm") baseCommand = "pnpm create better-fullstack@latest";
2200
+ else if (pkgManager === "npm") baseCommand = "npx create-better-fullstack@latest";
2201
2201
  const projectPathArg = config.relativePath ? ` ${config.relativePath}` : "";
2202
2202
  return `${baseCommand}${projectPathArg} ${flags.join(" ")}`;
2203
2203
  }
@@ -2295,12 +2295,12 @@ const TITLE_TEXT = `
2295
2295
  ██████╔╝███████╗ ██║ ██║ ███████╗██║ ██║
2296
2296
  ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝
2297
2297
 
2298
- ████████╗ ███████╗████████╗ █████╗ ██████╗██╗ ██╗
2299
- ╚══██╔══╝ ██╔════╝╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝
2300
- ██║ ███████╗ ██║ ███████║██║ █████╔╝
2301
- ██║ ╚════██║ ██║ ██╔══██║██║ ██╔═██╗
2302
- ██║ ███████║ ██║ ██║ ██║╚██████╗██║ ██╗
2303
- ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
2298
+ ███████╗██╗ ██╗██╗ ██╗ ███████╗████████╗ █████╗ ██████╗██╗ ██╗
2299
+ ██╔════╝██║ ██║██║ ██║ ██╔════╝╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝
2300
+ █████╗ ██║ ██║██║ ██║ ███████╗ ██║ ███████║██║ █████╔╝
2301
+ ██╔══╝ ██║ ██║██║ ██║ ╚════██║ ██║ ██╔══██║██║ ██╔═██╗
2302
+ ██║ ╚██████╔╝███████╗███████╗███████║ ██║ ██║ ██║╚██████╗██║ ██╗
2303
+ ╚═╝ ╚═════╝ ╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
2304
2304
  `;
2305
2305
  const catppuccinTheme = {
2306
2306
  pink: "#F5C2E7",
@@ -2468,9 +2468,9 @@ function validateDatabaseOrmAuth(cfg, flags) {
2468
2468
  const has = (k) => flags ? flags.has(k) : true;
2469
2469
  if (has("orm") && has("database") && orm === "mongoose" && db !== "mongodb") exitWithError("Mongoose ORM requires MongoDB database. Please use '--database mongodb' or choose a different ORM.");
2470
2470
  if (has("orm") && has("database") && orm === "drizzle" && db === "mongodb") exitWithError("Drizzle ORM does not support MongoDB. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2471
- if (has("orm") && has("database") && orm === "typeorm" && db === "mongodb") exitWithError("TypeORM does not support MongoDB in Better-T-Stack. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2471
+ if (has("orm") && has("database") && orm === "typeorm" && db === "mongodb") exitWithError("TypeORM does not support MongoDB in Better Fullstack. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2472
2472
  if (has("orm") && has("database") && orm === "kysely" && db === "mongodb") exitWithError("Kysely does not support MongoDB. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2473
- if (has("orm") && has("database") && orm === "mikroorm" && db === "mongodb") exitWithError("MikroORM does not support MongoDB in Better-T-Stack. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2473
+ if (has("orm") && has("database") && orm === "mikroorm" && db === "mongodb") exitWithError("MikroORM does not support MongoDB in Better Fullstack. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2474
2474
  if (has("orm") && has("database") && orm === "sequelize" && db === "mongodb") exitWithError("Sequelize does not support MongoDB. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2475
2475
  if (has("database") && has("orm") && db === "mongodb" && orm && orm !== "mongoose" && orm !== "prisma" && orm !== "none") exitWithError("MongoDB database requires Mongoose or Prisma ORM. Please use '--orm mongoose' or '--orm prisma' or choose a different database.");
2476
2476
  if (has("database") && has("orm") && db && db !== "none" && orm === "none") exitWithError("Database selection requires an ORM. Please choose '--orm drizzle', '--orm prisma', '--orm typeorm', '--orm kysely', '--orm mikroorm', '--orm sequelize', or '--orm mongoose'.");
@@ -2781,7 +2781,7 @@ async function writeBtsConfig(projectConfig) {
2781
2781
  rustLibraries: projectConfig.rustLibraries
2782
2782
  };
2783
2783
  const baseContent = {
2784
- $schema: "https://r2.better-t-stack.dev/schema.json",
2784
+ $schema: "https://better-fullstack-web.vercel.app/schema.json",
2785
2785
  version: btsConfig.version,
2786
2786
  createdAt: btsConfig.createdAt,
2787
2787
  ecosystem: btsConfig.ecosystem,
@@ -2828,7 +2828,7 @@ async function writeBtsConfig(projectConfig) {
2828
2828
  eol: "\n"
2829
2829
  });
2830
2830
  configContent = JSONC.applyEdits(configContent, formatResult);
2831
- const finalContent = `// Better-T-Stack configuration file
2831
+ const finalContent = `// Better Fullstack configuration file
2832
2832
  // safe to delete
2833
2833
 
2834
2834
  ${configContent}`;
@@ -5079,7 +5079,7 @@ async function openUrl(url) {
5079
5079
 
5080
5080
  //#endregion
5081
5081
  //#region src/utils/sponsors.ts
5082
- const SPONSORS_JSON_URL = "https://sponsors.better-t-stack.dev/sponsors.json";
5082
+ const SPONSORS_JSON_URL = "https://better-fullstack-web.vercel.app/sponsors.json";
5083
5083
  async function fetchSponsors(url = SPONSORS_JSON_URL) {
5084
5084
  const s = spinner();
5085
5085
  s.start("Fetching sponsors…");
@@ -5190,7 +5190,7 @@ const router = os.router({
5190
5190
  }
5191
5191
  }),
5192
5192
  docs: os.meta({ description: "Open Better Fullstack documentation" }).handler(async () => {
5193
- const DOCS_URL = "https://better-t-stack.dev/docs";
5193
+ const DOCS_URL = "https://better-fullstack-web.vercel.app/docs";
5194
5194
  try {
5195
5195
  await openUrl(DOCS_URL);
5196
5196
  log.success(pc.blue("Opened docs in your default browser."));
@@ -5199,7 +5199,7 @@ const router = os.router({
5199
5199
  }
5200
5200
  }),
5201
5201
  builder: os.meta({ description: "Open the web-based stack builder" }).handler(async () => {
5202
- const BUILDER_URL = "https://better-t-stack.dev/new";
5202
+ const BUILDER_URL = "https://better-fullstack-web.vercel.app/new";
5203
5203
  try {
5204
5204
  await openUrl(BUILDER_URL);
5205
5205
  log.success(pc.blue("Opened builder in your default browser."));
@@ -5212,7 +5212,7 @@ const caller = createRouterClient(router, { context: {} });
5212
5212
  function createBtsCli() {
5213
5213
  return createCli({
5214
5214
  router,
5215
- name: "create-better-t-stack",
5215
+ name: "create-better-fullstack",
5216
5216
  version: getLatestCLIVersion()
5217
5217
  });
5218
5218
  }
@@ -5222,7 +5222,7 @@ function createBtsCli() {
5222
5222
  *
5223
5223
  * @example
5224
5224
  * ```typescript
5225
- * import { create } from "create-better-t-stack";
5225
+ * import { create } from "create-better-fullstack";
5226
5226
  *
5227
5227
  * const result = await create("my-app", {
5228
5228
  * frontend: ["tanstack-router"],
@@ -5277,7 +5277,7 @@ async function builder() {
5277
5277
  *
5278
5278
  * @example
5279
5279
  * ```typescript
5280
- * import { createVirtual, EMBEDDED_TEMPLATES } from "create-better-t-stack";
5280
+ * import { createVirtual, EMBEDDED_TEMPLATES } from "create-better-fullstack";
5281
5281
  *
5282
5282
  * const result = await createVirtual({
5283
5283
  * frontend: ["tanstack-router"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-better-fullstack",
3
- "version": "1.0.0-canary.1d67537e",
3
+ "version": "1.0.5",
4
4
  "description": "A CLI-first toolkit for building Full Stack applications. Skip the configuration. Ship the code.",
5
5
  "keywords": [
6
6
  "better-auth",
@@ -28,7 +28,7 @@
28
28
  "type-safety",
29
29
  "typescript"
30
30
  ],
31
- "homepage": "https://github.com/Marve10s/Better-Fullstack",
31
+ "homepage": "https://better-fullstack-web.vercel.app/",
32
32
  "license": "MIT",
33
33
  "author": "Marve10s",
34
34
  "repository": {
@@ -72,8 +72,8 @@
72
72
  "prepublishOnly": "npm run build"
73
73
  },
74
74
  "dependencies": {
75
- "@better-fullstack/template-generator": "1.0.0-canary.1d67537e",
76
- "@better-fullstack/types": "1.0.0-canary.1d67537e",
75
+ "@better-fullstack/template-generator": "^1.0.5",
76
+ "@better-fullstack/types": "^1.0.5",
77
77
  "@clack/core": "^0.5.0",
78
78
  "@clack/prompts": "^1.0.0-alpha.8",
79
79
  "@orpc/server": "^1.13.0",