Skip to content

Releases: p-to-q/flatus

flatus v0.2.2

Choose a tag to compare

@Jah-yee Jah-yee released this 14 May 13:08

flatus v0.2.2

flatus is a small thing that lives in your menubar and occasionally farts.

It is also, by acoustic accident, tied to the same general speaker-clearing
story that makes the Apple Watch water-eject reference so hard to ignore.
This release is not about expanding that premise. It is about making the
desktop app feel more recoverable, more legible, more coherent, and easier
to keep shipping.

Highlights

Menubar recovery is much safer

The biggest product fix in this release is not glamorous, but it matters:
if the status-bar icon disappears, the app now has real recovery behavior.

  • Reopening flatus from Applications or Spotlight brings back the main window.
  • The app now reasserts or rebuilds the tray icon on resume, reopen, and
    main-window show instead of assuming the original menubar item survived.
  • First-launch and in-window help copy now explain the recovery path plainly.

This closes one of the most dangerous user-facing dead ends in the desktop shell.

Desktop audio now has a proper debug path

This release keeps a real Export audio debug path for engineering use,
without leaving it as a front-and-center product control. The export can be
triggered from the menubar menu and from a hidden window affordance. It writes:

  • the exact WAV used by desktop manual playback
  • a JSON report with personality, seed, pressure, and current output-device info

That gives us a reproducible way to investigate the remaining Apple speaker
listening question without guessing from memory or chat logs.

Visual polish tightened again

The desktop window and public visuals continue the paper-and-ink direction,
but with cleaner execution:

  • the paper grain is scaled up again so it reads as an intentional substrate
    instead of tiny background noise
  • the hero banner wordmark and strapline are sharper and easier to read
  • biblical was pushed further toward an edited, academic-looking figure
  • website typography and section hierarchy are more internally consistent
  • the desktop title row now sits more calmly against the single / shuffle
    control

Product changes

  • Desktop main-window support copy now includes the recovery path for a missing
    tray icon.
  • How to fart aligns more cleanly with its adjacent play-mode control.
  • The desktop window texture is enlarged for a softer, more tactile read.
  • Banner text now prioritizes crisp legibility over atmospheric glow.
  • Homepage subheads, captions, specimen descriptions, and install notes now
    speak in a more consistent typographic voice.

Engineering changes

  • Added tray recovery logic that:
    • reuses an existing tray when possible
    • forces it visible again
    • rebinds left-click menu behavior
    • rebuilds the tray if it is missing from app state
  • Added desktop audio-debug bundle export from the Tauri layer.
  • Added docs/test/ as a place to keep release-relevant investigation notes
    that should survive beyond chat history.
  • Regenerated public raster assets and DMG background outputs from the current
    SVG / scripted sources.

Audio note

We also recorded the current state of the unresolved desktop audio question.

At the moment:

  • exported desktop debug WAV playback appears to match desktop real-time
    playback closely enough that this is not yet isolated to the real-time
    output path alone
  • the app is not currently known to perform deliberate app-level band splitting
  • some of the “two-band” character may belong to the current timbre design
    itself, with Apple laptop speakers possibly exaggerating it further

That issue remains open, but it is no longer buried.

See:

  • docs/test/2026-05-14-desktop-audio-notes.md
  • docs/AUDIO_BASELINE.md

Known limits

  • macOS only
  • Apple Silicon desktop build
  • still unsigned
  • the desktop audio character for the rougher personalities is under active
    evaluation, even though the rest of the desktop shell is ready to ship

Assets

  • flatus_0.2.2_aarch64.dmg
  • flatus-v0.2.2-aarch64.app.zip

Full Changelog: v0.2.1...v0.2.2

Full Changelog: v0.2.1...v0.2.2

flatus v0.2.1

Choose a tag to compare

@Jah-yee Jah-yee released this 14 May 08:17

flatus v0.2.1 is a maintenance release that tightens the desktop product surface before the next phase.

