Alpha

Source maps

Turn minified browser stacks back into your source, with the original file, line, function, and a few lines of code.

A production build minifies your code, so a browser error's stack says at oa (index-ucPOZErM.js:171:24720). With source maps, WizeLens shows applyCoupon in src/coupon.ts:4, with the lines around it, and keeps the raw stack one click away. Errors also group by that original frame, so one bug stays one error across builds, and the same message thrown in two places is two errors.

On your machine: nothing to set up

In development, WizeLens reads the maps your dev server already serves (Vite, webpack, Next.js). The browser package reads them for the page's own scripts, and the Node add-on and the hub read them from any dev server on localhost.

To read a production build on your machine, point the hub or the add-on at the build folder:

npx @wizeworks/lens-hub --sourcemaps ./dist
createWizeLens({ serviceName: "web-api", sourceMaps: { dirs: ["../web/dist"] } });

The ASP.NET Core add-on does not read maps itself: its dashboard reads the maps your site or dev server serves.

In production: upload at build time

Production sites should not serve their maps. Upload them to the hub or the cloud when you build, under the version your app reports. Add the plugin for your bundler:

// vite.config.ts
import { wizelensSourceMaps } from "@wizeworks/lens-cli/vite";

export default defineConfig({ plugins: [react(), wizelensSourceMaps()] });
// webpack.config.js
import { WizeLensSourceMapsPlugin } from "@wizeworks/lens-cli/webpack";

export default { plugins: [new WizeLensSourceMapsPlugin()] };
// next.config.mjs
import { withWizeLens } from "@wizeworks/lens-cli/next";

export default withWizeLens({ reactStrictMode: true });

Each plugin turns on hidden source maps (the files ship without a link to their map), puts the release in the page, and uploads every map after a production build. Next.js 15.4 and later upload after next build with webpack or Turbopack (older versions upload from webpack); the wrapper deletes the maps it turned on once they are uploaded, so they are not deployed.

Or upload from CI with the command line:

npx @wizeworks/lens-cli sourcemaps upload ./dist --release 1.4.0
npx @wizeworks/lens-cli sourcemaps list --release 1.4.0

Where the maps go

Setting Flag Variable Default
Hub or cloud --url WIZELENS_URL, then WIZELENS_HUB http://localhost:5960
Key --token WIZELENS_TOKEN, then WIZELENS_HUB_TOKEN none
Release --release WIZELENS_RELEASE your package.json version
Project (hub) --project WIZELENS_PROJECT none
Path prefix --url-prefix none

For WizeLens Cloud, use https://cloud.wizelens.com and an ingest key of the project (Team → Keys): the maps go to that project. The cloud keeps the newest 20 releases of each project.

The plugins take the same settings as options (url, token, release, project, urlPrefix, deleteAfterUpload), plus upload: false to skip the upload and failOnError: true to fail the build when it does not work (by default it warns).

The release

Maps are found by the version your app sends with each browser span. The plugins set it for you. Without a plugin, pass it to the provider:

<WizeLensProvider release={import.meta.env.VITE_APP_VERSION}>

The release shows on each error, next to its original source.

What you see

On the Errors page, a browser error shows its Source (the first frame of your code) and Release. The Stack Trace tab opens on Original: each frame with its function, file, line, and column, and the frames of your code with a few lines of source around the line that threw. Library frames are grey. Raw shows the stack as the browser sent it.