HSEmulate Morgan Z West
winget install --id=MorganZWest.HSEmulate -e Local emulator for HubSpot custom-coded workflow actions
winget install --id=MorganZWest.HSEmulate -e Local emulator for HubSpot custom-coded workflow actions
hsemulator is a local test runner for HubSpot Workflow Custom Code Actions.
It allows you to run the exact JavaScript or Python code you paste into HubSpot locally, using real workflow event payloads, with support for assertions, snapshots, execution budgets, and flaky-run detection.
The goal is to make developing HubSpot custom code feel closer to Lambda-style local development—without relying on the HubSpot UI for iteration.
Developing HubSpot custom code today typically means:
hsemulator replaces that loop with a local, deterministic workflow:
No UI-driven iteration required.
Use hsemulator when you want to:
Do not use it to:
📖 Full documentation is available on Read the Docs:
Start here if you want:
hsemulator is written in Rust and distributed as a standalone binary.
cargo build
cargo run -- run
cargo build --release
The release binary is what gets packaged into the installer. End users do not need Rust or Cargo installed.
At a high level, hsemulator works like this:
fixture.json
│
▼
runtime shim (Node / Python)
│
▼
your HubSpot custom code
│
▼
structured JSON output
│
├─ assertions
├─ budgets
└─ snapshots
Issues, bug reports, and feature requests are welcome:
👉 https://github.com/morganzwest/hsemulator/issues
MIT