---
title: Ecosystems
description: Supported language ecosystems, what Better Fullstack scaffolds for each one, and the compatibility rules that apply.
translationStatus: pending
updated: 2026-08-22
---

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](#typescript)           | Fullstack web, APIs, workers, desktop, and the largest integration matrix.                                      | npm/pnpm/Yarn/Bun   |
| [React Native](#react-native)       | Expo mobile apps with navigation, UI, storage, testing, push, OTA, and deep linking.                            | npm/pnpm/Yarn/Bun   |
| [Rust](#rust)                       | Backend services, CLIs, GraphQL/gRPC, web frontends, typed libraries.                                           | Cargo               |
| [Python](#python)                   | API and AI-oriented services with framework, ORM, validation, queue, and quality choices.                       | uv                  |
| [Go](#go)                           | API services, gRPC, CLIs, ORMs, logging, and auth helpers.                                                      | Go modules          |
| [Java and Kotlin](#java-and-kotlin) | Spring Boot, Ktor, Quarkus, Micronaut, or plain JVM projects with Maven/Gradle.                                 | Maven/Gradle        |
| [Elixir](#elixir)                   | Phoenix and LiveView apps with Ecto, Absinthe, realtime, jobs, and deploy files.                                | Mix                 |
| [.NET](#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](/docs/ecosystems/multi-ecosystem/), 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](/docs/ecosystems/native-apps/).

## Default baseline

Accepting all defaults creates a TypeScript web project. The package manager follows the one used to launch the CLI:

```json
{
  "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](/docs/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
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-install
```

tRPC 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](/new) 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
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-install
```

Selections 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
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-install
```

Leptos, 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
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
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-install
```

Go 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
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-install
```

Spring 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
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-install
```

A 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
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-install
```

`ef-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
npm create better-fullstack@latest blazor-go -- \
  --part frontend:dotnet:blazor-webassembly \
  --part backend:go:gin \
  --part database:universal:postgres
```

That primary frontend part is distinct from `--dotnet-web-framework aspnet-blazor`, which selects the solo .NET application surface.
