Below are some of the highlights for the 1.28 release of the QDK.
Resource Estimation v3
The Quantum Resource Estimation feature has been significantly rewritten to be far more capable of modeling and estimating quantum resource requirements across languages, frameworks, architectures, and modalities.
The new implementation is being rolled out in phases, and this initial release includes the Python APIs. The old QRE Python APIs and the VS Code Estimate CodeLens experience are now marked as deprecated.
For more details on the new APIs and examples of their usage, see the QREv3 wiki page.
Improved simulator capabilities
In this release, we have exposed Python APIs to run QIR directly on the underlying simulators (the CPU state vector, Clifford, and density matrix simulators, and the GPU state vector simulator). The simulators have also been updated to handle programs generated for the "QIR Adaptive Profile", meaning the quantum programs they run may contain mid-circuit measurements, conditional branching, loops, etc.
See the QDK Simulators wiki page for more details.
VS Code extension hosting
The VS Code extension hosting has been updated from being purely a web extension to being run in the local Node.js host when running on a desktop VS Code instance. This fixes issues that could be encountered when running in remote configurations, such as when using WSL. This also lays the groundwork for future work on more agentic flows that require interacting with other local Node.js or Python processes (such as MCP Agents).
Debugger "Break on entry"
The integrated quantum debugger for Q# and OpenQASM used to always break on the first statement when launched. This now defaults to false. This can be configured via launch.json in VS Code, e.g.
{
"name": "Debug Q# file",
"type": "qsharp",
"request": "launch",
"program": "${workspaceFolder}/samples/algorithms/Grover.qs",
"stopOnEntry": true
}Other notable changes
- Simplify debugger breaking by @joao-boechat in #3034
- Introduce QIR v2.1 Profile
Adaptive_RIFLAby @swernli in #3037 - Improvements to Q# library documentation by @filipw in #3083
- Optimize
PreparePureStateDby @swernli in #3048 - Add loop emission to
Adaptive_RIFLAby @swernli in #3038 - Ignore dynamic
Factby @swernli in #3098 - Bump wgpu by @billti in #3100
- add
DecomposeCcxPasstorun_qir_cpuby @orpuente-MS in #3107 - Enable running the VS Code extension host on the workspace (Node.js) by default by @joao-boechat in #3093
- Use separate browser/node entrypoints instead of runtime environment detection by @minestarks in #3121
- Bump quantum-sparse-sim to v0.9.4 by @fedimser in #3122
- RIFLA: Support emission of loops over constant arrays by @swernli in #3101
- Sccarda/python docs update by @ScottCarda-MS in #3131
- Copy sparse simulator into QDK by @swernli in #3137
- Upgrade pyqir to v0.12.3 by @orpuente-MS in #3130
- RIFLA: Support iteration over arrays of qubits by @swernli in #3103
- QRE Update by @msoeken in #3090
- Update Python Docs for
qdkpackage by @ScottCarda-MS in #3144 - Copilot skill file updates by @minestarks in #3154
- Remove legacy Jupyter CodeMirror Q# syntax highlighting injection by @Copilot in #3140
- Fix run command hanging on compile errors for OpenQASM and Q# programs by @minestarks in #3155
- Re-export python simulators from
qdk.simulationby @orpuente-MS in #3145 - Default to OpenQASM semantics on compile by @swernli in #3167
- Align gpu and cpu loss behavior by @orpuente-MS in #3129
- Adaptive Profile support for CPU-full-state and Clifford simulators by @orpuente-MS in #3086
- Sample notebooks for QRE update by @msoeken in #3110
- Add orbital entanglement diagram widget by @nabbelbabbel in #2974
- Add deprecation messages for current QRE by @msoeken in #3170
New Contributors
- @nabbelbabbel made their first contribution in #2974
Full Changelog: v1.27.0...v1.28.0