Skip to main content

Thank you for visiting You are using a browser version with limited support for CSS. To obtain the best experience, we recommend you use a more up to date browser (or turn off compatibility mode in Internet Explorer). In the meantime, to ensure continued support, we are displaying the site without styles and JavaScript.

  • Review Article
  • Published:

Quantum programming languages


Quantum programming languages are essential to translate ideas into instructions that can be executed by a quantum computer. Not only are they crucial to the programming of quantum computers at scale but also they can facilitate the discovery and development of quantum algorithms even before hardware exists that is capable of executing them. Quantum programming languages are used for controlling existing physical devices, for estimating the execution costs of quantum algorithms on future devices, for teaching quantum computing concepts, or for verifying quantum algorithms and their implementations. They are used by newcomers and seasoned practitioners, researchers and developers working on the next ground-breaking discovery or applying known concepts to real-world problems. This variety in purpose and target audiences is reflected in the design and ecosystem of the existing quantum programming languages, depending on which factors a language prioritizes. In this Review, we highlight important aspects of quantum programming and how it differs from conventional programming. We overview a selection of several state-of-the-art quantum programming languages, highlight their salient features, and provide code samples for each of the languages and Docker files to facilitate installation of the software packages.

Key points

  • Quantum computing fundamentally differs from other means of computing, requiring the development of domain-specific programming languages and compilation techniques.

  • Quantum programming languages today cater to a variety of purposes and target audiences ranging from newcomers to seasoned practitioners, and which factors are prioritized substantially impacts the design of the language, the ecosystem and the community around it.

  • Programming languages and software tools facilitate the discovery, advancement and development of quantum applications by enabling the verification, resources estimation, program analysis and visualization of quantum applications; they are essential for understanding and analysing both large-scale applications and algorithms for near-term hardware and suitable circuit compilation methods.

  • The requirements for software tools for near-term devices and applications differ substantially from those geared towards scalable, fault-tolerant quantum computing.

  • The field of quantum programming languages and compilers is still nascent, and current research and implementation efforts are focused on low-level circuit optimizations, concentrating on the purely quantum pieces rather than on optimizations that act across the entire program structure.

  • Emulating and accelerating a similar progression to that followed by conventional computing over the past 50 years requires a collaborative effort across disciplines to take full advantage of the acquired knowledge.

This is a preview of subscription content, access via your institution

Access options

Buy this article

Prices may be subject to local taxes which are calculated during checkout

Similar content being viewed by others

Code availability

