Changelog

Improving AppSignal, one deploy at a time.

Jun 10, 2026

Fix host metrics timeout and other improvements

Node.js3.8.1

Fixed

  • Continue reporting non-disk host metrics when a mount is frozen.

  • Fix host-metrics leaking zombie [timeout] processes in Alpine linux containers.

    Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system timeout. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.

  • Ensure sendError ends its span even when the callback throws.

View the Node.js package v3.8.1 changelog for more information.

Mar 17, 2026

Update OpenTelemetry dependencies to v2

Node.js3.8.0

Changed

  • Update OpenTelemetry dependencies to v2. All bundled OpenTelemetry packages have been updated to their OpenTelemetry v2-compatible versions. This resolves compatibility issues when third-party span processors or instrumentations are used alongside AppSignal, which could cause spans to silently drop due to v1/v2 incompatibilities. The @opentelemetry/instrumentation-redis-4 package has been removed. Redis v4 instrumentation is now handled by @opentelemetry/instrumentation-redis, which supports both Redis v3 and v4.
  • Update Prisma instrumentation to v7. The @prisma/instrumentation package has been updated from v6 to v7. The middleware config option has been removed, as Prisma dropped its middleware API in Prisma v5. Prisma's native tracing is now the only supported instrumentation method.
  • Bundled certificates have been updated.
  • Update BullMQ OpenTelemetry extractor to support new messaging semantic conventions.
  • Use system-specific operation name in messaging span names.

View the Node.js package v3.8.0 changelog for more information.

Feb 05, 2026

Require parent spans for database and HTTP

Node.js3.7.4

Changed

  • Require parent spans on database and outgoing HTTP instrumentations that support it. When a database query is performed using the ioredis, pg, redis or mongoose libraries, or when an outgoing HTTP request is performed using the http module, a span will only be created if a trace has already been started in the current active context, that is, if the span to be created would have a parent.

    This helps prevent database queries and outgoing HTTP requests happening in uninstrumented contexts from counting towards your requests quota.

Fixed

  • Add support for Koa v3.

View the Node.js package v3.7.4 changelog for more information.

Oct 15, 2025

Auto detect log format, support ElasticSearch spans

Node.js3.7.2

Added

  • Add a log format option for autodetection the log format.
  • Add support for native OpenTelemetry spans from @elastic/transport package in Node.js.

Changed

  • Detect the log format automatically. We now detect if a log line is in the JSON, Logfmt, or plaintext format. No further config needed when calling our logger, like so:

    JavaScript
    const logger = Appsignal.logger("app");
    logger.info("message");

Fixed

  • Fix 'unknown' events being reported for some HTTP routes.

View the Node.js package v3.7.2 changelog for more information.

May 08, 2025

Allow overriding namespaces and other improvements

Node.js3.6.6

Changed

  • Allow overriding namespaces that are automatically set by the AppSignal agent based on the OpenTelemetry instrumentation that emitted the span, such as the graphql or background namespaces.
  • Log a debug message when the reported error is ignored by the ignore_errors config option.

Fixed

  • Update mysql2 and pg instrumentations. This fixes an issue where queries performed using promises with mysql2@3.11.5 are not instrumented, as well as an issue where pg is not instrumented under certain bundlers and runtimes.

View the Node.js package v3.6.6 changelog for more information.

Mar 11, 2025

Delay agent reboots

Node.js3.6.2

Changed

  • Delay and eventually halt agent reboots by the extension.

    The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.

    In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.

    This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.

View the Node.js package v3.6.2 changelog for more information.

Feb 24, 2025

Node.js package v3.6.0

Node.js3.6.0

Changed

  • Update span recognition following the OpenTelemetry Semantic Conventions 1.30 database specification. We now also sanitize SQL queries in the db.query.text attribute and Redis queries in the db.operation.name attribute.
  • Bump the log message when no span is active and one of our sample data helpers are used like setParams, setSessionData, setCustomData, etc from debug to warning.
  • Update bundled trusted root certificates

Removed

  • Remove the OpenTelemetry beta feature in favor of the new AppSignal collector. If you are using the AppSignal agent to send OpenTelemetry data in our public beta through the /enriched endpoint on the agent's HTTP server, please migrate to the collector to continue using the beta. The collector has a much better implementation of this feature for the beta.

View the Node.js package v3.6.0 changelog for more information.

Nov 22, 2024

Improve Pino transport

Node.js3.5.4

Fixed

  • Allow Pino transport to be used as a transport. Before, our Pino transport could only be used as a destination:

    Node.js
    import pino from "pino";
    JavaScript
    import pino from "pino";
    import { Appsignal, AppsignalPinoTransport } from "@appsignal/nodejs";
     
    pino(
      AppsignalPinoTransport({
        client: Appsignal.client,
        group: "pino",
      }),
    );

    This meant it was not possible to log both to our transport and to another destination.

    Now, it is also possible to use it as a Pino transport, with the transport Pino config option or the pino.transport() function:

    JavaScript
    import pino from "pino";
     
    pino({
      transport: {
        target: "@appsignal/nodejs/pino",
        options: {
          group: "pino",
        },
      },
    });

    It is no longer necessary to pass the AppSignal client to the Pino transport. AppSignal must be active for the Pino transport to work.

    By enabling its use as a transport, it is now possible to use it alongside other transports:

    JavaScript
    pino({
      transport: {
        targets: [
          // Send logs to AppSignal...
          { target: "@appsignal/nodejs/pino" },
          // ... and to standard output!
          { target: "pino/file" },
        ],
      },
    });

View the Node.js package v3.5.4 changelog for more information.

Nov 07, 2024

Fix build on ARM64 Linux and other improvements

Node.js3.5.3

Added

  • Set the app revision config option for Scalingo deploys automatically. If the CONTAINER_VERSION system environment variable is present, it will use used to set the revision config option automatically. Overwrite it's value by configuring the revision config option for your application.

Fixed

  • Fix an issue where the extension fails to build on ARM64 Linux.

View the Node.js package v3.5.3 changelog for more information.

Oct 16, 2024

Node.js package v3.5.1

Node.js3.5.1

Added

  • A Pino transport is now available. If Pino is your main logger, you can now use the AppSignal pino transport to send those logs to AppSignal.

    JavaScript
    import pino from "pino";
    import { Appsignal, AppsignalPinoTransport } from "@appsignal/nodejs";
     
    const logger = pino(
      AppsignalPinoTransport({
        client: Appsignal.client,
        group: "application",
      }),
    );

Changed

  • Change the primary download mirror for integrations.

View the Node.js package v3.5.1 changelog for more information.

$appsignal install

Make your next crash make sense.

Free for 30 days. No credit card. Two-minute install.