DocsEcosystems
Open documentation actions
Ecosystems
Supported language ecosystems, what Better Fullstack scaffolds for each one, and the compatibility rules that apply.
One CLI covers eight solo ecosystems plus additional languages for composed projects. Each ecosystem ships its own templates, toolchain checks, and compatibility rules.
| Ecosystem | Best for | Tooling |
|---|---|---|
| TypeScript | Fullstack web, APIs, workers, desktop, and the largest integration matrix. | npm/pnpm/Yarn/Bun |
| React Native | Expo mobile apps with navigation, UI, storage, testing, push, OTA, and deep linking. | npm/pnpm/Yarn/Bun |
| Rust | Backend services, CLIs, GraphQL/gRPC, web frontends, typed libraries. | Cargo |
| Python | API and AI-oriented services with framework, ORM, validation, queue, and quality choices. | uv |
| Go | API services, gRPC, CLIs, ORMs, logging, and auth helpers. | Go modules |
| Java and Kotlin | Spring Boot, Ktor, Quarkus, Micronaut, or plain JVM projects with Maven/Gradle. | Maven/Gradle |
| Elixir | Phoenix and LiveView apps with Ecto, Absinthe, realtime, jobs, and deploy files. | Mix |
| .NET | ASP.NET Core services with EF Core or Dapper, Identity, Minimal APIs, SignalR, jobs, and tests. | .NET SDK 10 |
For product stacks that span languages, use Multi-Ecosystem mode, which models the project as stack parts such as frontend:typescript:next and backend:go:gin. That mode also unlocks Kotlin/Compose, SwiftUI, Flutter, Blazor, and standalone Rust web frontends; see Native and Additional Apps.
Default baseline
Accepting all defaults creates a TypeScript web project. The package manager follows the one used to launch the CLI:
{
"ecosystem": "typescript",
"frontend": ["tanstack-router"],
"backend": "hono",
"runtime": "bun",
"database": "sqlite",
"orm": "drizzle",
"auth": "better-auth",
"api": "trpc",
"cssFramework": "tailwind",
"uiLibrary": "shadcn-ui",
"testing": "vitest",
"stackParts": ["workspaceRunner:universal:turborepo"],
"aiDocs": ["claude-md"]
}Runtime and package manager are separate choices: a generated TypeScript project can install with npm while selecting Bun as its application runtime.
Some flags are global because they live in one project config, but not every flag applies to every ecosystem. The generated tables on CLI Create are the exact current inventory per ecosystem.
TypeScript
The broadest ecosystem: web apps, APIs, workers, desktop shells, browser extensions, docs sites, and service integrations. Needs Node.js 20+.
npm create better-fullstack@latest my-app -- \ --ecosystem typescript \ --frontend tanstack-router \ --backend hono \ --runtime node \ --database sqlite \ --orm drizzle \ --api orpc \ --auth better-auth \ --no-installtRPC is React-only, self backend pairs with runtime none, Workers support depends on the frontend/backend pair, and some providers add their own constraints (Polar requires Better Auth and a web frontend). Run a dry run or check the Stack Builder before scaffolding large combinations.
React Native
Dedicated mobile scaffolds built on Expo, kept separate from TypeScript web categories. Needs Node.js 20+ plus Expo tooling for simulator runs.
npm create better-fullstack@latest mobile-app -- \ --ecosystem react-native \ --frontend native-bare \ --mobile-navigation expo-router \ --mobile-ui tamagui \ --mobile-storage mmkv \ --mobile-push expo-notifications \ --mobile-ota expo-updates \ --no-installSelections generate Expo config, router or navigator entrypoints, UI provider setup for Tamagui/Gluestack/Uniwind/Unistyles, MMKV helpers, Jest and Maestro examples, push registration, and OTA helpers. Uniwind and Unistyles tie to their matching Expo variants, and deep linking turns on automatically when an auth flow needs redirect URIs.
Rust
Cargo-based templates for backend services, CLIs, GraphQL/gRPC, WebAssembly frontends, logging, caching, and auth helpers. Needs the Rust toolchain.
npm create better-fullstack@latest my-rust-api -- \ --ecosystem rust \ --rust-web-framework axum \ --rust-orm sqlx \ --rust-libraries serde validator \ --rust-logging tracing \ --rust-error-handling anyhow-thiserror \ --rust-realtime tokio-tungstenite \ --rust-message-queue lapin \ --rust-observability opentelemetry \ --no-installLeptos, Dioxus, Tonic, Clap, and Ratatui template files appear only when their options are selected. cargo build is the install and verification path. --rust-libraries is multi-select.
Python
uv-based templates for API frameworks, ORMs, validation, AI libraries, auth helpers, task queues, GraphQL, and quality tooling. Needs Python and uv.
npm create better-fullstack@latest my-python-api -- \ --ecosystem python \ --python-web-framework fastapi \ --python-orm sqlalchemy \ --python-validation pydantic \ --python-auth jwt \ --python-testing pytest hypothesis \ --python-quality ruff \ --no-install--python-ai is a separate multi-select category from TypeScript --ai. uv sync --extra dev installs when install is enabled, and empty conditional template files are skipped when unused.
Go
Go-module templates for HTTP services, gRPC, CLIs, logging, ORMs, and auth helpers. Needs the Go toolchain.
npm create better-fullstack@latest my-go-api -- \ --ecosystem go \ --go-web-framework gin \ --go-orm gorm \ --go-logging zap \ --go-auth jwt \ --go-testing testify \ --go-realtime gorilla-websocket \ --go-message-queue nats \ --go-caching redis \ --go-config viper \ --no-installGo splits auth across two fields. --go-auth casbin|jwt|none adds native helpers, while --auth go-better-auth selects GoBetterAuth through the global field. Hosted providers like Clerk and Auth0 are TypeScript-oriented and are not general Go support. Selected infrastructure generates standalone packages under internal/, gqlgen scaffolds schema files that need go generate ./graph, and goth registers OAuth providers from GOOGLE_CLIENT_ID style credentials.
Java and Kotlin
JVM projects with Spring Boot, Ktor, Quarkus, Micronaut, or plain templates. Choose language, framework, build tool, persistence, auth, libraries, and tests independently where compatibility permits. Needs Java 21.
npm create better-fullstack@latest my-spring-api -- \ --ecosystem java \ --java-language kotlin \ --java-web-framework spring-boot \ --java-build-tool gradle \ --java-orm spring-data-jpa \ --java-auth spring-security \ --java-api spring-graphql \ --java-libraries spring-actuator flyway \ --java-testing-libraries junit5 mockito testcontainers \ --no-installSpring Boot and Quarkus require Maven or Gradle. Ktor requires Kotlin and drops Spring-specific ORM, auth, and library choices. Flyway requires Spring Data JPA. Maven verifies with ./mvnw test, Gradle with ./gradlew test.
Elixir
Phoenix applications following Mix conventions, with LiveView, Ecto SQL, auth, APIs, realtime, jobs, testing, quality, and deploy files. Needs Elixir and Erlang/OTP compatible with Phoenix 1.7, plus PostgreSQL for ecto-sql, phx-gen-auth, or oban.
npm create better-fullstack@latest my-phoenix-app -- \ --ecosystem elixir \ --elixir-web-framework phoenix-live-view \ --elixir-orm ecto-sql \ --elixir-auth phx-gen-auth \ --elixir-api absinthe \ --elixir-jobs oban \ --elixir-deploy docker \ --no-installA few schema-level choices stay intentionally rejected until templates exist (ecto, ueberauth, guardian, nimble-options, nebulex, opentelemetry, prom_ex, mox, bypass, wallaby, fly, gigalixir). The CLI surfaces those as unsupported-tool messages instead of generating partial Phoenix code.
.NET
ASP.NET Core applications following standard dotnet conventions, with EF Core or Dapper, Identity, Minimal APIs or Hot Chocolate, SignalR, Hangfire or Quartz, Serilog pipelines, caching, xUnit tests, and Dockerfiles. Needs .NET SDK 10 or newer.
npm create better-fullstack@latest my-dotnet-app -- \ --ecosystem dotnet \ --dotnet-web-framework aspnet-minimal \ --dotnet-orm ef-core \ --dotnet-auth aspnet-identity \ --dotnet-api minimal-api \ --dotnet-testing xunit \ --dotnet-job-queue hangfire \ --dotnet-realtime signalr \ --database postgres \ --no-installef-core picks its provider from --database: Postgres uses Npgsql, anything else falls back to SQLite. aspnet-identity registers stores only when paired with ef-core. Testing and observability accept multiple values.
Multi-Ecosystem mode can also generate standalone Blazor frontends next to a backend in another language:
npm create better-fullstack@latest blazor-go -- \ --part frontend:dotnet:blazor-webassembly \ --part backend:go:gin \ --part database:universal:postgresThat primary frontend part is distinct from --dotnet-web-framework aspnet-blazor, which selects the solo .NET application surface.