JSON. The protocol for front-end / back-end communication, as well as between the back-end
and plug-ins, is based on simple JSON messages. I considered binary formats, but the actual
improvement in performance would be completely in the noise. Using JSON considerably lowers
friction for developing plug-ins, as it’s available out of the box for most modern languages,
and there are plenty of the libraries available for the other ones.
4 years later: The choice of JSON was controversial from the start. It did end up being a source of friction, but for surprising reasons.
For one, JSON in Swift is shockingly slow.
Surprising reasons?! * 2x scaling
* Downloaded libfreetype, enabled subpixel rendering option, replaced existing libfreetype.so
(I think Ubuntu 20 might already have this enabled, but just to be safe I did it manually)
* Turned off all hinting options in font configuration
* Turn on lcddefault filtering
(necessary if you have subpixel rendering enabled)
* Specifically set 158 dpi in Alacritty terminal config
(Not entirely sure that's necessary?)
My exasperation is you were surprised by JSON becoming an issue, when this was the most controversial design decision about the project. To me, it's completely unsurprising.