Skip to content

Security and limits

  • Development only. Production gets the no-op entries: builds through the Vite plugin, and plain node without the preload. Even the real code does nothing with NODE_ENV set to anything but development (production, test…).
  • Local only. The API answers localhost, 127.0.0.1 and [::1], even when the dev server listens on the network. For a Node server, the profiler’s own port listens on localhost only. It takes profiles from other processes as JSON only and never with an Origin, so a page in your browser cannot send it any.
  • In memory only. The last 100 profiles, at most 1000 queries each, in the dev server’s memory. Nothing is written to disk, to a database or to cookies; the browser keeps only how you left the bar.
  • Secrets. Prisma arguments whose key looks like a secret (password, token, apiKey, authorization, cookie…) are shown as [redacted], and so are the SQL parameters that carry them: those equal to such an argument, and those the SQL compares with or writes to a column named like one ("password" = $1, INSERT INTO … ("password") VALUES ($2)), raw SQL included. A secret bound some other way in raw SQL (inside a function call, say) still shows. Long strings are cut.
  • Profiles are lost when the dev server restarts, and each process keeps its own.
  • Each browser tab with the bar keeps a server-sent events connection open. Over HTTP/1.1 a browser allows six per host, so many open tabs of the same app can stall new requests.
  • Query durations are measured from Node: they include the network and any wait for a pooled connection.