create-better-fullstack 1.7.1 → 1.8.0

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
@@ -32,7 +32,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
32
32
  ## Features
33
33
 
34
34
  - **425 options** — frontend, backend, database, auth, payments, AI, DevOps, and more
35
- - **5 ecosystems** — TypeScript, Rust, Python, Go, Java
35
+ - **7 ecosystems** — TypeScript, React Native, Rust, Python, Go, Java, Elixir
36
36
  - **Visual builder** — configure your stack in the browser
37
37
  - **Wired for you** — every picked integration is preconfigured and working out of the box
38
38
 
@@ -42,7 +42,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
42
42
  --yes # Accept all defaults
43
43
  --yolo # Scaffold a random stack — good for exploring
44
44
  --template <name> # Use a preset (t3, mern, pern, uniwind)
45
- --ecosystem <lang> # Start in typescript, rust, python, go, or java mode
45
+ --ecosystem <lang> # Start in typescript, react-native, rust, python, go, java, or elixir mode
46
46
  --version-channel # Dependency channel: stable, latest, beta
47
47
  --no-git # Skip git initialization
48
48
  --no-install # Skip dependency installation
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import "./bts-config-YcroedMK.mjs";
3
+ import { i as setupLefthook, n as setupBiome, r as setupHusky, t as setupAddons } from "./addons-setup-CUmA_nra.mjs";
4
+
5
+ export { setupAddons };
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { s as dependencyVersionMap, t as readBtsConfig } from "./bts-config-bOXo9tbL.mjs";
2
+ import { s as dependencyVersionMap, t as readBtsConfig } from "./bts-config-YcroedMK.mjs";
3
3
  import { autocompleteMultiselect, cancel, group, isCancel, log, multiselect, select, spinner } from "@clack/prompts";
4
4
  import pc from "picocolors";
5
5
  import fs from "fs-extra";
@@ -377,7 +377,7 @@ function uniqueValues$1(values) {
377
377
  return Array.from(new Set(values));
378
378
  }
379
379
  function hasReactBasedFrontend$1(frontend) {
380
- return frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("tanstack-start") || frontend.includes("next");
380
+ return frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("tanstack-start") || frontend.includes("next") || frontend.includes("vinext");
381
381
  }
382
382
  function hasNativeFrontend$1(frontend) {
383
383
  return frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
@@ -409,7 +409,7 @@ function getRecommendedMcpServers(config) {
409
409
  name: "shadcn",
410
410
  target: "npx -y shadcn@latest mcp"
411
411
  });
