Skip to content

livefir/fir

Folders and files

NameName
Last commit message
Last commit date
Mar 16, 2024
Apr 6, 2025
Feb 2, 2024
Feb 18, 2024
Feb 29, 2024
Feb 2, 2024
Jun 11, 2022
Dec 2, 2022
Jul 16, 2022
Jun 13, 2022
Jul 5, 2023
Jun 10, 2022
Jun 13, 2022
Mar 30, 2024
Feb 3, 2024
Mar 6, 2024
Apr 6, 2025
Jan 29, 2024
May 18, 2023
Feb 25, 2024
Feb 25, 2024
Feb 29, 2024
Feb 2, 2024
Jul 5, 2023
Apr 6, 2025
Apr 6, 2025
Jan 29, 2024
Jun 19, 2023
Feb 29, 2024
Feb 25, 2024
Apr 6, 2025
Feb 25, 2024
Mar 2, 2024
Feb 18, 2024
Mar 15, 2024
Feb 15, 2024
Jul 5, 2023
Jun 9, 2023
Jul 5, 2023
Feb 29, 2024
Feb 2, 2024
Mar 15, 2024
Feb 25, 2024
May 31, 2023

Repository files navigation

Fir

Go API Reference Alpine API Reference npm version

A Go toolkit to build reactive web interfaces using: Go, html/template and alpinejs.

The Fir toolkit is designed for Go developers with moderate html/css & js skills who want to progressively build reactive web apps without mastering complex web frameworks. It includes a Go library and an Alpine.js plugin. Fir can be used for building passable UIs with low effort and is a good fit for internal tools, interactive forms and real-time feeds.

Fir has a simple and predictable server and client API with only one new (and weird) expression:

  <div @fir:create-chirp:ok::chirp="$fir.prependEl()">
  ...
  </div>

snippet from chirper example

Fir’s magic event handling expression fir:event-name:event-state::template-name piggybacks on alpinejs event binding syntax to declare html/templates to be re-rendered on the server. Once accustomed to this weirdness, Fir unlocks a great deal of productivity while adhering to web standards to enable rich and interactive apps

Fir sits somewhere between Phoenix Liveview and htmx in terms of capabilities. It's event-driven like Liveview but, instead of providing atomic UI diffs, it returns html fragments like htmx. Fir is closer to liveview since it ships with a server library. Similar to Liveview, Fir has the concept of routes: Fir Route, Liveview Router, loading data on page load: Fir OnLoad, Liveview onmount and handling user events: Fir OnEvent, Liveview handle_event.

Feature Highlights:

  • Server rendered: Render HTML on the server using Go’s standard html templating library.
  • DOM Patching: React to user or server events to update only the changed parts of a web page.
  • Progressive enhancement: Begin with a JavaScript-free HTML file and Fir's Go server API for quick setup. Gradually improve to avoid page reloads, using Fir's Alpine.js plugin for DOM updates.
  • Publish over websocket: Broadcast html fragments over websocket in response to both client and server events.
  • Interactivity over standard HTTP: Fir possesses a built-in pubsub over websocket capability to broadcast UI diff changes to connected clients. However, it doesn't solely rely on websockets. It's still possible to disable websockets and benefit from UI diffs sent over standard HTTP.
  • Broadcast from server: Broadcast page changes to specific connected clients.
  • Error tracking: Show and hide user specific errors on the page by simply returning an error or nil.
  • Development live reload: HTML pages reload automatically on edits if development mode is enabled

Usage

Demo & Quickstart

Examples

How it works

CLI

You don't need this to get started but the the cli can be used to generate a simple quickstart boilerplate:

go run github.com/livefir/cli gen project -n quickstart // generates a folder named quickstart
cd quickstart
go run main.go
open localhost:9867

go run github.com/livefir/cli gen route -n index // generates a new route

Community