Releases: sazardev/fugo
Release list
v0.17.0 — hot reload by default + doctor coherence/--fix
Live dev flow
fugo runhot-reloads by default — it watches.gofiles and rebuilds/reconnects the Go server on every change while the Flutter window stays open, so edits to text, handlers, layout, etc. show up live (in-memory state resets across reloads).--no-watchfor a single build-and-run.fugo doctorcoherence check — flags a mismatch betweengo.mod's module andmain.go's<module>/uiimport, a missinguipackage, or a missingui.Build, before the generic compile error.fugo doctor --fix— writes a defaultfugo.tomlif missing, runsgit init, andgo mod tidy, then re-diagnoses.
Fixed
- Flutter render client: reconnection after a server restart (hot reload) no longer loops with "Bad state: Stream has already been listened to". The gRPC isolate now subscribes to its
ReceivePortonce and resets its backoff after a connected session, reattaching in ~500ms.
Full diff: v0.16.0...v0.17.0
v0.16.0 — fugo doctor: toolchain + project health
Smarter fugo doctor
Two sections now:
Toolchain — Go, Flutter, git, protoc, gofumpt (Go/Flutter required → ✗; rest are warnings) + platform.
Project (inside a Fugo project) — imports fugo.toml and validates what fugo run needs:
- resolved window + gRPC address from
fugo.toml, - the configured address is free (or a unix socket),
- structure (
main.go,ui/,go.mod), - the
github.com/sazardev/fugomodule resolves, - the Flutter client is built (or buildable),
- the project compiles (
go build ./...).
Exits non-zero on a blocking issue (missing required tool, unresolved module, or a project that doesn't compile) so it can gate scripts/CI; warnings alone keep a zero exit.
Full diff: v0.15.0...v0.16.0
v0.15.0 — structured fugo init (ui/ + fugo.toml + git)
Smarter project bootstrap
fugo init now scaffolds a recommended, formalized project structure and initializes git:
myapp/
├─ main.go # theme + fugo.RunStandalone(fugo.ConfigOptions("fugo.toml"), ui.Build)
├─ ui/home.go # package ui — your screens
├─ fugo.toml # window + gRPC config (read by the CLI and the app)
├─ bin/ dist/ # build output (gitignored)
├─ logs/ # fugo run → logs/run.log (gitignored)
├─ README.md
└─ .gitignore
fugo.toml— declarative[window]/[server]config, read via the newfugo.ConfigOptions("fugo.toml")(and byfugo run/build); editable without recompiling Go.- New dependency-free
configpackage shared by the runtime and the CLI. fugo rundefaults its address to[server] addr(override with--addr) and tees runtime logs tologs/run.log;fugo buildshipsfugo.tomlintodist/.git init+ initial commit on scaffold (--no-gitto skip).
Full diff: v0.14.0...v0.15.0
v0.14.0 — RichText + DataTable + Stepper
Wave 8 — RichText, DataTable, Stepper
The final wave of the Material widget catalog.
fg.RichText(spans...)withfg.Span(text).Bold().Color(...).Size(...)— styled inline text runs (FlutterText.rich).fg.DataTable().Columns(...).Row(...)— a MaterialDataTablein a horizontal scroll view.fg.Stepper().Step(title, content).Active(i).OnStep(handler)— a vertical MaterialStepperwizard; theOnStepevent data is the tapped step index.
Full diff: v0.13.0...v0.14.0
v0.13.0 — BottomSheet + Date/Time pickers
Imperative overlays: ctx.ShowBottomSheet, ctx.PickDate, ctx.PickTime (pickers return the chosen value to a callback).
Full changelog: v0.12.0...v0.13.0
v0.12.0 — layout helpers + ExpansionTile + PopupMenuButton
AspectRatio, ClipRRect, FittedBox, Flexible, ExpansionTile, PopupMenuButton.
Full changelog: v0.11.0...v0.12.0
v0.11.0 — Tooltip, Badge, CircleAvatar, SegmentedButton
More native Material widgets: fg.Tooltip, fg.Badge, fg.CircleAvatar, fg.SegmentedButton (fg.Spacer already existed).
Full changelog: v0.10.0...v0.11.0
v0.10.0 — imperative overlays (Dialog + SnackBar)
Final wave of the navigation/overlay series. Driven from Go over the out-of-band command channel:
ctx.ShowSnackBar("Saved")
ctx.ShowDialog("Title", "Message")A Material snackbar and an alert dialog (dismissed with OK).
Full changelog: v0.9.0...v0.10.0
v0.9.0 — Tabs (TabBar + TabBarView)
Wave 3. fg.Tabs — a Material tab strip with one view per tab (.Tab(label, content), .InitialIndex); switching is client-side.
Full changelog: v0.8.0...v0.9.0
v0.8.0 — Drawer + NavigationBar
Wave 2 of the navigation series.
Scaffold.Drawer(widget)— slide-in side panel (the app bar auto-adds a menu button to open it).fg.NavigationBar— Material 3 bottom nav (.Item(icon,label),.Selected,.OnChange), viaScaffold.BottomBar(...).
Full changelog: v0.7.0...v0.8.0