This website is biased toward ReShiki, because its maintainer also maintains ReShiki. Please be careful.
BKChem Python 3 Modernized
A Python 3 fork of BKChem for drawing 2D molecular structures, reactions, and vector chemical figures.
Open source. 42 of 65 checklist features confirmed.
Main canvas
Would not run on our Mac
Would not run on our Mac
Default drawings
We could not finish testing this tool: GUI launched, but computer-use mouse actions did not open Tk menus or draw bonds. Stopped after about ten minutes; fixture imports and export checks could not be completed. This does not establish that those features are unsupported. --version also failed with TypeError: decoding str is not supported.
Would not run on our Mac
Caffeine
Would not run on our Mac
Paclitaxel
Would not run on our Mac
Cholesterol in 3D
- Default startup shows a blank white canvas with two toolbar rows.
- No fixture structure was imported; startup-window.png records the test blocker.
- Mouse actions did not open Tk menus under either attempted runtime.
- The version command failed before printing a version.
- Source metadata says 1.0.5; its About-version constant says 0.14.0-pre2.
Facts
- GitHub stars
- 211 stars on 6 Nov 2026
- First commit
- 15 Apr 2026
- Repository activity
- 9 commits, 1 contributor, last push 23 Apr 2026
- Runs on
- macOS, Windows, Linux
- License
- GPL version 2 or later; package metadata abbreviates this as GPLv2.
- Price
- Free
- Relies on
- BKChem, OASA, InChI. BKChem fork; bundled OASA; optional InChI executable provides identifier generation.
- Draws with
- Tkinter Canvas; custom SVG writer; Cairo and Piddle export backends
- Chemistry from
- Bundled OASA
- Interface
- Tkinter with Pmw (Python MegaWidgets)
- Main language
- Python
- Other languages
- None
- Renderer
- Borrowed: BKChem custom bond and label renderer (Tkinter Canvas)
- Third-party licenses
- Bundled OASA: GPL-2.0-or-later; PIDDLE: LGPL v2-or-later; PDFgen: permissive notice-retention and no-endorsement terms.
- Download
- 3.1 MB
- Installed
- 29 MB
- Source distribution only; no tagged releases or binary installers. Runtime was not tested.
- The full Python 3 port claim conflicts with incompatible validation, style, CDXML, batch and legacy-plugin code.
- Legacy manual export lists and SMILES warnings disagree with current code; scripting examples retain Python 2 syntax.
Features
- Tested by running it
- Seen in the app
- The manual says yes
- Partly, with the reason shown
- Not supported
- Not established, which is not the same as no
Select a mark for its proof. A filled mark opens our screenshot, or the manual if the check left nothing to picture. A ring opens the manual.
Drawing structures
- Partly: Bond buttons visible; automated canvas clicks produced no drawing. Opens the cited page.Single, double and triple bondsBond buttons visible; automated canvas clicks produced no drawing.github.com
- Yes, according to the manual: Wedge, hatch and wavy adder bonds are implemented. Opens the cited page.Wedge, hash and wavy bondsWedge, hatch and wavy adder bonds are implemented.github.com
- Not establishedDative, hydrogen and quadruple bonds
- Yes, according to the manual: Shift-click cycles double-bond centering and side. Opens the cited page.Choose double-bond sideShift-click cycles double-bond centering and side.github.com
- Yes, according to the manual: Built-in benzene and three- through eight-membered ring templates. Opens the cited page.Ring toolsBuilt-in benzene and three- through eight-membered ring templates.github.com
- Yes, according to the manual: Includes a cyclohexane chair template. Opens the cited page.Chair and Haworth ringsIncludes a cyclohexane chair template.github.com
- Partly: Keyboard adds fixed-length chains; no drag-to-length chain tool. Opens the cited page.Chain toolKeyboard adds fixed-length chains; no drag-to-length chain tool.github.com
- Yes, according to the manual: Includes purine and other heterocyclic structure templates. Opens the cited page.Template libraryIncludes purine and other heterocyclic structure templates.github.com
- Yes, according to the manual: Save As Template stores named reusable structures. Opens the cited page.Save your own templatesSave As Template stores named reusable structures.github.com
- Yes, according to the manual: Known groups including Ph and OMe can be expanded. Opens the cited page.Group abbreviationsKnown groups including Ph and OMe can be expanded.github.com
- Partly: Charges and element labels supported; isotope editing is unverified. Opens the cited page.Charges, isotopes and atom labelsCharges and element labels supported; isotope editing is unverified.github.com
- Yes, according to the manual: Radical, biradical and electron-pair marks. Opens the cited page.Radicals and lone pairsRadical, biradical and electron-pair marks.github.com
- Partly: Keyboard label editing requires selecting atoms first. Opens the cited page.Keyboard drawingKeyboard label editing requires selecting atoms first.github.com
- Partly: Rectangle selection; rotation, mirroring and scaling use separate commands. Opens the cited page.Lasso select and transformsRectangle selection; rotation, mirroring and scaling use separate commands.github.com
- Yes, according to the manual: Dedicated 3D rotation mode tilts molecular drawings. Opens the cited page.Tilt drawings in perspectiveDedicated 3D rotation mode tilts molecular drawings.github.com
Reactions and mechanisms
- Yes, according to the manual: Forward, equilibrium, retrosynthetic and resonance arrow types. Opens the cited page.Reaction arrowsForward, equilibrium, retrosynthetic and resonance arrow types.github.com
- Yes, according to the manual: Editable curved electron and fishhook arrows. Opens the cited page.Curved mechanism arrowsEditable curved electron and fishhook arrows.github.com
- Yes, according to the manual: Native CDML stores reactant and product references to molecular objects. Opens the cited page.Machine-readable reactionsNative CDML stores reactant and product references to molecular objects.github.com
- Not establishedAtom mapping
- Yes, according to the manual: Includes a drawable pz orbital mark. Opens the cited page.Orbitals and symbolsIncludes a drawable pz orbital mark.github.com
Figures and layout
- Yes, according to the manual: Canvas text supports fonts, bold, italic, subscripts and superscripts. Opens the cited page.Rich text captionsCanvas text supports fonts, bold, italic, subscripts and superscripts.github.com
- Yes, according to the manual: Rectangles, ellipses, polygons, polylines and bracket drawing modes. Opens the cited page.Shapes, brackets and curvesRectangles, ellipses, polygons, polylines and bracket drawing modes.github.com
- Yes, according to the manual: Aligns object edges or centers. Opens the cited page.Align and distributeAligns object edges or centers.github.com
- Not establishedGroup and ungroup
- Yes, according to the manual: Regenerates unselected geometry around a selected connected bond fragment. Opens the cited page.2D structure cleanupRegenerates unselected geometry around a selected connected bond fragment.github.com
- Not establishedJournal drawing styles
- Partly: Document standards persist; personal-style saving uses removed Python 2 file(). Opens the cited page.Reusable custom stylesDocument standards persist; personal-style saving uses removed Python 2 file().github.com
- Yes, according to the manual: Individual objects expose line and area colors. Opens the cited page.Color controlIndividual objects expose line and area colors.github.com
- Yes, according to the manual: Atom area colors provide persistent backgrounds preserved in SVG exports. Opens the cited page.Color highlightingAtom area colors provide persistent backgrounds preserved in SVG exports.github.com
- Partly: Page dimensions and orientation; tabs represent separate documents. Opens the cited page.Page layout and multipagePage dimensions and orientation; tabs represent separate documents.github.com
- Not establishedImported pictures
- Not establishedTLC plates and tables
Chemistry intelligence
- Partly: Validator exists; lazy map() prevents molecule checks under Python 3. Opens the cited page.Structure checkingValidator exists; lazy map() prevents molecule checks under Python 3.github.com
- Not establishedR/S and E/Z labels
- Yes, according to the manual: Computes formula, molecular weight and monoisotopic mass. Opens the cited page.Formula and massComputes formula, molecular weight and monoisotopic mass.github.com
- Not establishedProperty estimates
- Partly: Legacy NIST name lookup retains incompatible Python 2 imports. Opens the cited page.Name to structureLegacy NIST name lookup retains incompatible Python 2 imports.github.com
- Partly: Legacy NIST name lookup, not systematic naming; Python 2 imports remain. Opens the cited page.Structure to nameLegacy NIST name lookup, not systematic naming; Python 2 imports remain.github.com
- Not establishedNMR prediction
- Yes, according to the manual: Query atoms support R, A, Q, X and element lists. Opens the cited page.R-groups and query structuresQuery atoms support R, A, Q, X and element lists.github.com
- Not establishedPolymers and repeat units
- Not establishedPeptides and nucleic acids
- Not establishedImage to structure
- Partly: NIST structure-fetch plugin retains incompatible Python 2 imports. Opens the cited page.Online structure lookupNIST structure-fetch plugin retains incompatible Python 2 imports.github.com
- Not established3D model view
- Not establishedCrystal structures
Files and exchange
- Partly: Read/write implemented; importer retains Python 3 type errors. Opens the cited page.CDXML import and exportRead/write implemented; importer retains Python 3 type errors.github.com
- Not establishedCDX import and export
- Yes, according to the manual: MOL read/write; editor exposes .mol rather than an SDF route. Opens the cited page.MOL and SDFMOL read/write; editor exposes .mol rather than an SDF route.github.com
- Yes, according to the manual: Read/write implemented; legacy UI warnings conflict with bundled parser capabilities. Opens the cited page.SMILESRead/write implemented; legacy UI warnings conflict with bundled parser capabilities.github.com
- Partly: Limited import; external-binary generation retains Python 3 string/bytes errors. Opens the cited page.InChILimited import; external-binary generation retains Python 3 string/bytes errors.github.com
- Not establishedRXN files
- Yes, according to the manual: Exports plain SVG and editable CDML embedded in SVG. Opens the cited page.SVG exportExports plain SVG and editable CDML embedded in SVG.github.com
- Yes, according to the manual: Vector PDF through Cairo; also includes a Piddle backend. Opens the cited page.PDF exportVector PDF through Cairo; also includes a Piddle backend.github.com
- Yes, according to the manual: PNG exporter offers 300 and 600 dpi presets. Opens the cited page.High-resolution PNGPNG exporter offers 300 and 600 dpi presets.github.com
- Not establishedPaste to and from ChemDraw
- Not establishedEditable in Word or PowerPoint
- Not establishedWindows Office OLE
APIs and automation
- Yes, according to the manual: Legacy API documentation; Python 2 examples require adaptation. Opens the cited page.Python APILegacy API documentation; Python 2 examples require adaptation.github.com
- Not establishedJavaScript or TypeScript API
- Partly: Batch scripts hide the window but still require Tk/X. Opens the cited page.Command-line toolBatch scripts hide the window but still require Tk/X.github.com
- Not establishedAI agent control
- Not establishedBuilt-in AI assistant
Embedding and extension
- Yes, according to the manual: XML descriptors register Python script and drawing-mode extensions. Opens the cited page.PluginsXML descriptors register Python script and drawing-mode extensions.github.com
- Not established: External scripting launches its own Tk window; embedding unconfirmed.Embed in your own appExternal scripting launches its own Tk window; embedding unconfirmed.github.com