Skip to content
| Marketplace
Sign in
Visual Studio Code>Visualization>GDS Lens — GDSII & OASIS Layout ViewerNew to Visual Studio Code? Get it now.
GDS Lens — GDSII & OASIS Layout Viewer

GDS Lens — GDSII & OASIS Layout Viewer

Ethan L

|
55 installs
| (1) | Free
View GDSII and OASIS chip layouts directly in VS Code, with KLayout .lyp colors and DRC/LVS marker browsing
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

GDS Lens

View GDS Lens on the VS Code Marketplace | View GDS Lens on Open VSX

Open a chip layout in VS Code. GDS Lens adds a custom editor for .gds (GDSII) and .oas / .oasis (OASIS) files, gzipped or not: open one and it's parsed and rendered in a WebGL2 canvas, with KLayout .lyp colors, a cell hierarchy tree and DRC/LVS marker browsing.

GDS Lens rendering a GDSII layout

Features

  • GDSII and OASIS, including gzipped (.gds.gz, .oas.gz, .oasis.gz).
  • Full hierarchy — SREF/AREF, rotation, mirroring and magnification.
  • A cell tree you can click through to frame and outline any cell.
  • Find by name — any cell, or any of the layout's own text labels.
  • Saved views — name a camera and layer set, and come back to it.
  • A PDK-scale layer panel — filter, solo, shape counts, bulk show/hide.
  • KLayout .lyp colors, remembered per layout.
  • A ruler with vertex/edge snapping and axis constraint.
  • DRC/LVS markers from KLayout .lyrdb or Calibre DRC ASCII results.
  • Coordinate readout, scale bar and grid, plus a go-to-coordinate command.
  • Your VS Code theme, light or dark, switching live.

Getting started

Open any .gds, .oas, .oasis file — or a gzipped one — and it opens in the viewer. Neither gzip nor the layout format is decided by the filename: both are read from the file's leading bytes, so a layout with an unexpected extension still loads, and so does a .gds that turns out to be gzipped.

Then: drag to pan, scroll to zoom.

The viewer

Hierarchy

The Hierarchy button in the top-left corner (or H) opens the design's cell tree, starting from its top cell(s).

  • Click ▸ to see the cells a cell places; click the row to frame that cell and outline every placement of it on the canvas.
  • Outlines are dashed, stay on the geometry as you pan and zoom, and clear with Esc.
  • A cell placed more than once by its parent is one row marked ×N; clicking it outlines and frames all N copies. (Past ~1,000 copies, one outline around the lot.)
  • Open branches and the selection survive a reload, so re-running a generator leaves the tree where you had it.

Finding a cell or a label

Find — the folded row under the panel's header — searches the two things in a design that have names: its cells, and the layout's own TEXT labels, with Cells | Labels choosing which. It starts closed, since the panel is there to browse the tree; / opens it and lands in the box from anywhere, opening the panel too if that was away.

  • Results take the tree's place while a query is up, and clearing the box puts the tree back with its open branches untouched.
  • Cells match by name, exact matches first. Clicking one opens the tree down to it: the branches above it unfold, the row is selected and framed, and every placement is outlined — the same as having found the row by hand. The query stays in the box, so clicking back into it brings the list back.
  • Labels match by text, including labels on layers you've hidden (the row says so). Clicking one pans to it and marks it with a dashed box, leaving the zoom alone — a label is drawn at a fixed size on screen, so there's no extent to frame. Text drawing switches on if it was off, since finding a label and showing nothing isn't an answer.
  • ↑ ↓ and Enter walk the list and take a row; Esc clears the query, and again folds the box away. Closing it clears the search and puts the tree back.
  • A query survives a reload of the same file and is re-run against what was read, like the rest of the working context.

Layers

  • Per-layer visibility, grouped by the .lyp's categories, with each row showing how many shapes that layer holds in this file (Tn for a text-only layer).
  • Filter narrows the list by layer number, datatype, name or group. Matching folders open while you type and go back as they were when you clear it.
  • Show: All | None | Invert applies to whatever the filter is showing, so filtering to one family and hiding it takes two clicks.
  • S solos a layer; clicking it again restores the layers that were on before.

Display

A collapsed folder for the things you set once:

Control Does
Infill Hatched layer fill on/off
Text The layout's own TEXT labels, drawn in their layer's color (off by default — a dense design's labels bury the geometry)
Merge Overlaps Draw each layer as the union of its polygons, without internal edges
Grid Background reference grid, pitched at a round nm/µm/mm step that follows the zoom (on by default)
Load KLayout .lyp File Custom layer colors
Load Marker File A DRC/LVS marker database — see below
Reset View Refit the layout to the window

Saved views

Views in the panel keeps named places in a design. Save Current View asks for a name and stores the camera together with which layers were on; clicking a saved view puts both back, and the ✕ deletes it.

Views are kept per layout and survive closing the file — so "pad ring", "the corner that failed DRC" or "metal only, full chip" are still there next week. The render toggles in Display are deliberately not part of a view: those are how you like layouts drawn, not a place in one.

Measuring

Mode: Pan | Measure sits at the top of the panel (or press M). In Measure, click two points for the distance, Δx, Δy and angle between them.

  • Snapping — points land on the nearest polygon vertex or edge within ~12px, marked by a small square before you click. Hold Alt to place a point freely.
  • Shift constrains the second point to horizontal or vertical.
  • Rulers stay put — finished measurements remain on the canvas so several can be compared at once, and they survive leaving Measure mode. A Rulers: Clear n row appears while any are up.

Coordinates

The coordinate under the pointer is shown as X: … Y: … below the scale bar, always in microns; zoom sets the precision, to a tenth of the grid's current step.

GDSLens: Go to Coordinate centers the view on a coordinate you paste in — microns unless a number carries its own nm/um/µm/mm, and the decorations DRC reports and messages wrap them in (parentheses, x=/y=, commas or bare spaces) are all accepted. The zoom is left alone.

DRC/LVS markers

Load Marker File takes a KLayout .lyrdb report database or a Calibre DRC ASCII results database (detected from the file's content, not its extension).

  • Violations draw as a red overlay above all layers.
  • The Markers panel lists each category (rulecheck) with a visibility toggle and clickable items that zoom to the violation; [ / ] step through them.
  • Categories start hidden — check the rulechecks you want drawn. Clicking an item always shows that marker, even if its category is hidden.
  • Also: an overlay opacity slider, and Hide empty categories.
  • The marker file is remembered per layout and re-applied when you reopen it; unload it with the ✕ on the panel row.

Reloading after a rewrite

When the open layout is rewritten on disk (by a generator script, KLayout, ...) a header offers Reload, which re-reads the file while keeping the camera and per-layer visibility. Always reloads without asking from then on.

Keyboard shortcuts

Key Does
H Show/hide the hierarchy panel
/ Open the find box (cells and labels) and type in it
↑ ↓ Enter (Find) walk the results, take a row
M Switch between Pan and Measure
Esc Clear the find query, abandon a measurement, clear finished rulers, or clear cell outlines
Alt (Measure) place a point without snapping
Shift (Measure) constrain to horizontal or vertical
[ ] Step through marker violations

Commands

Command Does
GDSLens: Go to Coordinate Center the view on a pasted coordinate
GDSLens: Toggle Auto-Reload on Change Turn automatic reloading on or off (the GDS-Lens.autoReload setting)
GDSLens: Toggle Debug Tools Show/hide the render stats readout and debug log

Release notes

See CHANGELOG.md.

Contributing

Build and development instructions are in DEVELOPING.md.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft