Skip to content

Drop a structure file here

or choose one from your computer, fetch an entry from the PDB, or open a sample.

.pdb.gro.xyz.cif.mol2.sdf+9 more

How-to guide

How to inspect a molecular structure

Open a coordinate file, turn it until you can see what matters, find the residues or molecules you care about by name, then measure and export. Everything is drawn by your own graphics card; nothing is uploaded.

1

Open a structure

Drop a PDB, GRO, XYZ, CIF, MOL2, SDF or other coordinate file on the page, choose one, type a four-character PDB ID to fetch it from RCSB, or open a sample. The Helix in a water box sample is a small solvated system with ions and a box, built in your browser, for trying the MD features.

2

Move around

Drag to rotate, scroll or pinch to zoom, right-drag or drag with two fingers to pan. The controls in the corner of the viewer do the same without a mouse: hold an arrow to keep turning, drag the centre of the pad like a trackball, slide the zoom rail, look along X, Y or Z, fit, reset or spin. Click an atom to make it the centre of rotation; double-click to zoom to its residue.

3

Find what you need

Type in Find above the viewer: a residue or species name (SOL, NA, ALA), a residue with its number (ALA 12), a range (10-20), chain A or an element. Matches turn to ball-and-stick, the rest fades, and the view zooms to them. Enter steps to the next residue, Shift+Enter to the previous, Esc puts everything back. The list under the file name shows what the structure is made of; hide water or ions in one click.

4

Style, measure and export

Pick a representation and colours in the Style tab, and show or restyle the simulation box in Display. In the Tools tab, turn on Measure mode and click two atoms for a distance, or tick Angle mode and click three for an angle; turn on Figure mode to fade the surroundings, or build a selection by chain, residue, distance or region. Save a high-resolution PNG from the Export tab.

Keyboard

Shortcuts work anywhere on the page except while you type in a field. Arrow keys need the viewer to have focus: click it, or tab to it.

KeyDoes
← → ↑ ↓

Rotate the structure (viewer focused). Hold Shift for bigger steps.

Q E

Roll anticlockwise or clockwise.

+ −

Zoom in or out.

F

Zoom to fit: the matches while a search is open, otherwise everything.

0 R

Reset the view.

X Y Z

Look along that axis; press again to look from the other side.

B

Show or hide the simulation box.

W I

Show or hide water, or ions.

N Shift+N

Next or previous match of the search.

S

Auto-spin on or off.

M H L

Measure mode, hydrogens, atom labels.

Shift+F

Fullscreen viewer.

?

The shortcut sheet.

Esc

Clear the search, leave measure mode, close the atom card or the sheet.

How the viewer works

WebGL rendering

Geometry is built and rasterised by 3Dmol.js on your graphics card. Because the whole scene lives in GPU memory, rotation and zoom stay smooth on structures with hundreds of thousands of atoms, but every style change has to rebuild that geometry, which is why very large systems take a moment to re-draw.

Selections are JSON, not strings

3Dmol filters atoms with plain JavaScript objects such as {chain:'A', resn:'HEM'}. The query box compiles your text into exactly that shape, so anything you type here maps directly onto the library's own API, useful if you later script the same selection yourself.

Neighbour search

Distance queries (within:) index the target atoms into a uniform grid first, then test only the cells that could fall inside the radius. That keeps a pocket selection near-instant instead of comparing every atom against every other atom.

Labels are built across frames

Placing thousands of labels in one synchronous loop is what freezes a tab, nothing paints until the last one is done. Labels here are added in slices of about 150 per animation frame, with a progress readout, so the viewer stays interactive and you can watch them fill in. Starting a new label pass cancels the one in flight rather than queueing a second.

Scope beats capping

A cap alone still labels whichever atoms happen to come first in the file, which is rarely what you are looking at. Set Label scope to Current selection to label only what you isolated; when a scope still exceeds the limit, the atoms nearest the centre of the view are kept in preference to the rest.

Labels are the usual bottleneck. Each label is a separate textured sprite, so tens of thousands of them will stall the browser long before the atoms themselves do. Labels are capped at 1,500 by default, with a Limit slider in the Display tab that appears whenever there are more to place, and they are warned about above 5,000 atoms. When the label scope holds more than 50,000 atoms they stay off until you isolate a smaller region or tick Allow labels above 50,000 atoms; raise the cap only when you have isolated a small region.

