F# has had opensourced compiler[2] (written in F#) before it was cool in .Net stack and for most tooling things we are using FSharp.Compiler.Services[3] project - which basically provides all features of F# compiler (and much more) as normal .Net library. Projects like Visual F# Power Tools[4] and Xamarin Studio F# support[5] are using it to provide very interesting F# IDE features.
Since Vim, Emacs, Sublime and Atom (even though Ionide is written in F# and compiled to JS we can't use all .Net libraries) don't have direct access to .Net assemblies, community have created FsAutoComplete[6] project which is just command line wrapper around FSharp.Compiler.Services and works as "standard I/O server" where we send requests (for example if user wants completion list) and get appropriate responses.
[2] https://github.com/Microsoft/visualfsharp
[3] https://github.com/fsharp/FSharp.Compiler.Service
[4] https://github.com/fsprojects/VisualFSharpPowerTools
[5] https://github.com/fsharp/xamarin-monodevelop-fsharp-addin