Ryan Hamamura
6dcd54c88b
fix: clean up leaked contexts on SSE disconnect and add orphan reaper
...
When clients disconnect without beforeunload firing (network drops,
mobile kills, crashes), contexts leaked in the registry permanently.
- Extract cleanupCtx helper for dispose/unregister sequence
- Call cleanupCtx on SSE disconnect (sse.Context().Done())
- Add background reaper for contexts where SSE never connected
- Add ContextTTL config option (default 30s, negative disables)
- Fix inverted condition in devModeRemovePersisted
2026-02-06 10:34:28 -10:00
Ryan Hamamura
4a7acbb630
feat: add graceful shutdown with OS signal handling
...
Handle SIGINT/SIGTERM in Start() to cleanly drain all contexts,
stop goroutines, close SSE connections, and tear down PubSub.
Fix stopAllRoutines() to close() the channel instead of sending a
single value, so all listening goroutines are notified.
2026-01-31 09:22:43 -10:00
Ryan Hamamura
a7ace9099f
feat: replace log with rs/zerolog for structured logging
...
Switch from the standard library log package to rs/zerolog with
ConsoleWriter for colorful terminal output in dev mode and JSON
output in production. Users can now provide their own logger via
Options.Logger or set the level via Options.LogLevel.
2026-01-31 08:18:24 -10:00
Ryan Hamamura
30cc6d88e6
feat: add embedded NATS pub/sub support on Context
...
Define PubSub and Subscription interfaces in the core via package with
a vianats sub-package providing the embedded NATS + JetStream
implementation. Expose c.Publish() and c.Subscribe() on Context with
automatic subscription cleanup on session close. Refactor the NATS
chatroom example to use the built-in methods instead of manual
subscription tracking.
2026-01-26 08:06:50 -10:00
Ryan Hamamura
c77ccc0796
chore: rename module to github.com/ryanhamamura/via
...
Update module path and all internal imports to use the new repository location.
2026-01-14 10:47:11 -10:00
Ryan Hamamura
03b6d7453a
feat: add Redirect and ReplaceURL methods for browser navigation
...
Add SSE-based navigation methods to Context:
- Redirect(url) / Redirectf() - navigate to new page
- ReplaceURL(url) / ReplaceURLf() - update URL without navigation
Update session example to demonstrate full login flow with redirects.
2026-01-12 00:47:52 -10:00
ryanhamamura
9a23188973
feat: add cookie-based session support using alexedwards/scs ( #1 )
...
- Add Session wrapper with typed getters (GetString, GetInt, GetBool, etc.)
- Add flash message support via Pop methods (PopString, PopInt, etc.)
- Add session utilities: Exists, Keys, ID, Clear, Destroy, RenewToken
- Create default session manager in New() for zero-config usage
- Allow custom session manager via Options.SessionManager
- Wrap mux with scs LoadAndSave middleware in Start()
- Add session example demonstrating login/logout with flash messages
2026-01-09 06:59:26 -10:00
Joao Goncalves
81d44954a4
feat: add path params; add pathparams example
2025-12-04 17:53:06 -01:00
Joao Goncalves
26268f698a
refactor: simplify oninterval routine; fix(runtime): session end handler; update realtime chart example
2025-12-04 12:40:36 -01:00
Joao Goncalves
51218e7a2a
fix(runtime): sync on sse reconnect
2025-11-26 00:33:38 -01:00
Joao Goncalves
36c0fb9050
fix(runtime): solve chan blocks; other small improvements
2025-11-25 23:19:50 -01:00
Joao Goncalves
a71d6f0960
feat: introduce via routine; update realtime chart example
2025-11-25 22:56:21 -01:00
Joao Goncalves
6edace647e
fix(via_test): remove signal sync test that was bocking test execution
2025-11-25 22:54:00 -01:00
Joao Goncalves
f5a786730a
fix: check for panics on page registration. Fix header append bug: was appending multiple ctx_id to the header; feat: handle complex signal init values as json; add tests; other small improvemnts
2025-11-17 16:46:33 -01:00
Joao Goncalves
472351d9a5
refactor: simplify signals; small optimizations
2025-11-16 19:53:51 -01:00
Jeff Winkler
e0fa5560ab
Signals fix ( #17 )
...
* Fix signals bug, add test.
* Test
2025-11-16 08:51:04 -01:00
Jeff Winkler
f7b5b24dd5
Script, GH action to check that all go files compile, and any tests pass. ( #16 )
2025-11-15 17:47:49 -01:00
Jeff Winkler
762635d7d9
Signals were always being sent down - changed flag never cleared. This wiped out the user input area in chat. ( #13 )
...
Publish every 100ms
Co-authored-by: João Gonçalves <joao.goncalves01@gmail.com >
2025-11-15 10:40:07 -01:00
Joao Goncalves
03019364ca
fix: component nil pointer on sync; improve realtimechart example
2025-11-15 03:01:53 -01:00
Joao Goncalves
80879216b2
fix: components not using parent page patchShan; fix: chat example nil pointer error when sync outside action
2025-11-15 02:34:27 -01:00
Joao Goncalves
808d4dd0d1
fix: try solution for race conditions; use brotli included in datastar sdk; small improvements
2025-11-14 17:16:09 -01:00
Jeff Winkler
351bed3ea1
Chatroom 2 ( #10 )
...
* Remove unused method. Don't panic if unknown room.
* Need a Connected() check for rooms publishing - don't do the work of rendering for a dead connection
* Make vars private.
* Linter issues
* Remove Connected()
* Mutation observer. Publish 4x / second.
---------
Co-authored-by: João Gonçalves <joao.goncalves01@gmail.com >
2025-11-13 14:39:37 -01:00
Joao Goncalves
d282773379
fix: auto reload on multiple browser windows/tabs closes #6 ; fix: chatroom example not compiling
2025-11-12 02:33:22 -01:00
Joao Goncalves
03ce9808e6
feat: add devmode flag; introduce live reload support; update examples
2025-11-11 00:15:44 -01:00
Joao Goncalves
a46c06b467
feat: introduce support for plugins
2025-11-07 02:45:58 -01:00
Joao Goncalves
c167f0c74f
feat: add real-time chart example
2025-11-05 17:29:29 -01:00
Joao Goncalves
23aebf73f2
feat: improve component support
2025-11-03 00:41:05 -01:00
Joao Goncalves
0f492d807e
feat: introduce component support
2025-11-02 02:45:20 -01:00
Joao Goncalves
eb20a2a0a9
feat: add working prototype for via
2025-10-31 00:58:53 -01:00