GuideMac and Windows

Code signing policy

This page describes who is allowed to release Waffler, how release builds are produced, and what the app does on your machine. It is published because the SignPath Foundation requires a code signing policy from the open-source projects it signs, and Waffler has applied.

Last updated

Current status

  • macOSSigned and notarised
  • WindowsNot code-signed yet
On this page

Windows code signing will be provided by SignPath.io, with a certificate from SignPath Foundation, once our application is approved.

Current status: macOS builds are signed and notarised with an Apple Developer ID. The Windows installer is not code-signed yet. We have applied to the SignPath Foundation, whose certificate will sign Windows releases once the application is approved. Until then SmartScreen may warn you: choose More info, then Run anyway.

The project

Waffler is push-to-talk voice dictation for Windows and macOS, released under the MIT licence. The source is public at github.com/jbf-tars/Waffler and builds are published on the download page.

Who can release it

Waffler is a single-maintainer project. James Farrelly, who owns the repository, acts as author, reviewer and approver. The person responsible for code signing is the same person responsible for development and for the source repository. Two-factor authentication is enabled on the account that owns the repository and authorises releases.

How releases are built

Releases are never built or signed on a developer’s laptop. A release is cut by pushing a version tag, which triggers GitHub Actions workflows that build from that exact commit in the public repository. The workflow definitions are public and auditable, and every published file carries a SHA-256 digest recorded by GitHub that you can check against your own download. Only the Windows installer, built by these workflows from this repository, will be submitted to SignPath for signing.

What the app does on your machine

Waffler is a dictation tool, so it necessarily touches your microphone, your keyboard and your clipboard. Being specific about that is more useful than reassurance:

  • Microphone

    While Waffler is running it keeps the microphone open, so the start of your first word is not clipped. Only the last half-second is held, in memory, and it is thrown away unless you hold down your hotkey. A recording can include up to that half-second before you hold down the hotkey, and runs until just after you let go, or in hands-free mode until you stop it. The audio goes only to the speech-to-text provider you configured, under your own API key. The clean-up provider receives the text transcript, never the audio.

  • Keyboard

    A global low-level keyboard hook detects your hotkey being held down and released. It acts only on your hotkey, plus Space (to lock hands-free recording while the hotkey is held) and Esc (to cancel a recording in progress). To auto-paste, Waffler sends a single paste shortcut (Ctrl+V or Cmd+V) to the app you were typing in. Keystroke content is never recorded, stored or transmitted. This is what makes push-to-talk work. Keyboard hooks and clipboard access are also what antivirus heuristics look at in an unsigned build.

  • Clipboard

    Finished transcripts are placed on your clipboard so they can be pasted where you are typing. During first-run setup only, when you reach the API-key step, and each time you switch back to the setup window, Waffler checks the clipboard for an API key you have just copied, so you do not have to paste it by hand. Anything not shaped like an API key is discarded straight away: it is never shown, logged or stored.

  • On your machine

    Your API keys, settings, dictation history and your most recent recordings live under ~/.waffler-hosted/ (%USERPROFILE%\.waffler-hosted on Windows) on your own computer. Recordings are kept only to diagnose transcription faults and are capped at the last 10, plus any recording that failed to send, which is kept in unsent/ until you delete it. You can delete them whenever you like. None of it is uploaded.

  • No telemetry

    There is no analytics and no usage reporting of any kind.

Changes to your system

The Windows installer puts the app in your per-user application directory and adds a Start Menu entry, plus a desktop shortcut if you tick that option. It does not add a launch-at-login entry, does not write to the Run registry key, installs no drivers or services, and does not change system-wide settings. The global hotkey is registered by the running app and released when you quit.

Uninstalling

On Windows, use Settings then Apps then Waffler. On macOS, drag Waffler to the Trash. Either way ~/.waffler-hosted/ (%USERPROFILE%\.waffler-hosted on Windows) is left in place so your history and keys survive a reinstall. Delete that folder to remove everything.

Changes to this policy

Material changes to the app are recorded in the changelog. Changes to this policy are dated at the top of this page.