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 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 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

125 sources
> We now know that we prefer composition over inheritance When people say "composition over inheritance" in Java discussions, they usually mean the trivial modeling rule: prefer has-a over is-a. But that’s not what composition is really about. The deeper idea is interface composition -- building types by composing multiple behavioral contracts behind a single cohesive surface. Java provides inheritance and interfaces, but it doesn’t provide first-class delegation or traits. So most developers never really practice interface composition. They either subclass, or they wire objects together and expose the wiring. The slogan survived. The concept mostly didn’t. The manifold project, for example, experiments with language-level delegation to make interface composition practical with Java. https://github.com/manifold-systems/manifold/blob/maste
Read the rest
In Java 26 is here
> The drawback is that building an AST now requires a symbol table Well, yes and no. During AST building a binding expression resolves as an untyped polyadic expression. Only later during the compiler's type attribution phase does a binding expression's structure resolve based on the operand types. https://github.com/manifold-systems/manifold/tree/master/man... > in typical code you don’t have the case of constant values so often. Agreed. It's not really useful with inlined expressions: Schedule contacts.select(contactId) inputForm.getDateTime() but if you write it like: var plumber = contacts.select(contactId) var date = inputForm.getDateTime() var building = findLocation(warehouse) Schedule plumber on date at building But, honestly, I can't say I personally use it that way ;) Initially, I wrote it as a science extension
Read the rest
In Rethinking Syntax: Binding by Adjacency
Author here. Yes, technically this is a form of backtracking, similar to what a parser does. The key difference is that the search is drastically constrained by the type system: reductions are only attempted where the types actually support a binding operator. Unlike a parser exploring all grammar possibilities, this mechanism prunes most candidates automatically, so the compiler efficiently "solves" the expression rather than blindly exploring every syntactic alternative. Here is the high-level explanation of the mechanism: https://github.com/manifold-systems/manifold/tree/master/man... But the short answer is that it’s not parser-style backtracking over a grammar. The Java parser still produces a normal AST for the sequence of tokens. What happens afterward is a type-directed binding phase where adjacent expressions may bind if their ty
Read the rest
pes agree on a binding operator. The compiler effectively reduces the expression by forming larger typed expressions until it reaches a stable form. The algorithm favors left associativity, but since a type can implement the binding operator as either the left or right operand, the overall structure of the expression can emerge in different ways depending on the participating types. So rather than exploring grammar productions, the compiler is solving a set of type-compatible reductions across the expression. For example: 2026 March 10 reduces roughly like this: (2026 (March 10)) → March.postfixBind(2026) // → LocalYearMonth → [retreat] // → no binding with 10 → March.prefixBind(10) // → LocalMonthDay → .postfixBind(2026) // → LocalDate And if `Month` binds with `Range<Integer>`: 2026 March 10 to 13 can reduce as: (2026 (March ((10 to) 13))) The meaning is therefore determined entirely by which types participate in binding e.g., `LocalDate`, `Month`, `Integer`, `Range`, etc. and which reductions they define. If a competing interpretation exists but the types don’t support the necessary bindings, it simply never forms. In that sense it behaves less like a traditional parser and more like a typed reduction system layered on top of the Java AST.
In Rethinking Syntax: Binding by Adjacency
What if these were real, type-safe expressions in Java: 2025 July 19 // → LocalDate 300M m/s // → Velocity 1 to 10 // → Range<Int> Schedule Alice Tues 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...
In Rethinking Syntax: Binding by Adjacency
100% agree. > Writing SQL code Language integration is paramount for med/lg projects. There's an experimental Java lang project, manifold-sql [1], that does the impossible: inline native DuckDB SQL + type-safety. """ [.sql/] SELECT station_name, count(*) AS num_services FROM 'http://blobs.duckdb.org/train_services.parquet' WHERE monthname(date) = 'May' GROUP BY ALL ORDER BY num_services DESC LIMIT 3 """ .fetch() .forEach(row -> out.println(row.stationName + ": " + row.numServices)); 1. https://github.com/manifold-systems/manifold/blob/master/doc...
In Why DuckDB is my first choice for data processing

Showing the 15 most recent of 125 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.