# \[ANN\] MoleculeHub: A set of cheminformatics tools in Julia

**URL:** <https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415>\
**Category:** Package Announcements\
**Created:** [September 15, 2025, 7:02pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415 "2025-09-15T19:02:17Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 15, 2025, 7:02pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/1 "2025-09-15T19:02:18Z")

</div>

In an effort to bring cheminformatics to Julia, I’ve launched [MoleculeHub](https://github.com/MoleculeHub) which focuses on tools for working with small molecules.  
Right now, there’s:

- `MoleculeFlow.jl` - a cheminformatics tool that wraps RDKit and builds on top of it.
- `OpenBabel.jl` - a way to call Open Babel library from Julia
- `MoleculeDatasets.jl` - a simple way to download cheminformatics datasets.
- A library for more advanced molecular visualization (work in progress)
- A library with common and lesser-known substructure filters (work in progress)

The idea is to bring the some fundamental cheminformatics tools to Julia which would allow to do more interesting things in it.

---

<div class="post-metadata">

**Author:** ![davide.crucitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davide.crucitti/32/218224_2.png) [@davide.crucitti](https://discourse.julialang.org/u/davide.crucitti)\
**Post date:** [September 16, 2025, 8:56am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/2 "2025-09-16T08:56:22Z")

</div>

This looks great! I may actually make use of it very soon: just yesterday I was looking into pycalls for Mordred.  
How does this compare to MolecularGraph.jl? Do the two libraries integrate or have some common underlying data structure?  
What are your plans for future features? I’m not very interested in the visualization aspect but I may help implementing other functionalities such as descriptors or substructures.

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 16, 2025, 10:18am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/3 "2025-09-16T10:18:54Z")

</div>

You mean how `MoleculeFlow.jl` compares to `MolecularGraph.jl`? The other two are very different packages.

There are quite a few differences:

- `MolecularGraph.jl` uses a graph as it’s base representation, whereas `MoleculeFlow.jl` uses a simple struct to hold information about a molecule. There’s the option to convert to a graph if one desires but it’s not as feature-rich. There’s no integration between two libraries, at least not currently.

- `MolecularGraph.jl` chooses to go more “low level” when it comes to source libraries, such as `inchilib` or `coordgen` or `RDKit MinimalLib`, which severely limits the available functionality, unless one decides to do write everything from zero. `MoleculeFlow.jl` wraps `RDKit` as its sole source library, which gives it access to everything `RDKit` has to offer. I’ve ported the majority of functionality most people should ever need but `RDKit` is huge, so there’s plenty to add if one desires. Additionally, doing certain things in `RDKit` requires knowing some of its more “arcane” syntax, so `MoleculeFlow.jl` is there to make it simpler for the user.

I don’t really have a development roadmap, I just like Julia and I’ve spent my entire PhD working with RDKit, so I figured this would be something fun to do. I guess you could say that I’m making tools that I wish I had when I first started.

The plan for now is to finish the visualization and filtering libraries (pretty close on both), add some polish here and there, port some niche functionality I had to develop in `RDKit` way back and that would be more or less it. Anything after that would depend on my mood/availability and/or user feedback, if the tools gain any traction. There’s ML, quantum chem, docking, whatever else. I know SciML is Julia’s thing, so maybe there will be opportunities in that domain. It would be cool to integrate with and/or develop something on top of this that python can’t provide.

---

<div class="post-metadata">

**Author:** ![davide.crucitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davide.crucitti/32/218224_2.png) [@davide.crucitti](https://discourse.julialang.org/u/davide.crucitti)\
**Post date:** [September 16, 2025, 10:44am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/4 "2025-09-16T10:44:52Z")

</div>

I see, this seems a great approach to me. While I do like the MolecularGraph idea of implementing everything (or almost) in Julia, I feel it is more pragmatic to start with RDKit so that at least we can work on real projects.  
One of the main reasons I don’t work mostly in Julia is the lack of these functionalities, having an easy way to hook into RDKit may make this much easier.  
I guess that if your library bases the molecular information on RDKit it should also be simple to pass information to MolecularGraph through the RDKit object.

I’ll try to set aside some time in these days to take a deep look at what you have implemented. If you need help with something let me know and I’ll be happy to help out.

---

<div class="post-metadata">

**Author:** ![Noob](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/noob/32/6595_2.png) [@Noob](https://discourse.julialang.org/u/Noob)\
**Post date:** [September 16, 2025, 1:09pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/5 "2025-09-16T13:09:01Z")

</div>

Thank you for this - it looks extremely useful.

---

<div class="post-metadata">

**Author:** ![kevbonham](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kevbonham/32/216165_2.png) [@kevbonham](https://discourse.julialang.org/u/kevbonham)\
**Post date:** [September 17, 2025, 2:38am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/6 "2025-09-17T02:38:32Z")

</div>

Years ago there was a chemometrics person that was very active in the community and wrote a bunch of packages. At some point he stepped away, but a lot of his work is still around.

It’s not my field, so I have no idea if it’s helpful at all, but might be worth taking a look at [GitHub - caseykneale/ChemometricsTools.jl: A collection of tools for chemometrics and machine learning written in Julia.](https://github.com/caseykneale/ChemometricsTools.jl)

---

<div class="post-metadata">

**Author:** ![frtps](https://avatars.discourse-cdn.com/v4/letter/f/73ab20/32.png) [@frtps](https://discourse.julialang.org/u/frtps)\
**Post date:** [September 18, 2025, 1:37am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/7 "2025-09-18T01:37:41Z")

</div>

CrystalInfoFramework.jl may be of interest. OpenBabel already supports input of data in CIF and mmCIF formats, so CrystalInfoFramework.jl is probably more useful if you want native Julia parsing. For example, a table of atomic positions with additional information (atom type etc.) in a CIF/mmCIF file is returned as a DataFrame, albeit in fractional coordinates instead of the Cartesian coordinates OpenBabel conveniently provides.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 18, 2025, 10:19am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/8 "2025-09-18T10:19:31Z")

</div>

BioStructures.jl also parses mmCIF into a structured object. And PDBTools.jl reads them into a custom array of atoms.

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 19, 2025, 1:18am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/9 "2025-09-19T01:18:32Z")

</div>

### [MoleculeView](https://github.com/MoleculeHub/MoleculeView.jl) is here

A tool that allows you to explore molecular data more visually, like in the examples below. Should be in the registry in a couple of days.

![aaa](https://global.discourse-cdn.com/julialang/original/3X/6/6/663bca04a9de66b0e93d076c4de45a427dcdee09.gif)  
 ![scatter_demo_cat](https://global.discourse-cdn.com/julialang/original/3X/8/5/85def9837b8018a721fd2c308dde4b0ae458e8c0.gif)  
 ![grid_demo](https://global.discourse-cdn.com/julialang/original/3X/1/3/1344b53ae22baec0044fa8c60555f312a25d057b.gif)

---

<div class="post-metadata">

**Author:** ![Acey](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/acey/32/8438_2.png) [@Acey](https://discourse.julialang.org/u/Acey)\
**Post date:** [September 21, 2025, 4:01pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/10 "2025-09-21T16:01:08Z")

</div>

I like it, great project and of course I “starred” it.

I do not want to capture the thread, but I also started a related project that is a 3D viewer for Chemfiles: [ChemfilesViewer.jl](https://github.com/alexriss/ChemfilesViewer.jl)

If there is interest, I might be able to improve it and also expand the integrations.

---

<div class="post-metadata">

**Author:** ![matnbo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/matnbo/32/220166_2.png) [@matnbo](https://discourse.julialang.org/u/matnbo)\
**Post date:** [September 21, 2025, 8:47pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/11 "2025-09-21T20:47:13Z")

</div>

> [@kevbonham](#):
>
> Years ago there was a chemometrics person that was very active in the community and wrote a bunch of packages. At some point he stepped away, but a lot of his work is still around.

About Chemometrics, this one is active:

> **[GitHub - mlesnoff/Jchemo.jl: Tools for chemometrics and machine learning on...](https://github.com/mlesnoff/Jchemo.jl)**
>
> Tools for chemometrics and machine learning on high-dimensional data (e.g. Partial least squares regression/discrimination)

(But this is not about representation of molecules)

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 25, 2025, 10:00am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/12 "2025-09-25T10:00:41Z")

</div>

MoleculeView grid now supports range selection for numerical variables:

![aaa](https://global.discourse-cdn.com/julialang/original/3X/1/2/122ebeb662dc9e84b1d55e416025c5ceb3c20b9e.gif)

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 27, 2025, 11:02am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/13 "2025-09-27T11:02:46Z")

</div>

Some more updates:

Development of MoleculeFlow.jl and MoleculeView.jl has reached a point with which I’m fairly happy, so the focus for both will be generally bug fixing.

MoleculeView.jl has added functionality that is summarized by the gif below:

![aaa](https://global.discourse-cdn.com/julialang/original/3X/5/e/5e8d60bb3e196a7a2cb982a8881253ad54f76e73.gif)

MoleculeFlow.jl now has 200+ functions ported, which covers maybe ~70% of RDKit (a number I pulled out of the air). Refer to its API docs to get a sense of what’s covered.

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [September 28, 2025, 11:53pm UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/14 "2025-09-28T23:53:44Z")

</div>

#### [MoleculeScreen](https://github.com/MoleculeHub/MoleculeScreen.jl) is here (pending registration), which implements some common structural filters (PAINS, Lipinski, etc).

This more or less concludes “phase 1” of MoleculeHub development. The project is now in maintenance/bug fixing mode until I have more time/desire to put work into it, or until people get interested in contributing.

If people run into bugs, please submit an issue in the appropriate repo.

---

<div class="post-metadata">

**Author:** ![mojaie](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mojaie/32/37273_2.png) [@mojaie](https://discourse.julialang.org/u/mojaie)\
**Post date:** [December 10, 2025, 5:11am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/15 "2025-12-10T05:11:01Z")

</div>

Thank you for introducing such an interesting package.  
For now, due to my limited capacity, MolecularGraph.jl focuses on graph-based algorithm development for my research and relies on RDKitMinimalLib for many general tasks in the field of chemoinformatics (Even I prefer to compile MolecularGraph.jl and use it from Python through its API). I appreciate that MoleculeHub provides interfaces that can support a wide range of general tasks.

---

<div class="post-metadata">

**Author:** ![FaultZone](https://avatars.discourse-cdn.com/v4/letter/f/e5b9ba/32.png) [@FaultZone](https://discourse.julialang.org/u/FaultZone)\
**Post date:** [May 6, 2026, 6:08am UTC](https://discourse.julialang.org/t/ann-moleculehub-a-set-of-cheminformatics-tools-in-julia/132415/16 "2026-05-06T06:08:30Z")

</div>

Little announcement - I’m happy to introduce [MoleculeDock.jl](https://github.com/MoleculeHub/MoleculeDock.jl), which allows for some simple docking routines in Julia for 58 targets.

![demo](https://global.discourse-cdn.com/julialang/original/3X/d/5/d5e2ff560a1dad465acf2fe09ec290d7dcd63b54.gif)