Highlights:

  • Desktop manual playback now matches the website specimen reference, with legacy auto-play migrated off so local listening checks stop picking up a second accidental voice.
  • The desktop window is calmer and more robust: seed and personality edits are quiet again, preview renders are race-safe, and failed settings writes now fall back to the last saved snapshot.
  • The transparent macOS window path is corrected for rounded edges, and the version mark in the window now links back to the project.
  • README now leads with the product voice, includes an early Personality section, and uses a fresh screenshot of the current window.
  • DMG visuals were rebuilt from the latest SVG, including the bundled retina TIFF background used by Finder.

Known limits:

  • macOS Apple Silicon only.
  • Unsigned build; first launch may require clearing quarantine with xattr -cr /Applications/flatus.app.

Full Changelog: v0.2.0...v0.2.1

flatus v0.2.0

Choose a tag to compare

@Jah-yee Jah-yee released this 14 May 04:20

flatus v0.2.0

A small apparatus for moving air.

First user-facing release of the desktop shell. If you tried v0.1.x and the
window felt frozen, the first-launch card refused to leave, or the tray menu
felt unresponsive — this is the release that fixes that. The synthesis core
(fart-synth, the CLI, the website instrument) is unchanged and still
byte-identical to the published golden fixtures.

What changed for users

  • First launch behaves. Click looks good once and the card is gone for
    good; it only comes back when you press Show help again.
  • Fart now is responsive. From either the tray menu or the window, the
    click returns immediately; audio renders and plays on a background thread
    so the UI never blocks.
  • Audible previews. Editing the seed, rolling a new seed, or switching
    personality now plays the same three-event session you'd get from Fart now, so you can audition voices without ever opening the menu.
  • No more "two voices" overlap. Manual and background fires now share one
    output mutex, so they queue instead of mixing into a confused stack.
  • Larger, brighter preview waveform. The in-window scope now matches the
    website instrument: same palette, same two-pass glow, fills the visible
    height even on quiet buffers.
  • Menubar icon fits the menubar. The italic f plus three brand grains,
    drawn at the right size for a 22 px template image (the previous glyph was
    getting clipped at the top).

Install

  • macOS Apple Silicon DMG: download flatus_0.2.0_aarch64.dmg from this
    release and drag flatus.app into /Applications.

  • One-liner installer (handles quarantine xattr too):

    curl -fsSL https://flatus.vercel.app/install.sh | bash

The .app is still unsigned. On macOS 15+ the first launch may need
xattr -cr /Applications/flatus.app once; see the README's First launch
section.

Verification

  • cargo check --workspace
  • cargo test
  • pnpm --dir apps/desktop tauri build

Known limits

  • macOS Apple Silicon only for the packaged app.
  • Notarization is not yet in the pipeline.
  • CLI on Linux/Windows still works from source (cargo install --path crates/fart-synth).

What's Changed

  • fix: point download links at v0.1.0-pre.3 tag by @Jah-yee in #9
  • docs: fix dead v0.3 archive link and stale CHANGELOG sections by @Jah-yee in #10
  • web: catalog-aesthetic polish — folio numerals, asterism, lettrine by @Jah-yee in #11
  • feat: macOS install one-liner + paper-grain polish + xattr docs by @Jah-yee in #12

Full Changelog: v0.1.0-pre.3...v0.2.0

v0.1.0-pre.3

v0.1.0-pre.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 May 11:55
d7609a3

What's Changed

  • docs+web: audit fixes — honest CLI, deploy-safe banner, real screenshots, README clarity by @Jah-yee in #4
  • desktop: real macOS user-idle detection via IOHIDSystem by @Jah-yee in #2
  • ci: add Linux to tauri matrix (deb + AppImage) by @Jah-yee in #3
  • v0.3: WASM browser synth + new homepage + DMG polish by @Jah-yee in #5
  • docs: v0.4 realism plan + brand kit + research curation by @Jah-yee in #6
  • v0.4 realism: aperiodic tremor + brown noise + bubble bursts by @Jah-yee in #7
  • v0.1.0-pre.3: paper-aesthetic visuals + shippable DMG + on-brand icon set by @Jah-yee in #8

