Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/codebase-deps.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Resolve Update Mode
id: mode
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/dep-freshness.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Install Dependencies
run: bun install --frozen-lockfile
Expand All @@ -47,7 +47,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Install Dependencies
run: bun install --frozen-lockfile
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deps-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Cache Dependencies
uses: actions/cache@v4
Expand Down Expand Up @@ -227,7 +227,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Setup Node
uses: actions/setup-node@v4
Expand Down
33 changes: 27 additions & 6 deletions .github/workflows/e2e-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,19 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
node-version: "22"

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"

- uses: astral-sh/setup-uv@v5

- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -84,12 +91,19 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
node-version: "22"

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"

- uses: astral-sh/setup-uv@v5

- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -142,12 +156,19 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
node-version: "22"

- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"

- uses: astral-sh/setup-uv@v5

- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -200,7 +221,7 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
Expand Down Expand Up @@ -251,7 +272,7 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
Expand Down Expand Up @@ -296,7 +317,7 @@ jobs:

- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- uses: actions/setup-node@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-preview.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Cache Dependencies
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-size.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
runs-on: ubuntu-24.04
permissions:
contents: read
issues: read
issues: write
pull-requests: write
concurrency:
group: pr-size-${{ github.event.pull_request.number }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/smoke-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Setup Node
uses: actions/setup-node@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/template-matrix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Setup Rust
if: startsWith(matrix.preset, 'rust-')
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Cache Dependencies
uses: actions/cache@v4
Expand Down Expand Up @@ -51,7 +51,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Cache Dependencies
uses: actions/cache@v4
Expand All @@ -75,6 +75,9 @@ jobs:
- name: Validate Builder Tech Links
run: bun run --cwd apps/web validate:tech-links

- name: Validate Builder Tech Icons
run: bun run --cwd apps/web validate:tech-icons

- name: Run Lint
run: bun run lint

Expand All @@ -89,7 +92,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Setup Deno
uses: denoland/setup-deno@v2
Expand Down Expand Up @@ -124,7 +127,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Cache Dependencies
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/upstream-gap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
bun-version: 1.3.12

- name: Generate upstream gap report
run: bun run scripts/upstream-gap-report.ts --markdown > upstream-gap-report.md
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<div align="center">

**Scaffold production-ready fullstack apps in seconds. Browse 450+ tools across five ecosystems — the CLI wires everything together.**
**Scaffold production-ready fullstack apps in seconds. Browse 450+ tools across six ecosystems — the CLI wires everything together.**

<br>

Expand All @@ -35,7 +35,7 @@
Most scaffolding tools lock you into one framework and one opinion. Better Fullstack doesn't.

- **450+ tools** — frontend, backend, database, auth, payments, AI, DevOps, and more
- **5 ecosystems** — TypeScript, Rust, Python, Go, Java — with more coming
- **6 ecosystems** — TypeScript, React Native, Rust, Python, Go, Java — with more coming
- **Visual builder** — configure your stack in the browser, get a ready-to-run CLI command
- **Wired for you** — no manual glue code; every picked integration is preconfigured and working out of the box

Expand Down Expand Up @@ -113,8 +113,8 @@ Better Fullstack is organized around the decisions that matter: pick an ecosyste
Only the relevant options surface for the stack you pick.
</td>
<td width="33%">
<strong>5 ecosystems</strong><br>
TypeScript, Rust, Python, Go, Java.
<strong>6 ecosystems</strong><br>
TypeScript, React Native, Rust, Python, Go, Java.
</td>
<td width="33%">
<strong>One command</strong><br>
Expand Down
4 changes: 2 additions & 2 deletions apps/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
## Features

- **425 options** — frontend, backend, database, auth, payments, AI, DevOps, and more
- **5 ecosystems** — TypeScript, Rust, Python, Go, Java
- **7 ecosystems** — TypeScript, React Native, Rust, Python, Go, Java, Elixir
- **Visual builder** — configure your stack in the browser
- **Wired for you** — every picked integration is preconfigured and working out of the box

Expand All @@ -42,7 +42,7 @@ Configure your stack visually — pick every option from a UI, preview your choi
--yes # Accept all defaults
--yolo # Scaffold a random stack — good for exploring
--template <name> # Use a preset (t3, mern, pern, uniwind)
--ecosystem <lang> # Start in typescript, rust, python, go, or java mode
--ecosystem <lang> # Start in typescript, react-native, rust, python, go, java, or elixir mode
--version-channel # Dependency channel: stable, latest, beta
--no-git # Skip git initialization
--no-install # Skip dependency installation
Expand Down
2 changes: 2 additions & 0 deletions apps/cli/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ export function getDefaultConfig() {
pythonAi: [...DEFAULT_CONFIG_BASE.pythonAi],
javaLibraries: [...DEFAULT_CONFIG_BASE.javaLibraries],
javaTestingLibraries: [...DEFAULT_CONFIG_BASE.javaTestingLibraries],
elixirLibraries: [...DEFAULT_CONFIG_BASE.elixirLibraries],
elixirTesting: [...DEFAULT_CONFIG_BASE.elixirTesting],
aiDocs: [...DEFAULT_CONFIG_BASE.aiDocs],
};
}
Expand Down
31 changes: 30 additions & 1 deletion apps/cli/src/create-command-input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,22 @@ import {
EcosystemSchema,
EffectSchema,
EmailSchema,
ElixirDatabaseSchema,
ElixirLibrariesSchema,
ElixirTestingSchema,
ElixirWebFrameworkSchema,
ExamplesSchema,
FeatureFlagsSchema,
FileStorageSchema,
FileUploadSchema,
FormsSchema,
MobileDeepLinkingSchema,
MobileNavigationSchema,
MobileOTASchema,
MobilePushSchema,
MobileStorageSchema,
MobileTestingSchema,
MobileUISchema,
FrontendSchema,
GoApiSchema,
GoAuthSchema,
Expand Down Expand Up @@ -98,7 +109,9 @@ export const CreateCommandOptionsSchema = z.object({
.optional()
.default(false)
.describe("Preview generated file tree without writing to disk"),
ecosystem: EcosystemSchema.optional().describe("Language ecosystem (typescript, rust, python, go, or java)"),
ecosystem: EcosystemSchema.optional().describe(
"Language ecosystem (typescript, react-native, rust, python, go, java, or elixir)",
),
database: DatabaseSchema.optional(),
orm: ORMSchema.optional(),
auth: AuthSchema.optional(),
Expand All @@ -123,6 +136,13 @@ export const CreateCommandOptionsSchema = z.object({
i18n: I18nSchema.optional().describe("Internationalization (i18n) library"),
search: SearchSchema.optional().describe("Search engine solution"),
fileStorage: FileStorageSchema.optional().describe("File storage solution (S3, R2)"),
mobileNavigation: MobileNavigationSchema.optional().describe("Mobile navigation (expo-router, react-navigation)"),
mobileUI: MobileUISchema.optional().describe("Mobile UI (tamagui, gluestack-ui, uniwind, unistyles)"),
mobileStorage: MobileStorageSchema.optional().describe("Mobile storage (mmkv)"),
mobileTesting: MobileTestingSchema.optional().describe("Mobile testing (maestro, react-native-testing-library)"),
mobilePush: MobilePushSchema.optional().describe("Mobile push notifications (expo-notifications)"),
mobileOTA: MobileOTASchema.optional().describe("Mobile OTA updates (expo-updates)"),
mobileDeepLinking: MobileDeepLinkingSchema.optional().describe("Mobile deep linking (expo-linking)"),
frontend: z.array(FrontendSchema).optional(),
astroIntegration: AstroIntegrationSchema.optional().describe(
"Astro UI framework integration (react, vue, svelte, solid)",
Expand Down Expand Up @@ -219,6 +239,15 @@ export const CreateCommandOptionsSchema = z.object({
.array(JavaTestingLibrariesSchema)
.optional()
.describe("Java testing libraries"),
elixirWebFramework: ElixirWebFrameworkSchema.optional().describe(
"Elixir web framework (phoenix, none)",
),
elixirDatabase: ElixirDatabaseSchema.optional().describe("Elixir database layer (ecto, none)"),
elixirLibraries: z
.array(ElixirLibrariesSchema)
.optional()
.describe("Elixir application libraries"),
elixirTesting: z.array(ElixirTestingSchema).optional().describe("Elixir testing libraries"),
aiDocs: z
.array(AiDocsSchema)
.optional()
Expand Down
11 changes: 11 additions & 0 deletions apps/cli/src/helpers/core/command-handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,13 @@ export async function createProjectHandler(
featureFlags: "none",
analytics: "none",
fileStorage: "none",
mobileNavigation: "none",
mobileUI: "none",
mobileStorage: "none",
mobileTesting: "none",
mobilePush: "none",
mobileOTA: "none",
mobileDeepLinking: "none",
pythonWebFramework: "none",
pythonOrm: "none",
pythonValidation: "none",
Expand All @@ -191,6 +198,10 @@ export async function createProjectHandler(
javaAuth: "none",
javaLibraries: [],
javaTestingLibraries: [],
elixirWebFramework: "none",
elixirDatabase: "none",
elixirLibraries: [],
elixirTesting: [],
aiDocs: [],
} satisfies ProjectConfig,
reproducibleCommand: "",
Expand Down
Loading
Loading