If you write distributed applications in the style of file servers, then you will encounter graphics in Inferno no sooner than you want to run a graphical debugger to debug your multithreaded application.

But if you are writing an application with a UI, which should work on embedded devices or as a plug-in in the browser (by the way, they are now developing an analogue of the existing Inferno-plug-in for IE under Firefox), then the question “how to write graphical applications in Inferno?” .
Tk
The only way to work with graphics in Inferno is Tk. And Tk support is built into the core (!) Inferno. Of course, for programming graphical UI Tk is easier, probably nothing can be (I do not take designers Delphi UI now, because although using them is easy and convenient, but here is the code that they generate, an order of magnitude more complicated than Tk code).
Absolutely all graphical applications are written on Limbo / Tk in Inferno, including the window system wm itself (analogous to X-Window).
')
But personally, I have always been frustrated by the appearance of Tk applications, and I could never understand why no one would support Tk styles / skins for Tk. :(
Update: in fact, there is
support for styles, just no one has drawn alternative styles yet.
Unfortunately, I cannot add anything more on this issue, because I didn’t work with graphics in Inferno - for now I’m more interested in writing distributed applications and file servers.
Plumbing
Another interesting mechanism in Inferno and Plan9 is Plumbing. In principle, it can also be used in text mode, but it is mainly used when working in wm.
This mechanism provides the ability to transfer messages between applications, and the user can control this process through the plumber-service config file. For example, when you click on a file in the file manager, it simply transfers the name of this file to plumber and it starts the application corresponding to this file. Or with drag-n-drop, when you drag an object from one application to another application's window, the first one simply sends a message to the second through plumber indicating which object to transmit.
Here is an example of the plumber config, for clarity:
Unfortunately, I didn’t work with him much either ... people who worked with Plan9 will most likely be able to tell about plumbing. Feel free to post to this blog, it’s a collective one ...
I just decided that it’s better to mention these things at least that way than by any means. Then again I will write about the things with which he worked. :)