- (plugin-react-native-navigation): New plugin that integrates with React Native Navigation. #1065
- (plugin-react-navigation): New plugin that integrates with React Navigation. #1067
- (browser): Attach an anonymous device ID to error reports and sessions when the new
generateAnonymousId
option is enabled. #1072
- (react-native): Allow plugins to be set in the JS layer. #1064
- (expo): Add support for Expo SDK v39 #1052
- (react-native): Update bugsnag-cocoa to v6.1.7 #1081
- Re-enabled the
Require Only App-Extension-Safe API
build setting bugsnag-cocoa#823 - Fix reporting of events with more than one error bugsnag-cocoa#821
- Fix crash-on-launch (attempt to insert into immutable dictionary). bugsnag-cocoa#819
- Add
+[Bugsnag breadcrumbs]
to allow apps to fetch the list of breadcrumbs. bugsnag-cocoa#813 - Disable JSON pretty-printing in KSCrash reports to save disk space and bandwidth. bugsnag-cocoa#802
- Fix reporting of Mach exception code and subcode. bugsnag-cocoa#806
- Create date formatters at init time to avoid potential race conditions. bugsnag-cocoa#807
- Refactor OOM handler to be less suceptible to data loss on crash. bugsnag-cocoa#804
- Re-enabled the
- (react-native): Update bugsnag-android to v5.2.1 #1080
- Support changing Event's api key in OnErrorCallback bugsnag-android#928
- Ensure device ID is set separately to the user ID bugsnag-android#939
- Improve stack traces and grouping for promise rejections on React Native < 0.63.2 bugsnag-android#940
- Prevent ConcurrentModificationException thrown from Metadata class bugsnag-android#935
- Prevent incorrect merge of nested maps in metadata bugsnag-android#936
- Improve stack traces and grouping for React Native promise rejections bugsnag-android#937
- (react-native): Update bugsnag-cocoa to 6.1.4. Fixes: Copy the metadata observer list rather than mutating it directly. #1048
- (react-native): Suppress unchecked cast warnings for React Native Android #1027
- (react-native): Provide proguard rules to ensure reflection works on minified/obfuscated Android builds #1030
- (react-native): Remove unnecessary log on iOS #1028
- (plugin-react): Make type definitions
BugsnagErrorBoundary
andBugsnagPluginReactResult
available for external use. 934 / #1009
- Use a peer dependency on @bugsnag/core in plugins #1012
- (expo): Ensure type definitions allow config to be supplied without an
apiKey
, as it may be supplied inapp.json
instead. #1010 - (plugin-angular): Update bundles and package entrypoints to support the Ivy renderer. #994
- (react-native): Add
codeBundleId
to config type definition. #1011
- (react-native): Ensure type definitions are included the @bugsnag/react-native package. #1002
- (plugin-react): Reinstate updated code after a bad merge on the type definitions. #987
As of this version, this repo contains our brand new notifier for React Native @bugsnag/react-native
. See the docs and upgrade guide for more info.
Some minor internal changes to shared code were made to support the new notifier, but no external changes are required for existing @bugsnag/js
or @bugsnag/expo
users to upgrade to this version.
- (plugin-vue): Ensure the
window.Vue
fallback does not throw in environments wherewindow
is undefined. #928 - (plugin-react): Ensure the
window.React
fallback does not throw in environments wherewindow
is undefined. #930 - (types): Use
Record<string,string>
instead ofobject
for thestackframe.code
property on events. #929
- (browser|node) Record the length of time the app has been running when an error occurs #881
- (plugin-browser-device): Add device orientation to error reports #881
- (plugin-expo-device): Add device manufacturer and model name for non-iOS devices to error reports #881
- (plugin-expo-device): Add total memory to error reports #881
- (plugin-node-device): Add OS name, OS version, total memory and free memory to error reports #881
- Update
@bugsnag/safe-json-stringify
to makeredactedKeys
case insensitive when using strings #905 - (expo): Add support for Expo SDK v38 #781
- (plugin-express): Ensure
req.body
is always present in metadata by collecting it at the last possible moment #872
- (plugin-express): Use import syntax that works without TypeScript's
esModuleInterop
compiler flag #866 - (expo-cli): Ensure version detection logic for @bugsnag/expo works after v7.0.0 #865
- (core): Ensure callbacks supplied in config permit functions with no named arguments #863
This update contains some substantial changes to plugin type definitions. If you are using TypeScript alongside a framework, you may need to make changes to your app. Please refer to the upgrade guide.
- (plugin-react|plugin-vue): Support late passing of framework reference #839
- (plugin-react): Add type definitions for
Bugsnag.getPlugin('react')
#839 - (plugin-vue): Add type definitions for
Bugsnag.getPlugin('vue')
#839 - (plugin-react): Add
clearError
prop toErrorBoundary
#797 - (plugin-express|plugin-koa|plugin-restify): Add full type definitions for plugins #853
- (types): Correct
init
static method name tostart
#847
- (plugin-vue): Fix plugin type definitions #809
- (delivery-expo): Ensure Expo delivery logs event details correctly (instead of
undefined
) #804 - (expo-cli): Ensure Expo cli inserts correct code depending on the version of the notifier #808
- (expo): Ensure types allow
.start()
with no arguments #817
- Add
onBreadcrumb
andonSession
callbacks. #665 - Add
pauseSession()
andresumeSession()
methods toClient
#666 - Add static
Bugsnag
client interface #685 - Add
getUser()
andsetUser()
methods toSession
#692
- Migrate lint tooling to ESLint for both .js and .ts source files #644
- Rename
autoNotify
->autoDetectErrors
, and addenabledErrorTypes
option for granularity #706 - Rename
autoCaptureSessions
->autoTrackSessions
and simplify validation logic #647 - Rename
report
toevent
#646 - Rename
notifyReleaseStages
->enabledReleaseStages
#649 - Rename
beforeSend
->onError
, removeevent.ignore()
and refactor callback logic #654 - Update signature of
notify(err, opts?, cb?)
->notify(err, onError?, cb?)
for a canonical way to update events #655 - Simplify client configuration, and store resulting config privately #656
- User is now stored privately on
client
andevent
and updated via get/set methods #657 - Remove individual breadcrumb flags in favour of
enabledBreadcrumbTypes
, renamebreadcrumb.{ name -> message, metaData -> metadata }
, and updateleaveBreadcrumb()
type signature to be more explicit #650 - Rename
metaData
->metadata
and add consistentadd/get/clearMetadata()
methods toClient
/Event
for manipulating metadata explicitly, rather than mutating a property #658 - Update
leaveBreadcrumb()
type signature to returnvoid
. #661 - Refactor
notify()
to not accept events (they go via_notify()
instead). ConsolidateEvent
static methods into a single.create()
utility, used by all automatic error detection components. #664 - Stop applying default error class/message when none is supplied #676
- Remove Bugsnag* prefix from internal class names #679
- Rename and make private the
Session
methodtrackError()
->_track()
#675 - Update
Event
to support multiple errors #680 - Move context to a private property on
Client
, and get/set viagetContext()/setContext()
#681 - Update
@bugsnag/safe-json-stringify
to replace redacted values with[REDACTED]
#683 - Update
collectUserIp
option to use[REDACTED]
instead of[NOT COLLECTED]
for consistency #743 - Refactor type definitions #682
- Ensure automatic context is not used when
setContext(null)
has been called #694 - Rename
filters
option toredactedKeys
#704 - Rename
device.modelName
todevice.model
#726 - Rename
client.refresh()
toclient.resetEventCount()
#727 client.use(plugin)
has been removed and plugins must now be passed in to configuration #759- Invalid configuration (except for
apiKey
) now falls back to default values rather than throwing an error #759
- Remove non-public methods from
Client
interface:logger()
,delivery()
andsessionDelegate()
#659 - Remove
client.request
property #672 - Remove
client.device
property #673 - Remove
client.app
property #677 - Move breadcrumbs to a private property on
client._breadcrumbs
#681
- (expo): Ensure Expo packages that depend on
NetInfo
have their versions locked #796 - (expo-cli): Update Expo versions installed by the cli #796
Note, alongside this release, additional patches were made to previous minor versions of @bugsnag/expo
: 6.5.3
and 6.4.4
. This is to ensure the correct version of NetInfo
is depended on for SDK versions 36 and 34 respectively.
- (expo): Add support for Expo SDK v37 #781
- (node): Use
util.inspect()
on plain object errors when logging their value #696
- (delivery-x-domain-request): Correct
this
->client
reference when attempting to log an error #722
- (expo): Pin
@react-native-community/netinfo
dependency to exact version bundled by Expo #691 - (plugin-express), (plugin-restify): Send request metadata as the correct
notify()
parameter #687
- (expo): Add support for breaking changes in Expo SDK v36 #670
- (expo-cli): Choose a compatible version of @bugnsnag/expo for SDK v33-35 #670
- (plugin-network-breadcrumbs): Fixes the
window.fetch
monkey-patch to also acceptRequest
. #662
- (plugin-angular): Ensure Node notifier matches the type interface in the .d.ts file #626
- (plugin-koa): Ensure unhandled Koa errors are logged out and that non-errors don't generate two reports #614
- (plugin-inline-script-content): Tolerate errors when trying to call existing installed handler #613 (fixes #608)
- (plugin-inline-script-content): Ensure line numbers are correct when error is at line 1/2/3 #616
- (plugin-koa|express|restify): Ensure
clientIp
andreferer
are properly collected #617 (fixes #615)
- (expo): Support Expo SDK 34, dropping support for versions < 33 #610
- (expo-cli): Check for the current version of Expo and install an appropriate version of
@bugsnag/expo
#610
- (plugin-inline-script-content): Tolerate
WebDriverException: Message: Permission denied to access property "handleEvent"
errors when running in selenium #605 - (core): Tolerate being bundled in strict mode #584
- (plugin-inline-script-content): Ensure event handlers added before Bugsnag can be removed #582
- (core): Update
error-stack-parser
to ensure spaces in filenames are parsed correctly #612
- (plugin-inline-script): Ensure inline script content callback doesn't cause error logs when there are no stackframes #559 / #563
- (plugin-angular): Bundle an ES5 and an ES6 version of the plugin to support various Angular build settings #565 / #563
- (expo): Support configuration of post-publish hook, allowing On-premise users to customize the build/source map endpoints. #542
- (plugin-inline-script-content): Overhaul inline script tracking #528
- (node): Add Node version string to report and session payloads (device.runtimeVersions) #537
- (core): Update docs url so that it doesn't follow a redirect #536
- (plugin-navigation-breadcrumbs): Compile away
_restore()
function from output bundle which is only used in tests #533
- (plugin-koa): Send the correct status code when handling
ctx.throw()
errors #541 - (plugin-angular): Target ES6 so that classes in the build are native, not polyfilled #540
- (plugin-angular): Support subsequent rebuilds of an Angular app in AOT mode #539
- (plugin-node-surrounding-code): Truncate line length so that minified code doesn't exceed payload limit #531
This release adds @bugsnag/expo
, a notifier for use on React Native apps that are built using Expo.
A small internal change was made to facilitate this new notifier, but there are no changes required for existing users of documented APIs.
- (expo): a new top-level notifier
@bugsnag/expo
including a whole bunch of packages:@bugsnag/delivery-expo
- Expo-specific delivery mechanism which caches on disk when a crash happens, or the network is not available@bugsnag/plugin-expo-app
- gathers app information@bugsnag/plugin-expo-device
- gathers device information@bugsnag/plugin-react-native-app-state-breadcrumbs
- collects breadcrumbs when the app transitions to the foreground/background@bugsnag/plugin-react-native-connectivity-breadcrumbs
- collects breadcrumbs when the state of the network changes@bugsnag/plugin-react-native-global-error-handler
- reports unhandled errors@bugsnag/plugin-react-native-orientation-breadcrumbs
- collects breadcrumbs when the device orientation changes@bugsnag/plugin-react-native-unhandled-rejection
- reports unhandled promise rejections
- (core): internal delivery interface now receives the
client
it is attached to on creation, and thesendReport
/sendSession
methods are no longer passed thelogger
andconfig
objects which can be accesses on the client #489 (Note: this was an undocumented internal API)
- (core): Improvements to logging and available information when error reports are not sent #515
- (delivery-node): Error stack is now included in first argument to logger #486
- (core): Stacktrace is omitted in error breadcrumbs (it's not used by the dashboard) #512
- (plugin-navigation-breadcrumbs):
startSession()
is not called whenautoCaptureSessions=false
#514 - (plugin-express): Express/Connect now send a 500 (not 200) HTTP status when about to crash #513
- (core): Bad logic in
notify()
error normalisation #516
request
is no longer used for sending error reports and sessions. This results in a much smaller dependency footprint. If you were using theproxy
option orhttp(s)_proxy
environment variables you will need to update your implementation to pass in a proxy agent. See the proxy guide on our docs for more information.
- Prevent incorrect warning about missing peer dependencies when using yarn (#478)
- Deduplicate module in browser bundle (#479)
- Support serialising error objects (via. @bugsnag/[email protected]) (#356, #458)
- Fixed granular breadcrumb config logic (#461, #465, #466)
- Support @bugsnag/node being consumed in a Webpack bundle for Node (#450, #441)
- Tolerate errors accessing properties of an unhandled rejection event (#394, #442)
- Improve robustness of
window.onerror
callback, supporting additional jQuery parameter (#443, fixing #393 and #392) - Add CORS header
Access-Control-Allow-Origin: *
to uploaded S3 assets (#444)
- Ensure objects with a
null
prototype or badtoString()
implementation don't cause an error in console breadcrumbs (#429) - Ensure user ip is not collected when
collectUserIp=false
but user.id is explicitlyundefined
(#428) - Ensure previous
window.onerror
callback is always called (#427) - Ensure previous
window.onreadystatechange
callback is called (#426) - Ensure log methods are correctly called and that relevant callbacks are called in the event of a report failure (#437)
- Nuxt.js example (#425)
This is the first release of Bugsnag notifiers under the @bugsnag
namespace.
This "universal" repository combines Bugsnag's browser and Node.js notifiers and so for continuity with the browser version, which was at v4, the starting point for this monorepo and all of its packages is v5.0.0
.
See UPGRADING.md for guidance on how to update your application.
- Stop sending stacktrace with breadcrumb metadata
- Added missing instance properties to
Breadcrumb
TypeScript definition
- Workaround for iOS9 Safari CSP issue which caused bugsnag-js to throw an error (#358, #357)
This release fixes a couple of bugs with stacktrace parsing.
- Incorrect parsing of stacktraces for errors in Chrome that have no stackframes (#355)
- Incorrect parsing of stacktraces for errors in Firefox/Safari that have "@" in the URL path (#354)
Note: this release alters the behaviour of the notifier to track sessions automatically.
As part of this change, the way in which URLs are configured has been updated:
- endpoint: 'https://bugsnag-notify.example.com',
- sessionEndpoint: 'https://bugsnag-sessions.example.com',
+ endpoints: {
+ notify: 'https://bugsnag-notify.example.com',
+ sessions: 'https://bugsnag-sessions.example.com'
+ }
endpoints
and sessionEndpoints
are now deprecated but still supported. Note that session tracking
will be disabled if the notify endpoint is configured but the sessions endpoint is not – this is to
avoid inadvertently sending session payloads to the wrong server.
- A new end-to-end/black box test suite has been added (#351)
autoCaptureSessions
default value wasfalse
and is now true (#341)
endpoint
andsessionEndpoints
have been deprecated and combined into a single new option:endpoints
(#341)
- The old
e2e
test suite has been removed (#351)
- Use the correct network breadcrumb type (
network
->request
). Fixes network breadcrumbs not displaying in the dashboard. (#348)
The previous version (v4.6.1) was removed from the npm registry and the CDN because of critical issue surrounding history state methods. This release resolves that issue. The release notes for v4.6.1 are included here too for completeness.
- Fix history API url parameter logic (#347)
- Only pass in
url
parameter to history methods when it is notundefined
. Fixes a bug in IE11 where it convertsundefined
to a string, causing a redirect to/undefined
. (#342) - Prevent a crash in IE10 when accessing
history.state
. (#345)
A couple of fixes for IE10/11 relating to quirks in their implementation of the history APIs.
- Only pass in
url
parameter to history methods when it is notundefined
. Fixes a bug in IE11 where it convertsundefined
to a string, causing a redirect to/undefined
. (#342) - Prevent a crash in IE10 when accessing
history.state
. (#345)
- It is now possible to customize the logger by setting the
logger
option of the configuration object. A custom logger must have the methodsdebug
,info
,warn
anderror
. To completely disable logging, setlogger: null
. (#340)
- A custom version of safe-json-stringify now fully protects against circular structures returned from toJSON() and arbitrarily wide/deep structures (#338)
- New breadcrumbs! Breadcrumbs are now left when requests are made using XMLHttpRequest (ajax) or fetch(). This works with all request libraries out of the box: jQuery, axios, superagent etc. Metadata includes HTTP method, request url and the status code (if available). By default network breadcrumbs are collected all with other autoBreadcrumb types. If you don't want to collect network breadcrumbs, set
networkBreadcrumbsEnabled: false
. (#334)
- As part of #334 envify was added to compile out plugin "destroy" logic that was only required for tests.
- Switch from a protocol-relative default for endpoint and sessionEndpoint to "https://". IE8/9 will attempt to send via http if the protocol of the current page is http. Otherwise all requests will now go via https unless configured otherwise (#333).
- Fix rollup bundling issue (switching to a forked version of cuid) (#331)
- Perf improvements for breadcrumbs, most notably console log methods with lots of data (#329)
- Stub exported types to appease Angular's JIT compiler in dev mode (#323)
- Make hasStack(err) check more strict, making the unhandled rejection handler more robust and useful (#322)
- Strip query strings and fragments from stackframe files (#328)
- Switch to upstream version of
fast-safe-stringify
This release fixes a few issues with the fetching of inline script content, particularly after the location has changed due to window.history methods.
Unhandled promise rejection should also contain more actionable information (when the rejection reason is a DOMException, null, or undefined). Support for Bluebird promises was also added.
- Support for unhandled bluebird promise rejections (#317)
- Option to prevent IP collection (#313)
- Improved serialization of promise rejection reasons (#317)
- If a string was thrown and not caught, use it as the error message (#319)
- Collection of inline script content improved (#320, #318)
- Fix call to non-existent
logger.log()
(credit @alexstrat #304)
- Session sending now respects
notifyReleaseStages
option
- Rename option
enableSessionTracking
->autoCaptureSessions
for consistency with other platforms
- metaData and user were incorrectly attached to
report.app
(credit @tremlab #300)
- Support for tracking sessions and overall crash rate by setting
sessionTrackingEnabled
totrue
. In addition, sessions can be indicated manually usingbugsnagClient.startSession()
(#296) user
andmetaData
can now be supplied in configuration object (#299)- Bower and jspm support has been added as a result of #297 and some additional configuration
dist
directory (built assets) are now stored in git (#297)
- Handle inline script content per older notifiers for consistent grouping (#289)
- Correctly capture the page contents when an inline script error happens (#289)
- Add more type exports (#286)
- Add frameworks section to README.md
- Add READMEs to examples
- Add more detail to JS example (credit @tremlab, #284)
- Ensure empty/useless stackframes are removed
- Removed arbitrary timeouts from tests to alleviate CI flakiness
- Expose
metaData
anduser
types onClient
class (#287) - Give navigation details the correct type (some were marked as "manual")
- Improve type definition for notify() error argument (credit @rokerkony)
- Remove process.env.NODE_ENV inferred releaseStage
- Sidestep uglify's drop_compat option to prevent it from breaking bugsnag
Version 4 is a milestone release. A complete re-write and modernization for Bugsnag's JS error reporting.
See UPGRADING.md for migrating from v3 and see docs.bugsnag.com for full documentation.
🚀