Grapher App Icon
Grapher v2.10.4
Documentation

Grapher Wiki

Complete user guide and technical reference for all Grapher features.

🚀

Getting Started

Installation

Grapher is distributed as three Linux package formats. Choose the format that fits your workflow:

  • AppImage — self-contained, runs anywhere. No installation required. Just chmod +x and execute.
  • .deb — integrates with Debian/Ubuntu package manager. Recommended for Ubuntu 22.04+ users.
  • .rpm — for Fedora, openSUSE, and RHEL-family distributions.

AppImage Quick Start

# Download, make executable, run
chmod +x grapher_2.10.4_amd64.AppImage
./grapher_2.10.4_amd64.AppImage

Debian / Ubuntu Installation

# Install the .deb package
sudo dpkg -i grapher_2.10.4_amd64.deb
# Fix any missing dependencies
sudo apt-get install -f
💡 Tip: AppImage users get seamless OTA auto-updates directly within the app. The in-place binary replacement requires no root access.

First Launch

On first launch, Grapher opens a welcome screen with a file picker. You can load any CSV or Excel file immediately. The app stores your settings and recent sessions in ~/.config/grapher/.

📂

Loading Data

Supported Formats

  • CSV — comma, semicolon, or tab delimited. Auto-detects delimiter.
  • Excel (.xlsx / .xls) — reads all sheets; sheet selector appears for multi-sheet files.
  • .grapher — Grapher's own encrypted compressed session package.

Loading a File

Use File → Open or drag-and-drop a file onto the main window. Grapher uses a Rust streaming parser to handle files with millions of rows without blocking the UI. Progress is shown in the status bar.

Column Auto-Detection

Grapher automatically detects column data types:

  • Numeric — integer or float values become plottable series.
  • Timestamp — ISO 8601 or common date formats parsed as the X axis automatically.
  • String — categorical columns used for grouping or labeling.

Large File Performance

Grapher uses a Rust-based decimation engine to maintain 60 FPS rendering even for datasets with millions of rows. The engine computes local min/max envelopes at each pixel resolution, so you always see the full signal shape without sacrificing performance.

💡 Files above 500 MB may take a few seconds to parse. A progress bar is shown while loading.
📈

Plot Configuration

Chart Types

  • Line — continuous time-series data. Supports WebGL GPU acceleration for >100k points.
  • Scatter — individual data points. Uses scattergl (WebGL) for 1M+ point datasets.
  • Bar — categorical comparisons. Grouped and stacked variants available.

Assigning Columns to Axes

The right-side panel shows all available columns. Drag a column to the X or Y axis drop zone, or use the column dropdown menus. Multiple Y columns can be added to the same chart as separate trace lines.

Trace Customization

Each trace can be independently styled:

  • Color — click the color swatch to open the color picker.
  • Line width — drag the width slider (0.5px to 8px).
  • Marker style — circle, square, diamond, cross, or none.
  • Opacity — adjust per-trace transparency for overlapping data.
  • Visibility — toggle the eye icon to show/hide a trace without removing it.

Axis Formatting

Right-click an axis label to access formatting options: numeric precision, scientific notation, log scale, and custom axis label text. Axis ranges can be locked or set to auto-scale.

⚖️

Dual Y-Axis Plotting

Overview

Grapher supports fully independent left (Y1) and right (Y2) Y-axes on the same chart. This is ideal for comparing sensors with different units or value ranges — for example, plotting temperature and pressure on the same time axis.

Enabling a Second Y-Axis

Select any trace in the trace list panel and toggle Y-Axis → Right (Y2). The trace immediately migrates to the right axis with its own independent scale.

Independent Scaling

Each axis scales independently. You can lock or manually set ranges on either axis without affecting the other. Both axes can use different formatting (e.g., Y1 in linear scale, Y2 in log scale).

💡 A colored axis label indicator shows which traces belong to Y1 (left) vs Y2 (right).
🔊

A-Scan DSP Engine

What is A-Scan?

An A-Scan is a time-domain ultrasonic signal used in non-destructive testing (NDT). Grapher includes a full DSP (Digital Signal Processing) engine specifically designed for analyzing ultrasonic A-Scan waveforms in industrial inspection workflows.

Enabling A-Scan Mode

Navigate to Analysis → A-Scan DSP. Select the column containing your ultrasonic time-domain signal amplitude data. Grapher auto-configures the DSP pipeline.

DSP Features

  • Peak Detection — configurable threshold-based peak finder with minimum prominence and distance settings.
  • Signal Envelope — Hilbert transform envelope extraction displayed as an overlay trace.
  • FFT Spectrum — Fast Fourier Transform frequency analysis plotted in a companion panel with amplitude in dB.
  • Bandpass Filter — configurable low-pass and high-pass frequency cutoffs applied in real-time.
  • Gate & TOF — set inspection gates and compute Time-of-Flight measurements between gates.

Exporting DSP Results

