Skip to content

Releases

v0.7.0 ​

Brings full two-way WebRTC calling to the browser, a redesigned web UI with dark mode and brand theming, and stronger webhook origin/signature validation.

Changes ​

  • Add end-to-end browser WebRTC calling: outbound dialer, inbound answer/decline, in-call controls (mute, DTMF, duration, hangup), and audible ringtone/ringback, all driven by a single CallController state machine
  • Register browser tabs as web devices and reap orphaned registrations without disturbing Android/push devices or devices on an active call
  • Redesign the web UI with dark mode, purple brand theming, redesigned call/conversation/provider/numbers/settings components, unified nav and dashboard icons, and a design guide
  • Rebuild the dashboard into live recent-activity sections for conversations and calls, with provider-number dots, tooltips, quick actions, and websocket-driven updates
  • Unify transient notifications into a single app-wide notification center with auto-dismissing toasts, and add auto-hiding overlay scrollbars
  • Add configurable webhook origin validation for 46elks providers (IP allowlist with documented defaults) and a toggleable webhook_validation flag for Vonage and 46elks
  • Enable Fastify trustProxy so the real client IP is used behind a reverse proxy or tunnel
  • Turn the dummy telephony provider into an end-to-end test harness with a MediaBridge echo (delayed-loopback) leg and web controls to simulate inbound SMS and calls
  • Rename "Call History" to "Calls" and move the Dial action into the Calls view header
  • Add a web calling voice spec (requirements, design, and task list)

Fixes ​

  • Decouple session validity from device liveness and add web logout, avoiding an infinite logout to 401 loop
  • Normalize webhook endpoints across providers and return 404 for unknown ones
  • Verify inbound Vonage webhooks with the signature secret via HS256, drop the insecure application_id fallback, and require signature verification
  • Present inbound calls in the browser by broadcasting a ringing call_event, and reliably tear down calls on decline via call_cancelled
  • Only send a JSON content-type/body when a body exists, so bodyless POSTs (decline, hangup, answer) are no longer rejected
  • Guarantee a visible in-call surface whenever a live peer connection or mic track exists, and never let audio outlive the UI
  • Drive the connected/failed state off the aggregate connection state so media that flows without an ICE connected transition no longer gets torn down mid-call
  • Unskip 5 pre-existing test failures
  • Remove unused type imports in web-device-reaper

v0.6.0 ​

Adds USB modem support as a telephony provider, live provider health checks, and a range of Android app and call/SMS reliability improvements.

Changes ​

  • Add modem-gateway telephony provider for USB modems, with durable at-least-once inbound SMS delivery and server acknowledgements
  • Add live provider health checks and fix provider status/URL display in the web UI
  • Identify conversations by (provider number, recipient) pair so threads stay separate across provider numbers
  • Add manual AT command flag to modem-gateway, plus modem identity and band fields in status
  • Android: start the app on boot, add copy/paste support to call history and the dial pad, and show a numeric unread badge in the conversation list
  • Android: back navigates to the dialpad from other tabs and is handled within the contact search overlay
  • Decouple version from package.json into a dedicated version source
  • Add a PR checks workflow (Svarla, Mediabridge, Android)

Fixes ​

  • Buffer concatenated SMS parts off-SIM and delete immediately to prevent a "+SMS FULL" storage deadlock
  • Correct modem signal percentage, preserve modem identity across status ticks, and register provider hooks on creation
  • Recover wedged PCM audio state to prevent one-way calls
  • End inbound calls reliably when the remote caller hangs up
  • Correct SMS provider routing and improve push notification delivery reliability
  • Refetch conversations on a new message signal and fix cold-start re-notification of read items
  • Android: keep the message input visible above the keyboard and dismiss the keyboard when leaving conversation detail
  • Preserve the number label across modem-gateway restarts
  • Assign unique, stable, and distinct number colors, including on the incoming call screen

v0.5.3 ​

APK download reliability and documentation improvements.

Changes ​

  • Add /api/download/status endpoint to report APK availability before showing the download button
  • Rewrite download page to check APK availability on mount with loading state and clear unavailable messaging
  • Add 'Download' link to main navigation for discoverability from any device
  • Documentation refinements for guides and configuration

Fixes ​

  • Resolve APK not being fetched at startup due to version check blocking downloads for the actual package version
  • Prevent 404 on APK download when file is not yet provisioned

v0.5.2 ​

Bug fix release focused on call reliability, device startup behavior, and documentation improvements.

Changes ​

  • Improved release flow with per-version release files and auto-discovery
  • Restructured README and documentation site
  • Bundle APK in server container with self-hosted distribution
  • Handle 46elks 'busy' and 'state' field in voice_event webhook
  • App autostarts on phone boot
  • Call signaling improvements

Fixes ​

  • Ask mic permission on first call

Released under the AGPL-3.0 License.