Skip to content
Merged
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
72 changes: 11 additions & 61 deletions apps/cli/src/helpers/addons/tauri-setup.ts
Original file line number Diff line number Diff line change
@@ -1,64 +1,14 @@
import { spinner } from "@clack/prompts";
import { getLocalWebDevPort } from "@better-fullstack/types";
import { consola } from "consola";
import { $ } from "execa";
import fs from "fs-extra";
import path from "node:path";
import pc from "picocolors";

import type { ProjectConfig } from "../../types";

import { getPackageRunnerPrefix } from "../../utils/package-runner";

export async function setupTauri(config: ProjectConfig) {
const { packageManager, frontend, projectDir } = config;
const s = spinner();
const clientPackageDir = path.join(projectDir, "apps/web");

if (!(await fs.pathExists(clientPackageDir))) {
return;
}

try {
s.start("Setting up Tauri desktop app support...");

const hasNuxt = frontend.includes("nuxt");
const hasSvelte = frontend.includes("svelte");
const hasNext = frontend.includes("next");

const devUrl = `http://localhost:${getLocalWebDevPort(frontend)}`;

const frontendDist = hasNuxt
? "../.output/public"
: hasSvelte
? "../build"
: hasNext
? "../.next"
: frontend.includes("react-router")
? "../build/client"
: frontend.includes("react-vite")
? "../dist"
: "../dist";

const tauriArgs = [
"@tauri-apps/cli@latest",
"init",
`--app-name=${path.basename(projectDir)}`,
`--window-title=${path.basename(projectDir)}`,
`--frontend-dist=${frontendDist}`,
`--dev-url=${devUrl}`,
`--before-dev-command=${packageManager} run dev`,
`--before-build-command=${packageManager} run build`,
];
const prefix = getPackageRunnerPrefix(packageManager);

await $({ cwd: clientPackageDir, env: { CI: "true" } })`${[...prefix, ...tauriArgs]}`;

s.stop("Tauri desktop app support configured successfully!");
} catch (error) {
s.stop(pc.red("Failed to set up Tauri"));
if (error instanceof Error) {
consola.error(pc.red(error.message));
}
}
/**
* Tauri setup is now handled entirely by template generation.
* The src-tauri/ directory (tauri.conf.json, Cargo.toml, main.rs, lib.rs, etc.)
* is emitted by the addons template handler from templates/addons/tauri/.
* Dependencies (@tauri-apps/cli, @tauri-apps/api) and scripts (tauri, desktop:dev,
* desktop:build) are added by addons-deps.ts.
*
* This function is kept as a no-op for backward compatibility with addons-setup.ts.
*/
export async function setupTauri(_config: ProjectConfig) {
// Templates handle everything — no runtime CLI execution needed.
}
Loading
Loading