412
- if (config.frontend.includes("next")) servers.push({
412
+ if (config.frontend.includes("next") || config.frontend.includes("vinext")) servers.push({
413
413
  key: "next-devtools",
414
414
  label: "Next Devtools",
415
415
  name: "next-devtools",
@@ -1331,11 +1331,11 @@ async function setupWxt(config) {
1331
1331
  async function setupAddons(config) {
1332
1332
  const warnings = [];
1333
1333
  const { addons, frontend, projectDir } = config;
1334
- const hasReactWebFrontend = frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("next");
1334
+ const hasReactWebFrontend = frontend.includes("react-router") || frontend.includes("react-vite") || frontend.includes("tanstack-router") || frontend.includes("next") || frontend.includes("vinext");
1335
1335
  const hasNuxtFrontend = frontend.includes("nuxt");
1336
1336
  const hasSvelteFrontend = frontend.includes("svelte");
1337
1337
  const hasSolidFrontend = frontend.includes("solid");
1338
- const hasNextFrontend = frontend.includes("next");
1338
+ const hasNextFrontend = frontend.includes("next") || frontend.includes("vinext");
1339
1339
  if (addons.includes("tauri") && (hasReactWebFrontend || hasNuxtFrontend || hasSvelteFrontend || hasSolidFrontend || hasNextFrontend)) await /* @__PURE__ */ setupTauri(config);
1340
1340
  const hasUltracite = addons.includes("ultracite");
1341
1341
  const hasBiome = addons.includes("biome");
@@ -47,6 +47,7 @@ const DEFAULT_UI_LIBRARY_BY_FRONTEND = {
47
47
  "react-vite": "shadcn-ui",
48
48
  "tanstack-start": "shadcn-ui",
49
49
  next: "shadcn-ui",
50
+ vinext: "shadcn-ui",
50
51
  nuxt: "daisyui",
51
52
  svelte: "daisyui",
52
53
  solid: "daisyui",
@@ -109,6 +110,13 @@ async function writeBtsConfig(projectConfig) {
109
110
  observability: projectConfig.observability,
110
111
  featureFlags: projectConfig.featureFlags,
111
112
  analytics: projectConfig.analytics,
113
+ mobileNavigation: projectConfig.mobileNavigation,
114
+ mobileUI: projectConfig.mobileUI,
115
+ mobileStorage: projectConfig.mobileStorage,
116
+ mobileTesting: projectConfig.mobileTesting,
117
+ mobilePush: projectConfig.mobilePush,
118
+ mobileOTA: projectConfig.mobileOTA,
119
+ mobileDeepLinking: projectConfig.mobileDeepLinking,
112
120
  cms: projectConfig.cms,
113
121
  caching: projectConfig.caching,
114
122
  i18n: projectConfig.i18n,
@@ -145,6 +153,21 @@ async function writeBtsConfig(projectConfig) {
145
153
  javaAuth: projectConfig.javaAuth,
146
154
  javaLibraries: projectConfig.javaLibraries,
147
155
  javaTestingLibraries: projectConfig.javaTestingLibraries,
156
+ elixirWebFramework: projectConfig.elixirWebFramework,
157
+ elixirOrm: projectConfig.elixirOrm,
158
+ elixirAuth: projectConfig.elixirAuth,
159
+ elixirApi: projectConfig.elixirApi,
160
+ elixirRealtime: projectConfig.elixirRealtime,
161
+ elixirJobs: projectConfig.elixirJobs,
162
+ elixirValidation: projectConfig.elixirValidation,
163
+ elixirHttp: projectConfig.elixirHttp,
164
+ elixirJson: projectConfig.elixirJson,
165
+ elixirEmail: projectConfig.elixirEmail,
166
+ elixirCaching: projectConfig.elixirCaching,
167
+ elixirObservability: projectConfig.elixirObservability,
168
+ elixirTesting: projectConfig.elixirTesting,
169
+ elixirQuality: projectConfig.elixirQuality,
170
+ elixirDeploy: projectConfig.elixirDeploy,
148
171
  aiDocs: projectConfig.aiDocs
149
172
  };
150
173
  const baseContent = {
@@ -184,6 +207,13 @@ async function writeBtsConfig(projectConfig) {
184
207
  observability: btsConfig.observability,
185
208
  featureFlags: btsConfig.featureFlags,
186
209
  analytics: btsConfig.analytics,
210
+ mobileNavigation: btsConfig.mobileNavigation,
211
+ mobileUI: btsConfig.mobileUI,
212
+ mobileStorage: btsConfig.mobileStorage,
213
+ mobileTesting: btsConfig.mobileTesting,
214
+ mobilePush: btsConfig.mobilePush,
215
+ mobileOTA: btsConfig.mobileOTA,
216
+ mobileDeepLinking: btsConfig.mobileDeepLinking,
187
217
  cms: btsConfig.cms,
188
218
  caching: btsConfig.caching,
189
219
  i18n: btsConfig.i18n,
@@ -220,6 +250,21 @@ async function writeBtsConfig(projectConfig) {
220
250
  javaAuth: btsConfig.javaAuth,
221
251
  javaLibraries: btsConfig.javaLibraries,
222
252
  javaTestingLibraries: btsConfig.javaTestingLibraries,
253
+ elixirWebFramework: btsConfig.elixirWebFramework,
254
+ elixirOrm: btsConfig.elixirOrm,
255
+ elixirAuth: btsConfig.elixirAuth,
256
+ elixirApi: btsConfig.elixirApi,
257
+ elixirRealtime: btsConfig.elixirRealtime,
258
+ elixirJobs: btsConfig.elixirJobs,
259
+ elixirValidation: btsConfig.elixirValidation,
260
+ elixirHttp: btsConfig.elixirHttp,
261
+ elixirJson: btsConfig.elixirJson,
262
+ elixirEmail: btsConfig.elixirEmail,
263
+ elixirCaching: btsConfig.elixirCaching,
264
+ elixirObservability: btsConfig.elixirObservability,
265
+ elixirTesting: btsConfig.elixirTesting,
266
+ elixirQuality: btsConfig.elixirQuality,
267
+ elixirDeploy: btsConfig.elixirDeploy,
223
268
  aiDocs: btsConfig.aiDocs
224
269
  };
225
270
  let configContent = JSON.stringify(baseContent);
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  //#region src/cli.ts
3
- if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-BxEilSGM.mjs").then((m) => m.startMcpServer());
3
+ if (process.argv[2] === "mcp" && process.argv.length === 3) import("./mcp-DoPutOIG.mjs").then((m) => m.startMcpServer());
4
4
  else import("./index.mjs").then((m) => m.createBtsCli().run());
5
5
 
6
6
  //#endregion
package/dist/index.d.mts CHANGED
@@ -33,10 +33,12 @@ declare const router: {
33
33
  dryRun: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
34
34
  ecosystem: z.ZodOptional<z.ZodEnum<{
35
35
  typescript: "typescript";
36
+ "react-native": "react-native";
36
37
  rust: "rust";
37
38
  python: "python";
38
39
  go: "go";
39
40
  java: "java";
41
+ elixir: "elixir";
40
42
  }>>;
41
43
  database: z.ZodOptional<z.ZodEnum<{
42
44
  none: "none";
@@ -93,8 +95,8 @@ declare const router: {
93
95
  uppy: "uppy";
94
96
  }>>;
95
97
  effect: z.ZodOptional<z.ZodEnum<{
96
- none: "none";
97
98
  effect: "effect";
99
+ none: "none";
98
100
  "effect-full": "effect-full";
99
101
  }>>;
100
102
  stateManagement: z.ZodOptional<z.ZodEnum<{
@@ -226,6 +228,40 @@ declare const router: {
226
228
  s3: "s3";
227
229
  r2: "r2";
228
230
  }>>;
231
+ mobileNavigation: z.ZodOptional<z.ZodEnum<{
232
+ none: "none";
233
+ "expo-router": "expo-router";
234
+ "react-navigation": "react-navigation";
235
+ }>>;
236
+ mobileUI: z.ZodOptional<z.ZodEnum<{
237
+ none: "none";
238
+ uniwind: "uniwind";
239
+ tamagui: "tamagui";
240
+ "gluestack-ui": "gluestack-ui";
241
+ unistyles: "unistyles";
242
+ }>>;
243
+ mobileStorage: z.ZodOptional<z.ZodEnum<{
244
+ none: "none";
245
+ mmkv: "mmkv";
246
+ }>>;
247
+ mobileTesting: z.ZodOptional<z.ZodEnum<{
248
+ none: "none";
249
+ maestro: "maestro";
250
+ "react-native-testing-library": "react-native-testing-library";
251
+ "maestro-react-native-testing-library": "maestro-react-native-testing-library";
252
+ }>>;
253
+ mobilePush: z.ZodOptional<z.ZodEnum<{
254
+ none: "none";
255
+ "expo-notifications": "expo-notifications";
256
+ }>>;
257
+ mobileOTA: z.ZodOptional<z.ZodEnum<{
258
+ none: "none";
259
+ "expo-updates": "expo-updates";
260
+ }>>;
261
+ mobileDeepLinking: z.ZodOptional<z.ZodEnum<{
262
+ none: "none";
263
+ "expo-linking": "expo-linking";
264
+ }>>;
229
265
  frontend: z.ZodOptional<z.ZodArray<z.ZodEnum<{
230
266
  none: "none";
231
267
  "tanstack-router": "tanstack-router";
@@ -233,6 +269,7 @@ declare const router: {
233
269
  "react-vite": "react-vite";
234
270
  "tanstack-start": "tanstack-start";
235
271
  next: "next";
272
+ vinext: "vinext";
236
273
  nuxt: "nuxt";
237
274
  "native-bare": "native-bare";
238
275
  "native-uniwind": "native-uniwind";
@@ -280,8 +317,8 @@ declare const router: {
280
317
  "docker-compose": "docker-compose";
281
318
  }>>>;
282
319
  examples: z.ZodOptional<z.ZodArray<z.ZodEnum<{
283
- none: "none";
284
320
  ai: "ai";
321
+ none: "none";
285
322
  "chat-sdk": "chat-sdk";
286
323
  "tanstack-showcase": "tanstack-showcase";
287
324
  }>>>;
@@ -346,6 +383,7 @@ declare const router: {
346
383
  "postcss-only": "postcss-only";
347
384
  }>>;
348
385
  uiLibrary: z.ZodOptional<z.ZodEnum<{
386
+ mui: "mui";
349
387
  none: "none";
350
388
  "shadcn-ui": "shadcn-ui";
351
389
  daisyui: "daisyui";
@@ -355,7 +393,6 @@ declare const router: {
355
393
  "chakra-ui": "chakra-ui";
356
394
  nextui: "nextui";
357
395
  mantine: "mantine";
358
- mui: "mui";
359
396
  antd: "antd";
360
397
  "base-ui": "base-ui";
361
398
  "ark-ui": "ark-ui";
@@ -589,8 +626,8 @@ declare const router: {
589
626
  chi: "chi";
590
627
  }>>;
591
628
  goOrm: z.ZodOptional<z.ZodEnum<{
592
- none: "none";
593
629
  gorm: "gorm";
630
+ none: "none";
594
631
  sqlc: "sqlc";
595
632
  ent: "ent";
596
633
  }>>;
@@ -665,6 +702,88 @@ declare const router: {
665
702
  archunit: "archunit";
666
703
  jqwik: "jqwik";
667
704
  }>>>;
705
+ elixirWebFramework: z.ZodOptional<z.ZodEnum<{
706
+ none: "none";
707
+ phoenix: "phoenix";
708
+ "phoenix-live-view": "phoenix-live-view";
709
+ }>>;
710
+ elixirOrm: z.ZodOptional<z.ZodEnum<{
711
+ none: "none";
712
+ ecto: "ecto";
713
+ "ecto-sql": "ecto-sql";
714
+ }>>;
715
+ elixirAuth: z.ZodOptional<z.ZodEnum<{
716
+ none: "none";
717
+ "phx-gen-auth": "phx-gen-auth";
718
+ ueberauth: "ueberauth";
719
+ guardian: "guardian";
720
+ }>>;
721
+ elixirApi: z.ZodOptional<z.ZodEnum<{
722
+ none: "none";
723
+ rest: "rest";
724
+ absinthe: "absinthe";
725
+ }>>;
726
+ elixirRealtime: z.ZodOptional<z.ZodEnum<{
727
+ none: "none";
728
+ channels: "channels";
729
+ presence: "presence";
730
+ pubsub: "pubsub";
731
+ "live-view-streams": "live-view-streams";
732
+ }>>;
733
+ elixirJobs: z.ZodOptional<z.ZodEnum<{
734
+ none: "none";
735
+ oban: "oban";
736
+ quantum: "quantum";
737
+ }>>;
738
+ elixirValidation: z.ZodOptional<z.ZodEnum<{
739
+ none: "none";
740
+ "ecto-changesets": "ecto-changesets";
741
+ "nimble-options": "nimble-options";
742
+ }>>;
743
+ elixirHttp: z.ZodOptional<z.ZodEnum<{
744
+ none: "none";
745
+ req: "req";
746
+ finch: "finch";
747
+ }>>;
748
+ elixirJson: z.ZodOptional<z.ZodEnum<{
749
+ none: "none";
750
+ jason: "jason";
751
+ }>>;
752
+ elixirEmail: z.ZodOptional<z.ZodEnum<{
753
+ none: "none";
754
+ swoosh: "swoosh";
755
+ }>>;
756
+ elixirCaching: z.ZodOptional<z.ZodEnum<{
757
+ none: "none";
758
+ cachex: "cachex";
759
+ nebulex: "nebulex";
760
+ }>>;
761
+ elixirObservability: z.ZodOptional<z.ZodEnum<{
762
+ none: "none";
763
+ opentelemetry: "opentelemetry";
764
+ telemetry: "telemetry";
765
+ prom_ex: "prom_ex";
766
+ }>>;
767
+ elixirTesting: z.ZodOptional<z.ZodEnum<{
768
+ none: "none";
769
+ ex_unit: "ex_unit";
770
+ mox: "mox";
771
+ bypass: "bypass";
772
+ wallaby: "wallaby";
773
+ }>>;
774
+ elixirQuality: z.ZodOptional<z.ZodEnum<{
775
+ none: "none";
776
+ credo: "credo";
777
+ dialyxir: "dialyxir";
778
+ sobelow: "sobelow";
779
+ }>>;
780
+ elixirDeploy: z.ZodOptional<z.ZodEnum<{
781
+ none: "none";
782
+ docker: "docker";
783
+ fly: "fly";
784
+ gigalixir: "gigalixir";
785
+ "mix-release": "mix-release";
786
+ }>>;
668
787
  aiDocs: z.ZodOptional<z.ZodArray<z.ZodEnum<{
669
788
  none: "none";
670
789
  "claude-md": "claude-md";
@@ -677,12 +796,12 @@ declare const router: {
677
796
  projectName: string;
678
797
  projectDir: string;
679
798
  relativePath: string;
680
- ecosystem: "typescript" | "rust" | "python" | "go" | "java";
799
+ ecosystem: "typescript" | "react-native" | "rust" | "python" | "go" | "java" | "elixir";
681
800
  database: "none" | "sqlite" | "postgres" | "mysql" | "mongodb" | "edgedb" | "redis";
682
801
  orm: "none" | "drizzle" | "prisma" | "mongoose" | "typeorm" | "kysely" | "mikroorm" | "sequelize";
683
802
  backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
684
803
  runtime: "none" | "bun" | "node" | "workers";
685
- frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
804
+ frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
686
805
  addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "docker-compose")[];
687
806
  examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
688
807
  auth: "none" | "better-auth" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0";
@@ -702,7 +821,7 @@ declare const router: {
702
821
  testing: "none" | "vitest" | "playwright" | "vitest-playwright" | "jest" | "cypress";
703
822
  email: "none" | "react-email" | "resend" | "nodemailer" | "postmark" | "sendgrid" | "aws-ses" | "mailgun" | "plunk";
704
823
  cssFramework: "none" | "tailwind" | "scss" | "less" | "postcss-only";
705
- uiLibrary: "none" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "mui" | "antd" | "base-ui" | "ark-ui" | "react-aria";
824
+ uiLibrary: "none" | "mui" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "antd" | "base-ui" | "ark-ui" | "react-aria";
706
825
  validation: "none" | "zod" | "valibot" | "arktype" | "typebox" | "typia" | "runtypes" | "effect-schema";
707
826
  realtime: "none" | "socket-io" | "partykit" | "ably" | "pusher" | "liveblocks" | "yjs";
708
827
  jobQueue: "none" | "bullmq" | "trigger-dev" | "inngest" | "temporal";
@@ -717,6 +836,13 @@ declare const router: {
717
836
  i18n: "none" | "i18next" | "next-intl";
718
837
  search: "none" | "meilisearch" | "typesense" | "elasticsearch" | "algolia";
719
838
  fileStorage: "none" | "s3" | "r2";
839
+ mobileNavigation: "none" | "expo-router" | "react-navigation";
840
+ mobileUI: "none" | "uniwind" | "tamagui" | "gluestack-ui" | "unistyles";
841
+ mobileStorage: "none" | "mmkv";
842
+ mobileTesting: "none" | "maestro" | "react-native-testing-library" | "maestro-react-native-testing-library";
843
+ mobilePush: "none" | "expo-notifications";
844
+ mobileOTA: "none" | "expo-updates";
845
+ mobileDeepLinking: "none" | "expo-linking";
720
846
  rustWebFramework: "none" | "axum" | "actix-web" | "rocket";
721
847
  rustFrontend: "none" | "leptos" | "dioxus";
722
848
  rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
@@ -748,6 +874,21 @@ declare const router: {
748
874
  javaAuth: "none" | "spring-security";
749
875
  javaLibraries: ("none" | "spring-actuator" | "spring-validation" | "flyway" | "liquibase" | "springdoc-openapi" | "lombok" | "mapstruct" | "caffeine" | "resilience4j" | "spring-webflux" | "spring-batch" | "spring-kafka" | "spring-mail" | "spring-devtools" | "micrometer-prometheus" | "thymeleaf")[];
750
876
  javaTestingLibraries: ("none" | "junit5" | "mockito" | "testcontainers" | "assertj" | "rest-assured" | "wiremock" | "awaitility" | "archunit" | "jqwik")[];
877
+ elixirWebFramework: "none" | "phoenix" | "phoenix-live-view";
878
+ elixirOrm: "none" | "ecto" | "ecto-sql";
879
+ elixirAuth: "none" | "phx-gen-auth" | "ueberauth" | "guardian";
880
+ elixirApi: "none" | "rest" | "absinthe";
881
+ elixirRealtime: "none" | "channels" | "presence" | "pubsub" | "live-view-streams";
882
+ elixirJobs: "none" | "oban" | "quantum";
883
+ elixirValidation: "none" | "ecto-changesets" | "nimble-options";
884
+ elixirHttp: "none" | "req" | "finch";
885
+ elixirJson: "none" | "jason";
886
+ elixirEmail: "none" | "swoosh";
887
+ elixirCaching: "none" | "cachex" | "nebulex";
888
+ elixirObservability: "none" | "opentelemetry" | "telemetry" | "prom_ex";
889
+ elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
890
+ elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
891
+ elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
751
892
  aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
752
893
  astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
753
894
  shadcnBase?: "radix" | "base" | undefined;
@@ -774,12 +915,12 @@ declare const router: {
774
915
  projectName: string;
775
916
  projectDir: string;
776
917
  relativePath: string;
777
- ecosystem: "typescript" | "rust" | "python" | "go" | "java";
918
+ ecosystem: "typescript" | "react-native" | "rust" | "python" | "go" | "java" | "elixir";
778
919
  database: "none" | "sqlite" | "postgres" | "mysql" | "mongodb" | "edgedb" | "redis";
779
920
  orm: "none" | "drizzle" | "prisma" | "mongoose" | "typeorm" | "kysely" | "mikroorm" | "sequelize";
780
921
  backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
781
922
  runtime: "none" | "bun" | "node" | "workers";
782
- frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
923
+ frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
783
924
  addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "docker-compose")[];
784
925
  examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
785
926
  auth: "none" | "better-auth" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0";
@@ -799,7 +940,7 @@ declare const router: {
799
940
  testing: "none" | "vitest" | "playwright" | "vitest-playwright" | "jest" | "cypress";
800
941
  email: "none" | "react-email" | "resend" | "nodemailer" | "postmark" | "sendgrid" | "aws-ses" | "mailgun" | "plunk";
801
942
  cssFramework: "none" | "tailwind" | "scss" | "less" | "postcss-only";
802
- uiLibrary: "none" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "mui" | "antd" | "base-ui" | "ark-ui" | "react-aria";
943
+ uiLibrary: "none" | "mui" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "antd" | "base-ui" | "ark-ui" | "react-aria";
803
944
  validation: "none" | "zod" | "valibot" | "arktype" | "typebox" | "typia" | "runtypes" | "effect-schema";
804
945
  realtime: "none" | "socket-io" | "partykit" | "ably" | "pusher" | "liveblocks" | "yjs";
805
946
  jobQueue: "none" | "bullmq" | "trigger-dev" | "inngest" | "temporal";
@@ -814,6 +955,13 @@ declare const router: {
814
955
  i18n: "none" | "i18next" | "next-intl";
815
956
  search: "none" | "meilisearch" | "typesense" | "elasticsearch" | "algolia";
816
957
  fileStorage: "none" | "s3" | "r2";
958
+ mobileNavigation: "none" | "expo-router" | "react-navigation";
959
+ mobileUI: "none" | "uniwind" | "tamagui" | "gluestack-ui" | "unistyles";
960
+ mobileStorage: "none" | "mmkv";
961
+ mobileTesting: "none" | "maestro" | "react-native-testing-library" | "maestro-react-native-testing-library";
962
+ mobilePush: "none" | "expo-notifications";
963
+ mobileOTA: "none" | "expo-updates";
964
+ mobileDeepLinking: "none" | "expo-linking";
817
965
  rustWebFramework: "none" | "axum" | "actix-web" | "rocket";
818
966
  rustFrontend: "none" | "leptos" | "dioxus";
819
967
  rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
@@ -845,6 +993,21 @@ declare const router: {
845
993
  javaAuth: "none" | "spring-security";
846
994
  javaLibraries: ("none" | "spring-actuator" | "spring-validation" | "flyway" | "liquibase" | "springdoc-openapi" | "lombok" | "mapstruct" | "caffeine" | "resilience4j" | "spring-webflux" | "spring-batch" | "spring-kafka" | "spring-mail" | "spring-devtools" | "micrometer-prometheus" | "thymeleaf")[];
847
995
  javaTestingLibraries: ("none" | "junit5" | "mockito" | "testcontainers" | "assertj" | "rest-assured" | "wiremock" | "awaitility" | "archunit" | "jqwik")[];
996
+ elixirWebFramework: "none" | "phoenix" | "phoenix-live-view";
997
+ elixirOrm: "none" | "ecto" | "ecto-sql";
998
+ elixirAuth: "none" | "phx-gen-auth" | "ueberauth" | "guardian";
999
+ elixirApi: "none" | "rest" | "absinthe";
1000
+ elixirRealtime: "none" | "channels" | "presence" | "pubsub" | "live-view-streams";
1001
+ elixirJobs: "none" | "oban" | "quantum";
1002
+ elixirValidation: "none" | "ecto-changesets" | "nimble-options";
1003
+ elixirHttp: "none" | "req" | "finch";
1004
+ elixirJson: "none" | "jason";
1005
+ elixirEmail: "none" | "swoosh";
1006
+ elixirCaching: "none" | "cachex" | "nebulex";
1007
+ elixirObservability: "none" | "opentelemetry" | "telemetry" | "prom_ex";
1008
+ elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
1009
+ elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
1010
+ elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
848
1011
  aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
849
1012
  astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
850
1013
  shadcnBase?: "radix" | "base" | undefined;
@@ -884,12 +1047,12 @@ declare const router: {
884
1047
  projectName: string;
885
1048
  projectDir: string;
886
1049
  relativePath: string;
887
- ecosystem: "typescript" | "rust" | "python" | "go" | "java";
1050
+ ecosystem: "typescript" | "react-native" | "rust" | "python" | "go" | "java" | "elixir";
888
1051
  database: "none" | "sqlite" | "postgres" | "mysql" | "mongodb" | "edgedb" | "redis";
889
1052
  orm: "none" | "drizzle" | "prisma" | "mongoose" | "typeorm" | "kysely" | "mikroorm" | "sequelize";
890
1053
  backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
891
1054
  runtime: "none" | "bun" | "node" | "workers";
892
- frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
1055
+ frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
893
1056
  addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "docker-compose")[];
894
1057
  examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
895
1058
  auth: "none" | "better-auth" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0";
@@ -909,7 +1072,7 @@ declare const router: {
909
1072
  testing: "none" | "vitest" | "playwright" | "vitest-playwright" | "jest" | "cypress";
910
1073
  email: "none" | "react-email" | "resend" | "nodemailer" | "postmark" | "sendgrid" | "aws-ses" | "mailgun" | "plunk";
911
1074
  cssFramework: "none" | "tailwind" | "scss" | "less" | "postcss-only";
912
- uiLibrary: "none" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "mui" | "antd" | "base-ui" | "ark-ui" | "react-aria";
1075
+ uiLibrary: "none" | "mui" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "antd" | "base-ui" | "ark-ui" | "react-aria";
913
1076
  validation: "none" | "zod" | "valibot" | "arktype" | "typebox" | "typia" | "runtypes" | "effect-schema";
914
1077
  realtime: "none" | "socket-io" | "partykit" | "ably" | "pusher" | "liveblocks" | "yjs";
915
1078
  jobQueue: "none" | "bullmq" | "trigger-dev" | "inngest" | "temporal";
@@ -924,6 +1087,13 @@ declare const router: {
924
1087
  i18n: "none" | "i18next" | "next-intl";
925
1088
  search: "none" | "meilisearch" | "typesense" | "elasticsearch" | "algolia";
926
1089
  fileStorage: "none" | "s3" | "r2";
1090
+ mobileNavigation: "none" | "expo-router" | "react-navigation";
1091
+ mobileUI: "none" | "uniwind" | "tamagui" | "gluestack-ui" | "unistyles";
1092
+ mobileStorage: "none" | "mmkv";
1093
+ mobileTesting: "none" | "maestro" | "react-native-testing-library" | "maestro-react-native-testing-library";
1094
+ mobilePush: "none" | "expo-notifications";
1095
+ mobileOTA: "none" | "expo-updates";
1096
+ mobileDeepLinking: "none" | "expo-linking";
927
1097
  rustWebFramework: "none" | "axum" | "actix-web" | "rocket";
928
1098
  rustFrontend: "none" | "leptos" | "dioxus";
929
1099
  rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
@@ -955,6 +1125,21 @@ declare const router: {
955
1125
  javaAuth: "none" | "spring-security";
956
1126
  javaLibraries: ("none" | "spring-actuator" | "spring-validation" | "flyway" | "liquibase" | "springdoc-openapi" | "lombok" | "mapstruct" | "caffeine" | "resilience4j" | "spring-webflux" | "spring-batch" | "spring-kafka" | "spring-mail" | "spring-devtools" | "micrometer-prometheus" | "thymeleaf")[];
957
1127
  javaTestingLibraries: ("none" | "junit5" | "mockito" | "testcontainers" | "assertj" | "rest-assured" | "wiremock" | "awaitility" | "archunit" | "jqwik")[];
1128
+ elixirWebFramework: "none" | "phoenix" | "phoenix-live-view";
1129
+ elixirOrm: "none" | "ecto" | "ecto-sql";
1130
+ elixirAuth: "none" | "phx-gen-auth" | "ueberauth" | "guardian";
1131
+ elixirApi: "none" | "rest" | "absinthe";
1132
+ elixirRealtime: "none" | "channels" | "presence" | "pubsub" | "live-view-streams";
1133
+ elixirJobs: "none" | "oban" | "quantum";
1134
+ elixirValidation: "none" | "ecto-changesets" | "nimble-options";
1135
+ elixirHttp: "none" | "req" | "finch";
1136
+ elixirJson: "none" | "jason";
1137
+ elixirEmail: "none" | "swoosh";
1138
+ elixirCaching: "none" | "cachex" | "nebulex";
1139
+ elixirObservability: "none" | "opentelemetry" | "telemetry" | "prom_ex";
1140
+ elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
1141
+ elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
1142
+ elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
958
1143
  aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
959
1144
  astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
960
1145
  shadcnBase?: "radix" | "base" | undefined;
@@ -981,12 +1166,12 @@ declare const router: {
981
1166
  projectName: string;
982
1167
  projectDir: string;
983
1168
  relativePath: string;
984
- ecosystem: "typescript" | "rust" | "python" | "go" | "java";
1169
+ ecosystem: "typescript" | "react-native" | "rust" | "python" | "go" | "java" | "elixir";
985
1170
  database: "none" | "sqlite" | "postgres" | "mysql" | "mongodb" | "edgedb" | "redis";
986
1171
  orm: "none" | "drizzle" | "prisma" | "mongoose" | "typeorm" | "kysely" | "mikroorm" | "sequelize";
987
1172
  backend: "none" | "hono" | "express" | "fastify" | "elysia" | "fets" | "nestjs" | "adonisjs" | "nitro" | "encore" | "convex" | "self";
988
1173
  runtime: "none" | "bun" | "node" | "workers";
989
- frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
1174
+ frontend: ("none" | "tanstack-router" | "react-router" | "react-vite" | "tanstack-start" | "next" | "vinext" | "nuxt" | "native-bare" | "native-uniwind" | "native-unistyles" | "svelte" | "solid" | "solid-start" | "astro" | "qwik" | "angular" | "redwood" | "fresh")[];
990
1175
  addons: ("none" | "pwa" | "tauri" | "starlight" | "biome" | "lefthook" | "husky" | "ruler" | "mcp" | "skills" | "turborepo" | "fumadocs" | "ultracite" | "oxlint" | "opentui" | "wxt" | "msw" | "storybook" | "tanstack-query" | "tanstack-table" | "tanstack-virtual" | "tanstack-db" | "tanstack-pacer" | "docker-compose")[];
991
1176
  examples: ("ai" | "none" | "chat-sdk" | "tanstack-showcase")[];
992
1177
  auth: "none" | "better-auth" | "go-better-auth" | "clerk" | "nextauth" | "stack-auth" | "supabase-auth" | "auth0";
@@ -1006,7 +1191,7 @@ declare const router: {
1006
1191
  testing: "none" | "vitest" | "playwright" | "vitest-playwright" | "jest" | "cypress";
1007
1192
  email: "none" | "react-email" | "resend" | "nodemailer" | "postmark" | "sendgrid" | "aws-ses" | "mailgun" | "plunk";
1008
1193
  cssFramework: "none" | "tailwind" | "scss" | "less" | "postcss-only";
1009
- uiLibrary: "none" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "mui" | "antd" | "base-ui" | "ark-ui" | "react-aria";
1194
+ uiLibrary: "none" | "mui" | "shadcn-ui" | "daisyui" | "radix-ui" | "headless-ui" | "park-ui" | "chakra-ui" | "nextui" | "mantine" | "antd" | "base-ui" | "ark-ui" | "react-aria";
1010
1195
  validation: "none" | "zod" | "valibot" | "arktype" | "typebox" | "typia" | "runtypes" | "effect-schema";
1011
1196
  realtime: "none" | "socket-io" | "partykit" | "ably" | "pusher" | "liveblocks" | "yjs";
1012
1197
  jobQueue: "none" | "bullmq" | "trigger-dev" | "inngest" | "temporal";
@@ -1021,6 +1206,13 @@ declare const router: {
1021
1206
  i18n: "none" | "i18next" | "next-intl";
1022
1207
  search: "none" | "meilisearch" | "typesense" | "elasticsearch" | "algolia";
1023
1208
  fileStorage: "none" | "s3" | "r2";
1209
+ mobileNavigation: "none" | "expo-router" | "react-navigation";
1210
+ mobileUI: "none" | "uniwind" | "tamagui" | "gluestack-ui" | "unistyles";
1211
+ mobileStorage: "none" | "mmkv";
1212
+ mobileTesting: "none" | "maestro" | "react-native-testing-library" | "maestro-react-native-testing-library";
1213
+ mobilePush: "none" | "expo-notifications";
1214
+ mobileOTA: "none" | "expo-updates";
1215
+ mobileDeepLinking: "none" | "expo-linking";
1024
1216
  rustWebFramework: "none" | "axum" | "actix-web" | "rocket";
1025
1217
  rustFrontend: "none" | "leptos" | "dioxus";
1026
1218
  rustOrm: "none" | "sea-orm" | "sqlx" | "diesel";
@@ -1052,6 +1244,21 @@ declare const router: {
1052
1244
  javaAuth: "none" | "spring-security";
1053
1245
  javaLibraries: ("none" | "spring-actuator" | "spring-validation" | "flyway" | "liquibase" | "springdoc-openapi" | "lombok" | "mapstruct" | "caffeine" | "resilience4j" | "spring-webflux" | "spring-batch" | "spring-kafka" | "spring-mail" | "spring-devtools" | "micrometer-prometheus" | "thymeleaf")[];
1054
1246
  javaTestingLibraries: ("none" | "junit5" | "mockito" | "testcontainers" | "assertj" | "rest-assured" | "wiremock" | "awaitility" | "archunit" | "jqwik")[];
1247
+ elixirWebFramework: "none" | "phoenix" | "phoenix-live-view";
1248
+ elixirOrm: "none" | "ecto" | "ecto-sql";
1249
+ elixirAuth: "none" | "phx-gen-auth" | "ueberauth" | "guardian";
1250
+ elixirApi: "none" | "rest" | "absinthe";
1251
+ elixirRealtime: "none" | "channels" | "presence" | "pubsub" | "live-view-streams";
1252
+ elixirJobs: "none" | "oban" | "quantum";
1253
+ elixirValidation: "none" | "ecto-changesets" | "nimble-options";
1254
+ elixirHttp: "none" | "req" | "finch";
1255
+ elixirJson: "none" | "jason";
1256
+ elixirEmail: "none" | "swoosh";
1257
+ elixirCaching: "none" | "cachex" | "nebulex";
1258
+ elixirObservability: "none" | "opentelemetry" | "telemetry" | "prom_ex";
1259
+ elixirTesting: "none" | "ex_unit" | "mox" | "bypass" | "wallaby";
1260
+ elixirQuality: "none" | "credo" | "dialyxir" | "sobelow";
1261
+ elixirDeploy: "none" | "docker" | "fly" | "gigalixir" | "mix-release";
1055
1262
  aiDocs: ("none" | "claude-md" | "agents-md" | "cursorrules")[];
1056
1263
  astroIntegration?: "none" | "svelte" | "solid" | "react" | "vue" | undefined;
1057
1264
  shadcnBase?: "radix" | "base" | undefined;
@@ -1234,6 +1441,21 @@ type DatabaseSetup = import__better_fullstack_types.DatabaseSetup;
1234
1441
  type DirectoryConflict = import__better_fullstack_types.DirectoryConflict;
1235
1442
  type Ecosystem = import__better_fullstack_types.Ecosystem;
1236
1443
  type Effect = import__better_fullstack_types.Effect;
1444
+ type ElixirApi = import__better_fullstack_types.ElixirApi;
1445
+ type ElixirAuth = import__better_fullstack_types.ElixirAuth;
1446
+ type ElixirCaching = import__better_fullstack_types.ElixirCaching;
1447
+ type ElixirDeploy = import__better_fullstack_types.ElixirDeploy;
1448
+ type ElixirEmail = import__better_fullstack_types.ElixirEmail;
1449
+ type ElixirHttp = import__better_fullstack_types.ElixirHttp;
1450
+ type ElixirJobs = import__better_fullstack_types.ElixirJobs;
1451
+ type ElixirJson = import__better_fullstack_types.ElixirJson;
1452
+ type ElixirObservability = import__better_fullstack_types.ElixirObservability;
1453
+ type ElixirOrm = import__better_fullstack_types.ElixirOrm;
1454
+ type ElixirQuality = import__better_fullstack_types.ElixirQuality;
1455
+ type ElixirRealtime = import__better_fullstack_types.ElixirRealtime;
1456
+ type ElixirTesting = import__better_fullstack_types.ElixirTesting;
1457
+ type ElixirValidation = import__better_fullstack_types.ElixirValidation;
1458
+ type ElixirWebFramework = import__better_fullstack_types.ElixirWebFramework;
1237
1459
  type Examples = import__better_fullstack_types.Examples;
1238
1460
  type Frontend = import__better_fullstack_types.Frontend;
1239
1461
  type GoApi = import__better_fullstack_types.GoApi;
@@ -1272,4 +1494,4 @@ type ServerDeploy = import__better_fullstack_types.ServerDeploy;
1272
1494
  type Template = import__better_fullstack_types.Template;
1273
1495
  type UILibrary = import__better_fullstack_types.UILibrary;
1274
1496
  type WebDeploy = import__better_fullstack_types.WebDeploy;
1275
- export { type API, type AddInput, type AddResult, type Addons, type AiDocs, type Analytics, type Animation, type Auth, type Backend, type BetterTStackConfig, type CMS, type CSSFramework, type Caching, type CreateInput, type Database, type DatabaseSetup, type DirectoryConflict, EMBEDDED_TEMPLATES, type Ecosystem, type Effect, type Examples, type Frontend, type GeneratorOptions, type GeneratorResult, type GoApi, type GoAuth, type GoCli, type GoLogging, type GoOrm, type GoWebFramework, type InitResult, type JavaAuth, type JavaBuildTool, type JavaLibraries, type JavaOrm, type JavaTestingLibraries, type JavaWebFramework, type Logging, type ORM, type PackageManager, type Payments, type PythonAi, type PythonOrm, type PythonQuality, type PythonTaskQueue, type PythonValidation, type PythonWebFramework, type Realtime, type Runtime, type RustApi, type RustCli, type RustFrontend, type RustLibraries, type RustLogging, type RustOrm, type RustWebFramework, type ServerDeploy, TEMPLATE_COUNT, type Template, type UILibrary, type VirtualDirectory, type VirtualFile, VirtualFileSystem, type VirtualFileTree, type VirtualNode, type WebDeploy, add, builder, create, createBtsCli, createVirtual, docs, generateVirtualProject, history, router, sponsors };
1497
+ export { type API, type AddInput, type AddResult, type Addons, type AiDocs, type Analytics, type Animation, type Auth, type Backend, type BetterTStackConfig, type CMS, type CSSFramework, type Caching, type CreateInput, type Database, type DatabaseSetup, type DirectoryConflict, EMBEDDED_TEMPLATES, type Ecosystem, type Effect, type ElixirApi, type ElixirAuth, type ElixirCaching, type ElixirDeploy, type ElixirEmail, type ElixirHttp, type ElixirJobs, type ElixirJson, type ElixirObservability, type ElixirOrm, type ElixirQuality, type ElixirRealtime, type ElixirTesting, type ElixirValidation, type ElixirWebFramework, type Examples, type Frontend, type GeneratorOptions, type GeneratorResult, type GoApi, type GoAuth, type GoCli, type GoLogging, type GoOrm, type GoWebFramework, type InitResult, type JavaAuth, type JavaBuildTool, type JavaLibraries, type JavaOrm, type JavaTestingLibraries, type JavaWebFramework, type Logging, type ORM, type PackageManager, type Payments, type PythonAi, type PythonOrm, type PythonQuality, type PythonTaskQueue, type PythonValidation, type PythonWebFramework, type Realtime, type Runtime, type RustApi, type RustCli, type RustFrontend, type RustLibraries, type RustLogging, type RustOrm, type RustWebFramework, type ServerDeploy, TEMPLATE_COUNT, type Template, type UILibrary, type VirtualDirectory, type VirtualFile, VirtualFileSystem, type VirtualFileTree, type VirtualNode, type WebDeploy, add, builder, create, createBtsCli, createVirtual, docs, generateVirtualProject, history, router, sponsors };