HowItWorks:MediaWiki: Difference between revisions

From Wikibase
Jump to navigation Jump to search
No edit summary
Enhance: fill Wiki engine section, add Page edit flow, expand Key design decisions into subsections (per HTML comments), fix 1.12 year (2008), refresh verified commands, add references. AI-assisted (RonzzWikiCowriter) (via update-page on MediaWiki MCP Server)
Line 1: Line 1:
{{HowItWorks}}
{{HowItWorks}}


'''MediaWiki''' is the free, open-source wiki engine behind thousands of wiki instances, such as Wikipedia, Wikidata - and this very site: RonzzWikiBase.
'''MediaWiki''' is the free, open-source wiki engine behind thousands of wiki instances, such as Wikipedia, Wikidata — and this very site: RonzzWikiBase [5].


== Wiki engine? ==
== What is a wiki engine? ==


<!-- Explain what is wikiengine -->
A '''wiki engine''' is the software that runs a wiki: a website whose pages anyone can edit from their browser, with every change saved and reversible. The engine is the machinery behind that promise. It stores the pages in a database, shows the edit form, records each save as a new revision, and turns the stored text into the page the reader sees.
 
MediaWiki is one such engine — written in PHP, backed by a relational database (MySQL or MariaDB by default) [1]. DokuWiki, MoinMoin and TiddlyWiki are other examples of the same idea.
 
MediaWiki's origin sets it apart: it was built from the start to be Wikipedia's software [1]. Where a content-management system (CMS) usually has an editorial workflow and per-page access control, a wiki engine trusts its community instead. MediaWiki deliberately skips the usual CMS features, and puts its effort into the tools a live wiki needs:
 
{| class="wikitable"
! Wiki engine (MediaWiki) !! Typical CMS
|-
| no publication workflow — every edit is live immediately || editorial workflow and review [1]
|-
| no per-page access control (ACLs) || fine-grained roles and permissions [1]
|-
| built-in tools against spam and vandalism || focus on controlled publishing [1]
|}
 
The result is a system optimised for a very specific job: a community creating and curating knowledge on an open platform, at enormous scale [1].


== Components and interactions ==
== Components and interactions ==
The diagram below is the map for the rest of this page. It shows MediaWiki's main building blocks — entry points, storage, the parser, caching — and how a request moves between them.


<uml>
<uml>
Line 140: Line 158:


== MediaWiki in action ==
== MediaWiki in action ==
Everything MediaWiki does reduces to two flows: '''reading''' a page and '''writing''' one. Both go through the same machinery.


=== Page view ===
=== Page view ===
Line 147: Line 167:
# '''The request arrives.''' The browser asks for <code>/wiki/Main_Page</code>. The web server hands it to PHP-FPM, which boots MediaWiki through <code>index.php</code>: security checks, default settings, then the site's own <code>LocalSettings.php</code>.
# '''The request arrives.''' The browser asks for <code>/wiki/Main_Page</code>. The web server hands it to PHP-FPM, which boots MediaWiki through <code>index.php</code>: security checks, default settings, then the site's own <code>LocalSettings.php</code>.
# '''The title is resolved.''' MediaWiki works out which page is meant (namespace, redirects, aliases) and checks the reader's permissions.
# '''The title is resolved.''' MediaWiki works out which page is meant (namespace, redirects, aliases) and checks the reader's permissions.
# '''The wikitext is loaded''' from the database — always the stored source, never a pre-rendered copy.
# '''The wikitext is loaded''' from the database — MediaWiki stores the source text, not the rendered page [1].
# '''The preprocessor expands.''' Template calls (<syntaxhighlight lang="wikitext" inline>{{...}}</syntaxhighlight>), parser functions and magic words are resolved into expanded wikitext. This stage walks a tree and can skip dead branches, such as the unused cases of a <syntaxhighlight lang="wikitext" inline>{{#switch:…}}</syntaxhighlight>.
# '''The preprocessor expands.''' Template calls (<syntaxhighlight lang="wikitext" inline>{{...}}</syntaxhighlight>), parser functions and magic words are resolved into expanded wikitext. This stage walks a tree and can skip dead branches, such as the unused cases of a <syntaxhighlight lang="wikitext" inline>{{#switch:…}}</syntaxhighlight>.
# '''The parser converts to HTML.''' Wikitext syntax becomes HTML elements; the Sanitizer class scrubs any raw HTML for unsafe content.
# '''The parser converts to HTML.''' Wikitext syntax becomes HTML elements; the Sanitizer class scrubs any raw HTML for unsafe content [1].
# '''The skin frames the page.''' The content HTML is wrapped in the skin's chrome (sidebar, header, footer) together with CSS and JavaScript delivered by ResourceLoader.
# '''The skin frames the page.''' The content HTML is wrapped in the skin's chrome (sidebar, header, footer) together with CSS and JavaScript delivered by ResourceLoader [1][3].
# '''The page is served.''' A repeat view can skip stages 4–6 entirely if the rendered output is still in a cache.
# '''The page is served.''' A repeat view can skip stages 4–6 entirely if the rendered output is still in a cache [1].


