There are two ways of writing kernels for Jupyter.
One way is to write native kernel from the scratch or making python wrapper kernels.
I have compiled all the videos that would be helpful for anyone trying to write kernels for Jupyter in their favorite programming language.
For official documentation, see here.
3: By Safia Abdalla
For making native kernels, it is essential to have binding for zeromq in your language of choice.
See one on ZeroMQ here: