Est. 1989 Intermediate

IGOR

The built-in procedural programming language of Igor Pro, WaveMetrics' scientific data-analysis and graphing environment, designed to script and extend analysis of multidimensional 'wave' datasets.

Created by Larry Hutchinson (WaveMetrics, Inc.)

Paradigm Procedural, structured; domain-specific (scientific computing)
Typing Static; explicitly declared (numeric variables, strings, waves, structures)
First Appeared 1989
Latest Version Igor Pro 10 (2025)

IGOR is the built-in procedural programming language of Igor Pro, the scientific data-analysis, numerical-computing, and graphing environment developed by WaveMetrics, Inc. Rather than being a standalone, general-purpose language, IGOR exists to script, automate, and extend Igor Pro itself: users write procedures in text windows that call the program’s hundreds of built-in operations and functions, manipulate its signature wave data structures, build custom user interfaces, and package complete analysis workflows. It is one of those long-lived, domain-specific languages that quietly underpins a great deal of working science.

History & Origins

The story of the IGOR language is inseparable from the company that created it. WaveMetrics was founded in 1987 in Lake Oswego, Oregon, by Larry Hutchinson and Howard Rodstein. Hutchinson had been working on a Macintosh program for time-series analysis that he called Igor — a nod to the dutiful laboratory assistant of horror-film lore, cast here as the scientist’s tireless helper. After demonstrating early versions in 1987, WaveMetrics shipped Igor 1.0 in early January 1989.

From the outset, Igor was more than a charting tool. It paired interactive data analysis with an embedded command line and procedure language, so that the same operations a user invoked by hand could be assembled into reusable scripts. Around 1994 the product was renamed Igor Pro, signaling a broadened scope that grew to include curve fitting, image processing, signal processing, and statistics — all programmable through the same language.

From Macintosh roots to cross-platform

Igor began life as a Macintosh application. Windows support was added in the years that followed, and by the time of Igor Pro 7 (released in July 2016) the program offered full 32-bit and 64-bit builds on both macOS and Windows from a substantially rewritten codebase. In a notable reversal, Igor Pro 10 (released October 15, 2025) became a Windows-only product; WaveMetrics cited the cost of porting its optimized numeric libraries to Apple’s ARM-based processors, and designated Igor Pro 9.05 as the final release supporting macOS.

Design Philosophy

IGOR is, by WaveMetrics’ own description, a structured procedural language with the standard modern flow-control constructs — conditionals, loops, and user-defined functions and macros. Its design goals are pragmatic rather than theoretical:

  • Accessible to scientists, not just programmers. The documentation explicitly positions the language as easier to learn than lower-level languages such as Fortran or C, so that researchers can become productive without a formal software-engineering background.
  • Interactive, incremental development. Because commands can be executed one at a time from the command line and procedures tested piece by piece, users can build and debug routines incrementally inside the same environment where their data lives.
  • Data-centric. The language is organized around Igor Pro’s core abstraction — the wave — rather than around general data structures, keeping scientific datasets front and center.
  • Extensible to the metal. When the built-in language is not enough, Igor Pro supports external operations and functions (XOPs) written in C/C++, allowing data acquisition, hardware control, and performance-critical code to be bolted on.

Key Features

Waves: the central data structure

The defining concept of Igor Pro — and the thing IGOR code spends most of its time manipulating — is the wave. A wave is a numeric, text, or reference array of up to four dimensions (from a one-dimensional vector to a four-dimensional tensor) that also carries metadata such as physical units and scaling. Because a wave can store its own X-scaling, graphing a dataset often needs no separate axis array at all.

A C-flavored procedure language

IGOR procedures are written in procedure windows and use a C-like syntax with explicitly declared variables. A simple user-defined function illustrates the style:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Function MeanOfWave(w)
    Wave w
    Variable i, total = 0
    Variable n = numpnts(w)

    for (i = 0; i < n; i += 1)
        total += w[i]
    endfor

    return total / n
End

Here Wave, Variable, and String introduce the language’s principal declared types, alongside structures (Struct) for grouping related data. Functions can call any of the program’s built-in operations (commands like Display or CurveFit) and functions (value-returning calls such as numpnts above).

Beyond computation

The modern language reaches well past number crunching. It includes regular-expression support, file I/O, network communication over FTP/HTTP, and the ability to construct graphical user interfaces — control panels, buttons, and dialogs — entirely from procedure code. Igor Pro 10 adds built-in Python integration, letting the two ecosystems exchange data and call into one another.

