Source maps
Your app’s browser code is bundled before it ships. Without help, an error points to a place in the bundle. With source maps, everydeck shows the source file, line, column and function, with the code lines around it, likesrc/pages/Checkout.tsx:8 formatTotal.
Your coding agent adds the upload to your build during the setup. You only add one key where your app is built.
How it is built in
- Vite
- Any other bundler
vite.config.ts
inject gives every built file a debug id: a short snippet at the start of the first line, so no line moves. The browser SDK sends this id with each error, and everydeck finds the matching map.
The upload key
The upload uses its own key,EVERYDECK_SOURCEMAPS_KEY. It can only upload source maps for one environment. Every other use is refused. It does not expire and works until you revoke it.
The build reads it from the build environment or from your app’s env files (.env, .env.local, .env.<mode>, .env.<mode>.local). The build environment wins.
Where to add it at Vercel, Netlify or GitHub Actions is on Keys at your host.
Without the key, the build still works. It only uploads nothing, and browser errors show a place in the bundle (“No code lines”).
Under Technical, the card Source map upload keys lists the keys of each environment: who issued it, when it was last used and the uploads in this hour. Owners and Admins can click New upload key (shown once) or Revoke.
What happens to the maps
- After the upload, every map and its
sourceMappingURLcomment are removed from the build output. This also happens without a key or when the upload failed. Your maps are never public. - everydeck stores each map without the code of your libraries. Every other line is cleaned like an error message: secrets, tokens and e-mail addresses are removed.
- Maps are resolved when an error arrives. Errors from a build without maps are not resolved later, and older cases are not grouped again.
- The same error stays the same case after a new deploy.
Limits
If a key reaches its hourly limit, you get an email and Technical says “Limit reached this hour”.
Not supported
- React Native and Expo (Hermes)
- Supabase Edge Functions
- Source maps from Vercel’s own build output
- Index maps with
sections
If your build also uses Sentry’s Vite or Rollup plugin with
sourcemaps.filesToDeleteAfterUpload, that plugin deletes the maps before everydeck’s plugin runs. Remove the .map pattern from that list and keep the rest. everydeck’s plugin removes every map after its own upload.Page speed
The browser SDK measures every page view by itself, with Google’sweb-vitals library built in. You add nothing.
In between, the rating is Needs work. The SDK also measures FCP and TTFB.
How it is shown
- everydeck shows the p75 per page: three out of four visits were at least this fast.
- Under 20 visits of a page, there is no value and no rating yet, only how many visits were measured, like “3 visits measured so far”.
- You find it on Journeys in How fast your pages load, slowest pages first, with a line for LCP per day.
- On the page of a version under Changes, Load times before and after compares the 7 days before a version with the days after.
Where it is measured
- In every browser, also on phones. Not in native apps (React Native, Expo, Capacitor).
- CLS is reported only by Chromium browsers (Chrome, Edge, Opera, Samsung Internet). In Firefox and Safari it stays empty.
- Page changes of a single-page app count as their own visits only in browsers that report soft navigations (Chromium 151 or newer). Otherwise the loaded page counts.
What it costs you
Page views never count toward your 10,000 monthly events, and they keep arriving above your limit. Per app and day, everydeck measures up to 20,000 page views and up to 200 different pages. Further pages that day are grouped as “Other pages”. Daily values are kept for 30 days. To turn it off, setcaptureVitals: false in the browser SDK.