Skip to content

Releases: RUSEGAL/ruseon-core

v2.1.5

Choose a tag to compare

@github-actions github-actions released this 27 Aug 06:12

Changelog

  • 05b63df feat(config): add zero-config auto-generation of default config.yaml on startup

v2.1.4

Choose a tag to compare

@github-actions github-actions released this 25 Aug 08:31

Changelog

  • 60065d9 ci: add Docker Hub publishing for multi-arch images and manifests

v2.1.3

Choose a tag to compare

@github-actions github-actions released this 25 Aug 07:12

Changelog

  • 4407120 refactor: migrate module and all package imports to v2

v2.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Aug 06:20

Changelog

v2.1.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 05:43

Changelog

  • 2520c2b sec(deps): upgrade github.com/moby/go-archive to v0.3.3 to resolve path traversal vulnerability

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 06:34

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

Choose a tag to compare

@github-actions github-actions released this 16 Aug 06:23

🚀 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.0

Changelog

  • 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

Choose a tag to compare

@github-actions github-actions released this 13 Aug 13:42

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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 13:20

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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 10:26

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