Source maps
OpenFault implements the parts of the Sentry upload API that sentry-cli and the Sentry bundler plugins (including @sentry/nextjs) use. You keep your existing tooling and point it at your host.
Only debug-ID artifact bundles are supported. That is what sentry-cli sourcemaps inject produces and what current bundler plugins upload by default. Legacy release-name + filename uploads and iOS dSYMs are not.
1. Make a token
Settings → API tokens → new token with the write scope. Scope it to the project if you like; a project-scoped token can only upload to its own project. Read-only tokens get 403.
2. Set the environment
export SENTRY_URL=https://errors.example.com
export SENTRY_ORG=openfault # any value; one install is one org
export SENTRY_PROJECT=web # your project's slug
export SENTRY_AUTH_TOKEN=of_... # the write token
3. Inject and upload
After your production build:
sentry-cli sourcemaps inject ./dist
sentry-cli sourcemaps upload ./dist
inject writes a debug ID into each minified file and its map. upload sends them as one bundle. Deploy the injected files, not the ones from before inject.
Next.js
@sentry/nextjs uploads during next build when an auth token is present. Give it the same four variables (SENTRY_URL, SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN) in your build environment. No code change.
How resolution works
The SDK sends the debug IDs of the loaded files with each event. OpenFault finds the bundle with the matching debug ID and maps each minified frame to the original file, line, column and function, with context lines from the map’s sources. Both the raw and resolved frames are kept; the issue page has a raw/resolved toggle.
OpenFault never fetches source maps from URLs.
Releases and deploys
sentry-cli releases new, releases finalize and deploys new succeed so CI scripts keep working, but they do not record anything. OpenFault learns releases from the release field on events.
Limits
Chunks are 8 MiB, and a bundle may unzip to at most 256 MiB.