Scientific curve and peak fitting for spectroscopy, diffraction, kinetics, and general x-y data.
CurveMole is a desktop-first, scriptable scientific data-analysis application for one-dimensional spectra and curves. It provides interactive curve fitting, peak fitting, baseline/background modelling, and nonlinear least-squares analysis for IR and Raman spectra, powder diffraction and XRD patterns, kinetic traces, and general x-y data. The same scientific engine is shared by the graphical interface, Python API, command line, and reproducible YAML workflows.
Status: Version 0.21.0 Preview. The scientific core and desktop workflow are usable, but this is not yet the validated 1.0 Stable release.
Download the latest release · Browse previous releases
Available packages are built automatically for:
- Linux x86_64: AppImage
- Windows x86_64: standalone
.exe - macOS Apple Silicon:
.dmg - macOS Intel x86_64:
.dmg - Python 3.12+: wheel and source distribution
Windows and macOS security notice
Windows SmartScreen or macOS Gatekeeper will probably show a warning on first launch because these packages are not currently code-signed or notarized with certificates recognised by those platforms. Obtaining and maintaining those certificates requires paid developer programmes. CurveMole is free, open-source, non-profit software, and the project currently chooses not to fund commercial, platform-specific signing programmes or pass those costs on to users. A warning caused by a missing signature is not, by itself, evidence that malware was detected. Download CurveMole only from the official release page and verify
SHA256SUMS.txt.
The Linux AppImage is cryptographically signed using the free, open-source Sigstore
infrastructure through GitHub Actions. Every release includes a detached
.sigstore.json signature bundle. With the GitHub CLI:
gh attestation verify CurveMole-VERSION-linux-x86_64.AppImage \
--repo SebRoLENS/curvemoleKeep experimental notes in the Laboratory notebook: project notes plus descriptions of series, individual spectra, and fit functions. Descriptions survive deletion with a clear status, are saved in the project, and can be exported as TXT. Overlay and Waterfall also offer one-click All series / Active series / Selected controls. Use Shift-click for ranges and Ctrl-click for individual selections. Note icons open attached descriptions directly; empty descriptions disappear. Series headers adapt their color to the theme. File > Recent projects reopens recent work, and recovery is offered automatically only after an abnormal exit. Three recovery copies are retained per project and cleared after Save or explicit Discard.
CurveMole is designed for experimental scientists who want the convenience of an interactive desktop GUI without giving up reproducibility or scriptability. A fit can be explored graphically and then reproduced through the Python API, CLI, or YAML workflow using the same fitting engine and scientific conventions.
It is intended as a general-purpose open-source tool for spectroscopy, diffraction, kinetics, peak analysis, and other one-dimensional scientific datasets rather than a workflow tied to a single experimental technique.
- Detailed user manual (Markdown) - authoritative source, with the supported CurveMole version declared at the top
- User manual (PDF) - generated automatically from the Markdown source
- User manual (LaTeX) - generated source used to compile the PDF
- Quick Start - compact first-workflow guide
The documentation workflow verifies the declared software version, local links, LaTeX conversion, and PDF compilation. Versioned PDF and LaTeX manuals are attached to releases.
- Gaussian, Lorentzian, Voigt, and pseudo-Voigt peaks parameterised by signed area
- constant, linear, arbitrary-order polynomial, and cubic-spline backgrounds
- content-aware import of valid numeric text files regardless of extension, with automatic/manual leading-row skipping and reusable batch mappings
- fixed values, lower/upper bounds, intervals, and expression links across spectra
- independent, propagating sequential, copy, and global simultaneous least-squares fitting, with configurable safeguards and durable pause/resume
- reversible transformations and graphical masks with immutable original data
- function-aware Quick Add, selectable automatic peak shapes, click-drag peak placement, live spline backgrounds, and direct right-drag interval masking
- project-wide function selection and explicit, undoable parameter copying between compatible functions, including optional bounds, fixed state, and links
- reusable user-defined function libraries with explicit peak parameter roles for reliable graphical and automatic initialisation
- live fit refresh, adaptive rendering for dense spectra, background-subtracted inspection, and non-destructive viewport navigation during fitting
- covariance statistics, confidence intervals, profile likelihood, Monte Carlo, residual bootstrap, and block bootstrap
- portable, versioned
.fitprojprojects without pickle - human-friendly Wide exports, Python-friendly Tidy exports, and one-file-per-spectrum numeric export of data, components, total fit, background, and residuals
- startup and hourly release checks with an in-app version badge and self-update for supported Linux AppImage and Windows standalone installations
- Python API, CLI, YAML workflows, custom formulas, and trusted plugins
A deterministic Raman-like dataset fitted with a linear background, a Gaussian peak, and a Lorentzian peak. The complete interface shows the measured curve, individual components, model sum, residuals, fitted parameters, uncertainties, and curve state.
Three related spectra are fitted independently and inspected together in Overlay view. All spectrum colours use CurveMole's built-in Colourblind palette.
The same fitted series displayed with a vertical offset in Waterfall view, while preserving the model components and residual information.
The single-spectrum fit shown with CurveMole's dark interface theme and the same colourblind-safe spectrum palette.
All four screenshots are generated from the real application by
scripts/generate_screenshots.py and refreshed
automatically whenever the graphical interface changes.
Python 3.12 or newer is required.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -e .
curvemole guiTry the complete example:
curvemole run examples/gaussian_workflow.ymlRun tests:
uv sync --group dev
uv run pytestThe manual, Quick Start, and plugin guide are included offline. Maintainers can consult the automated release guide.
Built-in peak amplitude is the signed integrated area. Widths are strictly positive;
pseudo-Voigt mixing is bounded to [0, 1]. Original data are never overwritten.
Masks and transformations remain visible, reversible, and serialised. CurveMole never
silently changes the solver, excludes points, or normalises global contributions.
Sebastiano Romi
European Laboratory for Non-Linear Spectroscopy (LENS)
University of Florence (UNIFI)
romi@lens.unifi.it
Current public version: 0.21.0
If CurveMole contributes to published research, please cite the exact version used.
GitHub also provides a Cite this repository entry from CITATION.cff.
Romi, S. (2026). CurveMole: Modular Scientific Curve Fitting (Version 0.21.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.22660872
CurveMole is free software released under GPL-3.0-or-later. User data, projects,
results, private formulas, and unpublished private extensions remain under the user's
control. Citation metadata are provided in CITATION.cff.




