Syntax Highlighters
Current WackoWiki Situation
WackoWiki relies on:- Pear Text_Highlighter — outdated and unmaintained.
- Handcrafted highlighters and the built-in PHP highlighter (limited scope and maintenance).
- GeSHi plugin — also outdated/unmaintained.
- Highlight.js as an optional plugin — excellent language coverage but client-side JavaScript rendering (re-renders on each load, adds JS dependency, and less ideal for static/server-rendered output).
This setup creates maintenance burden, inconsistent quality, and suboptimal performance (especially with client-side JS).
Recommended Primary Replacement: Phiki
Phiki (by Ryan Chandler) is a pure-PHP syntax highlighter inspired by Shiki. It uses TextMate grammar files for accurate tokenization and VS Code themes for styling.Key strengths:
- High-quality highlighting — Matches VS Code/editor accuracy for many languages.
- Server-side only — Generates static HTML once (no repeated client-side work).
- Fast and lightweight — Pure PHP, no Node.js or heavy deps.
- Themes — Supports popular VS Code themes (e.g., GitHub Light/Dark).
- Extensible — Transformers for custom features (line numbers, highlighting, etc.).
- Actively maintained — Recent releases (v2.x as of 2026), good documentation at phiki.dev.
Basic usage (Composer install:
composer require phiki/phiki:^2.0):
PHP
use Phiki\Phiki;
use Phiki\Grammar\Grammar;
use Phiki\Theme\Theme;
$phiki = new Phiki();
$code = 'your code here...';
$highlighted = $phiki->codeToHtml($code, Grammar::Php, Theme::GithubLight);
echo $highlighted; // Ready-to-use HTML
It also supports terminal output and various grammars/themes.
Integration into WackoWiki:
- Create a new formatter (e.g.,
phiki.phpin the formatters directory). - Hook it into the
%%(language) code %%syntax (Wacko already supports language specifiers). - Map common language names to Phiki's
Grammar::*constants. - Add configuration for default theme, line numbers, etc.
- Cache highlighted output (Wacko already does some caching; enhance for code blocks).
- Provide a fallback for unsupported languages.
Pros for Wacko:
- Replaces multiple outdated systems with one modern library.
- Consistent, beautiful output that matches modern editors.
- Better performance than JS-based solutions for page loads.
- Easy to extend with Wacko-specific features (e.g., copy button, line highlighting).
Potential cons:
- Language support depends on included TextMate grammars (strong for popular languages; may need additions for obscure ones).
- Initial integration effort (but far less than maintaining old highlighters).
Strong Alternative: Tempest Highlight
Another excellent modern PHP option is Tempest Highlight (tempest/highlight).- Very fast, extensible, server-side.
- Good for common languages (PHP, HTML, CSS, Blade, etc.).
- Easy API and custom language support.
- Actively developed and used in real projects.
It could serve as a lighter alternative or complement if Phiki's grammar approach feels heavy for some use cases.
Other Options
- Keep/enhance Highlight.js — As a progressive enhancement or for rare languages. Load it lazily or only when Phiki doesn't support a language. This gives the best of both (server for most, client for edge cases).
- Pygments — Excellent Python library with massive language support, but requires a bridge (e.g., exec or microservice), adding complexity and a Python dependency. Not ideal for pure-PHP Wacko.
- Shiki (via shiki-php) — Similar quality to Phiki but spawns Node.js (slower for live rendering).
- Prism.js or updated highlight.php — Client- or older server-side; generally inferior to Phiki/Tempest now.
Implementation Roadmap Suggestion
- Evaluate — Test Phiki + Tempest on Wacko sample pages with various languages.
- Core Integration — Build a
PhikiFormatter(or make it configurable between Phiki/Tempest). - Backward Compatibility — Alias old formatters or migrate gradually.
- Configuration — Admin settings for default theme, enabled languages, line numbers.
- Enhancements — Add common features: copy-to-clipboard, line numbers, diff highlighting, language auto-detect (fallback).
- Performance — Benchmark render times and implement caching for code blocks.
- Plugins — Optional full Highlight.js fallback or additional themes.
- Documentation & Testing — Update Wacko docs and test with real user content.
Phiki is the clear frontrunner: modern, high-quality, pure PHP, and designed exactly for this use case. It would significantly modernize WackoWiki's code presentation and reduce long-term maintenance.
If you share more details (e.g., target Wacko version, priority languages, or specific requirements like line numbers), I can help refine the integration approach or suggest code snippets.
Phiki Implementation