AirCast

Releases

Download the latest AirCast Raspberry Pi images and view version history.

v1.2.4-dev.30

Latest
March 17, 2026

v1.2.4-dev.30

Changelog

  • 2e7924frefactor: auth simplification, ABR improvements, modem recovery, SFU health
  • 51fc71afix: worst-case subscriber quality merge and RTCP diagnostic logging

v1.2.4-dev.29

March 17, 2026

v1.2.4-dev.29

Changelog

  • 95b97b9refactor: collapse plugin system and remove unused codecs
  • 5a38174test: add PLI rate limiting and keyframe replay throttle tests
  • 4da35f5fix: add PLI rate limiting at track and stream layers to prevent PLI storms
  • 2037593feat: add ICE restart as fast reconnect path with jitter backoff
  • acd0a0cfix: keep RTCP RR TotalLost consistent with local sequence tracking
  • 5a91e2afeat: add camera HTTP proxy handler for remote camera UI access

v1.2.4-dev.28

March 16, 2026

v1.2.4-dev.28

Changelog

  • c000459fix: use SSH connectivity check instead of ping for deploy preflight
  • fbc90b0feat: add media quality logging — FPS drop detection, GCC bitrate change visibility
  • c733092feat: relay RTCP receiver reports from P2P viewer to camera
  • 2c09510fix: bandwidth limiter gate unreliable — use time-based grace period
  • a3b334ffix: P2P bandwidth limiter not dropping frames
  • 6f8561drefactor: downgrade webui and utility logs to appropriate levels
  • 807dec5refactor: migrate remaining scattered logs to canonical events
  • f51039erefactor: downgrade noisy Info/Warn logs to Debug
  • ef7b753refactor: migrate remaining scattered logs to canonical wide events
  • f1c242crefactor: migrate all scattered logs to canonical events

v1.2.4-dev.27

March 16, 2026

v1.2.4-dev.27

Changelog

  • c000459fix: use SSH connectivity check instead of ping for deploy preflight
  • fbc90b0feat: add media quality logging — FPS drop detection, GCC bitrate change visibility
  • c733092feat: relay RTCP receiver reports from P2P viewer to camera
  • 2c09510fix: bandwidth limiter gate unreliable — use time-based grace period
  • a3b334ffix: P2P bandwidth limiter not dropping frames
  • 6f8561drefactor: downgrade webui and utility logs to appropriate levels
  • 807dec5refactor: migrate remaining scattered logs to canonical events
  • f51039erefactor: downgrade noisy Info/Warn logs to Debug
  • ef7b753refactor: migrate remaining scattered logs to canonical wide events
  • f1c242crefactor: migrate all scattered logs to canonical events

v1.2.4-dev.26

March 15, 2026

v1.2.4-dev.26

Changelog

  • c4b0b27feat: add trace context to canonical events and migrate network lifecycle logs

v1.2.4-dev.25

March 15, 2026

v1.2.4-dev.25

Changelog

  • 79d8781feat: add canonical log lines for wide event observability

v1.2.4-dev.24

March 15, 2026

v1.2.4-dev.24

Changelog

  • 3b204d1feat: WebRTC GCC bandwidth estimation, SFU reconnect scheduler, and web UI improvements

v1.2.4-dev.22

March 14, 2026

v1.2.4-dev.22

Changelog

  • be30d1bfeat: auto-create SFU routes for all sources alongside WebRTC
  • 7f2751efeat: add default SFU destination on boot

v1.2.4-dev.21

March 13, 2026

v1.2.4-dev.21

Changelog

  • b130e6ffix: modem monitor and websocket error improvements
  • 33e0d4efix(rtsp): improve backoff reset test to measure elapsed time from actual connection drop
  • 50ef663fix(websocket): add structured error types and expand RTSP/pipeline tests
  • 86025affix(modem): improve recovery logic and expand modem monitor tests
  • d6e1f26fix(scripts): support user@host PI_HOST format and handle SSH drops during deploy
  • 58aa0e6feat(e2e): add mock network interfaces support and allow re-scanning cameras
  • 5f247f5feat(discovery): fall back to subnet scan when specific camera IP probe fails
  • b124477fix(network): remap Ethernet interface states for clarity
  • a7d61defix(stream): improve consumer error logging -- context cancellation is debug, not error
  • 6c6c13afeat(network): reset WebSocket backoff on modem reconnect for faster recovery
  • 61bd7cdrefactor(abr): move rate limiting from CameraController to ABR coordinator
  • 912df49refactor(media): change MediaSource.Status() return type from string to SourceStatus
  • 74558dafeat(media): add RTSP source auto-reconnect and pipeline source-driven recovery
  • dc29ddbrefactor(mavlink): introduce ConnectionStatusTracker as single source of truth for connection state
  • c949503refactor(websocket): replace listener map with typed callbacks, remove health monitor and stats collector

v1.2.4-dev.20

February 8, 2026

v1.2.4-dev.20

Changelog

  • e67fe64chore: miscellaneous improvements and fixes
  • b5cdd40feat(providers): add source health tracking for media routing
  • 4fe3044feat(webrtc): improve WebRTC session management and stability
  • ebf5479refactor(auth): improve OAuth2 token refresh flow
  • 5e1e31dfeat(rtsp): improve RTSP error handling and UDP timeout detection
  • b31f32ffeat(mavlink): add connection flapping detection and stability improvements
  • f781b6ffeat(mavlink): add real-time connection status events

v1.2.4-dev.19

January 31, 2026

v1.2.4-dev.19

Changelog

  • b3e824arefactor(discovery): separate local and network discovery into packages
  • 53a14f8feat(e2e): add mock support for camera interfaces and network analysis

v1.2.4-dev.18

January 27, 2026

v1.2.4-dev.18

Changelog

  • c731685fix(mavlink): detect TCP/UDP channels wrapped in EndpointCustomClient

v1.2.4-dev.17

January 27, 2026

v1.2.4-dev.17

Changelog

  • 6d95fbctest(system): add unit tests for auto-update functionality

v1.2.4-dev.9

January 26, 2026

v1.2.4-dev.9

