// SASA engine · Zig · v0.11.0

Surface areaat proteomescale.

zsasa computes solvent accessible surface area for structures, complexes and MD trajectories. 23,586 human AlphaFold structures in 13.4 s on a laptop, in under 85 MiB.

9.00×vs FreeSASA batch
3,023structures / s
47.4MiBpeak RSS

E. coli AlphaFold proteome, 4,370 structures. zsasa 0.9.0, bitmask f32, 10 threads, Apple M4. Methods

Target 1UBQ
Atoms 602
Probe 1.4 Å
Exposed –
Test points –
Scan –
Shrake–RupleyLee–Richardsf64 / f32 / bitmask mmCIF · PDB · XTC · DCDCLI · Python · Zig
// 01 · Interfaces

One engine, from the shell or from Python.

The same Zig core backs a standalone CLI and NumPy-based Python bindings. Wheels ship for Linux, macOS and Windows.

CLI reference →
Python API →
Install
bash
pip install zsasa
Use
bash
# One structure
zsasa calc 1ubq.pdb out.json

# A directory of structures
zsasa batch structures/ results/

# An MD trajectory
zsasa traj trajectory.xtc topology.pdb --stride=10
text
Classifier 'CCD': 660 atoms classified, 0 fallback
Calculated SASA for 660 atoms
Total area: 5656.65 Ų

Output of the first command on examples/1ubq.pdb.

// 02 · Method

What gets measured.

Inflate every atom by the radius of a water-sized probe, 1.4 Å. The part of each inflated sphere that no neighbour covers is where solvent can reach. Shrake–Rupley estimates that area by testing points on each sphere.

The figure runs the same test live, on one plane through ubiquitin. Drag the ruler to move the plane.

Algorithms →
Fig. 1 — 1UBQ cross-section z = +0.0 Å
Atoms in plane–
Exposed points–
Accessible contour–
exposedburiedvan der Waals section
Computed in your browser from the 602 heavy atoms of ubiquitin, with element radii for illustration.
// 03 · Throughput

Faster, in a fraction of the memory.

Whole AlphaFold proteomes, timed end to end: parsing, SASA and output. Exact f64 and f32 modes target matched Shrake–Rupley outputs; bitmask modes are a throughput-oriented approximation with a validated envelope.

Batch benchmarks →

Batch throughput and memory at 10 threads

128 sphere points. Bars are three-run means; whiskers show one standard deviation. SwissProt was measured once, under the passive disk I/O policy.
Data table
// 04 · Capabilities

Built for whole datasets.

The same engine handles one structure, a proteome directory, or an MD trajectory.

Guides →
Algorithms

Shrake–⁠Rupley and Lee–⁠Richards

Shrake–Rupley is fast and recommended; Lee–Richards is the precise alternative. Both run in f64 or f32.

Formats

mmCIF, PDB, JSON, XTC, DCD

Structure files in, JSON or CSV out. Trajectories with automatic unit conversion.

Radii

CCD-aware classification

Hybridization-based radii for any chemical component, plus ProtOr, NACCESS, OONS and custom TOML tables.

Analysis

Per-residue, RSA, polarity

Residue aggregation, relative accessibility and polar / nonpolar partitioning without extra tooling.

Scale

Batch and trajectory native

Directory batch processing and streaming MD analysis are subcommands, not shell loops.

Platforms

Linux, macOS, Windows

A CLI binary, a Python package on PyPI, and a Zig library with interactive autodoc.

// 06 · Citation

Cite zsasa.

If zsasa is part of your research, please cite the bioRxiv preprint.

Read the preprint
zsasa: a Zig-based engine for high-throughput solvent accessible surface area at proteome scale
Nagae, T.; Tomii, K. bioRxiv 2026. doi:10.64898/2026.06.29.733683
bibtex
@article{Nagae2026zsasa,
  author  = {Nagae, Tsubasa and Tomii, Kentaro},
  title   = {zsasa: a Zig-based engine for high-throughput solvent accessible surface area at proteome scale},
  journal = {bioRxiv},
  year    = {2026},
  doi     = {10.64898/2026.06.29.733683}
}
// 07 · Feedback

Something off? Say so.

Bugs and requests are tracked as GitHub issues, and the forms ask for what it takes to reproduce a problem. Questions go to Discussions.

Open issues