Skip to main content

BugPin v1.1.0

This release adds widget translations in 8 languages, an Export Diagnostics dropdown on the report detail page, inline auto-save for Status / Priority / Assignee, and reorganizes the Admin Console sidebar. A database migration runs automatically on first launch.

:::danger Update your widget at the same time If you embed the widget via the @arantic/bugpin-widget npm package, you must upgrade it to 1.1.0 together with the server. Bundled widgets older than 1.1.0 are not compatible with the v1.1.0 submission endpoint, and report submissions from those embeds will fail.

npm install @arantic/bugpin-widget@1.1.0
# or: pnpm add @arantic/bugpin-widget@1.1.0
# or: yarn add @arantic/bugpin-widget@1.1.0

Then rebuild and redeploy your application. Sites that load the widget via <script src="https://your-bugpin-server.com/widget.js"> are unaffected, since the server always serves the matching widget build. :::

Heads Up Before You Upgrade

Read these items before pulling the new image.

1. Projects now default to auto-detect language

Existing projects default to Auto language mode after the upgrade. If a German visitor opens your site, the widget renders in German and they receive emails in German.

To keep a project English-only, switch it to Manual → English in the Admin Console under Widget → Language (or per-project under Projects → select project → Settings). See Widget Translations for the full reference.

2. Admin Console URLs have changed

