UPDATE — October 23, 2026: The viewer behaviour has changed since the October 4 experiment below. A fresh desktop 2D check with the same three ZIPs confirmed 9 / 8 / 9 drawn layers. The missing-outline example still reports unconfirmed board size. The filename-conflict example now identifies misleading-F_Cu.gtl as bottom copper from its X2 FileFunction declaration and displays a separate “Check layer identities” notice explaining the filename disagreement. The 81 / 74 / 81 parser-warning totals remain and are not counts of design defects. All screenshots, captured results and statements about the earlier lack of automatic conflict detection below describe the October 4 version. The downloadable v1 archive retains that historical evidence. Independently check names, X2 declarations and job-file paths; this update does not establish complete X2 support, manufacturing readiness or a physical build.
The cover plots the original export's front-copper pads in green, bottom-copper pads in blue and outline in dark gray on shared coordinates. It is a software drawing of a non-functional teaching fixture, not a photograph or a physical build.
A Gerber package can draw successfully while its file list still contains a mistake. This exercise uses three small, downloadable examples to separate three questions: did the files load, is an outline present, and do the filenames agree with the layer metadata?
The examples come from a native KiCad 10.0.6 export of an original synthetic teaching fixture. It has no routed nets or functional circuit. Its two-pad shapes are fictional, not approved footprints for real components. No physical PCB, assembly or electrical test is claimed. Do not order this fixture for manufacture.
You will compare an unchanged export, a copy with its outline removed, and a copy with bottom copper renamed as if it were top copper. The procedure below is the complete exercise; the linked package supplies the files and recorded evidence.
1. Get the files and prepare a clean comparisonDownload and unzip the Gerber teaching package. Its downloads folder contains:
01-original-export.zip02-missing-outline.zip03-filename-x2-conflict.zip
You need a desktop browser, an archive utility and a plain-text editor. Python 3 is optional for the code check below. KiCad 10.0.6 is needed only if you want to regenerate the native exports from the included source.
Use the Gerber viewer used for the recorded experiment. Open one scenario at a time with Open files or ZIP, and use Clear before the next scenario. Stay in the 2D view. These instructions concern the Gerber ZIPs, not importing a native KiCad board into this viewer.
The captured desktop results below were recorded on October 4, 2026. A future viewer version may behave differently; record what you actually see instead of treating these results as universal Gerber behaviour.
2. Establish the unchanged baselineOpen 01-original-export.zip. There are ten native export files: nine drawable Gerber layers and a job file. Explanatory documents inside the ZIP are additional files, not layers.
Find pcba-partner-file-interop-teaching-Edge_Cuts.gm1. In the recorded viewer, nine layers loaded and this file supplied a closed rectangular outline with a centerline size of 35 × 25 mm. Inspect copper and outline separately using the layer controls.
The full graphics bounds can be 35.05 × 25.05 mm because the outline has a 0.05 mm stroke. That is different from the 35 × 25 mm outline centerline. Neither number is a measured or manufacturer-approved physical board size.
Figure 1 shows the baseline desktop load state. Most of the drawing and the dimensions are below that screenshot's viewport; the dimensions stated here come from the recorded DOM output and static parser checks in the package.
Clear the viewer and open 02-missing-outline.zip. This scenario removes only the Edge_Cuts.gm1 file. Every retained native file has the same bytes as the baseline.
Eight layers can still draw. In the recorded viewer, the board size is explicitly unconfirmed because no outline was supplied. Copper or silkscreen bounds are not a substitute for the missing outline.
Open the .gbrjob file in a text editor and inspect its FilesAttributes entries. It still names the removed outline. This is deliberate: the job file was not silently repaired for the faulty example. Compare each listed Path with the files actually present in the ZIP.
Figure 2 shows the eight-layer desktop load state. The unconfirmed-dimension message is recorded in the accompanying DOM text; it is below the screenshot's captured area.
Clear the viewer and open 03-filename-x2-conflict.zip. If file selection appears, deliberately select both .gtl files, including misleading-F_Cu.gtl, before continuing.
The only change to the native export files is this rename:
pcba-partner-file-interop-teaching-B_Cu.gbl
-> misleading-F_Cu.gtlOpen the renamed file in a plain-text editor. Its X2 file-function declaration remains:
%TF.FileFunction,Copper,L2,Bot*%The name suggests top copper to this viewer's filename classifier, while the declaration identifies bottom copper. The recorded viewer therefore labels both .gtl files as top copper. The renamed file's contents and geometry have not changed.
The viewer does not automatically detect this filename/X2 conflict. You find it by comparing the declaration with the name, or by running a separate metadata check. This tutorial demonstrates that limitation; it does not claim that loading the ZIP catches the error.
The original job file also still references the old .gbl name. That gives a second, separate inconsistency to inspect.
Figure 3 shows part of the synthetic drawing, parsed outline dimensions and 81 parser warnings. The two top-copper labels are verified by the saved DOM record, not by the portion visible in this screenshot.
The accompanying read_gerber_cases.py code uses only Python's standard library. If Hackster downloads it as read_gerber_cases_py.py, rename it to read_gerber_cases.py. Save it beside the extracted package, then run:
python3 read_gerber_cases.py /path/to/extracted-package/downloadsIt reads ZIP members without extracting or modifying them. It reports file-function declarations, missing job-file paths and disagreements between .gtl/.gbl names and top/bottom metadata. It also checks that the renamed bottom-copper file is byte-identical to the baseline.
This small script is deliberately limited to the three supplied fixtures. It is not a full Gerber parser or CAM validator, and it does not establish geometry, polarity or manufacturing correctness.
For the original recorded parser experiment, the package also contains the native source, export command, expected outcomes, hashes and scripts. See its README before replaying those scripts: some rebuild generated scenario files, and the optional parser replay fetches pinned public assets whose hashes must match. Saved browser-evidence checks do not create a fresh browser run.
6. Interpret the results precisely- Original: nine recorded drawn layers; 35 × 25 mm outline centerline; 81 parser warnings. The filenames and tested metadata agree.
- Missing outline: eight recorded drawn layers; outline size not confirmed; 74 parser warnings. The job file references an absent outline.
- Filename/X2 conflict: nine recorded drawn layers; 35 × 25 mm outline centerline; 81 parser warnings. The bottom-copper metadata conflicts with the top-copper filename, and the job-file path is stale.
The warning totals refer to ignored X2 attribute blocks such as TF, TA and TD. They are not counts of detected design faults, and the 81 warnings in the third case are not an automatic conflict alert.
No drill file is expected for this fictional all-SMD geometry. That does not mean a real fabrication package can omit required drill data. These checks do not validate copper polarity, stack-up, clearances, electrical continuity, solder mask, assembly or regulatory compliance.
The practical habit is to check names, metadata and the job-file inventory together, then inspect geometry with suitable PCB/CAM tools. A clean-looking render answers only part of the review.
Source, reuse and disclosureThe source guide and recorded results describe the same already-public teaching resource. It has also been suggested to Adafruit and Hackaday. This tutorial makes no exclusivity or first-publication claim.
I am Chen Guman, representing PCBA Partner, a commercial PCB assembly business that operates the linked viewer and resource. No purchase is needed to run this exercise.
OpenAI Codex assisted with the original fixture and scripts and primarily drafted this tutorial. Native KiCad exports, automated checks and Codex-operated desktop browser tests were actually run. There was no physical build or human engineering sign-off. The images are recorded software outputs or screenshots, not generated photographs of a board.
The original teaching source, explanations and accompanying code use the included MIT license, copyright 2026 PCBA Partner. Third-party applications, dependencies, interface elements and trademarks retain their own rights. This does not claim that the entire viewer is MIT-licensed or endorsed by KiCad or Hackster.


_4YUDWziWQ8.png?auto=compress%2Cformat&w=48&h=48&fit=fill&bg=ffffff)
_Ujn5WoVOOu.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)
Comments