Full Changelog: v0.1.0-pre.2...v0.1.0-pre.3

v0.1.0-pre.2 — first green build

Pre-release

Choose a tag to compare

@Jah-yee Jah-yee released this 13 May 02:31
398715c

flatus v0.1.0-pre.2

A small apparatus for moving air.

Second pre-release. This is the first one that actually builds green on both macOS and Linux CI and produces a launchable unsigned .app. v0.1.0-pre.1 was the scaffold drop — comedy and architecture were in place, but the wiring needed work before anything compiled end-to-end.

Same shape as pre.1 (CLI + Tauri menubar shell + four personalities + determinism contract). Difference is: now you can clone, install Rust, run cargo install --path crates/fart-synth, and actually get a working binary.

What landed in this drop

Merged via #1:

  • Synth (crates/fart-synth) — compile and clippy fixes (TickResult Eq derive on f32, decay rate that made pressure unreachable, Mulberry32 hex constant, SHA-256 separator grouping, struct-update syntax in tests). All 24 tests pass; cargo clippy --all-targets -- -D warnings clean.
  • Cross-platform determinism — every transcendental (tanh / sin / cos / powf / sqrt / ln) now routes through the libm crate instead of f32 stdlib methods. Stdlib defers to platform libm, which gives different LSBs on Apple libm vs glibc; the "byte-identical WAV" contract in tests/golden was structurally unreachable until this fix. Both macos-latest and ubuntu-latest now agree on the goldens.
  • Desktop shell (apps/desktop) — Tauri v2 API alignment: tauri::include_image! for the tray icon (lifetime fix), show_menu_on_left_click rename, removed invalid bundle.infoPlist config. LSUIElement is already enforced at runtime by ActivationPolicy::Accessory, so the dock-icon hide still works.
  • CItarget/release/bundle/macos/ is the actual .app location (workspace root target dir, not per-crate). Empty APPLE_SIGNING_IDENTITY env removed so unsigned builds genuinely skip codesign.
  • Goldens — regenerated under libm; manifest SHA-256s repinned. Determinism test green on both platforms.
  • Bannerdocs/banner.svg redesigned for depth: dark warm-cool canvas, radial bloom on each grain, integrated [p → q] motif, paper-noise overlay.

Status

  • 🟡 Unsigned, ad-hoc. macOS Gatekeeper blocks the first launch — right-click → Open.
  • 🟡 macOS Apple Silicon only. Intel + universal binary deferred to v0.2.
  • 🟢 CLI works on Linux in principle (the fart-synth crate has no macOS-specific deps); the Tauri shell is macOS-first in v0.1. Linux CI builds the synth and runs the test suite.
  • No signing / notarization. v0.2 work, gated on Apple Developer ID.

Install

