Skip to main content
This takes about ten minutes. You’ll end up with an inbox your app sends crashes into, linked to your users, with an action to reset a user’s two-factor login.

1. Create a project

Sign in at app.pult.sh and add a project. Pult creates its first environment and shows you its key once. Put it in your app’s environment as PULT_KEY.

2. Install

npm, pnpm and yarn work the same way. The package is published as @lantharos/pult for now, and installing it under the name pult keeps your imports as "pult". It’s both the library your app imports and the pult command.

3. Add a config

pult.config.ts sits at the root of your app. It names the project and tells Pult where your definitions live.
Definitions can live anywhere include matches. A common layout keeps resources next to the code they wrap (src/users/user.pult.ts) and inboxes, roles and views together in pult/.

4. Describe a resource

5. Add an inbox

Schemas can come from zod, valibot, arktype or any library that implements Standard Schema.

6. Build

This writes .pult/manifest.json and .pult/index.ts. Commit both: manifest changes then show up in code review like any other change.

7. Connect and send

listen() opens a WebSocket from your app to Pult. Pult sends action requests down it, so your app needs no public endpoint. Now send something:
Open the console. The crash is in the Crashes inbox, linked to the user, with Reset 2FA on it for users who have two-factor turned on. Send the same fingerprint again and the count goes up instead of a new item appearing. The first environment in your config follows your code: whenever your app connects or sends something with definitions Pult hasn’t seen, it deploys them there. See Connecting your app for the rest.