Skip to content

Features

A tour of what tsmap does. For step-by-step instructions on any of this, see the user guide — this page covers capability and benefit, not the click-by-click.

Open any format

STDF, ATDF, CSV, JSON, and Parquet — all multi-wafer by default, and all mergeable into one gallery from several files at once. Gzip (.gz) and Zip (.zip) archives are handled transparently.

Multi-wafer gallery

STDF and ATDF are parsed natively in Rust on both platforms (compiled to WebAssembly for the browser), which is where tsmap's speed comes from: a 341 MB / 266,000-die STDF lot parses in about 1.4 seconds (~250 MB/s) on a Lenovo ThinkPad T14s laptop. CSV and ATDF parsing saw similar jumps in a 2026 rewrite — CSV about 3.4× faster, ATDF about 2.8× faster.

See Supported file formats and Opening files in the user guide.

Find the right files before you open them

Pointed at a directory of hundreds of lots, Scan a folder… reads only each file's header metadata — lot ID, part type, tester, job name, wafer count, start and finish times, site count — and lays them out as one row per file. Sort, filter per column, or search across all of them, then load just the subset you actually want; the rest are never parsed. A filter can be saved and reloaded, so a recurring selection is a file rather than a habit. Because the scan skips die and test records entirely, it stays quick over a large batch.

Two-pass test selector

STDF/ATDF files with a lot of tests get a fast first-pass scan, then a selector overlay to choose which tests to actually import — before the full parse runs. Selections (and renames) can be saved to a file and reloaded later, or supplied on the command line.

Test selector overlay

See Test selector in the user guide.

The same definitions file can also define derived tests: a row with an expression, such as abs(t[1020] - t[1010]) or log10(t[5110]), is a test computed on every die from the tests it reads. It is then plotted, charted and reported like a measured test, and marked † wherever it appears so it is never mistaken for a measurement. See Derived tests.

Interactive wafer maps

Yield, soft-bin, and per-test parametric heat-map views, with zoom, pan, and hover. Spatial findings (edge effects, clustering) are always computed; an optional value-findings mode adds statistical outlier detection on top.

Give tsmap the reticle (stepper field) size in dies and it draws the field grid and looks for failures that repeat at the same place in every field, which points at the stepper rather than the wafer. See Reticle.

A multi-project wafer, where each reticle holds only a few of one product's dies and the map is mostly empty, can be drawn on a Compact layout that removes the empty rows and columns and outlines each group of dies. Every die is still counted, and the labels keep the original die coordinates. See Multi-project wafers.

Wafer map in test-value mode Wafer map in soft-bin mode

See The wafer map view in the user guide.

Dies with no reported position

X/Y position is optional in every format. A wafer with no reported position never renders as a fabricated map — showing dies at synthetic positions risks being misread as real spatial data. Instead it shows a compact summary that follows the current plot mode — a bin breakdown in the map's own colours for hard/soft-bin modes, or a histogram (also colour-matched, and log-scale/spec-range aware like the map's colorbar) for value mode — with a one-click toggle to the full die list when you need exact values or CSV export. A wafer that's only partly positioned renders its map for the dies that do have coordinates, plus an expandable "+N dies without position data" footer offering the same chart/die-list toggle for the rest. Yield, bin counts, and per-test statistics still count every die either way — only spatial findings (edge ring, quadrants, clustering) are scoped to positioned dies. A lot-wide combined die list, also CSV-exportable, is available from the toolbar's Setup ▾ menu for any multi-wafer load.

See Dies with no reported position in the user guide.

Values that are not measurements

