HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
manifold-systems
manifold
Java2018–2026
manifold-systems / manifold

manifold

Manifold is a Java compiler plugin, its features include Metaprogramming, Properties, Extension Methods, Operator Overloading, Templates, a Preprocessor, and more.

13Distinct people
125Mentions
0Explicit recommenders
2.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Manifold is a Java compiler plugin, its features include Metaprogramming, Properties, Extension Methods, Operator Overloading, Templates, a Preprocessor, and more.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 10:49:33 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year125 dated mentions

Observed mentions: 2018-10-30 05:10:46 UTC to 2026-07-23 19:57:57 UTC.

01020302018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 18 mentions; 15 submissions, 3 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 13 mentions; 4 submissions, 9 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 21 mentions; 5 submissions, 16 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 33 mentions; 17 submissions, 16 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 19 mentions; 4 submissions, 15 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 15 mentions; 3 submissions, 12 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC110
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC18153
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC1349
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC312
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC21516
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC331716
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC19415
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC15312

What Hacker News says

19 sources
Quite similar to manifold-sql[1], which is arguably better integrated into Java than SQLx is into Rust. Inline native SQL in Java is *inherently type-safe*, no mapping -- query types, query results, query parameters all projected types at compile-time. int year = 2019; . . . for(Film film: "[.sql/] select * from film where release_year > :rel_year".fetch(year)) { out.println(film.title); } 1. https://github.com/manifold-systems/manifold/blob/master/man...
In SQLx – Rust SQL Toolkit
What if these were real, type-safe expressions in Java: 2025 July 19 // → LocalDate 299.8M m/s // → Velocity 1 to 10 // → Range<Integer> Schedule meeting with Alice on Tuesday at 3pm // → CalendarEvent That's the idea behind binding expressions — a compiler plugin I built to explore what it would mean if adjacency had operator semantics. It lets adjacent expressions bind based on their static types, forming new expressions through type-directed resolution. Details here: [https://github.com/manifold-systems/manifold/blob/master/doc...](https://github.com/manifold-systems/manifold/blob/master/doc...)
In Rethinking Syntax: Binding by Adjacency
I hadn't come across the "Row" polymorphism term before, but it sounds more like structural typing -- for example TypeScript, and to a lesser degree Go, have structural interfaces that provide "row polymorphic" programming. You could go further with variant structural typing, basically this is a broader form of type checking based on call compatibility, which answers the question -- is B#foo() callable as an A#foo()? For instance, your `area` example requires `double` result types, otherwise a row type having `width` and `length` defined as `integer` columns doesn't satisfy `area`. But, result types are naturally covariant -- `integer` is a subset of `double` -- which permits us to accept `integer` in the implementation of `area`. Similarly, parameter types are naturally contravariant -- `Shape` is contravariant to `Triangle`, thus `B#foo
Read the rest
(Shape)` is call-compatible as a `A#foo(Triangle)`, therefore I can pass a Triangle to `B#foo(Shape)`. The manifold project[1] for Java is one example where the type system is enhanced with this behavior using structural interfaces. Note, this goes further with parametric types where function result types and parameter types define variance and other constraints. 1. https://github.com/manifold-systems/manifold
In Row Polymorphic Programming

Show HN: Toward Nirvana with Optional Parameters

Hey HN! Oracle refuses to add optional parameters (and named args) to Java. So I did via a javac plugin and a smidge of hacking to modify the AST. The result is a pretty comprehensive implementation of the feature, without breaking binary compatibility. Here's a short summary. --- The manifold-params compiler plugin adds support for optional parameters and named arguments in Java methods, constructors, and records -- offering a simpler, more expressive alternative to method overloading and builder patterns. public String valueOf(char[] data, int offset = 0, int count = data.length - offset) {...} valueOf(array) // use defaults for offset and count valueOf(array, 2) // use default for count valueOf(array, count:20) // use default for offset by naming count This plugin
Read the rest
supports JDK versions 8 - 21+ and integrates seamlessly with IntelliJ IDEA and Android Studio. Key features: - Optional parameters -- Define default values directly in methods, constructors, and records - Named arguments -- Call methods using parameter names for clarity and flexibility - Flexible defaults -- Use expressions, reference earlier parameters, and access local methods and fields - Customizable behavior -- Override default values in subclasses or other contexts - Safe API evolution -- Add parameters or change defaults without breaking binary or source compatibility - Eliminates overloads and builders -- Collapse boilerplate into a single, expressive method or constructor - IDE-friendly -- Fully supported in IntelliJ IDEA and Android Studio Learn more: https://github.com/manifold-systems/manifold/blob/master/man...
1 points · Open discussion
Agreed. Type providers bring metaprogramming to F# in a way that’s both powerful and innovative. The concept is amazing, enabling a new frontier for dynamically extending type safety. My only surprise is how little fanfare it has received since its introduction. For a more pragmatic take on static metaprogramming, the manifold project[1] for Java is worth a look. Unlike F#, which leans toward expansive schemas, Manifold focuses on contained, compile-time integrations—handling JSON, XML, SQL, GraphQL, and even other languages in a seamless, type-safe way. 1. https://github.com/manifold-systems/manifold
In Why F#?
I use Java with manifold-units[1] for this. Some examples: ‎ > // commonly used unit abbreviations e.g., m, ft, hr, mph, etc. import static manifold.science.util.UnitConstants.*; ... Length l = 5m; // 5 meters Length height = 5 ft + 9.5 in; Length distance = 80 mph * 2.3 hr; Force force = 5kg * 9.807 m/s/s; // 49.035 Newtons Force f = 49.035 kg m/s/s; force == f // true force == 49.035 N // true 1. https://github.com/manifold-systems/manifold/tree/master/man...*
In Frink

Showing the 15 most recent of 19 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.