Skip to content

Fono

v0.6.0 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

assistant dictation linux llm local-first rust
+5 more
speach-to-text stt vulkan whisper wyoming

Affected surfaces

breaking_upgrade

Summary

AI summary

Updates push-to-talk, unchanged, and update across a mixed release.

Full changelog

Added

  • Audio-visualisation overlay + live-dictation VU bar. A new
    waveform cargo feature (default-on, GUI-only) renders a 640-wide
    bottom-centre overlay panel during batch (push-to-talk) recording
    with a selectable style:

    • bars — scrolling RMS amplitude bars; bars glow brighter at
      higher amplitude.
    • oscilloscope — connected-line waveform from raw PCM samples,
      pre-scaled by 1.0 / WAVEFORM_AMPLITUDE_CEILING so a typical
      speaking voice fills a comfortable chunk of the panel; the
      overlay's 5000-sample (~300 ms) ring buffer scrolls slowly
      enough for individual cycles to be visible.
    • fft — real-input spectrum bars from a 4096-pt Hann-windowed
      FFT, aggregated into 300 display bins covering 0–3 kHz with a
      −20 … +30 dB normalisation. Bars are pixel-tiled (no AA gap)
      so the spectrum reads as a continuous gradient.
    • heatmap — rolling spectrogram (frequency on Y, time on X,
      magnitude as colour intensity), backed by a pre-blended pixel
      cache that scrolls leftward by one frame-width per FFT push so
      redraw is a straight blit.

    Configured via [overlay].waveform = true and
    [overlay].style = "bars" | "oscilloscope" | "fft" | "heatmap".
    The standalone overlay is visible during Recording, transitions
    to amber POLISHING while STT runs, and hides on completion or
    cancel.

  • Live-dictation VU bar. When [interactive].enabled = true
    the live-dictation panel now grows a thin right-side vertical
    meter that tracks microphone level in real time
    ([overlay].volume_bar = true by default). Drives off the same
    OverlayCmd::AudioLevel pipeline as the bars waveform style,
    so users can see whether their voice is too quiet without
    interrupting the transcript.

  • Smoother audio capture for visualisation + streaming. The
    Linux PulseAudio backend now invokes parec --latency-msec=20
    so PCM lands in small frequent chunks (~20 ms). Without this PA
    picked a default fragment of several hundred ms, which made the
    waveform overlay's RMS tail look frozen between chunks and added
    end-of-utterance latency to the streaming pipeline.

Changed

  • The pre-existing [overlay] config block (which had unused
    enabled/position/opacity fields) is replaced in place with
    the new waveform / style / volume_bar shape. No other
    consumers existed in the workspace.

Added

  • GPU-accelerated release variant. Releases now ship two
    binaries side-by-side: the default fono-vX.Y.Z-x86_64 (compact
    ~18 MB CPU-only build, NEEDED set of 4 universal glibc libs) and
    fono-gpu-vX.Y.Z-x86_64 (Vulkan-enabled ~60 MB build, additionally
    links libvulkan.so.1). Both built from the same source; only
    the accel-vulkan cargo feature differs. Distro packages
    (.deb / .pkg.tar.zst / .txz / .lzm) are CPU-only at this
    release; raw GPU binary + .sha256 ship as release assets.
    Per plans/2026-05-02-fono-cpu-gpu-variants-v1.md slice 1.
    CUDA / ROCm remain build-from-source-only; Vulkan covers ~80 % of
    NVIDIA / ~90 % of AMD perf at zero vendor lock-in.

  • Build variant identification. fono doctor and the daemon
    startup log now report which variant is running (cpu /
    gpu). New fono::variant::Variant enum + VARIANT constant
    in crates/fono/src/variant.rs for runtime introspection (and
    for the upcoming GPU upgrade UX).

  • Runtime Vulkan probe. fono doctor gains a "Compute backends"
    section that reports the host's Vulkan loader + physical device
    state (e.g. "Vulkan: detected (Intel(R) Iris(R) Xe Graphics,
    llvmpipe (LLVM 22.1.3, 256 bits))"
    ). On a CPU-variant binary
    with a Vulkan-capable GPU detected, an upgrade hint points at
    the fono-gpu release asset. Implemented via ash runtime-loaded
    bindings (Entry::load()dlopen("libvulkan.so.1")) so the
    CPU variant still has the strict 4-NEEDED-entry allowlist —
    libvulkan never appears in NEEDED. Module lives at
    crates/fono-core/src/vulkan_probe.rs behind the vulkan-probe
    feature; both fono and fono-update opt in. Slice 2 of
    plans/2026-05-02-fono-cpu-gpu-variants-v1.md.

  • Auto-variant fono update. Every fono update invocation now
    probes Vulkan on the host and fetches the matching release asset:
    fono-vX.Y.Z-x86_64 when no usable GPU is present, or
    fono-gpu-vX.Y.Z-x86_64 when libvulkan + a physical device are
    available. CPU users on GPU-equipped hardware are switched to
    the GPU build on their next update; if they later move to a
    GPU-less machine, the next update switches them back. No CLI
    flag, no wizard prompt, no config knob — one decision in one
    place. fono_update::check now takes the running binary's
    current asset prefix and treats a prefix mismatch as "update
    available" even at the same version. Slice 3 of
    plans/2026-05-02-fono-cpu-gpu-variants-v1.md.

  • Tray "Update for GPU acceleration" entry. On a CPU-variant
    build with a usable Vulkan host, the tray menu surfaces an
    explicit "Update for GPU acceleration" item that triggers the
    same auto-variant apply_update path. Hidden on GPU builds and
    on hosts without Vulkan. New fono_tray::TrayAction::UpdateForGpuAcceleration

    • GpuUpgradeProvider callback type.
  • CI gate split. The Binary size & deps audit job now runs as
    a matrix (cpu, gpu), asserting both variants stay within their
    respective budgets and NEEDED allowlists. CPU: ≤ 20 MiB + 4-entry
    allowlist (unchanged). GPU: ≤ 64 MiB + 4-entry allowlist

    • libvulkan.so.1.
  • fono install / fono uninstall self-installer. Run
    sudo fono install (or sudo ./fono-vX.Y.Z-x86_64 install from a
    fresh release-asset download) to install fono system-wide on a
    desktop: places the binary at /usr/local/bin/fono, drops a menu
    desktop entry, an /etc/xdg/autostart/fono.desktop entry so the
    daemon launches automatically on next graphical login, the icon,
    and shell completions. Add --server for a headless install
    instead: writes a hardened systemd unit at
    /lib/systemd/system/fono.service running as a dedicated fono
    system user, and enables-and-starts it immediately. --dry-run
    prints the planned actions without touching the filesystem on
    either mode. sudo fono uninstall reads the install marker
    written at install time and removes exactly the files it recorded;
    per-user config and history are never touched. fono doctor now
    reports the install state (self-installed desktop / server,
    package-managed, or ad-hoc on PATH).

What's Changed

  • fix(update): distinguish cross-variant switch from version bump in messaging by @bogdanr in https://github.com/bogdanr/fono/pull/7

Full Changelog: https://github.com/bogdanr/fono/compare/v0.5.0...v0.6.0

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Fono

Get notified when new releases ship.

Sign up free

Beta — feedback welcome: [email protected]