# Open-Source Quantum Software Projects

Curated list of open-source developed quantum software projects.

*Please read the contribution guidelines before contributing.*

Also please check out the Unitary Fund's 4k$ grant project for quantum OSS!

## Contents

- Quantum full-stack libraries
- Quantum simulators
- Quantum annealing
- Quantum algorithms
- Quantum compilers
- Quantum converters
- Quantum assembly
- Quantum control
- Quantum interoperability
- Quantum error correction
- Quantum and post-quantum cryptography
- Experimental quantum computing
- Quantum fun
- Quantum tools
- Abandoned projects

For a curated list of learning resources please check out desireevl's repo.

## Quantum full-stack libraries

**C++**

- avaloni Programming language (interpreter) for classical-quantum hybrid computers.
- staq - Full stack quantum processing toolkit.
- XACC - Extreme-scale programming model for quantum acceleration within high-performance computing.

**Python**

- blueqat - A quantum computing SDK.
- Braket - Amazon's fully managed quantum computing service for building quantum algorithms.
- Cirq - Framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
- Forest - Rigetti's software library for writing, simulating, compiling and executing quantum programs.
- Ocean - D-Wave System's suite of tools for solving hard problems with quantum computers.
- OpenQL - Compiler framework with algorithm libraries, optimizer, scheduler, QEC, mapping, micro-code generator.
- ProjectQ - Hardware-agnostic framework with compiler and simulator with emulation capabilities.
- PyQudit Python package for generalized and universal versions of quantum gates in N-dimensions.
- Qiskit - Framework for noisy quantum computers at the level of pulses, circuits, and algorithms (supported by IBM).
- quantum-os Operating system bases on Linux kernel for quantum computing quantum.
- Strawberry Fields - Xanadu's software library for photonic quantum computing.
- Tequila - An Extensible Quantum Information and Learning Architecture developed by Alan Aspuru-Guzik's group (UofT).

**Q#**

- Q# - Microsoft's quantum programming language with Visual Studio integration.

**Silq**

- Silq - Silq is a high-level quantum programming language with safe uncomputation and intuitive semantics.

## Quantum simulators

**C**

- QuaC - Parallel time-dependent open quantum systems solver.
- QuEST - Quantum Exact Simulation Toolkit is a high performance multicore simulator of universal quantum circuits.
- TNQVM - Tensor Network QPU Simulator for Eclipse XACC.

**Common Lisp**

- QVM - Rigetti's high-performance quantum virtual machine.

**Coq**

- QWIRE - A quantum circuit language and formal verification tool described in this paper.

**C++**

- Huawei HiQsimulator - Single-amplitude, Full-amplitude and Error-correction circuit simulation engine.
- Intel Quantum Simulator - Distributed qubit register quantum simulator using OpenMP and MPI.
- JKQ-DDSIM - Error-free quantum simulator using decision diagrams as underlying data structure. (arXiv / IEEE)
- qFlex - Flexible high-performance simulator for verifying and benchmarking quantum circuits implemented on real hardware.
- Qiskit Aer - High performance simulator for quantum circuits that includes noise models (supported by IBM).
- QCEAD - C++ program to both simulate a quantum computer and use parallel evolutionary techniques to design algorithms.
- Qrack - Comprehensive qubit and gate implementation for developing universal virtual quantum processors.
- qSim - High level, elementary simulation library.
- QSim - Schrödinger and Schrödinger-Feynman simulators for quantum circuits.
- Quantum++ - High-performance general purpose quantum simulator (can simulate d-dimensional qudits).
- tweedledum - Library for synthesis, compilation, and optimization of quantum circuits.

**F#**

- Liqui|> - Toolsuite for quantum simulation developed by Microsoft QuArC.

**GoLang**

- Q - Quantum Computation Simulator written purely in GoLang.

**Java**

- Strange - Java API that can be used to create Quantum Programs.

**JavaScript**

- jsquil - JavaScript interface for writing Quil programs.
- Quantum Circuit Simulator - Smoothly runs 20+ qubit simulations in browser or on node.js server.
- Quirk - Drag-and-drop quantum circuit simulator in your browser.
- Quantum JavaScript (Q.js) - Drag-and-drop circuit editor, simulator, documented API, text-as-circuit DSL, concept primers.
- Quantum-computing-playground - Browser-based simple IDE interface to run, visualize and debug quantum programs.
- Quantum tensors - JavaScript / TypeScript package for sparse tensor operations on complex numbers for quantum computing.

**Julia**

- Cliffords.jl - Efficient calculation of Clifford circuits in Julia.
- IonSim.jl - Simulate the dynamics of a configuration of trapped ions interacting with laser light.
- QSimulator.jl - Unitary and Lindbladian evolution in Julia.
- QuantumInfo.jl - Julia library for quantum information related calculations.
- QuantumOptics.jl - Numerical framework to simulate various kinds of open quantum systems in Julia.
- RandomQuantum.jl - Package for generating random quantum states and processes.
- Yao.jl - Extensible, Efficient Quantum Algorithm Design for Humans.

