# Build and licensing

Copyright (c) 2026 Hammad Farooq Meer.

Traffic Warden is free software under GPL-2.0-or-later. You may redistribute and modify it under that license. There is no warranty. See LICENSE.txt.

The admin sources live in admin/src. In the development workspace run `npm ci`, `npm run typecheck`, and `npm run build`. The build uses @wordpress/scripts with admin/webpack.config.js and externalizes WordPress runtime packages; generated dependencies are recorded in admin/build/index.asset.php and live.asset.php. Installable releases contain the Explorer, live toolbar and lazy dock JS/CSS/RTL assets. Keep the complete build directory when distributing the plugin.

To rebuild directly from the release package, change into the plugin's admin directory, then run `npm ci`, `npm run typecheck`, and `npm run build`. That directory includes its package manifest, lockfile and TypeScript configuration. Node.js 20+ is required for these development tools; end users do not need Node.js or Composer.

Inter and JetBrains Mono are bundled locally; see licenses/ for their SIL Open Font License notices. No remote fonts or design-export scripts are loaded.

The original design documents remain in the development workspace. The Traffic Warden logo in asserts/logo.png is the author's supplied artwork, used unchanged. It is distributed with this plugin under GPL-2.0-or-later. The legacy marketing banner is not part of the release package.

Version 2.0.0 changes the technical identity: database tables, options, account preferences and extension/cleanup hooks use traffic_warden_*. Portable exports use traffic-warden/1, live snapshots use traffic-warden/live/1, REST uses traffic-warden/v1 and CLI uses wp traffic-warden. Old aliases are not registered. Deactivate older builds and back up the database before activating Traffic Warden. Tools > Traffic Warden migration offers explicit copying in bounded batches or empty history with settings preserved. wp traffic-warden migrate --user=<administrator> runs the same batches; use --url per multisite site. Legacy data is retained and is never removed by the new plugin's uninstall. Do not uninstall the older build with its deletion setting enabled before completing your backup and migration.

PHP collection is limited to eligible fatal errors observed at shutdown after the recorder starts. Nonfatal warnings, notices and deprecations are no longer captured. The plugin does not call error_reporting or install a PHP error handler. Historical nonfatal records can still be viewed after migration.
