Elevating Science Communication: Effortless 3D Structure Embedding with 3Dmol.js

  1. 3Dmol.js: molecular visualization with WebGL: Nicholas Rego, et al., Bioinformatics, 2015
  2. Embedding a 3Dmol Viewer: tutorial, 3Dmol.js docs.
  3. The 3Dmol.js Learning Environment: A Classroom Response System: Seshadri K, et al., J Chem Educ.
  4. WebGL accelerated JavaScript molecular visualization: D. Koes, et al., GitHub.
  5. 3Dmol.js And WordPress: A Few Simple Worked Examples: Procopio, et al., Site blog
  6. Visualizing crystal structures in Markdown: R Wexler, et al., Markdown tutorial.

Transforming Web-Based Molecular Visualization: Elegant, Secure, and Rapid Embedding of Structures for Online Science

3Dmol.js revolutionizes web-based molecular visualization by combining ease of deployment, high performance, and scientific rigor. Since 2020, open-source innovation in online molecular viewers has surged, with 3Dmol.js standing out for its robust WebGL engine and simple embedding workflow. From teaching environments to cutting-edge research portals, enabling users to embed interactive, publication-quality molecular structures with minimal code is a transformative leap for accessibility. The design philosophy hinges on frictionless deployment—users can drop in a code block or HTML tag and instantly render a highly customizable molecular viewer.

The process starts by including the minified 3Dmol.js script. The viewer is initiated on any div element tagged with the viewer_3Dmoljs class, where its appearance adapts to the div’s properties such as width and height. Crucially, molecular content is loaded and formatted through intuitive data- tags, allowing direct references to PDB IDs, PubChem compound IDs, or external molecular files. This declarative pattern sidesteps complex JavaScript, letting scientists and educators rapidly create interactive viewers with code that is both verified and transparent, as seen in recent tutorials and implementations.

The simplicity is matched by versatility: viewers can be customized with selection and styling specifications in data- tags, background color and alpha adjustments, atom and residue labeling, molecular surfaces, zoom and spin controls, and callbacks for advanced customization. Complex multi-model scenes and side-by-side comparisons are equally straightforward, thanks to suffixed data- tags allowing multiple configurations in a single embed. The underlying WebGL ensures smooth, hardware-accelerated graphics for exploring structures from proteins and small molecules to nanostructures.

Validation of this approach comes from recent scientific literature and active learning deployments in classrooms, where real-time molecular feedback, annotation, and querying of 3D models have engaged students and scientists at scale. The 3Dmol.js learning environment now underpins platforms for molecular pedagogy without any install barriers, as documented in chemistry education journals. Its BSD open-source license has further catalyzed adoption, earning endorsements in top-tier bioinformatics publications throughout the last five years.

3Dmol.js continues to evolve, incorporating community requests and new feature additions for teaching, research, and communication. Whether powering an academic resource or a biotech company’s drug discovery portal, 3Dmol.js represents a paradigm shift toward secure, barrier-free, code-driven molecular visualization on the web.

Below are four simple code examples for embedding, with corresponding output below.

				
					     
     
 
<div style="height: 400px; width: 400px; position: relative;" class='viewer_3Dmoljs' 

data-pdb='1EVS' 
data-backgroundcolor='0xffffff' 
data-ui='true'
data-style='cartoon:color=spectrum'

></div>
				
			
				
					     
     
 
<div style="height: 400px; width: 400px; position: relative;" class='viewer_3Dmoljs' 

data-pdb='3L4B' 
data-backgroundcolor='0xffffff'
data-ui='true'
data-spin='axis:y;speed:2'
data-zoom-to="true"
data-style='cartoon:color=spectrum'

></div>
				
			
				
					     
     
 
<div style="height: 400px; width: 400px; position: relative;" class='viewer_3Dmoljs' 

data-pdb='1EVS' 
data-backgroundcolor='0xffffff' 
data-ui='true'
data-style='stick'
data-surface='opacity:.7;color:white'
data-zoom-to="true"
data-spin='axis:y;speed:2'

></div>
				
			
				
					     
     
 
<div style="height: 400px; width: 400px; position: relative;" class='viewer_3Dmoljs' 

data-cid='2244'
data-backgroundcolor='0xffffff' 
data-ui='true'
data-style='stick'
data-spin='axis:y;speed:2'

></div>
				
			

The ease-of-use, security, and verification for scientific web development with 3Dmol.js make it the leading choice for both teaching and research. Inline customization tags and verified code examples, combined with open-source community support, cement 3Dmol.js as the future of molecular visualization on the web.

Configurations like spin, zoom, UI, colors, style, and surface rendering can be accessed using “data-tags” as detailed in the table below.

Key Concept Description Example
data-pdb PDB ID to be loaded into the viewer data-pdb=’1YCR’
data-cid PubChem compound id to be loaded data-cid=’2244′
data-href URL to molecular data file data-href=’https://files.rcsb.org/download/2POR.pdb’
data-element id of HTML element with embedded molecular data data-element=’moldata’
data-type File format (can be pdb, sdf, xyz, mol2, cube) data-type=’sdf’
data-backgroundcolor Background color (default: black) data-backgroundcolor=’0xffffff’
data-backgroundalpha Background alpha (default: 1.0 opaque) data-backgroundalpha=’0.5′
data-select AtomSpec selection specification data-select=’chain:A’
data-style Style specification data-style=’cartoon:color=spectrum’
data-surface Surface style specification data-surface=’opacity:0.7;color:white’
data-labelres Residue label style specification data-labelres=’backgroundColor:white;fontColor:black’
data-zoomto AtomSpec selection to zoom to data-zoomto=’chain:A’
data-spin Spin model with axis and speed data-spin=’axis:z;speed:10′
data-callback JavaScript function to call on viewer creation data-callback=’myCallback’
data-ui Show the UI for the viewer data-ui=’true’