Marlin is the open source (GPL2) Java2D RenderingEngine
optimized for performance (improved memory usage (no GC) and footprint, better multi-threading) and visual quality. It was initially based on OpenJDK8 Pisces RenderingEngine
implementation.
It handles shape rendering i.e. Graphics2D draw(Shape) / fill(Shape)
operations with stroke & dash attributes, but it does it very well !
Latest release: https://github.com/bourgesl/marlin-renderer/releases/latest
JDK | Default renderer | Latest Marlin release |
---|---|---|
Open JDK 6 - 7 [EOL] | Pisces | Marlin-renderer 0.9.4.3 |
Oracle JDK 6 - 7 [EOL] | Ductus | Marlin-renderer 0.9.4.3 |
Open JDK 8 [LTS] [EOL] | Pisces | Marlin-renderer 0.9.4.7 for JDK8 |
Oracle JDK 8 [EOL] | Ductus | Marlin-renderer 0.9.4.7 for JDK8 |
Azul Zulu 8 [LTS] | Marlin 0.7.4 / 0.9.1.1 | Marlin-renderer 0.9.4.7 for JDK8 |
Jetbrains JDK 8 [EOL] | Marlin 0.7.4 / 0.9.3 | Marlin-renderer 0.9.4.7 for JDK8 |
Open JDK 9 [EOL] | Marlin 0.7.4 | Marlin-renderer 0.9.4.2 for JDK9+ |
Open JDK 10 [EOL] | Marlin 0.8.2 | Marlin-renderer 0.9.4.2 for JDK9+ |
Open JDK 11 [LTS] [EOL] | Marlin 0.9.1 | Marlin-renderer 0.9.4.8 for JDK11+ |
Open JDK 11.0.2 [EOL] | Marlin 0.9.1.1 | Marlin-renderer 0.9.4.8 for JDK11+ |
Open JDK 14 [EOL] | Marlin 0.9.1.3 | Marlin-renderer 0.9.4.8 for JDK11+ |
Open JDK 17 [LTS] [EOL] | Marlin 0.9.1.4 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 21 [LTS] [EOL] | Marlin 0.9.4.6 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 22 [EOL] | Marlin 0.9.4.7 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 23 [EOL] | Marlin 0.9.4.7 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 24 | Marlin 0.9.4.7 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 25 [LTS] | Marlin 0.9.4.7 | Marlin-renderer 0.9.4.9 for JDK17+ |
Open JDK 26 (openjdk/jdk) | Marlin 0.9.4.7 | Marlin-renderer 0.9.4.9 for JDK17+ |
Notes:
- [EOL] indicates =End of Life= JDK versions (no more supported by Sun / Oracle)
- [LTS] indicates =Long-Term support= JDK versions (supported for 5 years at least)
For JavaFX, see the Marlin-FX project
- oct 2025: Marlin-renderer 0.9.4.9 for JDK17+ released for OpenJDK 26 GA release
- mar 2025: Marlin-renderer 0.9.4.8 for JDK17+ released for OpenJDK 24 GA release
- oct 2023: Marlin 0.9.4.7 integrated in OpenJDK 22
- nov 2022: Marlin 0.9.4.6 integrated in OpenJDK 21
- jan 2021: Marlin 0.9.1.4 integrated in OpenJDK 17
- sep 2019: Marlin 0.9.1.3 integrated in OpenJDK 14
- aug 2019: Marlin 0.9.1.2 integrated in OpenJDK 14
- jul 2019: MarlinFX 0.9.3.1 integrated in OpenJFX 14, backported in OpenJFX 13
- oct 2018: MarlinFX 0.9.3 integrated in OpenJFX 12
- oct 2018: Marlin 0.9.1.1 backported to OpenJDK 11 updates (11.0.2)
- sep 2018: Marlin 0.9.1.1 integrated in OpenJDK 12
- jun 2018: MarlinFX 0.9.2 integrated in OpenJFX 11
- apr 2018: Marlin 0.9.1 integrated in OpenJDK 11
- dec 2017: Marlin & MarlinFX 0.8.2 integrated in OpenJDK & OpenJFX 10
- nov 2017: Marlin rocks on Geoserver benchmarks: see geoserver (including Marlin 0.8.2) vs geoserver-jai results: it boosts geoserver to achieve MapServer performance !!
- My personal point of view after javaone: it is your turn to contribute to OpenJDK & OpenJFX: see openjdk thread
- 4 oct 2017: JavaOne talk slides: Marlin, a JDK9 Success Story: Vector Graphics on Steroids for Java 2D and JavaFX
- may 2017: Marlin & MarlinFX 0.7.5 integrated in OpenJFX10 (enabled by default)
- feb 2017: Blog post comparing Oracle ductus vs OpenJDK Marlin renderers (latency) Performance Rendered Visual
- nov 2016: MarlinFX 0.7.5 integrated in OpenJFX9
- jul 2016: Marlin integrated in Jetbrains OpenJDK8 build and running in IntelliJ IDEA 2016.3
- feb 2016: FOSDEM talk slides Marlin renderer, a successful fork and join the OpenJDK 9 project
- dec 2015: Marlin 0.7.4 integrated in OpenJDK9
Continuous Integration base on Github Actions (build + unit & integration tests):
As the Marlin renderer is derived from the OpenJDK 8 Pisces source code, its license is the OpenJDK's license = GPL2 + ClassPath exception: " GNU General Public License, version 2, with the Classpath Exception
The GNU General Public License (GPL)
Version 2, June 1991 " See License.md
See the Benchmarks
Documentation on how to use and tune the Marlin renderer is available in the wiki
Help is needed to improve the wiki & documentation !
Users and developers interested in the Marlin-renderer are kindly invited to join the marlin-renderer Google Group.
Contributions are welcomed, get in touch with us on the marlin-renderer Google Group and share your improvements via pull requests. Since we contribute this renderer into OpenJDK, we accept contributions from people that have signed the Oracle Contribution Agreeement (very easy to do)
Please help if you appreciate the Marlin project:
- share your benchmark & test results (quality ?)
- improve test cases, quality & unit tests, submit bug reports
- documentation should be improved & updated
To support my efforts on improving either Java2D or JavaFX rendering thanks to Marlin 2D / FX projects ..., you can become my github sponsor at https://github.com/sponsors/bourgesl .
- Mapbench provides testing & benchmarking tools based on real world maps made by the GeoServer (GPL2)
- Marlin-FX provides the Marlin renderer port into JavaFX (shape rasterizer for javafx.graphics - prism)
The Marlin renderer project benefited from the following tools (2014-2020):
EJ-technologies Java Profiler
supports open source projects with its full-featured Java Profiler.
YourKit, LLC is the creator of YourKit Java Profiler
and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.
=EOF=