Change Log

This file summarizes changes in WackoWiki releases. (Release Notes)


(25.12.2021) 87eae26 -> M5 (Release Notes)

As work on WackoWiki 6.1 is still underway, this is an incomplete list of changes.


secondary config

  1. new 
    • news_structure
    • xml_sitemap_gz
    • theme_color
  2. removed
    • footer_rating
    • dst


  1. new 
    • DB_ERROR_MODE : 0 – silent (default), 1 – warning, 2 – exception

conf files

  1. changed
    1. csp_custom.conf
    2. csp.conf
    3. autoload.conf


  • use of new str_contains(), str_starts_with(), str_ends_with() and Match expression
  • use of PHP null coalescing assignment operator ??=
  • added option to compress sitemap.xml
  • writes sitemap.xml now by default into the xml/ folder
  • disables JavaScript in all SVGs via CSP directive
  • COLLATE tag column case-insensitive for ORDER BY and LIKE
    •  ORDER BY tag COLLATE utf8mb4_unicode_520_ci ASC
    •  WHERE tag COLLATE utf8mb4_unicode_520_ci LIKE
  • removed polls class
  • uses now the IntlDateFormatter for localizing date and time formats & determining DST according the set timezone
  • adds option to set DB error mode for MySQLi and PDO driver


This is only a random selection.

  • added
  • modified
    • get_page_path($tag = '', $titles = false, $separator = '/', $linking = true, $root_page = false)
      • added $tag as first argument, this changes the order of the parameters
  • removed
    • page rating related functions


  • removed poll table
  • removed rating table
  • removed field footer_rating from page table
  • removed field typografica from user_setting table
  • removed field dst from user_setting table
  • changed field timezone to VARCHAR(100) in user_setting table

