1<!DOCTYPE html SYSTEM "html"> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 3<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"></meta> 4<title>Project Amber</title> 5<link rel="shortcut icon" href="/images/nanoduke.ico"></link> 6<link rel="stylesheet" type="text/css" href="/page-serif.css"></link>
7<script src="https://cdn.usefathom.com/script.js" data-site="KCYJJPZX" defer></script>
7</head> 8<body><article> 9<header> 10<h1 class="title">Project Amber</h1></header> 11<p>The goal of Project Amber is to explore and incubate smaller, productivity-oriented Java language features that have been accepted as candidate JEPs in the <a href="https://openjdk.org/jeps/1">OpenJDK JEP Process</a>. This Project is sponsored by the <a href="https://openjdk.org/groups/compiler">Compiler Group</a>.</p><p>Most Project Amber features go through at least two rounds of <a href="https://openjdk.org/jeps/12"><em>preview</em></a> before becoming an official part of the Java Platform. For a given feature, there are separate JEPs for each round of preview and for final standardization. <!-- 12This page links only to the most recent JEP for a feature. Such JEPs may 13have links to earlier JEPs for the feature, as appropriate. 14--></p><section id="status-of-jeps" class="level2"> 15<h2><a class="anchor" href="#status-of-jeps">Status of JEPs</a></h2> 16<p>Currently in progress:</p> 17<ul> 18<li> 19<p><a href="https://openjdk.org/jeps/530">530: Primitive Types in Patterns, <code>instanceof</code>, and <code>switch</code></a> (previous: <a href="https://openjdk.org/jeps/507">507</a>, <a href="https://openjdk.org/jeps/455">455</a>, <a href="https://openjdk.org/jeps/488">488</a>)</p> 20</li> 21<li> 22<p><a href="https://openjdk.org/jeps/468">468: Derived Record Creation (Preview)</a></p> 23</li> 24</ul> 25<p>Delivered:</p> 26<ul> 27<li><a href="https://openjdk.org/jeps/513">513: Flexible Constructor Bodies</a> (previews: <a href="https://openjdk.org/jeps/447">447</a>, <a href="https://openjdk.org/jeps/482">482</a>, <a href="https://openjdk.org/jeps/492">492</a>)</li> 28<li><a href="https://openjdk.org/jeps/512">512: Compact Source Files and Instance Main Methods</a> (previews: <a href="https://openjdk.org/jeps/445">445</a>, <a href="https://openjdk.org/jeps/463">463</a>, <a href="https://openjdk.org/jeps/477">477</a>, <a href="https://openjdk.org/jeps/495">495</a>)</li> 29<li><a href="https://openjdk.org/jeps/511">511: Module Import Declarations</a> (previews: <a href="https://openjdk.org/jeps/476">476</a>, <a href="https://openjdk.org/jeps/494">494</a>)</li> 30<li><a href="https://openjdk.org/jeps/458">458: Launch Multi-File Source-Code Programs</a></li> 31<li><a href="https://openjdk.org/jeps/456">456: Unnamed Variables and Patterns</a> (preview: <a href="https://openjdk.org/jeps/433">433</a>)</li> 32<li><a href="https://openjdk.org/jeps/441">441: Pattern Matching for <code>switch</code></a> (previews: <a href="https://openjdk.org/jeps/406">406</a>, <a href="https://openjdk.org/jeps/420">420</a>, <a href="https://openjdk.org/jeps/427">427</a>, <a href="https://openjdk.org/jeps/433">433</a>)</li> 33<li><a href="https://openjdk.org/jeps/440">440: Record Patterns</a> (previews: <a href="https://openjdk.org/jeps/405">405</a>, <a href="https://openjdk.org/jeps/432">432</a>)</li> 34<li><a href="https://openjdk.org/jeps/409">409: Sealed Classes</a> (previews: <a href="https://openjdk.org/jeps/360">360</a>, <a href="https://openjdk.org/jeps/397">397</a>)</li> 35<li><a href="https://openjdk.org/jeps/395">395: Records</a> (previews: <a href="https://openjdk.org/jeps/359">359</a>, <a href="https://openjdk.org/jeps/384">384</a>)</li> 36<li><a href="https://openjdk.org/jeps/394">394: Pattern Matching for <code>instanceof</code></a> (previews: <a href="https://openjdk.org/jeps/305">305</a>, <a href="https://openjdk.org/jeps/375">375</a>)</li> 37<li><a href="https://openjdk.org/jeps/378">378: Text Blocks</a> (previews: <a href="https://openjdk.org/jeps/355">355</a>, <a href="https://openjdk.org/jeps/368">368</a>) 38<ul> 39<li><a href="guides/text-blocks-guide">Programmerâs Guide</a></li> 40</ul> 41</li> 42<li><a href="https://openjdk.org/jeps/361">361: Switch Expressions</a> (previews: <a href="https://openjdk.org/jeps/325">325</a>, <a href="https://openjdk.org/jeps/354">354</a>)</li> 43<li><a href="https://openjdk.org/jeps/323">323: Local-Variable Syntax for Lambda Parameters</a></li> 44<li><a href="https://openjdk.org/jeps/286">286: Local-Variable Type Inference (<code>var</code>)</a> 45<ul> 46<li><a href="guides/lvti-style-guide">Style Guidelines</a></li> 47<li><a href="guides/lvti-faq">FAQ</a></li> 48</ul> 49</li> 50</ul> 51<p>On hold:</p> 52<ul> 53<li><a href="https://openjdk.org/jeps/301">301: Enhanced Enums</a> (see <a href="https://mail.openjdk.org/pipermail/amber-spec-experts/2017-May/000041.html">here</a> for explanation)</li> 54<li><a href="https://openjdk.org/jeps/302">302: Lambda Leftovers</a></li> 55<li><a href="https://openjdk.org/jeps/348">348: Java Compiler Intrinsics for JDK APIs</a></li> 56</ul> 57<p>Withdrawn:</p> 58<ul> 59<li><a href="https://openjdk.org/jeps/465">465: String Templates (Third Preview)</a> (see <a href="https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html">here</a> for explanation)</li> 60<li><a href="https://openjdk.org/jeps/326">326: Raw String Literals</a>, dropped in favor of Text Blocks (see <a href="https://mail.openjdk.org/pipermail/jdk-dev/2018-December/002402.html">here</a> for explanation)</li> 61</ul> 62</section><section id="documents" class="level2"> 63<h2><a class="anchor" href="#documents">Documents</a></h2> 64<ul> 65<li>Guides 66<ul> 67<li><a href="guides/exhaustiveness-guide">
67Preparing for Change: Safe Switching over Sealed APIs</a> (Aug 2026)</li> 68<li><a href="guides/text-blocks-guide">Programmerâs Guide to Text Blocks</a> (Aug 2019)</li> 69<li><a href="guides/lvti-faq">Local Variable Type Inference FAQ</a> (Oct 2018)<br></li> 70<li><a href="guides/lvti-style-guide">Local Variable Type Inference Style Guide</a> (March 2018)</li> 71</ul> 72</li> 73<li>Design notes 74<ul> 75<li><a href="design-notes/beyond-records">Data-Oriented Programming for Java: Beyond Records</a> (January 2026)</li> 76<li><a href="design-notes/templated-strings">String Tapas Redux: Beyond Mere String Interpolation</a> (September 2021)</li> 77<li><a href="design-notes/towards-better-serialization">Towards Better Serialization</a> (June 2019)</li> 78<li><a href="design-notes/records-and-sealed-classes">Data Classes and Sealed Types for Java</a> (February 2019)</li> 79<li><a href="design-notes/constables">Symbolic References for Constants</a> (March 2018)</li> 80<li>Pattern matching 81<ul> 82<li><a href="design-notes/patterns/towards-member-patterns">Towards Member Patterns</a> (January 2024)</li> 83<li><a href="design-notes/patterns/exhaustiveness">Patterns: Exhaustiveness, Unconditionality, and Remainder</a> (May 2023)</li> 84<li><a href="design-notes/patterns/pattern-match-object-model">Pattern Matching in the Java Object Model</a> (December 2020)</li> 85<li><a href="design-notes/patterns/type-patterns-in-switch">Type Patterns in <code>switch</code></a> (September 2020)</li> 86<li><a href="design-notes/patterns/pattern-match-semantics">Pattern Matching for Java â Semantics</a> (August 2020)</li> 87<li><a href="design-notes/patterns/pattern-matching-for-java">Pattern Matching for Java</a> (September 2018)</li> 88<li><a href="design-notes/patterns/pattern-match-translation">Pattern Matching for Java â Runtime and Translation</a> (June 2017)</li> 89<li><a href="design-notes/patterns/extending-switch-for-patterns">Extending <code>switch</code> for Pattern Matching</a> (April 2017)</li> 90</ul> 91</li> 92</ul> 93</li> 94<li>Historical notes 95<ul> 96<li><a href="design-notes/data-classes-historical-2">Data Classes for Java</a> (February 2018)</li> 97<li><a href="design-notes/data-classes-historical-1">Data Classes for Java</a> (October 2017)</li> 98</ul> 99</li> 100</ul> 101</section><section id="community" class="level2"> 102<h2><a class="anchor" href="#community">Community</a></h2> 103<ul> 104<li><a href="https://openjdk.org/census#amber">Members</a></li> 105<li>Mailing Lists 106<ul> 107<li><a href="https://mail.openjdk.org/mailman/listinfo/amber-dev">amber-dev</a> â For technical discussion related to Project Amber</li> 108<li><a href="https://mail.openjdk.org/mailman/listinfo/amber-spec-experts">amber-spec-experts</a> â For Expert Group members only</li> 109<li><a href="https://mail.openjdk.org/mailman/listinfo/amber-spec-observers">amber-spec-observers</a> â A read-only clone of amber-spec-experts</li> 110<li><a href="https://mail.openjdk.org/mailman/listinfo/amber-spec-comments">amber-spec-comments</a> â For submitting comments on the official specs</li> 111</ul> 112</li> 113<li>Other Resources 114<ul> 115<li><a href="https://inside.java/tag/amber">Inside.java</a></li> 116<li><a href="https://dev.java/learn/">Dev.java</a></li> 117</ul> 118</li> 119</ul> 120</section> 121<footer class="legal"> 122 123<div>© 2026 Oracle Corporation and/or its affiliates</div> 124<div><a href="/legal/tou">Terms of Use</a> 125 · License: <a href="/legal/gplv2+ce.html">GPLv2</a> 126 · <a href="https://www.oracle.com/legal/privacy/index.html">Privacy</a> 127 · <a href="/legal/openjdk-trademark-notice.html">Trademarks</a></div> 128<div><a href="https://github.com/openjdk/amber-docs/blob/a848c6782897/site/_index.md">a848c6782897</a> 129 · <time datetime="2026-08-12T09:46:24-04:00">2026/08/12 13:46 UTC</time></div></footer> 130</article>
130<script type="text/javascript" src="/3HMsFSjG8/VvMRmbyf-/On1rHFE9w/G3LEfbSQDEG0QJiYui/VzsYMAE/OyoGUFtA/VEc"></script>
130</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.