Change Log Feed
In chronological order, the change log of the last 10 releases.Feed Title: Release notes from wackowiki[link1]
6.3.0[link2]
WackoWiki v6.3.0 — Major Feature Release
This release represents a massive architectural overhaul, bringing modern JavaScript tooling, a completely rewritten editor experience, hardened security defaults, and a flexible new syntax highlighter.
Headline Features
WikiEdit: Complete Rewrite (ES2023 + ES Modules)
The editor has been modularized into ES6 modules with a dedicated state management layer and a AbortController for all fetch calls.
| Feature | Description |
|---|---|
| Autosave | Never lose drafts again; automatic background persistence. |
| Full Undo/Redo Stack | Deep history management across sessions. |
| Search & Replace | Full regex-supported find/replace inside the editor. |
| Live Preview | Real-time rendering as you type. |
| Syntax Highlighting | Code blocks highlighted inside the editor. |
| Fullscreen / Zen Mode | Distraction-free writing (widescreen centered). |
| Drag & Drop + Paste Images | Upload assets directly into the edit buffer. |
| Markdown ↔ Wacko Converter | Seamless format switching via toolbar. |
| Popup Forms | Guided modals for complex Links and Tables. |
| Toolbar Customization | Add/remove/reorder buttons via config. |
| Resizable Editor | Drag handle to adjust height. |
Dev Note: Complex legacy helpers (
MarkUp,_LSum,_RSum,_TSum) have been refactored. Autocomplete selection bugs are fixed.
Security & Platform Hardening
- Content Security Policy (CSP) Nonces: All inline scripts now use strict nonces.
- Cookie Prefixes (RFC 6265bis):
__Host-and__Secure-prefixes applied for session integrity. - Native Clipboard API: Removed
Clipboard.jsdependency; uses modernnavigator.clipboardwith robust fallback. - Fixed Invalid Selector Tokens: Patched potential broken "Copy to Clipboard" handlers.
Core Architecture & Routing
| Change | Impact |
|---|---|
Virtual _ Handler Prefix | Handlers moved to page/_edit, page/_show, etc. Fixes namespace collisions where user pages named Something/edit clashed with core handlers. |
Composer vendor Folder | All external PHP libraries moved out of lib/ into vendor/ (managed via Composer). |
| Config Array Upgrade | Configuration updates now respect $wacko_config_defaults live, ignoring potentially stale cache. |
| TOC Generation Fix | $this->toc logic repaired for newly created pages. |
UI & Theming
- Dark Mode: First-class support with OS detection (
prefers-color-scheme) and manual toggle. - Double-Click Edit Comments: Rapid inline editing for comment sections.
Syntax & Markup Extensions
Phiki Highlighter (v2.2.0)
Replaces the legacy Pear highlighter. Fast, modern, supports 350+ languages via TextMate grammars.
Migration Required: Obsolete highlighters removed (
css,ini,html,java,pascal,sql).
Action: Run theadmin_replaceaction to auto-migrate:%%(css) → %%(hl css) %%(sql) → %%(hl sql) ... etc
Table Markup Improvements
New attribute system for rows, cells, and tables.
New Syntax:
!| col | col |! # Header row with attributes #|(attr=value) # Row attributes Supported Attributes:
| Attribute | Values | Scope |
|---|---|---|
span | number | Cell/Colspan |
side | top | bottom | Header/Foot position |
class | alternate, sticky, default[left|center|right...], colN[left|right...], col-N[left|right...] | Styling hooks |
CSS Selectors Added:
.alternate— Zebra striping.sticky— Fixed header on scroll.default[left|center|right|top|middle|bottom]— Global cell alignment.colN[...]— Column N alignment (1–25).col-N[...]— Column N from right alignment (1–9)
Helper Functions
- New
table_attr()parser for the extended markup. - Wrapper
pagenow acceptscoloption.
Internationalization (i18n)
New complete translations added:
- 🇭🇷 Croatian (
hr) - 🇹🇭 Thai (
th) - 🇹🇷 Turkish (
tr) - 🇻🇳 Vietnamese (
vi)
Dependency Updates
| Library | Version | Status |
|---|---|---|
| Phiki | 2.2.0 | New (Replaces Pear) |
| Legacy Highlighters | — | Removed |
Upgrade Guide
- Run Composer:
composer install --no-dev(populatesvendor/). - Run Migrations: Execute the installer script.
- Migrate Highlighters: Run the
admin_replaceaction to convert%%(lang)→%%(hl lang). - Check Routes: If you have custom handlers or pages named
edit,show,properties, etc., verify they resolve correctly under the newpage/_*namespace. - Clear Cache: Delete
cache/config/andcache/template/(or runadmincacheaction). - Test CSP: Verify your web server passes the
Content-Security-Policyheader with nonces.
Credits
Huge thanks to contributors for the Phiki integration, the translation teams for HR/TH/TR/VI, and everyone testing the WikiEdit rewrite.
Full Changelog: 6.2.1...6.3.0
Documentation: wackowiki.org
6.2.1[link3]
Minor feature and bug fix release for 6.2.x series
- extend table markup allowing table caption, cell spans, width and cell attributes
?| table caption |?^| header | cell |||| cell ^ header ||||(attr=value) cell | cell ||- attributes:
align = [center|left|right|justify]bgcolor = [blue|red|green|x11colors]colspan = numberid = id_namerowspan = numberscope = [row|col|rowgroup|colgroup]valign = [top|middle|bottom]width = number[px|%|em|rem]
- allows now
[px|%|em|rem]withwrapper_width - change markup syntax for subscript to
,,subscript,, - make
sess->date_patterndependent on$this->user_lang - x11colors.css
- replace
.mark-[blue|green|red]with[xblue|xgreen|xred]to not overwrite default definitions in wacko.css
- replace
- miscellaneous minor fixes
- Libs
- PHPMailer 7.0.2
Full Changelog: 6.2.0...6.2.1
6.2.0[link4]
Major feature release
- SQLite support
- add
DbSqliteclass - add backup & restore in admin panel for SQLite
- rewrote SQL queries to work with MySQL as well as SQLite
- register custom regexp function to use
REGEXPwith SQLite - add functions to abstract SQL syntax and function differences between MySQL and SQLite
utc_dt()date_sub(int $value, string $interval)binary()collate()limit()
- add
- fix missing route case for CSS files in
RECOVERY_MODE - validates the namespace to prevent users from creating inaccessible pages when
mode_rewriteis enabled - add binary string search action (see community folder)
- adds exact or regex search for registered users
- installer
- add SQLite table creation script
- add
_t()function for$lang[]array- installer uses now English as fallback for missing message sets
- add mandatory installer password protection
- It is imperative to set the password for the installer in the
config/lock_setupfile.
- It is imperative to set the password for the installer in the
- add new system page with
whatsnewaction - add private system page with with the
admincacheandadmin_recoveryaction and set it as bookmark for the admin - the installer sets now bookmarks for the admin account, therefore it no longer shows the default bookmarks for the admin in the menu by default
- actions
menu: fix not showing 'Set a bookmark' formwhatsnew:- add filter for pages, comments and files
- show also edited comments in list
- no longer use
linktable formostcommentedandmostpopularaction
- miscellaneous minor fixes
- WikiEdit
- replace
varwithconstandlet
- replace
- update libs
- php-diff 2.5.0
- PHPMailer 7.0.1
- PHP Thumb Library 2.3.3
- SimplePie 1.9.0
Full Changelog: 6.1.29...6.2.0
6.1.25[link5]
Minor feature and bug fix release for 6.1.x series
- removed deprecated
Pragma: no-cacheandExpires:header - fixes
If-Modified-Sinceconditional requests issues - fixes invalid
ETag - fixes various
Cache-Controlheader issues - fixes missing height width value for external img links
- adds option to transliterate filenames to lowercase
- adds
navigationaction - adds option to set the
SameSiteattribute , see constants.php - adds option
login_noticeto hide recurring 'Welcome back' notice - adds full words highlight mode
- miscellaneous minor fixes
- update libs
- PHPMailer 6.9.1
- svg sanitizer 0.18
Full Changelog: 6.1.24...6.1.25
6.1.26[link6]
Minor feature and bug fix release for 6.1.x series
- adds
file_metaforfile_cache - uses
:focus-withinpseudo selector for dropdown - adds CSS class
btn-smandbtn-md - English message sets fixes
- initial language files for Tamil
- re-check for anonymous user before storing cache
soft_login()may setsess->user_profile
- removes redundant
setlocale()call - adds
db_vendorto primary config - installer auto-detects
db_vendor- either
mariadbormysql - uses server SQL mode for installer by default
- in
debugmode thedb_vendorcan be selected in the db config page along with the SQL mode - mainly to solve SQL mode incompatibilities between MariaDB and MySQL
- either
- renames
sql_mode_stricttosql_mode0- server (default)1- session lax2- session strict
- fixes not showing read ACL
$pages in the default menu for logged in users with no own bookmarks defined - miscellaneous minor fixes
- update libs
- svg sanitizer 0.19
- PhpThumb 2.3.1
Full Changelog: 6.1.25...6.1.26
Feed Title: Recent Commits to wackowiki:master[link7]
add CSS class text-secondary[link8]
add CSS class text-secondary
int casting for $user['dark_mode'][link9]
int casting for $user['dark_mode']
re-add autocomplete entry for add_comment heartbeat[link10]
re-add autocomplete entry for add_comment heartbeat
Modernize autocomplete & session heartbeat[link11]
Modernize autocomplete & session heartbeat This commit replaces the fragile `~~~`-delimited text protocol with a proper JSON API, consolidates the handler into a single optimized endpoint, and integrates autocomplete as a standard WikiEdit feature module loaded via main.js. Backend (src/handler/page/_autocomplete.php) - Single UNION query replaces two separate LIKE queries + PHP merge - Removed ancient `escape()`/`%uXXXX` decoding (client sends UTF-8) - Heartbeat (`?_autocomplete=1` only) and autocomplete (`q`+`ta_id`) share endpoint - JSON response: {ta_id, best_match, suggestions[]} Frontend (src/js/editor/features/autocomplete.js – new module) - fetch/AbortController, debounced requests, proper error handling - Lazy dropdown attachment fixes race condition on first response - Keyboard navigation (ArrowUp/Down, Enter, Escape, Ctrl+Space) - Accessible markup (role=listbox, aria-selected, aria-label) - Clean destroy() for WikiEdit lifecycle Session Heartbeat (src/js/editor/features/session-heartbeat.js) - Uses same endpoint, validates JSON `{ok:true}` response - Keeps simple 3-strike warning with draft-save UI (unchanged behavior) Integration (src/js/main.js, src/js/editor/wikiedit.js) - Autocomplete loaded unconditionally via main.js (like live-preview) - Feature flag `data-autocomplete` on textarea controls activation - Instance created BEFORE toolbar build so button renders in initial DOM - `_protoBuildToolbar` attaches dropdown synchronously post-render Template & Handler (src/handler/page/edit.php, edit.tpl, _header.tpl) - Removed inline `<script>` import and conditional script tag - Added `data-autocomplete` attribute driven by user setting - edit.php unchanged – still includes _autocomplete.php for AJAX Removed legacy cruft - `~~~` text parsing, double-query pattern - Ancient JS `escape()` decoder in PHP - Duplicate ACL SQL logicrefactor: add robust lifecycle management[link12]
refactor: add robust lifecycle management - core/init-diag.js * Release the debug‑console popup reference (`window._debugConsole`) and disconnect the MutationObserver on `beforeunload` so the popup and observer can be GC‑ed. - editor/editor-state.js * Implement `EditorState.destroy()` that unsubscribes every listener returned by `subscribe()` and clears internal data. - editor/wikiedit.js * Initialise `this._cleanup = []` in the constructor (guaranteed existence even if a feature throws). * `destroy()` now runs all registered clean‑ups, tears down `EditorState`, `AutoComplete`, removes global refs (`window.weSave`, `textarea.wikiEditInstance`), detaches textarea listeners, clears undo/redo stacks and timers, and calls `super.destroy()` when available. - editor/autocomplete.js * Declare all private handlers (`#handleDropdownClick`, `#handleDropdownMouseover`, `#onButtonClick`, `#onResetClick`) and keep bound references for reliable `addEventListener` / `removeEventListener`. * Add `destroy()` that cancels the debounce timer, aborts in‑flight fetches, removes every DOM listener, and nulls private DOM references. - components/upload.js * Refactor per‑form initialisation into a factory returning a `destroyUpload()` closure that removes all drag‑drop, paste, click listeners and any injected summary UI. The destroy function is stored on the form (`form._destroyUpload`) for SPA unmount handling. - editor/toolbar/toolbar-customizer.js * Auto‑close the toolbar‑customizer modal on `beforeunload` to avoid leaked dialog nodes and listeners. Overall these changes eliminate reference cycles, guarantee cleanup on page unload or SPA navigation.
- [link1] https://github.com/WackoWiki/wackowiki/releases
- [link2] https://github.com/WackoWiki/wackowiki/releases/tag/6.3.0
- [link3] https://github.com/WackoWiki/wackowiki/releases/tag/6.2.1
- [link4] https://github.com/WackoWiki/wackowiki/releases/tag/6.2.0
- [link5] https://github.com/WackoWiki/wackowiki/releases/tag/6.1.25
- [link6] https://github.com/WackoWiki/wackowiki/releases/tag/6.1.26
- [link7] https://github.com/WackoWiki/wackowiki/commits/master
- [link8] https://github.com/WackoWiki/wackowiki/commit/944c9a55044f4f5e16f681c0a38e38a0dc4e7760
- [link9] https://github.com/WackoWiki/wackowiki/commit/19521091989086cf21f832dd3c2d98d1fccd6fdd
- [link10] https://github.com/WackoWiki/wackowiki/commit/d69778c41ab31a3953fbff40f6bcda01a6747c71
- [link11] https://github.com/WackoWiki/wackowiki/commit/4a4c942b92483dffefa9eef147fc1f170e45494f
- [link12] https://github.com/WackoWiki/wackowiki/commit/90a77d95db685468dca07909021cc7faf412de37