DSP results (peak table, envelope data, FFT spectrum) can be exported as CSV or included in the encrypted HTML report export.

⚠️ A-Scan mode is optimized for single-channel ultrasonic waveforms. For multi-channel data, process each channel in a separate session.
📄

Encrypted HTML Report Export

Overview

Grapher can export your entire session — charts, data, and annotations — as a standalone interactive HTML file. The report is fully self-contained (no internet required) and can be opened in any modern browser.

Exporting a Report

Go to File → Export → Interactive HTML Report. Choose your encryption options and click Export.

AES-256 Encryption

Reports are encrypted client-side using the Web Crypto API (AES-256-GCM). The encryption key is derived from a password using PBKDF2 with 100,000 iterations. Without the correct password, the report data cannot be decrypted — even by the server serving the file.

  • No password — report is plaintext HTML, viewable by anyone with the file.
  • App master key — encrypted with Grapher's embedded application key. Only Grapher instances can decrypt (for internal use).
  • Custom password — you set a password; the recipient must enter it to view the report.

Sharing Reports

The exported .html file is completely self-contained — share it via email, file transfer, or any storage system. Recipients open it in a browser, enter the password, and interact with the full chart (zoom, pan, tooltips).

💡 The encryption is performed entirely in-browser. No data is ever sent to a server during export.
📦

.grapher Package Format

What is a .grapher file?

A .grapher file is Grapher's native session format. It bundles your dataset, chart configuration, axis settings, trace styles, and any DSP results into a single compressed and encrypted file.

Compression

The package uses Gzip streaming compression achieving up to 90% size reduction on typical CSV datasets. A 10 MB CSV typically becomes ~1 MB when saved as .grapher.

Encryption

Like HTML reports, packages are encrypted with AES-256-GCM. By default the app master key is used (seamless — no password needed). You can optionally lock the package with a custom recipient password for sharing with specific users.

Saving a Session

Use File → Save Session (or Ctrl+S). Choose Save as .grapher Package and set an optional recipient password.

Loading a Package

Drag-and-drop a .grapher file onto the app window, or use File → Open. If password-locked, Grapher prompts for the password. Once unlocked, your full session is restored including all charts, traces, and settings.

💡 .grapher files are cross-version compatible. Sessions saved in earlier versions load correctly in newer Grapher releases.
🔄

OTA Updates (Over-the-Air)

How it Works

Grapher checks for updates at startup by querying the Cloudflare Worker endpoint. If a newer version is available, a subtle notification appears in the title bar. The update modal shows release notes and a one-click install button.

AppImage Update Flow

AppImage users get the smoothest experience:

  • Grapher downloads the new .AppImage in the background with a live progress bar.
  • Once complete, the Rust backend overwrites the current executable in-place (no root required).
  • A Restart to Apply button appears. Clicking it relaunches Grapher automatically.
  • The entire update takes about 30 seconds on a typical connection.

Debian / Ubuntu (.deb) Update Flow

For .deb users, automatic binary replacement is not possible (the package manager owns the installed files). Instead:

  • The update modal shows a copy-to-clipboard install command.
  • A sudo dpkg -i grapher_X.X.X_amd64.deb command is pre-filled.
  • Paste into your terminal to update. Grapher detects the new version on next launch.

Update Privacy

The update check sends only your current version string and architecture. No usage data, session content, or personal information is ever transmitted.

💡 You can disable automatic update checks in Settings → Updates → Check for updates on startup.
⌨️

Keyboard Shortcuts

File

Open file
CtrlO
Save session
CtrlS
Export HTML report
CtrlE

View

Reset zoom to fit
R
Toggle fullscreen
F11
Toggle stats drawer
CtrlD

Chart Interaction

Zoom in/out
Scroll wheel
Pan chart
Click & drag
Box zoom selection
Shiftdrag
Reset view
Double click

Traces

Hide/show trace
Click legend
Isolate one trace
Dbl-click legend
🖥️

System Requirements

Minimum Requirements

  • OS: Linux x86_64
  • glibc: 2.31 or newer (Ubuntu 20.04+, Debian 11+, Fedora 33+)
  • Display: X11 or Wayland (via XWayland)
  • RAM: 512 MB (2 GB recommended for large datasets)
  • GPU: Any GPU with OpenGL 2.1+ for WebGL acceleration
  • Disk: 200 MB free space

Tested Distributions

  • Ubuntu 22.04 LTS (Jammy)
  • Ubuntu 24.04 LTS (Noble)
  • Debian 12 (Bookworm)
  • Fedora 39+
  • Linux Mint 21+
  • Pop!_OS 22.04
  • Arch Linux (rolling)

Wayland Notes

Grapher runs natively on Wayland-based desktops via XWayland. For pure Wayland support without XWayland, set the environment variable:

WEBKIT_DISABLE_COMPOSITING_MODE=1 ./grapher.AppImage
💡 macOS and Windows support is planned for a future release. Follow the changelog for announcements.