The selection language

Find above the viewer takes plain words: SOL, ALA 12, 10-20, chain A, Fe, or several separated by commas (NA, CL). For anything more, it and the Query box in the Tools tab accept this language. Every token is key:value, separated by spaces. Tokens are combined with AND, chain:A elem:Fe means iron atoms in chain A. Prefix any token with not: (or !) to invert just that token.

Atom attributes

TokenSelects
chain:A

Chain identifier as written in the file.

resn:HOH

Residue name. Accepts comma lists: resn:ALA,GLY.

resi:1-50

Residue number: a single value, an inclusive range, or a comma list of either: resi:1-5,10.

elem:Fe

Element symbol, in any case: elem:FE and elem:fe also find iron. Accepts comma lists: elem:Fe,Zn.

atom:CA

Atom name, more specific than element (CA is the alpha carbon).

ss:h

Secondary structure: h helix, s sheet, c coil.

b:>30

B-factor. Supports >, <, >=, <= and ranges like b:20-50.

serial:1-99

Atom serial number range.

Named groups

TokenSelects
protein:1

Standard amino-acid residues.

nucleic:1

DNA and RNA residues.

solvent:1

Water under its common names (HOH, WAT, SOL, TIP3…).

ion:1

Frequently seen monatomic ions.

backbone:1

Protein backbone atoms N, CA, C, O.

sidechain:1

Amino-acid atoms that are not backbone.

hetero:1

Atoms flagged as HETATM: ligands, cofactors, solvent.

Geometry and logic

TokenSelects
x:>4.8

Cartesian coordinate filter on x, y or z. Ranges work too: z:10-20. Values follow the unit dropdown (Å or nm).

within:5,chain:A

Every atom within 5 Å of anything matching the inner selection. The radius comes first, then a comma, then a nested query.

not:resn:HOH

Inverts the token that follows. !resn:HOH is equivalent.

or:chain:A|chain:B

Union of the pipe-separated clauses.

byres:1

Expands the result so that any residue with one selected atom is selected entirely.

Worked examples

QueryMeaning
within:5,resn:HEM byres:1

The complete residues lining the haem pocket, the standard way to picture a binding site.

within:5,chain:A not:chain:A byres:1

The protein–protein interface: residues close to chain A that belong to a different chain.

protein:1 not:solvent:1 b:>60

The most mobile parts of the protein, often loops and termini.

ss:h chain:A

Helices of chain A only.

z:>30 not:solvent:1

The upper leaflet of a membrane system with water stripped out.

References & documentation

  1. Rego, N., & Koes, D. (2015). 3Dmol.js: molecular visualization with WebGL. Bioinformatics, 31(8), 1322–1324. doi:10.1093/bioinformatics/btu829
  2. 3Dmol.js API, AtomSelectionSpec reference (University of Pittsburgh).
  3. Berman, H. M., et al. (2000). The Protein Data Bank. Nucleic Acids Research, 28(1), 235–242. rcsb.org
  4. Wikipedia: Accessible surface area and B-factor.

Frequently asked questions

