Snap! Websites Projects

Project Dependencies
(Click to Enlarge)

The Snap! Websites system makes use of several projects that are listed here.

All of these projects are maintained and supported by us so feel free to contact us if you have any problem or question. For contact information, check out the projects each has its own contact information.

All of the projects offered here are also available on launchpad (packages)

All our projects are documented, some have a separate reference found in the list of References of Snap! Websites Projects.

With time we end up with obsolete projects. We are keeping the obsolete projects pages and added a redirect to the new pages, but we are not working on those projects and they are not used in Snap! anymore.

  • The ftmesh project is used to read a font and transform it in a list of triangles (i.e. ft → font; list of triangles → mesh).

    The handling and math are based on the ftgles project.

    The library loads FreeType fonts or any other font supported by the FreeType library and which supports vectors. It then transforms the polygons in meshes. A single character may be represented by multiple meshes; for example, the character "i" has a dot which has to be a separate mesh to work as expected.

    The advance in a string takes the kerning in account if present.

    Note: the library ...

  • Hammer with a forbidden sign on top.The iplock tool is a very simple to use executable used to add or remove IP addresses to your iptables firewall to protect your services such as Apache and Postfix and all local systems.

    The tool reads a set of configuration files under /etc/iplock/... where iptables commands and ports are defined. It is used by the tool to generate the iptables commands to run in order to block or unblock a set of IP addresses.

    The current version supports any number of configurations that can apply blocks in any number of firewall chains. The default offers blocks for specific sets of ports as defined by:

    • HTTP
    • SMTP
    • All (block all ports, no matter what)
  • Introduction

    libexcept library logo

    The Snap! C++ project makes use of exceptions whenever it bumps in a problem which can't be resolved at the time it is detected.

    This model means that exceptions are usually fairly rare (once in a while we have a problem and generate problematic exceptions, but we tend to fix those quickly.) In other words, our exceptions are pretty exceptional. For example, a file can't be opened when it should, we are likely to throw a Run Time Exception.

    As a result, it is possible for us to do something rather slow in our exceptions:

    Collect a Stack Trace

    This helps us ...

  • Introduction

    libutf8 to seamlessly handle UTF-8 in C++This project is a C++ library used to seamlessly handle UTF-8 strings. It offers very easy to use functions to convert characters and strings between UTF-32 and UTF-8.

    The library also includes a string iterator to go through a UTF-8 string without having to first convert it to a UTF-32 string (which saves you a malloc() and free() and up to 4x the space the original string in memory saving.)

    Later we intend to add support for UTF-16.


    The source is available on github in our project git.

    On Ubuntu, you may want to install it from our Snap! C++ Launchpad PPA. ...

  • The snapdev project includes a set of base classes and functions that are header only (a.k.a. inline). A form of std library, if you you wish, but mostly geared toward helper functions we use all over the place.

    The following are the features available at time of writing. It is not unlikely to grow every now and then.


    If possible, change the current user to the root user. Once done, RAII kicks in and switches back to what was the current user earlier.

    This class can also be used to switch to other users. It uses RAII so it is expected to be used within a block of code, not as ...

  • Lamport Algorithm in my book about "Distributed Systems: an algorithm approach" -- click to check out  the book on

    Chapter 7. Mutal Exclusion — Lamport's solution, also called the Bakery Algorithm (p. 130)


    The snaplock project is part of the snapwebsites environment. It is a daemon written in C++ allowing you to lock various resources on an entire cluster of computers for a small amount of time. A resource has a URL which is what we use to create the lock (we call it the Object Name.) The URL can be global to the whole cluster, specific to a website, or even specific to one special variable in a specific page of a specific website (in other words, very small granularity is ...

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly