@ellisonbg About extending tornado with twisted: I spent some time thinking how I could hack twisted into the existing kernel. The thing is, the API exposed by ipykernel.Kernel is synchronous, and is completely blind to the "Deferred" concept. The only way I see this working is moving all of the twisted logic to another process, and polling for output on the kernel callbacks. Additional thoughts? By the way, twisted has bindings to ZeroMQ with txzmq, so one could reimplement the kernel base with twisted. Im just not a fan of rewriting existing stuff.