https://github.com/loom-go/loom
The reactive framework for Go.
https://github.com/loom-go/loom
Last synced: 23 days ago
JSON representation
The reactive framework for Go.
- Host: GitHub
- URL: https://github.com/loom-go/loom
- Owner: loom-go
- License: mit
- Created: 2026-03-09T22:14:30.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-03-18T13:17:14.000Z (about 1 month ago)
- Last Synced: 2026-03-18T13:21:19.301Z (about 1 month ago)
- Language: Go
- Homepage: https://loomui.dev
- Size: 90.8 KB
- Stars: 58
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - loom - Signal-based reactive components framework for building TUIs. (Command Line / Advanced Console UIs)
- fucking-awesome-go - loom - Signal-based reactive components framework for building TUIs. (Command Line / Advanced Console UIs)
- awesome-go-with-stars - loom - based reactive components framework for building TUIs. | 2026-03-28 | (Build Automation / Advanced Console UIs)
README
「#」
A reactive component framework for TUIs, the Web, and more.
```go
func Counter() Node {
count, setCount := Signal(0)
go func() {
for {
time.Sleep(time.Second / 30)
setCount(count() + 1)
}
}()
return P(Text("Count: "), BindText(count))
}
```
## Features
- **Pure Go** | No extra compiler.
- **Multi-plateform** | Built-in support for TUIs and SPAs.
- **Signal-based** | Concurrency-safe [reactive model](https://github.com/loom-go/loom/tree/main/signals/README.md) with signals, effects, memos, etc.
- **Components** | Define your UI as declarative JSX-like components.
## Quick-start
```bash
go mod init my-project
go get github.com/loom-go/loom github.com/loom-go/term
```
```go
package main
import (
"log"
"time"
"github.com/loom-go/loom"
. "github.com/loom-go/loom/components"
"github.com/loom-go/term"
. "github.com/loom-go/term/components"
)
func Counter() loom.Node {
frame, setFrame := Signal(0)
go func() {
for {
time.Sleep(time.Second / 120)
setFrame(frame() + 1)
}
}()
return Box(Text("Count: "), BindText(frame))
}
func main() {
app := term.NewApp()
for err := range app.Run(term.RenderInline, Counter) {
app.Close()
log.Fatalf("Error: %v\n", err)
}
}
```
```bash
go run .
```
And it's live!
## Documentation
You can visite [loom's website](https://loomui.dev) for the full documentation.
## License
[MIT](./LICENSE)
---
[](https://pkg.go.dev/github.com/loom-go/loom)
[](https://goreportcard.com/report/github.com/loom-go/loom)
[](https://codecov.io/gh/loom-go/loom)