| Hey HN, I've been building a tool called Malleon because I got tired of e2e tests that don't reflect what users actually do. And I have long been obsessed with using real user sessions for load testing. Having worked with tools like Tsung and Gatling for load testing, I often wished I could just replay yesterday's traffic x2 or x5 instead of using synthetic sessions. Malleon started as an attempt to bridge those two worlds. The basic idea is: instead of writing tests from scratch, record real user sessions and turn them into replayable tests. The SDK records things like:
- DOM interactions
- network requests
- console output
- timing between actions The replay isn't a video. It reconstructs and replays the actual browser interactions against your app. So a real user session becomes a reproducible test case. Typical flow looks like:
- drop a small JS SDK into your app
- users interact with the site normally
- sessions get recorded
- you browse replays and find something interesting (bug, error, weird behavior)
- turn that session into a test and run it in CI The test runner is self-hosted. You pull the Docker image and run it wherever you want. It drives a browser (headless or headful) and replays the interaction sequence. Some things that turned out to be surprisingly tricky while building this:
- replaying interactions when the DOM has changed since recording
- handling viewport/layout differences
- making network replay transparent to the app
- keeping timing realistic without making tests slow The system also collects logs, errors, and request timings so sessions are searchable and you can track network performance, see p90/p95/p99 stats, all that good stuff. Links:
- Malleon: https://malleon.io
- Replay SDK: https://www.npmjs.com/package/@malleon/replay
- Replay CLI: https://www.npmjs.com/package/@malleon/replay-cli
- Docs: https://github.com/malleonio/malleon-documentation Free tier available. Curious if anyone else has run into the "our tests don't reflect what users actually do (or how they scale)" problem. |