FAAAH
Plays the FAAAH meme sound whenever your tests fail. Because nothing motivates you to fix broken tests quite like public humiliation from your own editor.
Works with every test framework. No configuration required -- just install and break a test.
How It Works
FAAAH uses two stable VS Code APIs to detect test failures:
- Terminal Shell Integration -- When you run a test command (e.g.
npm test, pytest, cargo test) in the integrated terminal and it exits with a non-zero code, FAAAH plays the sound.
- Task Process End -- When a VS Code task containing test-related keywords finishes with a non-zero exit code, FAAAH plays the sound.
No proposed/unstable APIs are used, so the extension works on the VS Code Marketplace without any special flags.
Supported Test Frameworks
FAAAH recognizes the following commands out of the box:
| Language/Runtime |
Commands |
| Node.js |
npm test, npm run test, npx jest, npx vitest, npx mocha |
| Yarn / pnpm / Bun |
yarn test, pnpm test, bun test |
| Python |
pytest, python -m pytest |
| Rust |
cargo test |
| Go |
go test |
| C# / .NET |
dotnet test |
| Java |
mvn test, gradle test |
| Ruby |
rspec, bundle exec rspec |
| Elixir |
mix test |
| PHP |
phpunit |
| Dart / Flutter |
dart test, flutter test |
You can add your own patterns via the faaah.testCommandPatterns setting.
macOS
Works out of the box. Uses afplay which is pre-installed on all Macs. Volume control is fully supported.
Linux
The extension bundles a WAV file for maximum compatibility. It tries players in this order: ffplay, mpg123, mpg321, mplayer, mpv, aplay. Install at least one:
# Option 1: ffplay (recommended -- part of ffmpeg, handles all formats + volume)
sudo apt install ffmpeg # Debian/Ubuntu
sudo dnf install ffmpeg # Fedora
sudo pacman -S ffmpeg # Arch
# Option 2: mpg123 (lightweight, supports volume control)
sudo apt install mpg123 # Debian/Ubuntu
sudo dnf install mpg123 # Fedora
sudo pacman -S mpg123 # Arch
# Option 3: mpv
sudo apt install mpv
# Option 4: aplay (usually pre-installed, WAV only, no volume control)
# aplay is included with ALSA (alsa-utils)
Note: aplay only supports WAV files. The bundled default sound is WAV so it works, but if you set a custom .mp3 via faaah.soundFilePath, you'll need ffplay, mpg123, or mpv.
Windows
Uses PowerShell's built-in System.Media.SoundPlayer via the play-sound package. No additional installation needed, though note that SoundPlayer only supports WAV natively. For MP3 playback on Windows, install one of:
Installation
From VSIX (local)
git clone <repo-url> && cd FAAAH
npm install
npm run compile
npx vsce package
code --install-extension faaah-0.0.2.vsix
Development
git clone <repo-url> && cd FAAAH
npm install
npm run compile
Then press F5 in VS Code to launch the Extension Development Host.
Commands
Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P) and type:
| Command |
Description |
FAAAH: Toggle Sound On/Off |
Enable or disable the sound |
FAAAH: Play Test Sound |
Play the sound immediately (useful for testing your audio setup) |
Settings
All settings are under the faaah.* namespace. Open Settings (Ctrl+, / Cmd+,) and search for "faaah".
| Setting |
Type |
Default |
Description |
faaah.enabled |
boolean |
true |
Enable/disable the sound |
faaah.soundFilePath |
string |
"" |
Path to a custom sound file. Leave empty to use the built-in FAAAH sound. |
faaah.volume |
number |
0.5 |
Volume level from 0.0 (silent) to 1.0 (full). Works with afplay (macOS), ffplay, mpg123, mpg321, and mpv. |
faaah.cooldownMs |
number |
3000 |
Minimum milliseconds between sounds. Prevents the sound from firing repeatedly when multiple test processes fail at once. |
faaah.detectViaTerminal |
boolean |
true |
Detect test failures from terminal commands |
faaah.detectViaTasks |
boolean |
true |
Detect test failures from VS Code tasks |
faaah.testCommandPatterns |
string[] |
(see below) |
List of command substrings that identify a test run in the terminal |
Example: Custom Settings
// settings.json
{
"faaah.volume": 0.8,
"faaah.cooldownMs": 5000,
"faaah.soundFilePath": "/home/me/sounds/custom-faaah.mp3",
"faaah.testCommandPatterns": [
"npm test",
"pytest",
"cargo test",
"my-custom-test-runner"
]
}
Requirements
Troubleshooting
No sound plays when tests fail:
- Run
FAAAH: Play Test Sound from the Command Palette. If you hear the sound, detection is the issue, not playback.
- Make sure shell integration is active -- look for the colored circle/chevron at the start of your terminal prompt.
- Check that your test command matches one of the patterns in
faaah.testCommandPatterns.
"Could not play sound" warning:
- Install a supported audio player for your OS (see Platform Support).
- Make sure the player binary is on your
PATH.
Sound is scratchy or distorted (Linux):
- You're likely using
aplay with an MP3 file. Install ffplay (sudo apt install ffmpeg) or mpg123 for proper MP3 support. The bundled default sound is WAV and should work fine with aplay.
Sound plays too often / not often enough:
- Adjust
faaah.cooldownMs. The default is 3000ms (3 seconds).
Want to use a custom sound:
- Set
faaah.soundFilePath to the absolute path of any .mp3 or .wav file.
Project Structure
FAAAH/
package.json Extension manifest
tsconfig.json TypeScript configuration
esbuild.mjs Build script
media/
faaah.wav The sound file (WAV for universal compatibility)
faaah.mp3 The sound file (MP3)
src/
extension.ts Entry point (activate/deactivate)
testFailureDetector.ts Terminal + task listeners
audioPlayer.ts Cross-platform audio playback
config.ts Settings reader
License
MIT