**Python**

- MISTIQS - Generating/compiling/executing quantum circuits for simulating quantum many-body dynamics of systems.
- PIQS - Efficient simulation of open quantum dynamics of identical qubits.
- QCircuits - User-friendly quantum circuit simulator designed for students and newcomers to quantum computing.
- QCompute - Baidu's software development kit for designing quantum circuits and simulating on a high-performance simulator.
- Qibo - Framework for quantum simulation with hardware acceleration, including multi-GPU support.
- QTop - Simulation and visualization of topological quantum computers.
- quantum-computing - Functionally complete simulator for universal quantum computing in Python
- quimb - Easy but fast python library for quantum information and many-body calculations, including with tensor networks.
- Quintuple - Simulating the 5-qubit processor of the IBM Quantum Experience.
- QuPy - Quantum circuit simulator for both CPU and GPU.
- QuSpin - Exact diagonalization and dynamics of arbitrary boson, fermion and spin many-body systems.
- QuTiP - User-friendly and efficient numerical simulations of a wide variety of open quantum systems.
- SeQuencing - Construct and simulate realistic quantum control sequences using QuTiP.
- SimulaQron - Application level simulator of a quantum network.
- Stim - A fast stabilizer circuit simulator.
- SQUANCH - A distributed simulation framework for quantum networks and channels.
- QuNetSim- A quantum network simulation framework.
- The Walrus- Xanadu's library for simulating Gaussian Boson Sampling.

**Rust**

- QCGPU - High-performance GPU-accelerated quantum computer simulation outlined in this arXiv paper.
- RustQIP - Rust Quantum Computing library leveraging graph building to build efficient quantum circuit simulations.

**Swift**

- SwiftQuantumComputing - Quantum circuit simulator with a bit of genetic programming.

## Quantum annealing

**C++**

- C-to-D-Wave - Compile a very small subset of C to a D-Wave Hamiltonian function

**Go**

- edif2qmasm - Compile Verilog, VHDL, and other hardware-description languages to a D-Wave Hamiltonian function
- QA Prolog - Compile a subset of Prolog to a D-Wave Hamiltonian function

**Python**

- chimera_embedding - Algorithms to generate native-structured embeddings for Chimera graphs.
- dimod - Shared API for Ising and QUBO problems.
- dwavebinarycsp - Map constraint satisfaction problems with binary variables to binary quadratic models.
- dwave-cloud-client - Min. implementation of the REST interface to communicate with D-Wave's Solver API.
- dwave_neal - An implementation of a simulated annealing sampler.
- dwave_networkx - Exploration and analysis of network graphs.
- dwave-system - API for easily incorporating D-Wave quantum annealers as samplers in the Ocean software stack.
- embedding_utilities - Mapping samples between original and embedded graph.
- micro_client_sapi_dimod - Dimod wrapper for the D-Wave Micro Client.
- minorminer - Heuristic tool for minor graph embedding.
- penaltymodel - Utilities and interfaces for using penalty models.
- QMASM - Quantum macro assembler for D-Wave systems

**Python, C & Matlab**

## Quantum algorithms

**C++**

- XACC VQE - Variational quantum eigensolver built on XACC for distributed, and shared memory systems.

**HTML**

- myQShor - Quantum implementation of Shor's algorithm.

**Julia**

- QuantumTomography.jl - Julia package to perform quantum state and process tomography.

**Python**

- Adapt - Algorithms for adaptive refinement of measurements.
- Arline Quantum - Library with implementation of quantum gates and hardware, a part of Arline Benchmarks project.
- FermiLib - Software for analyzing fermionic quantum simulation algorithms with ProjectQ.
- Grove - Quantum algorithms implemented using Rigetti's pyQuil.
- OpenFermion - Compiling and analyzing quantum algorithm for quantum chemistry simulations.
- Paddle Quantum - Quantum machine learning platform to construct & train quantum neural networks, developed by Baidu.
- PennyLane - Library for quantum ML, automatic differentiation and optimization of hybrid computations.
- PyZFS - Package to compute zero-field-splitting tensors for molecules and spin quantum bits in semiconductors.
- QFog - Framework for analyzing both classical and quantum Bayesian Networks.
- QGrad - Library to integrate automatic differentiation tools such as JAX with QuTiP and related quantum software packages.
- Qiskit Aqua - Library of various quantum algorithm implemented with Qiskit.
- Qiskit Nature - Quantum Chemistry including ground state, excited states and dipole moment calculations.
- QPanda - QPanda is a quantum computing framework that can be used to build, run, and optimize quantum algorithms.
- Qiskit Tutorial - Jupyter notebook filled with tutorials for Qiskit.
- Quantum_Edward - Python tools for supervised learning by Quantum Neural Networks
- QuantumFlow - Quantum Algorithms Development Toolkit e.g. allowing for backpropagation with QAOA.
- Quantum TSP - Tutorials on solving Travelling Salesman Problem using quantum computing (QAOA).
- Qudit Team - Repository to extend Qiskit versatility to higher dimensional quantum states.
- spin_qudit_tomography Code used in spin tomography using qudits.
- Tensorflow Quantum - Library for hybrid quantum-classical machine learning.
- VQF - Implementation of Variational Quantum Factoring algorithm (in pyQuil)
- WebMark - Web platform for benchmarking quantum computing algorithms.
- XACC Examples - Example code using XACC for quantum computing.
- XACC QChem - QPU Benchmarks for Quantum Chemistry via XACC, Psi4 and OpenFermion.