Evolution

The language matured alongside the application across its major versions:

VersionYearNotable advance
Igor 1.01989First release; waves and an embedded procedure language (Macintosh)
Igor Pro~1994Renamed; broadened analysis and programming capabilities
Igor Pro 62007Multithreading across processor cores
Igor Pro 72016Cross-platform 32-/64-bit (macOS and Windows), high-DPI graphics
Igor Pro 82018NetCDF support, filter-design laboratory
Igor Pro 92021Dozens of new operations and functions
Igor Pro 102025Windows-only; built-in Python integration

A significant business milestone came in September 2022, when WaveMetrics became a division of Sutter Instrument, a maker of scientific instrumentation, ensuring continuity of the product and its language.

Current Relevance

IGOR remains an actively developed, commercially supported language — an unusual status for a domain-specific scripting language that first appeared in 1989. Its community is concentrated in the physical and life sciences: electrophysiology and neuroscience, X-ray and neutron scattering, photoelectron spectroscopy, physics, and chemistry, among others. In several of these fields, large bodies of community and institutional code — packages from Argonne National Laboratory and NIST, and projects like NeuroMatic — are written in the IGOR language, giving it real staying power within its niches.

The trade-off is that IGOR is tied to a proprietary, paid environment and cannot be run outside Igor Pro, which limits its reach compared with open-source scientific languages such as Python, R, or Julia. The recent move to a Windows-only release in version 10 further narrows the platforms on which the language runs.

Why It Matters

IGOR is a clear example of an application-embedded language that became a serious tool in its own right. By giving working scientists a programmable, structured language wrapped around an intuitive data model — the wave — and an interactive analysis environment, WaveMetrics let researchers move fluidly from clicking through an analysis to scripting and automating it. Decades of published figures, instrument-control software, and shared analysis libraries written in IGOR attest to a quiet but durable influence on how experimental data gets reduced, modeled, and visualized.

Timeline

1987
WaveMetrics, Inc. is founded in Lake Oswego, Oregon by Larry Hutchinson and Howard Rodstein; Hutchinson demonstrates an early version of the program he calls 'Igor'
1989
Igor 1.0 ships in early January as a Macintosh data-analysis and graphing application built around 'waves', with an embedded command and procedure language
1994
The product is renamed Igor Pro, reflecting an expanded feature set and a more capable built-in programming language
2007
Igor Pro 6 is released, adding multithreading so analysis and curve-fitting routines can use multiple processor cores
2016
Igor Pro 7 is released (July), a major rewrite delivering 32-bit and 64-bit builds on both macOS and Windows and high-DPI display support
2018
Igor Pro 8 is released, adding features such as native NetCDF file support and a filter-design laboratory for signal processing
2021
Igor Pro 9 is released (August) with hundreds of improvements, including dozens of new operations and functions
2022
WaveMetrics becomes a division of Sutter Instrument (September), continuing development of Igor Pro
2025
Igor Pro 10 is released (October 15) as a Windows-only product with built-in Python integration; Igor Pro 9.05 remains the final macOS release

Notable Uses & Legacy

Argonne National Laboratory

Researchers at Argonne's Advanced Photon Source developed widely used Igor Pro packages such as Nika and Irena for reducing and analyzing small- and ultra-small-angle X-ray scattering (SAXS/USAXS) data.

Neuroscience and electrophysiology

Igor Pro is a long-standing tool in patch-clamp and electrophysiology labs; the open-source NeuroMatic package, written in the Igor language, provides acquisition and analysis routines for neuronal recordings.

Photoelectron spectroscopy and ARPES

Igor Pro is reportedly a common analysis platform in the photoelectron-spectroscopy and angle-resolved photoemission (ARPES) community, where researchers and synchrotron beamlines have distributed Igor-based macros for reducing and analyzing spectra.

Neutron and X-ray scattering facilities

The NIST Center for Neutron Research has, for roughly two decades, distributed a widely used Igor Pro-based package for reducing and analyzing small-angle (SANS), very-small-angle, and ultra-small-angle neutron scattering data.

Scientific publication graphics

Igor Pro is widely valued for producing publication-quality plots, and its procedure language lets researchers automate figure generation directly from analyzed datasets.

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: