Philosophy Statement

The power of Guacamole is based on the simplicity of conventions and sane defaults. Let’s talk about some of the conventions that are followed here.


You will see how the philosophy turns into practice in the command turtorial section.

Defaults Matter

Important things make nice applications and tools behave better than random, ad-hoc scripts that have no consistency and happily crash on anything unexpected. Guacamole strives to enable important things that make using applications pleasant.

By default Guacamole will:

  • Expose detailed help and usage messages.
  • Use translated messages for everything it does.
  • Handle logging for you so that it is useful.
  • Handle crashes for you so that users can send feedback.
  • Use the right directories in your filesystem.
  • Use color-coded information, if supported, for readability.
  • Teach you, the developer, if you make a mistake that it can detect.

Some defaults say to turn a feature off. Guacamole uses spices to let developers opt-into those features that they wish to use. You will learn about spices later in this document. For now just remember that they are equivalent to feature flags.

Documentation Is Important

Documentation is the most important thing you can get wrong easily. You can create perfect tools that do some operation correctly and efficiently but it will all go to waste if nobody can use your product.

Guacamole encourages developers to write useful documentation. The most basic form of documentation is the docstring. The docstring is powerful. You see it while writing your code. Other people can see it by various means, using tools like pydoc or by reading a document generated with a tool like sphinx.

Guacamole has rich support for documentation. By default, a lot of information is extracted from your command docstrings. You can reuse all of that, for free, to create proper manual pages. Quality tools come with documentation and command line tools use manual pages as the most common, most discoverable means of learning about a particular program.

Internationalization is Important

Internationalization is important to many users. While many developers and system administrators are comfortable with reading English it is strongly recommended to support localization. Modern software gets this right.

Guacamole supports internationalization by default. Commands can advertise their gettext domain using the gettext_domain attribute (see get_gettext_domain() for details). Guacamole will carefully work with your docstrings to feed them to gettext and extract the useful bits out.

Commands can mix-and-match different gettext domains without issues. If you are writing a non-trivial application which is composed of commands coming from various sources they will all work correctly together.

Convention over Configuration

Guacamole has a lot of APIs. Most of the time you won’t have to work with them. Guacamole will reuse information that you can provide without defining methods.

This is how the docstrings are used for documentation. This is how you can define numerous attributes to describe specific features of your commands. Instead of working with the methods you can just define an item. This has the advantage that Guacamole can look at your command class and can educate you if you make a mistake. This is easier to work with than reading through back-traces or working with type annotations that may or may not be enough to capture something you want to express.