Stream – Activity Log & Audit Trail

Description

Stream is a complete activity log and audit trail for your WordPress site: see what changed, who changed it, and when. From plugin activations to post edits, login attempts to new user creation, every user and system action is recorded in an audit log built for debugging, security monitoring, and compliance.

Every logged action is displayed in an activity stream and organized for easy filtering by User, Role, Context, Action or IP address. Admins can highlight entries in the activity log—such as suspicious user activity—to investigate what’s happening in real time. Stream also lets you configure email alerts and webhooks for integrations like Slack and IFTTT, so your team knows the moment something goes wrong.

Stream keeps its own logs healthy too: records are automatically purged on the retention schedule you choose, with batched deletion and orphaned-data cleanup that stay reliable even on very large sites.

Stream is also AI-ready: its abilities are exposed through the WordPress Abilities API and MCP Adapter, so AI assistants and other tools can securely query your site’s activity records.

For advanced users, Stream supports a network view of all activity records on your Multisite, exclude rules to ignore certain kinds of user activity, and a WP-CLI command for querying records.

Stream is free and fully open source — development happens in the open on GitHub, maintained by XWP.

With Stream’s powerful activity logging, you’ll have the information you need to responsibly manage your WordPress sites.

Built-In Tracking Integrations For Popular Plugins:

  • Advanced Custom Fields
  • bbPress
  • BuddyPress
  • Easy Digital Downloads
  • Gravity Forms
  • Jetpack
  • Two Factor
  • User Switching
  • WooCommerce
  • Yoast SEO

Built-In Tracking For Core Actions:

  • Posts
  • Pages
  • Custom Post Types
  • Users
  • Themes
  • Plugins
  • Tags
  • Categories
  • Custom Taxonomies
  • Settings
  • Custom Backgrounds
  • Custom Headers
  • Menus
  • Media Library
  • Widgets
  • Comments
  • Theme Editor
  • WordPress Core Updates

Other Noteworthy Features:

  • Multisite view of all activity records on a network
  • Limit who can view user activity records by user role
  • Set exclude rules to ignore certain kinds of user activity
  • Live updates of user activity records in the Stream
  • Export your Activity Stream as a CSV or JSON file
  • WP-CLI command for querying records

Configuration

Most of the plugin configuration is available under the “Stream” “Settings” page in the WordPress dashboard.

Request IP Address

The plugin expects the $_SERVER['REMOTE_ADDR'] variable to contain the verified IP address of the current request. On hosting environments with PHP processing behind reverse proxies or CDNs the actual client IP is passed to PHP through request HTTP headers such as X-Forwarded-For and True-Client-IP which can’t be trusted without an additional layer of validation. Update your server configuration to set the $_SERVER['REMOTE_ADDR'] variable to the verified client IP address.

As a workaround, you can use the wp_stream_client_ip_address filter to adapt the IP address:

add_filter(
    'wp_stream_client_ip_address',
    function( $client_ip ) {
        // Trust the first IP in the X-Forwarded-For header.
        // ⚠️ Note: This is inherently insecure and can easily be spoofed!
        if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
            $forwarded_ips = explode( ',' $_SERVER['HTTP_X_FORWARDED_FOR'] );

            if ( filter_var( $forwarded_ips[0], FILTER_VALIDATE_IP ) ) {
                return $forwarded_ips[0];
            }
        }

        return $client_ip;
    }
);

⚠️ WARNING: The above is an insecure workaround that you should only use when you fully understand what this implies. Relying on any variable with the