represents a molecule with atoms atomi and bonds bondi.


gives the molecule corresponding to the input name.

Details and Options

  • Molecule is always converted to an optimized representation and treated as raw by functions like AtomQ and for purposes of pattern matching.
  • name can be any of the following forms:
  • "identifier"a systematic chemical name, SMILES or InChI string
    Entity["Chemical",entity]a chemical entity
    ExternalIdentifier[type,id]an external identifier of the given type
    BioSequence[type,seq]biomolecular sequence of the given type
  • For Molecule[ExternalIdentifier[type, id]], type may be one of "PubChemCompoundID", "PubChemSubstanceID", "InChI" or "ChEMBLID".
  • Creating a molecule from an ExternalIdentifier requires internet connectivity and uses external services to retrieve structural information.
  • For Molecule[BioSequence[type,seq]], type should be one of "DNA", "RNA" or "Peptide".
  • Atoms can be specified in the following forms:
  • "sym"atom with atomic symbol "sym" (e.g. "C", "Cl")
    Entity["Element",element]atom of a given element
    Entity["Isotope",isotope]atom of the specified isotope
    Atom[elemspec,"prop""val",]atom with specified properties
  • Bonds can be entered as Bond[{id1,id2},type], where idi is an atom index and type is one of "Single", "Double", "Triple" or "Aromatic".
  • Hydrogen atoms may be omitted from the atom list if their presence can be inferred from the valence and bonding of the atoms present.
  • Possible options include:
  • AtomCoordinatesAutomaticthree-dimensional coordinates
    IncludeAromaticBondsTruewhether to mark bonds as "Aromatic"
    MetaInformation<||>an association for user-supplied data
    StereochemistryElements Nonea list specifying stereochemical arrangement
    AtomDiagramCoordinatesAutomatictwo-dimensional coordinates
    ValenceFilling Automaticwhether to fill unmet valences with hydrogens
  • MoleculeQ[mol] gives True only if mol corresponds to a valid molecule expression.
  • Graph[Molecule[]] returns a Graph object.
  • Property values for molecules can be accessed via mol["property"], which is equivalent to MoleculeValue[mol,"property"].


open allclose all

Basic Examples  (4)

Create a molecule from a list of atoms and bonds:

Create a molecule from a chemical Entity:

Create a Molecule from a SMILES string:

Create a molecule from a systematic chemical name:

Scope  (2)

Molecule can parse a wide range of chemical nomenclature, reading and understanding the bits and pieces of a chemical name:

Each of the names created the same molecule:

Use "Element" and "Isotope" entities to populate the atom list:

The list of atoms has been converted to the canonical form:

Options  (5)

IncludeHydrogens  (2)

Create a Molecule from a SMILES string with implicit hydrogens:

Setting IncludeHydrogens to All will make all hydrogen atoms explicit:

These two expressions represent the same molecule and return the same property values:

But they have different memory footprints:

Create a molecule with a mixture of explicit and implicit hydrogen atoms:

The "SMILES" property will contain the explicit hydrogens:

But the "CanonicalSMILES" property will not:

StereochemistryElements  (2)

Create a molecule with a defined stereocenter:

Find its absolute stereo configuration:

Create its enantiomer:

Find its absolute stereo configuration:

Create a molecule with defined geometry around a double bond:

Next, create its geometric isomer:

The geometry is reflected in the SMILES and InChI identifiers:

ValenceFilling  (1)

By default, empty atomic valences will be filled with hydrogen atoms:

Use ValenceFillingNone to disable filling open valences:

Properties & Relations  (1)

Create a Graph from a Molecule:

Retrieve atom information from the graph using AnnotationValue:

Possible Issues  (2)

Hydrogen atoms may be omitted from the atoms list and will be inferred from common atomic valence:

Each carbon atom:

A chemical formula is not sufficient to determine molecular structure:

Use Interpreter to find the appropriate "Chemical" entity first:

Neat Examples  (2)

Filtering a group of molecules for those containing a particular substructure or functional group is intuitive and simple. Create a list of molecules using the entity class:

Now use a SMARTS pattern to select only those ketones that are also diaryl ethers:

Generate 2D diagrams and highlight the diaryl ether functional group:

Create a WordCloud of different synonyms for the same molecule, together with the molecule's structure diagram:

Wolfram Research (2019), Molecule, Wolfram Language function, (updated 2020).


Wolfram Research (2019), Molecule, Wolfram Language function, (updated 2020).


Wolfram Language. 2019. "Molecule." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020.


Wolfram Language. (2019). Molecule. Wolfram Language & System Documentation Center. Retrieved from


@misc{reference.wolfram_2024_molecule, author="Wolfram Research", title="{Molecule}", year="2020", howpublished="\url{}", note=[Accessed: 19-July-2024 ]}


@online{reference.wolfram_2024_molecule, organization={Wolfram Research}, title={Molecule}, year={2020}, url={}, note=[Accessed: 19-July-2024 ]}