Glamorous Toolkit and Pharo

Glamorous Toolkit (GT) is built using Pharo and can be used for developing Pharo systems, but it features a reimagined development experience that extends beyond Smalltalk.

The primary goal of GT is to support Moldable Development. The first generation of GT, which was integrated into Pharo in 2014, started with the Inspector, Debugger and Spotter and showed that we can indeed provide an experience that is distinct from any other, including the classic Smalltalk one. The new GT takes Moldable Development much further.

Especially visible are new kinds of tools, like Lepiter with its live multi-language notebooks, or Coder with expandable editors.

Still, there are less visible components that are as interesting. Underneath, we have a generic infrastructure for handling other languages based on SmaCC, the parsing engine. Based on this we get also support for software analysis, and support for editing for other languages including engines for syntax highlighting and completion.

You can think of GT as a set of tools, but that would miss the point. GT is a whole environment that enables a new way of thinking about programming. We see the environment as a language, one that extends the base language with visual and interactive operators that can be combined in many ways. For instance, Examples offer a different technical way to capture tests, but when combined with live documents they can change how we document our systems and even how technical people communicate with non-technical people.

In GT we can escape a single image runtime by splitting a job across multiple worker images through the RemoteRunner. In this model, the worker images can be either on the same machine or on different machines, and the job tasks can be dispatched both through a logic in GT, or through an external queue. Moreover, the whole support is debuggable and offers extensive observability out of the box.

GT relies on the vm, language, and basic libraries of Pharo, but the environment is based on a completely separate Graphical stack that renders every scene through a single rendering tree. On the one hand, this allows us to create new kind of interfaces. On the other hand, visualizations become first class citizens at a very low cost (see Visualizer).

The overall runtime is based on Rust which controls the user interface rendering. The Pharo Virtual Machine is used as a library in a separate process.

GT loads cleanly in Pharo. In practice, this means people working on projects built on top of the classic Pharo runtime have the option of two distinct environments.

While we bundle multiple things together, we still keep GT highly modular. It is currently built out of 196 distinct, yet combinable, components. The picture below provides an overview of these components and their interdependencies.

The development of this extensive ecosystem of project is supported seamlessly by Releaser, a technical engine that makes it possible to version deeply nested projects and repositories completely automatically. This can also be used by others that build on top of GT to version their code seamlessly as well.

To get an idea of the extent of the environment, see A code size analysis.