GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - brunoborges/javaevolved: Java Evolved. Your Code Can Evolve Too!

BranchesTags
Open more actions menu

Latest commit

 

History

685 Commits
685 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.vscode
.vscode
 
 
agent-plugins/modern-java-development
agent-plugins/modern-java-development
 
 
blogs
blogs
 
 
content
content
 
 
html-generators
html-generators
 
 
proof
proof
 
 
site
site
 
 
social
social
 
 
specs
specs
 
 
templates
templates
 
 
translations
translations
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
secrets.md
secrets.md
 
 

Repository files navigation

java.evolved

Java has evolved. Your code can too.

A collection of side-by-side code comparisons showing old Java patterns next to their clean, modern replacements — from Java 8 all the way to Java 25.

🔗 javaevolved.dev

GitHub Pages Snippets License: MIT Contributions welcome

Note: Update the snippet count badge above when adding new patterns.


What is this?

Every snippet shows two panels:

  • ✕ Old — the traditional way (Java 7/8 era)
  • ✓ Modern — the clean, idiomatic replacement (Java 9–25)

Each comparison includes an explanation of why the modern approach is better, which JDK version introduced it, and links to related patterns.

Categories

Category Examples
Language Records, sealed classes, pattern matching, switch expressions, var, unnamed variables
Collections Immutable factories, sequenced collections, unmodifiable collectors
Strings Text blocks, isBlank(), strip(), repeat(), formatted(), indent()
Streams toList(), mapMulti(), takeWhile()/dropWhile(), gatherers
Concurrency Virtual threads, structured concurrency, scoped values, ExecutorService as AutoCloseable
I/O Files.readString(), writeString(), Path.of(), transferTo(), HTTP Client
Errors requireNonNullElse(), record-based errors, deserialization filters
Date/Time java.time basics, Duration/Period, DateTimeFormatter, instant precision
Security TLS defaults, SecureRandom, PEM encoding, key derivation functions
Tooling JShell, single-file execution, JFR profiling, compact source files, AOT
Enterprise EJB → CDI, JDBC → JPA/Jakarta Data, JNDI → injection, MDB → reactive messaging, REST

Architecture

This site uses a JSON/YAML-first build pipeline:

  • Source of truth: Individual content/category/slug.json files (112 patterns across 11 category folders)
  • Templates: templates/ — shared HTML templates with {{placeholder}} tokens for content and UI strings
  • Generator: html-generators/generate.java — JBang script that produces all HTML pages, localized variants, and data/snippets.json
  • Translations: translations/strings/{locale}.yaml for UI strings, translations/content/{locale}/ for pattern content (YAML)
  • Deploy: GitHub Actions runs the generator and deploys to GitHub Pages

Agent plugin

agent-plugins/modern-java-development is a portable Agent Plugins 1.0 package for version-aware Java development. Its skill detects a project's effective compilation target, then limits guidance to final language features and APIs available in that Java release.

Generated files (site/category/*.html, site/{locale}/, and site/data/snippets.json) are in .gitignore — never edit them directly.

Internationalization

The site supports 11 languages: English, Deutsch, Español, Português (Brasil), 中文 (简体), العربية, Français, 日本語, 한국어, Italian and Polski. See specs/i18n/i18n-spec.md for the full specification.

Build & run locally

Prerequisites

  • Java 25+ (e.g. Temurin)
  • JBang (Jbang)

Generate and serve

# Generate all HTML pages and data/snippets.json into site/
jbang html-generators/generate.java

# Serve locally need to replace path with absolute path to site folder 
jwebserver -b 0.0.0.0 -d path/to/site -p 8090
# Open http://localhost:8090

The fat JAR is a self-contained ~2.2 MB file with all dependencies bundled. JBang is needed to run the generator.

For development on the generator itself, see html-generators/README.md.

Contributing

Contributions are welcome! See CONTRIBUTING.md for details on adding patterns and translating the site.

Tech stack

  • Plain HTML, CSS, and JavaScript — no frontend frameworks
  • JBang + Jackson for build-time generation
  • Hosted on GitHub Pages via GitHub Actions

Author

Bruno Borges

  • GitHub: @brunoborges
  • X/Twitter: @brunoborges
  • LinkedIn: brunocborges

License

This project is licensed under the MIT License.

About

Java Evolved. Your Code Can Evolve Too!

javaevolved.dev/

Topics

copilotjavamodernized

Resources

Readme
MIT license

Contributing

Contributing
Activity

Stars

408 stars

Watchers

4 watching

Forks

30 forks
Report repository

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.