@minrk (or anybody else... Looking over some chat history, @minrk seems familiar with object serialization) I see in jupyter_client session.py that msgpack is mentioned as an alternative serializer. I've found I can embed a kernel and change the serializer to msgpack (with a little patching because of datetime issues) by setting kernel.session.packer and kernel.session.unpacker appropriately. What I find interesting is that in kernelbase.py there are six calls to json_clean. Does the base class incorrectly assume the serializer will be json, or is json_clean incorrectly named, and the "cleaning" needs to be done in all cases and has nothing to do with the choice of serialization? Something seems wrong here.