A tester that runs out of range records its clamp value instead of a reading: a current held at the compliance clamp, an open-circuit value. One such value stretches the colour scale and drags the mean, the standard deviation and the Cpk. A test can carry validity limits, the range a real measurement lies in (from a long-format file's lvl/uvl columns or a test-definitions file), and Setup ▾ → Exclude values outside limits… chooses which limit set a value must lie inside to be used. An excluded value counts as missing in the map, the statistics and every chart, and is counted wherever a population is shown, while bins and the tester's recorded pass/fail are unchanged. See Excluding values outside limits.

When a die was probed more than once, Setup ▾ → Retests… chooses which result stands for it: the last (the default), the first, the best or the worst. The choice reaches every figure at once, and each retested die's tooltip says how often it was probed. See Retests.

Wafer splits — compare process corners

Attach an arbitrary label to each wafer — a process corner (TT/FF/SS/FS/SF), an experiment group, anything not present in the source file — and save/load the assignment as CSV. Splits feed straight into every chart's Group by control.

Splits dialog with corners loaded Gallery showing split labels on each card

See Wafer splits in the user guide.

Charts & Insights

The Insights tab (wafermap's own built-in chart suite) covers yield, bin pareto, process capability, boxplot, histogram, correlation matrix, and scatter — organised into Overview, Distributions, and Correlation sub-tabs, with a shared Group by control (any wafer attribute that varies: lot, program, tester, node, station, part type, or a wafer split) and click-through drilldown. Group by pools whole wafers; a plot's own Compare by (its colour and categories) can also separate the dies within each wafer, by ring, quadrant, bin, site or a pass/fail test.

The Chart reference describes every chart, plot and table: what it shows, how to read it and where to find it.

Insights Overview — yield, bin pareto, ring/quadrant yield, test values

Yield by wafer, expanded Bin pareto, expanded Test value distribution boxplot, expanded
Value histogram, expanded Test correlation matrix, expanded Test scatter, expanded

Grouping and drilldown work together: group the Overview by a wafer split to see yield and bin pareto broken out per corner, then click a group's bar to drill in-place to that corner's own per-wafer view.

Insights Overview grouped by Split Yield drilled into a single Split

See Grouping data in the Insights tab in the user guide.

Sweeps read an ordered run of tests — up/down switching voltages, bake times, cycle counts, resistance thresholds — as a response curve, and measure a pair of curves against each other: where they cross, and how far apart they are at a given level. They are defined in a card on the Insights My plots tab (+ New plot, chart type Sweep), kept with your other plots; the swept value can be given directly or read from the test names, and plotted on a log axis when it grows by multiples. See Sweeps.

Your own plots. The My plots tab is a chart builder: choose scatter, histogram, box, bar, line, probability, control, heatmap, goal or sweep, and for each axis and for colour any test, a die's position, ring, quadrant, reticle cell or shot, bin, site, a pass/fail test, or a wafer attribute. A plot is a recipe with no lot in it, so tsmap keeps your plots between sessions and draws them again on the next lot. Export plots… and Import plots… move a set between machines. See Plots.

Tables for the same dies. Insights' Data tab shows the lot as tables: the test statistics, every die in a sortable table that scrolls smoothly at hundreds of thousands of dies, and one row per wafer, each with CSV export. Clicking a die row shows that die on its map. The Summary panel's Data tables button opens the same tables over the wafer or lot it describes.

Chart just the dies you care about. Select dies on a map and right-click — or right-click a wafer card, or one wafer's bar in a chart — for a histogram, process capability or any sweep drawn from only that population, with the number of dies and the wafer stated on the chart. See Charting dies and wafers in the wafer map guide.

Export & desktop/browser parity

Every chart has a camera button for a clean PNG export at full resolution, and the wafer map toolbar has its own PNG export too. The desktop app and browser build share the same Rust parsing core and the same rendering — same maps, same charts, and both fully local. The browser build caches itself on first visit, so it works offline too, and Chrome, Chromium and Edge can install it as an app with its own window and launcher entry.

Every file dialog reopens where you last used it, remembered separately for data, images, exported data, definitions and filters — on Linux too, where the system dialog would open at your home folder every time.

Wafer map toolbar with the plot-mode dropdown open

See Exporting a chart in the full wafer map guide, and the full desktop vs browser comparison in the web app page.

Open directly from your own systems

A caller application — your own data-selection page, a script, a scheduled task — can hand tsmap a URL and have it fetch and load the data itself, no manual download/upload step for the user. On desktop: tsmap --url <url> --url-format <format>, or a tsmap://open?url=...&format=... link that launches the installed app straight from a web page click. In the browser: ?dataUrl=&dataFormat= as a query param on the app's own URL. Desktop also supports --url-headers <file> for data APIs that authenticate via a header rather than a self-authenticating link.

Once a file is associated with tsmap (Preferences → File associations…, desktop only), double-clicking a .stdf/.atdf/.parquet file in a file manager opens it in tsmap directly — an in-app setting, changeable anytime, rather than something locked in at install.

See Opening data from a URL and File associations in the user guide, and the full integration guide for architecture options (presigned URLs, a download proxy, same-origin SSO) if you're wiring this up against your own data API.