Is my structure uploaded anywhere?
No. Files are read with the browser's FileReader and rendered by 3Dmol.js on your own GPU. The only network request the tool ever makes is the optional PDB ID fetch, which asks RCSB for that one public entry.
Which file formats are supported?
PDB, ENT, CIF/mmCIF, SDF, MOL, MOL2, XYZ, GRO, PQR, PRMTOP, MMTF, CDJSON, CUBE and VASP/POSCAR/CONTCAR. Multi-frame files load as a trajectory and expose the frame slider automatically.
How do I show the simulation box?
When the file carries one it is read on load: the box line of a GRO file, the CRYST1 record of a PDB file (the 1 × 1 × 1 placeholder that NMR entries carry is ignored), or the unit cell of a CIF, VASP/POSCAR or extended XYZ file. A GRO box is drawn straight away; for other formats press B or the cube button on the viewer. Triclinic boxes are drawn with their real angles. The Display tab sets the line weight and colour and labels the edges with their lengths, in nm for GRO files and Å otherwise. With a trajectory, the box follows the frame.
How do I find one residue, or every water, ion or lipid?
Type its name in Find above the viewer. Names are matched without regard to case, so sol finds SOL. The suggestions list every residue and species actually present, with counts. Add a number for one residue (ALA 12) or a range (ALA 10-20), or type water, ions, lipids, protein or backbone for a whole class. Step through the matching residues with Enter and Shift+Enter, turn on Only matches to hide the rest, and press Esc to go back to the view you had before.
Rotating with the mouse is fiddly. Is there another way?
Use the pad in the corner of the viewer. A tap on an arrow turns the structure a few degrees; holding it keeps it turning, faster the longer you hold. Drag the centre of the pad to turn it freely, use the curved arrows to roll it in the plane of the screen, and slide the zoom rail or hold + and −. X, Y and Z look straight down an axis. Clicking an atom makes it the centre of rotation, which is usually what you want before turning. The keyboard does all of this too.
Why does the cartoon style show nothing?
Cartoon rendering needs backbone connectivity and secondary-structure information, which only protein and nucleic-acid formats carry. A bare XYZ file or a small organic molecule has no backbone to trace, use stick or ball-and-stick instead.
Why are my labels capped or disabled?
Every label is an individual sprite, so they cost far more than the atoms do. Labels are capped at 1,500 by default. Whenever there are more atoms or residues to label than the cap, the ones nearest the centre of the view are labelled and a Limit slider appears in the Display tab to raise the cap, up to 10,000. Above 5,000 atoms the tool also warns that labels may lag. The 50,000-atom guard counts the label scope, not the file: with the default scope, the current selection, isolate a region and it can be labelled however large the system is. A scope of more than 50,000 atoms needs Allow labels above 50,000 atoms.
My high-resolution export came out smaller than I asked for.
Exports are capped at 8,192 pixels on a side. The cap is lower on a GPU whose maximum texture size is smaller (some report 4,096), and 4,096 is used when the browser does not report one. A multiplier that would go past the cap is reduced to the largest that fits, rather than risking a black or failed image, and the panel shows the size you will actually get.
What is the difference between Isolate and Highlight?
Isolate hides everything outside the selection, giving you a clean figure. Highlight keeps the rest of the structure as a faint wireframe so the selection stays in context, usually the better choice when you are explaining where something sits.
Which surface type should I use?
Van der Waals is fastest and shows atomic radii. Solvent-accessible traces the centre of a rolling probe and is what most buried-area calculations use. Solvent-excluded (Connolly) hugs the molecule more tightly and looks best in figures, but costs the most to compute.
Turning on labels used to freeze the tab. What changed?
Labels are now built in small slices spread across animation frames instead of one blocking loop, so the browser keeps painting and you get a live progress count. They are also scoped (by default to your current selection) and when a scope exceeds the limit the atoms nearest the centre of the view are kept. When the scope holds more than 50,000 atoms labels stay off unless you tick Allow labels above 50,000 atoms, and even then the same cap and chunking apply.
How do I make a clean measurement figure?
Take your measurements, then enable Figure mode in the Tools tab. Everything except the measured atoms drops to a faint wireframe (or thin stick, cartoon, or hidden entirely) at an opacity you control, while the picked atoms keep the full representation. Open Measurement appearance to set the line colour, thickness and dash, marker size, label size and colour, decimal places and whether units are shown. Use Zoom to picks to frame the shot, then export at 4× or higher.
Can I get the measurement numbers out as data?
Yes, Copy data puts every measurement on the clipboard as tab-separated text with type, atoms, value and unit columns, which pastes straight into a spreadsheet. Individual measurements can be removed with the × beside each row in the readout.
Why does building a surface still pause the viewer?
Surface meshing happens inside a single synchronous call in 3Dmol.js, so unlike labels it cannot be sliced across frames. What the tool does instead is paint a busy indicator first and start the work on the next frame, so you get feedback rather than a dead tab, and it refuses outright above 100,000 atoms. Scope the surface to your selection with Only the current selection to keep it fast.
Can I script the same selections elsewhere?
Yes, the query box compiles to a 3Dmol AtomSelectionSpec object, so a query like chain:A resn:HEM is simply {chain:'A', resn:'HEM'} in the library's own API. Open the console and call app.select('within:5,resn:HEM') to get the matching atoms back as an array.

Runs entirely in your browser, no data leaves your device. Rendering by 3Dmol.js (Rego & Koes, 2015).