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.

Cloning Data

A page of content (and remember that pretty much everything in Snap! is a page) can be cloned.

Pages are defined using a URI such as:


Cloning allows you to create a duplicate of that page. Maybe you wanted to copy it to:


Having a copy would allow you to not lose the previous version and new edits on either one do not affect the other. This could also be used when writing a book and a page is quite similar (i.e. the copyright page.)

The clone process copies all the data in the pages, data ...

C-like Expressions

The snapwebsites library includes a parser (yacc like tool) which can be used to generate grammars and thus support different mini-languages that are used internally by the Snap! system to enhance the capabilities by letting end users enter really advanced expressions or definitions.

For example, the domain and website definitions make use of a mini language that allows for a set of domains, a set of websites and each include a set of parameters with optional data.

One extension that is part of the library is support for advanced C-like expressions that are linked to the Cassandra database. ...

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

Introduction (implemented)

Snap! Websites make use of sessions to track the user and react accordingly.

There are currently three types of sessions:

  • Form Sessions
  • User Sessions
  • Secure Sessions

The following describes their use. Note that the basic type of a session does not automatically mean it is used by a plugin of that name. It is viewed as a security level for the session rather than the owner of the session.

Form Sessions

To avoid a lot of website spam, forms have to be protected. This is done by creating a session for the form. The form is then given a ...

Automatic Pages [core]


This looks like an extension of the Message Box feature [core] plugin so we can put all messages in the database instead of the code.

The concept is very simple and explained in the Error Pages feature [core], which also looks like a useless plugin idea.

When something happens and the system needs to show the end user content then it has to offer the content via an existing, real page.

For example, say the user is automatically logged out, we want him to be sent to a page explaining what just happened. Although that page may be displayed as a simple AJAX error message, it is still a page that the ...

As you connect to your website, you want to know what needs to be maintained in order for your site to look at its best.

This includes a large set of things, some of which may not be shown to the user unless the user is pro-active and goes to a full status report for his website.

Things that should be shown to the user as he works on his website are:

  • Version of each element used with Snap! (Page of Versions is done--we should still show the main library version in the status)
  • Broken Links (maybe limited to 3 in the on-screen report + a link to the page(s) of content where the ...

Toolbar feature [core]

We want to support a movable toolbar that floats over the content. This way we can allow users to access all sorts of administrative features without losing screen real estate (i.e. a menu at the top or bottom...)

The toolbar should have tabs to allow for quick browsing of different features. For example, one of the tabs should be something like "Meta Data" that allows you to enter the description, abstract, location, copyright, authors, etc. all sorts of information about your post.

The following is the current list of things we want to offer in the toolbar. Obviously, plugins ...

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

The core system offers an easy way to add tags to the header. This ease the handling of the header and allows us to ensure that the encoding appears first (before the title) which solves several issues with Internet Explorer (including a security issue in IE 6.x.)

Style Sheets

Having one place that handles the HTML header gives us a way to manage the style sheets in one place. This allows us to do two things to the style sheets:

  1. Add them inline when small enough (i.e. less than 1 kb)
  2. Compress them (remove all the possible new lines, spaces, etc.)

Also, all the style ...


The following was writte as a replacement to the 404 and 403 handling in Drupal. However, there is really no reason for us to use such a scheme.

Instead, we want to look into a way to save all the messages in the content.xml files of each plugin and use those messages instead of directly writing messages in the code. That way all those can easily be translated (at least technically it should not be much of a problem.)

This requires us to define a few things such as a way to write messages with variables which are to be replaced at runtime (i.e. if you say something such as "we ...

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

Contact Us Directly