Pharo packages to know
Written on June 2, 2014.
Starting to work with Pharo Smalltalk these days is quite a non trivial process. Non-smalltalkers are already lost with the language and the environment. On top of that, they must learn tools and library names that are quite specific to Smalltalk or Pharo.
Here’s my short list of project name to know:
- Morphic: The GUI layer of Pharo. It is not really
- Spec: A framework to describe user interfaces. It powers quite a few tools in the Pharo environment. At the moment, it uses Morphic as the backend but it should eventually be backend-agnostic.
- Nautilus: The code browser. It’s the primary tool to interact with your code.
- Zinc: an HTTP client and server library integrated into Pharo
- Monticello: A source control (think Git but specialized for Smalltalk packages) dedicated to Smalltalk. It outputs
.mczpackages that contain the whole source code for a given version.
- Gofer: A tool helping you to grab Monticello packages. It can be used to script the loading of Monticello Package
- Metacello: A tool to express the dependencies for your project. Think Bundler, Maven or Pip for Smalltalk. You usually grab the MetacelloConfiguration of a package with Gofer and then ask the configuration to load the project.
- Versionner: A Graphical tool to help you create your Metacello configurations.
- Athens: A new vectorial backend for Pharo. It will eventually replace the current rendering engine. It is based on Cairo.
- NativeBoost: A library to call C libraries from Pharo. Other projects exist (e.g., FFI, Mars) but NativeBoost (NB) is probably the way to go for new projects.
- Filetree: Filetree lets you write Monticello packages into the regular filesystem. If you want to use git, this is the way to go. There are efforts to use git natively with the tools available in the image (e.g., gitfiletree).
There a many more but those are probably the core packages that a newcomer will hear about when (s)he starts to play with Pharo.
Ping me on Twitter if I forgot an important package that does not have a meaningful name.