Files
egutierrez 851a8dc690 feat: init_desktop_app bash pipeline — scaffold Wails desktop app
Genera apps/{nombre}/ con Wails v2 backend (main.go con embed frontend/dist,
app.go con struct App y bindings Greet/GetVersion) + frontend Vite+React+Mantine
con alias @fn_library.

Flag --with-db anade store.go con SQLite (schema items) y bindings CRUD
(ListItems, CreateItem); app.go se regenera con campo db.

wails.json con scripts pnpm, go.mod con replace a fn-registry, app.md con
framework wails+vite+react+mantine y dir_path correcto.

Verifica con go mod tidy al final. wails build requiere CLI instalado pero
el scaffold funciona sin el.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:54:55 +02:00

4.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, example, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path example file_path
init_desktop_app pipeline bash pipelines 1.0.0 impure init_desktop_app(nombre: string, [--with-db]) -> void Scaffold de Wails desktop app: Go backend + React frontend con Mantine y @fn_library. Genera main.go (Wails con embed frontend), app.go (bindings Greet/GetVersion), wails.json, go.mod con replace a fn-registry y frontend/ con vite + react + mantine.
init
scaffold
desktop
wails
pipeline
bash
launcher
assert_command_exists_bash_shell
scaffold_wails_app_go_infra
install_wails_bash_infra
wails_bind_crud_go_infra
wails_build_go_infra
false error_go_core
name desc
nombre nombre de la app Wails (apps/{nombre}/)
name desc
--with-db anade store.go con SQLite + bindings CRUD (Item, ListItems, CreateItem)
app Wails en apps/{nombre}/ con main.go + app.go + wails.json + frontend/ Vite+React. Ejecutar 'wails dev' o 'wails build' dentro del directorio. false
fn run init_desktop_app my_tool bash/functions/pipelines/init_desktop_app.sh

Sinopsis

fn run init_desktop_app <nombre> [--with-db]

Ejemplo rapido

fn run init_desktop_app data_explorer --with-db
cd apps/data_explorer/frontend && pnpm install && cd ..
wails dev                       # dev con hot reload
# o bien:
wails build && ./build/bin/data_explorer

Archivos generados

Archivo Descripcion
main.go Entry Wails con embed de frontend/dist, options.App, Bind: []interface{}{app}
app.go Struct App con bindings Greet(name), GetVersion() (y con --with-db: ListItems, CreateItem)
wails.json Config Wails: name, outputfilename, scripts frontend (pnpm)
go.mod Modulo Go con github.com/wailsapp/wails/v2 + replace fn-registry
frontend/package.json pnpm + vite + react + @mantine/core + @tabler/icons-react
frontend/vite.config.ts Alias @fn_library, outDir dist para embed
frontend/tsconfig.json TS strict con paths @fn_library/*
frontend/src/main.tsx Root con MantineProvider (defaultColorScheme: dark)
frontend/src/App.tsx Componente que llama bindings Greet y GetVersion via wailsjs
frontend/postcss.config.cjs postcss-preset-mantine
app.md Framework: wails + vite + react + mantine

Con --with-db anade ademas:

  • store.goopenDB, tipo Item, bindings CRUD ListItems, CreateItem

Flags

Flag Efecto
--with-db SQLite con schema items + bindings CRUD como ejemplo

Post-setup

# 1. Instalar deps del frontend (una vez)
cd apps/{nombre}/frontend && pnpm install && cd ..

# 2. Desarrollo
wails dev       # Ventana desktop con hot reload del frontend

# 3. Produccion
wails build     # binario en build/bin/{nombre}
./build/bin/{nombre}

Requisitos

El scaffold funciona sin Wails CLI, pero wails dev/wails build requiere:

  • Wails CLI: go install github.com/wailsapp/wails/v2/cmd/wails@latest
  • Deps del sistema (Linux): GTK3 + WebKit2GTK — usa install_wails_bash_infra para instalarlas:
    source bash/functions/infra/install_wails.sh && install_wails
    

Notas

Pipeline impuro: genera archivos via heredocs, ejecuta go mod tidy al final como verificacion. Si Wails CLI no esta disponible, reporta el warning y continua — el scaffold es valido, solo wails build falla hasta instalar el CLI.

El frontend importa @fn_library via alias en vite.config.ts apuntando a ../../../frontend/functions/ui/ (los componentes del registry sin duplicarlos).

Los bindings de Wails (funciones del struct App) se regeneran en frontend/wailsjs/go/main/App.ts automaticamente cuando corres wails dev o wails build.

Abort si apps/{nombre}/ ya existe.

El tag launcher permite que aparezca en el Pipeline Launcher TUI.