Compatible with: IntelliJ IDEA Android Studio
Dec 12, 2018
1 096

What is Manifold?

Manifold is a new breed of Java tooling. It provides powerful features to make Java development more appealing and productive. Simply add the Manifold jar to your project and begin taking advantage of it.

What can you do with Manifold?

Meta-programming

Gain direct, type-safe access to structured data. Eliminate code generators. Minimize build time.

  // JSON files are types!
  Person person = Person.fromJsonUrl(url);
  person.setFirstName("Scott");

Extensions

Add extension methods and interfaces to existing Java classes, even String, List, and File. Eliminate boilerplate code.

  String greeting = "hello";
  greeting.myMethod(); // augment any type

Structural Typing

Unify disparate APIs. Bridge software components you do not control. Access maps through type-safe interfaces.

  MyInterface thing = (MyInterface)notMyInterface;
  thing.myMethod(); // treat as your interface

Templates

Make type-safe, templatized data files using pure Java. Use the same template expressions in Java strings.

  int hour = 8;
  // "It is 8 o'clock"
  String time = "It is $hour o'clock"; 

Type-safe Reflection

Access private features with @Jailbreak to avoid the drudgery and vulnerability of Java reflection.

  @Jailbreak Foo foo = new Foo();
  // Direct, type-safe access to *all* foo's members
  foo.privateMethod(x, y, z); 
  foo.privateField = value; 

Libraries

Leverage stock Manifold extension libraries for standard Java classes. Save time and reduce boilerplate code.

  File file = new File(path);
  // Use refreshing extensions to File
  String content = file.readText(); 

IntelliJ

Use the Manifold IntelliJ IDEA plugin to fully leverage Manifold in your development cycle. The plugin provides comprehensive support for IntelliJ features including code completion, navigation, usage searching, refactoring, incremental compilation, hotswap debugging, full-featured template editing, and more.

Learn More

Download plugin

Recent change notes

- Fix some issues introduced with Jailbreak (from ver 0.30-alpha) -- Rename `@JailBreak` to proper spelling '@Jailbreak` (doh!) -- Fix problems related to compile error reporting from javac -- Prohibit use of @Jailbreak in compound assignment expressions and increment/decrement expressions; it's better to use direct assignment with '=' -- Resolve https://github.com/manifold-systems/manifold/issues/33

General usage instructions

http://manifold.systems/docs.html