# DokuWiki Changes **DokuWiki Changes** is a record of every place this installation patches DokuWiki core directly (`inc/`, `bin/`, entry points), plus an honest assessment of which patches actually required touching core versus which ones could have been ordinary plugins. `lib/tpl/` and `lib/plugins/` are separate, gitignored git repositories not covered here except where they interact with a core patch. ## Had to be core One change genuinely could not have been a plugin. - **Page file extension `.txt` → `.md`** (`inc/init.php` defines `DOKU_EXT`). DokuWiki hardcodes `.txt` as a string literal in `wikiFN()` (`inc/pageutils.php`), the extension filters and `pathID()` in `inc/search.php`, the page-file glob in `inc/TreeBuilder/PageTreeBuilder.php`, namespace templates in `inc/common.php`, and the export filename in `inc/Action/Export.php`. None of these are event hooks, they're direct string comparisons and concatenations scattered through code that runs on every page load. There is no extension point a plugin could intercept to change what "a page file" means globally. `bin/wantedpages.php` and the new `bin/migrate-ext.php` needed the same fix for consistency. ## Could plausibly have been plugins These touch core but DokuWiki exposes an event or extension mechanism that would have avoided it. - **Cache invalidation on save** (`inc/Action/Save.php`, commit `3146996`). Explicitly clears `CacheInstructions` and `CacheRenderer` after a save so a no-op re-save still forces a re-render. DokuWiki fires `COMMON_WIKIPAGE_SAVE` around this exact point; an action plugin hooking that event and calling the same two cache classes would have done this without editing core. - **Math, `eqn`, `latex_figure` rendering** (`inc/parser/renderer.php` + `inc/parser/xhtml.php`, commit `fb8ba4b`). Added three new renderer methods with abstract stubs. New markup syntax is the textbook case for a DokuWiki *syntax plugin* (`extends DokuWiki_Syntax_Plugin`, registering `connectTo()` patterns and its own `render()` implementation) — the KaTeX plugin already sitting alongside this proves the pattern works. Patching the renderer directly means every future DokuWiki upgrade has to be re-merged against these three methods. - **Open Graph tags** (`tpl_socialcard()` in `inc/template.php`). Injects `` tags. `tpl_metaheaders()` already fires `Event::createAndTrigger('TPL_METAHEADER_OUTPUT', $head, ...)` right after the point these tags are added — an action plugin hooking that event and pushing entries onto `$head['meta']` would produce identical output with zero core changes. - **Favicon PNG/JPG-before-ICO lookup** (`tpl_favicon()` in `inc/template.php`). This isn't even a plugin candidate so much as a template candidate: `tpl_favicon()` is called by the *template*, and a custom template fully controls its own ``. The lookup could have been written directly in the `yanevskiv` template's header code instead of changing the shared core function every template on the install uses. - **Ace editor integration** (`inc/Ui/Editor.php`, `inc/template.php`, commits `1c211c0`, `fc74044`). Swaps the plain `