File I/O
| Menu | Action |
|---|---|
| File → Open… | Pick a .gds, .svg, .dxf, .dwg, .cif, .oas/.oasis, or raster image (.png / .jpg / .webp / .bmp / .gif). AutoCAD .dwg is read natively for every release from R14 to R2018 — no conversion step and no AutoCAD needed; the import dialog asks what one drawing unit means (preset from the file's own $INSUNITS where that can be verified) and offers Close open contours. .dxf opens either the ASCII or the binary DXF variant with no extra step — Glyph sniffs the file's bytes to tell them apart, so there's nothing to re-save first. .dxb is a different format (not the same as binary DXF) and isn't supported; export DXF from your CAD tool instead. SVG import reads curves, arcs, circles, ellipses, lines and text as real geometry, and asks how (see below). The file type is detected by extension (or, for DXF, by sniffing the bytes) and routed to the appropriate importer — and if a file's extension is missing or wrong (a CIF/SVG/OASIS file saved with the wrong suffix, say), Glyph also looks at the actual bytes as a fallback before giving up. Gzip-compressed files open transparently: a .gds.gz, .dxf.gz, or any gzip stream regardless of name, is decompressed on the way in (up to 50 MB decompressed) and then routed exactly as if it had arrived uncompressed. GDS parsing runs in a Web Worker — the UI stays responsive while large files (50 MB+) load. Browsers without module-worker support fall back to synchronous parsing on the main thread. A truncated or otherwise damaged .gds no longer opens silently: Glyph salvages whatever geometry it can read, but shows a warning naming what was missing or skipped, and disables save-in-place for that tab — Ctrl+S falls through to Save as… so the salvaged partial can never overwrite your original file. |
| Drag-and-drop | Drag any of the file types above directly onto the Glyph window. A "Drop to open" overlay confirms the drop; from there the import flow is identical to File → Open. |
| File → Open Recent | Reopen a recently opened or saved file without walking the picker. Chrome/Edge only (it needs the File System Access API); your browser will ask once per file to re-grant access. If a file has been moved or deleted, its entry is dropped from the list. Each row is two lines: the filename, then how long ago you opened it and how big it is — so two mask.gds from different folders are still tellable apart. (The browser gives a file handle no folder or path, so size is the strongest hint available.) Hover a row and click the × to forget just that entry. Only the filename, a timestamp, a size, and an opaque file reference are stored — never file contents. Clear recent empties the list. |
File → Save (Ctrl+S) |
Write straight back to the file this tab was opened from (or last saved to). A tab with unsaved edits shows an orange dot next to its name. If the tab isn't bound to a file yet — a new document, a drag-dropped file, an .svg/.dxf import, or a browser without the File System Access API — Save falls through to Save as… so it never silently does nothing. Only .gds / .gdsii bind: Glyph won't overwrite a .dxf with GDS bytes. |
File → Save as… (Ctrl+Shift+S) |
One save dialog for every format Glyph can write — GDS, SVG, PNG, DXF, CIF, EPS, OASIS — the extension you pick decides the output. Uses the File System Access API where available (Chrome/Edge); browsers without it download in whatever format matches the document's current name (or .gds if that name's extension isn't one Glyph writes) — use the explicit Export menu items there to get a different format. For GDS: bitmaps, construction shapes, and letterSpacing are not part of the GDS spec and are dropped on save; text shapes are written as TEXT records (flatten first if you need the glyphs as boundaries). The toolbar Save button saves in place. |
| File → Save all | Write every tab that has unsaved changes, in one go. Tabs already bound to a file are written straight back; an unbound tab opens the usual save picker so nothing is written to a place you did not choose. One summary toast reports how many were saved, skipped (you cancelled a picker), or failed. Greyed out when no tab has unsaved changes. Glyph briefly switches through the dirty tabs while saving and returns you to the one you started on — only the active tab holds a live document. |
| File → Export ▸ Export SVG… | Export the document as a flattened SVG snapshot — SREF/AREF expanded, hidden layers, construction shapes, and bitmaps excluded. Layer colour and opacity carry over; text is emitted as SVG text in a monospace font (flatten to boundaries first if you need exact glyph outlines). |
| File → Export ▸ Export PNG… | Snapshot the canvas as you currently see it and write it to a PNG file. Resolution matches the on-screen device-pixel size; the dark panel background is composited under the layers so the file is not transparent. |
| File → Export ▸ Export figure… | Publication-quality output: white background, solid fills, a 1px outline on every polygon, a layer legend (only layers that actually carry geometry), a scale bar, and a title stamp — each individually togglable. Give the PNG size either in pixels or as a physical width in mm at a chosen dpi (with 1-, 1.5- and 2-column journal presets); the dialog shows the resulting pixel and millimetre dimensions live. An Annotation options section sets an exact scale-bar length, the fill opacity, and the background colour. Choose the Area — whole design, current view, or just your selection — so you can publish one device without cropping afterwards. A live preview at the top of the dialog shows exactly what will be written (including the crop) and updates as you change the options, so you can check legend overlap or the scale bar without exporting and reopening. (On very large designs — above ~20 000 shapes — the preview is skipped to keep the dialog responsive; the export itself is unaffected.) Pick a .svg or .eps filename for vector, or .png for raster. Unlike Export PNG, the figure PNG is rendered off-screen over the whole design at a width you choose, so it does not depend on your window size or current zoom. Construction shapes and bitmaps are excluded, as in every export. A very large array (AREF) now exports as its true footprint — a hairline outline at the array's real extent, plus a bounded sample of real instances so the pitch and orientation stay legible — instead of just the four corner instances shown before. |
| File → Export ▸ Export per layer… | Each layer is one physical chromium mask. Writes a separate .gds per layer (the full cell hierarchy filtered to that layer's geometry, all its datatypes), named {base}_L{n}[_DF/_CF].gds, so a mask shop receives each plate as its own proofable artifact. Download one layer at a time or "Download all". |
| File → Layer setup ▸ Save / Load layer setup… | Save just the layer palette (id, name, color, visibility, lock, stipple, opacity, field tone) to a .json file. "Load" replaces the current document's layers atomically (one undo step). Use this to pin a house style across documents. |
| File → Layer setup ▸ Import foundry layer map… | Load a foundry / PDK layer table — a CSV (name,layer,datatype,color,stipple, header auto-detected) or a KLayout .lyp — so an opened GDS comes up with named layers (M1 / VIA / POLY), house colours, the right (layer, datatype) pairs, and KLayout stipple patterns. Layers referenced by existing geometry but absent from the map are preserved as stubs so nothing vanishes. One undo step. |
| File → Layer setup ▸ Export layer map (.lyp)… | Write the current layer palette (name, colour, fill, visibility) back out as a KLayout layer-properties (.lyp) file — the write side of Import foundry layer map above, for handing your house style to KLayout or another .lyp-reading tool. |
| File → Layer setup ▸ Export layer map (.csv)… | Same palette, written as the CSV layer map (name,layer,datatype,color,stipple) that Import foundry layer map also reads — round-trips with no header sniffing needed. |
| File → File properties… | View and edit the document's GDS library name (LIBNAME on export) and database unit (DBU = precision). The DBU is the GDSII grid resolution; most tools/foundries expect 1 nm (0.001 µm), and a non-default value raises a warning since a mismatch silently rescales every coordinate on the recipient's import. Changing the DBU is non-destructive — your geometry's physical size is preserved. A Mirror geometry on export checkbox flips the exported .gds about the Y-axis (a back-side / wrong-reading mask for a dual-sided process) without redrawing — the on-screen geometry stays intact so the mask shop never double-mirrors. One undo step. (The "Advanced" section exposes the raw GDS user-unit value.) |
| File → Layer statistics… | A per-(layer, datatype) mask-list / statistics rollup across the whole document: name, field tone, exportable-shape count, and bounding extent — the table a reviewer checks against the foundry layer table before tape-out. Compute union area & density runs an opt-in polygon union (overlaps merged, so stacked fill isn't double-counted) and a % coverage over the design extent. Export CSV writes the whole table (raw nm/nm²). Counts are over each cell's own drawn geometry (instances counted once; bitmaps & construction excluded). |
| File → Autosave status… | Open the autosave history dialog (see below). |
File → Diff against another .gds… |
Pick a second GDS file and produce a per-layer diff report. The full SREF/AREF hierarchy is flattened and every element kind (boundary, box, path, text) is compared, so a change living inside a referenced cell, a path-width edit, or a text-only change is reported — not missed as "Identical". Each layer/datatype row shows the XOR polygon count, XOR area, and the count of added / removed elements. Saved as .txt. Enormous arrays are corner-sampled (the report notes when this happens). The differences are also published as markers (largest area first) you step through with F2 / Shift+F2, each zooming to that region's bounding box — only the 500 largest regions become markers (the report says so when it truncated); everything else stays visible only in the text report. Diff markers share the one marker list with DRC and CSV review markers (§3), so Glyph asks before replacing markers you already have. |
The parser/writer pair is tested to be byte-identical round-trip on the fixture set, so files written by Glyph are safe to re-open in KLayout, Clewin, or any standard GDS tool.
DXF import. Both ASCII and binary DXF files (AutoCAD and most mechanical/architectural CAD) import as editable geometry — Glyph detects which variant a .dxf file is and reads it directly, with no re-save step: LINE, LWPOLYLINE/POLYLINE (including bulge arcs), CIRCLE, ARC, ELLIPSE, SOLID/TRACE, 3DFACE, TEXT/MTEXT, SPLINE (flattened to polylines), HATCH (boundary outlines), REGION (planar, straight-edged boundaries — see below) and DIMENSION pictures. Curves are flattened with a chord-deviation budget. DXF's BLOCK/INSERT hierarchy is preserved — each block becomes a Glyph cell and each insert an SREF (or AREF for arrayed inserts). Some CAD exporters (notably SolidWorks / eDrawings) leave the real part geometry in anonymous blocks that are never formally INSERTed; Glyph surfaces any such un-referenced block by placing it at the origin so its geometry isn't silently lost (a strict reader would drop it). Drawing units follow the file's $INSUNITS header (e.g. millimetres → real-world size); files with no unit declared default to 1 drawing unit = 1 µm. The absolute scale is just a starting point — select all and rescale via the Properties panel if you need a different size. .dxb is a different format from binary DXF (a closed set of single-byte opcodes, no group codes at all) and is not supported — export DXF from your CAD tool instead. Imported layers default to hollow (outline-only) so the drawing reads as CAD line-art instead of opaque fills. Colours come from the AutoCAD Color Index: a layer's own colour for ByLayer entities, and per-entity colour overrides (e.g. a cyan region or green frame) are preserved by routing them onto separate colour-variant layers (0 · cyan, 0 · green, …). Switch any layer to solid/hatch in the Layers panel if you want filled regions. Note: non-Latin text (e.g. CJK labels) falls back to the built-in stroke font's ASCII glyphs, and dashed linetypes render solid. REGION entities (a mechanical-CAD boundary — a fixture, carrier or chuck outline) import their PLANAR, STRAIGHT-EDGED boundary as a filled shape, including holes; a curved or non-planar REGION face, or one using newer (R2013+) binary ACIS data, is skipped and counted rather than approximated — the notice says which and suggests re-exporting the shape as a closed polyline or hatch if it needs to import faithfully.
SVG import. Curves and arcs (C/S/Q/T/A path commands) are flattened to polylines, not dropped — along with <circle>, <ellipse>, <line> and <text>. Opening a .svg shows an import options dialog first: Split colours into layers (distinct fill/stroke colours become distinct layers, up to 32; off puts everything on layer 1), Import text (<text> becomes Glyph text shapes; off skips it), Flip vertically (SVG is y-down, Glyph's world is y-up, so this lands the drawing the same way up as it looks in a browser or viewer — earlier versions of Glyph always imported mirrored), Curve smoothness (Fine/Normal/Coarse, trading vertex count for closeness to the true curve), and Close open contours & heal geometry (checked by default — see Arrange → Close open contours… above). The original GDS layer numbers don't round-trip through colour splitting, only the colours. Re-importing a file Glyph itself exported (File → Export ▸ Export SVG…) recovers its geometry, text and colours. CSS styling is now understood: inline style="…" attributes and <style> rules (element-type, .class and #id selectors, including comma-separated lists) are read and applied in the correct cascade order, so files exported from Illustrator or Figma — which paint with classes rather than fill=/stroke= attributes — split into layers correctly instead of collapsing into one colour bucket. Elements hidden with display:none or visibility:hidden are skipped rather than imported as if visible. Selectors outside that subset (attribute selectors, descendant combinators, :pseudo-classes, …) are reported rather than silently mis-applied. Still not imported: embedded <image> bitmaps (use File → Import bitmap instead).
Autosave & restore points. Every open tab is debounced-saved to the browser's OPFS (Origin Private File System) 2 seconds after the last edit. Browsers without OPFS (older Safari, locked-down corporate setups) fall back to localStorage. Saves never go over the network — they live in your browser's private storage and are wiped if you clear site data.
Glyph keeps a newest-first list of up to 10 snapshots rather than a single most-recent save. Bursts of edits inside a 5-minute window collapse into one entry; an explicit "Save now" creates a fresh restore point you can roll back to later.
- File → Autosave status… lists every available snapshot with timestamps and shape counts. Pick Restore on any row to replace the current session with that snapshot's tabs, Save now to capture a new restore point, Delete to remove a single entry, or Discard all to wipe the history.
- After a crash or browser close, the Recover pill in the top right offers the same list — pick the snapshot you want, or Discard to start clean.
Snapshots older than 7 days are silently discarded. Empty documents (a fresh tab with no shapes) are not saved. Recovered tabs carry their original name but start with empty undo history (the snapshot omits the undo stack to keep storage small).
Free file converter. Glyph includes a free browser-based file converter — no upload, no installation, entirely client-side. It reads GDSII, OASIS, DXF (ASCII and binary), DWG, CIF and SVG, and writes GDSII, OASIS, DXF, CIF, SVG, PNG and EPS. DWG is read-only: a DWG can be converted to another format, but no format converts back to DWG. Handy for one-off format bridges without opening the full editor.
Privacy. Glyph has no backend and uploads nothing automatically — your design files stay on your computer unless you connect the optional BEAM link, a localhost-only connection to a lithography tool. (The nanyte.com website that hosts these docs uses standard web analytics.) The three opt-in exceptions, all initiated by you with explicit clicks:
- Help → Send feedback… POSTs the message (and optional reply email) you typed to a NANYTE support inbox. Nothing else is attached — no app version, no user-agent, no document data.
- The Claude pill (menu bar, right end) connects to a local MCP server on
127.0.0.1for the agent bridge — see §17. The traffic stays onlocalhost; nothing is sent to the internet. - The BEAM pill (menu bar) connects to a BeamXplorer lithography tool on the same computer over
127.0.0.1to send/receive designs — see §18. The traffic stays onlocalhost; nothing is sent to the internet.
The diagnostic-report button on the error overlay copies the stack to your clipboard; nothing is sent automatically. See Help → About for the full library + privacy summary.