**Q#**

- Quantum Katas - Programming exercises for learning Q# and quantum computing.

## Quantum compilers

**C++**

- QCOR - C++ language extension and associated compiler implementation for hybrid quantum-classical programming.
- ScaffCC - Compilation, analysis and optimization framework for the Scaffold quantum programming language.
- tweedledum - C++17 library for analysis, compilation/synthesis, and optimization of quantum circuits.

**Mathematica**

- UniversalQCompiler - Synthesis of isometries (including unitaries and state preparation), channels and POVMs.

**Python**

- Arline Benchmarks - Automated benchmarking platform for quantum compilers, quantum hardware and quantum algorithms.
- BQSKit - Berkeley Quantum Synthesis Toolkit is an optimizing quantum compiler and related tool-set.
- Mitiq - Cross-platform, error-mitigating quantum compiler from Unitary Fund.
- PyZX - Python library for quantum circuit rewriting and optimisation using the ZX-calculus.
- QEDA - Quantum electronic design automation software for optical circuits using QASM.
- QGL2 Compiler - Language compiler for imperative Quantum Gate Language (QGL).
- Qiskit Terra - Python library for quantum circuit rewriting and optimization (supported by IBM).
- Qubiter - Quantum compiler with Python wrapper for LAPACK's CS Decomposition to build a binary tree of matrices.

**Common Lisp**

- quilc - Rigetti's optimizing Quil compiler.

## Quantum converters

**Javascript**

- qconvert-js Quantastica's quantum programming language converter in Javascript.

**Python**

- qconvert Quantastica's quantum programming language converter in Python.

## Quantum assembly

- Blackbird - Open-source quantum instruction language currently used for Xanadu's photonic hardware.
- OpenQASM - Open-source quantum assembly language.
- QMASM - A quantum macro assembler for D-Wave's quantum annealers.
- Quil - An open hybrid quantum/classical instruction set currently used by Rigetti. Parser

## Quantum control

**Python**

- C3 - Open-loop, closed-loop and automated Control, Calibration and Characterization of quantum devices.
- Krotov - Python implementation of Krotov's method for quantum optimal control.

## Quantum interoperability

- scikit-quant - This is a package to improve interopability between different quantum computer software packages.

## Quantum error correction

**Python**

- PyMatching - Python package for decoding quantum error correcting codes with minimum-weight perfect matching.
- qecsim - Python package for simulating quantum error correction using stabilizer codes.
- qiskit-ignis - Tools for quantum hardware verification, noise characterization, and error correction.
- Qsurface - Python package for simulation and visualization of quantum error-correction on surface codes.

## Quantum and post-quantum cryptography

**C**

- liboqs - C library for quantum-resistant cryptographic algorithms.
- openssh - OpenSSH with quantum-safe key exchange algorithms.
- openssl - OpenSSL with quantum-safe cryptographic algorithms.
- PQClean - Clean, portable, tested implementations of post-quantum cryptography.

**Python**

- Crypto-Vinaigrette - Quantum-resistant asymmetric key generation tool for digital signatures.
- QRL - Quantum Resistant Ledger utilizing hash-based one-time merkle tree signature scheme instead of ECDSA.

## Experimental quantum computing

**Julia**

- Qlab.jl - Generic lab tools in Julia.

**Matlab**

- Qlab - Measurement and control software for superconducting qubits.

**Python**

- ARTIQ - Next-generation control system for quantum information experiments.
- OLSQ - OpenQASM package to perform optimal layout synthesis for quantum computing.
- pyEPR - Automated Python module for the design and quantization of Josephson quantum circuits.
- PyRPL - Turn your RedPitaya into a powerful DSP device, suitable as a digital lockbox and measurement device in quantum optics.
- QCoDeS - Python-based data acquisition framework for quantum experiments.
- QFlow-lite - Machine Learning tools for autotuning quantum dot experiments.
- QGL - Domain-specific language embedded in Python for specifying pulse sequences.
- Qiskit Metal - Quantum hardware design and analysis.
- QTT - Quantum Technology Toolbox is a framework for the tuning and calibration of quantum dots and spin qubits.
- Quantify - Data acquisition platform focused on Quantum Computing and solid-state physics experiments.
- qupulse - Quantum computing pulse parametrization and sequencing framework (formerly qc-toolkit).
- scqubits - Simulating superconducting qubits, obtaining energy spectra, plotting energy levels and more.

