docs: rewrite README with correct import paths and current feature set
This commit is contained in:
75
README.md
75
README.md
@@ -1,30 +1,33 @@
|
||||
# ⚡Via
|
||||
# Via
|
||||
|
||||
Real-time engine for building reactive web applications in pure Go.
|
||||
|
||||
|
||||
## Why Via?
|
||||
Somewhere along the way, the web became tangled in layers of JavaScript, build chains, and frameworks stacked on frameworks.
|
||||
|
||||
Via takes a radical stance:
|
||||
The web became tangled in layers of JavaScript, build chains, and frameworks stacked on frameworks. Via takes a different path.
|
||||
|
||||
- No templates.
|
||||
- No JavaScript.
|
||||
- No transpilation.
|
||||
- No hydration.
|
||||
- No front-end fatigue.
|
||||
- Single SSE stream.
|
||||
- Full reactivity.
|
||||
- Built-in Brotli compression.
|
||||
- Pure Go.
|
||||
**Philosophy**
|
||||
- No templates. No JavaScript. No transpilation. No hydration.
|
||||
- Views are pure Go functions. HTML is composed with a type-safe DSL.
|
||||
- A single SSE stream carries all reactivity — no WebSocket juggling, no polling.
|
||||
|
||||
**Batteries included**
|
||||
- Automatic CSRF protection on every action call
|
||||
- Token-bucket rate limiting (global defaults + per-action overrides)
|
||||
- Cookie-based sessions backed by SQLite
|
||||
- Pub/sub messaging with an embedded NATS backend
|
||||
- Structured logging via zerolog
|
||||
- Graceful shutdown with context draining
|
||||
- Brotli compression out of the box
|
||||
|
||||
## Example
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/go-via/via"
|
||||
"github.com/go-via/via/h"
|
||||
"github.com/ryanhamamura/via"
|
||||
"github.com/ryanhamamura/via/h"
|
||||
)
|
||||
|
||||
type Counter struct{ Count int }
|
||||
@@ -57,25 +60,43 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
## What's built in
|
||||
|
||||
## 🚧 Experimental
|
||||
<s>Via is still a newborn.</s> Via is taking its first steps!
|
||||
- Version `0.1.0` released.
|
||||
- Expect a little less chaos.
|
||||
- **Reactive views + signals** — bind state to the DOM; changes push over SSE automatically
|
||||
- **Components** — self-contained subcontexts with their own data, actions, and signals
|
||||
- **Sessions** — cookie-based, backed by SQLite via `scs`
|
||||
- **Pub/sub** — embedded NATS server with JetStream; generic `Publish[T]` / `Subscribe[T]` helpers
|
||||
- **CSRF protection** — automatic token generation and validation on every action
|
||||
- **Rate limiting** — token-bucket algorithm, configurable globally and per-action
|
||||
- **Event handling** — `OnClick`, `OnChange`, `OnSubmit`, `OnInput`, `OnFocus`, `OnBlur`, `OnMouseEnter`, `OnMouseLeave`, `OnScroll`, `OnDblClick`, `OnKeyDown`, and `OnKeyDownMap` for multi-key bindings
|
||||
- **Timed routines** — `OnInterval` with start/stop/update controls, tied to context lifecycle
|
||||
- **Redirects** — `Redirect`, `ReplaceURL`, and format-string variants
|
||||
- **Plugin system** — `func(v *V)` hooks for integrating CSS/JS libraries
|
||||
- **Structured logging** — zerolog with configurable levels; console output in dev, JSON in production
|
||||
- **Graceful shutdown** — listens for SIGINT/SIGTERM, drains contexts, closes pub/sub
|
||||
- **Context lifecycle** — background reaper cleans up disconnected contexts; configurable TTL
|
||||
- **HTML DSL** — the `h` package provides type-safe Go-native HTML composition
|
||||
|
||||
## Examples
|
||||
|
||||
The `internal/examples/` directory contains 14 runnable examples:
|
||||
|
||||
`chatroom` · `counter` · `countercomp` · `greeter` · `keyboard` · `livereload` · `nats-chatroom` · `pathparams` · `picocss` · `plugins` · `pubsub-crud` · `realtimechart` · `session` · `shakespeare`
|
||||
|
||||
## Experimental
|
||||
|
||||
Via is maturing — sessions, CSRF, rate limiting, pub/sub, and graceful shutdown are in place — but the API is still evolving. Expect breaking changes before `v1`.
|
||||
|
||||
## Contributing
|
||||
|
||||
- Via is intentionally minimal and opinionated — and so is contributing.
|
||||
- If you love Go, simplicity, and meaningful abstractions — Come along for the ride!
|
||||
- Fork, branch, build, tinker with things, submit a pull request.
|
||||
- Fork, branch, build, tinker, submit a pull request.
|
||||
- Keep every line purposeful.
|
||||
- Share feedback: open an issue or start a discussion.
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
Via builds upon the work of these amazing projects:
|
||||
Via builds upon the work of these projects:
|
||||
|
||||
- 🚀 [Datastar](https://data-star.dev) - The hypermedia powerhouse at the core of Via. It powers browser reactivity through Signals and enables real-time HTML/Signal patches over an always-on SSE event stream.
|
||||
- 🧩 [Gomponents](https://maragu.dev/gomponents) - The awesome project that gifts Via with Go-native HTML composition superpowers through the `via/h` package.
|
||||
|
||||
> Thank you for building something that doesn’t just function — it inspires. 🫶
|
||||
- [Datastar](https://data-star.dev) — the hypermedia framework powering browser reactivity through signals and real-time HTML patches over SSE.
|
||||
- [Gomponents](https://maragu.dev/gomponents) — Go-native HTML composition that powers the `via/h` package.
|
||||
|
||||
Reference in New Issue
Block a user