Hi Stefan, If you don't need to share anything, than `async.el` does the trick. > But in most cases, in order to be able to show completion candidates, > you need to get access to some data. > FWIW if we consider the lsp-mode scenario the ability to start a separate thread which does not share anything with the main thread and introducing mechanisms for sending/receiving messages(either by copying the data or by transferring the ownership) will be very useful and won't break any existing elisp code. All this is similar to what emacs async is but without the interprocess and serialization overhead which is a dealbreaker for the described scenario. IMO this will be very useful even with some restrictions like not allowing buffer transfer. Thanks, Ivan