News and announcements

Jmol 13.0 was released Aug 22, 2012

Written for Jmol by Nicolas Vervelle on 2012-08-23

Jmol 13.0 was released Aug 22, 2012. This major release brings to the
stable release several very important new features in Jmol developed
over the past year.

With well over 500,000 full application downloads (that is, distinct
binary downloads by application users or developers, not simple applet
downloads by web page visitors), full server-side Java support for
non-Java (iPhone/iPad) or non-applet (Android) mobile devices, and a
completely new JavaScript interface, Jmol is well-positioned for the
next phase of development of a high-level scripted high-functional
HTML5/WebGL user interface.

New features (see include:

-- a new OOP JavaScript interface (Jmol-JSO)
allowing nonJava options such as ChemDoodle and GLmol
as well as JME/JSpecView connectivity (see to be
seamlessly integrated into a web page in a platform-aware manner.
-- JmolData full "headless" operation for server-side processing
allowing image-creation, server processing, and remote cross-domain
sourcing for the unsigned applet and applet surrogates such as
ChemDoodle and GLmol.

-- COMPARE command

-- reading of JCAMP-DX files having structure/spectra assignment data
using ##$MODELS and ##$PEAKS (see
-- Gaussian log reading of Natural Transition Orbitals
-- automatic PNGJ file caching for immensely faster loading of PNGJ
files from remote servers

-- write PNGJ files encapsulate all model file data into one PNG file
-- write image 400 400 PNGJ "http://....." POSTs JMOL or IMAGE or
structure to a server as application/octet-stream
-- write MOL adds partial charge data as > <JMOL_PARTIAL_CHARGES> in SDF format
-- multiple-scene PNGJ files allowing minimal or full data loading and
scripted animations

-- isosurface caching
-- isosurface MOVE [[...matrix4f...]] moves/rotates an isosurface (for
the state)

-- MMFF94/UFF minimization and energy calculation

-- show CHEMICAL
-- show NMR

-- MolecularPlayground -- remote status and remote control

-- solid state physics support

-- integration of JSpecView into Jmol, including 2D spectral display
and manipulation

-- extended Jmol SMARTS searching
-- PubChem search for name (which can be a CAS number), cid, or SMILES using ":"

Read more

Jmol 12.2 has been released with other 200 new features

Written for Jmol by Nicolas Vervelle on 2011-10-03

# 224 new features

# summary of feature changes between Jmol 12.0 and 12.2:

# FEATURE CHANGE: "ligand" definition changed to
# !(protein,nucleic,water,UREA)"
# instead of "hetero and not solvent"
# FEATURE CHANGE: default zShadePower set to 3
# FEATURE CHANGE: undocumented a[13] = 3 (where a is a matrix, for a[1][3]) removed
# FEATURE CHANGE: DSSP default for "calculate structure"
# -- old way is now "calculate structure RAMACHANDRAN"
# FEATURE CHANGE: DSSP default for LOAD of PDB file with no header.
# in previous versions, Jmol used a ramachandran-angle-based calculation
# for secondary structure determination when a PDB file had no HELIX or SHEET records.
# It just seems reasonable to use the industry-standard DSSP method instead.

# new feature: JmolSmilesApplet method (smiles1)
# new feature: JmolSmilesApplet method getRelationship(smiles1, smiles2)
# new feature: The Jmol application can now communicate via sockets
# with other Jmol applications or specialized servers.
# The SYNC command has been expanded to make this very easy:
# sync -nnnn starts a server on local port nnnn accepting only local connections
# sync nnnn "background white" (from another app, generally) would execute that
# command on the app acting as a server
# You can also do this from one app frame to another, because they are independent
# instances of Jmol.
# Jmol can provide server service to other apps using:
# sync -3000
# [start other app, connecting on 3000]
# sync 3000 .....
# Because once the server is started and another app has connected,
# Jmol will send messages to that other app, not itself.
# To test the service within one application, just create the server and send
# commands to itself using a negative port number:
# sync -3000;sync -3000 'Mouse: rotateZBy 30'
# Note that in this context the "server" is the one getting commands from the "client"
# But the server can also send commands to the client provided the client has given the
# appropriate handshake: {"magic":"JmolApp","event":"out"}
# Sent from Jmol (via outSocket):
# {"magic" : "JmolApp", "role" : "out"} (socket initialization for messages TO jmol)
# {"magic" : "JmolApp", "role" : "in"} (socket initialization for messages FROM jmol)
# {"type" : "script", "event" : "done"} (script completed)
# Sent to Jmol (via inSocket):
# {"type" : "banner", "visibility" : "ON" or "OFF" } (set banner for kiosk)
# {"type" : "banner", "text" : bannerText } (set banner for kiosk)
# {"type" : "command", "command" : command } (script command request)
# {"type" : "content", "id" : id } (load content request)
# {"type" : "move", "style" : (see below) } (mouse command request)
# {"type" : "quit" } (shut down request)
# {"type" : "sync", "sync" : (see below) } (sync command request)
# {"type" : "touch", (a raw touch event)
# "eventType" : eventType,
# "touchID" : touchID,
# "iData" : idata,
# "time" : time,
# "x" : x, "y" : y, "z" : z }
# For details on the "touch" type, see org.jmol.viewer.ActionManagerMT::processEvent
# Content is assumed to be in a location determined by the Jmol variable
# nioContentPath, with %ID% being replaced by some sort of ID number of tag provided by
# the other half of the system. That file contains more JSON code:
# {"startup_script" : scriptFileName, "banner_text" : text }
# An additional option "banner" : "off" turns off the title banner.
# The startup script must be in the same directory as the .json file, typically as a .spt file
# Move/sync commands include:
# {"type" : "move", "style" : "rotate", "x" : deltaX, "y", deltaY }
# {"type" : "move", "style" : "translate", "x" : deltaX, "y", deltaY }
# {"type" : "move", "style" : "zoom", "scale" : scale } (1.0 = 100%)
# {"type" : "sync", "sync" : syncText }
# Note that all these moves utilize the Jmol sync functionality originally intended for
# applets. So any valid sync command may be used with the "sync" style. These include
# essentially all the actions that a user can make with a mouse, including the
# following, where the notation <....> represents a number of a given type. These
# events interrupt any currently running script, just as with typical mouse actions.
# "centerAt <int:x> <int:y> <float:ptx> <float:pty> <float:ptz>"
# -- set {ptx,pty,ptz} at screen (x,y)
# "rotateMolecule <float:deltaX> <float:deltaY>"
# "rotateXYBy <float:deltaX> <float:deltaY>"
# "rotateZBy <int:degrees>"
# "rotateZBy <int:degrees> <int:x> <int:y>" (with center reset)
# "rotateArcBall <int:x> <int:y> <float:factor>"
# "spinXYBy <int:x> <int:y> <float:speed>"
# -- a "flick" gesture
# "translateXYBy <float:deltaX, float:deltaY>"
# "zoomBy <int:pixels>"
# "zoomByFactor <float:factor>"
# "zoomByFactor <float:factor> <int:x> <int:y>" (with center reset)
# new feature: preliminary QuantumEspresso XML reader
# new feature: Jmol Application flags -k and -P
# -- -k kiosk mode: like applet, but with a banner across the top
# -- -P <port> JSON NIO client mode over port <port>
# -- for JSON NIO, use -J or -j to set nioContentPath and nioTerminatorMessage
# to the desired values. For example:
# Jmol -k -P 31461 -j "nioContentPath='./%ID%/%ID%.json';nioTerminatorMessage='SCRIPT_DONE'"
# new feature: Jmol.js adds jmolSwitchToSignedApplet().
# This needed a new <span> tag that is now inserted around the applet.
# new feature: filter "_Xx" for filtering element Xx

Read more

Jmol 12.0 released

Written for Jmol by Nicolas Vervelle on 2010-07-30

Jmol 12.0 was released today with over 170 new features compared to the previous release, Jmol 11.8. Full details may be found at

Generally new capability
-- customizable mouse button/action bindings
-- multi-touch/Kiosk capability using SPARSHUI adaptation (U-Tube video)
-- parallel multiprocessor capability for isosurface creation
-- drag-and-drop to signed applets and the application
-- model kit mode allows rapid construction of simple models
-- extensive support for depiction of space groups
-- conversion of 2D models (SMILES, JME, MOL) to 3D
-- interface to JSDraw for 2D structure input
-- interface to Flot for plotting data
-- full implementation of Daylight SMILES/SMARTS
-- extension of Daylight SMARTS to 3D conformation
-- introduction of Jmol bioSMILES and bioSMARTS
-- new JmolSmilesApplet.jar.
-- JavaScript-like flow commands and TIMEOUT
-- JavaScript-like TRY/CATCH error handling
-- direct reading of Uppsala electron density maps
-- natural bond orbital reading/rendering
-- direct logging to files using the LOG command

Read more

Jmol 11.8 released - over 215 new features

Written for Jmol by Nicolas Vervelle on 2009-09-07

Jmol 11.8, released August 26, 2009, introduces over 215 new features compared to Jmol 11.6, which was released less than a year previously. Notable new features include greatly expanded scripting capability, extensive quaternion analysis and display capability, full support for working with cyrstallographic coordinates and planes, display of point group and cyrstallographic space group symmetry operations, display of Ramachandran planes and dihedral angles, creating of JPG and PNG files with embedded Jmol state so that the 2D image can also be dropped into Jmol and instantly become a 3D object, much expanded VRML and IDTF export capability, trapping of out-of-memory condition errors, and several new readers, including AIMS, Alchemy/3DNA, CASTEP, EFVET, Gromacs, isosurface OBJ, Materials Studio XML, and Wien2k.

Read more

New Features for Jmol 11.6

Written for Jmol by Nicolas Vervelle on 2008-10-08

Jmol 11.6 is now available.

One of the most significant upgrades of Jmol to date, Jmol 11.6 includes over 200 new features introduced between January and October of 2008, including several totally new capabilities, such as point group identification and drawing of point group symmetry elements, thermal ellipsoid rendering, the capability to delete specific models from a set, 2D to 3D conversion and 3D minimization using the Universal Force Field (UFF), 3D Ramachandran plotting, quaternion maps for peptides and nucleic acids, and upgrading of the signed applet to enable file writing.

New features are discussed at

Documentation for Jmol 11.6 is available at

Bob Hanson, Oct. 8, 2008

# new feature: // at beginning of a line marks comments
# new feature: "%T" label format for straightness
# new feature: "load" of Jmol state scripts works same as "script" command
# new feature: "quaternion derivative" --> "quaternion difference", which is more
# new feature: $"xxx" quotations or $@{...} allows variable definition of object id reference
# new feature: $*xx* double wild cards
# new feature: (popup menu) Biomolecules submenu added within title menu
# new feature: .sub(), .add(), .mul(), .div() extended to all operand types
# new feature: /*SPLIT*/ in a command string allows it to be processed by
# new feature: [dots|stars|spacefill] ADPMAX [percent]
# new feature: [dots|stars|spacefill] ADPMIN [percent]
# new feature: [draw|pmesh|isosurface] xxx* [on|off|delete]
# new feature: _applet boolean
# new feature: _signedApplet boolean is available:
# new feature: {point1} == {point2} if distance < 0.000001
# new feature: {quaternion} == {quaternion2} if distance < 0.000001
# new feature: allows zip files to be designated as default directories
# new feature: applet console has "help" menu item, which includes several hundred items.
# new feature: applet message regarding help and command entry
# new feature: applet parameter jmolSetCallback("maximumSize", nnn) -- sets maximum size of applet when resizing to this value
# new feature: application [>|] button
# new feature: application measure button tied to picking style
# new feature: application pick button reinstated
# new feature: application select button reinstated
# new feature: axes labels change subtly for set axesMolecular and setAxesOrientationRasmol
# new feature: axes position [x y] and axes position [x y %]
# new feature: background IMAGE "filename"
# new feature: better draw pointgroup
# new feature: calculate pointGroup
# new feature: calculate pointGroup -- preliminary only -- untested
# new feature: CIF reading of B factors for thermal ellipsoids
# new feature: cross(a,b)
# new feature: DATA "data2d_xxxxx"..... end "data2d_xxxxx"
# new feature: DATA "property_x i j" .... END "property_x i j"
# new feature: data() and DATA expanded to allow fixed-column entry
# new feature: DELETE $xxx
# new feature: delete {atom expression} NEEDS TESTING
# new feature: dipole/draw/ellipsoid/isosurface/pmesh/mo/lcaocartoon ID keyword optional
# new feature: DISPLAY $xxx
# new feature: draw .... ">xxx" first character of title ">" forces title to
# new feature: draw [x y] or [x y %] can be incorporated into lines, curves, arrows
# new feature: draw {point} {plane}
# new feature: draw {point} PLANE [plane def, including xy, yz, x, etc.]
# new feature: draw ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset}
# new feature: draw arrow {point} {plane}
# new feature: draw ARROW ARC {pt1} {pt2} {ptref} {theta0, nDegrees, fractionalOffset}
# new feature: draw CIRCLE
# new feature: draw CIRCLE [FILL | MESH NOFILL] more intuitive open/filling syntax
# new feature: draw CYLINDER
# new feature: draw pointGroup
# new feature: draw pointGroup [type] [index] SCALE [x]
# new feature: draw quaternion [w|x|y|z|a|r] [difference][2]
# new feature: draw RAMACHANDRAN
# new feature: draw ramachandran includes planes connecting atoms.
# new feature: draw Vector [x y] or [x y %] {x' y' z'}
# new feature: draw VECTOR {atom center} {dx dy dz}
# new feature: draw vector {point} {plane}
# new feature: draw with mixed types processes them in order
# new feature: echo myecho DEPTH xx
# new feature: echo myecho IMAGE "filename"
# new feature: echoCallback
# new feature: ellipsoid ball rendering tied to "set wireframerotation" option
# new feature: extended quaternion math
# new feature: float1 == float2 if |float1 - float2| < 0.000001
# new feature: font [type] [size] [face] [weight] [scaleReference (Angstroms per pixel)]
# new feature: four optional defaults for Van der Waals radii:
# new feature: frank appears RED in signed applet, and popup about menu identifies the applet as signed.
# new feature: full math on individual atom properties using
# new feature: GamessUK reader
# new feature: generally for objects (draw,pmesh,isosurface,etc.) use DISPLAY/HIDE rather than ON/OFF
# new feature: getproperty menu current
# new feature: getProperty minimizationInfo
# new feature: getProperty PointGroupInfo
# new feature: getProperty("appletInfo") includes a key "registry" for which
# new feature: HIDE $xxx
# new feature: HIDE/DiSPLAY/DELETE/COLOR $*xxx* extended to ECHO
# new feature: in Java 1.6.0_10, right-click activates the console, and the
# new feature: inline math @{x+3} extended to all commands
# new feature: integration of star, halo, and spacefill code so all behave the same.
# new feature: isosurface DOWNSAMPLE n # down-factors the number of points in a CUBE file by a factor of n
# new feature: isosurface ELLIPSOID id
# new feature: isosurface FunctionXY "data2d_xxxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
# new feature: isosurface FunctionXY "data2d_xyz_xxxx" {origin} {ni x 0 0} {nj 0 y 0} {nk 0 0 z}
# new feature: isosurface functionXY can be used for mapping.
# new feature: isosurface MAXSET n # removes larger fragment sets
# new feature: Jmol math within("branch", {atom1}, {atom2})
# new feature: jmolSetCallback("evalCallback", "someFunction")
# new feature: jmolSetCallback("evalCallback", "someFunction")
# new feature: label "scaleReference" if > 5.0 is taken to be a reference zoom setting
# new feature: load [file info] FILTER "[filter string]"
# new feature: load [file info] FILTER "[filter string];BIOMOLECULE n"
# new feature: load [file info] FILTER "BIOMOLECULE n"
# new feature: load [file info] FILTER "BIOMOLECULE n;NOSYMMETRY"
# new feature: load menu items for signed applet
# new feature: load of molecular dynamics topology file and coordinates
# new feature: measure {atomExpression or point} {atomExpression or point} ...
# new feature: measureCallback
# new feature: menu includes all standard color scheme options
# new feature: minimization CONSTRAINTS {xx} {xx} [{xx} [{xx}]] x.y
# new feature: minimization FIX {atom expression}
# new feature: minimizationCallback
# new feature: minimize CLEAR # flushes logged info and saved atom info
# new feature: minimize command -- mostly untested
# new feature: minimize CRITERION x.y
# new feature: minimize ENERGY # no stepping
# new feature: minimize menu item
# new feature: minimize STEPS n
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# new feature: MODEL/ENDMDL records in write PDB (still no TER records)
# new feature: mol file bond type 8 as partial
# new feature: MOL2 reader is PDB-enabled.
# new feature: more load FILTER options:
# new feature: new command:
# new feature: no saving of point group -- just recalculated each time
# new feature: Numerical left division (integer divide)
# new feature: pmesh BINARY "filename"
# new feature: pointgroups with vibration vectors
# new feature: PRELIMINARY aniso_beta for cif files -- has not been checked for correct Ortep type -- set to 0 for now
# new feature: print getProperty("modelInfo.models[3].file") syntax
# new feature: q = axisAngle("{x y x theta}")
# new feature: q = axisAngle({x y z}, theta)
# new feature: q = axisAngle(x, y, z, theta)
# new feature: q = quaternion("{x y z w}")
# new feature: quaterion % point4f --- "thetaDirected" --
# new feature: quaternion [w|x|y|z|a|r] [difference][2] [draw]
# new feature: quaternion derivative2 (2nd derivative) and quaternion e derivative [experimental]
# new feature: quaternion({atom expression}) -- returns calculated
# new feature: Ramachandran "r" --- includes third (Z) axis quaternion r difference2 X component equivalent
# new feature: random(a), random(a,b) where a is lower bound and b is upper bound
# new feature: reading COMPND and HEADER records of PDB file
# new feature: reading of Spartan spinput files (uses Odyssey reader)
# new feature: reset VARIABLES (replaces "reset ALL")
# new feature: rotate @{axisAngle(....)}
# new feature: rotate @{quaternion(....)}
# new feature: rotate axisAngle {x y z theta}
# new feature: rotate branch {atom1} {atom2} ...
# new feature: rotate quaternion {x y z w}
# new feature: save menu items for signed applet
# new feature: save/restore coordinates
# new feature: script APPLET appletName "some script"
# new feature: scriptCallback
# new feature: select whatever; quaternion draw
# new feature: select within(branch, {atom1}, {atom2})
# new feature: set atomPicking TRUE/FALSE
# new feature: set bondPicking TRUE/FALSE
# new feature: set delayMaximumMs sets the maximum delay that scripts will use, primarily for testing scripts
# new feature: set dotDensity [-3 to 3]
# new feature: set drawPicking now enables measuring among atoms and DRAW points
# new feature: set echo myecho [x y] and set echo myecho [x y %]
# new feature: set ellipsoidArcs [true]
# new feature: set ellipsoidAxes [true]
# new feature: set ellipsoidAxisDiameter x.y
# new feature: set ellipsoidBall [false]
# new feature: set ellipsoidDotCount [200]
# new feature: set ellipsoidDots [false]
# new feature: set ellipsoidFill [false]
# new feature: set fontScaling TRUE/FALSE
# new feature: set loglevel 6 allows a "debugHigh" setting
# new feature: set messageStyleChime
# new feature: set pdbGetHeader TRUE # to get the header when loading (for Protein Explorer)
# new feature: set pdbSequential (default FALSE) for custom PDB files
# new feature: set PICKLABEL "xxx" -- allows customized pick reports
# new feature: set pointGroupDistanceTolerance (default 0.2 angstroms)
# new feature: set pointGroupLinearTolerance (default 8 degrees)
# new feature: set quaternionFrame "c" "p" "q"
# new feature: set quaternionFrame "N" -- for solid state NMR PISEMA 15N chemical shift frame
# new feature: settable Van der Waals radius using {carbon}.vanderwaals = 1.7
# new feature: show atom(s)
# new feature: show chain(s)
# new feature: show group(s)
# new feature: show info
# new feature: show minimization
# new feature: show orientation moveto # just the moveTo; no comments
# new feature: show residue(s)
# new feature: show rotation aka show orientation rotation
# new feature: show selected
# new feature: show sequence
# new feature: show translation aka show orientation translation
# new feature: show vdw shows a listing of the currently set VDW radii
# new feature: signed applet allows "load ?" and includes previewer
# new feature: signed applet may write file, images, scripts, variables to disk. User dialog is required.
# new feature: signed applet shows frank "Jmol-S" which is NOT removable.
# new feature: signed applet/application load ?xxx uses load dialog
# new feature: sin(x), cos(x)
# new feature: spacefill/dots/geosurface/cartoon/trace/etc. ONLY
# new feature: spacegroup/symmetry for CML files with <module> tags
# new feature: Spartan archive reader now reads aromatic bonding
# new feature: Spartan archive reader now reads aromatic bonding
# new feature: Spartan input files read as Odyssey format
# new feature: sqrt(x)
# new feature: State save of property_xxx now in easily readable Jmol Data Format
# new feature: straightness, defined as:
# new feature: support for application transparent background -- "-b" command switch (testing only)
# new feature: syncCallback -- intercepts messages that would otherwise go to applets for syncing
# new feature: threaded option for command processor
# new feature: webexport now cleans up scratch files on deletion of instances and program exit.
# new feature: webexport now compresses data files over 512 MB
# new feature: wildcard at beginning for draw/pmesh/isosurface/etc. *xxx on/off/delete allowed
# new feature: within(structure,atom_expression)
# new feature: write GIF
# new feature: write pointGroup
# new feature: write pointgroup draw delivers draw commands
# new feature: write quaternion [w|x|y|z|a|r] [difference][2] [draw]
# new feature: write RAMACHANDRAN draw
# new feature: write/show pointgroup gives counts and tab-separated listing;
# new feature: x = getProperty("minimizationInfo")
# new feature: x = quaternion({center_or_point}, {atomX_or_point}, {atomXY_or_point})
# new feature: x = quaternion(q, "id", {center})
# new feature: x = script("some script", "appletName")
# new feature: xyz reader reads partial charge in 5th field
# new feature: zap {atom expression} # zaps models associated with given atoms.
# new feature: ZAP clears undo stack
# new feature: zip file reading extended to write FILE

Read more

15 of 5 results