Changelog

  • 29fab7dfix(modem): reconnect D-Bus after ModemManager restart
  • 83f3f8frefactor(handlers): consolidate error codes and enhance WebRTC logging
  • 4a32137fix(sources): refresh cached source after config update
  • bbeea1efix: handle invalid_credentials error in auth retry loop
  • aee1799fix(rtsp): handle UDP transport issues with auto-fallback to TCP
  • d59a481fix(auth): add invalid_credentials to auth error types
  • 4d32801test(auth): add test for invalid_grant credential clearing
  • 479f558fix(auth): clear tokens after 3 consecutive 401s instead of 10
  • 0861373feat: add cellular auto-connect when modem becomes registered

v1.2.4-dev.15

January 26, 2026

v1.2.4-dev.15

Changelog

  • bef2609feat: make auto-update trigger immediately
  • 5cd7f44fix(mavlink): correctly identify TCP/UDP channels wrapped in EndpointCustomServer

v1.2.4-dev.14

January 26, 2026

v1.2.4-dev.14

Changelog

  • 85d2c1achore: add SystemHealthProvider implementation to StatusMonitor

v1.2.4-dev.11

January 26, 2026

v1.2.4-dev.11

Changelog

  • 852380ffix: detect environment from API host when no state file

v1.2.4-dev.10

January 26, 2026

v1.2.4-dev.10

Changelog

  • 6651fa1feat: enable auto-update for dev environment profile

v1.2.4-dev.8

January 25, 2026

v1.2.4-dev.8

Changelog

  • e63159dfix: use update-first approach for Aptly publish

v1.2.4-dev.7

January 25, 2026

v1.2.4-dev.7

Changelog

  • e63159dfix: use update-first approach for Aptly publish

v1.2.4-dev.6

January 25, 2026

v1.2.4-dev.6

Changelog

  • 0f69742fix: register connectivity_checker before NetworkManager check

v1.2.4-dev.5

January 25, 2026

v1.2.4-dev.5

Changelog

  • 0f69742fix: register connectivity_checker before NetworkManager check

v1.2.4-dev.4

January 24, 2026

v1.2.4-dev.4

Changelog

  • 665d30fci: use self-hosted runners for all workflows
  • 8436e39ci: use self-hosted runners for docker workflow
  • 89ba915refactor: improve architecture with error logging and layer separation
  • 392bb9dfix: add device heartbeat to prevent stale session detection
  • 00770d1Add end-to-end latency logging for video pipeline debugging
  • 9cc9c67feat(helm): add secretEnv support for secret-based env vars
  • 62448a6Add auto_connect option to mavlink.config.create handler

v1.2.4-dev.3

January 23, 2026

v1.2.4-dev.3

Changelog

  • 169f310chore: update aircast-sdk with IsClosed connection fix
  • 2c97625test: add integration tests for IsClosed connection state fix
  • 38a510ffeat(auth): add E2E token support for simulator authentication
  • 9147771refactor(mavlink): simplify rate control and improve connection handling
  • c8b8c52fix(websocket): detect temporary disconnections in IsClosed() for queue flush
  • d8850a0fix(mavlink): prevent connection cycling with grace period for new connections
  • d9b764ffeat(mavlink): add filter stats to rate control ack
  • 67679b5feat(mavlink): add dynamic WebRTC endpoint registration and datachannel events
  • 6126466fix(mavlink): enable WebRTC telemetry forwarding for all connection types
  • f6dc6ccfeat(mavlink): add receiver-driven rate control
  • f872564chore: trigger auto-deploy test
  • c2f1696Add modem signal quality to WebSocket reconnection logs
  • 52f2386refactor(mavlink): require explicit API host/port configuration
  • f2a59d4fix(mavlink): prevent duplicate connection race condition
  • dba1d06fix(mavlink): enable congestion monitor for all connections
  • 1f73055feat(mavlink): wire congestion broadcaster and refactor MAVLink internals
  • 038b45drefactor(webrtc): use constructor injection for session context
  • 532ee91fix(websocket): make unknown errors recoverable to prevent reconnect loop exit
  • f0ff96cfeat(mavlink): add adaptive rate control for WebRTC congestion
  • 6d082barefactor(keyring,activate): add tracing and fix code review issues
  • ac3f2b5feat(keyring): add migration from legacy paths on startup
  • e7761a5fix: start hotspot when device is not authenticated

v1.2.4-dev.2

January 18, 2026

v1.2.4-dev.2

Changelog

  • 31136a9fix: fail release if Pi image build trigger fails
  • f912020fix: correct OTEL collector endpoint for development

v1.2.4-dev.1

January 18, 2026

v1.2.4-dev.1

