v0.5.0 · a desktop editor built on Tauri 2

Your code broke.
You'll hear it.

Fahh Editor is a Monaco-based code editor for Windows, macOS and Linux. When a language server reports an error in your file, it plays one short, unforgettable sound, then stays quiet for three seconds, so a cascade of forty errors is still one sound.

rusttypescriptjavascriptpythongocc++javaluarubyhtmlcssjsonyamlc#dartkotlinbash

Don't take our word. Break something.

This runs the editor's own sound rule in your browser. A real parser turns your code into the diagnostics a language server would publish, and each message goes through the desktop app's checks, in the same order. Browsers only allow sound after you click something on the page.

Problems0
    1. 1
      publishDiagnosticsLspBridge receives the message
    2. 2
      any error?severity 1, or no severity at all
    3. 3
      cooldown ready?3.0 s window
    4. 4
      fahhtrigger_error_sound

    Type in the editor, or press Break it.

    messages
    0
    with errors
    0
    sounds
    0
    held back
    0

      In the desktop app the 3-second rule is enforced twice: in the front end, and again in src-tauri/src/core/error_detector.rs, which owns the fahh://error event. Set sfx_cooldown_secs in ~/.fahh/config.json; 0 plays on every error.

      A real editor. With opinions.

      Live diagnostics from 18 language servers

      Errors and warnings from pyright, rust-analyzer, gopls, clangd and fourteen more, drawn straight into Monaco. Install the server for your language and the squiggles appear.

      One sound per mistake, not forty

      A single bad import can publish dozens of diagnostics. They land inside one cooldown window, so you hear it once. Warnings never make a sound.

      Run and terminal built in

      A Run panel with a language picker, and an xterm.js terminal in the bottom dock. Show or hide it with Ctrl + `.

      Git sidebar

      Status, diffs, staging and commits without leaving the editor.

      Six themes

      Fahh Gold, Fahh Dark, Fahh Light, GitHub Dark, Dracula and Solarized Dark.

      AI panel, your endpoint

      Point it at Ollama, LM Studio, OpenRouter, Groq or OpenAI. Nothing is bundled, and no key ships with the app.

      Being built

      Completion, hover and go-to-definition from the servers, and the step-through debugger. The panels exist; the wiring is in progress.

      Small app.
      Loud opinions.

      Every number here is read from the source code.

      3000ms

      default cooldown between sounds

      18

      languages with a configured language server

      6

      built-in colour themes

      3

      desktop platforms, one Rust core

      From a squiggle to a sound.

      Four pieces, in the order a message travels. The line under each title is a real path and value in the repository.

      01

      The language server

      src-tauri/src/core/lsp_client.rs // stdio JSON-RPC // 18 languages

      Rust starts the server for the file's language and relays each message it sends to the window.

      02

      LspBridge

      src/components/LspBridge // textDocument/publishDiagnostics

      Turns diagnostics into Monaco markers, then checks whether any of them is an error.

      03

      One shared cooldown

      src/lib/cooldown.ts // DEFAULT_COOLDOWN_MS: 3000 // no queueing

      Module-level, for the life of the app. A refused call does not extend the window.

      04

      The sound

      src/lib/fahh.ts // AudioContext.decodeAudioData // assets/fahh.mp3

      Decoded once at start-up and played from memory, so the sound follows the squiggle with no delay.

      Free and open source. MIT.

      Version 0.5.0, published by Stealth Keqing. The installers are not code-signed yet, so Windows SmartScreen and macOS Gatekeeper will ask before the first launch.

      Every file for this version: the v0.5.0 release. To build it yourself, see the docs.

      Asked, loudly.

      Does it really play on every error?

      On every error-severity diagnostic, at most once per cooldown window. The window is 3 seconds by default and set by sfx_cooldown_secs in ~/.fahh/config.json. Warnings, information and hints never play.

      Can I turn the cooldown off?

      Set sfx_cooldown_secs to 0 and every error message plays. Choose 0 in the simulator above to hear what that is like.

      Is it Electron?

      No. The shell is Tauri 2: a Rust core and the operating system's own web view, with Monaco as the editor.

      Which languages get squiggles?

      Rust, TypeScript, JavaScript, Python, Go, C, C++, Java, Lua, Ruby, HTML, CSS, JSON, YAML, C#, Dart, Kotlin and Bash, once that language's server (pyright, rust-analyzer, gopls, clangd and so on) is installed and on your PATH.

      Is there autocomplete?

      Monaco's built-in completion works. Completion, hover and go-to-definition from the language servers are still being wired up.

      Why does my system warn about the installer?

      The builds are not code-signed. Signing needs a paid certificate; until then Windows and macOS ask before the first launch. The source and the build workflow are public if you would rather build it yourself.

      Ready to be loudly judged?