Skip to content

Releases: sazardev/fugo

v0.17.0 — hot reload by default + doctor coherence/--fix

Choose a tag to compare

@sazardev sazardev released this 10 Jun 00:22
b2b6973

Live dev flow

  • fugo run hot-reloads by default — it watches .go files 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-watch for a single build-and-run.
  • fugo doctor coherence check — flags a mismatch between go.mod's module and main.go's <module>/ui import, a missing ui package, or a missing ui.Build, before the generic compile error.
  • fugo doctor --fix — writes a default fugo.toml if missing, runs git init, and go 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 ReceivePort once 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

Choose a tag to compare

@sazardev sazardev released this 09 Jun 23:52
8ae0953

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/fugo module 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)

Choose a tag to compare

@sazardev sazardev released this 09 Jun 23:38
db1691f

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 new fugo.ConfigOptions("fugo.toml") (and by fugo run/build); editable without recompiling Go.
  • New dependency-free config package shared by the runtime and the CLI.
  • fugo run defaults its address to [server] addr (override with --addr) and tees runtime logs to logs/run.log; fugo build ships fugo.toml into dist/.
  • git init + initial commit on scaffold (--no-git to skip).

Full diff: v0.14.0...v0.15.0

v0.14.0 — RichText + DataTable + Stepper

Choose a tag to compare

@sazardev sazardev released this 09 Jun 22:28
b3d7ffa

Wave 8 — RichText, DataTable, Stepper

The final wave of the Material widget catalog.

  • fg.RichText(spans...) with fg.Span(text).Bold().Color(...).Size(...) — styled inline text runs (Flutter Text.rich).
  • fg.DataTable().Columns(...).Row(...) — a Material DataTable in a horizontal scroll view.
  • fg.Stepper().Step(title, content).Active(i).OnStep(handler) — a vertical Material Stepper wizard; the OnStep event data is the tapped step index.

Full diff: v0.13.0...v0.14.0

v0.13.0 — BottomSheet + Date/Time pickers

Choose a tag to compare

@sazardev sazardev released this 09 Jun 22:18
ed62031

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

Choose a tag to compare

@sazardev sazardev released this 09 Jun 22:10
50e0ba4

AspectRatio, ClipRRect, FittedBox, Flexible, ExpansionTile, PopupMenuButton.

Full changelog: v0.11.0...v0.12.0

v0.11.0 — Tooltip, Badge, CircleAvatar, SegmentedButton

Choose a tag to compare

@sazardev sazardev released this 09 Jun 21:55
471aedf

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)

Choose a tag to compare

@sazardev sazardev released this 09 Jun 21:36
e88f1f4

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)

Choose a tag to compare

@sazardev sazardev released this 09 Jun 21:19
7704111

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

Choose a tag to compare

@sazardev sazardev released this 09 Jun 20:21
ae0c10e

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), via Scaffold.BottomBar(...).

Full changelog: v0.7.0...v0.8.0