Changelog

  • 33ae628ci: add Telegram notification on test failure
  • 1d0b9faci: add Telegram notification on release failure
  • b1f5756ci: use PAT_TOKEN for cross-repo cleanup
  • 115056fci: add pi-gen release cleanup to workflow
  • 6a21fd5ci: add GitHub release deletion to cleanup workflow
  • 0d24924ci: add git tag deletion to release cleanup workflow
  • bece220ci: add manual trigger to release cleanup workflow
  • 110a8f5ci: add workflow to cleanup S3 on release deletion
  • 614c76ffeat: add release.delete command to remove releases
  • 88c6aa0fix(modem): move nosec directive to line above for gosec recognition
  • 2f4318afix(modem): correct nosec comment format for gosec linter
  • 4dce103fix(modem): resolve gosec and unparam lint issues in recovery service
  • 11dfee4fix(deps): remove local replace directive and update gomavlib to v3.3.1-aircast.3
  • 0574437feat(modem): improve ModemManager recovery with active polling
  • e5c268echore(scripts): add Pi reachability check and udev deployment
  • e114564chore(debian): improve udev rules installation
  • 18b0325feat(webui): improve WiFi configuration interface
  • fcfd8a2feat(system): add network health tracking to status monitor
  • 2ff3e9bfeat(network): integrate connectivity state machine
  • 0d22766feat(system): add modem monitoring and connectivity state machine
  • 3a4db3ffeat(logging): integrate disk buffer with LokiHook for offline resilience
  • d38397bfeat(logging): add disk buffer for offline log persistence
  • 1342d9ffeat(webtransport): add direct connection mode and separate host config
  • 3f8682cfeat(auth): improve authentication and environment handling
  • 11bd93afeat(tls): add TLS support for local development connectivity
  • b1ce6c4feat(env): add multi-environment switching support
  • b4dfa69feat(sfu): add exponential backoff retry for SFU publish failures
  • b61d811feat(tailscale): decouple from auth - start on boot before authentication
  • 51e15e4feat(tailscale): keep connection alive when auth logs out
  • d1bb79efix(tailscale): prevent duplicate device registrations on transient failures
  • 503e230Use templated app label in deployment
  • abe108fdocs(webtransport): add configuration documentation
  • 9ea8b18feat(mavlink): add WebTransport endpoint support
  • 93ddcceIncrease SFU unhealthy loss rate threshold to 50%
  • b0458bechore: migrate gomavlib imports to aircast-one fork
  • b44b378feat(auth): generate drone-themed device names during bind
  • 335eee1feat(siyi): add SIYI gimbal/camera WebSocket control
  • 9bcd348fix(mavlink): increase WebRTC queue and non-blocking writes
  • a75503crefactor(tailscale): use managed service pattern with device ID isolation
  • 3b74b86feat(update): add apt progress streaming and fix stale cache
  • e1895c0fix(cellular): wait for modem registration before connecting
  • c857b4ffeat(tailscale): add SSH forwarder and use device ID as hostname
  • 7804042fix(update): improve update detection with proper version comparison
  • 7543c85feat(rtcp): add comprehensive RTCP observability with bitrate tracking
  • b7e03bdfeat(logging): add wide event logging to webui handlers
  • 849e8a2fix(e2e): fix TOCTOU race in EventEmitter WaitForEvent
  • be08921fix(ci): pin Go version to 1.25.5 to fix cache mismatch
  • 7740a21refactor(media): rebuild pipeline architecture with auto-detect ABR
  • 5a2f80efeat(media): add pipeline plugin architecture for ABR
  • a166fa0refactor(system): improve logging for system update event broadcasting
  • 0003a65feat(tracing): add write stall detection with tracing for outgoing track
  • 4d19032fix: register http_client dependency in SFU provider tests
  • 60b97eechore: run lint and format only on staged files
  • 12fb9c2refactor(infrastructure): remove unused OpenIPC and WebRTC code
  • 637e0e7refactor(media): remove unused bitrate clamping and camera detection
  • 46307ccfix(tracing): improve OTLP endpoint parsing for TLS detection
  • 2648dcdfeat(mavlink): track connection errors in status response
  • 8e3ce78feat(updates): add update orchestrator for safe self-updates
  • 4256de2feat(tailscale): add status types, config, and node ID reporting
  • 9ad6746fix(auth): handle no_credentials error to stop retry loop gracefully
  • d248c99feat(events): add configurable buffer size to event bus
  • 399e6ebfeat(config): add duration and integer helpers to environment config
  • eb3a78drefactor(websocket): simplify reconnector with proper circuit breaker
  • f6fe577feat(sfu): add Tailscale routing support for WebSocket client
  • ab277b9refactor: update remaining components for consistency
  • b532a26chore: remaining ClientProvider adoption and system updates
  • c31a1d6refactor(media): improve SFU publisher and consumer lifecycle
  • 73d1dc0refactor(mavlink): use ClientProvider for MAVLink WebSocket
  • bfc3183refactor(websocket): use ClientProvider for WebSocket dialing
  • dd15e2frefactor(webrtc): use ClientProvider for ICE server fetching
  • 2c33cabrefactor(network): use ClientProvider for connectivity checks
  • 41efc10refactor(logging): use ClientProvider for Loki HTTP requests
  • 3c4fce1refactor(auth): use ClientProvider for HTTP requests
  • ca3d612feat(tracing): route OTEL metrics and traces through Tailscale
  • 5fcd48bfeat(http): add ClientProvider for Tailscale HTTP routing
  • ec39830refactor(logging): adopt wide event pattern for SFU reconnection
  • 71dd284fix(sfu): move consumer stopping from scheduleReconnect to attemptReconnect
  • 8cf8bf0feat(logging): add wide event logging for packet drop diagnosis
  • e6a9b0ffeat(abr): add wide event logging following loggingsucks.com pattern
  • f18af76fix(abr): detect OpenIPC cameras by name instead of source type
  • 2530e5dfix(health): preserve RTCP-reported RTT and loss rate in collectStats
  • a23e3aefeat(logging): add wide event logging for WebRTC stats
  • 7189ad8feat(logging): add wide event logging for WebSocket reconnection
  • e93b767feat(rtcp): implement RTCP feedback and media pipeline improvements
  • 470106dfeat(sfu): detect connection failure via write errors for faster disconnect
  • 4cb772bfix(helm): correct OTEL metrics endpoint service name
  • 9588590fix(sfu): stop consumers during reconnection to prevent buffer overruns
  • 5021e2cfix(ice): fix broken HTTP fallback and increase timeout
  • 34b5318ci(docker): remove arm64, build amd64 only
  • f6ab16eci(docker): build amd64 only for develop branch
  • afa1798feat(network): add SimulatedCellularManager for simulation mode
  • 13a5130fix(webui): handle nil interfaces in StatusCache to prevent panic in simulation mode
  • 887c0c2fix(sfu): mark connection as disconnected on request timeout
  • bb0f182fix(media): recover from error state in StartSource
  • 7ad2bb2fix(sfu): restart consumers on WebRTC reconnection
  • a0fe181feat(stream): add consumer Restart() for WebRTC reconnection
  • 826d0e7fix(counterdumper): make Start/Stop idempotent and thread-safe
  • 945e00afeat(webrtc): add ICE_FORCE_RELAY support for STUNner
  • 9158832refactor(webui): split setup_handler into domain-specific handlers
  • 422a6ccrefactor(webui): split setup_handler into domain-specific handlers
  • be206derefactor(webui): remove adapter pattern, use domain types directly
  • 913d2c1refactor(webui): query cameras directly instead of caching
  • a251048feat(webui): implement GetCameras to fetch from database
  • 5745ebcfix: move SIMULATION_RTSP_URL to environment-specific patches
  • 7845db9feat(simulation): add RTSP camera seeding for simulation mode
  • 6de1c81feat: use GitOps dispatch for automatic sync
  • 1f806a3chore: update Chart appVersion to v0.0.0-dev-a62eaac [skip ci]
  • a62eaacfix: make gitignore patterns root-relative to allow helm/aircast-agent
  • 6c7263cfix: auto-update Chart appVersion after Docker build
  • 383d041chore: update Chart appVersion to latest build
  • 0abe634fix: resolve staticcheck SA5011 in reachability checker test
  • 9b21cc1fix: handle nil cellular manager in handler and provider
  • b149011fix: resolve staticcheck SA5011 false positives in tests
  • 31395e1fix: handle nil connectivityChecker interface in auth handler
  • 2aabdb1feat(simulation): add K8s simulation mode for USB, modem, and MAVLink
  • 61b396ffix(helm): update appVersion to latest build
  • b279536fix(helm): correct image repository and version
  • cd3312echore(helm): update appVersion to v1.2.4-dev.6
  • e9b4a05fix(sfu): add sfu url to all envs
  • 23666e0feat(onvif): remove onvif media source
  • e318c4ffeat(rtsp): add automatic discovery handlers
  • 70c625ffeat(tracing): improve sampling and timeouts
  • 83f72b2fix(e2e): use atomic send-and-wait pattern to eliminate race conditions
  • a5cf3e8fix(lint): remove redundant nil checks in provider tests
  • 2973d76ci: use PAT_TOKEN for GHCR access
  • 8195291ci: add GHCR credentials for aircast-sfu service
  • bc8f587fix(sfu): add WaitGroup to ensure goroutines stop before reconnect
  • b49c8fbfix(test): fix data race and SFU test configuration
  • f9a5c6efix(test): mockDeviceLinux returns default driver for tests
  • cb310d8fix(test): add missing Linux mock types for network package tests
  • 9b8a211feat(tailscale): migrate from CLI to embedded tsnet
  • 226a721feat: add Tailscale integration for automatic network join
  • d757545fix(ci): make .env include optional in Makefile
  • 6191a68fix(media): prevent RTSP destination from dying after startup
  • afec12afix(release): redirect warnings to stderr to prevent version corruption
  • 2527cafci(docker): align workflow with aircast-api pattern
  • 03fd915feat(tracing): add session-level span for SFU connections
  • 51fac56feat(tracing): add OpenTelemetry spans to media pipeline
  • 58b559bfix(e2e): prevent race conditions in route tests
  • 49c7a58feat(tracing): add session-level traces to P2P WebRTC handlers
  • 769cb5dfeat(tracing): link offer/answer/ICE in single session trace
  • f6b809bfeat(tracing): add distributed tracing to SFU WebSocket client
  • 85b3709Remove verbose heartbeat debug logging
  • be22e92feat(tracing): add trace context propagation for events
  • a101ba3build: update Tailwind CSS output
  • 5f51750refactor: improve WebRTC debugging and stream attachment
  • f857b9afeat: fetch ICE servers from API with caching
  • 1951444fix: use routeID as pipeline ID for uniqueness
  • 85ed9f0feat: add error tracking to media sources
  • 2b16770feat: add waiting_for_drone status to MAVLink connection handler
  • 5806a12refactor: improve logging field handling and reduce noise
  • f970424chore: tune message queue for better memory management
  • ae8f433fix: prevent log spam on media consumer context cancellation
  • 23b3aa3chore: downgrade MAVLink frame logs from debug to trace
  • 9f63e6dfix: add timestamp to session IDs and include session ID in track IDs
  • 8ea95fcfix(mavlink): prevent GCS heartbeat echo causing UI state flicker
  • 8cd033brefactor(discovery): code review fixes
  • aad1b8brefactor(discovery): unify RTSP path lists to CommonRTSPPaths
  • 2ab3c7drefactor(discovery): use CameraTypeRegistry for manufacturer detection
  • 8150b22refactor(discovery): consolidate camera ID generation to shared function
  • 6e29d61fix(rtsp): auto-refresh stale tokens and fix device_id mismatch
  • 781d16crefactor(discovery): extract shared RTSP utilities and camera type registry
  • 20828efrefactor(discovery): extract reachability and RTSP validation to discovery package
  • 6c1c9adAdd clearer logging for MAVLink command forwarding and fix network build
  • f8af8b9feat(network): add granular connectivity status for better diagnostics
  • a941208fix(e2e): increase MediaRouteSelectSuite timeouts to 5 seconds
  • b461127fix(e2e): improve MediaRouteSelectSuite test stability
  • 0c1986bfix(e2e): improve test stability with event-driven waiting
  • 388a029refactor(sfu): remove dead API proxy code paths
  • 3b03701refactor(sfu): remove API proxy fallback, use direct SFU connection only
  • 2381b5aRename publisher_ready to room_ready
  • 7eab2adrefactor: update tests for publisher_ready event rename
  • 45054edfix(sfu): resolve deadlock preventing media tracks from flowing
  • a200802Add ICE connection state change handler for faster SFU disconnect detection
  • 6db4eacfix(sfu): auto-start routes when web client connects
  • 4f51c01fix: restore network.camera.analyze handler from master
  • 08bac8cfix(modem): remove build constraint to enable simulated modem on Linux
  • 415a225refactor: clean up dead code and naming inconsistencies
  • 0c7bec9refactor(media): remove dead code duplicates from domain/media
  • 6f4fcd9refactor(rtsp): consolidate duplicate RTSP implementations
  • ab99997refactor(webrtc): consolidate duplicate WebRTC implementations
  • c2194b8refactor(session): decouple WebSession from WebRTC
  • 79d5218fix(webrtc): correct session ID field names in logs
  • 9bac615refactor(media): apply SOLID principles to media pipeline
  • 8236edefix(e2e): use namespaced keyring keys for auth token seeding
  • 1c3b24frefactor(media): eliminate MediaPipeline abstraction and fix goroutine leaks
  • 6bc2224fix(handlers): update ABR stats mock to use proper type
  • 01e1fa5chore: misc infrastructure and test improvements
  • e247f2ddocs: add protocol documentation for Betaflight MSP and SIYI SDK
  • 1debc14refactor(session): improve session and WebRTC handler management
  • 48113fbrefactor(providers): improve provider and service architecture
  • 3e4b0dafeat(webui): add RTSP camera management to web UI
  • 7e15223feat(auth): improve token refresh and auto-clear behavior
  • 2041bc6refactor(media): improve RTSP source and stream handling
  • eb698carefactor(abr): improve adaptive bitrate implementation
  • 4e7171arefactor(discovery): improve IP camera discovery architecture
  • c5bfe26refactor(events): replace broadcaster with event bus
  • e90a763feat(mavlink): add transport configuration support
  • 839901etest(services): add IPCameraScannerManagedService tests
  • 9ddcb3atest(providers): add MediaProvider registration tests
  • 381d58brefactor(discovery): add network abstractions for testability
  • 6e29367refactor(handlers): improve WebSocket handler testability
  • 33fa221Merge branch 'master' into develop
  • f43783eupdate styles
  • fd37413please use Ethernet for ip search
  • c75d6a6feat: add RTSP camera management to web UI
  • 5b98593refactor abr implementation
  • cf1e02bchore: add bin/ to gitignore
  • c56f600fix: only use RTT from nominated ICE candidate pair
  • 9ed77eefix: clean up stale stream sessions on browser refresh
  • 8dc9849feat: add IP camera auto-discovery with RTSP validation
  • ad87f3afix: local deploy IP auto-detection when LOCAL_IP not set
  • 8f97d1dchore: reduce log verbosity and remove emojis
  • db536a9refactor: extract Makefile logic into shell scripts
  • 645fbbbpush debug logs to loki too
  • 7716f08add PLI forwarding and automatic ICE restart for video recovery
  • c131b7frefactor: decouple ABR from OpenIPC using Clean Architecture
  • 51193a7add GCC bandwidth estimation to ABR system
  • 0beb147add abr
  • 55f5895add abr
  • 1ead764add NewTestKeyring helper for auth tests
  • c5dd2c5add tracing to remaining websocket handlers
  • f25fc0ffix my envs for tracing
  • 4419ee8add tracing to websocket handlers
  • 817fda7fix my envs for tracing
  • 117041ffix auth logout issues
  • 272e336reformat websocket imports
  • c638a4breformat mavlink imports
  • 176eb35downgrade registerLifecycleHooks logs
  • 38d0482add clock testing package
  • 5bdd986fix http server boot sequence
  • 4c6d0b4add DATABASE_PATH environment override
  • 9c6561dfix oTEL tracing
  • b86a1c2add metrics
  • e96f8f5fix nil pointer panic in camera network service registration
  • 722d652extract camera network analysis to domain layer
  • 28b9104fix cellular connection failing after modem re-enumeration
  • de212bffix clipboard copy for non-secure contexts (HTTP)
  • 0a8a73bremove network dependencies from service file
  • 667ab4dfix release version detection to use stable tags only
  • 1d8bb17fix hotspot creation with legacy addresses format
  • 8b932a9improve connectivity checker
  • 723a41ffix release.stage to strip existing prerelease suffixes
  • 4f345c2rename version.* to release.* and remove confirmation prompts
  • e7043d1add stage tag support to release workflow
  • 4655389add version.stage target
  • 67c0e0ffix version targets to push only specific tag
  • d7d185eadd new webui interface
  • f20a4b5improve logs page with infinite scroll and mobile layout
  • d65604bsimplify pi-gen trigger (remove VERSION file sync)
  • 639622dauto-update pi-gen VERSION file on release
  • 45012bffix goreleaser env file mapping for stable/testing distributions
  • f6fc30eadd staging tag support (v1.0.0-staging.1)
  • 8857f1ccombine production and development workflows into single release.yml
  • 8efa79cupdate pi-gen trigger to use build-development-image event
  • cb4e8afsimplify Pi image trigger to use distribution only
  • 218165atrigger Pi image builds for RC releases
  • 6f967b7add RC release support to production workflow
  • 7756e16refactor wifi scanning to non-blocking API
  • b7511beadd new webui interface
  • 1f27cedfix hotspot reconfiguration
  • fcb4fc9add get typed container config
  • 182af91add ignore ipv6 routes
  • d0578b1ignore ipv6 to prevent reconnections
  • 85cc5dcfix serial autoconnect
  • bc767b5fix: update aircast-pi-gen repository to aircast-one organization
  • b2538b4fix: set route-metric for ethernet and prevent hotspot default route
  • 370c1d1fix: update goreleaser owner from pavliha to aircast-one
  • dfaf711refactor: event-driven NetworkManager route management with D-Bus signals
  • 6a9109ffix: validate route-metrics on device changes to handle boot race condition
  • 9055d5brefactor: remove disabled RouteMetricManager code
  • 0ed7d48fix fps count
  • 039722dfix: prevent USB ethernet (cameras) from creating default routes
  • 243abb5fix: deduplicate MAVLink devices and add auto-baud rate detection
  • cad2a04fix route managment
  • f4ec066refactor: reduce connectivity checker log noise
  • 56cf3c4fix: preserve existing network settings when updating route-metrics
  • 037c35dRefactor route metric manager to use event-driven architecture
  • 9a81290Fix route metric manager to use NetworkManager API for modem detection
  • b9ad88bfix: automatic token refresh on startup prevents auth expiration after restarts
  • 2df0acdMerge branch 'feature/automatic-route-managment'
  • b2fb92dfeat: add automatic route metric management for plug-and-play modem support
  • 4205450fix: auto installation of rpi camera
  • f7fead1feat: add HTTP-based modem support for MegaFon M150-4 (05c6:f00e)
  • 8d39f41refactor: add event broadcaster to media system and update deployment
  • a1df47dfix: resolve WebUI timeout errors and optimize page load performance
  • 0a54266Merge branch 'develop'
  • 7ebbd11update sdk
  • 1b4653fupdate network fix command
  • 374fd23refactor: standardize logging field names for consistency
  • 76309bbfeat: add comprehensive tracing and OTLP configuration for agent
  • 8171f09fix source manager release bug
  • 076fdcfMerge pull request #15 from pavliha/develop
  • d9e8bbcadd WebRTC video track metrics for latency debugging
  • 7e7f2dafix: resolve test deadlock in WebRTC session manager
  • 5878556feat: add system.ping websocket action for health checks
  • 83f49f4fix: resolve WebRTC high latency issue caused by route removal
  • 4bd1af0feat: add NAT masquerading and IP forwarding for cellular connections
  • 7a241bbfix: resolve WebRTC test failures and lint issues
  • ad92a7cchore: disable cyclop linter
  • f2a0d29fix: improve WebRTC session error messages and tracking
  • 1507386fix: prevent UDP socket leak in WebRTC sessions
  • 49595f6cleanup code
  • 73877adupgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 0b62991upgrade github.com/pavliha/aircast-sdk v0.2.1-dev.2
  • 2ad7f7erefactor: simplify E2E test suite with sensible defaults
  • f3bafcffix: implement low-latency buffer with drop-old strategy to resolve video latency accumulation
  • fc419effix: include WebRTC offer in session create response to eliminate timing issues
  • a38af6bfix: include WebRTC offer in session create response to eliminate timing issues
  • 8a5789dfix: resolve UDP source race condition in connection handling
  • d6a1156fix: resolve race condition in UDP source connection handling
  • e01e9b7fix: resolve all lint issues and improve code quality
  • 1ee7f99fix: resolve type assertion and interface implementation issues
  • 38b57d0fix: use correct Aptly force-overwrite flag instead of invalid config property
  • d5ec49afix: allow overwriting existing files in Aptly S3 configuration
  • 4a97e1bfix: use specific event type for production Pi image builds
  • 27322ddupdate: trigger Pi image build from main branch for production releases
  • d59a54bupdate: align production workflow with development structure
  • fa9a759Merge branch 'develop'
  • 5e4d7edfix: always attempt token revocation on logout
  • 3596e18fix: handle missing refresh token properly to force re-authentication
  • cc5e087fix: resolve WebRTC session race conditions with device.session.ready event
  • b132620refactor: update relay infrastructure and WebSocket handlers
  • b08fe57chore: update to use any instead of interface{}
  • a05197ffix: ensure WebSocket connects on startup for authenticated devices
  • e88959bfix: add automatic network route management and WebRTC session cleanup
  • 206817cfix my turn server url
  • ce05d49feat: remove nginx dependency from Debian package
  • 322f497chore: update dependencies and build improvements
  • 5892c1dfix: resolve stream sharing conflicts and improve codec negotiation
  • c9b8d2bfix: improve RTSP and media processing debug logging
  • efa1c91fix: improve RTSP error reporting and remove redundant events
  • 5e968cdfix: prevent udevadm process leaks in camera monitor
  • 4c41b41fix: update WiFi configuration text to reference drone capabilities
  • b3d3173feat: add camera and MAVLink status display to home page
  • f156e86fix: improve system logs page layout and handling
  • 339815afeat: implement in-memory log storage and fix PPP route parsing
  • a69de52add system logs page
  • d57c380feat: enhance cellular UI with real-time data and internet connectivity tracking
  • 3f5b594feat: add configurable HTTP port and HTTPS redirect support
  • 8ce473ffeat: implement udev-based camera monitoring to replace polling
  • 5a57513add pi camera support
  • 5d2674ffeat: add automatic Raspberry Pi camera detection and streaming
  • a000b8ffeat: add Raspberry Pi camera support
  • 3128899feat: add UDP video source support
  • 4b3a2b9Merge branch 'refs/heads/feature/udp-video-source' into develop
  • e540dccadd permissions check
  • d6d6e33Add USB hotplug monitoring for MAVLink devices
  • 003a063Fix TURN server 400 errors and improve WebRTC ICE handling
  • 0f86405fix connection issues
  • b1f99e9feat: add UDP video source support
  • 0fa8567update templ
  • dbf8c1aapply auth logout fixes
  • 977e781apply hotspot fixes
  • 0a13de4fix deprecation
  • 373178dadd rebuild trigger
  • 34dec55add cellular status indicator
  • 8f09880downgrade logs
  • 7756bc9add connectivity error handling
  • 140ca03update login ui
  • fd23995update on device login flow
  • 06a94acfix auth token
  • f6e5e7fadd terminal support
  • 96ebda3fix hotspot
  • 1f86d90fix wifi service unavailable
  • c518bbefix nginx service
  • 0a260fbfix autoconnect service
  • a247a00use dialect
  • ae02be1remove command sender
  • 0c9eac5fix auth expiration
  • 7828964fix auth expiration
  • f97b717save mavlink
  • bd5bfa9fix do reposition command
  • 5f4ce5ause new send command approach
  • 20f3787use new send command approach
  • 6baae24add message throttle
  • 3631f4asave telemetry messages refactor
  • 2dffcb4remove sitl
  • a5d47c2fix webrtc signaling
  • 4234acffix turn servers
  • e5af64cMerge remote-tracking branch 'origin/develop' into develop
  • 0732749remove usage of aircast sdk types
  • 4dfbaccrefactor message handlers
  • e44ee75fix hotspot ip address order
  • 86676d2add more stun servers
  • 81b217efix ice candidate support
  • 84ad5c4update default ice servers
  • a3c97a9add interfaces' cleanup
  • f6773e1fix turn server
  • 7a056c7remove update check
  • fb341d1add hotspot start
  • b183b5aadd hotspot start
  • 6e6de2dadd hotspot start
  • 48e466bfix websocket reconnection
  • 8173947update .gitignore
  • 235c3f2fix release
  • 99b40a8fix database migrations
  • 0e86221update print config
  • 4c0fd29reduce logs verbosity
  • 0923529add token refresh
  • bbc7695fix telemetry errors
  • 381be2dfix media pipeline errors
  • 90ff565resolve circular dependencies
  • f6c21ffintermediate save
  • c812784refactor mavlink telemetry auto setup
  • 9163ccfrefactor mavlink
  • 90bebf6resolve warnings
  • 0d9c4dbadd system handlers
  • fa7f7c3add more network handlers
  • 1b1291bfix agent networking
  • b45f6d8add cleanup
  • 6c9c0fbconsolidate mavlink component
  • 3d861cdadd mavlink autoconnect
  • 4e262f6add cleanup functions
  • e560613add auto webrtc destination fill in
  • 9d7598eadd auto hostname fill
  • 73c32f4add auto token refresh
  • e339fa2rename websocket route
  • 022782ffix exit states
  • 5a40268remove app state
  • 194d2b9fix loki logging
  • bd8ca36simplify logging
  • 825b0b2Merge pull request #12 from pavliha/feature/AIR-40-update-device-auth
  • 89d4d38[AIR-40] fix logout
  • f0bf578[AIR-40] update service handlers
  • a359d77[AIR-40] fix logging
  • af31dcd[AIR-40] fix websocket state management
  • e020c5e[AIR-40] fix auth lifecycle
  • 728d641[AIR-40] add token revocation
  • c264ad1[AIR-40] fix device auth flow
  • f97a490[AIR-40] update auth flow
  • aead670[AIR-40] fix connection messages
  • 44f464d[AIR-40] update device sign in flow
  • 5556081fix sitl
  • 42ab75frun systemd service as root
  • 5f52b4ffix systemd service
  • cba5a3dfix active connections
  • fa7aa69add handlers
  • 1773e4crename copy in frame.go
  • a378baefix delete logic
  • 3ad9ec8add mavlink feedback
  • f1c0da1fix development build
  • 78d9736fix development Makefile
  • 1ef9b56fix development ci
  • 3f9b5b1fix network manager
  • 216276bmake network manager cross platform
  • cf3771bsave refactor for now
  • c03fd58fix sign in url
  • f5be9e3update permission
  • 487ffe4fix loki setup
  • dbe3279fix a database path
  • 7ebf609fix config and environments
  • 218352ffix network provider
  • 1307046fix environments loading
  • 69b03abfix migrations
  • b07721fadd gpg signin back
  • 8bb6c50fix ci build
  • f881133[Air-000] add modem manager (#11)
  • 46e1ea9fix ci build
  • 50745e3fix ci build
  • 9da6dccfix ci build
  • 4cd942arefactor application bind phase
  • 4046c75fix release as systemd
  • eecf436[AIR-32] add private module support
  • 15ad5f8[AIR-32] add private module support
  • 3943183save bind changes
  • efd5b84remove mdns
  • 2a00a1ffix wifi bind mode
  • 1d3c608[AIR-32] refactor setup
  • 5edf4darefactor wifi setup
  • 4912f4c[AIR-32] update network manager
  • 40f4218save hotspot mode
  • 04dccdd[AIR-32] update webrtc session management
  • 4bbe8ad[AIR-32] add envs fallback
  • 3d08368Add tailwindcss to .gitignore
  • d695edf[AIR-32] fix tailwind installation
  • 359204f[AIR-32] fix bind service
  • 09086e9[AIR-32] add output.css
  • 4433c77[AIR-32] fix bind mode for application
  • 26caa9c[AIR-32] fix bind mode for application
  • 5bd2358[AIR-32] add setup mode to application
  • 5ee3887[AIR-32] add setup mode for application
  • ddb0c5c[AIR-32] add hotspot setup
  • cbe5aaa[AIR-00] fix sdk build
  • 39b4226[AIR-28] add telemetry sender functionality
  • 11659cd[AIR-28] add telemetry sender functionality
  • b2cc8b1[AIR-28] fix telemetry connection
  • 2c88abb[AIR-28] fix telemetry sending
  • d82aa18[AIR-28] fix telemetry requests
  • cc50c0c[AIR-28] update docker file
  • fc0c88b[AIR-28] add mavlink commands support
  • a2087bf[AIR-28] upgrade mavlink telemetry
  • 2b87157[AIR-28] fix mavlink telemetry
  • 8c601f5[AIR-28] fix mavlink connection
  • 2505220[AIR-28] add datachannel telemetry handler
  • fdbbe63[AIR-28] add datachannel mavlink connection
  • f924e1e[AIR-28] refactor mavlink connection
  • 7bad84d[AIR-28] fix session closure
  • 74a5730[AIR-28] add mavlink telemetry over datachannel
  • 9385921[AIR-28] add mavlink telemetry
  • a325785[AIR-28] refactor mavlink connection
  • c0bb321[AIR-28] extract to mavlink repository
  • 9043ba5[AIR-28] add mavlink handlers
  • a81b275[AIR-28] add mavlink package
  • cc1b49e[AIR-28] cleanup
  • adde79f[AIR-28] refactor webrtc session
  • e793f08[AIR-28] refactor stream
  • 9de9c5d[AIR-28] refactor handlers
  • 2354b0b[AIR-28] update webrtc handlers
  • 49b11ca[AIR-28] refactor handlers
  • fafb9d5[AIR-28] add answer handler
  • 1b95842[AIR-28] fix webrtc error handling
  • 84ae223[AIR-28] fix rtsp client error handling
  • efdf686[AIR-28] add templ dependency
  • 64ffbff[AIR-28] refactor rtsp source
  • 1c93194[AIR-28] add better logging
  • 6c68b1e[AIR-28] fix SIYI camera
  • 642460b[AIR-28] code cleanup
  • f6d9f83[AIR-28] code cleanup
  • 354d038[AIR-28] code cleanup
  • 433fa90[AIR-28] downgrade logs
  • db8de90[AIR-28] update h264 decoder
  • 01c3bfd[AIR-28] fix media stream
  • 8c7cb29[AIR-28] save media package
  • 55f3934[AIR-28] move unit inside stream
  • eff7ff0[AIR-28] refactor stream package
  • 75c70c0[AIR-28] fix warnings
  • fe7a6df[AIR-28] downgrade logs
  • 948760d[AIR-28] add enhanced stream package
  • 8e46356[AIR-28] add enhanced peer connection
  • 4346c9f[AIR-28] fix stream manager
  • a780cce[AIR-28] add stream manager
  • b2c0bb3[AIR-28] fix negotiation
  • b838c2c[AIR-28] fix rtsp source
  • b45e7bf[AIR-28] fix rtsp configs
  • 6832578[AIR-28] add custom code handling
  • 9c6ecc6[AIR-28] add custom error handling
  • f92d679[AIR-28] add config validation
  • ae7b37f[AIR-28] add validation handler
  • 8177b4e[AIR-28] update media and stream package
  • 66a46d3[AIR-28] update stream package
  • bc94654[AIR-28] add rtsp source
  • 83fd91e[AIR-28] add webrtc manager
  • 4f16dd3[AIR-28] add media stream handlers
  • b5d6301[AIR-28] fix media sources and destinations
  • f9f440a[AIR-28] fix media sources and destinations
  • f1bd857[AIR-28] update handlers
  • 06cc533[AIR-28] update handlers
  • 861b84f[AIR-28] add sqlite database
  • e799a0f[AIR-28] add configs handlers
  • ca5b862[AIR-28] add media pipeline
  • 6d0caff[AIR-28] refactor keyring package
  • 7e796a2[AIR-28] refactor config package
  • 2c65656[AIR-28] refactor message handlers
  • be48470[AIR-28] configure session management
  • 94412ab[AIR-28] remove not used error
  • a5bed58[AIR-28] add websocket stats
  • a06a07c[AIR-28] add websocket client tests
  • f9c84eb[AIR-28] add old websocket clint
  • 9d4dbcd[AIR-28] fix websocket timeouts
  • b09b24f[AIR-28] fix websocket tests
  • b40e57a[AIR-28] fix websocket
  • ae6289e[AIR-28] add websocket tests
  • 9c89d10[AIR-28] add websocket tests
  • 21fc56d[AIR-28] fix websocket
  • b706fce[AIR-28] fix ping/pong
  • 313fcb0[air-28] save this trash
  • 341c7a9[air-30] save this trash
  • e178746[air-30] save this trash
  • b4cbc6f[air-30] save this trash
  • efe1584[AIR-30] save this trash
  • cb1c434[AIR-30] save this trash
  • bf602a2[AIR-30] save changes
  • 07bc034[AIR-30] fix unit tests
  • 13595dd[AIR-30] split message into multiple providers
  • 5931f01[AIR-30] downgrade all logs to trace level
  • 81a23d7[AIR-30] add raw internal state output
  • e47f38f[AIR-30] remove outdated tests
  • 9864010[AIR-30] add history tracker
  • 9e2406b[AIR-30] fix ui
  • 8137db2[AIR-30] save intermediate
  • 9aa22e4[AIR-30] remove camera init
  • 35840b8[AIR-30] move startup logic to boot functions
  • b6e71c9[AIR-30] add more interfaces
  • 6381cdf[AIR-30] downgrade logs
  • 17c65df[AIR-30] migrate to service providers
  • 0838180[AIR-30] add the message client
  • 98b2f33[AIR-30] fix websocket tests
  • cf32e20[AIR-30] improve websocket client
  • a99d461[AIR-30] improve websocket client
  • bfd83ee[AIR-30] fix test
  • 6e35e0d[AIR-30] extract infrastructure
  • c561589[AIR-30] intermediate save
  • 159d3e5[AIR-30] migrate to new application structure
  • a1c4d04[AIR-30] add message validation
  • 8f963b9[AIR-30] fix state monitor
  • 68ca005[AIR-30] save intermediate changes
  • d8bc4ab[AIR-00] add checks to prevent accidental release
  • d709c5d[AIR-24] fix deployment release-prod.yml
  • d38dd7c[AIR-24] Release stable version of aircast agent (#7)
  • 133646c[AIR-24] trigger aircast stable build (#5)
  • c5322c5[AIR-12] silence loki if it is not available (#4)
  • 58b1cd8[AIR-15] setup workflows to properly separate prod and dev environments
  • df863c6[AIR-12] migrate to new api structure
  • cd1b970fix loki logging
  • 76c89e7improve signin messaging
  • 2b71199remove tls check
  • 242ae30add automatic start
  • cdc4d81update logger
  • d5c2780improve logs
  • 7162414improve logs
  • 148f85aadd remote logger (#2)
  • f1a3111fix version releases
  • 434ad31stop video stream when camera settings were changed
  • e960e9f[AIR-318] rtsp is connected but no video streaming (#1)
  • aa9ec13update ice server
  • 9ec4f2cfix .envs
  • 448b62fupdate release.yml
  • 9571ffcupdate .goreleaser.yml
  • 1394ca4update .goreleaser.yml
  • 75fa75bupdate .goreleaser.yml
  • b2a9cdeupdate .goreleaser.yml
  • 2625ec1update .goreleaser.yml
  • 68c1df9update .goreleaser.yml
  • 51fbf1cupdate Makefile
  • 84d75c6update release.yml
  • 5484e56change video
  • d6cb214fix auth

v1.2.3

December 21, 2025

v1.2.3

Changelog

  • 12dbeeaAdd SSE streaming and cancel support for camera discovery
  • ae7bbeeAdd API reachability detection and auto-refresh UI
  • 71c765ffix RTSP discovery for cameras returning 404 on root path
  • c033e7arefactor broadcaster
  • 0fa351aadd camera discovery feature
  • 585d221use tailscale for local deploys
  • 22a7532Add USB camera discovery with quick probe and full subnet scan
  • 26cab83update go.sum
  • 31679e6fix golangci-lint issues across codebase
  • 231fac8Add automatic recovery for stale cellular data sessions
  • 9a199abfeat(auth): namespace tokens by API host to preserve bindings across environments
  • bd095f4fix pending WebRTC renegotiation
  • c6f4769upgrade templ