Releases: RUSEGAL/ruseon-core
Releases · RUSEGAL/ruseon-core
Release list
v2.1.5
v2.1.4
Changelog
- 60065d9 ci: add Docker Hub publishing for multi-arch images and manifests
v2.1.3
Changelog
- 4407120 refactor: migrate module and all package imports to v2
v2.1.2
v2.1.1
Changelog
- 2520c2b sec(deps): upgrade github.com/moby/go-archive to v0.3.3 to resolve path traversal vulnerability
v2.1.0
Changelog
- 459cbc9 ci(release): install syft for SBOM generation and fix goreleaser v2 archive format
- 931638d ci(test): enforce meaningful coverage threshold for critical packages and add auth/storage unit tests (#59)
- f6eb448 ci: add mock frontend build step to nightly workflow for go:embed
- c61d4d6 ci: bump Go patch to 1.26.5 and harden LocalFS path traversal security (#31)
- 3288577 ci: harden CI/CD pipelines, pin versions and tighten security scanning (#30)
- 82bc9c4 docs(readme): update performance benchmarks to 600-cam baseline and fix report links
- f4a74ed feat(api): harden /readyz readiness probe to verify storage, database, and stream manager health (#49)
- d496ac9 feat(archive): bounded index LRU cache, fmp4 bounds checks, and recorder rename consistency (#62) (#67)
- 781da20 feat(concurrency): optimize lock scopes, stream lifecycle draining, and timer cancellation (#62) (#66)
- ce2c373 feat(eventbus): deterministic shutdown, graceful draining, and fault recovery semantics (#62) (#68)
- 1de178d feat(loadtest): comprehensive benchmarking and telemetry improvements (L1-L9) (#78)
- 8decefe feat(security): Phase 1 — security hardening & input boundaries (#62) (#63)
- db89529 feat(storage): enforce BadgerDB SyncWrites durability and atomic crash-resilient config migration (#51)
- 87ab1e2 feat(webrtc): implement dynamic frame duration pacing and defensive buffer parameters (#62) (#65)
- 93bc7b9 fix(buffer): synchronize frame write and subscriber registration to prevent duplicate delivery race in RingBuffer
- 2158ae5 fix(core): Phase P33 correctness, uptime stability & 24/7 hardening (#82)
- b1c8754 fix(core): resolve concurrency, leak, timeout, and billing issues (F1-F6) (#71) (#72)
- f075f5b fix(recorder): enforce strict box boundary checks in fMP4 validator and clarify finalization semantics (#43)
- 482b998 fix(recorder): enforce truthful finalization state and validate recovered fMP4 files before archiving (#37)
- ffca2a1 fix(stream): bound long-GOP buffering and handle RTP timestamp wrap, regressions, and codec changes (#41)
- 9a6b706 fix(stream): enforce bounded muxer and reader cancellation during shutdown with idle subscribers (#39)
- ac2c443 fix(stream): formalize PipelineConfig contract and add metadata continuity, restart, and edit-delete race tests (#45)
- b549a0f fix(stream): preserve invariant between durable camera configuration and runtime stream manager (#35)
- 842f3f0 perf(core): optimize HLS segment lookup, sync.Pool buffering, MQTT workers, and storage cache (#80)
- 0829213 perf(loadtest): add preemptive JWT rotation and update baseline benchmark reports
- 6353e91 perf: centralize housekeeping timers and optimize metadata pipeline to reduce goroutines per camera (#70)
- ea6d8d4 refactor(repo): production-grade repository cleanup and dependency optimization (#83)
- 77c36c2 refactor(ui): completely remove legacy classic UI, unused modals, and unify into Next-Gen V2
- d039d26 test(bench): harden benchmarks, fix goroutine/disk leaks, and expand hot-path coverage (#79)
- 72485b9 test(buffer): add deterministic replay-live boundary and slow subscriber isolation tests for RingBuffer (#47)
- 6417308 test(e2e): robust Docker/Testcontainers E2E suite with pinned images and full media pipeline (#55)
- b525698 test(frontend): add Vitest unit and React component testing suite for web UI (#57)
- fd8d3c3 test(performance): extend k6 load tests to cover authenticated HLS and WebRTC media paths (#53)
v2.0.0
🚀 RUSEON Core v2.0.0 — The Next-Gen Era: Edge WebGPU AI, WebCodecs & Zero-Copy Engine
We are thrilled to announce the release of RUSEON Core v2.0.0 — our largest and most significant milestone to date. This landmark release introduces the brand-new Next-Gen V2 UI, browser-side edge AI inference powered by YOLOv11 and WebGPU, ultra-low-latency WebCodecs streaming, and core media engine optimizations delivering true Zero-Copy and Zero-Allocation performance.
🌟 Key Highlights & Major Features
🎨 1. Next-Gen V2 UI by Default
- Atmospheric Cyberpunk Aesthetic: Completely reimagined frontend featuring dark-cyber glassmorphism, ambient lighting, and high-contrast typography.
- Modernized Login & Brand Navigation: Seamless authentication workflow, authentic vector branding, and real-time engine telemetry badges.
- Full Multilingual Localization (i18n): Complete English (
EN) and Russian (RU) localization across all views, modals, settings, and timeline players with dynamic switching via a sleek glass segmented pill. - Interactive Surveillance & Timeline: High-density surveillance grid, PTZ controls, clip export modal, and granular tag/folder management.
🧠 2. Client-Side Edge AI (Zero-Server-Cost WebGPU & WASM)
- Zero-Server-Cost AI Inference: Real-time object detection (persons, vehicles, security objects) executes directly in the client's browser via ONNX Runtime WebGPU/WASM, offloading 100% of video AI compute from the server CPU/GPU.
- YOLOv11-Medium Support: High-precision neural network model with tailored surveillance class filtering and confidence thresholding.
- Hardware Profiler & Adaptive Tiers: Intelligent client capability profiling with automatic model tier selection (Nano / Small / Medium) and dynamic FPS scaling.
- Singleflight CDN Download: Eliminated head-of-line blocking when multiple clients concurrently initialize and download neural network weights.
⚡ 3. WebCodecs Ultra-Low Latency Streaming
- Hardware-Accelerated Decoding: Full support for the WebCodecs API, streaming raw NALU H.264/H.265 video packets over WebSocket with sub-frame glass-to-glass latency (<50 ms).
- Per-Connection Memory Pooling: Dedicated WebSocket scratch buffers reused across frame iterations (0 memory allocations/sec during steady-state streaming).
🏎️ 4. Zero-Copy & Zero-Alloc Core Architecture (HLS Muxer)
- Atomic Reference Counting (ARC): Re-architected MPEG-TS segment delivery using atomic ref-counting, completely eliminating defensive 1 MB memory allocations (
0 B/op,0 allocs/op). - Zero-Alloc M3U8 Playlist Generator: Fast in-place byte buffer formatting reducing playlist generation time by 8.3x (from 795 ns down to 98 ns) and eliminating 15 heap allocations per request.
- 40.6% Memory Reduction Under Heavy Load: Heap allocation footprint dropped from 1,089 MB to 647 MB during 100-camera stress tests, with a 34% drop in segment delivery latency.
🛠️ 5. Full-Stack Load Testing Suite (cmd/loadtest)
- Comprehensive built-in stress testing tool exercising RTSP ingest, HLS fMP4 delivery, WebRTC WHEP, REST API, gRPC AI, and disk storage simultaneously.
📊 Performance Benchmarks (100 Cameras @ 30 FPS + 330 Concurrent Clients)
| Metric | v1.4.0 (Before) | v2.0.0 (After) | Improvement |
|---|---|---|---|
| Heap Alloc (RAM Footprint) | 1089 MB |
647 MB |
🟢 -40.6% memory reduction |
| Heap In-Use | 1137 MB |
702 MB |
🟢 -435 MB saved |
| HLS Segment Latency (p50 / p95) | 34.3 ms / 77.1 ms |
25.0 ms / 51.0 ms |
⚡ ~30–34% faster delivery |
| WebRTC WHEP Handshake (p50) | 271.8 ms |
181.1 ms |
🚀 -33.4% faster connect |
| REST API Latency (p95) | 7.54 ms |
4.00 ms |
🚀 1.88x faster (-47%) |
| RingBuffer Write | 65.19 ns |
18.62 ns |
🏆 Zero-Alloc (0 B / 0 allocs) |
| AcquireSegment Throughput | 7,500 ops/s | 37,000,000 ops/s | 🏆 Zero-Copy (0 B / 0 allocs) |
| Errors & Frame Drops | 0 |
0 |
🎯 100% rock-solid stability |
📦 Getting Started & Upgrade Guide
Pull via Docker
docker pull ghcr.io/rusegal/ruseon-core:v2.0.0
docker run -d \
-p 8080:8080 \
-p 8554:8554 \
-p 8555:8555/udp \
--name ruseon-core \
ghcr.io/rusegal/ruseon-core:v2.0.0Changelog
- 0ae7f7c Merge branch 'dev'
- 2e5632e Merge pull request #26 from RUSEGAL/dev
- 3df9e73 chore(deps): run go mod tidy to update gorilla/websocket to direct dependency
- 1547569 chore(i18n): set English (en) as default language and fallback
- 179e77c docs(bench): update load test benchmark results reflecting Zero-Copy/Zero-Alloc performance gains
- 0b5bbb1 feat(ai): add Hardware Profiler, adaptive model tier selection, and AI settings card
- eece358 feat(ai): enable default surveillance class filtering and set 65% threshold for YOLOv11-Medium
- cf8f0ca feat(ai): switch client-side browser AI detection to high-precision YOLOv11-Medium
- 1aee395 feat(i18n): connect multilingual translations to Next-Gen V2 UI components
- 397a41b feat(i18n): full multilingual localization for dashboard overview and all v2 modals
- 3f4173d feat(ui): redesign login page with Next-Gen dark-cyber glassmorphism and i18n support
- 1920252 feat(ui): relocate legacy UI switcher from top header to settings page bottom
- 7d02e7c feat(ui): set Next-Gen V2 UI as default design variant
- e9953f7 feat(ui,ai): introduce Next-Gen UI v2, WebCodecs streaming, and Browser-side WebGPU AI detection with ONNX Runtime
- cf46452 feat: add full-stack load testing suite, WebRTC engine pooling, and API response caching
- 89a8722 fix(hls): make watchdog dummy segment independent with clean buffer lifecycle
- 98fba31 fix(hls): strengthen watchdog buffer retention and unify acquire-release lifecycle
- 36d1911 fix(i18n): complete localization for all v2 views, modals, archive, timeline, and ai analytics
- 411b219 fix(lint): resolve errcheck, gosec G115, and revive unused-parameter in ws.go
- 9901650 fix(loadtest): use crypto/rand to eliminate gosec G404 warnings
- 7a28869 fix(models): add verified HuggingFace CDN sources for yolo11m and yolo11s
- a746d88 fix(web): resolve browser tab favicon serving and SVG viewport scaling
- 50d292f perf(backend): use singleflight for concurrent AI model downloads without head-of-line blocking
- 2d17c7e perf(hls, ws): implement zero-alloc playlist generator, zero-copy ARC segment serving, and WebSocket scratch buffer reuse
- 2d4816b style(ui): redesign LanguageSwitcher with next-gen dark-cyber segmented pill design
- 13671f9 style(ui): use authentic Logo component in sidebar and change label to NEXT-GEN
v1.4.0
Release v1.4.0: RBAC, Camera State Machine, Resilience & Performance optimizations
Changelog
- 1d6005e Merge pull request #19 from RUSEGAL/dependabot/github_actions/Schneegans/dynamic-badges-action-1.9.0
- afd49b7 Merge pull request #20 from RUSEGAL/dependabot/github_actions/actions/cache-6
- 3acac14 Merge pull request #21 from RUSEGAL/dependabot/github_actions/crazy-max/ghaction-github-pages-5.0.0
- 926968b Merge pull request #22 from RUSEGAL/dependabot/github_actions/actions/checkout-7
- b5b2298 Merge pull request #23 from RUSEGAL/dependabot/github_actions/actions/setup-go-7
- 22e4ffa build(deps): bump Schneegans/dynamic-badges-action from 1.7.0 to 1.9.0
- 0e43535 build(deps): bump actions/cache from 4 to 6
- dd5ffd1 build(deps): bump actions/checkout from 4 to 7
- 24c6677 build(deps): bump actions/setup-go from 5 to 7
- 714d632 build(deps): bump crazy-max/ghaction-github-pages from 3.1.0 to 5.0.0
- e3367bc chore(web): update favicon.svg
- 16a6cf1 chore: remove accidental local testing artifacts
- 9f44906 ci: fix docker permissions for summary.json export in k6
- 3babb46 ci: fix jq null errors by adding fallbacks in performance workflow
- d19caa0 ci: fix jq paths for parsing k6 summary.json
- 53bdbdb ci: fix k6 action localhost resolution by using docker host network
- 4ce9365 ci: fix missing config.yaml in performance workflow
- 8e3da98 ci: fix missing go:embed web/dist in performance workflow
- edb5c4f docs(api): update swagger spec
- 2a05ec0 docs(engineering): update roadmap
- fed93ee feat(web): update UI, logo, and locales
- 6372057 feat: complete Phase 0 - camera state machine, reconnect backoff, performance optimizations, and test coverage
- d2c5d60 feat: complete Phase 0 Item 3 (RBAC UI, JWT revocation, User Management)
- 6d15f22 feat: complete Phase 0 Point 3 (RBAC and Audit baseline)
- 48bd29e feat: implement missing states and events (recording_failed, storage_warning, bitrate, degraded)
- 6c094df fix: prevent disk usage log spam if recordings folder does not exist
- a5af454 perf: optimize Prometheus metrics binding and add K8s probes
- b1cf823 style: fix revive linter warning on var declaration
v1.3.1
Changelog
- 83db21e chore: final polish (phase 4) - docs, go1.26, zero-copy, cors
- 57a4f9e docs(decisions): fix corrupted markdown in event bus section
- 3a22e64 docs(decisions): fix corrupted markdown in metrics section
- 7c644d6 feat(profiling): implement isolated pprof continuous profiling endpoint
- 55faffe feat(security): implement zero-trust first startup and short-lived stream tokens
- 8d7de5b feat(ui): add TokenAuth toggle to camera forms
- 935b237 fix(api): correct CORS logic to support disabled state and whitelist
- 3824741 fix(auth): handle rand.Read error in password generator
- 4e19b68 fix(lint): resolve gosec and revive warnings for profiling and tests
- 8232b29 fix(recorder): prevent data race and ensure graceful shutdown with WaitGroup
- 9787a06 fix(recorder): resolve WaitGroup deadlock on shutdown using select with context
- ca53f5f fix(test): resolve goroutine leak in ringbuffer benchmark
- 899306f style(test): add continue to empty loop to satisfy linter
- 4900466 style(test): fix gocritic elseif suggestion in cors_test.go
- af64e25 test(bench): add automated Go-Benchmarks for performance tracking
- b7517a0 test(chaos): introduce chaos engineering scenarios for hardware/network failures
v1.3.0
Changelog
- 7347b9c build: add ruseon-cli to goreleaser and CI workflows
- 608b957 chore(ci): fix codecov files parameter and update readme badge
- a48d5ad chore(deps): update go.mod after adding goleak
- e9862dd chore: rename docs to engineering and update gitignore
- 79fa687 chore: track engineering docs despite gitignore
- e628f2a chore: update config examples and README
- f6b4ac5 chore: update gitignore to only ignore root docs folder
- ef1a10b feat(api): add optional Token-Based Authentication for HLS and WebRTC streams
- 367cf19 feat(api): implement swagger docs and live configuration API (Stage 37)
- 0ab1979 feat(cli): add ruseon-cli tool (Stage 38)
- 32dafa2 feat(mqtt): implement asynchronous AI metadata publisher via lock-free ring buffer
- ed559ae feat(storage): optimize BadgerDB GC using samber/ro cron
- b2e377f fix(api): move swagger docs to internal/api/docs to avoid .gitignore issue
- 1431e23 fix(api): unignore internal/api/docs in gitignore and commit swagger files
- 06b2a0e fix(buffer): resolve data race on Reader.NeedsIFrame in RingBuffer.Write
- 190d04d fix(cli): add authentication support to ruseon-cli
- 06b11b4 fix(lint): resolve revive warnings in ruseon-cli and router
- e09f141 fix(storage): use correct rocron.NewScheduler API for BadgerDB GC
- 4ee3b05 fix(test): resolve StreamFrames test timeout by gracefully cancelling context
- c15da84 fix(test): resolve empty-block linter warning in ring_bench_test.go
- c70849b fix(test): resolve unused-parameter linter warnings in chaos test
- 1ecf243 refactor(buffer): replace unsafe.Pointer with atomic.Pointer in LockFreeRingBuffer
- 750eee7 test(buffer): add chaos testing and goleak detection for RingBuffer
- a783290 test(buffer): extract and modernize benchmarks with b.Loop
- e8d3b42 test(e2e): add automated E2E tests using testcontainers