chem-highlighter
Highlighting API for chemical molecules. Given a molecule and a set of atoms/bonds/rings to
color, produces highlighted SVG/PNG/console output, or plain format conversion (SDF, Mol, RXN,
CDX, CDXML, SMILES, InChI, InChIKey, SVG, EPS, PNG). Backend-agnostic: RDKitMolecule (built in,
uses RDKit for everything) implements the HighlightBackendMolecule ABC; other backends can
implement the same ABC against a different underlying engine, so code written against
HighlightBackendMolecule is not tied to RDKit specifically.
Document (also in chem_highlighter/hml.py) wraps a list of molecule-backend instances
parsed from a single input, for formats that can legitimately hold more than one structure: SDF
(every record, not just the first), RXN (reactants/agents/products), CDXML (any number of
fragments), and dot-separated SMILES. HighlightBackendMolecule.from_bytes keeps its existing
single-molecule restrictions unchanged (e.g. still rejects multi-fragment CDXML); Document
is the opt-in multi-molecule path built on top of it.
Prerequisites
Python >= 3.10, < 3.15. RDKit, matplotlib, numpy, polars, scipy, msgspec are pulled in as dependencies.
Installation
pip install chem-highlighter
For a local development install:
pip install -e .
# or: uv sync
Usage
import msgspec
from chem_highlighter import RDKitMolecule, HML
doc = RDKitMolecule.from_string("c1ccccc1O", "SMILES")
doc.cleanup()
hml = HML(highlighted_atoms={6: 0}, palette=["#ff0000"])
doc.highlight_from_json(msgspec.json.encode(hml).decode())
svg = doc.to_svg()
png = doc.to_png()
HighlightBackendMolecule (chem_highlighter/hml.py) is the actual interface: construction
(from_bytes/from_string/from_mol/from_molblock), export (export/export_string/
to_molblock/to_svg/to_png/to_console), and editing (cleanup, kekulize,
align_to_reference, hide_hydrogens, highlight_from_json) — each editing method is one-shot
per document (calling it twice, or in the wrong order relative to another, raises ValueError);
see the class docstrings for the exact rules.
Modules
hml— theHighlightBackendMoleculeABC, the multi-moleculeDocumentclass, andHML/HMolhighlight-payload types.backend/rdkit.py—RDKitMolecule, the RDKit-backed implementation.align— align one molecule to another via bond flips + rotation (used byalign_to_reference).decomposer— R-group decomposition, core/residue splitting, and plotting decomposed sets.diff— highlight the difference between two SMILES strings.modify— rotate/mirror/flip-bond primitives on RDKit molecules.state— save and restore RDKit atom state (used internally bymodify/align).table— render a Polars DataFrame as an AG Grid HTML table.utils— shared helpers: conformer comparison, high-precision V3000 export, PNG render options, color/console formatting.
Environment variables
PNG rendering (RDKitMolecule.export/to_png, utils.get_png_render_options) reads:
CHEM_HIGHLIGHTER_PNG_WIDTH,CHEM_HIGHLIGHTER_PNG_HEIGHT— bounding box in pixels; the molecule is scaled to fit and centered. If only one is set, the other mirrors it. Unset: keeps the default RDKit canvas sizing (unbounded).CHEM_HIGHLIGHTER_PNG_TRANSPARENT—truefor a transparent background instead of white.
Named to match the PNG env vars of other backend implementations, so a caller using more than one backend configures PNG output once.
Testing
pytest
mypy .
ruff check .
Coverage is configured for 100% (the [tool.coverage.report] section of pyproject.toml,
fail_under = 100). vulture is configured to flag dead code ([tool.vulture]).
Some tests (the image/PNG-size tests in tests/test_rdkit.py, the shared assertions in
tests/backend_test.py) rely on native RDKit rendering; no native/OS-specific setup needed
beyond the pip install above.
License
MIT, see LICENSE.
Metadata
Release files for chem-highlighter 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| chem_highlighter-0.3.3.tar.gz | 70.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| chem_highlighter-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 113.8 kB
Release files / chem_highlighter-0.3.3.tar.gz
| Download URL | chem_highlighter-0.3.3.tar.gz |
|---|---|
| Size | 70.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7637c1abf7dcd361e6a382f08cc565784219525fb8c913cefabdae0a943945d1
|
|
BLAKE2b-256 checksum How to use checksums |
cb460df575168d8e4df094e850bdcc871cccae9455f22f522cdcd2a5f1e79454
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logRelease files / chem_highlighter-0.3.3-py3-none-any.whl
| Download URL | chem_highlighter-0.3.3-py3-none-any.whl |
|---|---|
| Size | 43.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b3af75cec81766a46ec1c293d63f54f9821e6be7e2d5b0984f7292be608dc169
|
|
BLAKE2b-256 checksum How to use checksums |
20e9b607e942b85697c4f0b7c40e83a7b63a90769df616fe497b42d8a3aa825a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logSecurity for chem-highlighter 0.3.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for chem_highlighter-0.3.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.