To get latest version of Scapix, use latest cmodule release in your CMake file.

2024-03-29 (cmodule v2.0.0):

Major new version with many changes:

  • new repository: scapix-jni (split from scapix repository)
  • new repository: scapix-java-api (split from scapix repository)
  • new repository: scapix-core (split from scapix repository)
  • C++20 required
  • CMake 3.20 required
  • Scapix Bridge: update clang to version 18.1.1
  • Scapix JNI: Scapix Link Java renamed to Scapix JNI
  • Scapix JNI: namespace changed from scapix::link::java to scapix::jni
  • Scapix JNI: new_object() is now a global function: jni::new_object<java::lang::String>()
  • cmodule: update pybind11 to version 2.12.0
  • Remove SCAPIX_META_STRING macro (no longer necessary - with C++20 strings can be passed as template parameters)
  • Scapix Java API: provide pre-generated C++ headers for all JDK and Android platforms
  • Scapix Java API: dramatically increase compilation speed of generated headers (about 5 times!) by redesigning jni::ref to work with incomplete types

2024-03-05 (cmodule v1.0.46):

  • fix(xcode): set correct LIBRARY_SEARCH_PATHS for SDKs using EFFECTIVE_PLATFORM_NAME (iOS, watchOS, tvOS) commit

2024-02-21 (cmodule v1.0.44):

  • fix: skip unsupported struct types (union, anonymous, lambda, etc.) 55
  • cmodule: update scapix-bin to version 2.0.16
  • cmodule: update zlib to version 1.3.1
  • cmodule: update fmt to version 10.2.1
  • cmodule: update boost to version 1.84.0

2023-10-21 (cmodule v1.0.43):

  • fix(xcode): add LIBRARY_SEARCH_PATHS, new XCode no longer finds libs outside of build tree commit
  • fix(java): Passing null callbacks 54
  • fix(cmake): Respect CMAKE_CXX_STANDARD, in addition to target_compile_features() 31

2023-08-19 (cmodule v1.0.42):

  • feat(java-api): ref<> and object<> redesign
  • feat(java-api): implement NativeException.getMessage()
  • fix(java-api): workaround for bug in NewWeakGlobalRef in JDK 17+
  • fix(java-api): array<>::new_() with generated headers
  • fix(java-api): local_frame
  • fix(java-api): get_string_region
  • fix(cs): using clang with ms stdlib
  • fix(emscripten): add define EMSCRIPTEN
  • fix(cmake): rename cmake var SCAPIX_ROOT to fix warning in CMake 3.27
  • cmodule: update scapix to version 1.0.36
  • cmodule: update Boost to version 1.83.0
  • cmodule: update pybind11 to version 2.11.1
  • cmodule: update zstd to version 1.5.5
  • cmodule: update zlib to version 1.3
  • cmodule: update curl to version 8.2.1
  • cmodule: CMODULE_DISABLE_WARNINGS - also disable CMake deprecation warnings for libraries built by cmodule
  • cmodule: removed CMODULE_SHARED_LIBS option, use CMake standard BUILD_SHARED_LIBS instead.
  • cmodule: refactor code to prevent repeated configuration - improves CMake configuration speed about 30%

2023-06-21 (cmodule v1.0.41):

  • fix(java): array/map/set types nested inside map/set 52

2023-06-19 (cmodule v1.0.40):

  • fix(python): generate enum definitions 49
  • add(python): preserve nested class/struct/enum hierarchy
  • fix: ignore nested private class/struct/enum

2023-05-23 (cmodule v1.0.39):

  • fix(java): workaround for VS 17.6 regression (remove object_base::base_class)
  • fix(java): set_static_field() with object parameter
  • fix(java): DetachCurrentThread() may be called after VM destruction
  • fix(java): add compatibility with gcc 9 in C++20 mode
  • fix(java): check exception after GetPrimitiveArrayElements() call
  • refactor(java): minor changes

2023-04-02 (cmodule v1.0.38):

  • update clang to version 16.0.0
  • update pybind11 to version 2.10.4
  • cmake: set <policy_max> version to 3.26 (removes cmake warnings)
  • improve scapix generator include directories handling for better compatibility with various build environments
  • msvc: improve forward compatibility with future MSVC versions
  • java: improve error reporting when Java exception is raised
  • android: add example of ProGuard rules required with ‘minifyEnabled true’

