Beta Version

This version is still in development, but it already passed the alpha stage meaning that it is expected to work, although it is not unlikely to include a few more bugs that we're ironing out or an additional feature to be complete that is still missing.

See a complete list of features sorted by Snap! Websites Development Status

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 ...

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.

PayPal Implementation

The PayPal implementation has been implemented in C++ following the recently developed REST API.

The current implementation supports straight sales and recurring payment plans with setup fees. Recurring payments are limited to ONE recurring product and any number of optional recurring payment setup fee products. All payments are using the PayPal payment method (opposed to PayPal Pro that allows you to directly charge credit card on your website.)

The way the system works with the REST API is different from the SOAP API most of us have been used to. The main significant difference is that ...

Any file uploaded to the website is considered to be an attachment.

An attachment represents a file such as a JavaScript, a CSS, an Image, a third party PDF file, etc.

The content plugin handles the creation and update of attachments because it is the same as regular content as far as content on the site is concerned. The attachment files appear in the files table under their corresponding MD5 sum. The MD5 sum is used to avoid duplication, not as a security feature. So if many users all upload the exact same image, the database includes the image exactly once (of course, Cassandra generates ...

The pages being created can generally be added to your Atom or RSS feeds.

Feeds are read by many to gather your content as it evolves.

This feature makes use of the List feature [core], which allows you to create very specific feeds (i.e. a given number of items, specific page type, date based limitations, etc.), and the Layout feature [core] with specific XSL files that transform the data to an Atom or RSS feed. We can support all the different formats available for feeds. We already support RSS 2.0 and Atom 1.0.

A page may be given an extra text area to enter exactly what you want to appear in the ...


This is not exactly a feature by itself (it is part of the Filter feature [core]), but I felt like there was a need for a specific page to talk about this feature.

The token replacement feature is a way to speak of the capability for the system to provide a set of variables that can be used as replacement of tokens found in pages.

There is one main reason for making this feature part of core: we want ONE scheme that works for all the plugins in a seamless manner.


The syntax is as follow:

token ::= '[' name ( '(' parameters? [,]? ')' )? ...

QR Code feature

Generating a QR Code

This plugin offers a very simple way to generate the QR Code of a page by adding an image tag to the page.

The image tag has to look like this:

<img src="/images/qrcode/<path-to-page>"/>

where the <path-to-page> part is the path to the page without the domain and protocol parts.

We make use of the special name index (or index.html) to return the QR Code of the home page of the website you are working on.


At this time the QR Code path can be followed by two parameters to define the size of the resulting image:


Email feature [core]

Main features to support with emails

  • Multi-part emails, with text, HTML, attachments
  • Theming for the HTML section
  • Emails include a priority
  • Bouncing emails must be managed in some ways
  • Email body must support all the usual tokens
    • The body content (and subject) must be tweak to only include absolute URLs
  • Cumulative emails (i.e. notices that are piled up in a SINGLE email!)
    • Delayed signal emails should be viewed as Cumulative but only the last email should be sent (i.e. I make 3 changes to page X, editing/saving each time, ...

Editor feature [core]

At first we may want to go with an editor that's simpler than CKeditor although CK has the great advantage of managing links better than pretty much all the other editors out there. (i.e. you can click in the link, then click the link icon and the editor automatically selects the whole link for you. Other editors simply assume that your selection ability is perfect!)

The editor must have at least the following to be considered complete enough:

  • Capability to save a draft automatically (auto-save)
  • Basic formatting (bold, italic, underline, strike, sub/sup, lists, indent, ...

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

Contact Us Directly