Examples of code can be found at


  1. Arute, F. et al. Quantum supremacy using a programmable superconducting processor. Nature 574, 505–510 (2019).

    ADS  Google Scholar 

  2. Kandala, A. et al. Error mitigation extends the computational reach of a noisy quantum processor. Nature 567, 491–495 (2019).

    ADS  Google Scholar 

  3. Montanaro, A. Quantum algorithms: an overview. npj Quantum Inf. 2, 15023 (2016).

    ADS  Google Scholar 

  4. Roetteler, M. & Svore, K. M. Quantum computing: codebreaking and beyond. IEEE Secur. Priv. 16, 22–36 (2018).

    Google Scholar 

  5. Montanaro, A. Quantum speedup of branch-and-bound algorithms. Phys. Rev. Res. 2, 013056 (2020).

    Google Scholar 

  6. Chong, F. T., Franklin, D. & Martonosi, M. Programming languages and compiler design for realistic quantum hardware. Nature 549, 180–187 (2017).

    ADS  Google Scholar 

  7. Ross, J. The dawn of quantum programming. Quantum Views 2, 4 (2018).

    Google Scholar 

  8. Nam, Y., Ross, N. J., Su, Y., Childs, A. M. & Maslov, D. Automated optimization of large quantum circuits with continuous parameters. npj Quantum Inf. 4, 23 (2018).

    ADS  Google Scholar 

  9. Kliuchnikov, V., Bocharov, A., Roetteler, M. & Yard, J. A framework for approximating qubit unitaries. Preprint at (2015).

  10. Farhi, E., Goldstone, J. & Gutmann, S. A quantum approximate optimization algorithm. Preprint at (2014).

  11. Peruzzo, A. et al. A variational eigenvalue solver on a photonic quantum processor. Nat. Commun. 5, 4213 (2014).

    ADS  Google Scholar 

  12. Moll, N. et al. Quantum optimization using variational algorithms on near-term quantum devices. Quantum Sci. Technol. 3, 030503 (2018).

    ADS  Google Scholar 

  13. Hoare, T. Null references: the billion dollar mistake. InfoQ (2009).

  14. Iverson, K. E. Notation as a tool of thought. Commun. ACM 23, 444–465 (1980).

    MathSciNet  Google Scholar 

  15. Ying, M. Foundations of Quantum Programming (Morgan Kaufmann, 2016).

  16. Barenco, A. et al. Elementary gates for quantum computation. Phys. Rev. A 52, 3457–3467 (1995).

    ADS  Google Scholar 

  17. Bergholm, V., Vartiainen, J. J., Möttönen, M. & Salomaa, M. M. Quantum circuits with uniformly controlled one-qubit gates. Phys. Rev. A 71, 052330 (2005).

    ADS  MATH  Google Scholar 

  18. Kliuchnikov, V., Maslov, D. & Mosca, M. Fast and efficient exact synthesis of single qubit unitaries generated by Clifford and T gates. Quantum Inf. Comput. 13, 607–630 (2013).

    MathSciNet  Google Scholar 

  19. Ross, N. J. & Selinger, P. Optimal ancilla-free Clifford. T approximation of z-rotations. Quantum Inf. Comput. 16, 901–953 (2016).

    MathSciNet  Google Scholar 

  20. Amy, M., Maslov, D., Mosca, M. & Roetteler, M. A meet-in-the-middle algorithm for fast synthesis of depth-optimal quantum circuits. IEEE Trans. CAD Integr. Circuits Syst. 32, 818–830 (2013).

    Google Scholar 

  21. Bravyi, S. & Kitaev, A. Universal quantum computation with ideal Clifford gates and noisy ancillas. Phys. Rev. A 71, 022316 (2005).

    ADS  MathSciNet  MATH  Google Scholar 

  22. Jozsa, R. An introduction to measurement based quantum computation. Preprint at (2005).

  23. Gottesman, D. & Chuang, I. L. Demonstrating the viability of universal quantum computation using teleportation and single-qubit operations. Nature 402, 390–393 (1999).

    ADS  Google Scholar 

  24. Bocharov, A., Roetteler, M. & Svore, K. M. Efficient synthesis of universal repeat-until-success quantum circuits. Phys. Rev. Lett. 114, 080502 (2015).

    ADS  Google Scholar 

  25. Bocharov, A., Roetteler, M. & Svore, K. M. Efficient synthesis of probabilistic quantum circuits with fallback. Phys. Rev. A 91, 052317 (2015).

    ADS  Google Scholar 

  26. Wiebe, N. & Roetteler, M. Quantum arithmetic and numerical analysis using repeat-until-success circuits. Preprint at (2014).

  27. Granade, C., Ferrie, C., Wiebe, N. & Cory, D. Robust online hamiltonian learning. New J. Phys. 14, 103013 (2012).

    ADS  MathSciNet  MATH  Google Scholar 

  28. Paesani, S. et al. Experimental Bayesian quantum phase estimation on a silicon photonic chip. Phys. Rev. Lett. 118, 100503 (2017).

    ADS  Google Scholar 

  29. Wiebe, N. & Granade, C. Efficient Bayesian phase estimation. Phys. Rev. Lett. 117, 010503 (2016).

    ADS  Google Scholar 

  30. Kivlichan, I. D., Granade, C. E. & Wiebe, N. Phase estimation with randomized Hamiltonians. Preprint at (2019).

  31. Meuli, G., Soeken, M., Roetteler, M. & Häner, T. Automatic accuracy management of quantum programs via (near-) symbolic resource estimation. Preprint at (2020).

  32. Low, G. H., Kliuchnikov, V. & Schaeffer, L. Trading T-gates for dirty qubits in state preparation and unitary synthesis. Preprint at (2018).

  33. Gidney, C. Halving the cost of quantum addition. Quantum 2, 74 (2018).

    Google Scholar 

  34. Meuli, G., Soeken, M., Roetteler, M., Bjorner, N. & De Micheli, G. Reversible pebbling game for quantum memory management. In DATE 288–291 (IEEE, 2019);

  35. Brassard, G., Høyer, P., Mosca, M. & Tapp, A. Quantum amplitude amplification and estimation. Quantum Comput. Inf. 305, 53–74 (2002).

    MathSciNet  MATH  Google Scholar 

  36. Kitaev, A. Quantum measurements and the abelian stabilizer problem. Preprint at (1995).

  37. Shor, P. Polynomial-time algorithms for prime factorization and discrete logarithms on a quantum computer. SIAM J. Comput. 26, 1484–1509 (1997).

    MathSciNet  MATH  Google Scholar 

  38. Quantum Algorithm Zoo;

  39. Houck, A. A., Koch, J., Devoret, M. H., Girvin, S. M. & Schoelkopf, R. J. Life after charge noise: recent results with transmon qubits. Quantum Inf. Process. 8, 105–115 (2009).

    Google Scholar 

  40. Barends, R. et al. Coherent Josephson qubit suitable for scalable quantum integrated circuits. Phys. Rev. Lett. 111, 080502 (2013).

    ADS  Google Scholar 

  41. Imamoglu, A. et al. Quantum information processing using quantum dot spins and cavity QED. Phys. Rev. Lett. 83, 4204–4207 (1999).

    ADS  Google Scholar 

  42. Cirac, J. I. & Zoller, P. Quantum computations with cold trapped ions. Phys. Rev. Lett. 74, 4091–4094 (1995).

    ADS  Google Scholar 

  43. Nayak, C., Simon, S. H., Stern, A., Freedman, M. & DasSarma, S. Non-Abelian anyons and topological quantum computation. Rev. Mod. Phys. 80, 1083–1159 (2008).

    ADS  MathSciNet  MATH  Google Scholar 

  44. Preskill, J. Quantum computing in the NISQ era and beyond. Quantum 2, 79 (2018).

    Google Scholar 

  45. Smith, R. S., Curtis, M. J. & Zeng, W. J. A practical quantum instruction set architecture. Preprint at (2016).

  46. Svore, K. M. et al. Q#: enabling scalable quantum computing and development with a high-level domain-specific language. In Proc. Real World Domain Specific Languages Workshop, 7 (ACM, 2018).

  47. Svore, K. M., Aho, A. V., Cross, A. W., Chuang, I. & Markov, I. L. A layered software architecture for quantum computing design tools. Computer 39, 74–83 (2006).

    Google Scholar 

  48. Cross, A. W., Bishop, L. S., Smolin, J. A. & Gambetta, J. M. Open quantum assembly language. Preprint at (2017).

  49. Cirq Documentation;

  50. Häner, T. & Steiger, D. S. 0.5 petabyte simulation of a 45-qubit quantum circuit. In Proc. International Conference for High Performance Computing, Networking, Storage and Analysis 33 (ACM, 2017);

  51. Kornyik, M. & Vukics, A. The Monte Carlo wave-function method: a robust adaptive algorithm and a study in convergence. Comput. Phys. Commun. 238, 88–101 (2019).

    ADS  MathSciNet  Google Scholar 

  52. Aaronson, S. & Gottesman, D. Improved simulation of stabilizer circuits. Phys. Rev. A 70, 052328 (2004).

    ADS  Google Scholar 

  53. Steiger, D. S., Häner, T. & Troyer, M. ProjectQ: an open source software framework for quantum computing. Preprint at (2016).

  54. Reiher, M., Wiebe, N., Svore, K. M., Wecker, D. & Troyer, M. Elucidating reaction mechanisms on quantum computers. Proc. Natl Acad. Sci. USA 114, 7555–7560 (2017).

    ADS  Google Scholar 

  55. Rand, R., Paykin, J. & Zdancewic, S. QWIRE practice: formal verification of quantum circuits in Coq. In Proc. 14th International Conference on Quantum Physics and Logic, QPL 2017, EPTCS Vol. 266 119–132 (Open Publishing Association, 2018).

  56. Shi, Y. et al. Contract-based verification of a realistic quantum compiler. Preprint at (2019).

  57. Ying, M. Toward automatic verification of quantum programs. Formal Aspects Comput. 31, 3–25 (2019).

    MathSciNet  MATH  Google Scholar 

  58. Nielsen, M. A. & Chuang, I. L. Quantum Computation and Quantum Information: 10th Anniversary Edition (Cambridge University Press, 2011).

  59. Microsoft Quantum Documentation;

  60. Qiskit documentation;

  61. Kluyver, T. et al. Jupyter Notebooks — a publishing format for reproducible computational workflows. In Positioning and Power in Academic Publishing: Players, Agents and Agendas, 20th International Conference on Electronic Publishing 87–90 (2016).

  62. IBM Quantum Experience;

  63. Experience quantum impact with Azure Quantum. Microsoft (2019).

  64. Ho, A. & Bacon, D. Announcing Cirq: an open source framework for NISQ algorithms. Google AI Blog (2018).

  65. Rigetti, C. Introducing Rigetti quantum cloud services. Rigetti (2018).

  66. Alpine Quantum Technologies (AQT);

  67. QuTech Quantum Inspire Home.

  68. Barr, J. Amazon Braket — get started with quantum computing. AWS News Blog (2019).

  69. PyQuil. GitHub

  70. Steiger, D. S., Häner, T. & Troyer, M. ProjectQ: an open source software framework for quantum computing. Quantum 2, 49 (2018).

    Google Scholar 

  71. ProjectQ. GitHub

  72. Paykin, J., Rand, R. & Zdancewic, S. Qwire: a core language for quantum circuits. In Proc. 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017 846–858 (AM, 2017);

  73. QWIRE. GitHub

  74. Amy, M. & Gheorghiu, V. staq — A full-stack quantum processing toolkit. Quantum Sci. Technol. 5, 034016 (2019).

    ADS  Google Scholar 

  75. staq. GitHub

  76. Killoran, N. et al. Strawberry fields: a software platform for photonic quantum computing. Quantum 3, 129 (2019).

    Google Scholar 

  77. Strawberry Fields. GitHub

  78. Sivarajah, S. et al. \({\rm{t}}| {\rm{ket}}\rangle \): a retargetable compiler for NISQ devices. Quantum Sci. Technol. (2020).

  79. \({\rm{t}}| {\rm{ket}}\rangle \). GitHub

  80. McCaskey, A. J., Lyakh, D. I., Dumitrescu, E. F., Powers, S. S. & Humble, T. S. XACC: a system-level software infrastructure for heterogeneous quantum-classical computing. Preprint at (2019).

  81. XACC. GitHub

  82. QuTiP Documentation;

  83. Johansson, J., Nation, P. & Nori, F. QuTiP: an open-source Python framework for the dynamics of open quantum systems. Comput. Phys. Commun. 183, 1760–1772 (2012).

    ADS  Google Scholar 

  84. Johansson, J., Nation, P. & Nori, F. QuTiP 2: a Python framework for the dynamics of open quantum systems. Comput. Phys. Commun. 184, 1234–1240 (2013).

    ADS  Google Scholar 

  85. LaRose, R. Overview and comparison of gate level quantum software platforms. Quantum 3, 130 (2019).

    Google Scholar 

  86. Mosca, M., Roetteler, M. & Selinger, P. Quantum programming languages (Dagstuhl Seminar 18381). Dagstuhl Rep. 8, 112–132 (2018).

    Google Scholar 

  87. Bennett, C. H. et al. Teleporting an unknown quantum state via dual classical and Einstein–Podolsky–Rosen channels. Phys. Rev. Lett. 70, 1895–1899 (1993).

    ADS  MathSciNet  MATH  Google Scholar 

  88. Brassard, G., Braunstein, S. & Cleve, R. Teleportation as a quantum computation. Physica D 120, 43–47 (1998).

    ADS  MathSciNet  MATH  Google Scholar 

  89. Docker, Inc;

  90. Heim, B. Q# 0.6: language features and more. Microsoft (2019).

  91. Geller, A. Why do we need Q#? Microsoft (2018).

  92. Rios, F. & Selinger, P. A categorical model for a quantum circuit description language. In Proc. 14th International Conference on Quantum Physics and Logic, QPL 2017 164–178 (2017);

  93. Geller, A. What are qubits? Microsoft (2019).

  94. Language Server Protocol;

  95. Mykhailova, M. & Svore, K. M. Teaching quantum computing through a practical software-driven approach: experience report. In Proc. 51st ACM Technical Symposium on Computer Science Education, SIGCSE ’20 1019–1025 (ACM, 2020);

  96. Q# samples. GitHub

  97. Q# libraries. GitHub

  98. Abraham, H. et al. Qiskit: an open-source framework for quantum computing. Zenodo (2019).

  99. Cross, A. The IBM Q experience and QISKit open-source quantum computing software. In APS March Meeting Abstracts, 2018, L58.003 (2018).

  100. Qiskit/qiskit-aqt-provider. GitHub (2020).

  101. Qiskit/qiskit-honeywell-provider. GitHub (2020).

  102. Asfaw, A. et al. Learn Quantum Computation Using Qiskit

  103. Jupyter/jupyter-book. GitHub

  104. Paetznick, A. & Svore, K. M. Repeat-until-success: non-deterministic decomposition of single-qubit unitaries. Quantum Inf. Comput. 14, 1277–1301 (2014).

    MathSciNet  Google Scholar 

  105. Broughton, M. et al. TensorFlow Quantum: a software framework for quantum machine learning. Preprint at (2020).

  106. McClean, J. R. et al. OpenFermion: the electronic structure package for quantum computers. Preprint at (2017).

  107. Abadi, M. et al. TensorFlow: a system for large-scale machine learning. In 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI 16) 265–283 (2016).

  108. Cirq source code remarks. GitHub (2018).

  109. Green, A. S., Lumsdaine, P. L., Ross, N. J., Selinger, P. & Valiron, B. Quipper: a scalable quantum programming language. In Proc. 34th ACM SIGPLAN Conference on Programming Language Design and Implementation 333–342 (ACM, 2013);

  110. Smith, J. M., Ross, N. J., Selinger, P. & Valiron, B. Quipper: concrete resource estimation in quantum algorithms. Preprint at (2014).

  111. Anticoli, L., Piazza, C., Taglialegne, L. & Zuliani, P. Verifying quantum programs: from Quipper to QPMC. Preprint at (2017).

  112. Mahmoud, M. Y. & Felty, A. P. Formalization of metatheory of the Quipper quantum programming language in a linear logic. J. Autom. Reason. 63, 967–1002 (2019).

    MathSciNet  MATH  Google Scholar 

  113. Ross, N. J. Algebraic and logical methods in quantum computation. Preprint at (2015).

  114. Fu, P., Kishida, K., Ross, N. J. & Selinger, P. A tutorial introduction to quantum circuit programming in dependently typed proto-quipper. In Reversible Computation - 12th International Conference, RC 2020, Proceedings (eds Lanese, I. & Mariusz, R.) 153-168 (2020).

  115. Childs, A. M., Maslov, D., Nam, Y. S., Ross, N. J. & Su, Y. Toward the first quantum simulation with quantum speedup. Proc. Natl Acad. Sci. USA 115, 9456–9461 (2018).

    MathSciNet  MATH  Google Scholar 

  116. Abhari, A. J. et al. Scaffold: Quantum Programming Language Technical Report TR-934-12 (Princeton Univ., 2012).

  117. Abhari, A. J. et al. ScaffCC: scalable compilation and analysis of quantum programs. Parallel Comput. 45, 2–17 (2015).

    Google Scholar 

  118. Abhari, A. J. et al. ScaffCC User Manual (2018).

  119. Soeken, M., Frehse, S., Wille, R. & Drechsler, R. Revkit: a toolkit for reversible circuit design. Multiple Valued Log. Soft Comput. 18, 55–65 (2012).

    Google Scholar 

  120. Khammassi, N. QX Quantum Computer Simulator;

  121. Scaffold. GitHub

  122. Kliuchnikov, V. Wrong QASM output for teleportation circuit. GitHub (2018).

  123. Javadi-Abhari, A. et al. Optimized surface code communication in superconducting quantum computers. In Proc. 50th Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-50 ’17 692–705 (ACM, 2017);

  124. The Quipper System