2022-08-31 (cmodule v1.0.36):

  • fix (Java, Java Script, C#): std::vector<bool> conversion 43
  • fix: including compiler built-in headers (like <immintrin.h>) with any version of clang/gcc 41
  • fix: class with no bridged functions, not even a public default constructor 42
  • fix (Java): memory leak when C++ exception is caught in Java under some circumstances
  • fix: build sometimes fails when Scapix updated to new version without full rebuild
  • update ZLIB to version 1.2.12

2022-05-16 (cmodule v1.0.35):

  • feat: add SCAPIX_META_STRING C++20 implementation - Much faster compilation speed for code with many SCAPIX_META_STRING statements, when using C++20 mode.
  • fix(java): update jdk-11.0.2 generated headers - Add support for C++20 reserved keywords.
  • feat(java): SCAPIX_JAVA_AUTO_ATTACH_THREAD option - With SCAPIX_JAVA_AUTO_ATTACH_THREAD option, Scapix automatically calls AttachCurrentThread() if current thread is not attached to JNI Env.

2022-05-08 (cmodule v1.0.34):

  • CMake: allow calls to add_library(lib) and scapix_bridge_headers(lib) from different directories (CMake files).

2022-05-02 (cmodule v1.0.33):

  • Java: add support for std::function type conversion from C++ to Java
  • Java: add configuration option for custom JNI_OnLoad function - SCAPIX_CUSTOM_JNI_ONLOAD
  • Java: add configuration option for using application ClassLoader instead of FindClass JNI API - SCAPIX_CACHE_CLASS_LOADER
  • update clang to version 14.0.0
  • update pybind11 to version 2.9.2

2021-11-18 (cmodule v1.0.32):

  • add support for overriding C++ virtual functions in JavaScript (Python and JavaScript supported, other languages coming soon)
  • improve detection of virtual functions eligible for overriding in bridged languages
  • add support for targets using C++17 / C++20 / C++23 build mode
  • improve detection of JDK on macOS
  • fix: exception with C# bool field in struct returned from C++
  • fix: build when SCAPIX_BRIDGE is not defined

2021-10-13 (cmodule v1.0.31):

  • add support for overriding C++ virtual functions in Python (support for other languages coming soon)
  • callbacks from C++ to ObjC/Swift now use @autoreleasepool to insure ObjC/Swift objects are released before returning to C++
  • update clang to version 13.0.0
  • update pybind11 to version 2.8.0

2021-05-10 (cmodule v1.0.29):

  • add support for C++ structs
  • update clang to version 12.0.0
  • fix parser bug with self including C++ headers (usually used with circular header dependencies and forward class declarations)

2021-03-24 (cmodule v1.0.28):

  • Apple platforms (macOS, iOS, tvOS, watchOS): add support for other CMake generators in addition to Xcode generator

2021-02-11 (cmodule v1.0.27):

  • add support for Apple Silicon Mac (Darwin-arm64) as host platform
  • add support for Apple watchOS and Apple tvOS
  • update Emscripten support for compatibility with latest Emscripten SDK


  • fix crash: passing shared_ptr with null value (Java, C#)
  • fix bindings generation on macOS: use clang builtin headers only with msvc (to avoid conflicts with system clang builtin headers)


  • update clang to version 11.0.0
  • integrate clang builtin headers (fixes issue with new Visual Studio 16.8)


  • simplify XCode integration (generated xcconfig file now contains all required settings)
  • add new example for XCode integration: scapix_example_objc


  • update clang to version 10.0.1
  • macOS: rebuild scapix and scapix_java executables to target macOS 10.12+
  • Java bridge: add support for multiple bridged C++ libs
  • scapix_java: update list of C++ keywords to C++20


  • C# bridge: use C++ namespaces, add support for multiple native libraries.


  • Added C# bridge (beta).


  • Added enum types support (using underlying integer type).


  • Added unsigned integer types support.


  • Emscripten bridge: use native target headers when running Scapix generator instead of host headers.


  • Scapix generator: update clang to version 9.0.0, don’t generate anything on compilation error, remove unnecessary trace message.


  • Use native target headers when running Scapix generator instead of host headers (except Emscripten bridge).


  • Switch to Cmake built-in iOS support, remove custom ios.toolchain.cmake file.


  • Added support for JavaScript (Emscripten) language bridge.