Jmol was originally intended to be a fully functional replacement for XMol which was a molecular viewing program developed at the Minnesota Supercomputer Center. Although the program executables were distributed, the source code was not available to users, and since the program was not maintained, the free binary versions became obsolete. For example, the SGI version of XMol did not run on IRIX 6.x because IRIX switched to a new executable format.
XMol's demise left a need for a similar tool. Dan Gezelter, the originator of Jmol, chose to avoid the same problems by making Jmol open source. Although it did not completely met the goal of functionally replacing XMol, Jmol duplicated many of the most useful features, and in some ways, it surpassed XMol functionality. In time, Jmol was hoped to include even more advanced features.
Jmol was started as an OpenScience project which is dedicated to writing and releasing free and open source scientific software. For more information about the OpenScience project, go to http://www.openscience.org/.
Later, Bradley A. Smith took over the project and did a lot of work in streamlining the project as well as the software. Under his leadership new releases found its way to the user base, and many new features were added, some of which contributed by users.
In the end of 2002, Egon Willighagen became the new project leader and a start was made with integrating Jmol with The Chemical Development Kit, something that was already planned in September 2000 by Dan, Egon and Christoph Steinbeck.
Miguel (Michael T. Howard) joined the project at the end of 2002, with the explicit goal of helping build Jmol into a viable replacement for the Chime plugin (offered by MDL).
In the first few months Miguel contributed the Spanish translation and made an initial pass at the RasMol/Chime script interpreter. He then made some performance improvements and began working on rendering performance and speed.
It quickly became apparent that the Java2D graphics did not provide the performance and functionality needed. In addition, it became clear that the core Jmol classes would not support the performance and space requirements for working with macromolecules with tens of thousands of atoms.
In the spring of 2003 Miguel began designing and implementing a high-performance software-based graphics engine. In order to ensure web deployment of the Jmol applet it was important that the engine run on version 1.1 Java Virtual Machines and that no specialized graphics hardware be required.
Miguel also rewrote the core classes in order to support much larger molecules. In addition, he separated all file IO from the Jmol core, making it much easier to support new file types.
An extended test period began at the end of 2003. During 2004 a small set of users around the world contributed to Jmol development by testing Jmol, explaining chemical concepts, and explaining scripting behaviors of RasMol and Chime.
Jmol version 10.0, an open source replacement for the Chime plugin, was released in December 2004. It was followed by an improved version 10.2 on April 2006.
Technical notes about the development of Jmol v.10
Shortly after 10.2 was released, Bob Hanson started leading the work on Jmol source code, and began adding extra features that were not available on Rasmol and Chime –many of them after users' timid questions or dreams–. As a consequence of a huge amount of work, version 11.0 was released in February 2007, followed by versions 11.2 in August, 11.4 at the beginning of 2008 and 11.6 in October 2008.
These are some of the more outstanding capabilities added:
- Input and output:
- Loading multiple files, even with multiple models each. Files can be loaded sequentially into new "frames" or appended into the current frame so as to merge two datasets into one.
- Save and restore the state of the model. Such "snapshots" can be used to copy the model in a pop-up window, save it for later retrieval, send a specific view of a specific model via email to a colleague.
- Support for remediated PDB.
- Support for SITE records in pdb and cif.
- Mac Spartan06 directory reading.
- Reading models from zip files. Reading text-based content of zip and jar files.
- Molden reader.
- gOpenMol formatted plt files for isosurfaces.
- Export of VRML.
- Much improved POV-Ray export (application only).
- Several data can be written to file (application only) or to the clipboard. This includes the model, an image, the script history, the current state, the current molecular orbital, or the current isosurface.
- On-the-fly creation of jpeg "snapshots" of the displayed window (both application and applet). Scripted writing of these snapshots allows creation of movies using commonly available tools.
- The Jmol application includes the WebExport add-on, which allows to easily create web pages that include an applet featuring the current display of the model.
- Jmol variables and arithmetic:
- Use of variables and arithmetic operations.
- if/else/endif constructs in scripts.
- if/while/for capability.
- A wide variety of properties are now retrievable, making Jmol a generalized portal to file-based molecular structure information.
- User-defined data types and selective application of external file atomic data to a model for color-based visualization of properties.
- Variables can be defined and manipulated using a simple arithmetic involving boolean (true/false), integer, decimal, string, array, point, and plane data types.
- Crystallography:
- Include the concept and manage crystallographic symmetry.
- Define arbitrary space groups and unit cells for any model from any file format, even if that information is not contained in the file and the coordinates are not fractional.
- Planar slices through a model based on Miller index planes.
- Extended options for unit cell and boundbox.
- Scripting:
- Designate callback functions on the fly.
- A robust script queuing mechanism is installed so that multiple scripts can be initiated without danger of one interrupting another.
- AJAX support is built into Jmol.js so that any applet on any web page can access any model on any location on the web anytime.
- A new message command for communicating customizable script status back to the web page while a script is running.
- User-defined macros, subroutines, and functions.
- Edition of the model:
- Bonds can be created, modified or deleted at will. This includes single, multiple, aromatic and several types of partial bonds.
- Atoms can be moved at will from their original positions specified in the file.
- Translation, rotation, spinning, and point/plane inversion of selected atoms.
- Atom properties can be set directly using Jmol math or with an array.
- Biopolymers:
- Helixes as barrels instead of rockets.
- Recalculate secondary structure on the fly after selecting a specific set of alternative atom locations.
- Generate an interactive Ramachandran plot calculated from the current model.
- Surfaces:
- Drawn objects: spheres, ellipsoids, dipole vectors, points, lines, triangular and quadrilateral planes, straight and curved three-dimensional arrows.
- Pmesh support for more than planes.
- LCAO "cartoons".
- Arbitrary f(x,y) surfaces.
- Support for isosurfaces other than cube files.
- Handle molecular orbitals.
- Direct computation of molecular orbital surfaces from file-based atomic orbital basis and coefficient data.
- Molecular electrostatic potential maps from file-based charge data.
- Molecular surfaces: fixed-atomic-radius, adjustable-radius van der Waals, solvent-accessible, solvent-excluded, biomolecular cavities.
- Surfaces can be created automatically using command line options for the application.
- The Jmol Voxel File Format (JVXL) with a compression ratio on the order of 300-600:1 over color-mapped cube files allows delivery of full protein color-mapped solvent-accessible and solvent-excluded surfaces. Jmol application can write these surface files to disk, then applets can display the surfaces almost instantly.
- Color-contour-mapped planes and arbitrary f(x,y) surfaces.
- Isosurface mapping of molecular electrostatic potential and molecular orbital data onto planes.
- Calculation of distance to surfaces.
- Annotate a model by placing text at any {x y z} coordinate.
- Select and remove atoms based on one or more defined planes.
- Designate a particular model as a "background" model in multi-frame setups.
- Custom stereo viewing coloration.
- Rotate and spin the model around any molecular-referenced axis completely independently of any orientation set by the user.
- Navigation mode allows "fly-throughs" of the model.
- New industry-standard translucency of objects, producing vivid rendering of multiple translucent objects at eight levels of translucency.
- Antialiasing for the display and the exported images.
- Change interface language on-the-fly, via pop-up menu or script.
- Customizable pop-up menu.
- Display frame-specific titles and model-specific echos.
- Change model to wireframe while it is rotated.
- Several applets in a page can be synchronized, so that actions on the model in one of them are transmitted to models in the other applets.
There are lists and demonstrations of the features added in Jmol 12.0 | Jmol 11.8 | Jmol 11.6 | Jmol 11.4 | Jmol 11.2 | Jmol 11.0 | Jmol 10.2.
Former history:
Jmol 10.x
- Altered CmlReader.java adapter to allow cml input to applet by reading DOM nodes from the browser. (TOHW)
- Completed much of the CdkJmolAdapter: PDB properties are now supported, and ChemSequence/ChemModel is mapped to AtomSetCollection/AtomSet. (EW)
- Added reading of input structures from Mopac files. (EW)
- Added Folding@Home (folding.stanford.edu) current.xyz files reader. (NV)
- Added Unicode support in scripts. (MTH)
- Added rendering of mesh surfaces.
- Added rendering of polyhedrals. (MTH)
- Added Drag-and-Drop to the application for JVM 1.5 and better. (ST)
- Added the DADMLBrowser plugin allowing retrieving chemical information from the internet by queries on indices and URIs like dadml://any/pdbid?1CRN. (EW)
- Added support for Spartan '04 smol files. (EW)
- Added substructure command for SMILES pattern matching. (NV)
- Dutch, Estonian, Hungarian, Portuguese, Romanian translations of Folding@Home webpage. (PV,IS,FL,CPN,TIM)
- Spanish translation of Application, Applet and website. (AH)
- Estonian translation of Application and Applet. (IS)
Jmol 10.0
- Rearchitected and reimplemented Jmol core (MTH)
- Architected and implemented org.jmol.g3d graphics rendering engine for high-performance 3D rendering of molecules without hardware support (MTH)
- Architected and implemented org.jmol.viewer core data structures (MTH)
- Architected and implemented support for protein secondary structures (MTH)
- Rearchitected and reimplemented file io system (MTH)
- Architected org.jmol.api.JmolAdapter api to separate file IO from graphics rendering (MTH)
- Wrote org.jmol.adapter.smarter.Resolver to provide automatic identification of file types (MTH)
- Implemented most file types within org.jmol.adapter.smarter, including xyz, mol, pdb, cif/mmCif, gaussian, jaguar, shelx, etc. (MTH)
- Wrote Jmol.js JavaScript library to facilitate development of web applications. (MTH)
- Wrote JmolAppletControl mechanism to support browsers without JavaScript (MTH)
- Extended and ensured portability of core JmolApplet to web browsers with Java 1.1, including Netscape 4.7 and Internet Explorer on both Win32 and Mac OS 9 (MTH)
- CmlReader, CdkModelAdapter, cdk integeration, wiki, general project administration (EW)
- Provided significant support and testing in the areas of polymer definitions, web application development, JavaScript, and Mac OS X portability. (TD)
- French translation, code cleanup, JavaDoc, readers (NV)
- AtomSetChooser mechanism, improved Gaussian reader, implemented NWChem reader (RK)
- Assistance in areas of multiple models, insertion codes, polymer definitions, applet testing (JR)
- wiki.jmol.org (OS)
- Interactive scripting tutorial, applet testing (RH)
Jmol 9
- Activated a plugin architecture for CDK plugins. (EW)
- Fixed a number of IO bugs (closes #783663, #823957 and #826934) (EW)
- Fixed run target in Ant build.xml. (EW)
- Added feedback on memory usage to statusbar. (EW)
- Added reader and writer for HIN (HyperChem) format (RG)
- Added help button in script window. (EW)
- Added license item in help menu. (EW)
- Fixed calculation of unit cell angles in crystal property box (closes #865393 and #863644). (EW)
- Fixed reading of unit cell angles from ShelX files. (EW)
Jmol 8
- Made detection of MDL mol files more flexible, allowing v2000 with lower case too. (EW)
- Auto-decompress gzipped files. (MTH)
- Corrected documentation to state that J2SE 1.4 is required (closes #769822). (EW)
- Implemented a script command history. (AS)
- Fixed ReaderFactory buffer.reset() problem (closes #799963) (MTH)
- Fixed reading of CML2 style crystal data (closes #792091), and detection of CML files without the XML declaration. (EW)
- Repaired Recent Files, add double Click to select, fixed window Title. (MTH)
- Added a --help option to the command line. (EW)
- Added JmolAppletProxy to allow applets to fetch remote files. (MTH)
- Added Chinese GUI translation. (CPY)
- Added CIF/mmCIF reader with minimal features. Reads unit cell parameters, and atomic coordinates, but not space group symmetry operations (effectively only P1 correctly). (EW)
Jmol 7
- Reimplementation of rebonding algorithm using BST. (MTH)
- Added VASP reader. (FD)
- Added Gaussian 03 reader. (JRK)
- Fixed reading of frequencies in Jaguar 4.2.77 output files (bug #749430). (EW)
- Fixed reading of frequencies in AcesII output files (bug #740967). (EW)
- Added new window option (feature #743640). (CR2)
- Fixed reading of some ABINIT output files (feature #746494). (FD)
- Fixed some JavaDoc. (EW)
Jmol 6
- Reimplementation of rendering with perspective depth support and performance improvements. (MTH)
- Moved IO classes into separate package. (EW)
- Moved rendering classes into separate package. (MTH)
- Jmol is now based on CDK (Chemistry Development Kit). (EW)
- Added Spanish translation. (MTH)
- Display speed can be displayed in milliseconds and in frames per second. (EW)
- Reimplementation of scripting functinality with support for most RasMol/Chime scripting commands. (MTH)
Jmol 5
- Internationalized Jmol and added Dutch translation. (EW)
- Fix for reading some of MOPAC 2002 files. (Files without a blank line after the coordinates.) (BS)
- Fix reading of large PDB files. Multiple models are read into separate frames. (BS)
- Improved reading of PDB atom types by using element from first two columns of atom name. (BS)
- Temporary removal of defective parsing CONECT fields by PDB reader. Once fixed, the feature will be reinstated. (BS)
- Crystal properties dialog, and unit cell visualization has been added. (FD)
- ABINIT energy data reading is added. (FD)
- Added reader for ShelX97 files containing a crystal structure. (EW)
- Translated the Jmol GUI into Spanish. (MTH)
- Fixed the PropertyGraph. Data is no longer duplicated on reopening the dialog and data of previous file is deleted when opening a new one. (EW)
- Fixed NullPointerException in deleting atom, and bug in determining wether the ChemFrameRenderer should update its cache. (EW)
Jmol 4
- Reading of MOPAC 97 and 2002 files. Formerly, only MOPAC 7 files worked. (BS)
- Jmol can now also read files in non-CML with the command "jmol <filename>". (feature #555462). (EW)
- The PDB reader now also parses CONECT fields and implements Rasmol's perception of bond orders. (EW)
- Atoms can now also be colored by their partial atomic charge. (feature #552476) (EW)
- Addition of a ABINIT reader. (FD)
- PDF export. (feature #533212) (BS)
Jmol 3
- Export of BMP and PNG images. (CR)
- Rendering of multiple bonds. (BS, JJ)
- Scaling of vector arrowheads by magnitude which shows significant vectors more clearly. (BS)
- Fixed bugs 547574 and 548591. (BS)
- Adjustable scaling of vector length from -2.0 to 2.0 times length. (BS)
- Import of Ghemical MM files. (EW)
- Automatic file type determination used for all loading of files. (BS)
Jmol 2
- Relicensed as LGPL.
- Simplified interface by combining toolbars and removing unimplemented menu items. (BS)
- Improved interface to POV-Ray. (MM)
- Fixed vector rendering. (BS)
- MDL file reader. (JJ)
- Fixed reading certain GAMESS and Dalton files. (bug #529999)
- Major update CML import.
Jmol 1.2
- Fixed line separator for XYZ output. (bug #519101)
- Added rudimentary PDB output. (bug #519100)
Jmol 1.1
- Bugfix release
- Fixed PDB reading. (bug #496332)
- Fixed jmol script to work on Solaris. (bug #425925)
- Added workaround for precompiled Jmol on Solaris. (bugs #426229, #508364)
- Removed infinite loops. (bug #426679)
- Fixed problems with file type setting
- Added cancel button to RecentFiles dialog
- Bond computation is now really setable. (bug #431146)
Jmol 1
- Reads output files from Jaguar, Dalton, MOPAC, and Gaussian 90/95. (BS)
- Migrated development to SourceForge.net
- New versioning scheme
- Maintenance
Jmol 0.6.1
- Many minor bugfixes (DG)
- Progress on JmolApplet (TG,BS)
- JmolFileFilter (TG)
- Bug fix in Animate (DG)
- Splash screen now has a status line (TG)
- DisplaySettings no longer used as static (BS)
- CMLReader replaces CMLFile (BS)
- Fewer dependencies on jmol.home property (BS)
Jmol 0.6
- New ChemFileReader/ReaderFactory architecture (BS)
- Can now read files from the following ab initio quantum chemistry programs: GAMESS, Gaussian92, Gaussian94, Gaussian98, Amsterdam Density Functional (ADF), Advanced Concepts in Electronic Structure II (ACES2) (BS)
- Animation of pre-computed Normal Mode Vibrations via the Extras -> Vibrate command (BS)
- Entirely new distance, angle, and dihedral measurement architecture (DG)
- Choice of smoother animation using interpolated frames (EW)
- Wireframe rotation code and menu choices (TG,DG)
- Jmol console to capture stdout and stderr (CF,BS)
- DisplaySettings moved out of various classes and into a single class (BS)
- Split of AtomType functionality into BaseAtomType (BS)
- Test Classes for various other classes (BS)
Jmol 0.5
- Numerous small bug fixes. (DG)
- FileSaver, XYZSaver and CMLSaver classes are new. You can now save the current structure to either XYZ or CML formats. (DG,EW)
- Package name is now org.openscience.jmol. (DG)
- Modifications to the CML parsing routines to use the new CML-1999-05-15.dtd (EW)
- DTD resolver that allows us to embed the current DTD in the jar file. (DG)
- Rewrite of file-I/O routines. They all implement ChemFile now. (DG)
Jmol 0.4
- Jmol can now parse Chemical Markup Language (CML) files thanks to E.L. Willighagen (EW)
- Many internal changes in the AtomType JTable supporting classes to reverse some stupid decisions I made early on. (DG)
- AtomTypeTable now stores the AtomType information as a resource (DG)
- Changes in AtomTypeTable headers to support multiple line headers (DG)
- StatusBar is now a 3-wide set of JLabels that post more useful information (DG,CS)
- Swing 1.1.1 Beta 2 (HTML labels if we want to use them) (DG)
Jmol 0.3
- PhysicalProperties (Charges, NMRShieldings, Vectors, etc.) can be set by the file readers. Christoph Steinbeck asked for this originally when he wrote GaussianFile. It was a good idea, and was worth the extensive rewrite. (DG)
- Swing 1.1.1 Beta 1 (fixes some annoying bugs for Java 1.1 users) (DG)
- The GaussianFile class has been updated to read general Gaussian files (not just G98) and to automatically compute chemical shifts using stored ab initio values for tetramethyl silane's chemical shift. (CS)
- Some bug fixes. (DG)
- Shaded bonds that look like cylinders. Well, at least they look a little bit like cylinders. End caps would be a nice addition, but I've been a bit busy lately. (DG)
- FileTyper and ImageTyper accessories for JFileChooser make choosing file types more sensible than just using the filename filter. These classes were rationalized after 0.2 had already been released. They also listen to the JFileChooser to try to guess what kind of file you just selected (only if UseFileExtensions is set). (DG)
Jmol 0.2
- Many internal changes.
- Jmol has moved to a new home. I've been working on a web site called "The OpenScience Project", and have registered a domain for it, so Jmol is the first of the software projects that is housed at www.openscience.org (DG)
- Christoph Steinbeck contributed a new input filter for Gaussian 98 log files, complete with a parser for NMR chemical shifts. (CS)
- The file readers now subclass a more general (but very simple) ChemFile class. This should make addition of other file readers easier. (DG)
- File Type selection is no longer dependent on the file's extension. You can select a "*.jnk" file and explicitly tell Jmol what kind of file it is when opening the file. (DG)
- There is a strange interaction between fillPolygon in jdk1.2 and the X server under Solaris x86. (And circles under jdk1.2 look lumpy on many architectures.) I've built a workaround into Jmol which involves talking directly to the Graphics2D object underlying the display panel to set some Rendering hints. This workaround has the benefit of making some really nice pictures when you want high quality (but lower speed). If you have jdk1.2, turn on AntiAliasing in the Preferences to see the difference. An unfortunate side effect is that you now need the jdk1.2 classes to compile (but not run) Jmol. (DG)
- A Jpeg encoder has been added. The JpegEncoder and its associated classes are Copyright (c) 1998, James R. Weeks and BioElectroMech. This software is based in part on the work of the Independent JPEG Group. (DG)
- Build process now uses a Makefile. (DG)
- The Makefile now has the ability to create javadocs of the source code. (HG)
Jmol 0.1.1
- Removed the extra double-buffering that resulted from not understanding that Swing components are automatically double-buffered. This resulted in substantial performance improvements. (DG)
- Fixed some depth strangeness in the drawn atom sizes. (DG)
- Fixed the bonds so that they render more realistically as the molecule is being rotated. End caps for the bonds are still in progress. (DG)
- Reordered the toolbar buttons and added a button for molecule deformations that will eventually do something useful. (DG)
Jmol 0.1
- There are some major new features, so the minor version number has been incremented. (DG)
- Atom Types are now editable using "Atom Properties" in the Edit Menu. This added a large chunk of interface code to do the JTable and cell editors and column sorters. The edited atom types are saved in the .jmol directory under the user's home directory. (DG)
- The Preferences dialog now saves preference info in the .jmol directory under the user's home directory. (DG)
- Reorganization of classes into a jar file. (DG)
- An atom selection mechanism now is working. (DG)
- Reorganization of source: BondTypeTable is gone, BondType is now replaced by Bond. Many other changes for new AtomTypeTable. (DG)
- Silly little Splash screen, but it makes startup feel faster when there is something popped up on the screen almost immediately.
- There is now a "Front" item in the View menu. The View menu actions are not intuitive yet, so they will be changing in a future version. Don't get used to them. (DG)
- There is a new "fast forward" button in the Animate dialog that takes the animation to the last frame. (DG)
- The Rewind, FastForward, Next, and Previous buttons in the Animate dialog now stop the animation when they are pushed. (DG)
- Swing version incremented to 1.1
Jmol 0.0.4
- Now using swing-1.1beta3, with all of the associated package name changes from com.sun.java.swing to javax.swing (DG)
- Fixed bug in jmol.bat script (DG)
- "What's New" menu item in "Help" menu displays a dialog with the contents of this file (DG)
- "doc" subdirectory, empty for now, but it's the thought that counts (DG)
Jmol 0.0.3
- Image encoders courtesy Jef Poskanzer were used to export GIF and PPM files (DG)
- New "Display" Menu with submenus for atoms, bonds, and labels (DG)
- New Icons courtesy Dean Jones were used whenever possible (DG)
Jmol 0.0.2
- Atom Labels (DG)
- multi-frame XYZ file-reads (DG)
- Animation (DG)
- Preferences dialog (DG)
Jmol 0.0.1
- Everything (DG)
- Sensible polygon vertexes for QuickDraw Bonds (MB)
- single-frame XYZ file reads (DG)
Miguel Howard (miguel_AT_jmol.org)
Egon Willighagen (egonw_AT_sci.kun.nl)
Tim Driscoll (driscoll_AT_molvisions.com)
Nicolas Vervelle (nvervell_AT_club-internet.fr)
Simon Tyrrell (smt40_AT_cam.ac.uk)
Oliver Stuker (revilo_AT_oc38.uni-paderborn.de)
Rene Kanters (rkanters_AT_richmond.edu)
Bob Hanson (hansonr_AT_stolaf.edu)
Jan Reichert (jr_AT_imb-jena.de)
Fabian Dortu (fabian.dortu_AT_wanadoo.be)
Bradley A. Smith (bradley_AT_baysmith.com)
Dan Gezelter (gezelter_AT_openscience.org)
Christoph Steinbeck (steinbeck_AT_ice.mpg.de)
Tom Grey (t.grey_AT_ic.ac.uk)
Charles Fulton (fultoncr_AT_ucarb.com)
Mike Beachy (beachy_AT_alum.mit.edu)
Hugo Garcia (elhugo_AT_objectchemistry.org)
Matthew Meinek (mmeineke_AT_nd.edu)
Jochen Junker (jochen.junker_AT_yale.edu)
Christian Ribeaud (christian.ribeaud_AT_genedata.com)
Jonathan C. Rienstra-Kiracofe (jrienst_AT_emory.edu)
Carl Resnikoff (carl_AT_resnikoff.net)
Agustí Sánchez (asanc_AT_users.sourceforge.net)
Chih-Peng Yang (cpyang_AT_siraya.net)
Rajarshi Guha (rxg218_AT_psu.edu)
Tache Ionut Madalin (madalin_AT_notme.org)
Friedmann Lívia (semper_fi_AT_galamb.net)
Ivo Sarak (ivo_AT_vendomar.ee)
Clodoaldo Pinto Neto (clodoaldo.pinto_AT_gmail.com)
Peter Vanwing (gagaman_AT_gmail.com)
Angel Herráez (angel.herraez_AT_uah.es)
Toby White (tow21_AT_cam.ac.uk)