We present t|ket , a quantum software development platform produced by Cambridge Quantum Computing Ltd. The heart of t|ket is a language-agnostic optimising compiler designed to generate code for a variety of NISQ devices, which has several features designed to minimise the influence of device error. The compiler has been extensively benchmarked and outperforms most competitors in terms of circuit optimisation and qubit routing. User Runtime GPU Classical HPC Logging Task Manager Scheduler Real-Time Controller Control Device Control Device Readout Device … Figure 2: Idealised system architecture for a NISQ Computerprogrammable devices which drive the evolution of the qubits and read out their states. An example of this kind of device is an arbitrary waveform generator, as found in many superconducting architectures. The microwave pulse sequences output by these devices are generated by simple low-level programs optimised for speed of execution. These devices, and the real-time controller which synchronises them, operate in a hard real-time environment where the computation takes place on the time-scale of the coherence time of the qubits. These components combine to execute a single instance of a quantum circuit, possibly with some classical control. By analogy with GPU computing, we refer to this layer as a kernel. One level higher, the scheduler is responsible for dispatching circuits to be run and packaging the results for the higher layers. It is also likely to be heavily involved in the device calibration process. (Calibration data are an important input to the compiler.) This layer and those below may be thought of as the low-level system software of the quantum computer, and must normally be physically close to the device. In the layer above we find service-oriented middleware, principally the task manager, which may distribute jobs to different quantum devices or simulators, GPUs, and perhaps conventional HPC resources, to perform the various subroutines of the quantum algorithm. This layer may also allocate access to the quantum system among multiple users. Finally, at the highest level is the user runtime, which defines the overall algorithm and integrates the results of the subcomputations to produce the final answer.