  Quantum error correction is a crucial tool for mitigating hardware errors in
quantum computers by encoding logical information into multiple physical
qubits. However, no single error-correcting code allows for an intrinsically
fault-tolerant implementation of all the gates needed for universal quantum
computing [1-3]. One way to tackle this problem is to switch between two
suitable error-correcting codes, while preserving the encoded logical
information, which in combination give access to a fault-tolerant universal
gate set [4-6]. In this work, we present the first experimental implementation
of fault-tolerant code switching between two codes. One is the seven-qubit
color code [7], which features fault-tolerant CNOT and $H$ quantum gates, while
the other one, the 10-qubit code [8], allows for a fault-tolerant $T$-gate
implementation. Together they form a complementary universal gate set. Building
on essential code switching building blocks, we construct logical circuits and
prepare 12 different logical states which are not accessible natively in a
fault-tolerant way within a single code. Finally, we use code switching to
entangle two logical qubits employing the full universal gate set in a single
logical quantum circuit. Our results experimentally open up a new route towards
deterministic control over logical qubits with low auxiliary qubit overhead,
not relying on the probabilistic preparation of resource states.