Download references


The authors thank P. Selinger, J. Ross, A. Javadi-Abhari and M. Martonosi for their input and advice. The authors thank V. Kliuchnikov for discussions and for sharing his perspectives.

Author information

Authors and Affiliations



B.H., M.S., S.M. and C.G. researched data for the article. B.H., M.S., M.R., M.T. and K.S. contributed substantially to the discussion of the content. B.H., M.S., S.M., C.G. and A.G. wrote the manuscript. B.H., M.R., A.G. and K.S. reviewed and edited the manuscript before submission.

Corresponding author

Correspondence to Bettina Heim.

Ethics declarations

Competing interests

All authors are employed by Microsoft.

Additional information

Peer review information

Nature Reviews Physics thanks Paul Nation, Mingsheng Ying and the other, anonymous, reviewer(s) for their contribution to the peer review of this work.

Publisher’s note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Supplementary information


Kraus operators

Operators defined as part of a theorem characterizing the action of completely positive maps.

Toffoli simulator

A simulator capable of simulating the execution of Toffoli gates.

Grover search

Quantum algorithm for searching an unstructured database.

Quantum phase estimation

Quantum algorithm for estimating the eigenphases of an operator.

Side effects

A side effect in programming is an effect that modifies the program state outside the local environment.


In programming, a monad is a structure that represents computations.

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Heim, B., Soeken, M., Marshall, S. et al. Quantum programming languages. Nat Rev Phys 2, 709–722 (2020).

Download citation

  • Accepted:

  • Published:

  • Issue Date:

  • DOI:

This article is cited by


Quick links

Nature Briefing AI and Robotics

Sign up for the Nature Briefing: AI and Robotics newsletter — what matters in AI and robotics research, free to your inbox weekly.

Get the most important science stories of the day, free in your inbox. Sign up for Nature Briefing: AI and Robotics