Database schema changes


  • removed legacy code from upgrade process, requires now at least WackoWiki 6.0.22


  • adds support for AVIF, requires LibGD 2.3.2 and PHP 8.1
  • adds support for JPEG XL, LibGD and PHP support pending


  • search: adds language filter to search in multilanguage mode
  • login: removed check and rehash of legacy password formats
  • added
  • removed
    • polls
    • pollsadd
    • pollsarchive
    • pollspreview
    • mostrated


  • print: sets numerated links always as absolute URL 
  • removed rate handler


  • assigns styles for table headers and columns via :nth-child()
    •  /* users table */
      .users col:nth-child(n+1):nth-child(-n+3) {
          width: 5px;
      .users col:nth-child(4),
      .users col:nth-child(n+6) {
          width: 20px;
  • CSS: uses var() for font-family, specific color attributions and similar
  • breadcrumbs: add the new first argument in the $this->get_page_path() call in header.php
    • -$tpl->breadcrumbs    = $this->get_page_path(false, ' > ', true, true);
      +$tpl->breadcrumbs    = $this->get_page_path(null, false, ' > ', true, true);
  • provisional RTL support for default theme
    • added [dir=rtl] CSS classes


Admin panel

  1. pages: determines news_levels according to the given settings
  2. appearance: added option to set a theme color for the address bar


  • added Persian language



Note that the changelog is usually incomplete, for a complete list of changes that went into R6.1, you can browse the Commit log, the Bug Tracker Log and ToDo list.


(15.12.2021) d662fff -> M27 (Release Notes)


primary config

  1. changed
    1. 'db_charset' => 'utf8mb4',
    2. 'db_collation' => 'utf8mb4_unicode_520_ci',
  2. renamed
    1. database_driver -> db_driver
    2. database_host -> db_host
    3. database_port -> db_port
    4. database_databasename -> db_name
    5. database_user -> db_user
    6. database_password -> db_password
    7. database_collation -> db_collation
    8. database_charset -> db_charset
    9. database_engine -> db_engine

secondary config

  1. new 
    • upload_translit
    • source_handler
    • export_handler
    • canonical
    • base_path
    • opensearch
    • enable_counters
    • permissions_policy
    • news_structure
    • xml_sitemap_gz
  2. renamed
    • owners_can_change_categories -> categories_handler
  3. removed
    • antidupe
    • disable_tikilinks
    • outlook_workaround


  1. new 
  2. removed

conf files

  1. new 
    1. permissions_policy.conf
  2. changed
    1. autoload.conf
    2. router.conf
    3. csp_custom.conf
    4. csp.conf


  • converted all PHP files to UTF-8
  • set utf-8 as default encoding
  • removed unnecessary usage of HTML Unicode entities
  • removed all supertag usage
  • removed depreciated SQL legacy functions
  • removed obsolete translit functions and all related code
  • set the /u flag for all preg_* regex handling Unicode
  • replaced all non Unicode safe functions with their mb_ equivalent where necessary
  • added utf8_ complementary multibyte string functions at lib/mb_extends/mb_extends.php
  • normalizes file_name, tag and user_name to Form C (NFC)
  • new Unicode regex patterns
    •   $wacko_language['USER_NAME']		= '[\p{L}\p{Nd}\-\.]+';
        $wacko_language['USER_NAME_P']	= '\p{L}\p{Nd}\.\-';
        $wacko_language['TAG']		= '[\p{L}\p{M}\p{Nd}\.\-\/]';
        $wacko_language['TAG_P']		= '\p{L}\p{M}\p{Nd}\.\-\/';
        $wacko_language['UPPER']		= '[\p{Lu}]';
        $wacko_language['UPPERNUM']		= '[\p{Lu}\p{Nd}]';
        $wacko_language['LOWER']		= '[\p{Ll}\/]';
        $wacko_language['ALPHA']		= '[\p{L}\_\-\/]';
        $wacko_language['ALPHANUM']		= '[\p{L}\p{M}\p{Nd}\_\-\/]';
        $wacko_language['ALPHANUM_P']		= '\p{L}\p{M}\p{Nd}\_\-\/';
  • fixed falsly setting the description text in page table to 1
  • added session heartbeat to edit and comment handler for logged in users
  • implemented full support for relative path, e.g. <a href="/wiki/WikiPage">
  • the link() function tracks now also external links
  • added support for optional language tag sub-code, e.g. en-NZ or en-GB
  • uses <button> element for submit, cancel and reset buttons
  • added option to disable hit counter
  • added option for Permissions-Policy HTTP response header
    • Permissions-Policy: camera=(), microphone=(), midi=(), geolocation=(), interest-cohort=()
  • added option to compress sitemap.xml
  • writes sitemap.xml now by default into the xml/ folder
  • disables JavaScript in all SVGs via CSP directive
  • COLLATE tag column case-insensitive for ORDER BY and LIKE
    •  ORDER BY tag COLLATE utf8mb4_unicode_520_ci ASC
    •  WHERE tag COLLATE utf8mb4_unicode_520_ci LIKE


This is only a random selection.

  • added
    • Ut::normalize()
    • Ut::translit()
    • get_favicon()
  • modified
    • href($method = '', $tag = '', $params = [], $addpage = false, $anchor = '', $alter = true, $encode = true, , $absolute = false)
      • added $encode to URL-encode according to RFC 3986
      • added $absolute to use absolute URL path
    • save_page($tag, $body, $title = '', [...])
      • changed order of 2nd and 3rd parameter, now $body is in second place
    • get_page_path($tag = '', $titles = false, $separator = '/', $linking = true, $root_page = false)
      • added $tag as first argument, this changes the order of the parameters
  • renamed
    • slim_url() -> underscore_url() – it is no longer used for transliteration
  • removed
    • try_utf_decode()
    • do_unicode_entities()
    • utf8_to_unicode_entities()
    • translit()
    • get_description()


  • dropped support for MyISAM
    • DB sessions are not compatible with MyISAM database engine.
  • uses utf8mb4 as default encoding
  • removed obsolete supertag field from all related tables
  • changed all lang fields to VARCHAR(5) to fit in the new language tag sub-code scheme
  • set collation for tag in page table to utf8mb4_bin
  • changed field referrer to VARCHAR(2083) in referrer table
  • changed field email to VARCHAR(254) in user table
  • removed obsolete hits field from file table
    • the file hit counter worked only for non-image files in local namespace

Database schema changes


  • adds all base pages now for all languages only once
  • sets database collation to utf8mb4_unicode_520_ci as default
  • added localized default site_name
  • fixed wrong version sorting of upgrade array


  • moved BBcode formatter to community repo
  • removed obsolete legacy image/ folder look up via ((image.png))
  • file:attachment.jpg loads now only the local file, use file:/attachment.jpg for global attachments
    • all links to global files must have a slash after the colon file:/ to work from now on 
  • removed support for Tiki-Links, e.g. Wiki.Word -> Wiki/Word
    • allows dot as part of namespace, e.g. Release/6.0/Upgrade
  • added id for file backlink to media
  • added lazy loading for images, e.g. loading="lazy"
  • fixed broken image resizing from external sources, e.g. (( width=500 align=center))
  • added details formatter
    • %%(details title="summary" open=1) Details info. %%
    • Summary The HTML Details Element (<details>) creates a disclosure widget in which information is visible only when the widget is toggled into an "open" state. A summary or label can be provided using the <summary> element.

      A disclosure widget is typically presented onscreen using a small triangle which rotates (or twists) to indicate open/closed status, with a label next to the triangle. If the first child of the <details> element is a <summary>, the contents of the <summary> element are used as the label for the disclosure widget.
  • added info formatter
    • %%(info type="warning" title="Warning") Formatter info.%%
    • Warning

      Formatter info.
      1. type="default | error | example | important | note | question | quote | success | warning"
      2. title="Title"
      3. icon=1 | 0
  • added chat formatter
    • supports various date-username-message chat log formats
    • %%(chat type="[div|table]" user=[0|1]) chat log%%
    • User One Message text by User.
      User Two Message text by Another User. Link in text
      User Three Message text by Yet Another User.
      several lines
      ot text!


new arguments:

  1. wrapper_type="default | error | example | important | note | question | quote | success | warning"
  2. wrapper_title="Title"
  3. col=1 | 0

box  shade page text
type + +
title + +
alignment + 1 2 +
clear + +
width + 1 + 3
column + +
frame + +
automatic line feed + + +

1 This option does not make sense, because the width of the block is always equal to the width of the page.
2 Only to the left.
3 If you don't put the line feeds yourself, the block width is fixed by the engine at approximately 90% of the page width.

%%(wacko wrapper="shade" wrapper_type="note" wrapper_title="Columns" col=4) content... %%


Unicode has the explicit aim of transcending the limitations of traditional character encodings, such as those defined by the ISO 8859 standard, which find wide usage in various countries of the world but remain largely incompatible with each other. Many traditional character encodings share a common problem in that they allow bilingual computer processing (usually using Latin characters and the local script), but not multilingual computer processing (computer processing of arbitrary scripts mixed with each other).

Unicode, in intent, encodes the underlying characters—graphemes and grapheme-like units—rather than the variant glyphs (renderings) for such characters. In the case of Chinese characters, this sometimes leads to controversies over distinguishing the underlying character from its variant glyphs (see Han unification).

In text processing, Unicode takes the role of providing a unique code point—a number, not a glyph—for each character. In other words, Unicode represents a character in an abstract way and leaves the visual rendering (size, shape, font, or style) to other software, such as a web browser or word processor. This simple aim becomes complicated, however, because of concessions made by Unicode's designers in the hope of encouraging a more rapid adoption of Unicode.

A tiny part of the Unicode table

The first 256 code points were made identical to the content of ISO-8859-1 so as to make it trivial to convert existing western text. Many essentially identical characters were encoded multiple times at different code points to preserve distinctions used by legacy encodings and therefore, allow conversion from those encodings to Unicode (and back) without losing any information. For example, the "fullwidth forms" section of code points encompasses a full Latin alphabet that is separate from the main Latin alphabet section because in Chinese, Japanese, and Korean (CJK) fonts, these Latin characters are rendered at the same width as CJK characters, rather than at half the width. For other examples, see duplicate characters in Unicode.


  • admin_utf8database UTF-8 conversion script
  • fixed urls_underscores option breaks path to local file in various actions
  • category : shows now only categories with assigned records by default
  • embed : added optional parameter align="left|center|right"
  • whatsnew : added optional parameter page="Cluster", it does not include files uploaded in global namespace
  • feed : added pagination
  • adminupdate : added option to reset legacy password hashes (only affects inactive legacy accounts used before R5.5)
  • renamed
    • flash -> embed
    • fileusage -> filelinks
  • added
    • pagelinks – the counterpart to backlinks
    • blog – creates a blog in the namespace of your choice


  • added option to disable the source handler
  • shows a notice in the edit handler, when you create a new page and a similar page already exists
  • edit: fixed selected categories were not saved with new page
  • show: added navigation between revisions
  • categories: removed auto-selection of parent category
  • edit: fixed HTML form nesting issue in preview mode
  • diff: added diff mode Merged
  • enables doubleclick edit now only in show handler
  • file: removed hit counter for local file
  • remove: adds ability to remove / hide only certain revisions


  • added <link rel="canonical" href="..."> to common page header
  • added OpenSearch autodiscovery
  • changed default font-size to 14px
  • set viewBox and removed height and width in all SVG files
  • reset nested list style in comments
  • .visuallyhidden class hides non-visible form labels
  • .no-print class hides elements in print view


  • removed obsolete browser cases
  • added button and icon for <small>
  • replaced 'Help' text with icon
  • ECMAScript 2015 Migration
  • added Unicode support

Admin panel

  1. added option to create user without setting email confirm token
  2. removed transliterate module
  3. stores admin panel menu in session
  4. data synchronization: added option to reparse all pages
  5. resync: fixed broken setting of resync_limit
  6. the panel now uses the language of the user account
  7. users: added option to resend email confirmation code
  8. backup: added missing column collation to backup script


  • all translation files are now encoded as UTF-8
  • updated German, Russian and Spanish
  • added support for Chinese, Hindi, Japanese and Korean
    • work in progress, help from native speakers appreciated



Note that the changelog is usually incomplete, for a complete list of changes that went into R6.0, you can browse the Commit log, the Bug Tracker Log and ToDo list.


(31.12.2019) d2649d1 -> M17 (Release Notes)


  1. disabled registration by default in config

primary config

  1. added
    • hashid_seed
    • sql_mode_strict
  2. removed
    • header_action
    • footer_action
    • classes_path
    • action_path -> ACTION_DIR
    • formatter_path -> FORMATTER_DIR
    • handler_path -> HANDLER_DIR
    • theme_path -> THEME_DIR
    • upload_path -> UPLOAD_DIR_GLOBAL
    • upload_path_per_page -> UPLOAD_DIR_PER_PAGE
    • upload_path_backup -> UPLOAD_DIR_BACKUP
    • cache_dir -> CACHE_DIR

secondary config

  1. renamed
    • session_expiration -> session_length
    • x_csp -> csp
    • policy_page -> terms_page
    • disable_autosubscribe -> autosubscribe
  2. new 
    • allow_intercom
    • allow_massemail
    • allow_persistent_cookie
    • allowed_languages
    • anonymize_ip
    • approve_new_user
    • attachments_handler
    • default_diff_mode
    • diff_modes
    • enable_captcha
    • enable_referrers
    • ext_bad_behavior
    • footer_tags
    • help_page
    • hide_article_header
    • link_target
    • list_count
    • menu_items
    • nofollow
    • noreferrer
    • noreply_email
    • notify_diff_mode
    • notify_upload
    • privacy_page
    • pwd_admin_min_chars
    • referrer_policy
    • registration_delay
    • session_store
    • show_permalink
    • sorting_comments
  3. removed
    • x_frame_option
    • session_encrypt_cookie
    • allow_swfobject
    • revisions_hide_cancel
    • session_prefix
    • cookie_prefix
    • date_precise_format -> date_format and time_format_seconds
    • date_macro_format -> date_format and time_format
    • phpmailer
    • disable_npjlinks
    • meta_description
    • meta_keywords
    • tls_proxy

user settings

  1. new 
    • sorting_comments
    • notify_minor_edit
    • notify_page
    • notify_comment
    • menu_items
    • diff_mode
  2. renamed
    • changes_count -> list_count
  3. removed
    • revisions_count -> list_count


  1. new 
    • AP_LOCK
    • XML_DIR
  2. renamed
  3. removed
    • CSP_CUSTOM -> csp_custom.conf

conf files

  1. autoload.conf
  2. router.conf
  3. csp_custom.conf
  4. csp_defaults.conf


  • new session handler
  • new URI router
  • new template engine
  • added auth and form form token
  • added Referrer-Policy HTTP header
  • public registration moderation by admin


  • major refactoring of init system
  • fixed missing slash in LIKE condition to clone, backup or rename cluster
  • using password_hash() and password_verify() API 
  • replaced the error prone use of KiB for upload quota with Bytes
  • give all forms unique names
  • $_REQUEST allows only $_GET and $_POST
  • Self-closing tags (void elements) in HTML5: <br> <hr> <img> <input> <link> <meta>
  • added config option: allow_persistent_cookie
  • added option to change the current SQL mode at runtime
  • file:attachment.ext loads now the local file before the global file
    • it tries to load the local file first and only if there is none, it loads the global file
    • to force the global file with the same name use file:/attachment.ext
  • added option to write sitemap only once in a given period
  • automagic mod_rewrite detection
  • Captcha works again out of the box
  • set <meta name="robots" content="noindex,nofollow"> for meta pages like page index, recent changes
  • fixed broken moderator notification
  • switched diff mode for notify_watcher email to source diff
  • fixed DEFAULT value error in save_revision function (STRICT_TRANS_TABLES SQL mode)
  • invalidate cache for pages with form tokens like login and registration: $this->disable_cache = true; in no_cache($client_only = false)
  • removed deprecated X-Frame-Options in favor of the frame-ancestors directive from the CSP Level 2 specification
  • saves now also page lang with revision
  • unset PHP default_charset for page cache to avoid encoding disagrees ini_set('default_charset', NULL);
  • re-implemented target="_blank" as a user option for external links
  • set link to ((user:UserName UserName)) via config['users_page'] in link() function
  • set link to ((group:GroupName GroupName)) via config['groups_page'] in link() function
  • implemented file link tracking file:we_track_reference_like_we_do_for_links.txt
    • please notice that links inside a %% wrapper still get NOT parsed into the *_link tables
  • separate email address for sending emails noreply_email, Send From / No-reply address e.g.
  • added 'SameSite' cookie attribute: SameSite=Strict
  • removed obsolete TLS-Proxy support
  • page cache takes now also user language into account
  • ensure page via redirect for invalid namespace
  • fixed ensure_tls() sends relative URL in endless loop


This is only a random selection.

  • added
    • validate_email($email_address)
    • validate_form_token($form_name)
    • affected_rows($dblink, $results)
    • can_upload() – checks if user has all rights required to upload files
    • update_link_table()
    • set_user_trail($size = 5)
    • get_user_trail($titles = false, $separator = ' > ', $linking = true, $size)
    • binary_multiples_factor ($size, $prefix = true)
    • load_file_usage($file_id, $for = '')
    • set_cookie($name, $value, $persistent = false)
    • user_link($user_name, $account_lang = '', $linking = true, $add_icon = true)
    • group_link($group_name, $group_lang = '', $linking = true, $add_icon = true)
    • notify_moderator($page_id, $tag, $title, $user_name)
    • notify_watcher($page_id, $comment_on_id, $tag, $title, $page_body = '', $user_id, $user_name, $is_revision)
    • get_list_count($max, $default = 50)
    • print_pagination($pagination = '')
    • write_sitemap($write_site_map = false, $update = false)
    • form_autocomplete_off()
    • add_html()
    • get_html_addition()
    • preload_acls()
    • preload_categories()
    • preload_file_links()
  • modified
    • http->no_cache($client_only = true) – added option to disable also server cache for a page, default false (required for form tokens)
    • form_open($form_name = '', [])
  • renamed
    • get_translation() -> _t()
    • user_is_owner() -> is_owner()
    • load_recently_deleted() -> load_deleted()
    • load_recently_changed() -> load_changed()
    • load_recently_comment() -> load_comment()
    • get_time_string_formatted() -> get_time_formatted()
    • set_session_cookie() -> set_cookie()
    • set_persistent_cookie() -> set_cookie()
    • header() -> theme_header()
    • footer() -> theme_footer()
    • cache_links() -> preload_links()
    • track_link_to() -> track_link()
  • removed
    • get_page_time_formatted() -> get_time_formatted($this->page['modified'])


  • added
    • see class folder ... plus add a short explanation
    • Dbal – database abstract layer
    • DbMysqli
    • DbPDO
    • Diag
    • Http
    • Installer
    • Session
    • SessionDbalStore
    • SessionFileStore
    • Settings
    • Templatest – templatest compiler and factory
    • TemplatestEscaper
    • TemplatestFilters
    • TemplatestSetter
    • TemplatestUser
    • UriRouter – yet another uri router
    • Ut – assorted utility functions used throughout wackowiki
  • renamed
    • RSS -> Feed
  • removed
    • Utility -> Ut


  • added
    • _cache/session
    • _cache/template
    • action/template
    • handler/page/template
    • theme/default/appearance/template
  • renamed
    • actions -> action
    • classes -> class
    • feeds -> feed
    • files -> file
    • formatters -> formatter
    • handlers -> handler
    • icons -> icon
    • images -> image
    • queries -> query
    • modules -> module
    • themes -> theme
  • removed
    • db

Use singular for folder names, it describes a specific entity.

Template Engine

The new template engine provides support for templates, to separate visual code (HTML/CSS) from logic code (PHP).


 $tpl->variable = 'Templatest is awesome.';


 <p>[ ' variable | e ' ]</p>


  1. templatest.php
  2. templatestescaper.php
  3. templatestfilters.php
  4. templatestsetter.php
  5. templatestuser.php

Template support is available for actions, handlers and themes.

URI router

Decouples the serve logic from Apache to be server-agnostic.


\_/   \______________/\_________/ \_________/ \__/
 |           |            |           |        |
scheme     authority     path        query   fragment
 |     ___________________|__
/ \   /                      \


// whole idea is to take URI path, _GET/_PUT/_SERVER data and other
// meta-data, then process rules in this file sequentially, which
// results in dispatched handler to process query,
// and all arguments extracted from URI for further usage by those handlers
// (e.g. you can extract parts of URI to _GET vars, etc.)

// 'language' guide:
// every line of code consists of regex which matched against URI, and
// actions, all separated by whitespace. there are no possibility to
// include whitespace in regex or action.
// regex will be matched against URI, on success all actions executed, on failure - we go for next regex.
// lines without regex is continuations for same regex, and will be executed sequentially if regex matched.

// every single action can succeed or fail. if any one fails - all
// variable assignments made by THIS line (even before failed action) is
// discarded, and we go to next line.

// two control action exist (all action line must succeed for them to act!)
//	_next!		-- jump to next regex (skip next action lines with empty regex)
//	_ok!		-- search terminated with success
// if no _ok! executed ever - search fails and 404 emitted

// that's all on control flow.

// main regex:
// -- usual php preg_* regex syntax apply, including
// delimiters and options after trailing delimiter.
// convenience macros (defined by 'define' line, or supplied by wackowiki) expanded before matching.
// used as {macro} - to be referenced as $1-vars then, or {var=macro} - for inline assignment.
// macros cannot be used in ~-regexes

//	$0..$9	- fields matched by main regex. $0 is complete match, $1 and later - corresponding (...) parts
//	$a..$j	- as $0..$9 but set by sub-matched (by ~ operator) patterns 
//	Gname	- _GET[name]
//	Pname	- _PUT[name]
//	Sname	- _SERVER[name]
//	others	- local variables
// predefined vars:
//	_tls		- 1 or 0, tls session
//	_uri		- parsed URI (it is matched against main regex, but can be changed by assignment)
//	_rewrite	- 1 or 0, mod_rewrite active
// usage of undefined variables considered a failure (if not masked by @ in VALUE expansion, see later)

// similar format used for all actions (not all fields apply for every action, and just ignored):

// value is a string, with expanded variables. expansions:
//	$0 .. $9 / $a .. $j -- see above
//	${name}
//	@$... format can be used to mask undefined variable error
//	$$ - replaced by $
//	$@ - replaced by @

// assignments:
// 	FUNCTIONs can be used: tolower | toupper | int
//	var=$1
//	var:tolower=$1
//	var?=$2				-- assign if not set
//	var!				== var=1
//	dbg=$1,$2,$3		-- Ut::dbg printer ;)

// pattern matching:
//	var~/regex/i			-- sets $a..$j on success
//	var!~/regex/i
//	var~hashid:[1-9]		-- hashid expansion, into $a...
//	var!~hashid:[1-9]

// comparisons:
//	FUNCTIONS can be used: int -- both args converted to int before comparison
//	var==12    var!=12    var:int<12    var>12    var<=12    var>=12

// others:
// var?					-- isset
// var-					-- unset

//define	{method}	name|name|name		// predefined by wackowiki
define		{hashid}	[0-9a-zA-Z]+
define		{i}			[0-9]+
define		{h}			[0-9a-fA-F]+
define		{a}			[0-9a-zA-Z]+
define		{w}			[\w]+
define		{}			[^/]*
define		{*}			.*?
define		{**}		.*

//`^{hashid}$`						$1~hashid:2 Gone=$a Gtwo=$b all=$0+${Gone} _ok! _tls!=0 _method~/g(e)t/i BIN:tolower=$b Pln=${_line}
//									desc=$0 term:tolower=MyMethod term!= Gmethod=show _ok!
//									Op!~/^diff$/i &next!
//									$1~hashid:2 Gone=$a Gtwo=$b Gmethod:tolower=${Op} _ok! // test

		SPATH_INFO!= _uri=${SPATH_INFO} _next!		// if PATH_INFO available - use it
		_rewrite==0 _uri=@${Gpage} Gpage-			// when rewrite mode is off - replace _uri by page _GET variable

`^/*{_uri=*}/*$`	// trim _uri of beginning & trailing slashes
`^index\.(php|html)$`									_uri=

'^'												route=static age=30 static=${_uri}

`^robots\.txt$`										_ok!
`^sitemap\.xml$`									_ok! age=0 

`^(theme/{}/css|theme/_common|admin/style)/{}$`			_ok!	// css
`^image/(wikiedit/)?{}$`								_ok!	// icons
`^theme/default/icon/{}$`								_ok!	// icons
`^js/(lang/)?{}$`									_ok!	// js
`^file/global/{}$`									_ok!	// global uploads
`^setup/(image|css)/{}$`								_ok! unlock=1	// setup inlines
`^xml/{}$`											_ok! age=0	// feeds

'^'												_ok! _install!=0 route=install unlock=1
												session=1 age- static-

`^\.freecap$`										_ok! route=freecap

'^'												engine=1 route=wacko

`^admin\.php$`										_ok! route=admin

		$1~hashid:2 page=$ax$b method=Hashid _ok!
		// $1~hashid:2 Gpage_id=$a Gversion_id=$b page= method=show redirect=301 _ok!

//		page=$1x$2 method=Hashid redirect=301 _ok!

//		method=show _ok!

		method:tolower=$3 _ok!

// catch-all
		method=show _ok!



  • added option to select only a subset of the available languages with multilanguage mode on 
  • added option to set 'cp1257 Windows Baltic'
  • set noindex true for all default pages except for Home and Admin page
  • removed obsolete secondary config settings
  • use version_compare() scheme for upgrade, e.g. version_compare('5.5.rc', '5.5.beta2')
  • fixed DEFAULT values errors for columns 'body_r' and 'body_toc' (STRICT_TRANS_TABLES SQL mode)
  • added missing DEFAULT values in table creation scripts
  • normalized SQL query arrays
  • purges old cache files
  • does not overwrites the provided 'site_name' with the default value anymore
  • fixed wrong version sorting of upgrade array


  • uses new HTML5 <mark> tag for ??highlight text?? syntax
  • parses now audio and video links into their media tags
  • added
    • support for audio, video and SVG files
    • option to add rel= noreferrer and nofollow to external links
    • added <ignore> tag as terminator for paragrafica -> bugs:375
    • new formatter for command line: %%(cl) %%
      • zypper dup --no-recommends
    • anchor link to headings
    • added rel="noopener" for target="_blank"
    • added file:/image.png?200x400&direct&caption media parameters for 
      • linking
        • direct – to file
        • nolink – shows only the image
        • linkonly – shows only link
        • meta – to filemeta handler (default)
      • alignment
        • right
        • left
        • center
      • resizing
        • 400x300 – width x height
        • 0x700 – height
        • 600 – width
      • others
        • caption – shows caption
        • clear – clears float
  • removed
    • double nested pre tag if highlighter class is used
    • redundant anchor <a name="[p|h]1249-1">
    • npjlink patterns
    • icq highlighters -> chat highlighter
  • implemented ACTION4DIFF, sets allowed actions in DIFF
  • does not strip anymore whitespace (or other characters) at the beginning of a non-empty line %% code example %%
  • added new wrapper parameter clear -> clears float
  • made numbers settings accessible for Text_Highlighter:
    • %%(hl css numbers=1 start=2) code example %%
    • numbers line numbering style: 1 -> ol, 2 -> table
    • start make the line numbers start at any number, rather than just 1
    • 2
      body {margin: 0; padding:5px;}
      .class {background:url("")}
  • assigned custom CSS class to interwiki link for icon
    • e.g. source:master/wacko/index.php -> source:master/wacko/index.php -> class="iw-source"
    • e.g. bugs:wacko/index.php -> bugs:395 -> class="iw-bugs"
    • add your CSS class and icon accordingly
      a.iw-source .icon {
          background: rgba(0, 0, 0, 0) url('./../icon/repository.svg') no-repeat scroll left center;
          padding-left: 17px;
      a.iw-bugs .icon {
          background: rgba(0, 0, 0, 0) url('./../icon/report-bug.svg') no-repeat scroll left center;
          padding-left: 17px;
  • fixed broken IRI link encoding


  • toc: allow missing heading levels in table of content
  • fixed inconsistent use of alias 'page' for 'for' / 'root' in actions -> use page= from now on 
  • topics: allow user to edit his forum posts per default
  • include: hide edit link in include if user has no rights to edit the included page
  • menu: fixed broken setting with system=1 (guests)
  • files:
    • fixed false reference for files_cache
    • added parameter track (default off)
    • replaced parameter picture with media
  • search: add categories in results and filter
  • pageindex: added system=1 option to hide default pages
  • whatsnew: added pagination
  • orphaned: fixed broken orphaned pages selection
  • adminupdate: added routine to set missing ACL sets
  • redirect: added parameter temporary=1 to set HTTP status code to 302 (new default: 301)
  • added templates for actions, see sub-folder template/
  • added
    • fileusage
    • hashid
    • lastedited
    • randomimage
  • removed
    • permalinkproxy
    • permalink -> successor hashid


  1. show: fixed broken redirect after editing a page comment with active paging
  2. renamed ms to wordprocessor
  3. diff: added a link to switch directly between diff modes
  4. referrers: added anchor for internal links
  5. _comments: toggle setting that allows users to list comments either with the most recent OR the oldest comment at the top of the list of page comments
  6. upload: added missing file path for local file in preview link
  7. allowed Admin to fix e.g. typos in comments of other users
  8. properties: show keywords with related categories in page properties
  9. remove: updates menu array in session after deleting a related page
  10. show: moved page title (H1) from theme header to show handler
    • to suppress the page title you can set hide_article_header true in your action or theme
  11. added option to turn external referrers off or to show them only to administrators, off by default
  12. added attachments handler
  13. added filemeta handler
  14. added paging to revisions
  15. added templates for handlers, see sub-folder template/


  1. replaced GIF with PNG/SVG icons
    1. optimized SVG files with SVG Cleaner
  2. HTML5 Migration
  3. removed smooth scrolling JavaScript functions in default.js
    • body {
        scroll-behavior: smooth;
  4. default theme
    1. use reverse hierarchy order in page titles
    2. bookmarks as dropdown
    3. added templates, see sub-folder appearance/template/
  5. moved theme icons to default.css
  6. moved wiki link icons to wacko.css
  7. added viewport meta tag <meta name="viewport" content="width=device-width, initial-scale=1">


Admin panel (BETA)

  1. now you must be logged as Admin in the first place to access the admin panel
  2. recovery password login (in case of db corruption) -> requires to set RECOVERY_MODE to 1
  3. fixed Admin Panel sets mode_rewrite always on 
  4. fixed broken groups management
  5. backup & restore:
    1. fixed broken processing of default values with '' and 'timestamp'
    2. uses now the DEFAULT keyword to restore empty values
    3. fixed broken backup and restore for cluster
  6. added AP module
    1. to convert MyISAM to InnoDB
    2. for Bad Behavior extension
    3. for User approval
    4. to config appearance
    5. to config upload
  7. localized most of the message sets, please help to translate the English placeholders into your language
  8. loads separate lang files for Admin panel (see admin/lang/ap.[xy].php)
  9. data sync: added parameter to limit redirects and the number of pages per turn for re-rendering pages


  1. added Bad Behavior extension






  • SWFObject

Note that the changelog is usually incomplete, for a complete list of changes that went into R5.5, you can browse the Commit log, the Bug Tracker Log and ToDo list.


(12.07.2014) 3679c8e -> M3 (Release Notes)


  • use nested list for table of content
  • fixed broken menu session array after updating bookmarks via menu action bugs:367
  • fixed broken reset password link with mode rewrite off 
  • exclude deleted pages from tree
  • exclude deleted pages and comments from search


  • primary config
    1. 'database_charset' => '[latin1|cp1251|...]',
  • constants
    1. HTML_ENTITIES_CHARSET '[ISO-8859-1|cp1251]'


  • removed depreciated MySQL API support
  • PHP Version >= 5.4 patch for htmlspecialchars(), htmlentities(), html_entity_decode()
    • Changed default value of default_charset php.ini option from ISO-8859-1 to UTF-8.
  • replaced preg_replace() e modifier with preg_replace_callback
  • exclude pages from XML sitemap with noindex '1'
  • use field 'deleted ' to mark deleted pages, comments, files
  • renamed function cache_invalidate() to invalidate_page_cache()
  • purges SQL queries cache after adding, renaming or deleting a page / comment
  • show only the default language for selection in usersettings if multilanguage is set off
  • hash the lost password and email confirm code/token in the database
  • PHPMailer: added missing autoloader


  • added field 'cache_id' to cache table
  • database: added missing default values


  • added option to chose charset in DB config section (cp1251 | latin1 | latin2 | greek)


  • tree action: fixed broken nested list
  • fixed loading other language with theme if multilanguage is set off


  • shows upload permissions only to user if uploads are allowed
  • disallow page names with 'Comment[0-9]' and all sub pages
  • added option to show referrers by time

Admin panel (beta)

  • fixed broken backup and restore for cluster and set correct charset
  • fixed deleted pages module
  • show success message after saving changed config settings
  • fixed broken groups management
  • fixed: Error loading admin module "configupload.php"


  • replaced GIF with PNG icons


  • added message sets for resend the email confirmation code
  • updated German, French




Note that the changelog is usually incomplete, for a complete list of changes that went into R5.4, you can browse the Commit log, the Bug Tracker Log and ToDo list.


(17.06.2012) 686eb5b -> Final (Release Notes)


  • removed legacy code for R4.x versions


  • removed upgrade routine for R4.x legacy versions


  • creates a new page not just with the default language


  • ##monospace## now uses <code> instead of <tt>


  • display link to show files / comments only if there is one or/and user has the right to add a new one


  • updated German and French

Note that the changelog is usually incomplete, for a complete list of changes that went into R5.1, you can browse the Commit log, the Bug Tracker Log and ToDo list.


(01.12.2019) 95c416f -> M5 (Release Notes)


  • normalized database


  • added option to chose InnoDB as MySQL database engine


  • renamed and moved wakka.config.php to config/config.php
  • new available settings
    1. abuse_email
    2. allow_swfobject
    3. allow_themes
    4. allow_themes_per_page
    5. allow_x11colors
    6. antidupe
    7. cache_sql
    8. cache_sql_ttl
    9. category_page
    10. comment_delay
    11. comments_count
    12. date_format
    13. date_macro_format
    14. date_precise_format
    15. debug_admin_only
    16. debug_sql_threshold
    17. default_create_acl
    18. default_upload_acl
    19. disable_bracketslinks
    20. disable_formatters
    21. disable_npjlinks
    22. disable_wikilinks
    23. disable_wikiname
    24. edit_summary
    25. email_from
    26. email_priority
    27. enable_comments
    28. enable_email
    29. enable_email_notification
    30. enable_feeds
    31. footer_rating
    32. forum_cluster
    33. forum_topics
    34. groups_page
    35. hide_index
    36. hide_revisions
    37. hide_toc
    38. intercom_delay
    39. ip_login_limit_max
    40. keep_deleted_time
    41. language
    42. license
    43. log_default_show
    44. log_level
    45. log_min_level
    46. log_purge_time
    47. maint_last_cache
    48. maint_last_delpages
    49. maint_last_log
    50. maint_last_oldpages
    51. maint_last_refs
    52. max_login_attempts
    53. minor_edit
    54. name_date_macro
    55. news_cluster
    56. news_levels
    57. noindex
    58. numerate_links
    59. owners_can_change_categories
    60. permalink_page
    61. phpmailer
    62. phpmailer_method
    63. policy_page
    64. publish_anonymously
    65. pwd_char_classes
    66. pwd_min_chars
    67. pwd_unlike_login
    68. reverse_proxy
    69. reverse_proxy_addresses
    70. reverse_proxy_header
    71. review
    72. session_encrypt_cookie
    73. session_expiration
    74. session_match_ip
    75. session_match_useragent
    76. session_time_to_update
    77. session_use_db
    78. site_desc
    79. site_name
    80. smtp_connection_mode
    81. smtp_host
    82. smtp_password
    83. smtp_port
    84. smtp_username
    85. store_deleted_pages
    86. time_format
    87. time_format_seconds
    88. timezone
    89. tls
    90. tls_implicit
    91. tls_proxy
    92. tree_level
    93. upload_quota_per_user
    94. username_chars_max
    95. username_chars_min
    96. users_page

  • removed settings
    1. upload_max_per_user


  • added LaTeX export
  • added Admin panel (beta)
  • implemented PHPMailer (SMTP support)
  • added page / comment title
  • added change summary
  • added timezone support
  • support X-Content-Security-Policy (CSP)
  • support Strict-Transport-Security header


  • Lots of bugfixes & enhancements, including:
    • description showed next to uploaded file on the "upload successful" page.
    • added line for new signature button in WikiEdit
    • email notification if the ownership of a page is transfered
    • implemented cache in NpjTranslit
    • implemented cache for expensive SQL-queries (by default off)
    • _cache folder has now the following subfolders
      • /config
      • /pages
      • /queries
      • /feeds (optional)
    • merged acl and massacl handler
    • merged rename and massrename handler


  • added
    • adminupdate
    • authors
    • categories
    • category
    • deleted
    • feed
    • forums
    • groups
    • menu
    • mostcommented
    • mostrated
    • news / newsinput
    • pagebreak
    • permalink / permalinkproxy
    • polls / pollsadd / pollsarchive / pollspreview
    • randompage
    • tagcloud
    • topics
    • userpages
    • users
    • whatsnew
  • renamed
    • comments -> comment
    • recentlycommented -> commented
    • recentcomments -> comments
  • removed aliases
    • a -> anchor
    • orphanedpages -> orphaned
    • recentchanges -> changes
    • showparagraphs/p -> paragraphs
    • tableofcontents -> toc
    • wantedpages -> wanted
    • mywatchespages -> mywatches
    • searchfor
    • textsearch
    • topicsearch
  • removed
    • lastusers
    • linkstree


  • Typografica:
    • 'laquo' => 0, // angle quotes
    • 'quotes' => 0,
  • renamed
    • comments -> comment
  • extended Wacko Syntax
    • footnotes
      • [[fn text of footnote here]]
    • table header
      • #|
        *|heading 1|heading 2|heading 3|*
        ||cell 1-1|cell 1-2|cell 1-3||
        ||cell 2-1|cell 2-2||


  • added
    • categories
    • clone
    • purge
    • source
    • moderate
    • new
    • rate
    • review
    • latex
  • merged
    • massacls -> acls
    • massrename -> rename
  • renamed
    • acls -> permissions
    • files -> file
    • settings -> properties


  • fixed usage of wrong encoding during upgrade
  • sets SQL mode to permissive


  • changed :::: creates now ((user:UserName UserName))
    • you can set the path for user: in the interwiki.conf (e.g. /User?profil= or User/)


  • Localization
    • localized more remaining and new strings (Russian & English)
    • renamed language files from wakka.xy.php to wacko.xy.php
    • updated German, French, Russian, Greek and Spanish
    • removed Moldavian


  • added new default theme
  • header.php




Note that the changelog is usually incomplete, for a complete list of changes that went into R5.0, you can browse the Commit log.


(20.03.2011) e192369 (Release Notes)


  • added MySQLi support
  • implementing PDO support
    • yet only MySQL works, most of the core classes and actions are not abstracted from MySQL specific code
      • requires vendor specific setup scripts for database
    • For now we only support PDO MySQL. Other PDO dsns will be added in the near future with SQL Lite and PG SQL at the top of the list.
  • ALTERed column
    • body to MEDIUMTEXT in table pages and revisions
    • body_r to MEDIUMTEXT in table pages and revisions


  • New installer has been implemented.


  • changed or new db settings
    • 'database_driver" => 'mysql_legacy',
    • 'database_host" => 'localhost',
    • 'database_port" => ' ',
    • 'database_database' => 'wacko',
    • 'database_user' => 'wacko',
    • 'database_password' => 'mypassword',
  • new available settings
    • 'session_prefix' => 'wacko43_',
    • 'xml_sitemap' => 0,
    • 'spam_filter' => 1,
    • added hide_files and hide_comments to config file
    • the hide_files and hide_comments config options now take 0 to not hide them, 1 to hide them from all users and 2 to hide them from non-registered users
  • added captacha settings
    • 'captcha_new_comment' => 1,
    • 'captcha_new_page' => 1,
    • 'captcha_edit_page' => 1,
    • 'captcha_registration' => 1,


  • RSS feed for "recentcomments"
  • added XML Sitemap Support
    • Ability to turn XML Sitemap on and off via the config file
  • AutoComplete feature — in place completion of wiki-links while pressing Ctrl+Space. MSIE users got pretty inplace menu, Mozilla users got toolbar indicator.
  • redirect non logged in users to the language that suits their system as default (not yet implemented for cache)
  • added optional spam bot protection: Captcha to new page, edit page, page comments and user registration.


  • Lots of bugfixes & enhancements, including:
    • new pdf and rdf link and icon
    • added support for bz2 and 7z to file links
    • implemented cache in NpjTranslit
    • set correct content type for graphics
    • set correct content type for languages
    • hide referrers page from non registered users
    • hide settings page from users that don't have write permission
    • now rename also associated files on filesystem when a page is renamed
    • now remove also associated files on filesystem when a page is removed
    • changed wakka.php?wakka= to index.php?page=
    • changed default ACL configuration values from * to $ for write and comments
    • Now we insert the logo image data into the uploads table during installation. The actual image file is stored in the /files directory. The homepage logo image link has been changed to point to it i.e. file:wacko_logo.png
    • Fixed: multiple installations on same domain sharing session data
    • Fixed: Wanted Pages list has wrong count for referrers
    • Fixed: WantedPages don't obey ACLs


  • add mygroups and updated usergroups
  • add nofiles and allowfiles
  • add edit and comments
  • add nomark attribute for backlinks
  • mostpopular now works also for clusters and on subpages, add <fieldset><legend> and [nomark="1"] option
  • added "bydate" option for mychanges
  • pageindex by letter including result limiting, added two arguments to the PageIndex action. The first is "limit" which sets the maximum number of pages to show at any one time on each index page. The second argument is "letter" which lets you pick which pages to display based on their name starting with a specific letter.
  • update flash action to use SWFObject 2
  • fixed include: Multiple insert of a page is now possible
  • added user level based outputting to the usergroups action i.e. see nothing if you're not logged in, see just the groups you belong to if you're a normal user and see all groups if you're an admin.


  • localized more remaining and new strings (Russian & English)
  • added Danish and Greek
  • updated German, French, Russian, Greek, Spanish, all other languages still have English placeholders


  • hide watch/unwatch icon and "powered by ..." from guests
  • @import "../../common/X11ColorNames.css";
  • localized search box in Tabs theme
  • hide referrer tab from guests in tabs theme
  • header.php
    • added JS include line for autocomplete.js
    • added JS include line for swfobject.js
    • added JS include line for captcha.js
    • include protoedit, wikiedit2, & autocomplete.js only on method==edit
  • ../css/wakka.css
    • added style for autocomplete button
  • added new classes
    • .debug
    • .pageedit form textarea {width: 100%;height: 400px; }
    • img {border:none;vertical-align: middle;}
  • added "new" default theme, the old default theme is now called "wakka"


Removed Features

  • delete outdated j.php action

Note that the changelog is usually incomplete, for a complete list of changes that went into R4.3, you can browse the Commit log and the Bug Tracker Log.



  • complete PHP 5.0 compatibility
  • MySQL 4.1 compatibility (DB locale Latin-1 only)
  • Dozen of XSS vulnerabilities fixed
  • Import (accessible thru {{import}} action) & export (accessible from page`s properties)
  • Lots of bugfixes & enhancements, including:
    • fixed bug on duplicated event email notification
    • fixed anchor issue in InterWiki syntax
    • HTML- & CSS-formatters now take care about Cyrillic characters
    • more pages become XHTML valid.
  • SafeHTML updated to version 1.3.1
  • Source code comments are completely in English from now 
  • RSS autodiscovery feature added
  • Actions:
    • pageindex — Index action with paging support
    • backlinks fixed — empty links removed
    • usergroups lists contents of access groups
  • Translations (language packs)
    • Estonian
    • Portuguese
    • Български
  • Formatters
    • icq formatter: added History++ Miranda plug-in support
    • WackoFormatter: added up-to-3-digit ordered lists & coloring syntax highlight
    • WackoFormatter: correct workaround of missed <table> closing tags
    • introduced wrappers (try %%(wacko wrapper=box))
    • introduced alignment in wrappers (like %%(wacko wrapper=box wrapper_align=right))
  • And stuff.



  • Fixed XSS in textsearch
  • SafeHTML integrated – now you can enable <# #> syntax safely. No XSS =)
  • Text Formatting changes:
    1. Closing delimiter of header formatting (==header==) could contain any number of = (more than 2) — there is no more need to enter exact amount of them as in opening delimiter. Fuf.
    2. Email-like quotation formatting added (per-line > prefix)
    3. Double quotes, {{ and %% now could be escaped with tilda (~)
    4. URLs are displayed as links in ICQ- and Email-highlighted text.
  • Moldavian and Polish translation updated.
  • New action {{admincache}} for cache cleaning.
  • When debug=1 Wacko reports, how much memory used for creating page.
  • Now administrator can change ACL of any page.
  • %%(box align=... width=...) text %%
  • More XHTML compatibility
  • Bugfixes

RC1 (14.07.2004)

  • Automagical smooth scrolling between the anchors in a page.
  • We're close to be fully XHTML 1.0 Transitional compliant
  • Brand new static content cache for unregistered users. Can be turned on by cache=1 config option.
  • Now you can turn off comments for any particular page: {{nocomment}}
  • Now you can change ACLs for whole cluster in two clicks (massacls handler).
  • Option for disabling registration: allow_registration
  • Hurrah! Preview is back.
  • New config option owners_can_remove_comments – allow page's owner to delete comments
  • Watches was broken for “locked” pages.
  • New skin coffee by Konstantin Kolomeetz.
  • New highlighter for css, diff, dtd, php, javascript, mysql, sql, python, xml.
  • New highlighters: ini, html and css.
  • Fixed a lot of bugs, including bug in ACLs.
  • Fixed problem with Apache1 and lowercasing of page names
  • Now we uses WikiEdit 2.0, with that cool toolbar

beta2 (15.04.2004)

  • “Small” text syntax: ++small++
  • “Definition” syntax: (?RTFM Read The Fucking Manual?)
  • “Footnotes” syntax: text[[*]] more text[[*1]]
    [[#*]] Footnote star
    [[#1]] Footnote digit
  • More usable upload
  • Global acl for rename: rename_globalacl
  • New config parameters outlook_workaround, disable_autosubscribe
  • Bugs fixed

beta1 (27.02.2004)

  • Flexible Upload feature
  • Four new language packs (it, fr, pl, nl).
  • Javascript-editor WikiEdit, that allows using shortcuts for quick insertion of wiki-formatting
  • Multilingual support in single installation (pages can be written in different languages and thereby using different encodings — within single installation)
  • Formatting enhancements:
    • Wiki-formatter has now two passes. This feature keeps it from making mistakes.
    • Paragrafica formatter – now HTML contains <p> in addition to <br> (e.g., it allows paragraphs auto-numbering)
    • Formatters (highlighters) for SQL and Pascal or Delphi source code.
    • Formatter for emails
    • “Blockquote” syntax: <[ text ]>
    • New (additional) link syntax: Actions.NewManual
    • Support for \\LAN\Path and file:// protocol
  • Email validation & confirming
  • Password changing, “Forgot password?” function
  • Essential amount of refactoring “action” features (take a look on /Doc/English/Actions new syntax & capabilities). As a result, most of actions now works in a separate cluster of wikispace (for example, you could look on RecentChanges of a separate cluster)
  • Individual “settings” for every page, where you can change language, META keywords and description
  • New actions
    • flash, for inserting flash movies
    • hits, mostpopular – calculate and display the number of requests to pages
  • User settings enhanced, in particular user can choose “theme” (design of wacko pages) from the list of preinstalled themes.
  • IIS compatibility, preliminary.
  • Millions of bugs fixed



  • FIRST THINGS FIRST: some XSS-holes fixed, delete-by-GET-request fixed, Information Disclosure Vulnerability bug fixed.
  • Comment deletion implemented.
  • Page renaming implemented.
  • Comments are mailed to users “watching” the commented page now.
  • Simple diff supplied in email notifications on page changes (for users “watching” the page)
  • new formatters “icq”, “icq_m” & “icq_l” (ICQ, Miranda (nConvers plug-in) & ICQLite in that order) — to paste icq-logs.
    Should be used as: %%(icq_m) ... %% ( ... — paste your log here)
  • Users of “Admins” group (in wakka.config.php) can delete (but not view/edit) any page.
  • Usergroups & interwiki-links became case-insensitive.
  • New URL syntax — underscores & first letters capital. Comments on this are appreciated.
  • Various sort modes in mypages action
  • “Referrers” handler shows BackLinks also.
  • New macros to inlining your WackoName and/or current date (use 4 colons or 31.07.2004 14:50 and KusoMendokusee /31.07.2004 14:50/)
  • Diff enhanced one more time.
  • Significant speed-up due caching of wacko-formatted text wherever it is possible.
  • Tilded links gone deprecated & unsupported. Tilde (~) itself is used only to prevent linking to a WikiLink (like this) now.
  • In-page anchoring now supported due ((#Anchor_name)) syntax & {{anchor..}} action
  • New syntax for semantic markup ??some text?? : some text
  • Some actions look improved.
  • LinksTree action is back & enhanced.
  • meet new wakka.config.php options: url_underscrores, show_spaces and show_datetime.
  • Time of last revision of the page is inserted in HTTP-header (search engines will feel better from now)
  • Many-many errors fixed & unnecessary changes made. Backlinks which were broken in CVS for some time ago fixed too.



  • Multilingual installer
  • Case-insensitive and language-insensitive page names (e.g. /Логин = /Login = /LoGin = /ЛогИн).
  • Typografica — a tool to enhance text according some rules: “pretty quotes”, ©2003, ™, ® & soon.
  • Links are accompanied with icons: email, foreign site link, lock (forbidden page) & key (page with limited access).
  • Separate handler for MSWord export (separate CSS & <div> instead of <br> in line-breaks).
  • “Themes” support — different interface designs w/o changing php-code. There is already two themes included: “default” & “tabs”.
  • WackoClusters — now you can create sub-pages & group pages in so-called clusters (hierarchically classification & some adjacent features)
  • Numerous caching issues that lead to significant performance improvement
  • Some new actions, such as TableOfContents & unified Search
  • Severe XSS problem fixed (there was a possibility to insert any HTML into double-double-quotes. Now this possibility still exists in Raw HTML?, but it is limited and can be completely turned off)
  • Some extensions to formatter, such as %%(noautolinks)...%% & ability to create WikiLinks with spaces inside using ((Page name== Text to place on page)).
  • 100% correct work with mod_rewrite turned off.
  • Numerous small improvements & bug fixes.



  • image insertion by posting link into the page
  • enhanced “code” & “php” formatters
  • foreign links & links to forbidden pages have different CSS-styles
  • WakkaAliases – admin can arrange users in groups using wakka.config.php “Aliases” option
  • spaces in WikiNames
  • separate “print version” handler
  • UserBookmarks – personal menu that user can add page links to 
  • page watching
  • i18n, English & Russian translations
  • complete support of Russian language (yes, that was a very urgent need for us)
  • forget about — all links are converted into [a-z] range
  • Wakka formatter greatly enhanced:
    • added table parsing
    • headers syntax now compatible with OpenWiki
    • bulleted/numbered list syntax now compatible with OpenWiki (old syntax still supported)
    • added strikeout & center
    • most of formatting features limited to one line
    • tons of slight enhancements
  • page deletion added
  • some actions added too:
    • Tree (LinksTree in R3 & greater)
    • Include
    • see Actions for details
  • Much more powerful diff added


Please note: The changes below are made in the dev version of Wakka and won't be available to the public until we prepare a new version (read: no public CVS, sorry), which of course will be posted here, too. So, for example, everything posted above "Released Wakka 0.1.1." won't be available until there's a bold line of text saying "Released Wakka 0.1.2." or something. Hendrik Mans


  • Wakka 0.1.2 is out, containing the changes mentioned below. Sorry about the delay; a busy work schedule as well as a big server move prevented an earlier release. Thanks to everyone for sending in feedback and hacks; I'd love to include some of them in the 0.2 release.

There will probably be a 0.1.3 first, though, containing more fixes (if anyone finds further problems, that is), and some minor new features (including image tags).



  • double slashes in URLs won't mess up the formatting anymore. CarlosZottman

  • Revisions additionally available in RSS format now. CarlosZottman

  • Wakka's XHTML 1.0 Transitional compliant now ("basic compliance" only, i.e. until the formatter is completely rewritten to intercept badly nested tags, the user still has to take care of good nesting, but as long as s/he does, it's compliant;)), and the default CSS file is valid CSS (external file now, the CSS is not hardcoded into actions/header.php anymore). CarlosZottman

  • added static XML file output for RecentChanges page, updated at every page save/edit. CarlosZottman

  • Actions can now have attributes. Action calls are much more fool-proof now and don't care about trailing/leading (white-)spaces anymore; the calls may look like this: {{exampleaction}}, {{ exampleaction }} or {{exampleaction attribute1="test" attribute2="test0r", attribute3="test0sterone"}} (attributes/parameters may be separated by comma or spaces or anything that's neither number nor letter; it's still two brackets as it is now, but I couldn't write them in the examples or Wakka would try to execute these example action calls). CarlosZottman


  • Added global comments on/off switch in the config ("hide_comments"). CarlosZottman


  • ACL change: "§" was added as placeholder for "registered users only". CarlosZottman

  • Everybody give CarloZottmann a hug; he's now a co-developer for this little Wiki engine. :)


  • Rumors of my death are greatly exaggerated! I've been super-ultra-busy the last couple of months and unfortunately didn't have any time to invest into Wakka. This isn't going to change significantly any time soon, I'm afraid, but I'll try to fix a couple of things here and there and get a 0.1.2 out within the next couple of weeks.


  • The Wakka formatter now auto-links URLs.

  • New formatting tag: ... for "notes" text. Looks like this!


  • Fixed a minor-ish problem with the link tracking code.

  • Fixed the silly comment sorting problem on RecentlyCommented.

  • Fixed a text problem on the referrer pages.

  • Fixed a couple of access control related problems. :|

  • Added new {{BackLinks}} action. It inserts a list of all pages that link to the current page. Very useful for structuring your Wakka using categories.


  • Released Wakka 0.1.1.

  • Wakka now purges old page revisions. This is controlled by the new configuration parameter pages_purge_time (which should be set to the number of days old page revisions should be kept — the default value is 90 days).

  • referrers_purge_time now uses days, not hours! If you've had it set at 24, change it to just 1. :)

  • Wakka doesn't use <?= ... ?> any longer. It was causing problems on systems with PHP's short_open_tag disabled. Urk!

  • The web installer/updater now writes the correct configuration file if you've told Wakka to use a non-standard one. More on that, err, later. Yeah.

  • Page previews now have a little "Preview" header at the top. Just in case.

  • You can now lock your Wakka site by creating a file called locked in your Wakka's directory. This file should contain a cleartext password on its first line. Once the file is there, everybody who accesses your site will be asked for a password. You will have to enter the specified password and "admin" as the user name to get in. Note that this isn't supposed to be a quick & dirty password protection hack, but rather a simple way to temporarily protect your Wakka site while, say, upgrading to a new version.

I'm actually thinking about making the installer/updater create this file automatically, so upgrading to a new version is safer. Let me know what you think.


  • Fixed the magic_quote_gpc workaround. Oops!

  • Released Wakka 0.1.
  • Wakka now comes with a .htaccess file that should make "nice URLs" work automagically. (It'll still work if the .htaccess file isn't being used.)
  • Hah. Hahaha. Hahahahhahaa.
  • Added a workaround for the magic quote stuff. Grrrrr.
  • You can now hide/display comments/comment forms. In UserSettings, you can control whether they should be displayed or hidden by default.


  • New configuration variable: navigation_links. A piece of text that gets inserted at the top of the page by the default Header action. This way you can easily change the links at the top without overriding the complete action. (Note: may add something similar for CSS styles in a future version.)
  • New action/handler overriding mechanism: You can now define paths (action_path and handler_path) that will be searched, so you can specify directories containing your own stuff without getting it overwritten when upgrading to a new Wakka version.
  • Added two new functions: Wakka::FormOpen() and Wakka::FormClose(). It is heavily recommended that you use these when putting forms into actions/methods.
  • Added a nice web-based installer/updater. When Wakka recognizes that it's been updated or newly installed, it'll automatically fire up the thing. It'll first ask you to set your configuration values, and then install all necessary tables. In future versions of Wakka, it'll also do all necessary changes.
  • Fix never-ending popup bug.
  • Fixed the stupid little bug in RecentlyCommented with some stupid little code. Yes, stupid. I hate it. It's evil.


  • Not saving empty comments any longer.


  • Oh man. I'm really, really tired. I've been tired all day. Still, I think this has been the most productive day for Wakka so far. Today I converted Wakka from a straight-forward Wiki engine into a real website toolkit. I'm happy. (But tired.) :)
  • I've kinda revamped the user login/signup page (on UserSettings on this site). You are now required to provide a password and an email address when signing up. Also, your user name has to be a WikiName. This rule may get relaxed at some point by making it a configuration option. Also, another upcoming configuration option will allow you to configure your Wakka site so users signing up will have to activate their accounts through an activation mail, for added security.
  • Pages now have owners. Only the page owner can edit a page's access control lists. In the ACL editing screen, he can also pass on ownership of the page to another user. Owners are stored per-revision, so it's possible to trace back who owned the page at what time. Pages created by non-registered users are owned by nobody. Pages owned by nobody can be "claimed" by registered users. In other words: if you want to have control over your created pages, make sure you sign up for an account and log in!
  • Added the ACL stuff. Good lord. It's in. It's easy to use. It rocks. See AccessControl for details.
  • Now there is no comment box on pages that don't exist yet.
  • Added some more comments stuff. There's now a {{RecentlyCommented}} action (see RecentlyCommented) that lists pages that have recently had comments attached to them. May be somewhat more useful than RecentComments.
  • You can now attach comments to pages. The functionality is pretty basic at the moment; I will probably change it so it only displays the comments from the last <n> days, or just the latest <n> comments. Probably the former, in order to "purge" stale discussion about possibly outdated page revisions. <n>, of course, will be a configurable value.


  • You can now view a page's referres from within the last 24 hours. Actually, this number is configurable through the configuration value referrers_purge_time.
  • Oops! I neglected AlwaysTwoCharacters with the header formatting codes. I've changed them so the smallest header now uses ==...== and the biggest ======...======. Yes, it's big!
  • Added a small TextSearch form in the footer action.
  • InterWiki linking implemented.
  • WantedPages can now display a list of pages linking to a wanted (non-existing) Wakka page.
  • Added a basic plugin structure. Pages are now being handled by "handlers", which are similar to classes with methods. In a future version, it will be possible to specify a handler when creating a new page. This will open up a lot of new possibilities for Wakka plugins that go a long way beyond simple Wiki pages.
  • The "header_action" and "footer_action" configuration values are now actually being used. Ahem.
  • Bracketed links are now slacker friendly, supporting lazy links like [[]] or [[]].
  • Added some crazy database optimizations! Wakka is finally as fast as it is supposed to be.


  • Disabled auto-linking of URLs and email address, as this was causing some bad problems. :-(
  • Crazy! You can now embed source code %%like this%%. You can specify a language after the first %% enclosed into brackets. For example: %%(php)<?php actual PHP code ?>%%. Right now, PHP is the only syntax highlighter available, but there will be more available soon, I'm sure.
  • URLs and email addresses are now HTMLified automagically.
  • In unescaped text, HTML tags now can't be used any longer. < and > will automagically be converted to their corresponding HTML entities. If you really need to use raw HTML, you'll have to escape it (by putting it inside pairs of double quotes).
  • When looking an old revision of a page, there now is a button that allows you to send that revision to the editor. This allows you to easily restore old revisions of pages.
  • Rewrote the Wakka formatter. Now it's useful! ;)
  • Added a very sexy Preview button to the editor.
  • In your config file, you can now specify meta_keywords and meta_description. No need to explain what those are for, right?
  • New formatting tag: ##...## for monospace text.
  • Uh-oh, forced links now use [[...]]! Time to update some pages. :)
  • Actions are now {{action}}.
  • Bold, italic and underlined now use **, // and __.
  • You can now use
    to force line breaks. This can be useful in list entries.
  • Wakka now checks for the existence of $_REQUEST[] to make sure it is running on a somewhat recent version of PHP. Without this check, it would go nuts on pre-4.1.0 versions. (Thanks GabeKruger.)


  • Added formatting code for headers.
  • Added formatting code for escaped text; text enclosed in double quotes will not be touched by the formatter at all. Unfortunately doesn't work over multiple lines yet.
  • Clicking the page title will launch a full text search.
  • Added a full text search at TextSearch.
  • When you log in through UserSettings, you will be remembered through cookies. (ie, you don't have to log in again the next time to visit.)
  • You can now disable the double-click editing if you don't like it. Also, it will now only work when you're viewing the page itself, not the editor or revision list.
  • API stuff: added Wakka::Redirect() for HTTP redirects, and Wakka::SetMessage() to store a message that the next page can display (vanilla Wakka does this in a JavaScript alert box).
  • Added a new action: UserSettings — implements basic user management. Basically, Wakka now allows you to create a user account (linked to a WikiUserName) that should, but doesn't have to be password protected. If you don't set a password, anyone can use your WikiUserName. Your name will be used on RecentChanges and maybe some other upcoming pages/actions.
  • Slightly revised the RecentChanges action. Inspired by WikkiTikkiTavi.


  • On the revision list, you can now select two revisions that can be compared for differences.
  • You can now access old versions of all pages.
  • Added some more list types and normal indented text.
  • Rewrote bulleted list code. Now uses tabs.
  • Removed (these) links.
  • Made tabs work in editor.
  • First version online. :)