The Admin Console sidebar was reorganized into three groups and the old /globalsettings/* paths are gone. Bookmarks pointing at the old URLs will land on the dashboard.

New paths are flat:

GroupItems
Workspace/, /reports, /projects
Widget/button, /dialog, /screenshot, /language
Console/settings, /notifications, /users, /security, /branding, /license

/settings has sub-tabs for General, Storage, and SMTP (SMTP moved out of Notifications). /notifications has sub-tabs for General, Reporter, and Email Templates. See Server Configuration for the full map.

3. Database migration adds a reporter_locale column

003_add_reporter_locale.sql adds a reporter_locale column to the reports table. Existing reports are backfilled with en. The migration runs automatically on first launch, so no manual action is required.

If you use Docker, the standard update path (docker compose pull && docker compose up -d) handles this for you. See Docker Update for the procedure and rollback steps.

4. Default Max. Screenshot Size raised from 5 MB to 10 MB

The in-app default for Max. Screenshot Size is now 10 MB instead of 5 MB. Existing installs keep whatever value you previously saved; only fresh installs and the in-app default placeholder reflect the new value.

A related fix: captured screenshots are now validated against the Max. Screenshot Size setting (not the separate Max. Image Upload Size), so the widget's oversize warning and the server's accept/reject logic now agree.

5. Some admin API endpoints are stricter

PATCH /api/projects/:id (when sending settings) and PATCH /api/settings (when sending widgetLauncherButton) now reject unknown fields with a 400 validation error. Previously, unknown fields were silently stored. The Admin Console UI is unaffected. Only third-party automations that hand-craft requests with non-standard fields are affected; review your integration scripts before upgrading.

What's New

Widget translations in 8 languages

The widget UI, the screen-capture permission helper, and every reporter email are translated into:

  • English (en)
  • German (de)
  • French (fr)
  • Dutch (nl)
  • Spanish (es)
  • Italian (it)
  • Japanese (ja)
  • Simplified Chinese (zh)

Each project chooses Auto (follow the visitor's browser or the host page's <html lang>) or Manual (lock to one locale). Host pages can override Auto detection via the data-language script attribute, the language option on BugPin.init(), or the runtime calls BugPin.setLanguage('fr') and BugPin.getLanguage(). The widget also re-renders when <html lang> changes.

Reporter language is captured at submission time and used for every follow-up email about that report (confirmation, status change, priority change, assignment, reporter message). See Widget Translations for the full reference.

Per-locale launcher button and tooltip text

Under Widget → Button in the Admin Console, the Button Text and Tooltip Text editors each have a tab strip for the 8 supported locales. The resolved value falls through three layers: project override for the visitor's locale → global override for the visitor's locale → built-in default. You only need to translate the locales you care about.

Export Diagnostics

The report detail header has a new Export dropdown. Export a report's full context as Markdown, Plain text, an AI prompt, or JSON, and either copy or download. A Customize dialog lets you toggle individual sections (summary, environment, page context, console, network errors, user activity, storage keys, reporter info) and apply redactions (strip query strings, truncate console to the last 100 lines, strip input values).

The Description, Console output, Network errors, User activity, and Storage keys cards also gain a per-section copy button. See Export Diagnostics.

Inline auto-save on report detail

Status, Priority, and Assignee are now inline-editable dropdowns in the report detail header. There is no Edit / Save / Cancel button: changes save the moment you pick a value.

Collapsible cards on report detail

The cards on the report detail page (Description, Console output, Network errors, User activity, Storage keys, Reporter Messages, etc.) are collapsible, with state remembered across page reloads.

Screenshot downloads

Captured screenshots can be downloaded directly from the widget thumbnail before submitting and from the report detail page (both thumbnail and full-size lightbox).

Widget capture-quality reduction

When a capture exceeds the configured Max. Screenshot Size, the widget's Screenshots tab offers a Reduce capture quality toggle to fit the capture under the limit instead of rejecting the report outright.

Admin Console restructure

  • Sidebar split into three labelled groups: Workspace, Widget, Console.
  • "System" renamed to Settings, with sub-tabs General, Storage, SMTP.
  • Notifications gains sub-tabs General, Reporter, Email Templates.
  • The Email Templates editor groups templates into Reporter and Team sections, each with a per-locale tab strip.
  • The built-in Test Widget page has a language selector for previewing the widget in any of the 8 locales without changing project settings.
  • Flat URLs replace /globalsettings/* (see Heads Up).

Enterprise-only additions

These ship in the EE plugin and require an Enterprise license:

  • Reporter Assignment email template, sent to the reporter when their report is assigned or reassigned. Previously hardcoded, now editable under Notifications → Email Templates.
  • Per-language email template editing: without a license, the editor lets you view all locales but only edit English.

Notable Fixes

  • The widget Button live preview now follows the language selected in the Button Text and Tooltip Text editors.
  • The localized text editor remembers your last selected language across navigation.
  • "English required" asterisk removed from the Tooltip Text editor only: tooltip ships built-in defaults for all 8 languages, so leaving English empty falls back to the built-in. Button Text still marks English as required because it has no built-in default.
  • Saving Screenshot Settings from the Admin Console now persists correctly (a field-name mismatch was silently dropping changes).
  • The widget dialog no longer jumps in height when switching between Details and Screenshots tabs after capturing a screenshot.
  • The annotation canvas backdrop is now theme-aware instead of a fixed dark blue.
  • Submitting empty English button text in custom mode now shows an inline error directly under the input instead of a toast.

Security

  • bun audit reports zero vulnerabilities. Added a fast-xml-builder ^1.2.0 override at the workspace root to patch a high-severity quote-escape bypass (GHSA-5wm8-gmm8-39j9) and a moderate comment-regex bypass (GHSA-45c6-75p6-83cc) reachable transitively through @aws-sdk/client-s3.
  • Settings update endpoints reject unknown fields. The project-level launcher button schema, global launcher button schema, and project settings schema no longer accept unknown keys. Every accepted field is explicitly enumerated; any unknown key on these payloads returns a 400. Prevents stray fields from being stored in the project settings JSON column and from being echoed through the public widget config endpoint.
  • Widget submit error messages sanitize user-controlled values. The UNSUPPORTED_MEDIA_TYPE, FILE_TOO_LARGE, and FILE_READ_ERROR JSON responses now strip control characters and cap embedded file.name and file.type strings at 128 characters before interpolating into the user-facing message field. Prevents log and dashboard rendering oddities when a widget submits crafted multipart filenames.

Maintenance

  • Admin Console upgraded from React 18 to React 19 (no user-facing changes).
  • Lucide icons upgraded to v1.16 in both the widget (lucide-preact) and Admin Console (lucide-react). Widget icons are now unified under Lucide as outlined glyphs throughout the dialog, screenshot manager, and annotation toolbar. The v1 release removed brand icons; the GitHub integration card now uses a bundled inline GitHub logo.

How to Upgrade

Docker

# Back up first
docker compose stop
cp -r ./data ./data-backup-$(date +%Y%m%d)
docker compose up -d

# Pull and restart
docker compose pull && docker compose up -d

Migrations run automatically on startup. See Docker Update for the full procedure and rollback steps.

Bun

git pull
bun install
bun run build
bun run start

The migration runs on first launch.

Embedded widget (npm package)

For every application that embeds the widget via @arantic/bugpin-widget, upgrade to 1.1.0 and redeploy:

npm install @arantic/bugpin-widget@1.1.0
npm run build
# then redeploy your app

Sites that load the widget via a <script src=".../widget.js"> tag require no action: the server serves the matching build automatically.

We use cookies for analytics to improve our website. More information in our Privacy Policy.