Skip to content

Latest commit

 

History

51 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proteoscope

proteoscope

Proteoscope is a 3D viewer and analysis workbench for protein and nucleic-acid structures, predicted complexes, density maps and structural proteomics data. It runs on your own computer as one self-contained program: a single command installs it, and it needs no Python, packages or account. Parsing, rendering and analysis all happen in your browser, so your files never leave your machine.

It covers the everyday structural biology loop: find the structures and models of a protein by gene, name, accession or sequence, or open a file; style it; find and focus a ligand or residue; see its interactions, surface and electrostatics; judge model quality (the wwPDB validation report, the density map, B-factors, AlphaFold pLDDT and PAE, MolProbity-style Ramachandran); triage the models of AlphaFold 3, Boltz, Chai-1, ColabFold, Protenix and OpenFold3 runs, or the poses of a docking run; compare it with other structures, by sequence or by structure alone, or with its AlphaFold prediction; see which residues evolution conserves; interpret variants with AlphaMissense; bring in your own mass spectrometry results (search reports with differential statistics, cross-links, HDX-MS) and public proteomics evidence; and export a publication-ready figure with a methods paragraph to go with it.

Highlights:

  • WebGPU renderer.
    • Ray-cast atoms and bonds with exact intersections.
    • Screen-space ambient occlusion, outlines, depth fog and anti-aliasing.
    • Lighting presets: Standard, Soft, Illustrative, Glossy, Neon and Flat.
    • Interactive at 100k atoms.
  • Representations.
    • Cartoon with sheet arrows and nucleic-acid bases, ball and stick, sticks, spacefill and trace.
    • Molecular, solvent-accessible and Gaussian surfaces with Coulombic electrostatics.
    • Double, triple and aromatic bonds from the wwPDB Chemical Component Dictionary.
  • Density maps. The 2Fo-Fc and Fo-Fc maps of X-ray entries and the cryo-EM maps of EMDB, through the PDBe volume server, or your own CCP4/MRC files: meshes or surfaces around the focus, levels in σ, the model's fit (atom inclusion and per-residue density), and the peaks of the difference map near the model.
  • Ligands and docking.
    • A ligand card: common name, formula, weight, SMILES, InChIKey and links to PubChem, ChEMBL and DrugBank, with the difference-map peaks near it.
    • 2D interaction diagrams in the style of LigPlot+, as SVG or PNG.
    • Pose checks: PoseBusters' checks of a ligand pose (bond lengths and angles, clashes, flat rings, stereocenters, contacts with the protein), for co-folded, docked and deposited ligands, matching PoseBusters' verdicts on the validation suite's poses. Ligands given to a predictor as SMILES are checked against their SMILES, stereocenters included.
    • Bond orders, aromaticity and charges from the Chemical Component Dictionary, used to draw ligands and to type their interactions.
    • Docking poses from AutoDock Vina, smina, GNINA, Glide, GOLD, DOCK, rDock or DiffDock (SDF, MOL2 or PDBQT) in the receptor, with their scores and interaction fingerprints.
  • Analysis.
    • DSSP secondary structure.
    • Ligand and interface interactions (PLIP criteria).
    • SASA and buried surface area.
    • Ramachandran plot and per-residue profiles.
    • Conservation from an alignment (Jensen–Shannon divergence, ConSurf colors).
    • Distance, angle and torsion rulers.
  • Find structures. Search by gene, protein name, UniProt accession, keywords or a pasted sequence: the protein's experimental structures ranked by coverage and resolution, with a coverage track along the sequence, and its models from AlphaFold DB, SWISS-MODEL and other 3D-Beacons providers. Open or add any of them, superposed on the active structure. No account or API key.
  • Bundled examples. 29 curated examples (drug targets, degraders, antibodies, chromatin, Cas9, conformational changes, a capsid, the spike, an AlphaFold model and two folders of prediction output), each with a description and an opening view that shows its point.
  • AlphaFold. Fetch any UniProt accession from AlphaFold DB; view pLDDT coloring, an interactive PAE plot linked to the 3D view, rigid domains clustered from the PAE, and MSA depth.
  • Predicted complexes.
    • Open AlphaFold 3 (including .zst-compressed outputs), AlphaFold Server (.zip), Boltz, Chai-1, ColabFold, Protenix and OpenFold3 outputs, folders included, and rank their models.
    • Chain-pair ipTM plus interface scores computed from the PAE: ipSAE, pDockQ, pDockQ2 and LIS, reproducing Dunbrack's ipsae.py; models without a PAE (Chai-1) get pDockQ, which needs none.
    • Pose checks of co-folded ligands, and Boltz-2's predicted affinity.
    • Contact probabilities, per-atom ligand pLDDT and MSA depth.
    • How many of your cross-links each model satisfies.
    • Batch triage: open a folder of many jobs, such as a design campaign, and rank every model of every job on one table by ipSAE, pDockQ2, LIS, ipTM, pLDDT, ligand pose checks or Boltz-2 affinity, with a gallery of the best and CSV export.
  • Validation.
    • The wwPDB validation report on the structure: outliers per residue, clashes drawn in 3D, and fit to density (RSRZ, or Q-score for cryo-EM) with percentiles.
    • Ramachandran classes on MolProbity's Top8000 contours for any model, predicted ones included.
  • Comparison.
    • Several structures in one scene, each with its own style.
    • Superposition by sequence alignment with outlier pruning, reporting RMSD, TM-score and lDDT, overall and per chain.
    • Structure-only alignment with TM-align and MM-align, matching US-align, for remote homologs and complexes.
    • Color by deviation or local agreement; aligned sequences with substitutions marked.
    • One-click comparison of an experimental structure with its AlphaFold model, and NMR ensemble overlays with per-residue RMSF.
  • Proteomics.
    • Search reports from MaxQuant, DIA-NN (TSV or Parquet), Spectronaut, FragPipe, mzTab and Proteome Discoverer: coverage, localized PTM sites, intensities and fold changes on the structure, filtered by q-value and localization probability. Large reports are streamed.
    • Differential statistics across the whole report: limma's moderated t-test with normalization and imputation, Benjamini–Hochberg q-values, a volcano plot, and MSstatsPTM's adjustment of PTM sites for protein changes.
    • Public peptides and PTM sites (PeptideAtlas, ProteomicsDB, PRIDE, PTMeXchange) to compare your sites with what is already known.
    • Structural context of every site: part-sphere exposure (pPSE) and disordered regions as in StructureMap, PAE-aware for predicted models.
    • Cross-links from xiFDR, xiVIEW, pLink, MeroX, XlinkX, MS Annika and MaxLynx, checked by Cα–Cα and solvent-accessible surface distance.
    • HDX-MS from DynamX and HDExaminer: uptake and differences with a hybrid significance test, Woods plots, and the result on the structure.
    • ProtParam-style sequence properties, peptide lists, PTM and variant sites with UniProt numbering, and AlphaMissense pathogenicity for every substitution of human proteins.
    • UniProt annotations and custom per-residue data.
  • Selections and commands. A PyMOL/ChimeraX-style selection language and command line in the search box (show sticks within 5 of resn STI, color magenta /A:315, superpose 1AKE onto 4AKE), with live previews and history.
  • Sessions and sharing. Save and reopen the whole workspace, copy a link that rebuilds the view, or export MolViewSpec to open the view in Mol*.
  • Scripting and agents. Drive Proteoscope from Python or Jupyter with --remote-control, or from an AI agent such as Claude Code through its MCP server (proteoscope mcp, see Using Proteoscope with AI agents): open structures and prediction folders, rank predictions, list interactions, superpose, load validation reports and render images.
  • Figures. Supersampled PNG up to 4× with transparent background and legend; clipboard copy; spin videos.
  • Methods and citations. A methods paragraph for what a session used: data sources with versions and dates, analyses with their parameters, and numbered references with DOIs, also as BibTeX.
  • Validated. A validation suite checks the analyses against their reference tools (limma, MSstatsPTM, US-align, Capra and Singh's scorer, EMDB, MolProbity and PoseBusters) and runs in continuous integration; see validation/.
  • Private. Local files are parsed in the browser; --offline disables all network access.

Install

macOS and Linux

curl --proto '=https' --tlsv1.2 -fsSL \
  https://raw.githubusercontent.com/robert-mcdermott/proteoscope/main/install.sh | sh

This installs the latest release as $HOME/.local/bin/proteoscope. It checks the download's SHA-256 checksum and version, and replaces an existing copy only after both checks pass. It does not use sudo or change PATH; if ~/.local/bin is not on your PATH, it prints the full path to run.

Windows

Run in PowerShell:

irm https://raw.githubusercontent.com/robert-mcdermott/proteoscope/main/install.ps1 | iex

This installs to %LocalAppData%\Programs\Proteoscope, checks the checksum and version, and adds that folder to your user PATH. It needs neither administrator rights nor a change to the execution policy. Open a new terminal afterwards.

Because the installers download with curl and PowerShell rather than a browser, the program does not get the quarantine flag (macOS) or mark of the web (Windows), so you are not asked to confirm an unsigned download. To pin a version, download the files yourself, verify them, upgrade or uninstall, see Installing Proteoscope.

Start

proteoscope

Proteoscope prints a local URL, usually http://127.0.0.1:8765, and opens it in your browser; press Ctrl+C in the terminal to stop it. Files named on the command line open directly, for example proteoscope 1abc.cif.

Use Chrome, Edge or Brave, on any desktop system; Proteoscope is developed and tested in these Chromium-based browsers. It needs WebGPU, which Safari provides only from macOS Tahoe (26): Safari on macOS Sequoia or earlier, even Safari 26, does not. Firefox provides it from version 141 on Windows. Browsers without WebGPU get a simplified renderer without surfaces, ambient occlusion or outlines.

Releases can lag behind the main branch. To use the newest features, build from source (see Development). CHANGELOG.md lists what changed in each release.

Opening Structures

Source How
RCSB PDB Type a PDB ID (for example 4HHB, or an extended ID such as pdb_00004hhb) in Open structure and press Fetch. The PDBx/mmCIF file is downloaded from RCSB.
AlphaFold DB Type a UniProt accession (for example P04637). The current AlphaFold DB model and its predicted aligned error (PAE) matrix are downloaded.
Find structures Type a gene (KRAS), protein name, UniProt accession, keywords or a sequence under Find structures, or run search …. See Finding Structures.
Local file Click Open local file or drag files onto the window. Accepts .pdb, .ent, .cif, .mmcif and BinaryCIF .bcif, optionally compressed with gzip (.gz) or Zstandard (.zst). Several files open together.
Docking poses Open or drop .sdf, .mol, .mol2 or .pdbqt files with the receptor active; the poses open in it. See Docking Poses.
Density map Open or drop a .map, .mrc or .ccp4 file (optionally gzipped) with its structure active, or load the map of a PDB entry. See Density Maps.
Prediction output Drop a prediction folder or an AlphaFold Server .zip, or click Open prediction folder…. AlphaFold 3, AlphaFold Server, Boltz-1/2, Chai-1, ColabFold, Protenix and OpenFold3 layouts are recognized; see Predicted Complexes.
Command line proteoscope structure.cif model.pdb.gz af3_output/my_job/ opens every file and folder at startup; the first structure is active.
Examples Bundled examples opens one of 29 curated examples with its opening view; see Bundled Examples.
Deep link http://127.0.0.1:8765/#fetch=4HHB fetches on load. #fetch=4AKE,1AKE&superpose loads both and superposes the second onto the first.

A new structure replaces the scene unless Add to the scene instead of replacing is ticked; see Comparing Structures.

Remote downloads go through the local Proteoscope server, which only contacts a fixed list of public services:

  • files.rcsb.org (structures, validation reports and chemical components), search.rcsb.org and data.rcsb.org (searches and entry summaries), and maps.rcsb.org (density maps, when PDBe's server is unavailable);
  • alphafold.ebi.ac.uk (models, PAE, MSAs and AlphaMissense);
  • rest.uniprot.org (proteins and annotations);
  • www.ebi.ac.uk (PDBe structure lists, 3D-Beacons model lists, the Proteins API for public proteomics evidence, the PDBe volume server for density maps, and EMDB's map metadata);
  • for models listed by 3D-Beacons, the providers' own servers (SWISS-MODEL, ModelArchive, AlphaFill, PED, SASBDB, isoform.io and RCSB's model server).

Nothing needs an account or API key. Results are cached on disk under your user cache directory, for example ~/Library/Caches/proteoscope on macOS, and refetched after 30 days (--cache-max-age; searches after a day); the refresh command downloads the active structure again. Start with --offline to disable all network access; cached entries are still served.

PAE files can also be dropped onto a loaded model: AlphaFold DB, AlphaFold 3 and ColabFold .json, or Boltz .npz. An alignment (.a3m, aligned .fasta, Stockholm .sto or Clustal .aln) gives MSA depth and conservation.

Finding Structures

Find structures for KRAS next to KRAS G12C with sotorasib (6OIM): the proteins UniProt matches, and the 252 PDB entries of human KRAS in PDBe's order, below a track of how many structures cover each residue

Find structures (Structure tab) searches public databases without an account:

  • A gene or protein name (KRAS, tumor suppressor p53) lists the matching UniProt entries, exact gene matches first; choose an organism to narrow it. Picking one lists its structures and models.
  • A UniProt accession (P01116) goes straight to that protein.
  • A PDB ID lists that entry; keywords (sotorasib) search RCSB's full text.
  • A sequence (pasted, FASTA or plain) runs an RCSB sequence search and lists the hits with identity, E-value and the aligned range.

For a protein, the list shows:

  • Experimental structures from PDBe's best-structures list: method, resolution, year, covered UniProt range, chains, ligands and title. Sort by PDBe's rank, resolution, coverage or release date. A coverage track above the list shows how many structures cover each part of the sequence, so the domains nobody has solved stand out.
  • Models from 3D-Beacons: AlphaFold DB first, then SWISS-MODEL, ModelArchive, PED and the other providers, with their confidence and range.

Open replaces the scene; Add adds the structure superposed on the active one. This protein lists the structures of the active structure's protein, and Similar searches for sequences like the chain in the sequence panel. The search command does the same from the command line.

A search sends what you type to these services. A pasted sequence, and the chain's sequence when you use Similar, go to RCSB's sequence search, so use them with care for unpublished sequences.

Bundled Examples

Bundled examples (Structure tab, or example <id>) opens curated structures stored in the binary as gzipped mmCIF (6 MB for all of them), so they work offline. Each has a short description and an opening view: the ligand focused, the interface shown, or a comparison set up. example add <id> adds one to the scene without its view; example lists them.

Two examples are folders of structure-prediction output (0.5 MB), opened as if dropped on the page, so the Prediction table, interface scores and ligand pose checks can be tried without running a predictor. Their sources, licenses and the changes made to them are in data/predictions/README.md.

Group Examples
Drugs and their targets 1M17 EGFR–erlotinib, 2HYY ABL–imatinib, 3OG7 BRAF V600E–vemurafenib, 6OIM KRAS G12C–sotorasib, 8GUB PI3Kα H1047R–alpelisib, 6VEI IDH1 R132H–vorasidenib, 7KK4 PARP1–olaparib, 8EF5 μ-opioid receptor–fentanyl with its G protein
Targeted protein degradation 5T35 PROTAC MZ1 bridging BRD4 and VHL, 5FQD lenalidomide gluing CK1α to cereblon
Antibodies and immune recognition 4ZQK PD-1–PD-L1, 5XXY atezolizumab Fab–PD-L1, 1N8Z trastuzumab Fab–HER2, 7OW6 T-cell receptor with a KRAS G12D neoantigen
DNA, chromatin and gene editing 1TUP p53 on DNA, 1YCR MDM2–p53 peptide, 1T29 BRCA1 BRCT–phosphopeptide, 7LYB nucleosome with BRCA1–BARD1, 4OO8 Cas9 with guide RNA and target DNA
Conformational change 4AKE and 1AKE adenylate kinase open and closed (superposed on the CORE domain), 4HHB and 1HHO hemoglobin T and R states, 1JM7 BRCA1–BARD1 NMR ensemble
Predicted structures AF-P04637-F1, the AlphaFold model of p53 with its PAE; 8C3U-COFOLDING, interleukin-1β with a ligand given as SMILES, five models each from Boltz-1 and Protenix (from Runs N' Poses), triaged by pose so the models that invert the ligand's stereocenter stand out; UL144-MOTSC, the five best ColabFold models of a viral protein with a peptide, a borderline interface for the interface scores
Viruses and assemblies 6VXX SARS-CoV-2 spike, 1LP3 AAV2 capsid (60 copies, 249,120 atoms)

The Workspace

  • Top bar: structure title, the search box and command line (press /), renderer badge, panel toggles.
  • Left panel tabs:
    • Structure: the structures in the scene (when there are several), the ranked models of an opened prediction, entry metadata (method, resolution, R-free, organism, deposition date), biological assemblies, composition and molecules, and the secondary-structure source.
    • Style: representations, surface, color scheme, sizes, lighting and effects, background, projection and clipping. With several structures, changes apply to all of them or only to the active one.
    • Analysis: structure comparison, the validation report, interactions, solvent accessibility, Ramachandran plot, per-residue profile, PAE with domains, contact probabilities and MSA depth.
    • Proteomics: search reports, public evidence, sequence properties, UniProt annotations, peptides, sites and variants with AlphaMissense, cross-links, HDX-MS, custom data.
  • Right panel:
    • Chains: click to show or hide; double-click to show only that chain.
    • Selection details, interactions of the focused residue, and measurements.
  • Sequence panel: the full sequence of the chosen chain.
    • Residues missing from the model are grey, and helices and strands are underlined.
    • Numbering gaps are marked.
    • After a superposition, a second row shows the aligned residues of the other structure, with substitutions highlighted.
    • Click to select, shift-click to add, drag for a range, double-click to focus.
  • Toolbar: reset view, focus, distance, angle and torsion rulers, spin, export, full screen, help.
  • Legend: describes the active color scheme and surface coloring. Click a legend title to collapse it.

Navigation

Action Mouse / key
Rotate (free trackball) Drag
Pan Shift-drag or right-drag
Roll Alt/Option-drag
Zoom Scroll or pinch
Select residue / add to selection Click / Shift-click (clicking another structure makes it active)
Focus a residue or ligand Double-click, or select and press F
Reset view R
Representation presets 1 cartoon, 2 ball & stick, 3 sticks, 4 spacefill, 5 trace, 6 surface
Search, selections and commands /, then type; ↑ and ↓ recall earlier commands
Distance / angle / torsion ruler D / A / T
Label selection L
Spin S
Orthographic / perspective O
Water / hydrogens W / H
Export image P
Clear focus, selection or ruler Esc
Shortcuts ?

New structures are framed on their principal axes, with the longest axis horizontal.

Representations

The Representation presets set the polymer and ligand styles together. You can also set each component separately:

  • Polymer: cartoon, trace, ball and stick, sticks, spacefill or hidden.
    • The cartoon draws helices as ribbons, strands as flat arrows and loops as tubes, with smooth transitions.
    • Nucleic acids get a phosphate-backbone tube with base slabs.
  • Ligands and ions: ball and stick, sticks, spacefill or hidden. Ions are drawn as spheres; metal-coordination bonds are dashed.
  • Side chains: Around focus (the default) shows side chains within 5 Å of the focused residue or ligand. All shows every side chain on top of the cartoon.
  • Water and hydrogens: toggles.
  • Surface:
    • Molecular (SES), Solvent accessible (SAS), Gaussian or van der Waals.
    • Coloring can match the color scheme, Coulombic electrostatics or hydrophobicity.
    • Opacity is adjustable; a transparent surface shows the cartoon underneath.
    • Surfaces are computed in a background worker, taking about 0.2 s for a 5,000-atom protein.

Modified residues such as selenomethionine and phosphoserine stay part of the polymer. Unknown residues with a linked peptide or sugar-phosphate backbone are recognized automatically.

Color Schemes

Scheme Notes
Chain / Molecule (entity) Palettes: Vivid, Colorblind-safe (Okabe-Ito), Muted (Tol), Pastel
Rainbow (N → C) Sequence position within each chain
Secondary structure Helix, strand, turn, coil
Molecule type Protein, nucleic acid, ligand, ion, water
Element Standard element colors
Residue class Hydrophobic, polar, positive, negative, nucleic acid, ligand
Hydrophobicity Kyte-Doolittle scale
Nucleotide A, C, G, U/T
B-factor Blue-white-red, viridis or magma colormaps
AlphaFold confidence (pLDDT) AlphaFold DB colors: >90 dark blue, 70–90 light blue, 50–70 yellow, <50 orange. Applied automatically to predicted models; ligands of AlphaFold 3, Boltz and Chai-1 models are colored per atom.
PAE domains Rigid domains clustered from the PAE matrix (Find domains)
MSA depth Aligned sequences per residue, log scale from red (1) to blue (≥ 1,000)
Validation outliers (wwPDB) Outlier criteria per residue, as in the report's residue plot: green none, yellow 1, orange 2, red 3 or more
Fit to density RSRZ (X-ray; above 2 is an outlier) or Q-score (cryo-EM), from the validation report
AlphaMissense pathogenicity Mean score of the 19 substitutions at each position, blue (benign) to red (pathogenic)
Solvent exposure Relative SASA, after Compute SASA
Peptide coverage / Custom residue data From the Proteomics tab
Structure One color per structure; the default when a scene holds several
Deviation after superposition Cα distance to the aligned residue, 0 to 4 Å (blue-white-red)
Local agreement (lDDT) Per-residue lDDT against the compared structure, in the pLDDT colors
Ensemble flexibility (RMSF) Per-residue RMSF across overlaid models
Uniform Any color

Heteroatoms by element (on by default) colors N, O, S and other non-carbon atoms by element in the structural schemes. Ligand carbons are green.

Lighting and Effects

Preset Look
Standard Key light plus headlamp, ambient occlusion, depth fog
Soft Strong ambient occlusion with little direct light, similar to ChimeraX "soft"
Illustrative Flat colors, black outlines and ambient occlusion, for Goodsell-style figures
Glossy Strong specular highlights
Neon Additive glow on a dark background (the original Proteoscope look)
Flat Unlit colors with outlines

The individual sliders are ambient occlusion strength and radius, outline, depth fog, glow and specular. Backgrounds are dark, black, gray or white. Front clip and Back clip cut slabs through the molecule without rebuilding geometry; clipped atoms are capped.

Selection, Focus and Interactions

Imatinib in the ABL kinase pocket (2HYY) with hydrogen bonds to Met318, Thr315, Glu286 and Asp381, salt bridges, π-stacking and hydrophobic contacts

  • Selecting. Click an atom to select its residue. The selection card shows:

    • Residue type, including modifications.
    • Secondary structure and its source, including the DSSP code.
    • φ/ψ angles.
    • B-factor or pLDDT.
    • UniProt position.
    • Relative SASA and proteomics values, when computed.
  • Focusing. Double-click a residue or ligand (or select one and press F) to focus it:

    • The camera frames the binding site.
    • Side chains within 5 Å appear.
    • Non-covalent interactions are detected and drawn as colored dashed lines.
  • Interaction types: hydrogen bond, salt bridge, π-stacking (parallel and T-shaped), cation-π, hydrophobic contact, halogen bond, metal coordination and water bridge (when water is shown).

    • The criteria follow PLIP (Salentin et al. 2015).
    • Each type can be toggled in the Analysis tab.
    • Analyze interface lists the contacts between two chains.
    • Export CSV saves the interaction table.
  • Ligand chemistry. Bond orders, aromatic rings and formal charges come from the wwPDB Chemical Component Dictionary:

    • from the file, when its mmCIF carries the dictionary tables (RCSB's files do);
    • from a built-in table for standard residues;
    • otherwise from one small dictionary file per ligand, downloaded and cached.

    A dictionary entry applies only when the ligand's atom names match it. Sticks show double and triple bonds and aromatic rings (Bond orders in the Style tab: ligands, all residues or off). Interactions use the chemistry for donors, acceptors, aromatic rings and charged groups, with basic groups protonated by rule: in imatinib only the methylpiperazine nitrogen is charged.

  • Labels. Label (or L) adds 3D labels to the selected residues. Isolate chain hides the other chains.

Ligands

A 2D diagram of imatinib in ABL (2HYY): the ligand drawn flat, with the salt bridge to Asp381, hydrogen bonds to Thr315, Met318, Glu286 and Ile360 with their distances, π-stacking with Tyr253 and hydrophobic contacts

The heme of deoxyhemoglobin's first α chain (4HHB, deposited in 1984) failing 2 of PoseBusters' 19 checks: three propionate bonds out of bounds, drawn by Show at 2.32, 2.09 and 0.87 Å, and a carboxylate whose oxygens are 1.54 Å apart

  • The ligand card. Select or focus a ligand and the Ligand card (right panel) shows what it is, from the wwPDB Chemical Component Dictionary through RCSB (downloaded once and cached):

    • its common name (Erlotinib for AQ4, Heme for HEM) and dictionary name;
    • formula, molecular weight and formal charge;
    • how many of its heavy atoms the model contains (an incomplete ligand is flagged);
    • SMILES and InChIKey;
    • links to RCSB, PDBe, PubChem, ChEMBL, DrugBank and ChEBI, where they list it;
    • the difference-map peaks near it, once they have been found (see Density Maps).

    A docking pose or a ligand without a dictionary code (UNL) is described from the model: its formula is counted from the atoms.

  • 2D interaction diagram. 2D diagram on the card, or diagram, draws the ligand flat with the residues it interacts with, in the style of LigPlot+ and PoseView:

    • the interactions of the Interactions card, in their colors: dashed lines with distances for hydrogen bonds, salt bridges, halogen bonds and metal coordination; π contacts from the ring's center; waters between the atoms they bridge; arcs on the ligand atoms for hydrophobic contacts;
    • each residue placed where it lies around the ligand in the current view, so rotating the structure and drawing again moves them;
    • atom names on request, for relating the drawing to the 3D model.

    Save SVG and Save PNG export it for figures. The layout draws rings as regular polygons, fused rings edge to edge and chains as zigzags, and metals at the center of the atoms they bind; flat molecules whose layout would overlap (heme) are drawn from their own 3D shape. Some bridged or caged ligands cannot be drawn flat without overlapping atoms; the diagram says so.

  • Pose checks. The card also runs the checks of PoseBusters (Buttenschoen et al. 2024) on the ligand as modeled. Co-folding models and docking programs can return ligands with stretched bonds, puckered rings, flipped stereocenters or atoms inside the protein; deposited ligands usually pass. The checks:

    • chemistry: RDKit accepts the molecule, and it is one piece;
    • geometry: bond lengths and angles within 25% of RDKit's distance-geometry bounds, no clash inside the ligand, aromatic rings and C=C bonds flat (within 0.25 Å), and saturated six-membered rings puckered;
    • stereochemistry: stereocenters and E/Z double bonds as in the Chemical Component Dictionary's ideal coordinates;
    • contacts: no atom closer to the protein, cofactors, ions or waters than 0.75 of the sum of their radii, a protein atom within 5 Å, and at most 7.5% of the ligand's volume inside them.

    The summary line says how many pass; click it for the list, and Show on a failing check draws the atoms involved as measurements and selects the residues they touch. Bond and angle limits come from a port of RDKit's distance-geometry bounds that matches RDKit on 4,017 dictionary components, and the verdicts match PoseBusters 0.6 on the validation suite's 127 poses except for heme's (see validation/). Where Proteoscope differs from PoseBusters: its energy ratio (UFF energy against generated conformers) is left out, so a pose that passes is not called "PB-valid"; a ring's distance from its plane is read without a sign; metal atoms of a ligand (heme's iron) are left out of the chemistry and geometry checks, which RDKit cannot run on them; and atoms covalently bonded to the ligand (a glycan's asparagine, a covalent inhibitor's cysteine), and their neighbors, do not count as clashes. A ligand given to a structure predictor as SMILES is checked against the SMILES, stereocenters and double bonds included (see Predicted Complexes); a ligand whose bond orders neither the dictionary, the file nor the job's input gives gets the contact checks only.

  • Commands. compound [<selection>] shows the card and returns its facts to scripts; diagram [<selection>] [names] opens the diagram, and returns it to scripts as SVG and PNG (to an AI agent, as an image); posecheck [<selection>] lists the pose checks and returns them.

Docking Poses

AutoDock Vina's tutorial poses of imatinib in ABL (1IEP): Vina scores, heavy-atom RMSD to pose 1, interaction summaries and the pose × residue fingerprint map, with pose 1's hydrogen bonds to Met318, Thr315, Glu286, Asp381 and Ile360

Open an SDF (V2000 or V3000), MOL2 or PDBQT file with the receptor active, and its molecules become poses in the receptor.

  • Scores are read from SD properties (Vina, smina and GNINA affinities and CNN scores, Glide, GOLD, rDock), DOCK's MOL2 comments, Vina's PDBQT remarks and DiffDock's file names (rank1_confidence-0.52.sdf). The pose table shows the main scores; click a header to sort.
  • Poses. Click a pose, press [ and ], or run pose 3. The shown pose is focused with its interactions, and the table gives each pose's heavy-atom RMSD to pose 1.
  • Interaction fingerprints list every pose's interactions with the receptor residues around it, as a pose × residue table, to find poses that keep the interactions you trust (a hinge hydrogen bond, a salt bridge). Export CSV saves the scores and fingerprints.
  • Pose checks. The Checks column counts the pose checks each pose passes against the receptor (see Ligands); PDBQT files carry no bond orders, so their poses get the contact checks only. The CSV lists the checks each pose fails.
  • A pose never bonds to a crystal ligand in the same place, so poses can be compared with the deposited ligand. Sessions keep the poses.

Measurements

Pick a ruler in the toolbar or press D (distance), A (angle) or T (torsion/dihedral), then click 2, 3 or 4 atoms. Values appear as 3D labels and in the Measurements card. Remove one with ×, or press Backspace to remove the last.

Selections and Commands

Erlotinib in the EGFR kinase pocket (1M17) styled from the command line: side-chain sticks within 4.5 Å, the hinge hydrogen bond from Met769 measured at 2.70 Å, and a live selection preview in the search box

The search box finds residues and atoms, and it is also a command line. Type a selection and it previews the match live ("22 residues, 108 atoms"); press Enter to select and frame it. Type a command and Enter runs it. ↑ and ↓ recall earlier commands, and Tab completes a command name.

Type Result
chain A and resi 40-80 Selects residues 40–80 of chain A
within 5 of resn STI Everything within 5 Å of imatinib
show sticks byres (within 4.5 of ligand) and protein Side-chain sticks around every ligand, on the cartoon
color magenta /A:315 Colors residue 315 of chain A
hide water · hide chain B · show everything Hide solvent, hide a chain, show everything again
distance /A:769@N to :AQ4@N2 The hinge hydrogen bond to erlotinib in 1M17 (2.70 Å)
superpose 1AKE onto 4AKE fit /A:1-29+60-121+160-214 Fits on the adenylate kinase CORE domain
select deviation > 5 Residues that moved more than 5 Å after superposing
focus resn HEM and chain A · label sele · zoom #2 Focus a ligand, label the selection, frame a structure
tmalign 1A5R onto 1UBQ Superposes SUMO-1 on ubiquitin by structure alone
map load · map level 1.2 · map fit Loads the density map, contours it at 1.2σ, fits the model
map peaks Lists the Fo-Fc difference-map peaks beyond ±3σ near the model
diagram resn STI Draws imatinib's interactions in 2D, for a figure

Selection language. PyMOL-style keywords with ChimeraX-style atom specs:

  • Identifiers: chain A+B, resi 40-80+100A (author numbering, with insertion codes), resn STI, name CA and elem FE, with * wildcards. uniprot 175 uses UniProt numbering; #2 or structure 1AKE picks a structure.
  • Atom specs: /A:40-80@CA,CB (chain, residues, atoms), :HEM, #2/B.
  • Classes: protein, nucleic, polymer, ligand, ion, metal, water, hetatm, hydrogen, backbone, sidechain, helix, sheet, coil.
  • Logic: and, or, not and parentheses; words next to each other mean "and".
  • Neighborhoods: within 5 of X, around 5 of X (excluding X), and byres X / bychain X to expand to whole residues or chains. Distances reach across structures, so within 5 of (#1 and ligand) finds residues of a superposed structure near another structure's ligand.
  • Values: b > 60, q < 1, plddt < 70, deviation > 2, lddt < 0.7, rmsf > 2, rsa > 0.4 (after Compute SASA), ppse < 6 (part-sphere exposure), am > 0.564 (AlphaMissense), msa < 30 (MSA depth), and rsrz > 2, rscc < 0.8 and qscore < 0.4 (validation report), conservation > 0.6 and grade >= 8 (conservation), and mapfit < 1 (map fit).
  • Sets: sele, focus, sites (proteomics), covered (peptides), aligned (paired in a comparison), outliers (validation report), idr (disordered regions, after the pPSE analysis).

Commands. select, zoom, orient, focus, show/hide (sticks, ball-stick, spheres, cartoon, surface, water, hydrogens, labels, everything), color (a name, a hex value, a scheme, or default), label/unlabel, fetch/add/remove/activate/list/refresh, search, example, assembly (build a biological assembly, or au), interface A B (contacts between two chains), interactions (the interactions of residues or a ligand), info (describe the active structure), compound (the ligand card), diagram (a 2D interaction diagram), posecheck (PoseBusters' checks of a ligand pose), superpose, alphafold, overlay, ranking, triage (rank many prediction jobs), domains, msa, validate (with clashes, fit, refresh or off), missense, exposure (pPSE and disorder), evidence (public peptides and PTMs), tmalign, map (with peaks for difference-map peaks), pose, conservation, preset, lighting, bg, distance, turn, spin, reset, save, link, mvs, png and help. The help dialog (?) lists the syntax of each.

Per-residue styling is also on the Selection card: Sticks, Color, Hide and Reset apply to the selected residues. All in the Chains card shows hidden residues again.

Comparing Structures

Adenylate kinase open (4AKE) and closed (1AKE, with the inhibitor Ap5A) superposed on the CORE domain and colored by Cα deviation: the LID and NMP domains that close over the substrate are red

  • Loading several structures. Tick Add to the scene instead of replacing before fetching or opening, drop several files at once, pass several files on the command line, or use a link such as #fetch=4AKE,1AKE&superpose.
  • The structures list (Structure tab) shows every structure with its color. Click one, in the list or in the 3D view, to make it active: the metadata, chains, sequence, selection and the Analysis and Proteomics tabs follow the active structure. The eye button hides a structure and × removes it. Scope Style-tab changes to all structures or only the active one.
  • Superpose (Analysis tab) moves one structure, or all others, onto a reference:
    • Residues are paired by a global alignment (BLOSUM62 blended with secondary structure, as in ChimeraX matchmaker), and principal atoms (Cα, or C4′ in nucleic acids) are fitted by least squares.
    • Pairs more than 2 Å apart are pruned iteratively, so a flexible loop or a moving domain does not drag the fit. Fit on selected residues fits on a domain or binding site you selected.
    • Chains are paired automatically by sequence, and identical subunits by position; choose chains to compare one pair. When the chains of a complex are arranged differently, the fit uses the chain pair that superposes best.
    • The result reports RMSD of the fitted core and of all pairs, TM-score (normalized by the reference), lDDT, sequence identity and the number of pairs within 2 Å, with a per-chain table for complexes.
  • Structure-only pairing. For remote homologs, whose sequences align poorly, set Pair residues by to Structure (TM-align) or run tmalign. Residues are paired by structure alone with TM-align (MM-align for complexes), ported from US-align and giving its scores. The report adds the TM-score normalized by each structure and the aligned length; coloring, the aligned sequences and sessions work as for sequence pairing.
  • Seeing differences.
    • Color by deviation (Cα distance after superposition) or lDDT, which compares local distances and needs no superposition, so a hinge motion does not mask a well-preserved domain.
    • Hovering a residue shows its deviation; selecting or hovering highlights the aligned residue in the other structure; focusing a binding site shows the matching side chains in both.
    • Trim to aligned region hides residues outside the compared span.
    • Measurements work between structures.
  • Compare with AlphaFold fetches the AlphaFold DB model for each UniProt accession of the active entry and superposes it by UniProt numbering. The experimental structure turns gray, the model keeps its pLDDT colors and is trimmed to the aligned span, and its PAE matrix is available when it is active.
  • Overlay models superposes every model of an ensemble (for example an NMR structure) on the core the models share and shows them together, with mean RMSD and per-residue RMSF; color by RMSF to see the flexible regions.

EGFR kinase domain with erlotinib (1M17, gray) and the AlphaFold DB model of EGFR (P00533) superposed by UniProt numbering and colored by pLDDT

Checked against known cases:

Comparison Result
Adenylate kinase closed (1AKE) onto open (4AKE), chain A 1.08 Å over 112 core pairs; TM-score 0.68; the LID and NMP domains deviate
Human α-globin vs β-globin (4HHB chains A and B) 44.6% identity with the D-helix gap; 1.10 Å over 120 pairs; TM-score 0.89
EGFR (1M17) vs AlphaFold model P00533 0.78 Å over 249 of 312 pairs; TM-score 0.89; lDDT 0.92
Hemoglobin R state (1HHO assembly) onto T state (4HHB) One αβ dimer fits within 1.1–1.5 Å, the other is rotated (2.7–4.5 Å)
SUMO-1 (1A5R) onto ubiquitin (1UBQ), structure-only 71 pairs at 2.36 Å, TM-score 0.654, as US-align gives; sequence pairing reaches 0.625

Predicted Complexes

Structure predictors write a folder of ranked models with their confidence data. Proteoscope reads the whole folder, ranks the models, and scores every interface, so you can decide which predicted interactions to believe without uploading anything.

Opening. Drop the folder, choose it with Open prediction folder…, drop the AlphaFold Server .zip, or name the folder on the command line (proteoscope af3_output/my_job/). What is read from each tool:

Tool Models Confidence
AlphaFold 3 seed-*_sample-*/…model.cif summary_confidences.json (ranking score, pTM, ipTM, chain-pair ipTM), confidences.json (PAE, contact probabilities, per-atom pLDDT), MSAs from …_data.json
AlphaFold Server fold_*_model_N.cif in the downloaded .zip summary_confidences_N.json, full_data_N.json
Boltz-1 / Boltz-2 …_model_N.cif confidence_…json, pae_…npz (written with --write_full_pae), plddt_…npz, Boltz-2 affinity_…json, MSAs from msa/
Chai-1 pred.model_idx_N.cif scores.model_idx_N.npz (aggregate score, pTM, ipTM, chain-pair ipTM, clashes)
ColabFold …_relaxed_rank_…pdb (else unrelaxed) …_scores_rank_…json (pLDDT, PAE, pTM, ipTM), .a3m
Protenix seed_*/predictions/…_sample_N.cif …_summary_confidence_sample_N.json (ranking score, pTM, ipTM, chain-pair ipTM), …_full_data_sample_N.json (PAE and contact probabilities, written with --need_atom_confidence)
OpenFold3 …_seed_S_sample_N_model.cif or .pdb …_confidences_aggregated.json (sample ranking score, pTM, ipTM, chain-pair ipTM), …_confidences.json or .npz (PAE)

AlphaFold 3 runs saved with --compress_large_output_files (.zst models and confidences) open as they are. Samples from several seeds form one ranked set. Other files in a prediction folder (logs, settings, templates, inputs) are left alone. Chai-1 does not write PAE to disk, nor do Boltz without --write_full_pae and Protenix without --need_atom_confidence; their models get the scores the tool reports and pDockQ, which needs no PAE, but not ipSAE, pDockQ2 or LIS.

Ranking. The Prediction group (Structure tab) lists the models by the tool's own ranking score. Click a model to show it in place of the current one; Superpose all models opens them all, superposed on the top-ranked model, to see where they disagree. Export CSV saves every model and chain pair with the scores below; ranking lists them from the command line.

Interface scores. For each chain pair, computed from the model's PAE, pLDDT and coordinates with the definitions of Dunbrack's ipsae.py:

  • ipTM as the predictor reports it (for ColabFold, recomputed from the PAE). The matrix under the table shows it for every chain pair, with chain pTM on the diagonal; switch it to ipSAE or pDockQ2. Click a cell to select that interface.
  • ipSAE (Dunbrack 2025): pTM-style scores averaged only over residue pairs whose PAE is below 10 Å (15 Å for AlphaFold 2 / ColabFold), so disordered tails and extra domains do not drag the score down the way they do ipTM.
  • pDockQ (Bryant et al. 2022) and pDockQ2 (Zhu et al. 2023): interface pLDDT, the number of Cβ contacts within 8 Å, and (pDockQ2) the PAE of the contacting pairs.
  • LIS (Kim et al. 2024): the mean of (12 − PAE)/12 over inter-chain pairs with PAE below 12 Å.

A model without a PAE gets pDockQ alone, from the pLDDT the tool writes in the B-factor column; the tables show it in place of ipSAE.

These scores reproduce ipsae.py (version 4) to its printed precision on the AlphaFold 3 (Aurora A–TPX2) and AlphaFold 2 multimer (RAF1–KSR1–MEK1) examples of the IPSAE repository and on a Boltz-2 prediction, and a unit test pins them to ipsae.py output at both PAE cutoffs. (The example outputs in that repository predate version 4 and count PAE = 12 Å in LIS, so their LIS differs in the fourth decimal.)

More confidence data.

  • Contact probability (AlphaFold 3) sits next to the PAE in the Analysis tab.
  • Find domains clusters the PAE into rigid domains as ChimeraX does.
  • MSA depth colors each residue by how many sequences were aligned to it; shallow alignments are the most common cause of low confidence.
  • Cross-links mapped in the Proteomics tab add a column with how many links each model satisfies.

Ligands. AlphaFold 3, Boltz, Chai-1, Protenix and OpenFold3 predict protein–ligand complexes. Each model's ligands get the pose checks of the ligand card (see Ligands), counted in a Pose column of the Prediction table and the triage table; the card lists them for the ligand you select. Boltz-2's predicted affinity (log10 IC50 in µM, lower binds tighter) and binder probability, predicted per job, join the triage table.

Ligands given as SMILES. Predictors write such a ligand without its bond orders, but its atoms in the order of the SMILES. When the job's input is at hand, Proteoscope reads the SMILES (as RDKit reads it, including @, @@, / and \), pairs its atoms with the model's (by that order, else by their bonds), and gives the ligand the SMILES's bond orders, charges and hydrogens: it is drawn and its interactions typed like a dictionary ligand, and it gets every pose check, its stereocenters and double bonds compared with the SMILES, so a model that inverted a stereocenter fails. Only the marks RDKit keeps count (not those of a center with two equivalent neighbors, say), and a symmetric molecule such as a meso compound is compared under its best pairing.

Interleukin-1β co-folded with a small-molecule antagonist by Protenix (the 8C3U-COFOLDING example): the ligand drawn with the bond orders of the SMILES the job was given, and its pose checks, 18 of 19 passing, with the stereocenter C9 inverted against the SMILES

Tool Where the SMILES comes from
AlphaFold 3 <job>_data.json in the output folder, read with it
Boltz the job's input, <name>.yaml or <name>.fasta, opened with the results (for example the folder that holds both): the one beside boltz_results_<name>/, or in the input folder that boltz_results_<folder>/ names
Chai-1 the input FASTA, put in the output folder
Protenix the input JSON, <name>.json, opened with the results (for example beside the <name>/ output folder); Protenix does not copy it there
OpenFold3 no SMILES needed: its model files list the ligand's bond orders

Without its input, a ligand given as SMILES gets the contact checks only.

Sessions keep the model, its PAE, contact probabilities, scores, pose checks and the SMILES of its ligands.

Batch triage

The two bundled prediction examples on one table, three jobs from three tools ranked by pLDDT: interleukin-1β co-folded with a ligand by Protenix and by Boltz-1, whose ligands get pose checks (19 of 19 pass for Protenix's best model, 17 of 19 for Boltz-1's), and UL144 with the MOTS-c peptide from ColabFold, whose two chains get ipSAE, pDockQ2 and LIS; below, a gallery of the three models

A design campaign or a screen of interaction partners produces many jobs, more than anyone opens one by one. Drop or choose several prediction folders at once, a folder that holds them, or name it on the command line (proteoscope campaign/), and Proteoscope scores every model of every job, opens the best, and shows the Triage table (Structure tab, Open table):

  • One row per job (its best model under the chosen score) or per model, ranked by ipSAE, pDockQ2, pDockQ, LIS, ipTM, pTM, the tool's own score, mean pLDDT, the share of your cross-links each model satisfies, the share of pose checks its ligands pass, or Boltz-2's affinity or binder probability. Click a column header to rank by it.
  • The interface is each model's best chain pair by ipSAE (by pDockQ for models without a PAE), or the chains you name (for example A B, the target and the binder).
  • ipSAE, pDockQ, pDockQ2 and LIS are computed from each model's PAE, pLDDT and coordinates the same way for every predictor, so they compare jobs from different tools; a model without a PAE has pDockQ only. ipTM, pTM, the score and Boltz-2's affinity are each tool's own.
  • Pose counts the pose checks each model's ligands pass, to set aside models whose ligand sits in the protein or has broken geometry.
  • Click a row to show that model; Gallery renders the 12 best, each superposed on the first so they share a view; Export CSV saves every model and interface of every job.
  • A folder named on the command line or opened by path can hold up to 20,000 files. Alignments are read only when a model opens, so scoring stays fast.

From the command line: triage (rank, for example triage by pdockq2 top 10 pair A B, or triage by pose), triage show 3, triage gallery 12 and triage export.

Without a window. On a cluster or in a pipeline, proteoscope triage scores the jobs, prints the ranking and writes it to files, then exits:

proteoscope triage campaign/ --by ipsae --csv ranking.csv --json ranking.json --gallery best/
Scoring in a hidden Google Chrome…
Opened 2 prediction jobs (2 models) and ranked them by ipSAE; the best, aurka_0_tpx2_0, is shown.
#  Job                   Model                                  Chains  ipSAE  pDockQ2  pDockQ  LIS    pLDDT
1  aurka_0_tpx2_0        Model 0                                A–B     0.867  0.712    0.523   0.656  92.5
2  RAF1_KSR1_MEK1_9f755  Rank 1 · multimer v3 model 1 seed 000  A–C     0.598  0.119    0.306   0.315  55.2
2 of 2 jobs, ranked by ipSAE.
  • --by takes the metrics of triage by; --models ranks models rather than jobs; --pair A,B scores that chain pair; --top sets the rows printed.
  • --csv writes the table's CSV and --json the ranked rows (- for standard output); --gallery saves the best models as images (--gallery-count, --gallery-width).
  • The scores are the page's, computed the same way: proteoscope triage runs the page in a hidden Chrome, Chromium, Edge or Brave, found where they are usually installed, or named with --browser or PROTEOSCOPE_BROWSER (on a headless Linux server, apt install chromium or Google Chrome). --offline works as in the window: ligands whose dictionary entries are not cached get fewer pose checks.

Validation

EGFR with erlotinib (1M17) colored by wwPDB validation outliers, clashes drawn as pink lines, and the report's percentile summary, ligand fit and worst residues

Load report (Analysis tab, or validate) fetches the wwPDB validation report of the active PDB entry, the same report RCSB and PDBe publish with every entry.

  • Summary. Clashscore, Ramachandran and side-chain outliers, RSRZ outliers and R-free (X-ray), or the average Q-score (cryo-EM), each with its percentile rank among PDB entries.
  • Per residue. Color outliers colors every residue by how many criteria it fails: clashes, bond and angle outliers, Ramachandran and rotamer outliers, and RSRZ above 2. Color density fit shows RSRZ (X-ray) or Q-score (cryo-EM) along the chain. The selection card lists each residue's problems with RSRZ, RSCC, Q-score and EDIAm.
  • Ligands. Each ligand's fit (RSCC, RSRZ) and its Mogul geometry outliers, so an unconvincing pose stands out.
  • Clashes. Show clashes draws every reported clash between the atoms involved.
  • Selections. select outliers, rsrz > 2, rscc < 0.8 and qscore < 0.4 combine with the rest of the language, for example outliers and within 5 of ligand.

The Ramachandran plot draws MolProbity's Top8000 contours (Williams et al. 2018) for the six residue categories (general, glycine, trans- and cis-proline, pre-proline, Ile/Val) and classifies every residue with MolProbity's criteria. That works for predicted models and local files too; with a report loaded, the report's classes are shown.

Density Maps

Erlotinib in EGFR (1M17) in its 2Fo-Fc electron density from the PDBe volume server, contoured at 1.0σ within 2 Å of the ligand, with the hinge hydrogen bond to Met769

Load map (Analysis tab, or map load) shows the experimental density of the active PDB entry:

  • X-ray entries get the 2Fo-Fc map (blue, 1.5σ) and the Fo-Fc difference map (green and red, ±3σ), from the PDBe volume server.
  • Cryo-EM entries get their EMDB map at EMDB's recommended contour level.
  • Map files. Open a map file… reads a CCP4 or MRC map on your computer, for a model you are building or refining.

The map is drawn around the focus (or the selection), following the view as you move, or whole, as a mesh or a transparent surface. For an X-ray entry, "whole" is the box around the model, since a crystal's unit cell need not contain it. Each channel has its own level in σ. Near atoms trims the map to within 1.6–3 Å of the focused atoms, for figures. The server sends a region at the finest sampling that fits the request, so a small region is sharper than the whole map. A downsampled view says so and keeps its level in σ.

Map fit samples the full-resolution map at every atom (the server sends it in tiles):

  • Atom inclusion at the contour, as EMDB's validation reports it.
  • Per residue, the mean density in σ and the fraction of atoms inside.

Color by Fit to the loaded map, plot it in the profile, or select poorly fitting residues with mapfit < 1. For 8GUB in EMD-34272, the atom inclusion is 0.8935 (EMDB reports 0.896).

Difference peaks (X-ray entries, or an Fo-Fc map file; map peaks [<σ>]) lists the peaks of the Fo-Fc map beyond +3σ and −3σ within 5 Å of the model, from full-resolution tiles:

  • Each peak's height in σ, refined between grid points, and the atom nearest to it, with a hint: a positive peak on or next to an atom (an unmodeled part or alternative position), 2.4–3.4 Å from a nitrogen or oxygen (a possible water), or away from the model (unmodeled density); a negative peak on an atom (not supported by the data).
  • Click a peak to go to it; the nearest residue is selected, so the map follows.
  • The ligand card lists the peaks within 3 Å of the ligand: the quickest check of whether a ligand, and each part of it, is in the density.

For 1M17 at 2.6 Å, 135 positive and 65 negative peaks lie near the model; two of +3.6σ lie next to erlotinib.

Analysis Tab

AlphaFold DB model of p53 (P04637) colored by pLDDT, with the per-residue confidence profile and the predicted aligned error matrix

  • Secondary structure.

    • Auto uses the file's HELIX/SHEET or struct_conf annotations when present, and otherwise computes DSSP (Kabsch & Sander 1983).
    • DSSP always recomputes.
    • Chains with only C-alpha atoms fall back to a C-alpha-geometry estimate.
  • Solvent accessibility.

    • Shrake-Rupley SASA with a 1.4 Å probe gives totals per chain and relative exposure per residue (maximum ASA from Tien et al. 2013).
    • It also gives each chain's buried surface area in the complex.
    • After an interface analysis, it adds the buried surface area of that interface.
  • Part-sphere exposure (pPSE) follows StructureMap (Bludau et al. 2022), which was built to put PTM sites in structural context. It counts the Cα atoms within 12 Å in a 70° cone along each residue's Cα→Cβ direction; with a PAE matrix (AlphaFold and other predictions), a neighbor counts only when its distance plus the PAE is within the radius, so a confidently placed neighbor counts and a floppy one does not. Residues with pPSE ≤ 5 are highly exposed. The same count in a 24 Å sphere, smoothed over ±10 residues, marks intrinsically disordered regions (idr). Color by pPSE, plot it in the profile, or select with ppse < 6.

  • Ramachandran plot. φ/ψ per residue on MolProbity Top8000 contours, with favored, allowed (yellow) and outlier (red) residues; choose a residue category to see its own contours. Glycine and proline are marked. Click a point to select the residue.

  • Per-residue profile. B-factor or pLDDT, relative SASA, pPSE, hydrophobicity (9-residue window), AlphaMissense, MSA depth, conservation, fit to density or to a loaded map, or custom data along the sequence. Click to select.

  • Conservation. Compute conservation scores each residue from a multiple sequence alignment:

    • The alignment can be the MSA of an opened prediction, or an alignment file whose first sequence is the protein (A3M, aligned FASTA, Stockholm or Clustal).
    • The score is the Jensen–Shannon divergence of Capra and Singh (2007), with sequence weighting, a gap penalty and a 3-residue window, or Shannon entropy.
    • Residues are colored in ConSurf's nine grades, from variable (turquoise) to conserved (maroon), and graded by the protein's own score distribution.
    • Select with conservation > 0.6 or grade >= 8.

    For p53 on DNA (1TUP), with a UniRef90 alignment of the DNA-binding domain, the most conserved residues are the zinc ligands C176, H179, C238 and C242, followed by S241, R175, and R248 and R273, which contact the DNA.

  • Predicted aligned error. The PAE heatmap for AlphaFold models and predictions. Drag a rectangle to select the residues of both ranges in 3D.

    • Contact probability switches the heatmap to AlphaFold 3's contact probabilities.
    • Find domains clusters the PAE into rigid domains. This follows ChimeraX's alphafold pae colorDomains: residue pairs under 5 Å PAE are weighted by 1/PAE and grouped by greedy modularity. It lists each domain's residues and mean pLDDT.
    • MSA depth colors by the number of aligned sequences (AlphaFold DB models, prediction folders, or a dropped .a3m).

The AlphaFold DB model of p53 (P04637) split into rigid domains from its PAE: the DNA-binding domain, the N-terminal transactivation region and the C-terminal region with the tetramerization helix

p53 bound to DNA (1TUP) colored by conservation from a UniRef90 alignment of the DNA-binding domain (1,384 sequences), in ConSurf's nine grades from variable (turquoise) to conserved (maroon)

Proteomics Tab

Everything in this tab runs in the browser. Your data is never uploaded.

A DIA-NN report of HeLa runs (Parquet) on the AlphaFold model of nucleolin (P19338): peptide coverage on the structure, and three phosphosites in the disordered N-terminal region with localization probability, part-sphere exposure, disorder and public evidence

  • Search results. Open a search engine's report (or drop it on the window). Proteoscope keeps the rows of the active structure's proteins, matched by UniProt accession or by sequence, so a multi-gigabyte report of a whole proteome is streamed rather than loaded.

    Tool Files
    MaxQuant evidence.txt, peptides.txt, site tables such as Phospho (STY)Sites.txt
    DIA-NN report.tsv, report.parquet (1.9 and 2.x), pr_matrix.tsv, site reports
    Spectronaut Normal and PTM site reports
    FragPipe psm.tsv, peptide and site tables
    mzTab Peptide (PEP) and PSM sections, with modification probabilities
    Proteome Discoverer PSM and peptide group exports with ptmRS probabilities
    • Decoys and contaminants are dropped, and q-value and localization thresholds apply as you type. Semicolon-separated exports with decimal commas are read as such. Localization probabilities are read from each tool's notation (MaxQuant S(0.98), DIA-NN, Spectronaut, ptmRS, mzTab).

    • The structure shows coverage, peptide or PSM counts, log10 intensity over chosen samples, or the log2 fold change between two groups of samples (Spectronaut conditions are grouped automatically).

    • The sites table lists every localized site with its probability, value, part-sphere exposure and whether it lies in a disordered region; with public evidence loaded, it also says whether the site is already known. Click a site to focus it; export the table as CSV.

    • Differential statistics. With two sample groups chosen, Test B vs A runs a moderated t-test on every feature of the whole report, all proteins included. The prior of limma's empirical Bayes needs many features.

      • Log2 intensities, with median normalization (optional) and a minimum number of values per group.
      • Optional imputation of missing values from a down-shifted normal distribution, as Perseus does.
      • Benjamini–Hochberg q-values.
      • For PTM sites, the protein's change (the median of its unmodified peptides) is subtracted, with Welch–Satterthwaite degrees of freedom, as MSstatsPTM does.

      A volcano plot shows the result; click a site's point to focus it. Sites are colored by fold change only when significant. The sites CSV gains each site's fold change, p, q and degrees of freedom, and for adjusted sites the protein's change. The results match limma and MSstatsPTM on the same data.

Ubiquitination after the PROTAC MZ1 on BRD4 (5T35), from the DIA-NN report of the MSstatsPTM example data: a moderated t-test of 38 GlyGly peptides with imputation, the volcano plot, and the significant sites K431 and K445 labeled on the structure

  • Public evidence. Load public peptides and PTMs fetches the peptides observed for the structure's proteins in PeptideAtlas, ProteomicsDB and other resources, and the modification sites from reprocessed PRIDE datasets (PTMeXchange), through the EBI Proteins API. Color the public coverage, mark the sites, filter by modification type, and compare with your own report's sites (✓ known, new).
  • Sequence properties.
    • Uses ExPASy ProtParam conventions: average and monoisotopic mass, the Bjellqvist pI, net charge at pH 7, ε280 with and without cystines, absorbance at 0.1 %, GRAVY, the aliphatic and instability indices, and aromaticity.
    • Computed from the full deposited sequence when SEQRES or entity_poly is available.
  • UniProt annotations.
    • Fetches domains, functional sites, PTMs, disease variants and mutagenesis data from UniProtKB.
    • Features are mapped onto the structure through its UniProt cross-reference.
    • Filter the list (for example R175, kinase, phospho), click a feature to select it, or mark features as sites.

p53 bound to DNA (1TUP) with the six most frequent cancer hotspot mutations labeled and peptide coverage shown in gold

  • Peptide coverage.
    • Paste peptides, one per line, with an optional value.
    • Understands MaxQuant, Spectronaut, DIA-NN, ProForma 2.0, Comet/SEQUEST and FragPipe notation, including modifications.
    • Isoleucine and leucine can be treated as equal.
    • Coverage is mapped onto every matching chain and colored by peptide count. Peptide values are averaged per residue.
    • In-silico digest generates theoretical peptides for common proteases.
  • Sites and variants.
    • Accepts R175H, p.Arg248Gln, pS15, A:K120ac, Y1068 and similar.
    • Sites can use structure (author) or UniProt numbering. Wild-type mismatches are flagged, which catches numbering offsets.
    • Sites are highlighted, labeled and focused.
    • AlphaMissense (Cheng et al. 2023) fetches the pathogenicity of every possible substitution from AlphaFold DB (human proteins) and colors the structure by the mean score at each position. Substitutions such as R175H then show their own score. The selection card lists the most damaging substitutions at a residue, and am > 0.564 selects likely pathogenic positions. The scores are for research, not clinical use.

p53 bound to DNA (1TUP) colored by AlphaMissense, with the six most frequent cancer hotspots mapped and scored

  • Cross-links (XL-MS).
    • Paste links such as A:K123-B:K45, CSV with Protein1, Residue1, Protein2 and Residue2 columns, or open the export of xiFDR, xiVIEW, pLink 2/3, MeroX, XlinkX (Proteome Discoverer), MS Annika or MaxLynx. Decoys are left out and repeated identifications merge into residue pairs; proteins are matched to chains by chain ID, UniProt accession or name.
    • Cα–Cα distances are checked against the chosen cross-linker's maximum (DSS/BS3 30 Å, DSSO 30 Å, PhoX 20 Å, EDC 20 Å, …).
    • Surface distance (SASD) measures the shortest path through solvent around the protein, as Jwalk does (Bullock et al. 2016), which a linker actually has to take; pairs beyond 33 Å are violated.
    • A histogram shows the distance distribution against the cutoff. Links are drawn green when satisfied and red when violated. For homo-oligomers the shortest chain pairing is used.

Cross-links on yeast RNA polymerase II (1WCM) from xiVIEW's example data: links drawn on the structure, with the histogram of solvent-accessible surface distances (bars) and Cα–Cα distances (outlines)

  • HDX-MS. Open DynamX state or cluster data, HDExaminer results or uptake summaries, or an HDX data table in the community format (Masson et al. 2019).
    • Peptides are matched to the chain sequences; uptake is corrected for the undeuterated mass, charge states and replicates are combined, and exchangeable amides are counted as DynamX does.
    • Difference compares two states: each peptide's ΔD is tested with the hybrid significance test (Hageman & Weis 2019) when replicates are known, or against a fixed threshold otherwise. The Woods plot shows every peptide over its residues, and the structure shows protection (blue) and deprotection (red), averaged per residue over overlapping peptides.
    • Uptake shows the relative uptake of one state at one or all exposures.

HDX-MS of CD160 with and without HVEM (HaDeX example data) on the CD160–HVEM complex (6NG3): the Woods plot of significant uptake differences and the protected region on the structure

  • Custom residue data.
    • Paste chain,residue,value rows, such as HDX uptake, conservation or DMS fitness.
    • Choose a colormap, optionally centered on zero, to color the structure and plot the profile.

Exporting

Export image (the camera button, or P) renders the current view off screen:

  • Resolution 1× to 4× of the viewport, optionally supersampled for smooth edges.
  • Optionally a transparent background, the color legend, labels and measurements.
  • Copy puts the image on the clipboard.
  • Spin video records one full rotation as WebM.

Interaction tables, docking scores and fingerprints, and sites with their statistics export as CSV.

Sessions and Sharing

  • Save session (Structure tab, or the save command) writes a .proteoscope.json file. It records:

    • Where each structure came from: a fetched PDB ID or UniProt accession, a bundled example, or the local file itself, embedded and compressed.

    • Styles, per-residue styling and colors, surfaces, superpositions (refitted when the session opens), ensemble overlays and trimming.

    • Selections, focus, labels, proteomics overlays and measurements.

    • The camera, lighting, background, clipping and secondary-structure source.

    • PAE matrices and contact probabilities you opened (at 0.125 Å and 1/255 steps), prediction scores, and MSA depth. Solvent accessibility, PAE domains, validation reports and AlphaMissense are recomputed or fetched again when the session opens; AlphaFold DB PAE matrices are fetched again.

    • Docking poses (the files, embedded) and the density map's settings. Maps from the server are fetched again; map files must be opened again.

    Open a session like any file, or drop it on the window.

  • Copy link (or link) puts the whole session in the URL (#session=…) when every structure was fetched or is a bundled example. The link opens in Proteoscope at the same address and port.

  • MolViewSpec (or mvs) exports the view for Mol*: an .mvsj file that downloads the structures from RCSB PDB and AlphaFold DB, or an .mvsx archive with the files inside when some are local. It carries representations, per-residue colors, sticks, surfaces, labels, superposition transforms, the camera and the background; Proteoscope's lighting effects are not part of the format. Drop the file onto the Mol* viewer to open it.

Methods and Citation

Methods (Structure tab, next to Save session) drafts a methods paragraph from what the session used:

  • each structure's source with its ID, experimental method, resolution and revision date, or the model's database version;
  • each analysis with its method and parameters: superposition, interactions, surfaces, density fit, conservation, statistics and others;
  • the Proteoscope version.

Citations are numbered, with DOIs checked against Crossref. Copy references or Download BibTeX takes them to your manuscript. Check the text against what you did before using it.

To cite Proteoscope itself, use CITATION.cff (GitHub offers it under Cite this repository).

Biological Assemblies and Ensembles

  • Assemblies. When a file defines biological assemblies (PDBx/mmCIF pdbx_struct_assembly or PDB REMARK 350), choose one under Biological assembly. Assemblies above 300,000 atoms per model are shown as unavailable.
  • Ensembles. Multi-model files, such as NMR ensembles, show a model slider with a play button, and Overlay models in the Analysis tab shows all models at once.
  • Changing the assembly of a structure undoes its superposition, because assembly operators are defined in the deposited coordinate frame.

Structure Parsing Notes

  • Legacy PDB:
    • Coordinates, MODEL/ENDMDL, HELIX/SHEET, CONECT and SSBOND.
    • Header metadata from HEADER, TITLE, COMPND, SOURCE, EXPDTA, KEYWDS, REMARK 2 and REMARK 3 (resolution, R-free), and REMARK 350 (assemblies).
    • SEQRES, and UniProt mappings from DBREF/DBREF1/DBREF2.
    • Element columns and formal charges. When the element column is missing, the element is inferred from the PDB atom-name alignment, so an alpha carbon is never mistaken for calcium.
  • PDBx/mmCIF:
    • _atom_site: author and label identifiers, entity IDs, models, formal charges.
    • _entity, _entity_poly and _entity_poly_seq.
    • _struct_conf and _struct_sheet_range.
    • _struct_conn: only covalent, disulfide and metal-coordination records become bonds.
    • _pdbx_struct_assembly* and _pdbx_struct_oper_list.
    • _struct_ref/_struct_ref_seq for UniProt numbering.
    • _refine, _reflns and _em_3d_reconstruction for resolution and R-factors, plus the organism and deposition-date categories.
    • ModelCIF _ma_qa_metric_local for per-residue pLDDT.
    • _chem_comp_atom and _chem_comp_bond for ligand bond orders, aromaticity and charges.
  • BinaryCIF (.bcif, as served by RCSB's and PDBe's model servers) is decoded in the browser and read like PDBx/mmCIF.
  • Predicted models are recognized from ModelCIF records, the method and software names (AlphaFold, ColabFold, ESMFold, Boltz, Chai-1, OpenFold), or Protenix's data block name, and every model opened from a prediction folder is one. The B-factor column is read as pLDDT, rescaled when a predictor writes it on a 0–1 scale; ModelCIF confidences on a 0–1 scale (SWISS-MODEL) are rescaled too.
  • Format. The file name decides between PDB and PDBx/mmCIF, except that a file named .cif without a data block but with PDB atom records is read as PDB.
  • Chain and residue identifiers. Author chain and residue IDs are used for display.
  • Alternate conformers. The highest-occupancy conformer is kept.
  • Bonds come from explicit records plus geometry, using element covalent radii. The geometric step also finds inter-chain disulfides and metal coordination. Bond orders come from the Chemical Component Dictionary, and from duplicated CONECT records in PDB files.
  • Ligand files. SDF and molfiles (V2000 and V3000), MOL2 and PDBQT, for docking poses.
  • Maps. CCP4 and MRC 2014 (modes 0, 1, 2, 6 and 12; any axis order; either byte order), and the PDBe volume server's BinaryCIF.

Command-Line Options

proteoscope [flags] [structure files or prediction folders...]
proteoscope mcp [flags]    an MCP server for AI agents (see Scripting)
proteoscope triage [flags] <prediction folders...>
                           rank predictions without a window (see Batch triage;
                           proteoscope triage -h lists its flags)

  --host string       interface to bind (default 127.0.0.1)
  --port int          preferred port; nearby ports are tried if busy (default 8765)
  --no-open           do not open a browser
  --offline           disable remote fetching (cached entries still work)
  --cache-dir path    fetch cache location (default: user cache dir/proteoscope)
  --cache-max-age d   refetch cached downloads older than this (default 720h; 0 keeps them)
  --no-cache          do not read or write the fetch cache
  --dev               serve web/ and data/ from disk for development
  --remote-control    accept commands from scripts on this computer (see Scripting)
  --version           print the version and exit

With the default --host, the server only answers requests whose Host is the local address, and it always rejects cross-origin API calls. This protects against DNS-rebinding and cross-site requests. A --host such as 0.0.0.0 serves Proteoscope to other machines on the network; use it only on a network you trust.

Scripting

In the browser console, proteoscope.run() executes any command and returns { ok, message, data }:

await proteoscope.run('fetch 2HYY');
await proteoscope.run('show sticks byres (within 4.5 of resn STI) and protein');
await proteoscope.run('color salmon resn STI');
const { data } = await proteoscope.run('select within 4 of resn STI');   // residue keys per structure
const png = await proteoscope.snapshot({ scale: 3, transparent: true });  // data URL
const session = await proteoscope.session();                              // the session as JSON

From Python or Jupyter, start Proteoscope with --remote-control, open it in a browser, and POST commands to /api/remote/command. The open page runs each command and the reply carries its result; png, save, link and mvs return data instead of downloading a file.

import base64
import requests

def ps(command):
    reply = requests.post("http://127.0.0.1:8765/api/remote/command",
                          json={"command": command}, timeout=180).json()
    if not reply.get("ok"):
        raise RuntimeError(reply.get("message") or reply.get("error"))
    return reply

ps("fetch 4AKE")
ps("add 1AKE")
print(ps("superpose 1AKE onto 4AKE fit /A:1-29+60-121+160-214")["message"])
moved = ps("select deviation > 5 and chain A")["data"]    # residue keys that moved > 5 Å
ps("color deviation")
image = ps("png 2")["data"]["image"]                      # PNG as a data URL

from IPython.display import Image
Image(base64.b64decode(image.split(",", 1)[1]))

Commands go to the most recently opened Proteoscope page. Remote control is off unless the flag is given; it accepts requests only from this computer, whatever --host is, and requests from web pages on other sites are refused, but any program on your computer can send commands while it is on.

Opening files from scripts. POST absolute paths of files or folders to /api/remote/open, and the page opens them as if they had been named on the command line; several prediction folders are ranked together. Because this reads files from your disk, it also needs the token that Proteoscope prints when it starts (a new one each run), in the X-Proteoscope-Token header:

TOKEN = "..."   # from the "Opening files by path" line Proteoscope printed

reply = requests.post("http://127.0.0.1:8765/api/remote/open",
                      headers={"X-Proteoscope-Token": TOKEN},
                      json={"paths": ["/runs/campaign"]}, timeout=1800).json()
print(reply["message"])                  # "Opened 48 prediction jobs (240 models) ..."
best = ps("triage by ipsae top 5 pair A B")["data"]["rows"]

Files opened this way are served only to the page on this computer, even when --host shares Proteoscope with other machines.

info, interactions <selection>, interface <chain> <chain>, validate, superpose, triage, compound, diagram (SVG and PNG) and map peaks return their results as data too.

AI agents (MCP)

proteoscope mcp is a Model Context Protocol server, so an AI agent such as Claude can use Proteoscope. It starts Proteoscope, answers the agent on standard input and output, and opens Proteoscope in your browser when the agent first needs the page (unless --no-open; then open the address it prints). When the agent disconnects, Proteoscope stops. It takes the usual flags, such as --port and --offline, but only a local --host.

For Claude Code, with the full path the installer printed:

claude mcp add proteoscope --scope user -- /Users/you/.local/bin/proteoscope mcp

For Collomia:

collo mcp add proteoscope --global --timeout 600 -- /Users/you/.local/bin/proteoscope mcp

For Claude Desktop, Cursor, Gemini CLI and other clients, add it to their MCP configuration:

{
  "mcpServers": {
    "proteoscope": { "command": "/Users/you/.local/bin/proteoscope", "args": ["mcp"] }
  }
}

Using Proteoscope with AI agents covers the setup for each client (including VS Code and Codex), testing with the MCP Inspector, example prompts, the tools and their arguments, images, privacy and troubleshooting.

Tool What it does
open_structure Fetch a PDB entry or an AlphaFold DB model
open_files Open files and prediction folders by path; several jobs are ranked together
describe_structure Source, method and resolution or confidence, chains, ligands, prediction scores, validation summary
list_structures The structures in the scene and their superpositions
select_residues Select with the selection language; returns the residues
get_interactions Focus residues or a ligand and list its interactions
interface_contacts The contacts between two chains
superpose Superpose by sequence or by structure alone (TM-align, MM-align); RMSD, TM-score, lDDT
validation_report The wwPDB validation report's summary, ligand fit and worst residues
rank_predictions Rank the opened prediction jobs by ipSAE, pDockQ2, LIS, ipTM, pLDDT or cross-links
render_image The current view as a PNG
proteoscope_command Any other command, for example color plddt or map load

The tools act on the page you see, so you can watch what the agent does and take over at any time. Results come back as text and as structured data. The MCP server runs only on your computer: the agent's commands reach the page through the MCP connection alone (the HTTP routes for scripts are off in this mode), and files the agent opens are read by the page, as your own are. Some tools take a while on large jobs; clients with a short default timeout (30 seconds in some) should allow a few minutes.

Development

Requirements

  • Go 1.24 or newer.
  • Node.js 22 or newer, to run the JavaScript tests.
  • A WebGPU-capable browser.

Run From Source

go run . --dev

--dev serves web/ and data/ from disk, so edits to the frontend show up after a browser reload without rebuilding. There is no JavaScript build step.

Build A Single Binary

go build -o proteoscope .

The executable embeds web/index.html, web/styles.css, web/app.js, web/favicon.svg, web/lib/*.js and the examples in data/. To bundle your own examples, put .pdb, .ent, .cif or .mmcif files (optionally gzipped) in data/ and rebuild. List them in data/examples.json to give them a label, category, description and opening view (a list of commands); files that are not listed appear after the listed ones.

Cross Compile

GOOS=darwin GOARCH=arm64 go build -o dist/proteoscope-darwin-arm64 .
GOOS=darwin GOARCH=amd64 go build -o dist/proteoscope-darwin-amd64 .
GOOS=linux GOARCH=amd64 go build -o dist/proteoscope-linux-amd64 .
GOOS=linux GOARCH=arm64 go build -o dist/proteoscope-linux-arm64 .
GOOS=windows GOARCH=amd64 go build -o dist/proteoscope-windows-amd64.exe .
GOOS=windows GOARCH=arm64 go build -o dist/proteoscope-windows-arm64.exe .

Release

The version is version in main.go, and CITATION.cff repeats it. To release, set both, add the release to CHANGELOG.md, merge to main and push a tag such as v0.6.0. The release workflow (.github/workflows/release.yml) checks that the tag matches main.go, runs the tests, builds the six binaries with -trimpath -ldflags "-s -w", and attaches them with SHA256SUMS to a draft release. Review the draft and publish it. The installers (install.sh, install.ps1) download the latest published release by these file names, so keep them when changing the workflow.

Test

go test ./...
node --test "web/lib/*.test.mjs"
node validation/run.mjs

The last command compares Proteoscope's analyses with numbers from their reference tools (limma, MSstatsPTM, US-align, Capra and Singh's scorer, EMDB, MolProbity, PoseBusters and RDKit); see validation/README.md. GitHub Actions run gofmt, go vet, the Go tests with the race detector, the JavaScript tests, the offline validation suites and the cross-compilation on every pull request and every push to main, and the whole validation suite weekly.

Code Layout

Path Responsibility
main.go, fetch.go, cache.go, local.go, security.go Local server, embedded assets, fetch proxy and cache, command-line files and folders, request hardening
examples.go Bundled examples: the manifest, gzipped files served as they are
search.go, evidence.go Structure and model search (RCSB, UniProt, PDBe, 3D-Beacons), model downloads, public proteomics evidence
validation.go wwPDB validation reports, reduced from XML to per-residue JSON
ligands.go, maps.go Chemical Component Dictionary entries and the ligand card's facts; density maps from the PDBe volume server (RCSB's copy as a fallback) and EMDB metadata
web/app.js Application state, UI wiring, render loop, analysis and proteomics panels
web/lib/parse.js, web/lib/bcif.js PDB, PDBx/mmCIF and BinaryCIF parsing, assemblies
web/lib/predictions.js, web/lib/interface-scores.js Prediction folders (AlphaFold 3, Boltz, Chai-1, ColabFold, Protenix, OpenFold3), tokens, ipSAE, pDockQ, pDockQ2, LIS
web/lib/discover.js Search query types, grouping and sorting of structures and models
web/lib/reports.js, web/lib/parquet.js, web/lib/zstd.js, web/lib/snappy.js Search-report import and summaries; Parquet, Zstandard and Snappy decoding
web/lib/exposure.js, web/lib/crosslinks.js, web/lib/hdx.js Part-sphere exposure and disorder, cross-link report import and surface distances, HDX-MS import and statistics
web/lib/pae-domains.js, web/lib/msa.js, web/lib/npy.js PAE domain clustering, MSA depth, NumPy arrays
web/lib/validation.js, web/lib/ramachandran.js, web/lib/rama-top8000.js Validation-report mapping, MolProbity Top8000 Ramachandran classes and data
web/lib/missense.js AlphaMissense tables
web/lib/structure.js Residues, polymer typing, bonds, secondary structure, sequences, UniProt mapping
web/lib/dssp.js DSSP secondary-structure assignment
web/lib/cartoon.js Protein and nucleic-acid cartoon meshes
web/lib/align.js, web/lib/superpose.js, web/lib/compare.js Sequence alignment, least-squares superposition, TM-score, lDDT, RMSF, chain pairing
web/lib/select.js, web/lib/commands.js Selection language and command-line parsing
web/lib/mvs.js, web/lib/zip.js, web/lib/codec.js MolViewSpec export, ZIP reading and writing, session compression and links
remote.go Remote control for scripts (--remote-control): commands, opening files by path
mcp.go The MCP server for AI agents (proteoscope mcp)
triage.go Batch triage without a window (proteoscope triage): the page in a hidden browser, the ranking, CSV, JSON and gallery written to files
web/lib/triage.js Batch triage: ranking the models of many prediction jobs, CSV rows
web/lib/scene.js, web/lib/coloring.js Representation and color-scheme logic
web/lib/renderer.js WebGPU renderer: impostors, G-buffer, SSAO, outlines, FXAA, picking, capture
web/lib/renderer-canvas.js Canvas 2D fallback renderer
web/lib/camera.js, web/lib/math3d.js Trackball camera and math
web/lib/surface.js, web/lib/surface-worker.js, web/lib/electrostatics.js Surfaces, SASA, Coulombic potential
web/lib/interactions.js Non-covalent interaction detection
web/lib/chemistry.js, web/lib/molfile.js Ligand chemistry from the CCD (bond orders, aromaticity, charges, hydrogens); SDF, MOL2 and PDBQT docking poses
web/lib/depict.js, web/lib/ligand-diagram.js 2D layout of small molecules; ligand interaction diagrams as SVG
web/lib/perception.js, web/lib/dg-bounds.js, web/lib/pose-checks.js Chemical perception and distance-geometry bounds as RDKit computes them; PoseBusters' pose checks
web/lib/smiles.js SMILES as RDKit reads them (Kekulé bonds, hydrogens, @/@@ and / \), and pairing their atoms with a model's
web/lib/volume.js, web/lib/volume-worker.js CCP4/MRC and volume-server maps, isosurfaces, map fit, difference-map peaks
web/lib/tmalign.js TM-align and MM-align, ported from US-align
web/lib/stats.js Moderated t-test, normalization, imputation, q-values, PTM adjustment
web/lib/conservation.js Alignment parsing and conservation scores
web/lib/provenance.js Methods paragraph, references and BibTeX
validation/ Validation against reference tools (their numbers, not the tools)
.github/workflows/ Continuous integration and the weekly validation run
web/lib/proteomics.js Sequence properties, peptide, site and cross-link parsing, digestion
web/lib/sequence-view.js, web/lib/plots.js Sequence panel, Ramachandran, profile and PAE plots
web/lib/residues.js, web/lib/elements.js, web/lib/colors.js Shared chemistry and color tables

See proteoscope-spec/roadmap.md for the project review, a comparison with other viewers and the roadmap.

Troubleshooting

The badge says "Canvas preview"

Your browser did not provide WebGPU, so Proteoscope is using a simplified renderer without surfaces, ambient occlusion or outlines. Open the same address in Chrome, Edge or Brave. Safari provides WebGPU only from macOS Tahoe (26), so Safari on macOS Sequoia or earlier always shows the simplified renderer. To force the compatibility renderer, for example to work around a GPU driver problem, open http://127.0.0.1:8765/?renderer=canvas.

Fetching fails

Check your network connection, and make sure Proteoscope was not started with --offline. When the network is down, downloads older than the cache's maximum age are still served from the cache. The error message shows RCSB's or AlphaFold DB's reply, for example when an entry does not exist. Very large entries can take longer than the 45-second download limit on slow connections; download the file and open it locally instead.

The port is already in use

Proteoscope tries the requested port first and then nearby ports. Use the URL printed in the terminal.

My downloaded file does not load

Use a coordinate file ending in .pdb, .ent, .cif, .mmcif or .bcif, optionally compressed with gzip or Zstandard. Validation reports and PDFs are not coordinate files. Docking poses, maps and alignments open into the active structure, so open the receptor or model first. For a prediction, open the whole output folder (or the AlphaFold Server .zip) so the confidence files come along.

License

Proteoscope is licensed under the Apache License 2.0. See LICENSE for the full license text.

Data credits

  • The MolProbity Top8000 Ramachandran distributions come from the Richardson Lab's reference_data (CC BY 4.0; Williams et al., Protein Science 2018).
  • AlphaMissense predictions (Cheng et al., Science 2023) are fetched from AlphaFold DB under CC BY 4.0.
  • Validation reports come from the wwPDB.
  • The bundled examples are PDB entries (wwPDB, CC0) and the AlphaFold DB model of p53 with its PAE (AF-P04637-F1, CC BY 4.0; Jumper et al., Nature 2021; Varadi et al., Nucleic Acids Research 2024). Each example's citation is in data/examples.json.
  • The bundled prediction examples come from Runs N' Poses (Škrinjar et al., bioRxiv 2025; Apache-2.0), Boltz-1 and Protenix predictions of 8C3U, and from a ColabFold data release by Büttiker (Zenodo 2026, doi:10.5281/zenodo.21471604; CC BY 4.0); see data/predictions/README.md.
  • Searches use RCSB PDB, UniProt, PDBe and 3D-Beacons (Varadi et al., GigaScience 2022); models downloaded from a 3D-Beacons provider carry that provider's terms.
  • Ligand chemistry comes from the wwPDB Chemical Component Dictionary (Westbrook et al., Bioinformatics 2015; CC0). Density maps come from the PDB and EMDB archives (CC0) through the PDBe volume server.
  • Public proteomics evidence comes from the EBI Proteins API (Nightingale et al., Nucleic Acids Research 2017), which collects PeptideAtlas, ProteomicsDB, PRIDE and PTMeXchange data.
  • Methods implemented from their publications: part-sphere exposure and disorder from StructureMap (Bludau et al., PLOS Biology 2022), surface distances after Jwalk (Bullock et al., Molecular & Cellular Proteomics 2016), the HDX-MS hybrid significance test (Hageman & Weis, Analytical Chemistry 2019), ipSAE (Dunbrack, bioRxiv 2025), TM-align and MM-align as in US-align (Zhang & Skolnick, Nucleic Acids Research 2005; Mukherjee & Zhang, Nucleic Acids Research 2009; Zhang et al., Nature Methods 2022), limma's moderated t-test (Smyth, Statistical Applications in Genetics and Molecular Biology 2004), MSstatsPTM (Kohler et al., Molecular & Cellular Proteomics 2023), conservation scores (Capra & Singh, Bioinformatics 2007) in ConSurf's colors (Ashkenazy et al., Nucleic Acids Research 2016), and Surface Nets (Gibson, MICCAI 1998). Full references are in the Methods dialog.

About

A 3D viewer and analysis workbench for protein and nucleic-acid structures, predicted complexes, density maps and structural proteomics data. One self-contained program for your own computer, installed with one command; your files stay on your machine.

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages