{"_id":"@arguslog/sdk-vue","_rev":"6-515f311c3dcaf844e8ea26bd9bed0868","name":"@arguslog/sdk-vue","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@arguslog/sdk-vue","version":"1.0.0","license":"MIT","_id":"@arguslog/sdk-vue@1.0.0","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"dist":{"shasum":"9e1bec59d7b0e4dedfe629d2e8825d9715b5c327","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-1.0.0.tgz","fileCount":31,"integrity":"sha512-HKRBhiDyFtTc0aOR98dq0606CGItgootZrhZgQ+jSBB9JohqAwqp6J8WBKhUlAOuI6D+84eTIcflmAY2PE7Zvw==","signatures":[{"sig":"MEYCIQDXDG0quToLmoNk4nEIaXvdrgHc1a+YdCyFKbPWRZsjfQIhAL2dL7mZ7gG8hk9OaSONdHqQ7ylb8EWADHyL6qNgX+3z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22335},"main":"./dist/index.js","type":"module","_from":"file:arguslog-sdk-vue-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"_resolved":"/tmp/ed14cabe321324f9d96d20f7e14baf51/arguslog-sdk-vue-1.0.0.tgz","_integrity":"sha512-HKRBhiDyFtTc0aOR98dq0606CGItgootZrhZgQ+jSBB9JohqAwqp6J8WBKhUlAOuI6D+84eTIcflmAY2PE7Zvw==","_npmVersion":"10.9.7","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@arguslog/sdk-browser":"1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","jsdom":"^25.0.1","eslint":"^9.18.0","vitest":"^3.2.4","typescript":"^5.7.0","@vue/test-utils":"^2.4.6","@arguslog/tsconfig":"0.0.0","@vitest/coverage-v8":"^3.2.4","@arguslog/eslint-config":"0.0.0"},"peerDependencies":{"vue":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-vue_1.0.0_1778259596441_0.74503329010875","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arguslog/sdk-vue","version":"1.0.1","license":"MIT","_id":"@arguslog/sdk-vue@1.0.1","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"dist":{"shasum":"035f4b17400f70998a5d32213d14b525d9756fd0","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-1.0.1.tgz","fileCount":31,"integrity":"sha512-uTWEBQcTCSoUchYZFcYrJ60ardRw67IPH6LAd9BoZ8t6jfe9h7xzy0sO3VK02Gh1X0F0a5n7HCWZqKqnjAY53g==","signatures":[{"sig":"MEYCIQC73vv9zQI9NvnCK2XgFPuLcfNfV9hS49Xk/SbALa+qYQIhAOgZLIsvlFlFiQZZ/qAc+37/IhdS8ci1M6TghpNCpM4n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30669},"main":"./dist/index.js","type":"module","_from":"file:arguslog-sdk-vue-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"_resolved":"/tmp/b97a66d27473902e6c2e7490dccfdd72/arguslog-sdk-vue-1.0.1.tgz","_integrity":"sha512-uTWEBQcTCSoUchYZFcYrJ60ardRw67IPH6LAd9BoZ8t6jfe9h7xzy0sO3VK02Gh1X0F0a5n7HCWZqKqnjAY53g==","_npmVersion":"10.9.7","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@arguslog/sdk-browser":"1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","jsdom":"^25.0.1","eslint":"^9.18.0","vitest":"^3.2.4","typescript":"^5.7.0","@vue/test-utils":"^2.4.6","@arguslog/tsconfig":"0.0.0","@vitest/coverage-v8":"^3.2.4","@arguslog/eslint-config":"0.0.0"},"peerDependencies":{"vue":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-vue_1.0.1_1778264949130_0.3297863083816899","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@arguslog/sdk-vue","version":"1.0.2","license":"MIT","_id":"@arguslog/sdk-vue@1.0.2","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"dist":{"shasum":"aeb667226f79c376755e7629d3fb158aee807319","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-1.0.2.tgz","fileCount":31,"integrity":"sha512-8LE4OI3llfVzBT+Uk0Ej08Yz46ESmYs8xfeY4u2ykYHkKPYwZ8pQ6Lfvj2uQ0e9+Wr2apa5BmSxSS3pST8AHjw==","signatures":[{"sig":"MEUCICSVi61UC5j2uoJYn+i6EOkfVtN464Q3GbnbaCAlLZrLAiEA1uP5YDI46r3f5Tud4nA+sQX2YVYab5hGMrR9IJM7QKA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30669},"main":"./dist/index.js","type":"module","_from":"file:arguslog-sdk-vue-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"_resolved":"/tmp/de98c342d7ebcae1548f9041203e99f2/arguslog-sdk-vue-1.0.2.tgz","_integrity":"sha512-8LE4OI3llfVzBT+Uk0Ej08Yz46ESmYs8xfeY4u2ykYHkKPYwZ8pQ6Lfvj2uQ0e9+Wr2apa5BmSxSS3pST8AHjw==","_npmVersion":"10.9.7","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@arguslog/sdk-browser":"1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","jsdom":"^25.0.1","eslint":"^9.18.0","vitest":"^3.2.4","typescript":"^5.7.0","@vue/test-utils":"^2.4.6","@arguslog/tsconfig":"0.0.0","@vitest/coverage-v8":"^3.2.4","@arguslog/eslint-config":"0.0.0"},"peerDependencies":{"vue":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-vue_1.0.2_1778358383855_0.6075001627394769","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@arguslog/sdk-vue","version":"1.0.3","license":"MIT","_id":"@arguslog/sdk-vue@1.0.3","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"dist":{"shasum":"a50213762ec4976d7708470f7434e8304298404d","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-1.0.3.tgz","fileCount":31,"integrity":"sha512-fbCY8ZgiwnwPr0VHmtcOTIcRvt5jKwVslsfOWSUQ93JAOkQPlSKKDDpex0gK/pBO4gvSvONcy7Mgxo2LZg4Rcw==","signatures":[{"sig":"MEUCIGwpPCVBeirafdcdq9acR6omcUluvpsIVo7wa5ObVolmAiEAnRmpRu0Hqa24v0jo/ax0sxO0Kx+XN9K4AaX5BxK1Ups=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30910},"main":"./dist/index.js","type":"module","_from":"file:arguslog-sdk-vue-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"_resolved":"/tmp/3d857b5d47ae8a96d44e921adab0c8d1/arguslog-sdk-vue-1.0.3.tgz","_integrity":"sha512-fbCY8ZgiwnwPr0VHmtcOTIcRvt5jKwVslsfOWSUQ93JAOkQPlSKKDDpex0gK/pBO4gvSvONcy7Mgxo2LZg4Rcw==","_npmVersion":"10.9.7","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@arguslog/sdk-browser":"1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","jsdom":"^25.0.1","eslint":"^9.18.0","vitest":"^3.2.4","typescript":"^5.7.0","@vue/test-utils":"^2.4.6","@arguslog/tsconfig":"0.0.0","@vitest/coverage-v8":"^3.2.4","@arguslog/eslint-config":"0.0.0"},"peerDependencies":{"vue":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-vue_1.0.3_1778361156454_0.6349325718693377","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@arguslog/sdk-vue","version":"1.0.4","license":"MIT","_id":"@arguslog/sdk-vue@1.0.4","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"dist":{"shasum":"18cd0e49eec0f26eca4b7a7a0b39e07440c9d279","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-1.0.4.tgz","fileCount":31,"integrity":"sha512-yYU+1UD5QZYrOx5SYhNpSwginUW8GaXAcpkZKKovbtHHZCMA1puQ22smdANi/GJUAqLQNP7oE7+WCHTU0CcsXA==","signatures":[{"sig":"MEYCIQC1yGpI52YjpVo8UDc4SodNQb/Ey5pPhe8UQiF8x7qCiAIhANcVJ+A69Qwp4A+VKzsaPMbE0GLplIRczRy0Nn2TY1fI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30910},"main":"./dist/index.js","type":"module","_from":"file:arguslog-sdk-vue-1.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"_resolved":"/tmp/cdb67774ebc765aed04bb3f17bdfd494/arguslog-sdk-vue-1.0.4.tgz","_integrity":"sha512-yYU+1UD5QZYrOx5SYhNpSwginUW8GaXAcpkZKKovbtHHZCMA1puQ22smdANi/GJUAqLQNP7oE7+WCHTU0CcsXA==","_npmVersion":"10.9.7","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@arguslog/sdk-browser":"1.1.3"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","jsdom":"^25.0.1","eslint":"^9.18.0","vitest":"^3.2.4","typescript":"^5.7.0","@vue/test-utils":"^2.4.6","@arguslog/tsconfig":"0.0.0","@vitest/coverage-v8":"^3.2.4","@arguslog/eslint-config":"0.0.0"},"peerDependencies":{"vue":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-vue_1.0.4_1778363891192_0.9409880678182447","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@arguslog/sdk-vue","version":"2.0.0","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","license":"MIT","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"sideEffects":false,"dependencies":{"@arguslog/sdk-browser":"2.0.0"},"peerDependencies":{"vue":"^3.3.0"},"devDependencies":{"@vitest/coverage-v8":"^3.2.4","@vue/test-utils":"^2.4.6","eslint":"^9.18.0","jsdom":"^25.0.1","typescript":"^5.7.0","vitest":"^3.2.4","vue":"^3.5.0","@arguslog/tsconfig":"0.0.0","@arguslog/eslint-config":"0.0.0"},"repository":{"type":"git","url":"git+https://github.com/petarnenov/arguslog-sdks.git","directory":"packages/sdk-vue"},"homepage":"https://arguslog.org","bugs":{"url":"https://github.com/petarnenov/arguslog-sdks/issues"},"scripts":{"build":"tsc -p tsconfig.build.json","dev":"tsc -p tsconfig.build.json --watch","lint":"eslint src","typecheck":"tsc --noEmit","test":"vitest run","test:coverage":"vitest run --coverage","clean":"rm -rf dist .turbo"},"_id":"@arguslog/sdk-vue@2.0.0","_integrity":"sha512-O3YNfbCu7cGWuQ/msueql6b3EdW7RPXI70PtQecym0OOyQyfkT3bZMwe0Mf1Dllju19Z337oBmIIkM8t1ueFxg==","_resolved":"/tmp/57703ec48aa373817fa1ff09b26d70ed/arguslog-sdk-vue-2.0.0.tgz","_from":"file:arguslog-sdk-vue-2.0.0.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-O3YNfbCu7cGWuQ/msueql6b3EdW7RPXI70PtQecym0OOyQyfkT3bZMwe0Mf1Dllju19Z337oBmIIkM8t1ueFxg==","shasum":"8c536567d87a60798932e6a359e1b7a5dcd5eecf","tarball":"https://registry.npmjs.org/@arguslog/sdk-vue/-/sdk-vue-2.0.0.tgz","fileCount":32,"unpackedSize":34429,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/r6cJ+zJErN7fTvUqL5kQfnp/en6RR+AhvrS17AUwawIhAP2SnWswv0QdZ7D4vxPVIXSEX89ScQza4+nlwlAgI1I/"}]},"_npmUser":{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"},"directories":{},"maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk-vue_2.0.0_1778619545266_0.15732163793930498"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-08T16:59:56.381Z","modified":"2026-05-12T20:59:05.551Z","1.0.0":"2026-05-08T16:59:56.620Z","1.0.1":"2026-05-08T18:29:09.271Z","1.0.2":"2026-05-09T20:26:23.990Z","1.0.3":"2026-05-09T21:12:36.603Z","1.0.4":"2026-05-09T21:58:11.346Z","2.0.0":"2026-05-12T20:59:05.403Z"},"license":"MIT","description":"Arguslog Vue 3 SDK — plugin, composable, error boundary, errorHandler integration","maintainers":[{"name":"petar.nenov","email":"petarnenovpetrov@gmail.com"}],"readme":"# @arguslog/sdk-vue\n\n[![npm version](https://img.shields.io/npm/v/@arguslog/sdk-vue.svg)](https://www.npmjs.com/package/@arguslog/sdk-vue)\n[![license](https://img.shields.io/npm/l/@arguslog/sdk-vue.svg)](https://github.com/petarnenov/arguslog/blob/main/LICENSE)\n\nVue 3 SDK for [Arguslog](https://arguslog.org) — a multi-tenant error tracking platform.\nShips a Vue plugin that initialises the underlying browser SDK, hooks into\n`app.config.errorHandler` to capture component errors automatically, and exposes a\n`useArguslog()` composable plus an `ArguslogErrorBoundary` component for opt-in\nboundary-style capture.\n\nShips ESM only. Built on `@arguslog/sdk-browser`. Vue 3.3+ is the only peer dependency.\n\n## Install\n\n```bash\npnpm add @arguslog/sdk-vue\n# or\nnpm install @arguslog/sdk-vue\n# or\nyarn add @arguslog/sdk-vue\n```\n\n## Quick start\n\n```ts\nimport { createApp } from 'vue';\nimport { createArguslog } from '@arguslog/sdk-vue';\n\nimport App from './App.vue';\n\ncreateApp(App)\n  .use(\n    createArguslog({\n      dsn: 'arguslog://<key>@<host>/api/<projectId>',\n      release: '1.0.0',\n      environment: 'production',\n      integrations: ['globalHandlers', 'autoBreadcrumbs'],\n    }),\n  )\n  .mount('#app');\n```\n\n`createArguslog()` does three things:\n\n1. Initialises `@arguslog/sdk-browser` with the supplied options.\n2. Replaces `app.config.errorHandler` (chaining onto the previous one) so uncaught\n   component errors are captured automatically — see **Automatic error capture**.\n3. Provides an `ArguslogService` instance for `useArguslog()` consumers.\n\n## DSN format\n\n```\narguslog://<publicKey>@<host>/api/<projectId>\n```\n\nThe `publicKey` is project-scoped and safe to embed in the bundled SPA. Get it from your\nArguslog project settings page.\n\n## Capturing events from components\n\n```vue\n<script setup lang=\"ts\">\nimport { useArguslog } from '@arguslog/sdk-vue';\n\nconst arguslog = useArguslog();\n\nasync function checkout() {\n  try {\n    await charge();\n  } catch (err) {\n    arguslog.captureException(err, {\n      level: 'error',\n      tags: { feature: 'checkout' },\n    });\n  }\n}\n\nfunction onLogin(user: { id: string; email: string }) {\n  arguslog.setUser(user); // email auto-scrubbed\n  arguslog.setTag('plan', 'pro');\n}\n</script>\n```\n\n`useArguslog()` returns an `ArguslogService` instance. When called outside of a Vue\ncomponent context (or before the plugin has been installed), it falls back to a fresh\nservice that proxies to the underlying SDK singleton — meaning you can call it from\nplain `.ts` modules without dancing around setup-context errors.\n\nThe service exposes the full capture surface:\n\n| Method                      | Purpose                                           |\n| --------------------------- | ------------------------------------------------- |\n| `captureException(err, h?)` | Reports a thrown value with optional level/tags.  |\n| `captureMessage(msg, lvl?)` | Sends a string event — useful for warnings.       |\n| `setUser(user)`             | Stamps subsequent events with the user.           |\n| `setTag(key, value)`        | Single-key tag mutation.                          |\n| `setContext(name, ctx)`     | Free-form structured context (e.g. `order` data). |\n| `addBreadcrumb(crumb)`      | Manually push a breadcrumb (router, …).           |\n| `flush()`                   | Drain the send queue. Returns a `Promise<void>`.  |\n| `isInitialized()`           | `true` once `init` has run successfully.          |\n\n## Automatic error capture\n\nBy default, `createArguslog()` chains a handler onto `app.config.errorHandler` so any\nuncaught error inside a component, lifecycle hook, watcher, or template expression is\nforwarded to `captureException`. Events are tagged `framework: 'vue'` and carry Vue's\n`info` string (e.g. `\"render\"`, `\"setup function\"`) under the `vueInfo` tag.\n\nIf you maintain your own handler chain and don't want the automatic install, opt out:\n\n```ts\ncreateApp(App).use(\n  createArguslog({\n    dsn,\n    attachErrorHandler: false, // we'll wire it ourselves\n  }),\n);\n```\n\n…and use the standalone helper:\n\n```ts\nimport { vueErrorHandler } from '@arguslog/sdk-vue';\n\napp.config.errorHandler = (err, instance, info) => {\n  vueErrorHandler(err, instance, info); // Arguslog\n  myAnalytics.report(err, info); // your own\n};\n```\n\n## ErrorBoundary component\n\nFor UI surfaces where you want to **render a fallback** instead of letting the error\npropagate, `ArguslogErrorBoundary` captures and recovers:\n\n```vue\n<script setup lang=\"ts\">\nimport { ArguslogErrorBoundary } from '@arguslog/sdk-vue';\nimport RiskyWidget from './RiskyWidget.vue';\n</script>\n\n<template>\n  <ArguslogErrorBoundary>\n    <template #default>\n      <RiskyWidget />\n    </template>\n    <template #fallback=\"{ error, reset }\">\n      <div class=\"error-state\">\n        <p>Something went wrong. We've been notified.</p>\n        <button @click=\"reset\">Try again</button>\n      </div>\n    </template>\n  </ArguslogErrorBoundary>\n</template>\n```\n\nThe error is captured before the fallback renders. `reset()` re-mounts the default slot,\nso transient failures (a flapping API) recover without a full page reload.\n\n## Router breadcrumbs\n\n```ts\nimport { createRouter } from 'vue-router';\nimport { useArguslog } from '@arguslog/sdk-vue';\n\nconst router = createRouter({\n  /* … */\n});\n\nrouter.afterEach((to) => {\n  useArguslog().addBreadcrumb({\n    category: 'navigation',\n    message: to.fullPath,\n    level: 'info',\n  });\n});\n```\n\nA captured exception now carries the route the user was on as a breadcrumb — usually the\nmost useful single signal during triage.\n\n## Pinia store breadcrumbs\n\n```ts\nimport { setActivePinia } from 'pinia';\nimport { useArguslog } from '@arguslog/sdk-vue';\n\npinia.use(({ store }) => {\n  store.$onAction(({ name, args }) => {\n    useArguslog().addBreadcrumb({\n      category: 'state',\n      message: `${store.$id}.${name}`,\n      level: 'info',\n      data: { args },\n    });\n  });\n});\n```\n\n## Options\n\n`createArguslog(options)` accepts the same `ArguslogOptions` as `@arguslog/sdk-browser`,\nplus one Vue-specific switch:\n\n| Option               | Type                                                                                               | Default      | Notes                                                                                                                                                                                                                                                   |\n| -------------------- | -------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `dsn`                | `string`                                                                                           | _required_   | See \"DSN format\" above.                                                                                                                                                                                                                                 |\n| `release`            | `string`                                                                                           | _none_       | Free-form version tag stamped on every event.                                                                                                                                                                                                           |\n| `environment`        | `string`                                                                                           | _none_       | E.g. `production`, `staging`, `dev`.                                                                                                                                                                                                                    |\n| `sampleRate`         | `number` 0–1                                                                                       | `1.0`        | Fraction of events kept; useful for high-traffic apps.                                                                                                                                                                                                  |\n| `maxBreadcrumbs`     | `number`                                                                                           | `50`         | Ring-buffer size.                                                                                                                                                                                                                                       |\n| `beforeSend`         | `(event) => event \\| null \\| Promise<...>`                                                         | _identity_   | Last-mile mutation / drop hook.                                                                                                                                                                                                                         |\n| `scrubbing`          | `{ enabled?: boolean; extraPatterns?: RegExp[] }`                                                  | enabled      | PII redaction in messages and URLs.                                                                                                                                                                                                                     |\n| `transport`          | `{ fetch?: typeof fetch; maxRetries?: number }`                                                    | global fetch | Inject a custom fetch (testing) or bump retry budget.                                                                                                                                                                                                   |\n| `integrations`       | `('globalHandlers' \\| 'console' \\| 'fetch' \\| 'xhr' \\| 'history' \\| 'dom' \\| 'autoBreadcrumbs')[]` | _none_       | Opt in to auto-instrumentation in the underlying browser SDK. `'autoBreadcrumbs'` is a meta-flag — see the [`@arguslog/sdk-browser` README](https://github.com/petarnenov/arguslog/tree/main/packages/sdk-browser#integrations) for details on each ID. |\n| `debug`              | `boolean`                                                                                          | `false`      | Logs every send to console — never enable in production.                                                                                                                                                                                                |\n| `attachErrorHandler` | `boolean`                                                                                          | `true`       | Whether to chain onto `app.config.errorHandler`. Vue-only.                                                                                                                                                                                              |\n\n## Nuxt 3\n\nThe plugin works in Nuxt 3 too — register it as a client-side plugin so it doesn't try to\nbind to `app.config.errorHandler` on the server (the SDK itself is a server no-op, but\nbinding the handler is wasted work):\n\n```ts\n// plugins/arguslog.client.ts\nimport { createArguslog } from '@arguslog/sdk-vue';\n\nexport default defineNuxtPlugin((nuxtApp) => {\n  nuxtApp.vueApp.use(\n    createArguslog({\n      dsn: useRuntimeConfig().public.arguslogDsn,\n      release: useRuntimeConfig().public.release,\n      environment: process.env.NODE_ENV,\n    }),\n  );\n});\n```\n\nFor server-side error tracking, install\n[`@arguslog/sdk-node`](https://www.npmjs.com/package/@arguslog/sdk-node) and use its\n`integrations: ['processHandlers']` for nitro server crashes.\n\n## Troubleshooting\n\n**Events not appearing on the dashboard.**\nCheck the browser DevTools network tab — the SDK POSTs to your DSN's host. A blocked\nrequest usually means a corporate firewall, a CSP that doesn't allow the ingest origin,\nor a typo in the DSN. Set `debug: true` to log blocking failures to the console.\n\n**Stack traces show minified frames.**\nUpload sourcemaps for the release using\n[`@arguslog/cli`](https://www.npmjs.com/package/@arguslog/cli):\n\n```bash\narguslog releases new 1.0.0 --project 42\narguslog sourcemaps upload dist/assets/index.abc123.js.map \\\n  --project 42 --release \"$RELEASE_ID\" --name dist/assets/index.js\n```\n\nThe `release` you pass to `createArguslog()` must match the `<version>` you pass to\n`releases new` — exact string match.\n\n**`useArguslog is not a function` after upgrade.**\nYou're importing from a stale type-cached path. Restart your IDE's TS server and\nre-run `pnpm install`. The symbol is `export { useArguslog } from '@arguslog/sdk-vue'`\nacross all 1.x.\n\n**Errors fire twice for the same exception.**\nYou're already chaining a custom `app.config.errorHandler` and the plugin is _also_\nattaching one. Pass `attachErrorHandler: false` and call `vueErrorHandler` from your own\nchain.\n\n## Source\n\nThe full implementation lives in the [arguslog monorepo](https://github.com/petarnenov/arguslog)\nat `packages/sdk-vue/`. Issues and PRs welcome.\n","readmeFilename":"README.md","homepage":"https://arguslog.org","repository":{"type":"git","url":"git+https://github.com/petarnenov/arguslog-sdks.git","directory":"packages/sdk-vue"},"bugs":{"url":"https://github.com/petarnenov/arguslog-sdks/issues"}}