When implemented in a concurrent language, a window system can be concise. If its client programs connect to the window system using an interface defined in terms of communication on synchronous channels, much of the complexity of traditional eventbased interfaces can be avoided. Once that interface is specified, complex interactive programs can be assembled, not monolithically, but rather by connecting, using the same techniques, small self-contained components that each implement or modify elements of the interface. In particular, the window system itself may be run recursively to implement subwindows for multiplexed applications such as multi-file text editors. This is the software tool approach applied to windows.