git clone https://github.com/p-to-q/flatus
cd flatus
chmod +x scripts/*.sh
scripts/doctor.sh                        # verify prereqs
cargo install --path crates/fart-synth   # gives you `fart` and `generate-goldens`
fart --personality biblical

Menubar app (unsigned — right-click → Open the first time):

cd apps/desktop
pnpm install
pnpm tauri build
open ../../target/release/bundle/macos/flatus.app

A pre-built unsigned flatus.app is attached below as an artifact for the macOS-Apple-Silicon case where you'd rather not compile from source.

Roadmap into v0.2

  • Replace the business_hours() activity stub with real IOHIDIdleTime polling.
  • Linux Tauri build in CI matrix.
  • apps/web Web Audio re-implementation (honestly labelled as a reimpl, not wasm).
  • Universal (arm64 + x86_64) macOS binary.
  • Real artwork icon, README screenshots / GIF.
  • Apple Developer ID signing + notarization (gated on cert availability).

v0.1.0-pre.1 first proof

Pre-release

Choose a tag to compare

@Jah-yee Jah-yee released this 13 May 01:54

flatus v0.1.0-pre.1

A small apparatus for moving air.

First public pre-release. This is the comedy-first drop: the joke, the architecture, the receipts. No signed .app, no notarization, no crates.io publish — those come at v0.2, once we know anyone wanted this.

What ships

  • fart-synth — a Rust synthesis crate. 7-D parameter space, four personality-conditioned Gaussian distributions, mulberry32 seeded PRNG, RBJ biquad BPF/HPF/LPF, Paul Kellet pink noise, granular envelope, asymmetric tanh waveshaper, comb-filter wetness, dBFS-capped soft limiter.
  • fart — a clap + cpal CLI. fart --personality biblical. fart --render out.wav. fart --seed 42.
  • flatus-desktop — a Tauri v2 menubar shell. ActivationPolicy::Accessory + LSUIElement=true (no dock icon). Left-click the tray → fart now. Right-click → settings (volume, personality, output, quiet hours).
  • apps/web — a static landing page (no audio yet).
  • skills/fart — a Claude Skill that wraps the CLI.
  • docs/ACOUSTICS.md — citation-backed plausibility writeup. Apple's patent family (US 9,451,354 et seq.), the JASA flatulence paper, Chirone 1988, an honest A/B/C plausibility table. The "we're actually serious" leg.
  • CI — GitHub Actions matrix (macOS + Linux): fmt --check, clippy -D warnings, test, build, CLI smoke test. The macOS job also builds an unsigned .app and uploads it as an artifact.
  • Determinism contractcargo run --bin generate-goldens then cargo test --test golden enforces byte-identical re-rendering across builds. The tests/plausibility.rs companion test asserts in-band/above-band spectral energy ratio ≥ 6, backing the headline acoustic claim.

Personalities (the bestiary)

Name Voice
polite-cough short, dry, plausibly deniable
default the canon
biblical slow, low, devastating
silent-but-deadly exactly what it says

Install (from source, this pre-release)

git clone https://github.com/p-to-q/flatus
cd flatus
chmod +x scripts/*.sh
scripts/doctor.sh        # confirm your machine has the prereqs
cargo install --path crates/fart-synth
fart --personality biblical

Menubar app (unsigned — right-click → Open the first time):

cd apps/desktop
pnpm install
pnpm tauri build
open src-tauri/target/release/bundle/macos/flatus.app

Known limits in this pre-release

  • 🔴 Unsigned / unnotarized. macOS Gatekeeper will block first launch. Right-click → Open. See SECURITY.md.
  • 🔴 macOS Apple Silicon only. Intel + universal binary in a follow-up.
  • ⚠️ Activity detection is stubbed. apps/desktop/src-tauri/src/main.rs::business_hours() uses UTC wall-clock as a proxy. v0.2 will replace with IOHIDIdleTime.
  • ⚠️ The "165 Hz" Apple Watch number is community lore. Apple has never published a frequency. We don't quote it as fact; see docs/ACOUSTICS.md §1.
  • ⚠️ No clinical efficacy. The cleaning is a maybe. The comedy is a definitely. See docs/ACOUSTICS.md §8.
  • ⚠️ First cargo build on a clean machine may surface 1–2 small fixes. The scaffold was authored without a local Rust compiler. If you hit something, open an issue.

Roadmap

  • First release
  • Cease-and-desist from Apple's lawyers (re: US 9,451,354 et seq.)
  • Speaker manufacturer warranty claims department
  • IRB approval for the cleaning-efficacy study
  • Bluetooth headphone hearing-protection litigation
  • Notarized DMG (we'll get to it)
  • Updated fart physics

Acknowledgements

OpenWhip — voice template for the README, install-path template for the CLI, tray-UX template. Hundred Rabbits, Ink & Switch, Folk Computer — repo discipline. Apple Watch water-eject — the acoustic precedent.

License

Apache-2.0.

A [p → q] project. We're interested in the arrow. Q.E.D.