Core Feature

A feature defined in the Core. Although Core Features are programmed in plug-ins too (since they need to make use of the signal mechanism,) they are mandatory and cannot be deselected.

Detect Ad Blocker

This feature detects whether the client is running an ad blocker add-on. If so, sending that user code for ads (such as AdSense) is going to be useless... however, you may have a way to advertise with a simple picture from your website, which should not get blocked.

This specific plugin only determines whether an ad blocker is running or not and saves the information for later so we can avoid sending ad code which won't work with such clients.

The flag can be checked on the client side (with JavaScript) or the server side (in C++) and your plugins can depend on this one and react ...

favicon (Core)

The system offers a way to define the favicon of your website. The favicon is the tiny image shown in your tabs when you access a website. By default, once you install this plugin, the Snap! Website icon is shown. It can be changed by going to the global administration screens.

Later we will also implement an interface so one can change the favicon on a per page or per page type basis instead of one single favicon for the entire website.

The following image shows you the existing user interface allowing you to change your favicon. (Click to enlarge)

Favorite Icon Settings in Snap! Websites

Action Tracker [core]

Whenever a customer reports what he's doing on your website installation, he has no real clue what he did or did not.

This plugin is intended to track each move of the user. This is each click that hit the server that end up saved in the tracker table and includes the date and time when the click happened and the complete URI.

This is indexed using the user email address.

It is only accessible by the administrator of the website and thus can be made available to software developers who need to find bugs that are otherwise very difficult to fathom.

For security reasons, by default the ...

Looking at the many of out assumptions in our code, it is pretty clear that synchronization on your network is crusial.

To make it as easy as possible for administrators to manage their entire network, we want to have one specific plugin that allows for proper synchronization. Here what we need is the same time on all clocks of all the computers in the network.

This is particularly important when dealing with permissions since removing a permission needs to happen, no matter what. This could fail, though, if the clocks on various computers on your network are not properly synchronized.

Note ...


The system has to include a way to work on images. Although users could do that on their computer with a tool such as MS-Paint, The Gimp, or Photoshop, most people do not take the time to do that. So an image editor online is more likely to be used for multiple reasons:

  • The image editor can be used to create a set of instructions to re-apply to any number of images; the Core system and themes can offer many such set of instructions by default;
  • Often the only few things to be applied are resizing, flips, and rotations and it takes a longer time to upload a full ...

The European Union decided that it would be best if websites were to tell you that they are using cookies. This is important for many people who want to protect their freedom.

Unfortunately, without cookies many things cannot be achieved in a website. However, you may have a clear policy that spells out what you do with cookies (i.e. cook them, eat them, market them...) and that way people can decide to use your website further or not.

This is done by displaying a very clear pop-up, most often at the bottom of the screen, which gives the user a way to go to the page describing your cookie ...

The inter-process signalling system is a server that can be communicated with via TCP/IP streams and UDP packets. This is very similar to an RPC system, only extremely specialized for Snap!

When starting Snap! you run snapinit. That process creates the snapcommunicator process which is the signalling server. Once the server is up and running, the other processes are started.

The snapcommunicator process is a server that accepts four types of connections:

  • Quick UDP signals, in most cases those are used to ping a process so it immediately starts a task in the background.
  • ...

OAuth2 [core]

Since the Users plugin has a secure way1 to authorize access to a Snap! system via a browser, offering such an access via OAuth2 is a very easy to implement extension.

The concept is very simple. Applications that want to access our services can do so using special URLs. However, anything that require the user to have permission generally necessitate a user to be logged in. Therefore an application that wants to manipulate data also needs to be logged in.

The application will make use of ...

  • 1. Note that it really will be secure only if you offer the user an encrypted connection with HTTPS.

Quite often, the system has to present some data to the end user.

This data is generally saved in a form that is common to anyone in the world: a number saved as an integer, a date saved as a Unix timestamp, a currency saved as a floating point, etc.

To display that information to the end user, the default format may not be adequat. For example a date may be writen in any one of the following formats:

26.11.2014  Europe
11.26.2014  US
2014.11.26  Japan

Similarly, the separator of digits in a number may be a comma, a period, a space...

(123) 555-1212       US Phone number
US ...


A standalone tool running in the background of all your computers in a Snap! cluster, automatically started by systemd as a service. This tool gathers data to report about the current and past health of each server. Contrary to a backend, this tool is expected to run on ALL servers so we can have a better idea of how they all run and especially be warned about problems such as high CPU usage or disk filling up.

The data gathered includes:

  • Report by Email (Done)
    • Requires presence of an MTA (reported in the snapmanager.cgi Watchdog tab)
  • Network ...

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

Contact Us Directly