• Java 20 support
  • Zig 0.11.0 support (Zig 0.10.1 or newer is now required)
  • New <useIntrinsics> option to enable supported Java methods, such as String#equals, to be implemented directly in native code, preventing instrumentation.
  • Added static analysis to improve code generation by eliding null checks where they are not required.


  • Fixed a rare mistranslation of long arithmetic
  • Fixed a rare segfault on ARM compiles when multiple native threads attempt to load a class concurrently
  • Optimised some corner cases in code generation
  • Zig 0.10.0 or newer is now required


  • Java 19 support
  • New <fastCompile> option to improve compilation times for large projects
  • Faster, more compact and more secure native string encryption based on ChaCha20
  • Support for annotations to include and exclude methods from translation
  • Hardened <flowObf> against reverse engineering
  • Hardened invokedynamic translation against reverse engineering


  • Java 18 support
  • New <flowObf> option to enable native control flow obfuscation
  • New <options> section in the config which encloses <stringObf>, <mangle> and the new <flowObf> option
  • Randomised data layouts in native code


  • Up to a 40% reduction in file size for large projects
  • Translations of instanceof and athrow now handle null correctly
  • Targets are now compiled in parallel
  • Hardened protection mechanisms against static analysis


  • JNIC now requires Java 11+ and Zig 0.9.1+ to run, but can still process Java 8 classes
  • Fixed a bug with invokedynamic translation on Java 9+
  • Hardened protection mechanisms with stringObf enabled


  • Loader class name is now randomly generated to prevent conflicts


  • All native methods are now compiled into a single library
  • Improved performance of generated code by up to 4x
  • Improved performance of invokedynamic emulation by up to 10x
  • Significantly reduced file size overhead of string encryption
  • Various bugfixes


  • Java 17 support
  • Obfuscation is now a single step
  • Multi-platform support without needing to compile on each platform separately
  • Various bugfixes


  • Implemented per-user / online licencing
  • Changed default optimisation level to -O1 from -O3


  • Implemented XOR based string encryption
  • <clinit> is now translated by moving it to $jnicClinit
  • Added methodDesc attribute to <match> tags


  • Java 14 support
  • Relocated main package to dev.jnic


Initial release

Last Updated:
Contributors: konsolas