<!-- add section on page edit -->
=== Page edit ===
 
An edit is the mirror image of a view: instead of reading a revision, it writes a new one.
 
# '''The editor opens the page.''' Clicking "Edit" sends the stored wikitext — the source, not the rendered HTML — to the browser in a text box [1][4].
# '''The editor changes the text.''' "Show preview" runs the new wikitext through the parser and shows the result without saving; "Show changes" shows a diff against the current version [4]. An optional edit summary (up to 500 characters) describing the change is saved with the edit [4].
# '''The save is checked.''' MediaWiki compares the submitted text with the revision the editor started from. If someone else saved in between, the editor gets the edit-conflict screen and merges the two versions [6]. Changes to unrelated parts of the page are merged automatically [6].
# '''The revision is stored.''' The new text becomes a new revision: author, timestamp and summary are recorded, and the page's "latest" pointer moves to it [1]. The old revision stays — that is what makes history, diffs and undo possible.
# '''The change spreads.''' The edit appears in the page history and in RecentChanges, and the page's cached output is discarded [1].


== Key design decisions ==
== Key design decisions ==


<!-- for this section, 1. explain more, each point should become a subsection 2. use simpler, naturaler language 3. be more positive, appreciative of what MediaWiki does cleverly  -->
Six choices explain why MediaWiki behaves the way it does. None is obvious; each trades a little simplicity for a lot of power.
 
=== Content stays in wikitext, not HTML ===
 
MediaWiki stores pages as '''wikitext''' — a lightweight markup — and renders it to HTML only when a page is displayed [1]. Editors edit the source, and the source is what is stored.
 
Why does that matter?


* '''Content stays in wikitext, not HTML.''' <!-- why? -->
* '''Editing stays easy.''' Wikitext is plain text a human can read and write; raw HTML is verbose and error-prone [1].
* '''The parser is a stability contract.''' Hundreds of millions of pages depend on its output, so it changes slowly and conservatively. The price: wikitext grew organically, is complex, and cannot be described by a formal grammar.
* '''The wiki stays re-renderable.''' Because the source is kept, the whole wiki can be re-parsed when the parser improves, a skin changes or a template is fixed. Nothing is ever frozen as HTML [1].
* '''Templates are DRY for wikis.''' One source of truth for repeated boilerplate (navigation boxes, banners, infoboxes), expanded at read time.  
* '''History stays cheap.''' Every revision is stored as text, so any old version can be re-parsed and re-displayed — that is what makes diffs, rollback and undo work [1].
** The preprocessor rewrite (MediaWiki 1.12, 2009) exists precisely because template-heavy pages had become a parsing bottleneck.
 
* '''Skins separate content from presentation.''' The same content HTML renders under any skin without re-parsing. <!-- what is a skin really? CSS? -->
=== The parser is a stability contract ===
* '''Extensions plug in; the core stays stable.''' Hooks let third-party code run before, after or instead of core behaviour — the citation and embed systems on this very site are extensions, not forks.
 
* '''Caching is the price of PHP.''' Every request boots PHP, so MediaWiki layers caches: reverse proxies serve whole pages, an object cache avoids re-parsing, an opcode cache skips recompiling PHP. The tradeoff is cache invalidation (next section).
The '''parser''' turns wikitext into HTML, and MediaWiki treats its output as a promise: hundreds of millions of pages depend on it, so it changes slowly and conservatively [1].
 
The price is that wikitext never received a formal specification. It grew organically from the markup of an earlier engine, UseModWiki, so it cannot be described by a formal grammar — the unofficial spec is "whatever the parser spits out, plus a few hundred test cases" [1].
 
The clever part is how MediaWiki handles that constraint: it is building a second parser, '''Parsoid''', alongside the classic one. Parsoid converts wikitext to HTML and back, which is what powers the visual editor [1].
 
=== Templates are DRY for wikis ===
 
