MediaWiki provides a rich core feature set and a mechanism to attach
extensions to provide additional functionality.
Internationalization and localization to provide MediaWiki with more than 400 locales. Due to the strong emphasis on multilingualism in the Wikimedia projects,
internationalization and localization has received significant attention by developers. The user interface has been fully or partially translated into more than 400 languages on
translatewiki.net, and can be further customized by site administrators (the entire interface is editable through the wiki). Several extensions, most notably those collected in the MediaWiki Language Extension Bundle, are designed to further enhance the multilingualism and internationalization of MediaWiki.
Installation and configuration Installation of MediaWiki requires that the user have
administrative privileges on a server running both PHP and a compatible type of SQL
database. Some users find that setting up a
virtual host is helpful if the majority of one's site runs under a framework (such as
Zope or
Ruby on Rails) that is largely incompatible with MediaWiki.
Cloud hosting can eliminate the need to deploy a new server. An installation PHP script is accessed via a
web browser to initialize the wiki's settings. It prompts the user for a minimal set of required parameters, leaving further changes, such as enabling uploads, adding a site logo, and installing extensions, to be made by modifying configuration settings contained in a file called LocalSettings.php. Some aspects of MediaWiki can be configured through special pages or by editing certain pages; for instance, abuse filters can be configured through a special page, and certain gadgets can be added by creating
JavaScript pages in the MediaWiki namespace. The MediaWiki community publishes a comprehensive installation guide.
Markup One of the earliest differences between MediaWiki (and its predecessor,
UseModWiki) and other wiki engines was the use of "
free links" instead of
CamelCase. When MediaWiki was created, it was typical for wikis to require text like "WorldWideWeb" to create a link to a page about the
World Wide Web; links in MediaWiki, on the other hand, are created by surrounding words with double square brackets, and any spaces between them are left intact, e.g. . This change was logical for the purpose of creating an encyclopedia, where accuracy in titles is important. MediaWiki uses an extensible
lightweight wiki markup designed to be easier to use and learn than
HTML. Tools exist for converting content such as
tables between MediaWiki markup and HTML. Efforts have been made to create a MediaWiki markup spec, but a consensus seems to have been reached that Wikicode requires
context-sensitive grammar rules. The following side-by-side comparison illustrates the differences between wiki markup and HTML: (Quotation above from ''
Alice's Adventures in Wonderland'' by
Lewis Carroll)
Editing interface , showing the edit toolbar of the 2017 wikitext editor and some examples of wiki syntax MediaWiki's default page-editing tools have been described as somewhat challenging to learn. A survey of students assigned to use a MediaWiki-based wiki found that when they were asked an
open question about main problems with the wiki, 24% cited technical problems with formatting, e.g. "Couldn't figure out how to get an image in. Can't figure out how to show a link with words; it inserts a number." To make editing long pages easier, MediaWiki allows the editing of a subsection of a page (as identified by its header). A registered user can also indicate whether or not an edit is minor. Correcting spelling, grammar or punctuation are examples of minor edits, whereas adding paragraphs of new text is an example of a non-minor edit. Sometimes while one user is editing, a second user saves an edit to the same part of the page. Then, when the first user attempts to save the page, an
edit conflict occurs. The second user is then given an opportunity to merge their content into the page as it now exists following the first user's page save. MediaWiki's user interface has been localized in many different languages. A language for the wiki content itself can also be set, to be sent in the "Content-Language" HTTP header and "lang"
HTML attribute. VisualEditor has its own integrated wikitext editing interface known as 2017 wikitext editor, the older editing interface is known as 2010 wikitext editor.
Application programming interface MediaWiki has an extensible
web API (
application programming interface) that provides direct, high-level access to the data contained in the MediaWiki databases. Client programs can use the API to log in, get data, and post changes. The API supports thin web-based JavaScript clients and end-user applications (such as vandal-fighting tools). The API can be accessed by the
backend of another web site. An extensive
Python bot library,
Pywikibot, and a popular semi-automated tool called
AutoWikiBrowser, also interface with the API. The API is accessed via URLs such as https://en.wikipedia.org/w/api.php?action=query&list=recentchanges. In this case, the query would be asking Wikipedia for information relating to the last 10 edits to the site. One of the perceived advantages of the API is its language independence; it listens for
HTTP connections from clients and can send a response in a variety of formats, such as
XML, serialized PHP, or
JSON.
Client code has been developed to provide layers of
abstraction to the API.
Tracking edits Among the features of MediaWiki to assist in tracking edits is a Recent Changes feature that provides a list of recent edits to the wiki. This list contains basic information about those edits such as the editing user, the edit summary, the page edited, as well as any tags (e.g. "possible
vandalism") added by customizable abuse filters and other extensions to aid in combating unhelpful edits. On more active wikis, so many edits occur that it is hard to track Recent Changes manually. Anti-vandal software, including user-assisted tools, is sometimes employed on such wikis to process Recent Changes items. Server load can be reduced by sending a continuous feed of Recent Changes to an
IRC channel that these tools can monitor, eliminating their need to send requests for a refreshed Recent Changes feed to the API. Another important tool is watchlisting. Logged-in users have a user-curated watchlist that provides a summary of edits made to one of those pages. As with the recent changes page, recent edits that appear on the watchlist contain clickable links for easy review of the article history and specific changes made. There is also the capability to review all edits made by any particular user. In this way, if an edit is identified as problematic, it is possible to check the user's other edits for issues. MediaWiki allows one to link to specific versions of articles. This has been useful to the scientific community, in that expert peer reviewers could analyse articles, improve them and provide links to the trusted version of that article.
Navigation Wikilinks Navigation through the wiki is largely through internal wikilinks. MediaWiki's wikilinks implement page existence detection, in which a link is colored blue if the target page exists on the local wiki and red if it does not. If a user clicks on a red link, they are prompted to create an article with that title. Page existence detection makes it practical for users to create "wikified" articles—that is, articles containing links to other pertinent subjects—without those other articles being yet in existence.
Interwiki links Interwiki links function much the same way as namespaces. A set of interwiki prefixes can be configured to cause, for instance, a page title of wikiquote:Jimbo Wales to direct the user to the Jimbo Wales article on
Wikiquote. Unlike internal wikilinks, interwiki links lack page existence detection functionality, and accordingly there is no way to tell whether a blue interwiki link is broken or not.
Interlanguage links Interlanguage links are the small navigation links that show up in the sidebar in most MediaWiki skins that connect an article with related articles in other languages within the same Wiki family. This can provide language-specific communities connected by a larger context, with all wikis on the same server or each on its own server. Previously, Wikipedia used interlanguage links to link an article to other articles on the same topic in other editions of Wikipedia. This was superseded by the launch of Wikidata.
Content organization Page tabs and associated pages Page tabs are displayed at the top of pages. These tabs allow users to perform actions or view pages that are related to the current page. The available default actions include viewing, editing, and discussing the current page. The specific tabs displayed depend on whether the user is logged into the wiki and whether the user has sysop privileges on the wiki. For instance, the ability to move a page or add it to one's watchlist is usually restricted to logged-in users. The site administrator can add or remove tabs by using JavaScript or installing extensions. Each page has an associated history page from which the user can access every version of the page that has ever existed and generate
diffs between two versions of his choice. Users' contributions are displayed not only here, but also via a "user contributions" option on a sidebar. In a 2004 article, Carl Challborn and Teresa Reimann noted that "While this feature may be a slight deviation from the collaborative, 'ego-less' spirit of wiki purists, it can be very useful for educators who need to assess the contribution and participation of individual student users."
Namespaces MediaWiki provides many features beyond
hyperlinks for structuring content. One of the earliest such features is
namespaces. One of Wikipedia's earliest problems had been the separation of encyclopedic content from pages pertaining to maintenance and communal discussion, as well as personal pages about encyclopedia editors. Namespaces are prefixes before a page title (such as "User:" or "Talk:") that serve as descriptors for the page's purpose and allow multiple pages with different functions to exist under the same title. For instance, a page titled "", in the default namespace, could describe
the 1984 movie starring
Arnold Schwarzenegger, while a page titled "" could be a profile describing a user who chooses this name as a pseudonym. More commonly, each namespace has an associated "Talk:" namespace, which can be used to discuss its contents, such as "User talk:" or "Template talk:". The purpose of having discussion pages is to allow content to be separated from discussion surrounding the content. Namespaces can be viewed as
folders that separate different basic types of information or functionality. Custom namespaces can be added by the site administrators. There are 16 namespaces by default for content, with two
pseudo-namespaces used for dynamically generated "Special:" pages and links to media files. Each namespace on MediaWiki is numbered: content page namespaces have even numbers and their associated talk page namespaces have odd numbers.
Category tags Users can create new categories and add pages and files to those categories by appending one or more category tags to the content text. Adding these tags creates links at the bottom of the page that take the reader to the list of all pages in that category, making it easy to browse related articles. The use of categorization to organize content has been described as a combination of: •
Collaborative tagging systems like
del.icio.us and •
Hierarchical classifications like the
Dewey Decimal Classification.
Subpages In addition to namespaces, content can be ordered using
subpages. This simple feature provides automatic
breadcrumbs of the pattern from the page after the slash (in this case, "Subpage title") to the page before the slash (in this case, "Page title").
Customization that is executed on every pageview. This has led to JavaScript tools that users can "install", the "navigation popups" tool shown here displays a small preview of an article when hovering over a link title. If the feature is enabled, users can customize their stylesheets and configure
client-side JavaScript to be executed with every pageview. On Wikipedia, this has led to a large number of additional tools and helpers developed through the wiki and shared among users. For instance,
navigation popups is a custom JavaScript tool that shows previews of articles when the user hovers over links and also provides shortcuts for common maintenance tasks. of a wiki using MediaWiki with a customized skin The entire MediaWiki user interface can be edited through the wiki itself by users with the necessary permissions (typically called "administrators"). This is done through a special namespace with the prefix "MediaWiki:", where each page title identifies a particular user interface message. Using an extension, it is also possible for a user to create personal scripts, and to choose whether certain sitewide scripts should apply to them by toggling the appropriate options in the user preferences page.
Templates The "MediaWiki:" namespace was originally also used for creating custom text blocks that could then be dynamically loaded into other pages using a special syntax. This content was later moved into its own namespace, "Template:". Templates are text blocks that can be dynamically loaded inside another page whenever that page is requested. The template is a special link in double
curly brackets (for example ""), which calls the template (in this case located at ) to load in place of the template call. Templates are
structured documents containing
attribute–value pairs. They are defined with
parameters, to which are assigned
values when
transcluded on an article page. The name of the parameter is
delimited from the value by an
equals sign. A class of templates known as
infoboxes is used on Wikipedia to collect and present a subset of information about its subject, usually on the top (mobile view) or top right-hand corner (desktop view) of the document. Pages in other namespaces can also be transcluded as templates. In particular, a page in the main namespace can be transcluded by prefixing its title with a colon; for example, :MediaWiki transcludes the article "MediaWiki" from the main namespace. Also, it is possible to mark the portions of a page that should be transcluded in several ways, the most basic of which are: • , which marks content that is not to be transcluded; • , which marks content that is not rendered unless it is transcluded; • , which marks content that is to be the
only content transcluded. A related method, called template
substitution (called by adding subst: at the beginning of a template link) inserts the contents of the template into the target page (like a
copy and paste operation), instead of loading the template contents dynamically whenever the page is loaded. This can lead to inconsistency when using templates, but may be useful in certain cases, and in most cases requires fewer
server resources (the actual amount of savings can vary depending on wiki configuration and the complexity of the template). Templates have found many different uses. Templates enable users to create complex table layouts that are used consistently across multiple pages, and where only the content of the tables gets inserted using template parameters. Templates are frequently used to identify problems with a Wikipedia article by putting a template in the article. This template then outputs a graphical box stating that the article content is disputed or in need of some other attention, and also categorize it so that articles of this nature can be located. Templates are also used on user pages to send users standard messages welcoming them to the site, giving them awards for outstanding contributions, warning them when their behavior is considered inappropriate, notifying them when they are blocked from editing, and so on.
Groups and restriction of access MediaWiki offers flexibility in creating and defining user groups. For instance, it would be possible to create an arbitrary "ninja" group that can block users and delete pages, and whose edits are hidden by default in the recent changes log. It is also possible to set up a group of "autoconfirmed" users that one becomes a member of after making a certain number of edits and waiting a certain number of days. Some groups that are enabled by default are bureaucrats and sysops. Bureaucrats have the power to change other users' rights. Sysops have power over page protection,
deletion, and the blocking of users from editing. MediaWiki's available controls on editing rights have been deemed sufficient for publishing and maintaining important documents such as a manual of
standard operating procedures in a hospital. MediaWiki comes with a basic set of features related to restricting access, but its original and ongoing design is driven by functions that largely relate to content, not content segregation. As a result, with minimal exceptions (related to specific tools and their related "Special" pages), page access control has never been a high priority in core development and developers have stated that users requiring secure user access and authorization controls should not rely on MediaWiki, since it was never designed for these kinds of situations. For instance, it is extremely difficult to create a wiki where only certain users can read and access some pages. Here, wiki engines like
Foswiki,
MoinMoin and
Confluence provide more flexibility by supporting advanced security mechanisms like
access control lists.
Extensibility The MediaWiki codebase contains various
hooks using
callback functions to add additional PHP code in an
extensible way. This allows developers to write extensions without necessarily needing to modify the core or having to submit their code for review. Installing an extension typically consists of adding a line to the configuration file, though in some cases additional changes such as database updates or core patches are required. Five main extension points were created to allow developers to add features and functionalities to MediaWiki. Hooks are run every time a certain event happens; for instance, the ArticleSaveComplete hook occurs after a save article request has been processed. This can be used, for example, by an extension that notifies selected users whenever a page edit occurs on the wiki from new or anonymous users. New tags can be created to process data with opening and closing tags (...). Parser functions can be used to create a new command (). New special pages can be created to perform a specific function. These pages are dynamically generated. For example, a special page might show all pages that have one or more links to an external site or it might create a form providing user submitted feedback.
Skins allow users to customize the look and feel of MediaWiki. A minor extension point allows the use of
Amazon S3 to host image files. ==Extensions==