vibe-qc¶
Quantum chemistry for molecules and solids.
vibe-qc is a Python + C++17 electronic-structure code. The molecular stack — Hartree-Fock, density-functional theory, Møller-Plesset theory, analytic gradients, D3(BJ) dispersion — is validated against PySCF to machine precision. The periodic stack delivers 1D / 2D / 3D Hartree-Fock and Kohn-Sham DFT with Monkhorst-Pack k-meshes, Ewald-summed Madelung, band structure and density of states, and is growing toward CRYSTAL-style crystalline-orbital calculations at full-SCF accuracy.
Built on libint (Gaussian integrals), libxc (500+ XC functionals), and spglib (crystal symmetry). Licensed MPL-2.0.
Current release: 0.13.0 — Wisesa’s Fox
The site you’re looking at renders the release branch — the
fast-forward-only public snapshot. main is at a higher
X.Y.dev0 development version; see release_process
for the branch model. Per-release codenames (Scientist + Animal,
loosely tied to whatever shipped) are catalogued in the
release-codenames roadmap entry.
💚 vibe-qc is funded by individual sponsors
vibe-qc is built and maintained by one person
in evenings and weekends, on personal hardware, with no institutional
backing. If the project is useful to you — or if you think the Cyclic
Cluster Model reaching CCSD(T) on an open-source code is worth existing —
please consider supporting it via
GitHub Sponsors (recurring
monthly, zero fees) or
Ko-fi (one-time, no GitHub account
required). Every sponsorship directly funds the Claude Max
subscription that drives day-to-day development, the self-hosted
server behind vibe-qc.com, and — most urgently — bigger hardware:
the project currently develops on a single Apple M2 laptop, and that’s
what caps every regression test, CI benchmark, and CRYSTAL-Tutorial
port to small systems. Smallest single actionable item right now:
the NIST Crystal Data SRD 3 single-user
subscription
at $200/year — fully fundable by one sponsor for a year, and
unlocks programmatic access to a curated crystallographic
database for the v2.x CCM reference work. See the
support page for the full
pitch and the near-/long-term hardware goals; public sponsors are
listed on the sponsors page.
✅ New in v0.12.0 (Knuth’s Beaver)
v0.12.0 is an algorithmic-density release — nine headline features landing in a single minor cycle:
Wavefunction methods. DLPNO-CCSD with pair classification, PAO
domains, and per-pair PNO solvers (the domain-based local correlation
workhorse). Internally-contracted CASPT2 (method="caspt2").
Multi-root CASCI with state-averaged CASSCF. TDDFT via the Casida
linear-response formalism and the Tamm-Dancoff approximation for
RHF/RKS/UHF/UKS. CIS / TDA excited-state nuclear gradients
(finite-difference, state-tracked). A general Green’s-function
quasiparticle propagator (GF2 / OVGF, renormalised GF2) for HF and
MSINDO.
Periodic. The BIPOLE route extends its analytic-gradient
maintained preview to multi-k KS (corrected per-k W + J^LR + XC
Pulay; KS CPHF still Γ-local), auto-enables bit-exact symmetry-reduced
one-electron integrals when space-group symmetry is attached, and
pins the multipole far-field through L=3 — production forces remain
the exact finite-difference path. The GPW (Gaussian Plane Waves)
periodic route reaches production-ready status with a unified
run_periodic_job user surface. MSINDO periodic CCM through bulk MgO
(Wigner-Seitz, periodic INDO, Ewald Madelung).
Semiempirical + MLIP. The MSINDO engine adds 4th-row p-block
elements (Ga–Br, Z 31–35), NDDO mode, molecular geometry optimisation,
implicit solvation (COSMO), NEB, velocity-Verlet MD, well-tempered
metadynamics, and MECI conical-intersection optimisation. The MACE
machine-learning interatomic potential (method="mace") joins the
method roster.
Infrastructure. Optional MPI parallelisation via mpi4py (the
GPW grid-decomposition overlay is experimental — see
GPW/GAPW). SolutePotentialProvider seam for
reference-agnostic CPCM/COSMO solvation. General atomisation energies
and RRHO thermochemistry blocks.
See CHANGELOG for the full notes.
For the current open-issues list (workarounds, regression-test
pointers, status of each known bug), see
troubleshooting and the
issue tracker.
Install¶
git clone https://gitlab.peintinger.com/mpei/vibeqc.git
cd vibeqc
./scripts/install.sh # native deps + venv + pip install + banner
install.sh accepts --dev (main), --branch NAME (any branch
or tag), and other knobs — see installation.md
for the full surface and the manual setup_native_deps.sh recipe.
git clone lands you on the latest tagged release (the project’s
default branch is release, which fast-forwards from each new tag);
add --dev for bleeding-edge main or --branch vX.Y.Z to pin
a specific tag for reproducibility.
setup_native_deps.sh builds and installs every native dependency
(libint, libxc, spglib, FFTW3, libecpint) into third_party/ and
populates the bundled basis library. Re-running is a no-op if
everything’s already built. Full per-platform dependency lists
(macOS / Arch / Manjaro / Debian / Ubuntu) are in
installation.
Your first calculation¶
Make a working directory outside the repo — vibe-qc writes its
outputs into the current working directory, and you don’t want
.out / .molden / .traj files landing inside the source
tree:
mkdir -p ~/vibeqc-runs/water
cd ~/vibeqc-runs/water
Save the following as water.py in that directory (any filename
works — vibe-qc just runs whatever Python you point it at):
from vibeqc import Atom, Molecule, run_job
mol = Molecule([
Atom(8, [ 0.0, 0.00, 0.00]),
Atom(1, [ 0.0, 1.43, -0.98]),
Atom(1, [ 0.0, -1.43, -0.98]),
])
run_job(
mol,
basis="6-31g*",
method="rks",
functional="PBE",
dispersion="d3bj",
optimize=True,
output="water",
)
Run it with the virtual-env’s Python (the one pip install
populated above, not your system python3). Since you’re no
longer in the repo, give the full path:
~/path/to/vibeqc/.venv/bin/python water.py
Replace ~/path/to/vibeqc/ with wherever git clone landed.
That ~3-second run produces three files in ~/vibeqc-runs/water/:
water.out— banner, SCF trace, energy breakdown, orbital table, HOMO-LUMO gap, Mulliken / Löwdin charges, Mayer bond orders, dipole, and wall-clock timings.water.molden— molecular orbitals for Avogadro / Jmol.water.traj— ASE trajectory for the optimization, viewable withase gui water.traj.
Tip
Skip the path prefix. Activate the venv once per shell session and the path resolves automatically — works from any directory:
source ~/path/to/vibeqc/.venv/bin/activate # bash / zsh
python water.py # uses the venv's python
Deactivate with deactivate when you’re done.
Common mistake: ModuleNotFoundError: No module named 'vibeqc'
means you ran the wrong Python. Either give the full
~/path/to/vibeqc/.venv/bin/python path or activate the venv
first. The bare .venv/bin/python shorthand only works when your
shell is sitting inside the repo.
See quickstart for a 30-minute end-to-end
walkthrough (HF, periodic SCF, orbital cube), running
for the full “how to invoke vibe-qc scripts” reference (venv,
threading, output capture, SSH workflows),
good practices for the working conventions
nobody tells you (file layout, naming, when to trust a number),
the tour for the wider API surface (run_job, ASE
Calculator, logging, custom basis sets, tests), or dive into the
tutorials for worked examples.
Capabilities today¶
Molecular. Restricted and unrestricted HF / KS-DFT with analytic nuclear gradients. The full libxc functional library — LDA, GGAs, hybrids, the τ-dependent meta-GGA family (TPSS, M06-2X, SCAN, r²SCAN), range-separated hybrids (ωB97X, ωB97X-D), and the PW1PW weighted-sum functional — all supported. Møller-Plesset theory (MP2 / UMP2 / RI-MP2 / SCS-MP2 / SOS-MP2 / open-shell UMP2) and the B2PLYP / DSD-PBEP86 double hybrids. Density fitting with the RIJK and RIJCOSX Fock-build kernels (RIJCOSX validated to 0.13 mHa vs ORCA 6.1.1). Effective core potentials for heavy-element chemistry. CPCM / COSMO implicit solvation via the SolutePotentialProvider seam. Grimme D3(BJ) / D4 dispersion. 142 bundled basis sets plus the solid-state pob-* family. All validated against PySCF and ORCA.
Wavefunction methods. DLPNO-CCSD — domain-based local pair natural
orbital CCSD with pair classification, PAO domains, and per-pair PNO
solvers. Internally-contracted CASPT2 (method="caspt2"). Multi-root
CASCI with state-averaged CASSCF. TDDFT via the Casida linear-response
formalism and the Tamm-Dancoff approximation (RHF/RKS/UHF/UKS).
CIS / TDA excited-state nuclear gradients (finite-difference,
state-tracked). A general Green’s-function quasiparticle propagator
(GF2 / OVGF, renormalised GF2). The vibeqc.solvers family — Full CI,
selected CI, DMRG, variational 2-RDM — via
vibeqc.solvers. General atomisation
energies and RRHO thermochemistry.
Semiempirical + MLIP. The MSINDO semiempirical engine covers
elements H–Br (Z 1–35, including 3d and 4th-row p-block), supports
NDDO mode, molecular geometry optimisation, implicit solvation
(COSMO), NEB, velocity-Verlet molecular dynamics, well-tempered
metadynamics, and penalty-function MECI conical-intersection
optimisation. The MACE machine-learning interatomic potential
(method="mace") is available as an alternative energy surface.
GFN2-xTB rounds out the semiempirical roster.
Periodic. 1D / 2D / 3D PeriodicSystem geometry, Monkhorst-Pack
k-meshes with IBZ reduction. Native Gaussian density fitting (GDF —
Γ-point RHF / RKS + hybrids, multi-k KRHF / KRKS; µHa parity vs PySCF
on LiH) and the production GPW (Gaussian Plane Waves) route through
run_periodic_job (Γ-only RHF / UHF / RKS / UKS, multi-k pure-DFT
RKS; the MPI grid overlay is experimental). The BIPOLE route covers
Γ + multi-k RHF / UHF / RKS / UKS: multi-k KS analytic gradients
with space-group symmetry and multipole L=3 — closing the BIPOLE
analytic gradient gate. 3D Ewald with CRYSTAL-α gauge unification.
Fermi-Dirac smearing for metals. MSINDO periodic CCM through bulk
MgO (Wigner-Seitz, periodic INDO, Ewald Madelung). Band structure
and density-of-states plotters. Gaussian cube + extended-XYZ +
POSCAR + XSF / BXSF writers, plus POSCAR and Extended-XYZ readers
and CIF readers with opt-in geometry symmetrisation.
Tooling. OpenMP parallelism throughout; optional MPI
parallelisation via mpi4py (GPW grid overlay experimental).
Pre-flight memory budget estimator.
ASE Calculator integration for geometry optimization, vibrational
frequencies, and NEB. Automatic per-job citation files
(.bibtex / .references). The
vibe-view interactive 3D viewer for
structure / orbitals / densities / bands / spectra / trajectories
out of every .qvf archive. The vq queue
for remote job submission.
See the feature matrix for details and the roadmap for what’s next.
Where to go next¶
Getting started
- Installation
- Quickstart — your first 30 minutes
- Using Claude to drive vibe-qc
- Setup: point Claude at the docs (the key step)
- A first session, end-to-end: corundum (α-Al₂O₃)
- A second session, Claude Code in the loop: water dimer with dispersion
- Workflow patterns
- What to paste back to Claude
- What Claude can’t see
- Pitfalls and how to dodge them
- End-to-end worked example: SMILES to IR spectrum
- Best practices
- Where to next
- Running vibe-qc
- The fundamental rule
- Two ways to invoke the venv’s Python
- Running a one-off calculation
- Running interactively (Jupyter / IPython)
- Capturing output (long runs, batch logs)
- Controlling threading
- Running on a remote machine via SSH
- Personal job queue (planned, v0.5)
- Running on a cluster with a job queue
- Running the test suite
- Common errors and quick fixes
- Where to go next
- Good practices
- Troubleshooting
- SCF didn’t converge
- “Canonical orth dropped too many basis directions”
- Memory abort before the SCF starts
KeyError: 'Ne'(or any other element) on basis load- “DF gradient disagrees by ~115 mHa/bohr”
- “Analytic RHF gradient is wrong”
- “Periodic (BIPOLE) forces / geometry optimisation look wrong”
ImportError: cannot import name 'EEQOptions' from 'vibeqc._vibeqc_core'ModuleNotFoundError: No module named 'vibeqc'- “Cell-list construction returned 0 cells”
vibeqc-cite: manifest missingafter a jobD4NativeExperimentalWarning— native D4 dispersion is gated- Things that are not errors
- BIPOLE absolute energies on tight ionic crystals (fixed — corrected gauge is the default at Γ and multi-k, all four drivers)
- Still stuck?
- Updating vibe-qc
- Building and running vibe-qc on a uni cluster
- Tour of the vibe-qc API
- Tutorial
- Molecular Hartree-Fock
- Molecular DFT (RKS)
- Open-shell systems (UHF, UKS, UMP2)
- Initial guesses — hands-on walkthrough
- Non-mean-field solvers — Selected-CI, DMRG, v2RDM, and transcorrelated methods
- MSINDO — semiempirical INDO (tutorial)
- Semiempirical DFTB — fast preoptimization
- Machine-learning interatomic potentials with MACE
- Post-SCF properties: charges, bonds, dipole
- Geometry optimization
- Vibrational frequencies
- Thermodynamics at temperature
- Orbital and density visualization
- Basis-set convergence
- Pt cluster with LANL2DZ — heavy-element ECP
- Dispersion corrections (D3-BJ)
- DFT functional comparison
- Range-separated hybrids: ωB97X and the HOMO ≈ −IP property
- Nudged Elastic Band: reaction paths & transition states
- Natural orbitals and the idempotency diagnostic
- RIJCOSX SCF + analytic gradient on glycine
- Double hybrid: B2PLYP step by step
- Verifying an RI-MP2 auxiliary basis
- Local correlation with DLPNO
- Solvation in water (CPCM)
- Stiff molecular SCF: rescuing oscillation with EDIIS+DIIS
- Periodic HF on a 1D H chain
- Periodic KS-DFT
- Madelung constants via Ewald summation
- k-points, the Brillouin zone, and Bloch phase
- Band structure and density of states
- Why solid-state calculations use
pob-TZVP - Peierls dimerisation of a 1D H-chain
- Projected density of states (PDOS)
- Periodic orbital cubes and XSF files
- Tight-cell DFT with the periodic Becke partition
- Periodic SCF convergence: damping, DIIS, and level shifts
- Symmetry-aware storage of lattice integrals (SYM3a)
- Solid-state walkthrough: LiH rocksalt with pob-TZVP
- Tutorial 30: H-chain BvK equivalence — vibe-qc’s CCM ancestor
- 33. MgO from Materials Project —
vqfetchend-to-end - 34. LiH at multi-k — KRHF targeting Peintinger 2013 SI Table 2
- 35. Open-shell Mg⁺• in a periodic box — UHF GDF + Makov-Payne
- Fermi-Dirac smearing for metals and small-gap solids
- 43 — XSF and BXSF: periodic volumetric visualisation
- Running in parallel
- Tutorial 26: Cross-validating against ORCA, Psi4, PySCF
- Tutorial 27: Viewing geometries, orbitals, and vibrations with MolTUI
- Tutorial 29: Reproducing a reference output
- Tutorial 30: External data fetcher (
vqfetch) - Auto-citations: from
.outto manuscript bibliography - Tutorial 45: vibe-view end-to-end walkthrough
- Tutorial 47: The QVF file format, end to end
- Submitting a job to a remote machine with
vq
User guide
- User guide
- Molecules
- Basis sets
- Functionals
- MP2 and double hybrids
- Canonical CCSD and CCSD(T)
- DLPNO methods (MP2, CCSD, CCSD(T))
- Non-mean-field solvers (
vibeqc.solvers) - Composite “3c” methods
- Machine-learning interatomic potentials (MACE)
- Semiempirical Methods
- Semiempirical and MACE method comparison
- MSINDO (semiempirical INDO)
- The
data_library/parameter-storage standard - Effective core potentials (ECPs)
- Implicit solvation (CPCM / COSMO)
- Density fitting (RIJ / RIJK / RIJCOSX)
- Periodic systems
- Crystal lattices
- Slabs and adsorbates
- k-point meshes
- Multi-k periodic SCF
- Ewald summation in periodic systems
- CRYSTAL-style BIPOLE periodic HF and DFT
- Plane-wave Hartree-J via GPW / GAPW
- Periodic-SCF methods: BIPOLE, GDF, GPW / GAPW
- DFT+U (Hubbard correction)
- Relaxed coordinate scans
- SCF convergence
- Smearing (fractional occupations for periodic SCF)
- SCF Fock-build modes
- Initial guesses
- Linear dependence and screening in periodic SCF
- Memory budget
- Settings introspection
- BLAS + LAPACK backend
- ASE integration
- Nudged Elastic Band (NEB)
- Molecular dynamics
- External QC codes (ORCA / Psi4 / others)
- External structures (
vqfetch) - Moving from PySCF
- Moving from CRYSTAL
- Moving from ORCA
- Moving from Gaussian
- Experimental reference data (
vqfetch reference) - Input scripts and output files
- Automatic citations
- Post-SCF properties
- Band structure and density of states
- Volumetric data: cube, XSF, and BXSF files
- vibe-view: interactive viewer
- The vq calculation queue
- Running vibe-qc from Jupyter Lab
Reference
Status¶
vibe-qc is pre-release software heading toward a 1.0 feature-complete milestone. The molecular stack (HF/DFT/MP2/DLPNO-CCSD/TDDFT) is stable and production-ready. The periodic stack supports three production routes — GDF (µHa parity vs PySCF), GPW (Gaussian Plane Waves with Γ-point analytic gradients; its MPI grid overlay is experimental), and BIPOLE (CRYSTAL-style Ewald-J with multi-k KS analytic gradients). The wavefunction-methods ladder (CASCI/CASSCF/IC-CASPT2) and the MSINDO semiempirical engine are shipping and being hardened. Follow the roadmap for what’s next.
Licensed under the Mozilla Public License 2.0. Source at gitlab.peintinger.com/mpei/vibeqc.
Feedback and bug reports¶
Found a bug, have a feature request, or want to send a patch? The decision tree lives in CONTRIBUTING.md. The short version:
Bugs / install problems / feature requests → GitLab issue tracker
Security vulnerabilities → email
mpei@vibe-qc.com(see SECURITY.md)General feedback / questions → email
mpei@vibe-qc.comSponsor the project → see Support vibe-qc (GitHub Sponsors, Ko-fi)