Introducing the Prowl Blog
We've been building Prowl — end-to-end testing for native macOS apps and web apps, driven from the same declarative YAML "hunt" — and it's time to start sharing what we're learning along the way.
Why a blog?
Desktop E2E testing has been the neglected corner of the toolchain. Web has Playwright; mobile has Maestro; native macOS testing means Swift and Xcode's XCUITest, locked to a language and an IDE. If you ship a Mac app and a web app, you end up maintaining two completely different testing stacks.
Prowl takes a different approach: one declarative YAML file describes a flow, and the same file can drive a native macOS app or a web app. Playwright drives the web target; Apple's Accessibility API drives the macOS target (experimental today). iOS and Android are experimental too. The steps are readable by both humans and AI agents, and the results are developer-ready — screenshots, traces, and repro steps you can act on.
What you'll find here
This blog will cover:
- Stories from building Prowl — the technical decisions behind the tool, what worked, and what we had to rethink
- How-to guides — practical walkthroughs, like testing a Mac app in CI or getting your first hunt running
- Honest engineering write-ups — the hard parts of driving native apps through the Accessibility API, keeping flows deterministic, and BYOK AI-assisted generation
- Product updates — new features, releases, and what's coming next
Who this is for
If you're a Mac developer who wants real E2E coverage without living in Xcode, a web developer who already scripts flows, or anyone building with AI agents who needs reliable, deterministic tests — this blog is for you.
Get started with Prowl
If you haven't tried Prowl yet:
npm install -g prowl-tools
prowl init
prowl run hello --headed
Check out the docs for the full getting-started guide.
We're glad you're here. More posts coming soon.