## Quantum fun

**Board games**

- Entanglion - The world’s first open source quantum computing board game. For 2 players.

**F#**

- Quantum Puzzle Generator - An educational puzzle game for Android and iOS.

**Python**

- bloqit - A tiny qubit duel for your smart phone.
- QiskitBlocks - Game that teaches quantum computing using Qiskit in a Minetest block world.
- Quantum Awesomeness - Simple puzzles to benchmark various quantum processor.
- Quantum Battleships - Playing battleships with quantum measurements.
- Quantum Catsweeper - Quantum game loosely based on Minesweeper Flag.
- SudoQ - Sudoku solver that leverages a D-Wave Quantum Annealer.

**Python & JavaScript**

- Quantum Music Composer for IBM Q - Compose and perform quantum music with IBM Q.
- Quantum Music Composer for Rigetti - Compose and perform quantum music with Rigetti's Forest.

**JavaScript**

- Quantum Game with Photons - Puzzle game in browser, with polarization, superposition, and measurement.

**Scala**

- feyn - Puzzle game for the browser in which you need to find the combination of gates that the qubits need to pass.

## Quantum tools

**Mathematica**

- Quantum - A free Mathematica add-on for Dirac Bra-Ket Notation, Quantum Algebra, Quantum Computing and the QHD approximation to the Heisenberg Equations of Motion.
- QI - Toolkit for common quantum information functions.

**Python**

- IBM Q bot - Bot for Slack and Telegram to monitor the load of IBM Q quantum computers.
- pulsemaker - A Python widget library for designing pulses and pulse schedules for quantum computing hardware.
- pyQuirk - A Python widget for Quirk to be used in Jupyter notebooks, JupyterLab, and the IPython kernel.
- qonduit - A Python library with visualization tools and workflows for quantum computing that utilize the best of what’s available.
- qprof -
`gprof`

-compatible profiler for quantum programs. - QRAND - A multiplatform and multiprotocol quantum random number generator for arbitrary probability distributions.
- QuantumGraphs - Grow and study random graphs by a continuous, randomly collapsing quantum walk.
- toqito - Framework to study problems pertaining to entanglement theory, nonlocal games, and other aspects of quantum information.

**TypeScript**

- SpookyIDE - IDE designed for quantum computing.

**Others**

- Quil syntax highlighter - Syntax highlighter for PyCharm.

## Abandoned projects

*2+ years of inactivity. Feel free to reanimate, document and contribute to some of this work!*

- BLACK-STONE - Specification and implementation of quantum common lisp, for gate-model quantum computers.
- libquantum - C library for quantum computing and quantum simulation.
- libQuantumJava - Crude translation from the C implementation of
`libquantum`

to a Java version. - jquil - Java library for quantum programming using Quil.
- pQCS - Parallel quantum circuit synthesis with optimal T-count.
- PyQLab - Library for instrument control and superconducting QIP experiments.
- PySimulator - Python with C++ backend simulator for superconducting circuits.
- QACG - Quantum Arithmetic Circuit Generator in Haskell.
- QCL - High level, hardware-agnostic programming language for quantum computers (syntax like C or Pascal).
- QCViewer - Visual quantum circuit design and simulation tool.
- QGL.jl - Performance orientated QGL compiler.
- Qlmp - Interpreter for the functional quantum programming language Qumin.
- Qiskit-JS - Quantum information software kit for JavaScript (supported by IBM).
- QOCS - Quantum OCaml Circuit Simulator is a functional approach to simulating quantum gates.
- QuantumUtils - Tools for quantum control, simulation, channel representation conversion, and perturbations.
- Quantum Virtual Machine - Reference implementation of Rigetti's Quantum Virtual Machine.
- Quince - Node-based GUI that allows for graphical configuration of qubit experiments in Auspex.
- Quipper - Scalable functional programming language for quantum computing based on Quantum Lambda Calculus.
- QuSim - Ideal noise-free multi-qubit simulator written in 150 lines of code.
- QSEL - Quantum programming language putting entanglement and superposition front and center.
- sapi_dimod - Dimod wrapper for D-Wave's Solver API (SAPI).
- Squankum - Visual Java quantum simulator.

## Contributing

See the contribution guidelines.

## License

To the extent possible under law, the Quantum Open Source Foundation has waived all copyright and related or neighboring rights to this work.