Templates let a wiki define something once and reuse it everywhere — a navigation box, a banner, an infobox. A page calls a template with <code><nowiki>{{Name}}</nowiki></code>, and its content is expanded into the page at read time [1].
 
For Wikipedia this was transformative: the same boilerplate used to be copied onto thousands of articles. Templates gained parameters in MediaWiki 1.3 and default values in 1.6, and users pushed them hard — building near-programming constructs with the <syntaxhighlight lang="wikitext" inline>{{#if:…}}</syntaxhighlight> and <syntaxhighlight lang="wikitext" inline>{{#switch:…}}</syntaxhighlight> parser functions [1].
 
The price was performance: template-heavy pages became slow to parse. MediaWiki's answer was a rewritten '''preprocessor''' in MediaWiki 1.12 (2008): it parses templates into a tree and skips the branches that are never used, such as the un-taken cases of a #switch [1][7]. Template-heavy pages got much faster, without any change to the markup.
 
=== Skins separate content from presentation ===
 
A '''skin''' is the frame around the content: the header, footer and sidebar, plus the CSS and JavaScript that style them [3]. The parsed content HTML is the same under every skin; the skin decides how it is wrapped and presented.
 
The consequence is elegant: re-skinning a site never touches the content. Readers choose their skin in their preferences — the default is Vector [3] — and this very site offers both Vector and Timeless [2]. The same parsed page renders under either, without re-parsing [1].
 
=== Extensions plug in; the core stays stable ===
 
MediaWiki's core is deliberately small; almost everything extra lives in '''extensions'''. They attach to the core through '''hooks''' — places where third-party code can run before, after, or instead of MediaWiki's own behaviour for a given event [1]. Some hooks even let an extension add new wikitext syntax of its own [1].
 
This was not always so. Before hooks arrived in 2004, customising MediaWiki meant editing the core — fragile and hard to maintain [1]. The hook system turned that into a supported plug-in mechanism.
 
On this very site the pattern is visible: Cite, SyntaxHighlight, Wikibase — and Ronzz's own EmbeddableContent and WikibaseCitation — are all extensions, not forks [2].
 
=== Caching is the price of PHP ===
 
Every request boots PHP from scratch, so a busy wiki would be slow without help. MediaWiki answers with layers of caches [1]:
 
{| class="wikitable"
! Layer !! What it stores !! Effect
|-
| Reverse proxy (CDN) || whole rendered pages || serves anonymous readers without booting PHP at all; most requests never reach the application servers [1]
|-
| Object cache (Memcached / Redis) || parsed page output || avoids re-parsing the same wikitext [1]
|-
| Opcode cache || compiled PHP || skips recompiling scripts on every request [1]
|}
 
The clever part is that MediaWiki does not merely sit behind these caches — it tells them what to forget. When a page changes, MediaWiki purges it from the caches; when a template changes, every page that uses it is invalidated [1]. Correct invalidation is the hard part, and getting it right is what lets a constantly-edited site like Wikipedia be served from cache.


== Try it yourself ==
== Try it yourself ==


All commands below were verified to work at the time of writing (2026-08) against this wiki (MediaWiki 1.46.0).
All commands below were verified to work at the time of writing (2026-08-28) against this wiki (MediaWiki 1.46.0 [2]).


<syntaxhighlight lang="bash" copy>
<syntaxhighlight lang="bash" copy>
Line 190: Line 266:


<syntaxhighlight lang="text" copy>
<syntaxhighlight lang="text" copy>
<p><strong>Hi, welcome to Ronzz.org's own wikibase.
<p><strong>Hi, welcome to ronzz.ORG's wikibase.
</syntaxhighlight>
 
<syntaxhighlight lang="bash" copy>
# Preview without saving: run a snippet of wikitext through the parser
curl -sG "https://wikibase.ronzz.org/api.php" --data-urlencode "action=parse" --data-urlencode "text='''Bold''' and ''italic''" --data-urlencode "format=json" | grep -o "<b>.*</i>"
</syntaxhighlight>
 
Output:
 
<syntaxhighlight lang="text" copy>
<b>Bold</b> and <i>italic</i>
</syntaxhighlight>
 
<syntaxhighlight lang="bash" copy>
# Every edit leaves a trace: the last three revisions of Main Page
curl -s "https://wikibase.ronzz.org/api.php?action=query&prop=revisions&titles=Main_Page&rvprop=timestamp%7Cuser&rvlimit=3&format=json" | grep -oE '"user":"[^"]*"|"timestamp":"[^"]*"'
</syntaxhighlight>
 
Output:
 
<syntaxhighlight lang="text" copy>
"user":"Rongzhou"
"timestamp":"2026-08-24T14:55:13Z"
"user":"Rongzhou"
"timestamp":"2026-08-21T06:08:37Z"
"user":"Rongzhou"
"timestamp":"2026-08-19T18:59:55Z"
</syntaxhighlight>
</syntaxhighlight>


Line 196: Line 299:


* paste <code><nowiki>{{HowItWorks}}</nowiki></code> into the input box and click "Expand" —
* paste <code><nowiki>{{HowItWorks}}</nowiki></code> into the input box and click "Expand" —
* You see the expanded wikitext before the parser turns it into HTML.
* you see the expanded wikitext, before the parser turns it into HTML.
 
== References ==
 
# [https://www.mediawiki.org/wiki/Manual:MediaWiki_architecture Manual:MediaWiki architecture] — the architecture deep-dive on mediawiki.org
# [https://wikibase.ronzz.org/api.php?action=query&meta=siteinfo&siprop=general%7Cextensions&format=json This wiki's siteinfo API] — version, PHP and database, extension list (fetched 2026-08-28)
# [https://www.mediawiki.org/wiki/Manual:Skins Manual:Skins] — skins documentation
# [https://www.mediawiki.org/wiki/Help:Editing_pages Help:Editing pages] — user documentation for editing
# [https://www.mediawiki.org/wiki/MediaWiki MediaWiki] — the software project page
# [https://www.mediawiki.org/wiki/Help:Edit_conflict Help:Edit conflict] — how conflicts are detected and resolved
# [https://www.mediawiki.org/wiki/Release_notes/1.12 Release notes/1.12] — the preprocessor rewrite
# [https://wikibase.ronzz.org/api.php?action=query&prop=revisions&titles=Main_Page&rvprop=ids%7Ctimestamp%7Cuser%7Ccomment&rvlimit=3&format=json Revisions query (ids|timestamp|user|comment)] — verified 2026-08-28
# [https://wikibase.ronzz.org/api.php?action=parse&page=Main_Page&format=json Parse API for Main Page] — verified 2026-08-28
# [https://wikibase.ronzz.org/api.php?action=parse&text=%27%27%27Bold%27%27%27%20and%20%27%27italic%27%27&prop=text&format=json Parse API with raw text] — verified 2026-08-28
# [https://wikibase.ronzz.org/api.php?action=query&prop=revisions&titles=Main_Page&rvprop=timestamp%7Cuser&rvlimit=3&format=json Revisions query (timestamp|user)] — verified 2026-08-28


== Further reading ==
== Further reading ==
Line 205: Line 322:


The reference layer for this site's own data lives in the [[Cheatsheets:SPARQL|SPARQL cheatsheet]]: the sheet is the syntax, this page is the machinery.
The reference layer for this site's own data lives in the [[Cheatsheets:SPARQL|SPARQL cheatsheet]]: the sheet is the syntax, this page is the machinery.
Wiki: wikibase.ronzz.org

Revision as of 08:57, 28 August 2026

Languages: English · français · Esperanto

Explains how things actually work — part of our technology dissections collection.

MediaWiki is the free, open-source wiki engine behind thousands of wiki instances, such as Wikipedia, Wikidata — and this very site: RonzzWikiBase [5].

What is a wiki engine?

A wiki engine is the software that runs a wiki: a website whose pages anyone can edit from their browser, with every change saved and reversible. The engine is the machinery behind that promise. It stores the pages in a database, shows the edit form, records each save as a new revision, and turns the stored text into the page the reader sees.

MediaWiki is one such engine — written in PHP, backed by a relational database (MySQL or MariaDB by default) [1]. DokuWiki, MoinMoin and TiddlyWiki are other examples of the same idea.

MediaWiki's origin sets it apart: it was built from the start to be Wikipedia's software [1]. Where a content-management system (CMS) usually has an editorial workflow and per-page access control, a wiki engine trusts its community instead. MediaWiki deliberately skips the usual CMS features, and puts its effort into the tools a live wiki needs:

Wiki engine (MediaWiki) Typical CMS
no publication workflow — every edit is live immediately editorial workflow and review [1]
no per-page access control (ACLs) fine-grained roles and permissions [1]
built-in tools against spam and vandalism focus on controlled publishing [1]

The result is a system optimised for a very specific job: a community creating and curating knowledge on an open platform, at enormous scale [1].

Components and interactions

The diagram below is the map for the rest of this page. It shows MediaWiki's main building blocks — entry points, storage, the parser, caching — and how a request moves between them.

MediaWiki in action

Everything MediaWiki does reduces to two flows: reading a page and writing one. Both go through the same machinery.

Page view

A page view passes through these stages:

  1. The request arrives. The browser asks for /wiki/Main_Page. The web server hands it to PHP-FPM, which boots MediaWiki through index.php: security checks, default settings, then the site's own LocalSettings.php.
  2. The title is resolved. MediaWiki works out which page is meant (namespace, redirects, aliases) and checks the reader's permissions.
  3. The wikitext is loaded from the database — MediaWiki stores the source text, not the rendered page [1].
  4. The preprocessor expands. Template calls ({{...}}), parser functions and magic words are resolved into expanded wikitext. This stage walks a tree and can skip dead branches, such as the unused cases of a {{#switch:…}}.
  5. The parser converts to HTML. Wikitext syntax becomes HTML elements; the Sanitizer class scrubs any raw HTML for unsafe content [1].
  6. The skin frames the page. The content HTML is wrapped in the skin's chrome (sidebar, header, footer) together with CSS and JavaScript delivered by ResourceLoader [1][3].
  7. The page is served. A repeat view can skip stages 4–6 entirely if the rendered output is still in a cache [1].

Page edit

An edit is the mirror image of a view: instead of reading a revision, it writes a new one.

  1. The editor opens the page. Clicking "Edit" sends the stored wikitext — the source, not the rendered HTML — to the browser in a text box [1][4].
  2. The editor changes the text. "Show preview" runs the new wikitext through the parser and shows the result without saving; "Show changes" shows a diff against the current version [4]. An optional edit summary (up to 500 characters) describing the change is saved with the edit [4].
  3. The save is checked. MediaWiki compares the submitted text with the revision the editor started from. If someone else saved in between, the editor gets the edit-conflict screen and merges the two versions [6]. Changes to unrelated parts of the page are merged automatically [6].
  4. The revision is stored. The new text becomes a new revision: author, timestamp and summary are recorded, and the page's "latest" pointer moves to it [1]. The old revision stays — that is what makes history, diffs and undo possible.
  5. The change spreads. The edit appears in the page history and in RecentChanges, and the page's cached output is discarded [1].

Key design decisions

Six choices explain why MediaWiki behaves the way it does. None is obvious; each trades a little simplicity for a lot of power.

Content stays in wikitext, not HTML

MediaWiki stores pages as wikitext — a lightweight markup — and renders it to HTML only when a page is displayed [1]. Editors edit the source, and the source is what is stored.

Why does that matter?

  • Editing stays easy. Wikitext is plain text a human can read and write; raw HTML is verbose and error-prone [1].
  • The wiki stays re-renderable. Because the source is kept, the whole wiki can be re-parsed when the parser improves, a skin changes or a template is fixed. Nothing is ever frozen as HTML [1].
  • History stays cheap. Every revision is stored as text, so any old version can be re-parsed and re-displayed — that is what makes diffs, rollback and undo work [1].

The parser is a stability contract

The parser turns wikitext into HTML, and MediaWiki treats its output as a promise: hundreds of millions of pages depend on it, so it changes slowly and conservatively [1].

The price is that wikitext never received a formal specification. It grew organically from the markup of an earlier engine, UseModWiki, so it cannot be described by a formal grammar — the unofficial spec is "whatever the parser spits out, plus a few hundred test cases" [1].

The clever part is how MediaWiki handles that constraint: it is building a second parser, Parsoid, alongside the classic one. Parsoid converts wikitext to HTML and back, which is what powers the visual editor [1].

Templates are DRY for wikis

Templates let a wiki define something once and reuse it everywhere — a navigation box, a banner, an infobox. A page calls a template with {{Name}}, and its content is expanded into the page at read time [1].

For Wikipedia this was transformative: the same boilerplate used to be copied onto thousands of articles. Templates gained parameters in MediaWiki 1.3 and default values in 1.6, and users pushed them hard — building near-programming constructs with the {{#if:…}} and {{#switch:…}} parser functions [1].

The price was performance: template-heavy pages became slow to parse. MediaWiki's answer was a rewritten preprocessor in MediaWiki 1.12 (2008): it parses templates into a tree and skips the branches that are never used, such as the un-taken cases of a #switch [1][7]. Template-heavy pages got much faster, without any change to the markup.

Skins separate content from presentation

A skin is the frame around the content: the header, footer and sidebar, plus the CSS and JavaScript that style them [3]. The parsed content HTML is the same under every skin; the skin decides how it is wrapped and presented.

The consequence is elegant: re-skinning a site never touches the content. Readers choose their skin in their preferences — the default is Vector [3] — and this very site offers both Vector and Timeless [2]. The same parsed page renders under either, without re-parsing [1].

Extensions plug in; the core stays stable

MediaWiki's core is deliberately small; almost everything extra lives in extensions. They attach to the core through hooks — places where third-party code can run before, after, or instead of MediaWiki's own behaviour for a given event [1]. Some hooks even let an extension add new wikitext syntax of its own [1].

This was not always so. Before hooks arrived in 2004, customising MediaWiki meant editing the core — fragile and hard to maintain [1]. The hook system turned that into a supported plug-in mechanism.

On this very site the pattern is visible: Cite, SyntaxHighlight, Wikibase — and Ronzz's own EmbeddableContent and WikibaseCitation — are all extensions, not forks [2].

Caching is the price of PHP

Every request boots PHP from scratch, so a busy wiki would be slow without help. MediaWiki answers with layers of caches [1]:

Layer What it stores Effect
Reverse proxy (CDN) whole rendered pages serves anonymous readers without booting PHP at all; most requests never reach the application servers [1]
Object cache (Memcached / Redis) parsed page output avoids re-parsing the same wikitext [1]
Opcode cache compiled PHP skips recompiling scripts on every request [1]

The clever part is that MediaWiki does not merely sit behind these caches — it tells them what to forget. When a page changes, MediaWiki purges it from the caches; when a template changes, every page that uses it is invalidated [1]. Correct invalidation is the hard part, and getting it right is what lets a constantly-edited site like Wikipedia be served from cache.

Try it yourself

All commands below were verified to work at the time of writing (2026-08-28) against this wiki (MediaWiki 1.46.0 [2]).

# Which version is this wiki running?
curl -s "https://wikibase.ronzz.org/api.php?action=query&meta=siteinfo&siprop=general&format=json" | grep -o '"generator":"[^"]*"'

Output:

"generator":"MediaWiki 1.46.0"
# See the parser's HTML output for a page (the raw pipeline result, before the skin)
curl -s "https://wikibase.ronzz.org/api.php?action=parse&page=Main_Page&format=json" | grep -o "<p><strong>[^<]*"

Output:

<p><strong>Hi, welcome to ronzz.ORG's wikibase.
# Preview without saving: run a snippet of wikitext through the parser
curl -sG "https://wikibase.ronzz.org/api.php" --data-urlencode "action=parse" --data-urlencode "text='''Bold''' and ''italic''" --data-urlencode "format=json" | grep -o "<b>.*</i>"

Output:

<b>Bold</b> and <i>italic</i>
# Every edit leaves a trace: the last three revisions of Main Page
curl -s "https://wikibase.ronzz.org/api.php?action=query&prop=revisions&titles=Main_Page&rvprop=timestamp%7Cuser&rvlimit=3&format=json" | grep -oE '"user":"[^"]*"|"timestamp":"[^"]*"'

Output:

"user":"Rongzhou"
"timestamp":"2026-08-24T14:55:13Z"
"user":"Rongzhou"
"timestamp":"2026-08-21T06:08:37Z"
"user":"Rongzhou"
"timestamp":"2026-08-19T18:59:55Z"

See the preprocessor stage directly: Visit Special:ExpandTemplates

  • paste {{HowItWorks}} into the input box and click "Expand" —
  • you see the expanded wikitext, before the parser turns it into HTML.

References

  1. Manual:MediaWiki architecture — the architecture deep-dive on mediawiki.org
  2. This wiki's siteinfo API — version, PHP and database, extension list (fetched 2026-08-28)
  3. Manual:Skins — skins documentation
  4. Help:Editing pages — user documentation for editing
  5. MediaWiki — the software project page
  6. Help:Edit conflict — how conflicts are detected and resolved
  7. Release notes/1.12 — the preprocessor rewrite
  8. Revisions query (ids|timestamp|user|comment) — verified 2026-08-28
  9. Parse API for Main Page — verified 2026-08-28
  10. Parse API with raw text — verified 2026-08-28
  11. Revisions query (timestamp|user) — verified 2026-08-28

Further reading

The reference layer for this site's own data lives in the SPARQL cheatsheet: the sheet is the syntax, this page is the machinery.

Wiki: wikibase.ronzz.org