Sputnik is a wiki designed to be extended into a range of not-quite-a-wiki applications. Sputnik can store its data using plain files, a database or a git repository. Sputnik is written in Lua, drawing on its strengths as an extension language.

Sputnik Is a Wiki

Out of the box Sputnik behaves like a full-featured wiki. Sputnik offers editable nodes, history and diff, user accounts, a flexible permission system, RSS feeds, etc. (See Features for more information.)

This site is running Sputnik. You can click around for a demo, or edit the Sandbox. Or go to Installation to set up your own. If you have a Unix box ready the installation shouldn't take you more than a few minutes. You do not need to have Lua installed and you do not need root access to the machine. (Because we love cheap shared hosting.) It will work on Windows too.

Sputnik Is Extensible

Sputnik is designed to be extended. It has many options out of the box, and it is easy to add more. For example, Sputnik stores its data as plain files on disk by default, but you if you prefer, it can store them in a git repository, in a database (mysql or sqlite3), or in a Subversion repository. Or, you can write your own plugin. (See Configuration for more information.) Sputnik uses LuaRocks for package management, which makes it easy to install plugins.

Sputnik Is Whatever You Want It to Be

Sputnik is designed to be used as a platform for a wide range of "social software" applications. A simple change of templates and perhaps a few lines of Lua code can turn it into a bug tracker, a photo album, a blog, a calendar, a mailing list viewer, or almost anything else. (See Demos for some examples.) So, you can think of it as a web platform of sorts.

Sputnik provides a starting point for anything that is kind of like a wiki but not quite. Sputnik stores its data as versioned "pages" that can be editable through the web (just like any wiki). However, it allows those pages to store any data that can be saved as text (prose, comma-separated values, lists of named parameters, Lua tables, mbox-formatted messages, XML, etc.) While by default the page is displayed as if it carried Markdown-formatted text, the way the page is viewed (or edited, or saved, etc.) can be overriden on a per-page basis.

Suppose you want a calendar that is editable as a wiki but displays in a nice tabular format. You can store a list of events as Lua Tables and for your Version 1 can let your users edit it as such. (Scientific studies show that most people can learn to edit Lua tables.) You still get the benefits of diff, history, etc. out of the box and you get to display your calendar in several formats (including, for example, the iCalendar format). If you want, you can later add a custom "edit" action to give your users an AJAXy edit interface. And if you have nothing better to do, you can even add a custom diff.

In the extreme case, each page can act as a placeholder for a script that generates the content on the fly. So, if you want, you can use Sputnik to display data generated by existing code. (Even code written in C, actually.) To get a better idea of what Sputnik can do, look at the Concepts and the Demos.

Powered by Sputnik | XHTML 1.1