Molecular Analysis Workstation
Ligora is an open-source desktop application for protein-ligand interaction analysis, molecular docking, and computational chemistry workflows. It combines a 3D molecular viewer with analysis tools and integration with external open-source engines.
Real captures from the packaged app driving live data — see screenshots/ for the full set and screenshots/README.md for details.
| 3W85 loaded from RCSB, rendered in 3D | PLIP contact analysis — hydrogen bonds with real distances |
![]() |
![]() |
| PDB-wide live search | Real AutoDock Vina docking run — 5 poses with affinities |
![]() |
![]() |
More screenshots
| App on first launch | Evidence pane — live RCSB/PubChem/UniChem provenance |
![]() |
![]() |
| Docking panel — box controls, exhaustiveness, MD | |
![]() |
- Structure Visualization: 3D viewer for PDB/mmCIF structures with multiple representations (cartoon, stick, sphere, surface)
- Ligand Detection: Automatic detection and classification of ligands in structures
- Contact Analysis: Protein-ligand interaction analysis using PLIP and geometric methods
- Hydrogen bonds
- Hydrophobic contacts
- Pi-stacking
- Salt bridges
- Halogen bonds
- Metal coordination
- Water-mediated contacts
- Ligand Identity Resolution: Automatic lookup in PubChem, ChEMBL, and PDBBind
- Live Data Enrichment: Fetch metadata from RCSB PDB, PubChem, ChEMBL, PDBBind
- Measurement Tools: Distance and angle measurements between atoms
- Export: Analysis summaries (JSON), contacts tables (CSV), ligand structures (SDF)
- Molecular Docking: AutoDock Vina integration for protein-ligand docking
- Geometry Cleanup: Local ligand geometry optimization
- Batch Analysis: Process multiple structures
- 2D Ligand Editor: Sync between 2D and 3D views
- Water Network Analysis: Solvent molecule analysis
- MD Simulation: OpenMM integration for molecular dynamics
- QM Calculations: PySCF integration for quantum chemistry
- Everything visible in the app runs end-to-end against real data or user input.
- Existing open-source engines are used, wrapped, or linked out; they are not reimplemented.
- Numeric and categorical chemical/biological values come from data sources (RCSB, PubChem, ChEMBL, PDBBind, CCD) or user settings, not from hardcoded app constants.
- Atomic weights, formulas, classification hints, thresholds, and similar knowledge are not embedded in app code.
- There are no placeholder data or sample values in the product itself; sample data exists only in tests, demos, or docs.
- Engines are integrated under their own licenses; bundling is only done after licensing and redistribution terms are verified.
Full rules are in RULES.md.
┌─────────────────────────────────────────────────────────────┐
│ Tauri Frontend (Rust + Web) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 3D Scene Viewer (Three.js/3Dmol.js) │ │
│ │ Ligand Card │ Contacts Table │ │
│ │ Evidence Pane │ Jobs Panel │ │
│ │ Notes │ Engine Controls │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ IPC (JSON-RPC) │
│ ▼ │
├─────────────────────────────────────────────────────────────┤
│ Python Backend │
│ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │
│ │ Parser │ Ligand │ Contacts │ Cheminform │ │
│ │ (mmCIF/ │ Resolver │ Analyzer │ (fingerprints│
│ │ PDB) │ (PubChem/ │ (PLIP/ │ /similarity)│
│ │ │ ChEMBL) │ geometry) │ │ │
│ └─────────────┴─────────────┴─────────────┴─────────────┘ │
│ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │
│ │ Enrichment │ Engines │ Jobs │ Export │ │
│ │ (RCSB/ │ (Vina/ │ Manager │ (JSON/CSV/ │
│ │ PubChem/ │ gnina/ │ │ SDF) │ │
│ │ ChEMBL/ │ OpenMM/ │ │ │ │
│ │ PDBBind) │ PySCF) │ │ │ │
│ └─────────────┴─────────────┴─────────────┴─────────────┘ │
└─────────────────────────────────────────────────────────────┘
Ligora ships as a strictly-confined snap on the core26 base — every engine,
Python dependency, and the GNOME runtime bits are inside the snap or its content
snaps, so there is nothing else to install:
# From the Snap Store (public release)
sudo snap install ligora
# Connect the desktop runtime content snap (first run)
sudo snap connect ligora:gnome-core26 gnome-core26What the snap contains and how it is wired:
| Component | Details |
|---|---|
| App | Tauri 2 (Rust bridge + vite/3Dmol.js frontend) at $SNAP/bin/ligora |
| Backend | Full Python package at $SNAP/usr/lib/ligora-backend, run by the base's Python 3.14 |
| Engines bundled | AutoDock Vina, PLIP (plipcmd), Open Babel, GROMACS, DSSP, RDKit — from Ubuntu repositories, staged into the snap |
| Python deps | numpy, scipy, requests, rdkit, lxml — all distro-built, no PyPI wheels bundled |
| Desktop runtime | gnome-core26 content snap (WebKitGTK 4.1, themes, fonts) via the gnome-core26 plug |
| GPU | mesa-2604 content snap via the gpu-2604 interface (upstream gpu-snap wrapper) |
| Data dir | ~/snap/ligora/common (workspaces, caches, logs) |
| Networking | Only to public open-data APIs: RCSB, PubChem, ChEMBL, UniChem, BindingDB, EBI |
Build it yourself from source:
snapcraft pack --destructive-mode # or plain `snapcraft` to build in LXD
sudo snap install ligora_*.snap --dangerous
sudo snap connect ligora:gnome-core26 gnome-core26The snap packages real engines from the Ubuntu archive; fpocket is not in the
archive, so pocket detection reports it as unavailable rather than faking
results (see RULES.md).
# Clone the repository
git clone https://github.com/devansh0703/ligora.git
cd ligora
# Install Python backend dependencies
cd backend
pip install numpy requests
# Install Tauri frontend dependencies
cd frontend
npm install
# Build and run
cd frontend
npm run tauri dev- Click Open File to load a local PDB/mmCIF file
- Click Open PDB ID and enter a PDB ID (e.g.,
1ABC)
- Select a ligand from the Ligand Card panel
- Click Run Analysis to detect protein-ligand contacts
- View contacts in the Contacts Table panel
- Check Evidence pane for external data enrichment
- Select a ligand
- Configure the docking box (center and size)
- Click Run Docking
- View poses in the scene and results in the Jobs panel
Ligora integrates with existing open-source engines rather than implementing them:
| Engine | Purpose | License |
|---|---|---|
| AutoDock Vina | Molecular docking | Apache 2.0 |
| gnina | Deep-learning docking | GPL/Apache |
| PLIP | Contact analysis | GPL |
| OpenMM | MD simulations (V2) | LGPL |
| PySCF | QM calculations (V2) | Apache 2.0 |
| 3Dmol.js | WebGL viewer | BSD-3 |
Ligora enriches analysis with live data from:
- RCSB PDB: Structure metadata, annotations, related structures
- PubChem: Compound identity, properties, bioactivity
- ChEMBL: Bioactivity data, targets, binding data
- PDBBind: Binding affinity data for protein-ligand complexes
The snap is declared in snap/snapcraft.yaml:
name: ligora
version: '0.1.0'
base: core26
confinement: strict
license: MITIt includes:
- Tauri frontend (Rust + Web) built with the real toolchain
- Python backend package + distro-built dependencies
- Engines staged from Ubuntu packages (Vina, PLIP, Open Babel, GROMACS, DSSP, RDKit)
- GNOME desktop runtime and GPU driver integration via content snaps
configurehook (font cache), command-chain launchers, desktop entry
Plugs: desktop, x11, wayland, opengl, network, home, gsettings,
plus content plugs gnome-core26, gpu-2604, and gtk-common-themes.
# Build snap package
cd snap
snapcraft
# Install locally
sudo snap install ligora_*.snap --dangerousligora/
├── backend/
│ ├── ligora_backend/
│ │ ├── __init__.py
│ │ ├── config.py # Configuration
│ │ ├── workspace.py # Session/workspace management
│ │ ├── parser.py # Structure parsing (mmCIF/PDB)
│ │ ├── ligand.py # Ligand resolution
│ │ ├── contacts.py # Contact analysis (PLIP + geometry)
│ │ ├── cheminformatics.py # Fingerprints and similarity
│ │ ├── enrichment.py # Live data clients
│ │ ├── engines.py # Engine adapters (Vina, gnina, etc.)
│ │ ├── jobs.py # Job management
│ │ ├── export.py # Artifact export
│ │ └── server.py # IPC server
│ ├── tests/
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── main.js # App entry point
│ │ ├── app.js # Main app component
│ │ └── styles.css # Application styles
│ ├── src-tauri/
│ │ ├── src/
│ │ │ ├── lib.rs # Tauri backend
│ │ │ └── main.rs # Rust entry point
│ │ └── Cargo.toml
│ ├── package.json
│ └── tauri.conf.json
├── snap/
│ └── snapcraft.yaml
├── .github/
│ └── workflows/
│ └── ci.yml
└── README.md
cd backend
pip install -r requirements.txt
pip install pytest
python -m pytest tests/ -vcd backend
pip install ruff
ruff check . --select E,F,W
ruff format .This project is licensed under the MIT License - see the LICENSE file for details.
Components used by Ligora have their own licenses:
- AutoDock Vina: Apache 2.0
- PLIP: GPL v2
- GROMACS: LGPL v2.1
- Open Babel: GPL v2
- DSSP: Apache 2.0
- RDKit: BSD-3-Clause
- gnina: GPL v2 / Apache 2.0 (dual)
- OpenMM: LGPL
- PySCF: Apache 2.0
- 3Dmol.js: BSD-3-Clause
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.






