1.30.0 (2026-01-26)
1.29.0 (2026-01-22)
- agent: Append runtime JAR to bootstrap class loader (7f5ee4c)
- agent: Support running agent on bootstrap classpath (c161259)
- Close underlying Writers in RecordingSession to prevent resource leaks (4ac35f5)
- Don't throw when loading logging config fails (7782132)
- Enforce UTF-8 for AppMap I/O and add encoding regression tests (923aeef)
- agent: Add option to exclude specific hook classes (412f24d)
- Enhanced JDBC hooks with PreparedStatement and batch support (d901a68)
- logging: Improve AppMap agent logging and config output (fb1a4f9)
1.28.1 (2025-11-11)
- Prevent crash when test fails on a different thread (c7525c6)
1.28.0 (2025-03-25)
- Show basic information messages (d71b1a1)
1.27.2 (2025-03-24)
- More robust java metadata matching (102adfa)
1.27.1 (2024-09-02)
- detect packages in multi-project repositories (b60aac6)
1.27.0 (2024-08-27)
- add config parameter to disable custom stringification (cb18931)
1.26.10 (2024-08-21)
- crash due to config packages key with missing value (ef48399)
1.26.9 (2024-07-05)
- NPE running init when no appmap.yml found (6dcd0d9)
1.26.8 (2024-05-16)
- filename too long in some cases (fc74f0a)
1.26.7 (2024-04-15)
- APPMAP_OUTPUT_DIRECTORY can be set from env (c933c45)
- resolve output directory relative to config (deb2a84)
1.26.6 (2024-04-10)
- don't create a log file by default (883cd93)
1.26.5 (2024-03-21)
- correct detection of Spark server (571e74b)
1.26.4 (2024-02-16)
- use the correct ClassLoader (9803d25)
1.26.3 (2024-02-02)
- avoid NPE when a Proxy method returns void (fe538f2)
- don't locate agent jar using a CodeSource (fd1dcd8)
1.26.2 (2024-01-31)
- handle a framework classloader that filters (690d187)
- skip some JDK packages (0958324)
- strip annotations when instrumenting (d297955)
- support class in unnamed package (2667f83)
1.26.1 (2024-01-16)
- add info message when saving AppMap (c7237a1)
- don't try to add event on test failure (fb64b52)
- make sure TestNG tests are captured correctly (c44c222)
- only track packages stats when debugging (d2d3d99)
1.26.0 (2024-01-11)
- add missing hook (5a7dc89)
- generalize the way test methods are detected (dce4e3d)
- get rid of reflection in HookConditionSystem (bebeffd)
- improve agent performance (241d165)
- only add essential git info (c816cb2)
- create a log file by default (b86203f)
1.25.3 (2023-12-14)
- make sure getters and setters are ignored (0bc2f8f)
1.25.2 (2023-12-06)
- support JUnit 5 test methods with parameters (1cdd2e9)
1.25.1 (2023-12-06)
- decrease logging about missing classes (87c83c9)
1.25.0 (2023-12-01)
- manage ClassPool instances per-thread (30092a1)
- record calls made through a Proxy (0873d3d)
1.24.1 (2023-11-21)
- only collect git metadata in a repo (d4ad468)
1.24.0 (2023-11-16)
- really show the config on startup (15f58b6)
- add Git metadata, improve source paths (62624fd)
1.23.0 (2023-11-02)
- don't use ClassLoader.loadClass (b8cf5ca)
- add NoAppMap to control test-case recording (b136056)
1.22.3 (2023-10-24)
- go back to hooking org.junit.jupiter.api.Test (f15dc6d)
- instrumentation should catch Throwable (8b2064d)
1.22.2 (2023-10-12)
- only add the agent jar if it can be located (ca4bc1b)
1.22.1 (2023-10-06)
- set request recording type correctly (b50bc06)
1.22.0 (2023-10-04)
- add the agent jar to the classpath (0e84af4)
- avoid Gradle class filtering (f3c2f57)
- avoid NPE for anonymous classes (aa250cd)
- have safeClassForName require a ClassLoader (f26eabe)
- make ActiveSession.threadSession static (86be0b7)
- set test_status, test_failure for JUnit 5 (aee1156)
1.21.0 (2023-09-12)
- make tmp/appmap the default output directory (50581e8)
1.20.3 (2023-09-06)
- handle unset appmap.output.directory (c9d1a39)
1.20.2 (2023-09-02)
- don't read the servlet's InputStream (f44e4d7)
- enable remote recording appropriately (ab326f7)
- only add ServletListener once (bfe1bd8)
1.20.1 (2023-08-22)
- don't generate AppMaps for static resources (8cc322c)
1.20.0 (2023-08-18)
- add support for appmap_dir (2e0f4c7)
1.19.0 (2023-08-07)
- CtClassUtil.isChildOf checks all interfaces (2b30bbf)
- ignore abstract methods when instrumenting (ab7de0a)
- make sure events are flushed correctly (e876ab5)
- print the path to the config on startup (e37df71)
- set the name of a remote recording (bc2e8a8)
1.18.1 (2023-07-03)
- don't depend on spring-web (ad75e17)
1.18.0 (2023-06-30)
- add request recording (066a316)
1.17.2 (2023-05-09)
- hook other HttpClient.execute overloads (f8d3533)
1.17.1 (2023-04-26)
1.17.0 (2023-04-18)
- hook Apache's HttpClient (25201d7)
1.16.0 (2023-03-18)
- generate a default config (9ff949b)
1.15.7 (2023-03-03)
- don't crash on unnamed package (4fc4dab)
1.15.6 (2023-02-09)
- Don't print exception when copying across filesystems fails (57ce08f)
1.15.5 (2023-01-04)
- eliminate possibility of NPE (cf13c4b)
1.15.4 (2022-11-30)
- improve naming of output directory (660b506)
1.15.3 (2022-11-25)
- handle parameterized requests correctly (c54769e)
1.15.2 (2022-11-18)
- avoid a javassist issue (7c39c28)
1.15.1 (2022-06-07)
- Record normalized_path for Spring requests (f6a9ee6)
1.15.0 (2022-06-07)
- Allow appmap_dir, language, and add'l (a94ea0b)
1.14.1 (2022-05-11)
- Handle missing package names (4270ab5)
1.14.0 (2022-05-10)
- Configurable method labels (2deb582)
1.13.1 (2022-04-27)
- Ignore extra properties in appmap.yml (95db306)
1.13.0 (2022-04-26)
- Add elapsed time (950f083)
1.12.3 (2022-04-26)
1.12.2 (2022-04-19)
- Don't call mocked java.sql methods (0ba3563)
1.12.1 (2022-04-12)
- Move Labels into separate artifact (3527e65)
1.12.0 (2022-03-13)
- Eliminate whereAmI at agent startup (0396572)
- Add @Labels annotation (60c99bb)
1.11.0 (2022-02-28)
- Allow hook application to be ordered (d111e0a)
- http_server_requests for Http Core servers (0b2d09c)
1.10.0 (2022-02-16)
- Add support for Http Core (baa0ba6)
1.9.0 (2022-01-18)
- Record non-public methods (28a8fe9)
1.8.1 (2021-12-13)
- Fix path and exclude item regexp (18c028f)
1.8.0 (2021-12-13)
- Record HTTP server request and response headers (009358a)
1.7.0 (2021-10-26)
- Update output from validate command (318deab)
1.6.1 (2021-10-03)
- Avoid ConcurrentModificationException (c6d1b7b)
1.6.0 (2021-09-13)
- Abort if no config found (cd57f2f)
- Look for config in parent directories (1be744b)
1.5.0 (2021-08-30)
- Add validate subcommand to the CLI (a0650b0)
1.4.1 (2021-08-14)
- Guard NPE when checking the shallow flag on a package (ff5c418)
- Retry move as copy when the file is locked (91ea858)
1.4.0 (2021-08-09)
1.3.0 (2021-08-02)
- Improve robustness and logging of parent interface and superclass access (a24f056)
- Keep events 'open' until the next event is received (9e12099)
- Remove '-f' option to 'wait' (637f904)
- Add session recording checkpoint (04d9293)
- Apply different fields to call, return, sql, etc (3d8db1f), closes #50 #44
- appmap.debug enables additional debug info (67e935e)
- Expand and modularize the integration test suite (ad06488)
- Record return event parent_id (40be795)
- Write source location and test status metadata (397e200)
1.2.0 (2021-07-26)
- 'init' command suggests appmap.yml with project name and packages (299bb70)
- 'status' command reports project properties (cb4693d)
- 'status' command reports test commands (058ae0e)
- Add stub for agent 'init' command (55d9fc8)
- Add stub for agent 'status' command (7f5fd02)
- Helper commands can direct output to a file (bf1c699), closes #89
1.1.0 (2021-05-13)
- Add a property to enable automatic recording at boot time (7c83614)
1.0.4 (2021-04-08)
- Don't append System path to class pools (681d74e)
- Provide better error message when encountering an unknown event (c69a877)
1.0.3 (2021-03-22)
- Allow classes compiled without locals to be hooked (0e0a0d3)
- Capture exceptions thrown from SQL interfaces (9d1e66f)
1.0.2 (2021-03-18)
1.0.1 (2021-03-17)
- System.err logs on configuration failures.
- Support for capturing
http_client_requestandhttp_client_responseevents for Java 8 applications.
- ReflectiveType.invoke now makes the method accessible before trying to invoke it.
- The new system property
appmap.debug.httpto show some debugging when handling requests for/_appmap/record.
- Cleaned up reflection in
HttpServletRequest,HttpServletResponse, andFilterChain.
- The new system property
appmap.recordcan be used to specify a method to record. - The system property
appmap.debug.file. When set, debug output will be written to the specified file, instead of toSystem.err.
appmap-javanow uses significantly less memory when recording.
- Tests annotated with
org.testng.annotations.Testare now recorded.
- Added callback handlers with
METHOD_EXCEPTIONmethod event to close recording of current session forJunitandJupiterTests.
- Dependencies of
appmap-javawhich useslf4jwill now use a nop implementation in order to stop them from logging if the client application provides it's own implementation. If left up to the client application,appmap-javacan interfere with test frameworks by corrupting stdout. appmap-javawill no longer callThreadmethods that may be extended by the client application resulting in a stack overflow.appmap-javano longer assumes thatThreadidentifiers are unique. Previously, this could result in concurrent modificiations to resources not meant to be shared across threads.
- Removed a potential deadlock that could occur if the user's code required a
lock in
toString. - Output directories will be recursively created
appmap.event.valueSizecan be used to specify the length of a value string before truncation occurs.Recorder.recordwill record and output the execution of aRunnable.
- In
appmap.ymla package item can now have an emptypath, allowing the user to specify a list of exclusions only. This can be useful for excluding groups of tests not meant to be captured. - The default output directory for appmap files is now
./tmp/appmap. This directory will be created automatically if it does not exist.
appmap.output.directorywill be created if it does not exist. Previously this resulted in a null pointer exception when recording.- Parsing errors in
appmap.ymlwill stop the application from running and emit a useful error.
- Support for Jakarta
javax.servletdependency
- All logging is disabled by default. To enable logging use the
appmap.debugsystem property. - Loading times have been reduced significantly.
- Name property added to appmap metadata
- HTTP request parameters are captured
- Spring path params are captured
- Spring normalized path info is captured
- Support for JUnit Jupiter
- Feature group metadata is now written to the correct key
languageobject inmetadatanow includesversionandenginebased on the Java runtime.sql_queryevents now includedatabase_typeas reported by the database driver.
- Versioning has begun. The authoritative
versionis now declared inbuild.gradle. - Feature and feature group metadata fields are now written to scenarios captured from test cases.