Releases: Delta-Proto/delta-gerber
Release 1.1.3
Delta Gerber 1.1.3
Download and Run
java -jar delta-gerber-1.1.3-jar-with-dependencies.jarOpen http://localhost:938 — requires Java 17+.
What's New
Altium 25.8.1 Format Spec Compatibility
Altium 25.8.1 emits %FSAX44Y44*% without the L/T zero-suppression flag. The parser regex silently failed, leaving copper/silk/mask/outline invisible in the realistic view — only the drill layer survived.
- L/T and A/I flags now optional in
FSblocks, defaulting toL/Aper the current Gerber spec, with a warning logged when missing.
Robust Outline Loop Closure
The bidirectional chaining from 1.1.2 still mis-closed outlines built from many short segments — mouse-bite teeth, V-score rails, arc-approximated polylines.
- Must leave the tolerance ball before a close counts — prevents sub-tolerance seeds from closing on iteration 0.
- Prefer continuation over closure when an unused segment matches at least as well as snapping back — prevents premature closure mid-chain.
Realistic PNG Thumbnails
New /api/gerber/thumbnail endpoint and public `MultiLayerSVGRenderer` API for rasterised realistic views. Intended for project-list UIs that show many boards at once, where inlining full realistic SVGs is prohibitive.
- `POST /api/gerber/thumbnail?side=top|bottom&width=&height=` — returns an 8-bit RGBA PNG with transparent background.
- Board-aspect-ratio output with a scaled visible margin (3% of max outline dimension, floored at 1.5 mm).
- New API: `renderRealisticSide(layers, side[, mirrorBottom])`, `renderRealisticSidePng(layers, side, widthPx[, heightPx][, mirrorBottom])`, `rasterizeSvgToPng(svg, widthPx, heightPx)`.
- PNG Top / PNG Bottom buttons in the bundled web viewer.
Real Bottom View in PNG Downloads
The PNG bottom view is now horizontally mirrored by default, so the download shows the real underside of the board (flipped around its Y axis) rather than the top-looking-down perspective. Callers can opt out via the 5-argument `renderRealisticSidePng` overload.
Dependency & Plugin Upgrades
All dependencies and Maven plugins refreshed to their latest stable versions — no source changes required.
- Batik 1.19, SLF4J 2.0.17, Logback 1.5.32, JUnit Jupiter 5.14.3, and all Maven plugins current.
Full changelog: v1.1.2...v1.1.3
Release 1.1.2
Delta Gerber 1.1.2
Download and Run
java -jar delta-gerber-1.1.2-jar-with-dependencies.jarOpen http://localhost:938 — requires Java 17+.
What's New
Fragmented Outline Chaining
Board outlines drawn as D02/D01 segment pairs (notably from Altium, which writes many segments in reverse direction) previously fragmented into disconnected subpaths — only end-to-start chaining was attempted, so any segment written backwards broke the chain. The realistic renderer then clipped against a broken outline and dropped pads, silkscreen, or the entire board silhouette.
- Bidirectional chaining — each unused segment is matched to the running head on either endpoint, reversing the segment's direction (and arc sweep) when its end matches.
- Nearest-neighbor matching with 0.1 mm tolerance — tolerates Altium's ~50 µm gaps between straight-edge endpoints and the tangent points of adjacent corner arcs. Well below typical PCB feature sizes (≥0.3 mm drills/slots/tabs), so distinct outline features can't fuse.
- Multi-loop outlines — outlines with cutouts (mounting holes, internal slots, keepouts) emit separate closed subpaths instead of collapsing to a single broken loop.
Full changelog: v1.1.1...v1.1.2
Release 1.1.1
Delta Gerber 1.1.1
Download and Run
java -jar delta-gerber-1.1.1-jar-with-dependencies.jarOpen http://localhost:938 — requires Java 17+.
What's New
KiCad Gerber X2 Drill Support
KiCad 9 emits drill data as Gerber X2 files with .gbr extensions (e.g. board-PTH-drl.gbr, board-NPTH-drl.gbr) instead of classic Excellon. These files were previously classified as generic "other" layers and disappeared from the realistic PCB view — holes did not punch through the board.
- Layer-type detection reads
%TF.FileFunction— the Gerber X2 attribute that declares a file as a drill/route layer is now the authoritative signal. RecognizesPlated/NonPlated/PTH/NPTH/Drill/Routetokens and maps them toDRILL_PLATED/DRILL_NON_PLATED. - Filename fallback for
-PTH-drl.gbr,-NPTH-drl.gbr, and*drill.gbrwhen no content has been scanned. - Realistic renderer —
MultiLayerSVGRenderer.renderRealistic()now populates the mech-mask from Gerber-backed drill layers as well as ExcellonDrillDocuments, so holes punch through all stacked layers regardless of drill file format.
New GerberDocument API
getFileFunctionValues()— full comma-separated list of.FileFunctionvalues (previously only the first token was exposed viagetFileFunction()).isDrillFileFunction()— true when.FileFunctiondeclares the file as a Drill or Route layer.isNonPlatedDrillFileFunction()— true for NPTH drill declarations.
Full changelog: v1.1.0...v1.1.1
Release 1.1.0
Delta Gerber 1.1.0
Download and Run
java -jar delta-gerber-1.1.0-jar-with-dependencies.jarOpen http://localhost:938 — requires Java 17+.
What's New
Embeddable Library API
getIndexHtml(),getLayerColor(), andrenderRealisticSide()are now public static — can be called directly by host applications without reflection- API endpoints use
/api/gerber/prefix (/api/gerber/render,/api/gerber/arduino-uno-example.zip) for clean integration with host application routing - HTML viewer, example ZIP, and all resources available on the classpath for host applications to serve
DeltaProto Integration
- URLs match the routing used on deltaproto.com/opensource-gerber-viewer
- Header links to DeltaProto open source gerber viewer page
- Standalone server and hosted instance use identical paths
Full changelog: v1.0.8...v1.1.0
Release 1.0.8
Delta Gerber 1.0.8
Download and Run
Download delta-gerber-1.0.8-jar-with-dependencies.jar below and run:
java -jar delta-gerber-1.0.8-jar-with-dependencies.jarThen open http://localhost:938 in your browser. Requires Java 17+.
What's New
DeltaProto-Styled Web Viewer
- Redesigned UI matching the DeltaProto visual identity
- Light and dark mode with OS preference detection and manual toggle
- "Try Example" button — loads a bundled Arduino Uno board instantly, no upload needed
- Styled scrollbars following the active theme
- Inter font for clean, modern typography
Web Viewer Improvements
- Select all/none checkbox with tri-state indicator
- Top / Bot quick-filter buttons to show only one side's layers
- Hover-to-solo — hover a layer to preview it in isolation
- Center-truncated filenames showing start + extension (e.g., `Flowstore_HM….GTL`)
- Instant CSS tooltips with full filename on hover
Rendering Fixes
- Empty outline handling — realistic renderer gracefully renders without board clipping when the outline file is empty
- Altium mechanical layer detection — `.GM`, `.GM1`, `.GM2` recognized as potential outline layers
- Smart outline validation — disconnected corner markers (D02 >= D01) correctly rejected as non-outline
Standalone JAR
This release includes a jar-with-dependencies (1.1 MB) — a single file you can download and run. No Maven, no build tools, no setup. Just `java -jar` and go.
Full changelog: v1.0.7...v1.0.8
Release 1.0.7
Delta Gerber 1.0.7
Web Viewer Rewrite
The web viewer has been rewritten with a stateless server architecture — the browser owns file data via IndexedDB, extracts ZIPs locally, and detects layer types client-side. The server is a pure render endpoint with no caching.
New UI Features
- View tabs: All Layers / Board Top / Board Bottom with realistic PCB rendering
- Layer type dropdowns with auto-detection from filename and content analysis
- Select all/none checkbox with tri-state indicator (all / some / none)
- Top / Bot quick-filter buttons to show only one side's layers
- Hover-to-solo — hover a layer to preview it in isolation
- Center-truncated filenames showing both start and extension (e.g.,
Flowstore_HM….GTL) - Instant tooltips on hover with full filename
- Recent projects stored in IndexedDB with re-open support
- Browser-side ZIP extraction using DecompressionStream API (no external libraries)
Parser Improvements
Deprecated Gerber Command Support
- G54/G55 deprecated aperture select prefix (very common in legacy files)
- G70/G71 deprecated unit commands (older files use these instead of
%MO...%) - %IP...% image polarity (warns on NEG)
- %OF...% image offset (warns on non-zero)
- %IN/%LN/%AS/%MI/%SF/%IR deprecated commands (safely skipped)
New Features
- %SR...% Step and Repeat execution for panelized boards
- %AB...% Block Aperture recognition
- UTF-8 BOM stripping in both Gerber and Excellon parsers
- Excellon G02/G03 arc routing mode support
Compatibility Fixes
- Altium Designer: Mechanical layer outline detection (
.GM,.GM1,.GM2) - Smart outline detection: Empty files and disconnected corner markers correctly rejected
- Empty outline fallback: Realistic renderer gracefully handles empty outline files instead of producing invisible output
Realistic Rendering Fixes
- ViewBox now uses outline bounds instead of global bounds for tighter framing
- Realistic renderer always uses its own hardcoded PCB colors (ignores layer display colors)
- Soldermask opacity fixed to 0.75 (was incorrectly inheriting 0.85 from layer overlay view)
Visual Test
- 12 new test cases covering deprecated G-codes, image polarity, offset, Step and Repeat, and UTF-8 BOM
- Total: 127 visual test cases across 15 sections
Full changelog: v1.0.6...v1.0.7
Release 1.0.6
Changes
- OC8 octagon aperture support — The parser now recognizes OCn aperture types (used by EAGLE for octagonal pads). It creates a PolygonAperture with n vertices and correct rotation so a flat edge is at the top, matching EAGLE's convention.
- Realistic PCB rendering and interactive web viewer — New
MultiLayerSVGRenderer.renderRealistic()method produces physically accurate top/bottom PCB views with proper layer stacking (FR4 substrate, copper, soldermask, silkscreen, drill holes). Includes a built-in HTTP server (GerberViewerServer) serving a single-page web app with pan/zoom, layer toggling, and ZIP file upload. - Coordinate format fix for large mm coordinates — Fixed parsing of Gerber files with large millimeter coordinate values.
Maven
<dependency>
<groupId>com.deltaproto</groupId>
<artifactId>delta-gerber</artifactId>
<version>1.0.6</version>
</dependency>v1.0.5
What's New
Cadence Allegro Support
Added support for parsing Gerber and drill files exported from Cadence Allegro, which use several non-standard extensions:
- Drill files: Tool definitions via
;Holesizecomments,M00as tool separator, and repeat codes (R02X...) are now parsed correctly - Gerber files: Fixed a 25.4x scale error when
%FSLAX25Y25*MOIN*%was treated as a single command, causing theMOIN(inches) unit declaration to be silently dropped
Maven Central
Available at:
<dependency>
<groupId>com.deltaproto</groupId>
<artifactId>delta-gerber</artifactId>
<version>1.0.5</version>
</dependency>Full changelog: v1.0.4...v1.0.5
Release 1.0.4
Delta Gerber 1.0.4
Changes
Gerber Format Spec Improvements
- Trailing zero suppression support: Fixed the
%FSdirective regex to properly parse both leading (L) and trailing (T) zero suppression modes, as well as absolute (A) and incremental (I) notation. Previously only leading zero suppression was supported.
MM Normalization at Parse Time
- All Gerber coordinates and aperture dimensions are now normalized to millimeters during parsing, matching what the Excellon drill parser already does. This ensures consistent units across all document types for rendering, DRC, and metric calculations.
- Macro aperture primitives receive a
unitFactorso dimensional parameters (diameters, widths, coordinates) are scaled to mm while angular and count parameters are preserved.
Modal D-Code Support
- Fixed silent data loss for coordinate-only Gerber lines: The parser now correctly handles modal D-codes (D01/D02/D03). Coordinate statements without an explicit D-code reuse the last active D-code, matching the RS-274X specification. This fixes rendering of text strokes and other complex line sequences.
Other
- Removed bundled
logback.xml— libraries should not ship logging configuration.
Maven
<dependency>
<groupId>com.deltaproto</groupId>
<artifactId>delta-gerber</artifactId>
<version>1.0.4</version>
</dependency>Release 1.0.2
Fixes
- Normalize Excellon drill coordinates and tool diameters to mm at parse time. Drill files using inch units had their coordinates and tool diameters stored in raw inches while Gerber layers use mm, causing drill holes to appear misaligned and 25.4x too small when rendered alongside Gerber layers in the multi-layer SVG viewer.