<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilsonge</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wilsonge"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Wilsonge"/>
	<updated>2026-08-07T11:52:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=How_to_add_breadcrumbs&amp;diff=1034201</id>
		<title>How to add breadcrumbs</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=How_to_add_breadcrumbs&amp;diff=1034201"/>
		<updated>2025-01-26T16:33:16Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Hardcode language?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.1}}&lt;br /&gt;
{{disambig}}&lt;br /&gt;
===What is a breadcrumb?===&lt;br /&gt;
Breadcrumbs are nice way to display the connection from the root. It gives you a hierarchical representation with click able links so that user can visit upper links easily. Breadcrumbs can be added in templates by using the object returned by &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;JFactory::getApplication()-&amp;gt;getPathWay()&amp;lt;/source&amp;gt;. The member function addItem() allows to add a breadcrumb with the title of choice.&lt;br /&gt;
&lt;br /&gt;
===Developer Tutorials===&lt;br /&gt;
{{other versions/navbox/en|The &#039;&#039;&#039;{{PAGENAME}}&#039;&#039;&#039; Tutorial is available in these versions:-| version}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button&amp;diff=1034200</id>
		<title>Template:Basic button</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button&amp;diff=1034200"/>
		<updated>2025-01-26T16:17:51Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:Basic button external&lt;br /&gt;
|url={{ localurl:{{{1|Main Page}}} }}&lt;br /&gt;
|class={{{class|}}}&lt;br /&gt;
|text={{{2|{{{1|Click}}} }}}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034199</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034199"/>
		<updated>2025-01-26T16:16:56Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:Basic button external&lt;br /&gt;
|url={{{1|https://docs.joomla.org}}}&lt;br /&gt;
|class={{{class|}}}&lt;br /&gt;
|text={{{2|{{{1|Click}}} }}}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Widget:Basic_button_external&amp;diff=1034198</id>
		<title>Widget:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Widget:Basic_button_external&amp;diff=1034198"/>
		<updated>2025-01-26T16:08:47Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Fix extra html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This widget allows you to add &#039;&#039;&#039;[http://www.google.com/calendar/embedhelper Google Calendar]&#039;&#039;&#039; widget to a page.&lt;br /&gt;
&lt;br /&gt;
To insert this widget, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{#widget:&amp;lt;/nowiki&amp;gt;Basic button external&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|url=https://tm.joomla.org&lt;br /&gt;
|id=content-button&lt;br /&gt;
|class=foo&lt;br /&gt;
|text=Click me&lt;br /&gt;
}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Available Parameters ==&lt;br /&gt;
TODO!&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;!--{$url|escape:&#039;url&#039;}--&amp;gt;&amp;quot; id=&amp;quot;content-button&amp;quot; class=&amp;quot;button&amp;lt;!--{if isset($class)}--&amp;gt; &amp;lt;!--{$class|escape:&#039;html&#039;}--&amp;gt; &amp;lt;!--{/if}--&amp;gt;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;!--{$text|escape:&#039;html&#039;}--&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034197</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034197"/>
		<updated>2025-01-26T16:07:45Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Migrate to widget&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:Basic button external&lt;br /&gt;
|url={{{1|https://docs.joomla.org}}}&lt;br /&gt;
|class={{{class|}}}&lt;br /&gt;
|text={{{2|{{{1|Click}}} }}}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template is deprecated and available for migration purposes please use the widget directly&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Widget:Basic_button_external&amp;diff=1034196</id>
		<title>Widget:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Widget:Basic_button_external&amp;diff=1034196"/>
		<updated>2025-01-26T16:06:15Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Basic button external moved to widget&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This widget allows you to add &#039;&#039;&#039;[http://www.google.com/calendar/embedhelper Google Calendar]&#039;&#039;&#039; widget to a page.&lt;br /&gt;
&lt;br /&gt;
To insert this widget, use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{#widget:&amp;lt;/nowiki&amp;gt;Basic button external&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|url=https://tm.joomla.org&lt;br /&gt;
|id=content-button&lt;br /&gt;
|class=foo&lt;br /&gt;
|text=Click me&lt;br /&gt;
}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Available Parameters ==&lt;br /&gt;
TODO!&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;!--{$url|escape:&#039;url&#039;}--&amp;gt;&amp;quot; id=&amp;quot;content-button&amp;quot; class=&amp;quot;button &amp;lt;!--{if isset($class)}--&amp;gt; style=&amp;quot;&amp;lt;!--{$class|escape:&#039;html&#039;}--&amp;gt;&amp;quot;&amp;lt;!--{/if}--&amp;gt;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;!--{$text|escape:&#039;html&#039;}--&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034195</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034195"/>
		<updated>2025-01-26T15:59:50Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Revert back to original&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:html|&amp;lt;a href=&amp;quot;{{{1|https://docs.joomla.org}}}&amp;quot; id=&amp;quot;content-button&amp;quot; class=&amp;quot;button {{{class|}}}&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;{{{2|{{{1|Click}}} }}}&amp;lt;/a&amp;gt;}}&amp;lt;noinclude&amp;gt;{{documentation}}&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034194</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034194"/>
		<updated>2025-01-26T15:50:32Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: And again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;a href=&amp;quot;{{{1|https://docs.joomla.org}}} id=&amp;quot;content-button&amp;quot; class=&amp;quot;button {{{#if:{{{2}}}|{{{2}}}|}}}&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;{{{3|Click}}}&amp;lt;/a&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034193</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034193"/>
		<updated>2025-01-26T15:33:17Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Another try&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;a href=&amp;quot;{{{1|https://docs.joomla.org}}} id=&amp;quot;content-button&amp;quot; class=&amp;quot;button {{#if:{{{2}}}|{{{2}}}|}}&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;{{{3|{{{4|Click}}} }}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034192</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034192"/>
		<updated>2025-01-26T15:30:36Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Second pass&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;a href=&amp;quot;{{1|https://docs.joomla.org}}&amp;quot; id=&amp;quot;content-button&amp;quot; class=&amp;quot;button {{class|}}&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;{{2|{{1|Click}} }}&amp;lt;/a&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034191</id>
		<title>Template:Basic button external</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Basic_button_external&amp;diff=1034191"/>
		<updated>2025-01-26T15:29:42Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Remove html wrapper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;a href=&amp;quot;{{{1|https://docs.joomla.org}}}&amp;quot; id=&amp;quot;content-button&amp;quot; class=&amp;quot;button {{{class|}}}&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;{{{2|{{{1|Click}}} }}}&amp;lt;/a&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:Icon&amp;diff=1034190</id>
		<title>Template:Icon</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:Icon&amp;diff=1034190"/>
		<updated>2025-01-26T15:25:31Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Update to avoid html tag?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;fa fa-{{{1|info-circle}}} {{#if:{{{2}}}|fa-{{{2}}}|}}&amp;quot; style=&amp;quot;color:{{{3|#000}}};&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Main_Page&amp;diff=1015191</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Main_Page&amp;diff=1015191"/>
		<updated>2023-10-06T13:49:53Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Remove J3 links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 columns text-center hide-for-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:2.5em;&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla!&#039;&#039;&#039;&amp;lt;span style=&amp;quot;font-size:.4em; vertical-align:super;&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;sup&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
[[File:Joomla_logo.png‎|80px|center]]{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 columns text-center hide-for-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:2.5em;font-weight:bold;&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Documentation&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-11 large-centered column small-12&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
An online [[S:MyLanguage/JDOC:About|collaborative community manual]] for Joomla! users, developers or anyone interested in learning more about Joomla!  Currently, we have [[Special:Statistics|{{NUMBEROFARTICLES}}]] articles written, maintained, and translated by our Joomla! community members.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot; style=&amp;quot;margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-width:60px; display:inline-block; margin:0 auto;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-language fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;lang-control&amp;quot; style=&amp;quot;max-width:80%; margin:0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- First 3 Icons ---&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon blue-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-university fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Learn&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-info-circle fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Learn More|More About Joomla!]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#000;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Joomla:The_Joomla_Websites|The Joomla! Websites]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bug fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Filing_bugs_and_issues|Report a Bug or Issue]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Beginners|Beginners]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Administrators|Administrators]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-code fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Developers|Developers]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#000;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Joomla!_Code_Contributors|Core Developers]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon red-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-exclamation fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-wrench fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J3.x:Installing_Joomla|Installing Joomla!]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-arrow-circle-o-up  fa-lg icon&amp;quot; style=&amp;quot;color:#aaa;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Upgrading Versions|Upgrading and Migrations]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-question-circle fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Tutorials:Beginners|Beginner Tutorials]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-life-saver fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Help screens|Admin Help Screens]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-unlock fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/How do you recover or reset your admin password?|Password Recovery]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-book fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Glossary|Our Glossary]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-magic fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/:Category:Tips and tricks|Tips and Tricks]] or [[S:MyLanguage/:Category:FAQ|FAQs]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon dark-grey-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-code-fork fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Versions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla! {{CurrentSTSVer4|maintenance}} &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
is the latest stable version of Joomla 4, we recommend for new installations.&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla! 3.10.12 &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
was the last stable version of Joomla 3. Support ended on the 17th of August 2023&amp;lt;/translate&amp;gt;.&#039;&#039;&#039;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Info on all [[S:MyLanguage/What_version_of_Joomla!_should_you_use?|Joomla! CMS Versions]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Technical_requirements|Technical requirements]] for Joomla! {{CurrentSTSVer4|maintenance}} and {{CurrentSTSVer|maintenance}}&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J4.x:What%27s_new_in_Joomla!|Find out what&#039;s new in Joomla! CMS {{CurrentSTSVer4|minor}}]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
Take an extended test drive and build your own [[S:MyLanguage/How_to_build_your_free_Joomla_Website|free Joomla! website]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
Always use a supported version, read our [[S:MyLanguage/Release and support cycle|release and support cycle]] page.&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;no-external-icon&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;line-height:2.2em;font-size:1.3em;&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
[https://downloads.joomla.org Download Joomla!]&amp;lt;/translate&amp;gt;{{-}}&amp;lt;div class=&amp;quot;fa fa-download fa-2x&amp;quot; style=&amp;quot;color:#142849;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- Last 3 Icons ---&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon green-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-tasks fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-cogs fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J3.x:Global_configuration|Configuring Your Installation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-lock fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Security_Checklist|Secure Your Website]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-search-plus fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Search Engine Optimisation|Search Engine Optimisation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users  fa-lg icon&amp;quot; style=&amp;quot;color:#aaa;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/User Management|Managing Your Users]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-info-circle fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Template_Management|Managing Templates]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-newspaper-o fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Article_Management|Content Management]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bars fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Menu_Management|Menu Management]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon orange-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Contribute&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-pencil-square-o fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/JDOC:How_to_Contribute_to_Joomla!_Documentation|Help with Documentation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#7DB847;line-height:2.2em;font-size:1.1em;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-language fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/JDOC:Documentation_Translators|Translate Documentation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bug fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
Join the [[S:MyLanguage/Portal:Bug Squad|Bug Squad]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-file-code-o fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
Be a [[S:MyLanguage/Portal:Joomla!_Code_Contributors|Core Code Contributor]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-user-plus fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Join a [[S:MyLanguage/Portal:Joomla_User_Groups|Joomla User Group]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text no-external-icon&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-life-ring fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Help on a [http://volunteers.joomla.org Joomla! Team]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#5091CD;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[S:MyLanguage/Joomla:Brand Identity Elements|&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Brand Identity Elements&amp;lt;/translate&amp;gt;]]&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#F9A541;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[S:MyLanguage/Category:Marketing materials|&amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
Marketing Resources&amp;lt;/translate&amp;gt;]]&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon dark-grey-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-list-alt fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Projects|Find a JDOC Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Here are a few in need of contributors.&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/Help screens|Help Screens Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Beginners Tutorial Project|Beginners Tutorial Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Developer Tutorials Project|Developer Tutorials Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt; &#039;&#039;&#039;[[S:MyLanguage/JDOC:Joomla 4 Tutorials Project|Joomla 4 Tutorials Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
{{license/&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Main_Page&amp;diff=1015190</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Main_Page&amp;diff=1015190"/>
		<updated>2023-10-06T13:46:49Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 columns text-center hide-for-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:2.5em;&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla!&#039;&#039;&#039;&amp;lt;span style=&amp;quot;font-size:.4em; vertical-align:super;&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;sup&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
[[File:Joomla_logo.png‎|80px|center]]{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 columns text-center hide-for-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:2.5em;font-weight:bold;&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Documentation&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-11 large-centered column small-12&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
An online [[S:MyLanguage/JDOC:About|collaborative community manual]] for Joomla! users, developers or anyone interested in learning more about Joomla!  Currently, we have [[Special:Statistics|{{NUMBEROFARTICLES}}]] articles written, maintained, and translated by our Joomla! community members.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot; style=&amp;quot;margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-width:60px; display:inline-block; margin:0 auto;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-language fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;lang-control&amp;quot; style=&amp;quot;max-width:80%; margin:0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- First 3 Icons ---&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon blue-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-university fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Learn&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-info-circle fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Learn More|More About Joomla!]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#000;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Joomla:The_Joomla_Websites|The Joomla! Websites]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bug fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Filing_bugs_and_issues|Report a Bug or Issue]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Beginners|Beginners]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Administrators|Administrators]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-code fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Developers|Developers]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#000;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Joomla!_Code_Contributors|Core Developers]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon red-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-exclamation fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-wrench fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J3.x:Installing_Joomla|Installing Joomla!]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-arrow-circle-o-up  fa-lg icon&amp;quot; style=&amp;quot;color:#aaa;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Upgrading Versions|Upgrading and Migrations]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-question-circle fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Tutorials:Beginners|Beginner Tutorials]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-life-saver fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Help screens|Admin Help Screens]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-unlock fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/How do you recover or reset your admin password?|Password Recovery]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-book fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Glossary|Our Glossary]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-magic fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/:Category:Tips and tricks|Tips and Tricks]] or [[S:MyLanguage/:Category:FAQ|FAQs]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon dark-grey-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-code-fork fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Versions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla! {{CurrentSTSVer4|maintenance}} &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
is the latest stable version of Joomla 4, we recommend for new installations.&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&#039;&#039;&#039;Joomla! 3.10.12 &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
was the last stable version of Joomla 3. Support ended on the 17th of August 2023&amp;lt;/translate&amp;gt;.&#039;&#039;&#039;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Info on all [[S:MyLanguage/What_version_of_Joomla!_should_you_use?|Joomla! CMS Versions]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Technical_requirements|Technical requirements]] for Joomla! {{CurrentSTSVer4|maintenance}} and {{CurrentSTSVer|maintenance}}&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J3.x:What%27s_new_in_Joomla!|Find out what&#039;s new in Joomla! CMS {{CurrentSTSVer|minor}}]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Joomla_3_FAQ|Answers to common questions about Joomla! CMS 3]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
Take an extended test drive and build your own [[S:MyLanguage/How_to_build_your_free_Joomla_Website|free Joomla! website]]&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
Always use a supported version, read our [[S:MyLanguage/Release and support cycle|release and support cycle]] page.&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;no-external-icon&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;line-height:2.2em;font-size:1.3em;&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
[https://downloads.joomla.org Download Joomla!]&amp;lt;/translate&amp;gt;{{-}}&amp;lt;div class=&amp;quot;fa fa-download fa-2x&amp;quot; style=&amp;quot;color:#142849;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- Last 3 Icons ---&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon green-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-tasks fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-cogs fa-lg icon&amp;quot; style=&amp;quot;color:#5290C8;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/J3.x:Global_configuration|Configuring Your Installation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-lock fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Security_Checklist|Secure Your Website]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-search-plus fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Search Engine Optimisation|Search Engine Optimisation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users  fa-lg icon&amp;quot; style=&amp;quot;color:#aaa;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/User Management|Managing Your Users]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-info-circle fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Portal:Template_Management|Managing Templates]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-newspaper-o fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Article_Management|Content Management]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bars fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Menu_Management|Menu Management]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon orange-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Contribute&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;main-page-list&amp;quot; class=&amp;quot;text-left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-pencil-square-o fa-lg icon&amp;quot; style=&amp;quot;color:#7DB847;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/JDOC:How_to_Contribute_to_Joomla!_Documentation|Help with Documentation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#7DB847;line-height:2.2em;font-size:1.1em;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-language fa-lg icon&amp;quot; style=&amp;quot;color:#333;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/JDOC:Documentation_Translators|Translate Documentation]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-bug fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
Join the [[S:MyLanguage/Portal:Bug Squad|Bug Squad]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-file-code-o fa-lg icon&amp;quot; style=&amp;quot;color:#F5A443;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
Be a [[S:MyLanguage/Portal:Joomla!_Code_Contributors|Core Code Contributor]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-user-plus fa-lg icon&amp;quot; style=&amp;quot;color:#555;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Join a [[S:MyLanguage/Portal:Joomla_User_Groups|Joomla User Group]]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text no-external-icon&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-life-ring fa-lg icon&amp;quot; style=&amp;quot;color:#E6462B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Help on a [http://volunteers.joomla.org Joomla! Team]&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-joomla fa-lg icon&amp;quot; style=&amp;quot;color:#5091CD;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[S:MyLanguage/Joomla:Brand Identity Elements|&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Brand Identity Elements&amp;lt;/translate&amp;gt;]]&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;main-page-text&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-users fa-lg icon&amp;quot; style=&amp;quot;color:#F9A541;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
[[S:MyLanguage/Category:Marketing materials|&amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
Marketing Resources&amp;lt;/translate&amp;gt;]]&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-page-icon dark-grey-bkgd&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fa fa-list-alt fa-3x&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 small-12 column text-center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;icon-text&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Projects|Find a JDOC Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Here are a few in need of contributors.&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/Help screens|Help Screens Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Beginners Tutorial Project|Beginners Tutorial Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[S:MyLanguage/JDOC:Developer Tutorials Project|Developer Tutorials Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt; &#039;&#039;&#039;[[S:MyLanguage/JDOC:Joomla 4 Tutorials Project|Joomla 4 Tutorials Project]]&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
{{license/&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=1010683</id>
		<title>Template:CurrentSTSVer4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=1010683"/>
		<updated>2023-08-16T12:16:20Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Update version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{1}}}|&lt;br /&gt;
1|&lt;br /&gt;
major=4|&lt;br /&gt;
2|&lt;br /&gt;
minor=4.3|&lt;br /&gt;
4|&lt;br /&gt;
#default|&lt;br /&gt;
maintenance=4.3.3&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;!--The editor of this page is responsible for ensuring the three versions are consistent!--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=1001130</id>
		<title>Template:CurrentSTSVer4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=1001130"/>
		<updated>2023-04-27T20:23:54Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{1}}}|&lt;br /&gt;
1|&lt;br /&gt;
major=4|&lt;br /&gt;
2|&lt;br /&gt;
minor=4.3|&lt;br /&gt;
4|&lt;br /&gt;
#default|&lt;br /&gt;
maintenance=4.3.1&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;!--The editor of this page is responsible for ensuring the three versions are consistent!--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=999339</id>
		<title>Template:CurrentSTSVer4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=999339"/>
		<updated>2023-02-16T16:29:28Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{1}}}|&lt;br /&gt;
1|&lt;br /&gt;
major=4|&lt;br /&gt;
2|&lt;br /&gt;
minor=4.2|&lt;br /&gt;
4|&lt;br /&gt;
#default|&lt;br /&gt;
maintenance=4.2.8&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;!--The editor of this page is responsible for ensuring the three versions are consistent!--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=999336</id>
		<title>Template:CurrentSTSVer4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:CurrentSTSVer4&amp;diff=999336"/>
		<updated>2023-02-16T10:42:23Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Fix version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{1}}}|&lt;br /&gt;
1|&lt;br /&gt;
major=4|&lt;br /&gt;
2|&lt;br /&gt;
minor=4.2|&lt;br /&gt;
4|&lt;br /&gt;
#default|&lt;br /&gt;
maintenance=4.2.7&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;!--The editor of this page is responsible for ensuring the three versions are consistent!--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999321</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999321"/>
		<updated>2023-02-16T10:38:52Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: No bugs or security for 4.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
* See the [https://developer.joomla.org/roadmap.html Joomla! Project Roadmap] for the time frames of all future releases.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 4.3 release (currently planned for April 2023)&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:105--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:106--&amp;gt; Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.2 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999297</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999297"/>
		<updated>2023-02-16T10:36:38Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Marked this version for translation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
* See the [https://developer.joomla.org/roadmap.html Joomla! Project Roadmap] for the time frames of all future releases.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 4.3 release (currently planned for April 2023)&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:105--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:106--&amp;gt; Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.2 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999296</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=999296"/>
		<updated>2023-02-16T10:36:10Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Remove duplicates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
* See the [https://developer.joomla.org/roadmap.html Joomla! Project Roadmap] for the time frames of all future releases.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 4.3 release (currently planned for April 2023)&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.2 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995768</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995768"/>
		<updated>2022-11-29T23:32:19Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 4.3 release (currently planned for April 2023)&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.2 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1 release&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&amp;lt;ref name=&amp;quot;roadmap&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
See J3&#039;s [http://developer.joomla.org/cms/roadmap.html roadmap] for time frames of all future releases of all Joomla! 3 versions.&amp;lt;/translate&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995767</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995767"/>
		<updated>2022-11-29T23:31:26Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&amp;lt;ref name=&amp;quot;roadmap&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
See J3&#039;s [http://developer.joomla.org/cms/roadmap.html roadmap] for time frames of all future releases of all Joomla! 3 versions.&amp;lt;/translate&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995766</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995766"/>
		<updated>2022-11-29T23:29:59Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Fix extra line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Recommended for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br /&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 15.02.2024&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&amp;lt;ref name=&amp;quot;roadmap&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
See J3&#039;s [http://developer.joomla.org/cms/roadmap.html roadmap] for time frames of all future releases of all Joomla! 3 versions.&amp;lt;/translate&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995765</id>
		<title>Joomla! CMS versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla!_CMS_versions&amp;diff=995765"/>
		<updated>2022-11-29T23:27:51Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Various version updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer4|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&lt;br /&gt;
{{Joomla version|version={{CurrentSTSVer|maintenance}}|comment=&#039;&#039;&#039;&amp;lt;translate&amp;gt; &amp;lt;!--T:96--&amp;gt; Stable Version&amp;lt;/translate&amp;gt;&#039;&#039;&#039;}}&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
Check for the latest Joomla! CMS version. If you are not on the latest release, read the release notes to see if you need to upgrade. If a release is being made in order to address security issues then it is strongly advised that you upgrade as soon as possible. You can see the release history of each series in the table below. Click the &#039;&#039;&#039;version history link&#039;&#039;&#039; in the notes column to find details on exact release date, release notes and package and MD5s.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
*Normally, you should use the latest version of Joomla! for a new site unless you have a specific reason not to.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
*The latest version can be downloaded from [https://downloads.joomla.org Joomla! Downloads site].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
* Make sure you subscribe to the [https://developer.joomla.org/security-centre.html Joomla! Security Announcements] feed. This RSS feed is used to make announcements, including the availability of new releases, that could affect the security of your site. You have the option to subscribe to this feed by RSS or email.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
* If you are running an earlier release of the current version (for example, you are running 3.1.6 and the current version is 3.4.1), you should upgrade to the current version. Each minor release fixes a number of bugs and security issues. It is always good practice to upgrade to the latest maintenance version as a first step in troubleshooting a problem and fixing any newly discovered security issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Joomla! CMS Versions== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1 cellpadding=2 cellspacing=0 style=&amp;quot;text-align:center; border-collapse:collapse; border-color:#000;&amp;quot;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
CMS Version&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
Available&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   colspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
Support&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
End of Life&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Upgrade Type&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Notes&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   rowspan=2 style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
Latest Release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Bugs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&amp;quot;text-align:center; background-color:#4a86e8; font-weight:bold;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Security&amp;lt;/translate&amp;gt;&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|  style=&#039;display:none;&#039; |&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 4.2&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Recommeded for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.2 version history|Joomla! 4.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer4|maintenance}}&lt;br /&gt;
|-|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | N/A&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:102--&amp;gt; One-click from Joomla! 4.0&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:103--&amp;gt; Recommeded for all new installations&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.1 version history|Joomla! 4.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.1.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 4.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 15.02.2024&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt; Migration from Joomla! 3.10&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt; Upgrade to {{CurrentSTSVer4|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 4.0 version history|Joomla! 4.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 4.0.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3; font-weight:bold;&amp;quot; | 3.10&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | [[File:Checkmark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | 17.08.2023&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:101--&amp;gt; One-click from Joomla! 3.9&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt; Recommended for migration to Joomla! 4&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.10 version history|Joomla! 3.10 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#d9ead3;&amp;quot;  | {{CurrentSTSVer|maintenance}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.9&amp;lt;ref name=&amp;quot;roadmap&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
See J3&#039;s [http://developer.joomla.org/cms/roadmap.html roadmap] for time frames of all future releases of all Joomla! 3 versions.&amp;lt;/translate&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt; 3.10 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.9 version history|Joomla! 3.9 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.9.28&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.8&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt; 3.9 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt; Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.8 version history|Joomla! 3.8 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.8.13&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:82--&amp;gt; 3.8 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt; One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.7 version history|Joomla! 3.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
3.7 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.6 version history|Joomla! 3.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.6.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
3.6 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[S:MyLanguage/Joomla 3.5 version history|Joomla 3.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.5.1&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.4&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
3.5 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.4 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.4.8&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.3&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
3.4 release&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
[[Joomla 3.3 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.3.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.2&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Oct 2014&amp;lt;ref&amp;gt;Bug fixes will cease April 2014, security fixes only, see [https://community.joomla.org/blogs/leadership/raising-the-bar-on-security.html Raising The Bar On Security]. &amp;lt;blockquote&amp;gt;&amp;quot;Also, for the six months after Joomla! 3.3 is released, the Joomla! Project will be releasing Security Updates for both 3.2 &#039;&#039;&#039;and&#039;&#039;&#039; 3.3 so any new vulnerabilities can be promptly patched with a one-click update without the need to immediately update to Joomla! 3.3, giving you time to request your hosting provider to update their PHP version.&amp;quot;&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Upgrade server&#039;s PHP to 5.3.10 or greater and upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.2 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot;  | 3.2.7&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 3.1&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Dec 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
[[Joomla 3.1 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.1.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px; font-weight:bold;&amp;quot; | 3.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
May 2013&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:100px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
One-click&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; width:306px;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
Upgrade to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 3.0 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 3.0.4&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 2.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
December 31st, 2014&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Upgrade to&amp;lt;/translate&amp;gt; {{CurrentSTSVer}} &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
now&amp;lt;/translate&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
[[Joomla 2.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | {{CurrentLTSVer|maintanence}}&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.7&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Feb 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.7 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.7.5&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.6&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Aug 2011&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.6 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | 1.6.6&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.5&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Sept 2012&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;br/&amp;gt;[[Joomla 1.5 version history]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
EOL at 1.5.26&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc; font-weight:bold;&amp;quot; | 1.0&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | [[File:X-mark.png|center]]&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
22 July 2009&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
Migration to 3.x&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
Plan to migrate to {{CurrentSTSVer|maintenance}} now&amp;lt;/translate&amp;gt;&lt;br /&gt;
|   style=&amp;quot;background-color:#f4cccc;&amp;quot; | &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
EOL at 1.0.15&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
[[Category:Joomla! versions]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.0_FAQ&amp;diff=956666</id>
		<title>Category:Version 4.2.0 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.0_FAQ&amp;diff=956666"/>
		<updated>2022-08-22T21:44:22Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Default namespace is J4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.0|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.0 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.0 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|CreateFAQ|J4.x}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:TT&amp;diff=956665</id>
		<title>Template:TT</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:TT&amp;diff=956665"/>
		<updated>2022-08-22T21:37:20Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: More defaults&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|{{#language:{{#titleparts:{{FULLPAGENAME}}|1|-1}}}}|{{ {{{1}}} | {{{2|J3.x}}} }}&lt;br /&gt;
|{{#ifexist:Template:{{{1}}}/{{#titleparts:{{FULLPAGENAME}}|1|-1}}&lt;br /&gt;
|{{ {{{1}}}/{{#titleparts:{{FULLPAGENAME}}|1|-1}} | {{{2|J3.x}}} }}&lt;br /&gt;
|{{ {{{1}}}/en | {{{2|J3.x}}} }}&lt;br /&gt;
}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956660</id>
		<title>Category:Version 4.2.1 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956660"/>
		<updated>2022-08-22T19:58:49Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.1|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.1 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.1 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|CreateFAQ|J4.x}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956659</id>
		<title>Category:Version 4.2.1 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956659"/>
		<updated>2022-08-22T19:58:38Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.1|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.1 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.1 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|(CreateFAQ|J4.x)}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Template:TT&amp;diff=956658</id>
		<title>Template:TT</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Template:TT&amp;diff=956658"/>
		<updated>2022-08-22T19:58:31Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Add default for template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|{{#language:{{#titleparts:{{FULLPAGENAME}}|1|-1}}}}|{{ {{{1}}} | {{{2|J3.x}}} }}&lt;br /&gt;
|{{#ifexist:Template:{{{1}}}/{{#titleparts:{{FULLPAGENAME}}|1|-1}}&lt;br /&gt;
|{{ {{{1}}}/{{#titleparts:{{FULLPAGENAME}}|1|-1}} }}&lt;br /&gt;
|{{ {{{1}}}/en }}&lt;br /&gt;
}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956654</id>
		<title>Category:Version 4.2.1 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956654"/>
		<updated>2022-08-22T19:52:07Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.1|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.1 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.1 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|CreateFAQ|J4.x}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956653</id>
		<title>Category:Version 4.2.1 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956653"/>
		<updated>2022-08-22T19:49:11Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.1|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.1 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.1 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|CreateFAQ|1=J4.x}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956652</id>
		<title>Category:Version 4.2.1 FAQ</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Version_4.2.1_FAQ&amp;diff=956652"/>
		<updated>2022-08-22T19:45:29Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Try passing in param&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Joomla version|version=4.2.1|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; These FAQs are specific to the Joomla! 4.2.1 release. Only issues that are specific to this release will be listed here, together with  suggested resolutions. Please add information to this resource. The Joomla! Bug Squad will watch over this page to ensure any new bugs are  added to the tracker and resolved. Continue to use the &#039;&#039;&#039;[[jforum:705|Joomla! Forums for  support requests]]&#039;&#039;&#039; as this is not a substitute for posting there, but  rather a common location for the community to gather common release issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note|To appear in this category, this text is required at the foot of the page&amp;lt;/translate&amp;gt;:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Category:Version 4.2.1 FAQ{{#translation:}}]]&amp;lt;/nowiki&amp;gt;|reminder}}&lt;br /&gt;
&lt;br /&gt;
{{TT|CreateFAQ|J4.x}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt; &lt;br /&gt;
[[Category:Version 4.2 FAQ{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla! 4.2{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Help4.x:Admin_Modules:_Action_Logs_-_Latest&amp;diff=927619</id>
		<title>Help4.x:Admin Modules: Action Logs - Latest</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Help4.x:Admin_Modules:_Action_Logs_-_Latest&amp;diff=927619"/>
		<updated>2022-06-30T18:26:42Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: removed Category:Help screen 4.2 using HotCat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description== &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;Action Logs - Latest&#039;&#039;&#039; module type shows a list of the most recent actions on the Administrator &#039;&#039;&#039;Home Dashboard&#039;&#039;&#039;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to Access== &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{safesubst:Chunk4x:ModuleManager How to Access Administrator Module/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;|Action Logs - Latest}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
[[Image:help-4x-modules-manager-admin-module-latestactions-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|800px|none]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Form Fields== &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Title.&#039;&#039;&#039; Sets the name to give to this instance of the module. &amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Module Tab=== &amp;lt;!--T:9--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
*&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Count.&#039;&#039;&#039; Sets the number of recent actions to display on the Home Dasboard of your site.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Tab=== &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Image:Help-4x-modules-manager-admin-module-latestactions-advanced-options-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|600px]]&lt;br /&gt;
{{Chunk4x:ModuleManager Advanced Tab/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Permissions Tab=== &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Image:Help-4x-modules-manager-admin-module-latestactions-permissions-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|600px]]&lt;br /&gt;
{{Chunk4x:ExtensionsModuleManager-tab-Permissions/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Toolbar== &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_top_descriptor/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_Save/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAndClose/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAndNew/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAsCopy/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_Help/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Information== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* [[J3.x:User_Action_Logs/&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; en|Joomla 3 Tutorial: User Action Logs&amp;lt;/translate&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Cathelp|4.0|Module Manager Help Screens}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Category:Help_screen_4.2&amp;diff=927615</id>
		<title>Category:Help screen 4.2</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Category:Help_screen_4.2&amp;diff=927615"/>
		<updated>2022-06-30T18:25:58Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;  &amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Joomla 4.2 Help Screens&amp;lt;/translate&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Joomla 4.2 Help Screens&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Help4.x:Admin_Modules:_Action_Logs_-_Latest&amp;diff=927614</id>
		<title>Help4.x:Admin Modules: Action Logs - Latest</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Help4.x:Admin_Modules:_Action_Logs_-_Latest&amp;diff=927614"/>
		<updated>2022-06-30T18:25:15Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: added Category:Help screen 4.2 using HotCat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description== &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;Action Logs - Latest&#039;&#039;&#039; module type shows a list of the most recent actions on the Administrator &#039;&#039;&#039;Home Dashboard&#039;&#039;&#039;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to Access== &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{safesubst:Chunk4x:ModuleManager How to Access Administrator Module/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;|Action Logs - Latest}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
[[Image:help-4x-modules-manager-admin-module-latestactions-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|800px|none]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Form Fields== &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Title.&#039;&#039;&#039; Sets the name to give to this instance of the module. &amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Module Tab=== &amp;lt;!--T:9--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
*&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Count.&#039;&#039;&#039; Sets the number of recent actions to display on the Home Dasboard of your site.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Tab=== &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Image:Help-4x-modules-manager-admin-module-latestactions-advanced-options-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|600px]]&lt;br /&gt;
{{Chunk4x:ModuleManager Advanced Tab/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Permissions Tab=== &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Image:Help-4x-modules-manager-admin-module-latestactions-permissions-&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|600px]]&lt;br /&gt;
{{Chunk4x:ExtensionsModuleManager-tab-Permissions/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Toolbar== &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_top_descriptor/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_Save/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAndClose/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAndNew/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_SaveAsCopy/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{safesubst:Chunk4x:Help_screen_toolbar_icon_Help/&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Information== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* [[J3.x:User_Action_Logs/&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; en|Joomla 3 Tutorial: User Action Logs&amp;lt;/translate&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Cathelp|4.0|Module Manager Help Screens}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Help screen 4.2]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Creating_a_submenu&amp;diff=924784</id>
		<title>J3.x:Creating a submenu</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Creating_a_submenu&amp;diff=924784"/>
		<updated>2022-06-22T09:23:45Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Syntax highlight to html rather than remove html4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=magic|icon-color=#5091cd|size=3x|text-color=#333|title=Tutorial&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
How to Create a Submenu in a Joomla! Site&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=3.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
In Joomla, submenus can be shown either as one menu with two or more levels or as completely separate menu modules. This is useful for constructing menus showing parent and child level navigation or for showing sublevel menu items in entirely separate positions on your template. To show how to do this, we will step through creating parent and child level menu items and then see how to show those items within one large menu and as a separate menu with only the child level items showing in a separate position on a template.&amp;lt;/translate&amp;gt; {{-}} &lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
To begin, menus function with three basic constructs:&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
*Articles - you need content to link to. This can also be component pieces, other menu items or external links.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
*Menu - describes the menu items, the type of navigation, their parent/child relationship to other menu items and the order they are displayed in.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
*Menu Module - controls the position and displaying of the menu.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
For this tutorial, begin by logging into the Joomla Administrator. If you are unfamiliar with how to login see this article: [[S:MyLanguage/J3.x:Logging_in_or_out_of_the_Administrator_back-end|Logging in or out of the Administrator backend]].&amp;lt;/translate&amp;gt; {{-}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For this tutorial you need Super Administrator permissions or permissions open enough to create and modify Articles, Menu Items, and Modules. For more information on User Access Control see: [[S:MyLanguage/J3.x:Access Control List Tutorial|ACL Tutorial]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Step 1 - Create Your Articles== &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
In our example, we will create top level menu items for &#039;&#039;Dogs&#039;&#039; and &#039;&#039;Cats&#039;&#039;. Under Dogs, we will have &#039;&#039;Collies&#039;&#039; and &#039;&#039;Pomeranians&#039;&#039;. Under Cats we will have &#039;&#039;Burmese&#039;&#039; and &#039;&#039;Russian Blues&#039;&#039;. So the structure of our sample menu items will be as follows:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
*Dogs&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
**Collies&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
**Pomeranians&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
*Cats&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
**Burmese&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
**Russian Blues&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
First, create 4 articles so our menu items will have something to link to: &#039;&#039;Collies&#039;&#039;, &#039;&#039;Pomeranians&#039;&#039;, &#039;&#039;Burmese&#039;&#039; and &#039;&#039;Russian Blue&#039;&#039;. See this tutorial if you need help creating an Article: [[S:MyLanguage/Help34:Content Article Manager Edit|Adding a new Article]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Step 2 - Create the Parent Level Menu Items== &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
To create the structure, we need to navigate to the menu where we want our new menu items. If this is a new menu, you will need to create it. See this tutorial on how to create a menu: [[S:MyLanguage/J3.x:Adding a new menu|Adding a new menu]].&amp;lt;/translate&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Once you have your menu located in the Menu Manager, you will add the parent menu items using the &#039;&#039;&#039;System Links&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;External URL&#039;&#039;&#039; for each navigation link: &#039;&#039;Dogs&#039;&#039; and &#039;&#039;Cats&#039;&#039;.&amp;lt;/translate&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Please note, there are other menu item types that can be used for the parent level navigation structure.&amp;lt;/translate&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Here are the steps to create sample Menu Items using our example data. For more information on creating Menu Items see: [[S:MyLanguage/J3.x:Adding a new menu|Adding a new menu item]].&amp;lt;/translate&amp;gt; {{-}} &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
# Navigate to the Menu Manager by clicking on &#039;&#039;&#039;Menus&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;Menu Manager&#039;&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Edit-Main-Menu-&amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.jpg|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
# In the toolbar, click on &#039;&#039;New&#039;&#039;&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Edit-Main-Menu-Toolbar-new-&amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
# For the purposes of this exercise we are creating &amp;quot;placeholder&amp;quot; links using the &#039;&#039;&#039;System&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;External URL&#039;&#039;&#039; menu type for the &#039;&#039;Dogs&#039;&#039; and &#039;&#039;Cats&#039;&#039; parent level menu items. So, in the new Menu Item, click on the Menu Type select button:&amp;lt;/translate&amp;gt; {{-}}[[Image:J3x-Add-Main-Menu-Select-Type-&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
# Click on &#039;&#039;System Links&#039;&#039; then scroll down and select &#039;&#039;External URL&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-System-External-Url-&amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
# Add the &#039;&#039;&#039;Menu Item Title&#039;&#039;&#039; (&amp;quot;Dogs&amp;quot;) and type in a hashtag &amp;quot;#&amp;quot; in the &#039;&#039;&#039;Link&#039;&#039;&#039; box.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Menu-Item-External-Url-&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
# Save your menu item.&amp;lt;/translate&amp;gt; {{-}}[[Image:Joomla-3-Menu-Add-Menu-Save-&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
# Repeat steps 2 - 6 for the &#039;&#039;Cats&#039;&#039; Parent Level menu item.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Step 3 - Create the Sublevel Menu Items== &amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
Now you will add the sublevel menu items using the &#039;&#039;&#039;Articles&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;Single Article&#039;&#039;&#039; to create menu links to the individual pages &#039;&#039;Collies&#039;&#039;, &#039;&#039;Pomeranians&#039;&#039;, &#039;&#039;Burmese&#039;&#039;, and &#039;&#039;Russian Blues&#039;&#039;. For each Menu Item created, we will set the &#039;&#039;&#039;Parentage&#039;&#039;&#039; to &#039;&#039;Dogs&#039;&#039; or &#039;&#039;Cats&#039;&#039;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
For more detailed information on how to create a Single Article Menu Type, see: [[S:MyLanguage/Adding a menu item which points to an Article|Adding a menu item which points to an Article]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; There are other menu item types that can be used for the sublevel navigation structure.&amp;lt;/translate&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
# In the toolbar, click on &amp;quot;New&amp;quot;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Edit-Main-Menu-Toolbar-new-&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
# In the new Menu Item click on the Menu Type select button:&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Add-Main-Menu-Select-Type-&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
# Select &#039;&#039;&#039;Articles&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;Single Article&#039;&#039;&#039; from the list displayed.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Add-Main-Menu-Article-Type-&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
# Returning to the Menu Item Detail page, click on the &#039;&#039;&#039;Select Article&#039;&#039;&#039; List.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Add-Main-Menu-Article-Select-Article-&amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
# Select the &#039;&#039;Collies&#039;&#039; article for this example.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Menu-Item-Single-Article-&amp;lt;translate&amp;gt;&amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
# On returning to the Article Detail page, fill in the &#039;&#039;Menu Item Title&#039;&#039;.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
Then click on the &#039;&#039;&#039;Parent Item&#039;&#039;&#039; select list located in the far right column. Find and select the &#039;&#039;Dogs&#039;&#039; parent item by scrolling through the Parent Item List. Note that menu levels are displayed with dashes: &amp;quot;-&amp;quot; (single dash) is the highest level, &amp;quot;--&amp;quot; (two dashes) is the second level, &amp;quot;---&amp;quot; third level and so on.&amp;lt;/translate&amp;gt; {{-}}[[Image:J3x-Create-Sublevel-Menu-Select-Parent-Item-&amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
# Click on the button &#039;&#039;&#039;Save &amp;amp; Close&#039;&#039;&#039; up in the top button.&amp;lt;/translate&amp;gt;{{-}}[[Image:Joomla-3-Menu-Add-Menu-Save-&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
# Repeat steps 1-7 for the remaining articles &#039;&#039;Pomeranians&#039;&#039; with the &#039;&#039;Dog&#039;&#039; parent and articles &#039;&#039;Burmese&#039;&#039; and &#039;&#039;Russian Blues&#039;&#039; for the &#039;&#039;Cat&#039;&#039; parent.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
# When you are finished with the &amp;quot;Menu Items&amp;quot; section, the Menu Item Manager should look very similar to the following:&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Items-&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 4 - Setup the Menu Module== &amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
At this point, we have our Articles and Menu Items done. Now we need to update the &#039;&#039;&#039;Menu Module&#039;&#039;&#039;. In Joomla!, the Menu Module determines three main things:&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
# What the menu looks like;&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
# Where on the page it will show;&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
# Which pages it will show on.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
We will do two examples:&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
* In the first example, we will set the parameters that show the parent level menu items with the lower level items beneath.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:65--&amp;gt;&lt;br /&gt;
* In the second example, we will add an additional menu module that appears in the left column and shows only the second level menu items.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:66--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; We will do both examples using the Protostar Template included in the core Joomla! installation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Example 1 - One Menu Module With Second Level Menu Items=== &amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;  &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
To show this as one module, follow these steps:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
# Navigate to &#039;&#039;&#039;Extensions&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;Module Manager&#039;&#039;&#039; and locate the Menu Module associated with your menu. If you need to create a new menu module, for instructions on creating a menu module, see:&amp;lt;/translate&amp;gt; [[S:MyLanguage/Help34:Extensions Module Manager Menu|Module Menu]] {{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Control-Panel-&amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
# Click on the module name associated with your menu. In this tutorial, we are selecting &#039;&#039;&#039;Main Menu&#039;&#039;&#039;. &#039;&#039;Note:&#039;&#039; this image has been filtered by selecting &#039;&#039;Menu&#039;&#039; in the Module type dropdown.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-List-Menus-&amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
# In the Module details, set the &#039;&#039;&#039;Start level&#039;&#039;&#039; to &#039;&#039;1&#039;&#039;, the &#039;&#039;&#039;End Level&#039;&#039;&#039; to &#039;&#039;All&#039;&#039; and set &#039;&#039;&#039;Show Submenu Items&#039;&#039;&#039; to &#039;&#039;Yes&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Details-&amp;lt;translate&amp;gt;&amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
# For this tutorial, we have added some styling in the &#039;&#039;&#039;Advanced&#039;&#039;&#039; tab. In the &#039;&#039;&#039;Menu Class Suffix&#039;&#039;&#039; we have entered &#039;&#039;navbar-nav nav-pills&#039;&#039;. You can also add &#039;&#039;navbar-nav nav-tabs&#039;&#039; for a slightly different look. Note: there is a space before &#039;&#039;navbar-nav&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Advanced-Menu-Class-Suffix-&amp;lt;translate&amp;gt;&amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
# Click on &#039;&#039;&#039;Save &amp;amp; Close&#039;&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Save-&amp;lt;translate&amp;gt;&amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
# Go to the frontend of your site and your menu should look similar to this. In the Protostar Template, the sublevel menu items are displayed as dropdown menu items.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Frontend-Sample-Dropdown-&amp;lt;translate&amp;gt;&amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
# The source code generated will look similar to this:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul class=&amp;quot;nav menu navbar-nav nav-pills&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-101 current active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/&amp;quot; &amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-102&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;dropdown-toggle&amp;quot; href=&amp;quot;/about-us&amp;quot; &amp;gt;About Us&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-210 deeper parent&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; &amp;gt;Dogs&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;ul class=&amp;quot;nav-child unstyled small&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li class=&amp;quot;item-212&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-19-31/collies&amp;quot; &amp;gt;Collies&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li class=&amp;quot;item-213&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-19-31/pomeranians&amp;quot; &amp;gt;Pomeranians&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-211 deeper parent&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; &amp;gt;Cats&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;ul class=&amp;quot;nav-child unstyled small&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;li class=&amp;quot;item-214&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-20-12/burmese&amp;quot; &amp;gt;Burmese &amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li class=&amp;quot;item-215&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-20-12/russian-blues&amp;quot; &amp;gt;Russian Blues&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Example 2 - A Second Menu Module With Child Level Menu Items=== &amp;lt;!--T:82--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
To show in a separate module in a different position, follow these steps:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
# Navigate to &#039;&#039;&#039;Extensions&#039;&#039;&#039;{{rarr}}&#039;&#039;&#039;Module Manager&#039;&#039;&#039; and locate or create a second Menu Module associated with your menu. If you are unfamiliar with how to create a new menu module, for instructions on creating a menu module, see:&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
[[S:MyLanguage/Help34:Extensions Module Manager Menu|Module Menu]]&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Control-Panel-&amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
# Click on the module name associated with your menu. In this tutorial, we are selecting &#039;&#039;Left Menu&#039;&#039;. Note: this image has been filtered by selecting &#039;&#039;Menu&#039;&#039; in the Module type dropdown.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-List-Menus-2-&amp;lt;translate&amp;gt;&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
# In the Module details, set the &#039;&#039;&#039;Start level&#039;&#039;&#039; to &#039;&#039;2&#039;&#039;, the &#039;&#039;&#039;End Level&#039;&#039;&#039; to &#039;&#039;All&#039;&#039; and set &#039;&#039;&#039;Show Submenu Items&#039;&#039;&#039; to &#039;&#039;Yes&#039;&#039;. Note the position has changed and the menu we are pointing to is the &#039;&#039;&#039;Main Menu&#039;&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Details-2-&amp;lt;translate&amp;gt;&amp;lt;!--T:90--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
# For this tutorial, we have used the &#039;&#039;&#039;Menu Assignment&#039;&#039;&#039; tab and assigned this Menu Module to appear on all pages except the home page.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Module-Assignment-Tab-&amp;lt;translate&amp;gt;&amp;lt;!--T:92--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:93--&amp;gt;&lt;br /&gt;
# Click on &#039;&#039;&#039;Save &amp;amp; Close&#039;&#039;&#039;.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Module-Save-&amp;lt;translate&amp;gt;&amp;lt;!--T:94--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png]] &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:95--&amp;gt;&lt;br /&gt;
# Go to the frontend of your site and navigate to the &#039;&#039;Collies&#039;&#039; article. Your menu should look similar to this. Notice the child level subitems are the only items showing.&amp;lt;/translate&amp;gt;{{-}}[[Image:J3x-Create-Sublevel-Menu-Frontend-Sample-Child-Menu-&amp;lt;translate&amp;gt;&amp;lt;!--T:96--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;.png|775px|border]]&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
# The source code generated will look similar to this:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul class=&amp;quot;nav menu&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-212 current active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-19-31/collies&amp;quot; &amp;gt;Collies&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;item-213&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/2015-11-24-14-19-31/pomeranians&amp;quot; &amp;gt;Pomeranians&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sub-Sub-Menus== &amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
Using this same technique, it is easy to create third-level sub-menus. You just make the Parent Menu Item a second-level sub-menu. Then you could use the same technique to create a separate Menu Module with Start Level of 2 and End Level of 3. This would show only the third-level Menu Items.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
[[Category:Beginners]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Joomla! 3.x]]&lt;br /&gt;
[[Category:Menu Management]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924783</id>
		<title>Absolute Basics of How a Component Functions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924783"/>
		<updated>2022-06-22T09:18:05Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Revert back&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This article is designed for Joomlaǃ beginners; it is designed to explain what a Joomlaǃ component is and how it functions. When a specific component example will benefit the tutorial, this article will refer to an example component named Hello Worldǃ.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==What is a Joomlaǃ Component== &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Chunk:Component/&amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
In the Joomla! framework, components can be designed using a flat model (returns HTML code for the requested page) or Model-View-Controller (herein referred to as MVC) pattern.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Introduction to MVC== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
MVC is a software design pattern that can be used to organize code in such a way that the business logic and data presentation are separate. The premise behind this approach is that if the business logic is grouped into one section, then the interface and user interaction that surrounds the data can be revised and customized without having to reprogram the business logic. MVC was originally developed to map the traditional input, processing, output roles into a logical GUI architecture.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Model=== &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The model is the part of the component that encapsulates the application&#039;s data. It will often provide routines to manage and manipulate this data in a meaningful way in addition to routines that retrieve the data from the model. In general, the underlying data access technique should be encapsulated in the model. In this way, if an application is to be moved from a system that utilizes a flat file to store its information to a system that uses a database, the model is the only element that needs to be changed, not the view or the controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===View=== &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
The view is the part of the component that is used to render the data from the model in a manner that is suitable for interaction. For a web-based application, the view would generally be an HTML page that is returned to the user. The view pulls data from the model (which is passed to it from the controller) and feeds the data into a template which is populated and presented to the user. The view does not cause the data to be modified in any way, it only displays the data received from the model.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Controller=== &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
The controller is responsible for responding to user actions. In the case of a web application, a user action is generally a page request. The controller will determine what request is being made by the user and respond appropriately by triggering the model to manipulate the data appropriately and passing the model into the view. The controller does not display the data in the model, it only triggers methods in the model which modify the data, and then pass the model into the view which displays the data.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Joomla! Component Framework Explained == &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Model === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
In the Joomla framework, models are responsible for managing the data. The first function that has to be written for a model is a get function. It returns data to the caller. For this example, the caller will be the HelloWorldViewHelloWorld view. By default, the model named HelloWorldModelHelloWorld residing in site/models/helloworld.php is the main model associated to this view.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
So let&#039;s have a quick look at the naming conventions with an example, since the naming convention are the actual magic that make everything work:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; resides in &#039;&#039;site/views/&#039;&#039;&#039;helloworld&#039;&#039;&#039;/view.html.php&#039;&#039; and will make use of the class &#039;&#039;HelloWorldModel&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;helloworld&#039;&#039;&#039;.php&#039;&#039;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
Let&#039;s just assume we want to use an imaginary view &#039;&#039;fluffy&#039;&#039;, you would have to have:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; which resides in &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/view.html.php&#039;&#039;. The view will make use of &#039;&#039;HelloWorldModel&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;fluffy&#039;&#039;&#039;.php&#039;&#039;. Note: the actual screen of the view: &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/tmpl/default.php&#039;&#039; is required as well to make this example work.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Breaking any of these bold conventions will lead to errors or a blank page.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Accessing a Joomlaǃ Component== &amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
First we need to access the Joomla! platform, which is always accessed through a single point of entry. Using your preferred web browser, navigate to the following URL:&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
You can use the URL of the component, or a [[#Menu| Menu]] in order to navigate to the component. In this article we will discuss using the URL.&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php?option=com_helloworld&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==MVC Basic Directory Structure== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Components are stored in a directory within your Joomla! installation, specifically at:&lt;br /&gt;
*&amp;lt;tt&amp;gt;htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_&amp;lt;component_name&amp;gt;/&amp;lt;/tt&amp;gt; .&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
The Hello World! component would be stored in &amp;lt;tt&amp;gt; htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_helloworld/&amp;lt;/tt&amp;gt;.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
A basic component will contain the following files within its directoryː&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
*An HTML file that is just a security file with a background colorː &amp;lt;tt&amp;gt;index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
*A PHP file that represents the controller itselfː &amp;lt;tt&amp;gt;controller.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
*A PHP file that loads the controller classː &amp;lt;tt&amp;gt;&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
*A PHP file that represents the model itselfː &amp;lt;tt&amp;gt;models/&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;models/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
*A PHP file containing the default viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
*An XML file for adding a menu item typeː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.xml&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
*A PHP file for displaying the viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/view.html.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==JEXEC== &amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The following line is commonly found at the start of Joomla! PHP files:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    defined(&#039;_JEXEC&#039;) or die(&#039;Restricted Access&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
This enables a secure entry point into the Joomla! platform. [[S:MyLanguage/JEXEC| JEXEC]] contains a detailed explanation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Tutorials on Designing a MVC Component== &amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
To learn how to design your own MVC Component, please complete the tutorial for your Joomla! version.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J1.5:Developing_a_MVC_Component/Introduction| Joomla! 1.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J2.5:Developing_a_MVC_Component| Joomla! 2.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J3.x:Developing_an_MVC_Component/Introduction| Joomla! 3.x]]&lt;br /&gt;
* [[S:MyLanguage/J4.x:Developing_an_MVC_Component| Joomla! 4.x]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
[[Category:Explanations{{#translation:}}]]&lt;br /&gt;
[[Category:Component Development{{#translation:}}]]&lt;br /&gt;
[[Category:Beginner Development{{#translation:}}]]&lt;br /&gt;
[[Category:Development Recommended Reading{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924782</id>
		<title>Absolute Basics of How a Component Functions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924782"/>
		<updated>2022-06-22T09:16:11Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Oops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This article is designed for Joomlaǃ beginners; it is designed to explain what a Joomlaǃ component is and how it functions. When a specific component example will benefit the tutorial, this article will refer to an example component named Hello Worldǃ.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==What is a Joomlaǃ Component== &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Chunk:Component/&amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
In the Joomla! framework, components can be designed using a flat model (returns HTML code for the requested page) or Model-View-Controller (herein referred to as MVC) pattern.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Introduction to MVC== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
MVC is a software design pattern that can be used to organize code in such a way that the business logic and data presentation are separate. The premise behind this approach is that if the business logic is grouped into one section, then the interface and user interaction that surrounds the data can be revised and customized without having to reprogram the business logic. MVC was originally developed to map the traditional input, processing, output roles into a logical GUI architecture.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Model=== &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The model is the part of the component that encapsulates the application&#039;s data. It will often provide routines to manage and manipulate this data in a meaningful way in addition to routines that retrieve the data from the model. In general, the underlying data access technique should be encapsulated in the model. In this way, if an application is to be moved from a system that utilizes a flat file to store its information to a system that uses a database, the model is the only element that needs to be changed, not the view or the controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===View=== &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
The view is the part of the component that is used to render the data from the model in a manner that is suitable for interaction. For a web-based application, the view would generally be an HTML page that is returned to the user. The view pulls data from the model (which is passed to it from the controller) and feeds the data into a template which is populated and presented to the user. The view does not cause the data to be modified in any way, it only displays the data received from the model.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Controller=== &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
The controller is responsible for responding to user actions. In the case of a web application, a user action is generally a page request. The controller will determine what request is being made by the user and respond appropriately by triggering the model to manipulate the data appropriately and passing the model into the view. The controller does not display the data in the model, it only triggers methods in the model which modify the data, and then pass the model into the view which displays the data.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Joomla! Component Framework Explained == &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Model === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
In the Joomla framework, models are responsible for managing the data. The first function that has to be written for a model is a get function. It returns data to the caller. For this example, the caller will be the HelloWorldViewHelloWorld view. By default, the model named HelloWorldModelHelloWorld residing in site/models/helloworld.php is the main model associated to this view.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
So let&#039;s have a quick look at the naming conventions with an example, since the naming convention are the actual magic that make everything work:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; resides in &#039;&#039;site/views/&#039;&#039;&#039;helloworld&#039;&#039;&#039;/view.html.php&#039;&#039; and will make use of the class &#039;&#039;HelloWorldModel&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;helloworld&#039;&#039;&#039;.php&#039;&#039;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
Let&#039;s just assume we want to use an imaginary view &#039;&#039;fluffy&#039;&#039;, you would have to have:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; which resides in &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/view.html.php&#039;&#039;. The view will make use of &#039;&#039;HelloWorldModel&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;fluffy&#039;&#039;&#039;.php&#039;&#039;. Note: the actual screen of the view: &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/tmpl/default.php&#039;&#039; is required as well to make this example work.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Breaking any of these bold conventions will lead to errors or a blank page.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Accessing a Joomlaǃ Component== &amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
First we need to access the Joomla! platform, which is always accessed through a single point of entry. Using your preferred web browser, navigate to the following URL:&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
You can use the URL of the component, or a [[#Menu| Menu]] in order to navigate to the component. In this article we will discuss using the URL.&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php?option=com_helloworld&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==MVC Basic Directory Structure== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Components are stored in a directory within your Joomla! installation, specifically at:&lt;br /&gt;
*&amp;lt;tt&amp;gt;htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_&amp;lt;component_name&amp;gt;/&amp;lt;/tt&amp;gt; .&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
The Hello World! component would be stored in &amp;lt;tt&amp;gt; htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_helloworld/&amp;lt;/tt&amp;gt;.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
A basic component will contain the following files within its directoryː&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
*An HTML file that is just a security file with a background colorː &amp;lt;tt&amp;gt;index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
*A PHP file that represents the controller itselfː &amp;lt;tt&amp;gt;controller.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
*A PHP file that loads the controller classː &amp;lt;tt&amp;gt;&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
*A PHP file that represents the model itselfː &amp;lt;tt&amp;gt;models/&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;models/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
*A PHP file containing the default viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
*An XML file for adding a menu item typeː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.xml&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
*A PHP file for displaying the viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/view.html.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==JEXEC== &amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The following line is commonly found at the start of Joomla! PHP files:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    defined(&#039;_JEXEC&#039;) or die(&#039;Restricted Access&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
This enables a secure entry point into the Joomla! platform. [[S:MyLanguage/JEXEC| JEXEC]] contains a detailed explanation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Tutorials on Designing a MVC Component== &amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
To learn how to design your own MVC Component, please complete the tutorial for your Joomla! version.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J1.5:Developing_a_MVC_Component/Introduction| Joomla! 1.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J2.5:Developing_a_MVC_Component| Joomla! 2.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J3.x:Developing_an_MVC_Component/Introduction| Joomla! 3.x]]&lt;br /&gt;
* [[S:MyLanguage/J4.x:Developing_an_MVC_Component| Joomla! 4.x]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
[[Category:Explanations{{#translation:}}]]&lt;br /&gt;
[[Category:Component Development{{#translation:}}]]&lt;br /&gt;
[[Category:Beginner Development{{#translation:}}]]&lt;br /&gt;
[[Category:Development Recommended Reading{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924781</id>
		<title>Absolute Basics of How a Component Functions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Absolute_Basics_of_How_a_Component_Functions&amp;diff=924781"/>
		<updated>2022-06-22T09:15:32Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Try fixing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This article is designed for Joomlaǃ beginners; it is designed to explain what a Joomlaǃ component is and how it functions. When a specific component example will benefit the tutorial, this article will refer to an example component named Hello Worldǃ.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==What is a Joomlaǃ Component== &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Chunk:Component/&amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
en&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
In the Joomla! framework, components can be designed using a flat model (returns HTML code for the requested page) or Model-View-Controller (herein referred to as MVC) pattern.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Introduction to MVC== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
MVC is a software design pattern that can be used to organize code in such a way that the business logic and data presentation are separate. The premise behind this approach is that if the business logic is grouped into one section, then the interface and user interaction that surrounds the data can be revised and customized without having to reprogram the business logic. MVC was originally developed to map the traditional input, processing, output roles into a logical GUI architecture.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Model=== &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The model is the part of the component that encapsulates the application&#039;s data. It will often provide routines to manage and manipulate this data in a meaningful way in addition to routines that retrieve the data from the model. In general, the underlying data access technique should be encapsulated in the model. In this way, if an application is to be moved from a system that utilizes a flat file to store its information to a system that uses a database, the model is the only element that needs to be changed, not the view or the controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===View=== &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
The view is the part of the component that is used to render the data from the model in a manner that is suitable for interaction. For a web-based application, the view would generally be an HTML page that is returned to the user. The view pulls data from the model (which is passed to it from the controller) and feeds the data into a template which is populated and presented to the user. The view does not cause the data to be modified in any way, it only displays the data received from the model.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===Controller=== &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
The controller is responsible for responding to user actions. In the case of a web application, a user action is generally a page request. The controller will determine what request is being made by the user and respond appropriately by triggering the model to manipulate the data appropriately and passing the model into the view. The controller does not display the data in the model, it only triggers methods in the model which modify the data, and then pass the model into the view which displays the data.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Joomla! Component Framework Explained == &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Model === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
In the Joomla framework, models are responsible for managing the data. The first function that has to be written for a model is a get function. It returns data to the caller. For this example, the caller will be the HelloWorldViewHelloWorld view. By default, the model named HelloWorldModelHelloWorld residing in site/models/helloworld.php is the main model associated to this view.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
So let&#039;s have a quick look at the naming conventions with an example, since the naming convention are the actual magic that make everything work:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; resides in &#039;&#039;site/views/&#039;&#039;&#039;helloworld&#039;&#039;&#039;/view.html.php&#039;&#039; and will make use of the class &#039;&#039;HelloWorldModel&#039;&#039;&#039;HelloWorld&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;helloworld&#039;&#039;&#039;.php&#039;&#039;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
Let&#039;s just assume we want to use an imaginary view &#039;&#039;fluffy&#039;&#039;, you would have to have:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
The class &#039;&#039;HelloWorldView&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; which resides in &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/view.html.php&#039;&#039;. The view will make use of &#039;&#039;HelloWorldModel&#039;&#039;&#039;Fluffy&#039;&#039;&#039;&#039;&#039; in the file &#039;&#039;site/models/&#039;&#039;&#039;fluffy&#039;&#039;&#039;.php&#039;&#039;. Note: the actual screen of the view: &#039;&#039;site/views/&#039;&#039;&#039;fluffy&#039;&#039;&#039;/tmpl/default.php&#039;&#039; is required as well to make this example work.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
Breaking any of these bold conventions will lead to errors or a blank page.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Accessing a Joomlaǃ Component== &amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
First we need to access the Joomla! platform, which is always accessed through a single point of entry. Using your preferred web browser, navigate to the following URL:&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
You can use the URL of the component, or a [[#Menu| Menu]] in order to navigate to the component. In this article we will discuss using the URL.&amp;lt;/translate&amp;gt;&lt;br /&gt;
{| border=1&lt;br /&gt;
 | 1&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
user access&amp;lt;/translate&amp;gt;&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 2&lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
administrator access&amp;lt;/translate&amp;gt; &lt;br /&gt;
 | &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;yoursite&amp;gt;/joomla/administrator/index.php?option=com_&amp;lt;component_name&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
Hello World! example:&amp;lt;/translate&amp;gt; &amp;lt;tt&amp;gt;localhost/joomla/index.php?option=com_helloworld&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==MVC Basic Directory Structure== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
Components are stored in a directory within your Joomla! installation, specifically at:&lt;br /&gt;
*&amp;lt;tt&amp;gt;htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_&amp;lt;component_name&amp;gt;/&amp;lt;/tt&amp;gt; .&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
The Hello World! component would be stored in &amp;lt;tt&amp;gt; htdocs/&amp;lt;path_to_joomla&amp;gt;/components/com_helloworld/&amp;lt;/tt&amp;gt;.&amp;lt;/translate&amp;gt; &lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
A basic component will contain the following files within its directoryː&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
*An HTML file that is just a security file with a background colorː &amp;lt;tt&amp;gt;index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
*A PHP file that represents the controller itselfː &amp;lt;tt&amp;gt;controller.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
*A PHP file that loads the controller classː &amp;lt;tt&amp;gt;&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
*A PHP file that represents the model itselfː &amp;lt;tt&amp;gt;models/&amp;lt;component_name&amp;gt;.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;models/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
*A PHP file containing the default viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
*An XML file for adding a menu item typeː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/default.xml&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/tmpl/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
*Another HTML file for background controlː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/index.html&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
*A PHP file for displaying the viewː &amp;lt;tt&amp;gt;views/&amp;lt;component_name&amp;gt;/view.html.php&amp;lt;/tt&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==JEXEC== &amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The following line is commonly found at the start of Joomla! PHP files:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt; syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    defined(&#039;_JEXEC&#039;) or die(&#039;Restricted Access&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
This enables a secure entry point into the Joomla! platform. [[S:MyLanguage/JEXEC| JEXEC]] contains a detailed explanation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Tutorials on Designing a MVC Component== &amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
To learn how to design your own MVC Component, please complete the tutorial for your Joomla! version.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J1.5:Developing_a_MVC_Component/Introduction| Joomla! 1.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J2.5:Developing_a_MVC_Component| Joomla! 2.5]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
* [[S:MyLanguage/J3.x:Developing_an_MVC_Component/Introduction| Joomla! 3.x]]&lt;br /&gt;
* [[S:MyLanguage/J4.x:Developing_an_MVC_Component| Joomla! 4.x]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
[[Category:Explanations{{#translation:}}]]&lt;br /&gt;
[[Category:Component Development{{#translation:}}]]&lt;br /&gt;
[[Category:Beginner Development{{#translation:}}]]&lt;br /&gt;
[[Category:Development Recommended Reading{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-HotCat.js&amp;diff=888298</id>
		<title>MediaWiki:Gadget-HotCat.js</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-HotCat.js&amp;diff=888298"/>
		<updated>2022-03-06T01:10:07Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: New version for new wiki version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
HotCat V2.43&lt;br /&gt;
&lt;br /&gt;
Ajax-based simple Category manager. Allows adding/removing/changing categories on a page view.&lt;br /&gt;
Supports multiple category changes, as well as redirect and disambiguation resolution. Also&lt;br /&gt;
plugs into the upload form. Search engines to use for the suggestion list are configurable, and&lt;br /&gt;
can be selected interactively.&lt;br /&gt;
&lt;br /&gt;
Documentation: https://commons.wikimedia.org/wiki/Help:Gadget-HotCat&lt;br /&gt;
List of main authors: https://commons.wikimedia.org/wiki/Help:Gadget-HotCat/Version_history&lt;br /&gt;
&lt;br /&gt;
License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
&lt;br /&gt;
Choose whichever license of these you like best :-)&lt;br /&gt;
&lt;br /&gt;
This code should run on any MediaWiki installation &amp;gt;= MW 1.27.&lt;br /&gt;
&lt;br /&gt;
For use with older versions of MediaWiki, use the archived versions below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;=1.26: https://commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;oldid=211134664&lt;br /&gt;
*/&lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* eslint-disable vars-on-top, one-var, camelcase, no-alert, curly */&lt;br /&gt;
/* global jQuery, mediaWiki, UFUI, JSconfig, UploadForm */&lt;br /&gt;
/* jslint strict:false, nonew:false, bitwise:true */&lt;br /&gt;
( function ( $, mw ) {&lt;br /&gt;
	// Don&#039;t use mw.config.get() as that takes a copy of the config, and so doesn&#039;t&lt;br /&gt;
	// account for values changing, e.g. wgCurRevisionId after a VE edit&lt;br /&gt;
	var&lt;br /&gt;
        conf = $.extend( {}, mw.config.values, {&lt;br /&gt;
            // when running on mobile domain - do not use wgServer.&lt;br /&gt;
            wgServer: window.location.host.indexOf(&#039;.m.&#039;) &amp;gt; -1 ?&lt;br /&gt;
                &#039;//&#039; + window.location.host : mw.config.get( &#039;wgServer&#039; )&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
	// Guard against double inclusions (in old IE/Opera element ids become window properties)&lt;br /&gt;
	if ( ( window.HotCat &amp;amp;&amp;amp; !window.HotCat.nodeName ) ||&lt;br /&gt;
		conf.wgAction === &#039;edit&#039; ) // Not on edit mode&lt;br /&gt;
		return;&lt;br /&gt;
&lt;br /&gt;
	// Configuration stuff.&lt;br /&gt;
	var HC = window.HotCat = {&lt;br /&gt;
		// Localize these messages to the main language of your wiki.&lt;br /&gt;
		messages: {&lt;br /&gt;
			cat_removed: &#039;removed [[Category:$1]]&#039;,&lt;br /&gt;
			template_removed: &#039;removed {{[[Category:$1]]}}&#039;,&lt;br /&gt;
			cat_added: &#039;added [[Category:$1]]&#039;,&lt;br /&gt;
			cat_keychange: &#039;new key for [[Category:$1]]: &amp;quot;$2&amp;quot;&#039;, // $2 is the new key&lt;br /&gt;
			cat_notFound: &#039;Category &amp;quot;$1&amp;quot; not found&#039;,&lt;br /&gt;
			cat_exists: &#039;Category &amp;quot;$1&amp;quot; already exists; not added.&#039;,&lt;br /&gt;
			cat_resolved: &#039; (redirect [[Category:$1]] resolved)&#039;,&lt;br /&gt;
			uncat_removed: &#039;removed {{uncategorized}}&#039;,&lt;br /&gt;
			separator: &#039;; &#039;,&lt;br /&gt;
			// Some text to prefix to the edit summary.&lt;br /&gt;
			prefix: &#039;&#039;,&lt;br /&gt;
			// Some text to append to the edit summary. Named &#039;using&#039; for historical reasons. If you prefer&lt;br /&gt;
			// to have a marker at the front, use prefix and set this to the empty string.&lt;br /&gt;
			using: &#039; using [[Help:Gadget-HotCat|HotCat]]&#039;,&lt;br /&gt;
			// $1 is replaced by a number. If your language has several plural forms (c.f. [[:en:Dual (grammatical form)]]),&lt;br /&gt;
			// you can set this to an array of strings suitable for passing to mw.language.configPlural().&lt;br /&gt;
			// If that function doesn&#039;t exist, HotCat will simply fall back to using the last&lt;br /&gt;
			// entry in the array.&lt;br /&gt;
			multi_change: &#039;$1 categories&#039;,&lt;br /&gt;
			// Button text. Localize to wgContentLanguage here; localize to wgUserLanguage in a subpage,&lt;br /&gt;
			// see localization hook below.&lt;br /&gt;
			commit: &#039;Save&#039;,&lt;br /&gt;
			// Button text. Localize to wgContentLanguage here; localize to wgUserLanguage in a subpage,&lt;br /&gt;
			// see localization hook below.&lt;br /&gt;
			ok: &#039;OK&#039;,&lt;br /&gt;
			// Button text. Localize to wgContentLanguage here; localize to wgUserLanguage in a subpage,&lt;br /&gt;
			// see localization hook below.&lt;br /&gt;
			cancel: &#039;Cancel&#039;,&lt;br /&gt;
			// Localize to wgContentLanguage here; localize to wgUserLanguage in a subpage,&lt;br /&gt;
			// see localization hook below.&lt;br /&gt;
			multi_error: &#039;Could not retrieve the page text from the server. Therefore, your category changes &#039; +&lt;br /&gt;
			&#039;cannot be saved. We apologize for the inconvenience.&#039;,&lt;br /&gt;
			// Defaults to &#039;[[&#039; + category_canonical + &#039;:$1]]&#039;. Can be overridden if in the short edit summaries&lt;br /&gt;
			// not the standard category name should be used but, say, a shorter namespace alias. $1 is replaced&lt;br /&gt;
			// by a category name.&lt;br /&gt;
			short_catchange: null&lt;br /&gt;
		},&lt;br /&gt;
		// Plural of category_canonical.&lt;br /&gt;
		categories: &#039;Categories&#039;,&lt;br /&gt;
		// Any category in this category is deemed a disambiguation category; i.e., a category that should not contain&lt;br /&gt;
		// any items, but that contains links to other categories where stuff should be categorized. If you don&#039;t have&lt;br /&gt;
		// that concept on your wiki, set it to null. Use blanks, not underscores.&lt;br /&gt;
		disambig_category: &#039;Disambiguation&#039;,&lt;br /&gt;
		// Any category in this category is deemed a (soft) redirect to some other category defined by a link&lt;br /&gt;
		// to another non-blacklisted category. If your wiki doesn&#039;t have soft category redirects, set this to null.&lt;br /&gt;
		// If a soft-redirected category contains more than one link to another non-blacklisted category, it&#039;s considered&lt;br /&gt;
		// a disambiguation category instead.&lt;br /&gt;
		redir_category: &#039;Category redirects&#039;,&lt;br /&gt;
		// The little modification links displayed after category names. U+2212 is a minus sign; U+2193 and U+2191 are&lt;br /&gt;
		// downward and upward pointing arrows. Do not use ↓ and ↑ in the code!&lt;br /&gt;
		links: {&lt;br /&gt;
			change: &#039;(±)&#039;,&lt;br /&gt;
			remove: &#039;(\u2212)&#039;,&lt;br /&gt;
			add: &#039;(+)&#039;,&lt;br /&gt;
			restore: &#039;(×)&#039;,&lt;br /&gt;
			undo: &#039;(×)&#039;,&lt;br /&gt;
			down: &#039;(\u2193)&#039;,&lt;br /&gt;
			up: &#039;(\u2191)&#039;&lt;br /&gt;
		},&lt;br /&gt;
		changeTag: conf.wgUserName ? &#039;HotCat&#039; : &#039;&#039;, // if tag is missing, edit is rejected&lt;br /&gt;
		// The tooltips for the above links&lt;br /&gt;
		tooltips: {&lt;br /&gt;
			change: &#039;Modify&#039;,&lt;br /&gt;
			remove: &#039;Remove&#039;,&lt;br /&gt;
			add: &#039;Add a new category&#039;,&lt;br /&gt;
			restore: &#039;Undo changes&#039;,&lt;br /&gt;
			undo: &#039;Undo changes&#039;,&lt;br /&gt;
			down: &#039;Open for modifying and display subcategories&#039;,&lt;br /&gt;
			up: &#039;Open for modifying and display parent categories&#039;&lt;br /&gt;
		},&lt;br /&gt;
		// The HTML content of the &amp;quot;enter multi-mode&amp;quot; link at the front.&lt;br /&gt;
		addmulti: &#039;&amp;lt;span&amp;gt;+&amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		// Tooltip for the &amp;quot;enter multi-mode&amp;quot; link&lt;br /&gt;
		multi_tooltip: &#039;Modify several categories&#039;,&lt;br /&gt;
		// Return true to disable HotCat.&lt;br /&gt;
		disable: function () {&lt;br /&gt;
			var ns = conf.wgNamespaceNumber;&lt;br /&gt;
			var nsIds = conf.wgNamespaceIds;&lt;br /&gt;
			return (&lt;br /&gt;
				ns &amp;lt; 0 || // Special pages; Special:Upload is handled differently&lt;br /&gt;
			ns === 10 || // Templates&lt;br /&gt;
			ns === 828 || // Module (Lua)&lt;br /&gt;
			ns === 8 || // MediaWiki&lt;br /&gt;
			ns === 6 &amp;amp;&amp;amp; !conf.wgArticleId || // Non-existing file pages&lt;br /&gt;
			ns === 2 &amp;amp;&amp;amp; /\.(js|css)$/.test( conf.wgTitle ) || // User scripts&lt;br /&gt;
			nsIds &amp;amp;&amp;amp;&lt;br /&gt;
			( ns === nsIds.creator ||&lt;br /&gt;
			ns === nsIds.timedtext ||&lt;br /&gt;
			ns === nsIds.institution ) );&lt;br /&gt;
		},&lt;br /&gt;
		// A regexp matching a templates used to mark uncategorized pages, if your wiki does have that.&lt;br /&gt;
		// If not, set it to null.&lt;br /&gt;
		uncat_regexp: /\{\{\s*[Uu]ncategorized\s*[^}]*\}\}\s*(&amp;lt;!--.*?--&amp;gt;\s*)?/g,&lt;br /&gt;
		// The images used for the little indication icon. Should not need changing.&lt;br /&gt;
		existsYes: &#039;//upload.wikimedia.org/wikipedia/commons/thumb/b/be/P_yes.svg/20px-P_yes.svg.png&#039;,&lt;br /&gt;
		existsNo: &#039;//upload.wikimedia.org/wikipedia/commons/thumb/4/42/P_no.svg/20px-P_no.svg.png&#039;,&lt;br /&gt;
		// a list of categories which can be removed by removing a template&lt;br /&gt;
		// key: the category without namespace&lt;br /&gt;
		// value: A regexp matching the template name, again without namespace&lt;br /&gt;
		// If you don&#039;t have this at your wiki, or don&#039;t want this, set it to an empty object {}.&lt;br /&gt;
		template_categories: {},&lt;br /&gt;
		// Names for the search engines&lt;br /&gt;
		engine_names: {&lt;br /&gt;
			searchindex: &#039;Search index&#039;,&lt;br /&gt;
			pagelist: &#039;Page list&#039;,&lt;br /&gt;
			combined: &#039;Combined search&#039;,&lt;br /&gt;
			subcat: &#039;Subcategories&#039;,&lt;br /&gt;
			parentcat: &#039;Parent categories&#039;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// Override the decision of whether HotCat should help users by automatically&lt;br /&gt;
		// capitalising the title in the user input text if the wiki has case-sensitive page names.&lt;br /&gt;
		// Basically, this will make an API query to check the MediaWiki configuration and HotCat then sets&lt;br /&gt;
		// this to true for most wikis, and to false on Wiktionary.&lt;br /&gt;
		// &lt;br /&gt;
		// You can set this directly if there is a problem with it. For example, Georgian Wikipedia (kawiki),&lt;br /&gt;
		// is known to have different capitalisation logic between MediaWiki PHP and JavaScript. As such, automatic&lt;br /&gt;
		// case changes in JavaScript by HotCat would be wrong.&lt;br /&gt;
		capitalizePageNames: null,&lt;br /&gt;
		// If upload_disabled is true, HotCat will not be used on the Upload form.&lt;br /&gt;
		upload_disabled: false,&lt;br /&gt;
		// Single regular expression matching blacklisted categories that cannot be changed or&lt;br /&gt;
		// added using HotCat. For instance /\bstubs?$/ (any category ending with the word &amp;quot;stub&amp;quot;&lt;br /&gt;
		// or &amp;quot;stubs&amp;quot;), or /(\bstubs?$)|\bmaintenance\b/ (stub categories and any category with the&lt;br /&gt;
		// word &amp;quot;maintenance&amp;quot; in its title.&lt;br /&gt;
		blacklist: null,&lt;br /&gt;
&lt;br /&gt;
		// Stuff changeable by users:&lt;br /&gt;
		// Background for changed categories in multi-edit mode. Default is a very light salmon pink.&lt;br /&gt;
		bg_changed: &#039;#FCA&#039;,&lt;br /&gt;
		// If true, HotCat will never automatically submit changes. HotCat will only open an edit page with&lt;br /&gt;
		// the changes; users must always save explicitly.&lt;br /&gt;
		no_autocommit: false,&lt;br /&gt;
		// If true, the &amp;quot;category deletion&amp;quot; link &amp;quot;(-)&amp;quot; will never save automatically but always show an&lt;br /&gt;
		// edit page where the user has to save the edit manually. Is false by default because that&#039;s the&lt;br /&gt;
		// traditional behavior. This setting overrides no_autocommit for &amp;quot;(-)&amp;quot; links.&lt;br /&gt;
		del_needs_diff: false,&lt;br /&gt;
		// Time, in milliseconds, that HotCat waits after a keystroke before making a request to the&lt;br /&gt;
		// server to get suggestions.&lt;br /&gt;
		suggest_delay: 100,&lt;br /&gt;
		// Default width, in characters, of the text input field.&lt;br /&gt;
		editbox_width: 40,&lt;br /&gt;
		// One of the engine_names above, to be used as the default suggestion engine.&lt;br /&gt;
		suggestions: &#039;combined&#039;,&lt;br /&gt;
		// If true, always use the default engine, and never display a selector.&lt;br /&gt;
		fixed_search: false,&lt;br /&gt;
		// If false, do not display the &amp;quot;up&amp;quot; and &amp;quot;down&amp;quot; links&lt;br /&gt;
		use_up_down: true,&lt;br /&gt;
		// Default list size&lt;br /&gt;
		listSize: 10,&lt;br /&gt;
		// If true, single category changes are marked as minor edits. If false, they&#039;re not.&lt;br /&gt;
		single_minor: true,&lt;br /&gt;
		// If true, never add a page to the user&#039;s watchlist. If false, pages get added to the watchlist if&lt;br /&gt;
		// the user has the &amp;quot;Add pages I edit to my watchlist&amp;quot; or the &amp;quot;Add pages I create to my watchlist&amp;quot;&lt;br /&gt;
		// options in his or her preferences set.&lt;br /&gt;
		dont_add_to_watchlist: false,&lt;br /&gt;
		shortcuts: null,&lt;br /&gt;
		addShortcuts: function ( map ) {&lt;br /&gt;
			if ( !map ) return;&lt;br /&gt;
			window.HotCat.shortcuts = window.HotCat.shortcuts || {};&lt;br /&gt;
			for ( var k in map ) {&lt;br /&gt;
				if ( !map.hasOwnProperty( k ) || typeof k !== &#039;string&#039; ) continue;&lt;br /&gt;
&lt;br /&gt;
				var v = map[ k ];&lt;br /&gt;
				if ( typeof v !== &#039;string&#039; ) continue;&lt;br /&gt;
&lt;br /&gt;
				k = k.replace( /^\s+|\s+$/g, &#039;&#039; );&lt;br /&gt;
				v = v.replace( /^\s+|\s+$/g, &#039;&#039; );&lt;br /&gt;
				if ( !k.length || !v.length ) continue;&lt;br /&gt;
&lt;br /&gt;
				window.HotCat.shortcuts[ k ] = v;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// More backwards compatibility. We have a few places where we test for the browser: once for&lt;br /&gt;
	// Safari &amp;lt; 3.0, and twice for WebKit (Chrome or Safari, any versions)&lt;br /&gt;
	var ua = navigator.userAgent.toLowerCase();&lt;br /&gt;
	var is_webkit = /applewebkit\/\d+/.test( ua ) &amp;amp;&amp;amp; ua.indexOf( &#039;spoofer&#039; ) &amp;lt; 0;&lt;br /&gt;
	var cat_prefix = null;&lt;br /&gt;
	var noSuggestions = false;&lt;br /&gt;
&lt;br /&gt;
	function LoadTrigger( needed ) {&lt;br /&gt;
		// Define methods in a closure so that self reference is available,&lt;br /&gt;
		// also allows method calls to be detached.&lt;br /&gt;
		var self = this;&lt;br /&gt;
		self.queue = [];&lt;br /&gt;
		self.needed = needed;&lt;br /&gt;
		self.register = function ( callback ) {&lt;br /&gt;
			if ( self.needed &amp;lt;= 0 ) callback(); // Execute directly&lt;br /&gt;
			else self.queue.push( callback );&lt;br /&gt;
		};&lt;br /&gt;
		self.loaded = function () {&lt;br /&gt;
			self.needed--;&lt;br /&gt;
			if ( self.needed === 0 ) {&lt;br /&gt;
				// Run queued callbacks once&lt;br /&gt;
				for ( var i = 0; i &amp;lt; self.queue.length; i++ ) self.queue[ i ]();&lt;br /&gt;
				self.queue = [];&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Used to delay running the HotCat setup until /local_defaults and localizations have been loaded.&lt;br /&gt;
	var loadTrigger = new LoadTrigger( 2 );&lt;br /&gt;
&lt;br /&gt;
	function load( uri, callback ) {&lt;br /&gt;
		var s = document.createElement( &#039;script&#039; );&lt;br /&gt;
		s.src = uri;&lt;br /&gt;
		var called = false;&lt;br /&gt;
&lt;br /&gt;
		s.onload = s.onerror = function () {&lt;br /&gt;
			if ( !called &amp;amp;&amp;amp; callback ) {&lt;br /&gt;
				called = true;&lt;br /&gt;
				callback();&lt;br /&gt;
			}&lt;br /&gt;
			if ( s.parentNode ) {&lt;br /&gt;
				s.parentNode.removeChild( s );&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		document.head.appendChild( s );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadJS( page, callback ) {&lt;br /&gt;
		load( conf.wgServer + conf.wgScript + &#039;?title=&#039; + encodeURIComponent( page ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039;, callback );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadURI( href, callback ) {&lt;br /&gt;
		var url = href;&lt;br /&gt;
		if ( url.substring( 0, 2 ) === &#039;//&#039; ) url = window.location.protocol + url; else if ( url.substring( 0, 1 ) === &#039;/&#039; ) url = conf.wgServer + url;&lt;br /&gt;
&lt;br /&gt;
		load( url, callback );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Load local configurations, overriding the pre-set default values in the HotCat object above. This is always loaded&lt;br /&gt;
	// from the wiki where this script is executing, even if this script itself is hotlinked from Commons. This can&lt;br /&gt;
	// be used to change the default settings, or to provide localized interface texts for edit summaries and so on.&lt;br /&gt;
	loadJS( &#039;MediaWiki:Gadget-HotCat.js/local_defaults&#039;, loadTrigger.loaded );&lt;br /&gt;
&lt;br /&gt;
	// Load localized UI texts. These are the texts that HotCat displays on the page itself. Texts shown in edit summaries&lt;br /&gt;
	// should be localized in /local_defaults above.&lt;br /&gt;
	if ( conf.wgUserLanguage !== &#039;en&#039; ) {&lt;br /&gt;
		// Lupo: somebody thought it would be a good idea to add this. So the default is true, and you have to set it to false&lt;br /&gt;
		// explicitly if you&#039;re not on Commons and don&#039;t want that.&lt;br /&gt;
		if ( window.hotcat_translations_from_commons === undefined ) window.hotcat_translations_from_commons = true;&lt;br /&gt;
&lt;br /&gt;
		// Localization hook to localize HotCat messages, tooltips, and engine names for wgUserLanguage.&lt;br /&gt;
		if ( window.hotcat_translations_from_commons &amp;amp;&amp;amp; conf.wgServer.indexOf( &#039;//commons&#039; ) &amp;lt; 0 ) {&lt;br /&gt;
			loadURI( &#039;//commons.wikimedia.org/w/index.php?title=&#039; +&lt;br /&gt;
		&#039;MediaWiki:Gadget-HotCat.js/&#039; + conf.wgUserLanguage +&lt;br /&gt;
		&#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039;, loadTrigger.loaded );&lt;br /&gt;
		} else {&lt;br /&gt;
			// Load translations locally&lt;br /&gt;
			loadJS( &#039;MediaWiki:Gadget-HotCat.js/&#039; + conf.wgUserLanguage, loadTrigger.loaded );&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		loadTrigger.loaded();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// No further changes should be necessary here.&lt;br /&gt;
&lt;br /&gt;
	// The following regular expression strings are used when searching for categories in wikitext.&lt;br /&gt;
	var wikiTextBlank = &#039;[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]+&#039;;&lt;br /&gt;
	var wikiTextBlankRE = new RegExp( wikiTextBlank, &#039;g&#039; );&lt;br /&gt;
	// Regexp for handling blanks inside a category title or namespace name.&lt;br /&gt;
	// See http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/Title.php?revision=104051&amp;amp;view=markup#l2722&lt;br /&gt;
	// See also http://www.fileformat.info/info/unicode/category/Zs/list.htm&lt;br /&gt;
	//   MediaWiki collapses several contiguous blanks inside a page title to one single blank. It also replace a&lt;br /&gt;
	// number of special whitespace characters by simple blanks. And finally, blanks are treated as underscores.&lt;br /&gt;
	// Therefore, when looking for page titles in wikitext, we must handle all these cases.&lt;br /&gt;
	//   Note: we _do_ include the horizontal tab in the above list, even though the MediaWiki software for some reason&lt;br /&gt;
	// appears to not handle it. The zero-width space \u200B is _not_ handled as a space inside titles by MW.&lt;br /&gt;
	var wikiTextBlankOrBidi = &#039;[\\t _\\xA0\\u1680\\u180E\\u2000-\\u200B\\u200E\\u200F\\u2028-\\u202F\\u205F\\u3000]*&#039;;&lt;br /&gt;
	// Whitespace regexp for handling whitespace between link components. Including the horizontal tab, but not \n\r\f\v:&lt;br /&gt;
	// a link must be on one single line.&lt;br /&gt;
	//   MediaWiki also removes Unicode bidi override characters in page titles (and namespace names) completely.&lt;br /&gt;
	// This is *not* handled, as it would require us to allow any of [\u200E\u200F\u202A-\u202E] between any two&lt;br /&gt;
	// characters inside a category link. It _could_ be done though... We _do_ handle strange spaces, including the&lt;br /&gt;
	// zero-width space \u200B, and bidi overrides between the components of a category link (adjacent to the colon,&lt;br /&gt;
	// or adjacent to and inside of &amp;quot;[[&amp;quot; and &amp;quot;]]&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
	// First auto-localize the regexps for the category and the template namespaces.&lt;br /&gt;
	var formattedNamespaces = conf.wgFormattedNamespaces;&lt;br /&gt;
	var namespaceIds = conf.wgNamespaceIds;&lt;br /&gt;
	function autoLocalize( namespaceNumber, fallback ) {&lt;br /&gt;
		function createRegexpStr( name ) {&lt;br /&gt;
			if ( !name || !name.length ) return &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
			var regex_name = &#039;&#039;;&lt;br /&gt;
			for ( var i = 0; i &amp;lt; name.length; i++ ) {&lt;br /&gt;
				var initial = name.charAt( i ),&lt;br /&gt;
					ll = initial.toLowerCase(),&lt;br /&gt;
					ul = initial.toUpperCase();&lt;br /&gt;
				if ( ll === ul ) regex_name += initial; else regex_name += &#039;[&#039; + ll + ul + &#039;]&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			return regex_name&lt;br /&gt;
				.replace( /([\\^$.?*+()])/g, &#039;\\$1&#039; )&lt;br /&gt;
				.replace( wikiTextBlankRE, wikiTextBlank );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fallback = fallback.toLowerCase();&lt;br /&gt;
		var canonical = formattedNamespaces[ String( namespaceNumber ) ].toLowerCase();&lt;br /&gt;
		var regexp = createRegexpStr( canonical );&lt;br /&gt;
		if ( fallback &amp;amp;&amp;amp; canonical !== fallback ) regexp += &#039;|&#039; + createRegexpStr( fallback );&lt;br /&gt;
&lt;br /&gt;
		if ( namespaceIds ) {&lt;br /&gt;
			for ( var cat_name in namespaceIds ) {&lt;br /&gt;
				if (&lt;br /&gt;
					typeof cat_name === &#039;string&#039; &amp;amp;&amp;amp;&lt;br /&gt;
					cat_name.toLowerCase() !== canonical &amp;amp;&amp;amp;&lt;br /&gt;
					cat_name.toLowerCase() !== fallback &amp;amp;&amp;amp;&lt;br /&gt;
					namespaceIds[ cat_name ] === namespaceNumber&lt;br /&gt;
				) {&lt;br /&gt;
					regexp += &#039;|&#039; + createRegexpStr( cat_name );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return regexp;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	HC.category_canonical = formattedNamespaces[ &#039;14&#039; ];&lt;br /&gt;
	HC.category_regexp = autoLocalize( 14, &#039;category&#039; );&lt;br /&gt;
	if ( formattedNamespaces[ &#039;10&#039; ] ) HC.template_regexp = autoLocalize( 10, &#039;template&#039; );&lt;br /&gt;
&lt;br /&gt;
	// Utility functions. Yes, this duplicates some functionality that also exists in other places, but&lt;br /&gt;
	// to keep this whole stuff in a single file not depending on any other on-wiki JavaScripts, we re-do&lt;br /&gt;
	// these few operations here.&lt;br /&gt;
	function make( arg, literal ) {&lt;br /&gt;
		if ( !arg ) return null;&lt;br /&gt;
&lt;br /&gt;
		return literal ? document.createTextNode( arg ) : document.createElement( arg );&lt;br /&gt;
	}&lt;br /&gt;
	function param( name, uri ) {&lt;br /&gt;
		uri = uri || document.location.href;&lt;br /&gt;
		var re = new RegExp( &#039;[&amp;amp;?]&#039; + name + &#039;=([^&amp;amp;#]*)&#039; );&lt;br /&gt;
		var m = re.exec( uri );&lt;br /&gt;
		if ( m &amp;amp;&amp;amp; m.length &amp;gt; 1 ) return decodeURIComponent( m[ 1 ] );&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
	function title( href ) {&lt;br /&gt;
		if ( !href ) return null;&lt;br /&gt;
&lt;br /&gt;
		var script = conf.wgScript + &#039;?&#039;;&lt;br /&gt;
		if ( href.indexOf( script ) === 0 || href.indexOf( conf.wgServer + script ) === 0 || conf.wgServer.substring( 0, 2 ) === &#039;//&#039; &amp;amp;&amp;amp; href.indexOf( document.location.protocol + conf.wgServer + script ) === 0 ) {&lt;br /&gt;
			// href=&amp;quot;/w/index.php?title=...&amp;quot;&lt;br /&gt;
			return param( &#039;title&#039;, href );&lt;br /&gt;
		} else {&lt;br /&gt;
			// href=&amp;quot;/wiki/...&amp;quot;&lt;br /&gt;
			var prefix = conf.wgArticlePath.replace( &#039;$1&#039;, &#039;&#039; );&lt;br /&gt;
			if ( href.indexOf( prefix ) ) prefix = conf.wgServer + prefix; // Fully expanded URL?&lt;br /&gt;
&lt;br /&gt;
			if ( href.indexOf( prefix ) &amp;amp;&amp;amp; prefix.substring( 0, 2 ) === &#039;//&#039; ) prefix = document.location.protocol + prefix; // Protocol-relative wgServer?&lt;br /&gt;
&lt;br /&gt;
			if ( href.indexOf( prefix ) === 0 ) return decodeURIComponent( href.substring( prefix.length ) );&lt;br /&gt;
		}&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
	function hasClass( elem, name ) {&lt;br /&gt;
		return ( &#039; &#039; + elem.className + &#039; &#039; ).indexOf( &#039; &#039; + name + &#039; &#039; ) &amp;gt;= 0;&lt;br /&gt;
	}&lt;br /&gt;
	function capitalize( str ) {&lt;br /&gt;
		if ( !str || !str.length ) return str;&lt;br /&gt;
&lt;br /&gt;
		return str.substr( 0, 1 ).toUpperCase() + str.substr( 1 );&lt;br /&gt;
	}&lt;br /&gt;
	function wikiPagePath( pageName ) {&lt;br /&gt;
		// Note: do not simply use encodeURI, it doesn&#039;t encode &#039;&amp;amp;&#039;, which might break if wgArticlePath actually has the $1 in&lt;br /&gt;
		// a query parameter.&lt;br /&gt;
		return conf.wgArticlePath.replace( &#039;$1&#039;, encodeURIComponent( pageName ).replace( /%3A/g, &#039;:&#039; ).replace( /%2F/g, &#039;/&#039; ) );&lt;br /&gt;
	}&lt;br /&gt;
	function escapeRE( str ) {&lt;br /&gt;
		return str.replace( /([\\^$.?*+()[\]])/g, &#039;\\$1&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function substituteFactory( options ) {&lt;br /&gt;
		options = options || {};&lt;br /&gt;
		var lead = options.indicator || &#039;$&#039;;&lt;br /&gt;
		var indicator = escapeRE( lead );&lt;br /&gt;
		var lbrace = escapeRE( options.lbrace || &#039;{&#039; );&lt;br /&gt;
		var rbrace = escapeRE( options.rbrace || &#039;}&#039; );&lt;br /&gt;
		var re;&lt;br /&gt;
&lt;br /&gt;
		re = new RegExp(&lt;br /&gt;
			// $$&lt;br /&gt;
			&#039;(?:&#039; + indicator + &#039;(&#039; + indicator + &#039;))|&#039; +&lt;br /&gt;
			// $0, $1&lt;br /&gt;
			&#039;(?:&#039; + indicator + &#039;(\\d+))|&#039; +&lt;br /&gt;
			// ${key}&lt;br /&gt;
			&#039;(?:&#039; + indicator + &#039;(?:&#039; + lbrace + &#039;([^&#039; + lbrace + rbrace + &#039;]+)&#039; + rbrace + &#039;))|&#039; +&lt;br /&gt;
			// $key (only if first char after $ is not $, digit, or { )&lt;br /&gt;
			&#039;(?:&#039; + indicator + &#039;(?!(?:[&#039; + indicator + lbrace + &#039;]|\\d))(\\S+?)\\b)&#039;,&lt;br /&gt;
			&#039;g&#039;&lt;br /&gt;
		);&lt;br /&gt;
		// Replace $1, $2, or ${key1}, ${key2}, or $key1, $key2 by values from map. $$ is replaced by a single $.&lt;br /&gt;
		return function ( str, map ) {&lt;br /&gt;
			if ( !map ) return str;&lt;br /&gt;
&lt;br /&gt;
			return str.replace( re, function ( match, prefix, idx, key, alpha ) {&lt;br /&gt;
				if ( prefix === lead ) return lead;&lt;br /&gt;
&lt;br /&gt;
				var k = alpha || key || idx;&lt;br /&gt;
				var replacement = typeof map[ k ] === &#039;function&#039; ? map[ k ]( match, k ) : map[ k ];&lt;br /&gt;
				return typeof replacement === &#039;string&#039; ? replacement : ( replacement || match );&lt;br /&gt;
			} );&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var substitute = substituteFactory();&lt;br /&gt;
	var replaceShortcuts = ( function () {&lt;br /&gt;
		var replaceHash = substituteFactory( {&lt;br /&gt;
			indicator: &#039;#&#039;,&lt;br /&gt;
			lbrace: &#039;[&#039;,&lt;br /&gt;
			rbrace: &#039;]&#039;&lt;br /&gt;
		} );&lt;br /&gt;
		return function ( str, map ) {&lt;br /&gt;
			var s = replaceHash( str, map );&lt;br /&gt;
			return HC.capitalizePageNames ? capitalize( s ) : s;&lt;br /&gt;
		};&lt;br /&gt;
	}() );&lt;br /&gt;
&lt;br /&gt;
	// Text modification&lt;br /&gt;
&lt;br /&gt;
	var findCatsRE =&lt;br /&gt;
	new RegExp( &#039;\\[\\[&#039; + wikiTextBlankOrBidi + &#039;(?:&#039; + HC.category_regexp + &#039;)&#039; + wikiTextBlankOrBidi + &#039;:[^\\]]+\\]\\]&#039;, &#039;g&#039; );&lt;br /&gt;
&lt;br /&gt;
	function replaceByBlanks( match ) {&lt;br /&gt;
		return match.replace( /(\s|\S)/g, &#039; &#039; ); // /./ doesn&#039;t match linebreaks. /(\s|\S)/ does.&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function find_category( wikitext, category, once ) {&lt;br /&gt;
		var cat_regex = null;&lt;br /&gt;
		if ( HC.template_categories[ category ] ) {&lt;br /&gt;
			cat_regex = new RegExp(&lt;br /&gt;
				&#039;\\{\\{&#039; + wikiTextBlankOrBidi + &#039;(&#039; + HC.template_regexp + &#039;(?=&#039; + wikiTextBlankOrBidi + &#039;:))?&#039; + wikiTextBlankOrBidi +&lt;br /&gt;
				&#039;(?:&#039; + HC.template_categories[ category ] + &#039;)&#039; +&lt;br /&gt;
				wikiTextBlankOrBidi + &#039;(\\|.*?)?\\}\\}&#039;,&lt;br /&gt;
				&#039;g&#039;&lt;br /&gt;
			);&lt;br /&gt;
		} else {&lt;br /&gt;
			var cat_name = escapeRE( category );&lt;br /&gt;
			var initial = cat_name.substr( 0, 1 );&lt;br /&gt;
			cat_regex = new RegExp(&lt;br /&gt;
				&#039;\\[\\[&#039; + wikiTextBlankOrBidi + &#039;(&#039; + HC.category_regexp + &#039;)&#039; + wikiTextBlankOrBidi + &#039;:&#039; + wikiTextBlankOrBidi +&lt;br /&gt;
				( initial === &#039;\\&#039; || !HC.capitalizePageNames ?&lt;br /&gt;
					initial :&lt;br /&gt;
					&#039;[&#039; + initial.toUpperCase() + initial.toLowerCase() + &#039;]&#039; ) +&lt;br /&gt;
				cat_name.substring( 1 ).replace( wikiTextBlankRE, wikiTextBlank ) +&lt;br /&gt;
				wikiTextBlankOrBidi + &#039;(\\|.*?)?\\]\\]&#039;,&lt;br /&gt;
				&#039;g&#039;&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		if ( once ) return cat_regex.exec( wikitext );&lt;br /&gt;
&lt;br /&gt;
		var copiedtext = wikitext&lt;br /&gt;
			.replace( /&amp;lt;!--(\s|\S)*?--&amp;gt;/g, replaceByBlanks )&lt;br /&gt;
			.replace( /&amp;lt;nowiki&amp;gt;(\s|\S)*?&amp;lt;\/nowiki&amp;gt;/g, replaceByBlanks );&lt;br /&gt;
		var result = [];&lt;br /&gt;
		var curr_match = null;&lt;br /&gt;
		while ( ( curr_match = cat_regex.exec( copiedtext ) ) !== null ) {&lt;br /&gt;
			result.push( {&lt;br /&gt;
				match: curr_match&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
		result.re = cat_regex;&lt;br /&gt;
		return result; // An array containing all matches, with positions, in result[ i ].match&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var interlanguageRE = null;&lt;br /&gt;
&lt;br /&gt;
	function change_category( wikitext, toRemove, toAdd, key, is_hidden ) {&lt;br /&gt;
&lt;br /&gt;
		function find_insertionpoint( wikitext ) {&lt;br /&gt;
			var copiedtext = wikitext&lt;br /&gt;
				.replace( /&amp;lt;!--(\s|\S)*?--&amp;gt;/g, replaceByBlanks )&lt;br /&gt;
				.replace( /&amp;lt;nowiki&amp;gt;(\s|\S)*?&amp;lt;\/nowiki&amp;gt;/g, replaceByBlanks );&lt;br /&gt;
			// Search in copiedtext to avoid that we insert inside an HTML comment or a nowiki &amp;quot;element&amp;quot;.&lt;br /&gt;
			var index = -1;&lt;br /&gt;
			findCatsRE.lastIndex = 0;&lt;br /&gt;
			while ( findCatsRE.exec( copiedtext ) !== null ) index = findCatsRE.lastIndex;&lt;br /&gt;
&lt;br /&gt;
			if ( index &amp;lt; 0 ) {&lt;br /&gt;
				// Find the index of the first interlanguage link...&lt;br /&gt;
				var match = null;&lt;br /&gt;
				if ( !interlanguageRE ) {&lt;br /&gt;
				// Approximation without API: interlanguage links start with 2 to 3 lower case letters, optionally followed by&lt;br /&gt;
				// a sequence of groups consisting of a dash followed by one or more lower case letters. Exceptions are &amp;quot;simple&amp;quot;&lt;br /&gt;
				// and &amp;quot;tokipona&amp;quot;.&lt;br /&gt;
					match = /((^|\n\r?)(\[\[\s*(([a-z]{2,3}(-[a-z]+)*)|simple|tokipona)\s*:[^\]]+\]\]\s*))+$/.exec( copiedtext );&lt;br /&gt;
				} else {&lt;br /&gt;
					match = interlanguageRE.exec( copiedtext );&lt;br /&gt;
				}&lt;br /&gt;
				if ( match ) index = match.index;&lt;br /&gt;
&lt;br /&gt;
				return {&lt;br /&gt;
					idx: index,&lt;br /&gt;
					onCat: false&lt;br /&gt;
				};&lt;br /&gt;
			}&lt;br /&gt;
			return {&lt;br /&gt;
				idx: index,&lt;br /&gt;
				onCat: index &amp;gt;= 0&lt;br /&gt;
			};&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var summary = [],&lt;br /&gt;
			nameSpace = HC.category_canonical,&lt;br /&gt;
			cat_point = -1, // Position of removed category;&lt;br /&gt;
			keyChange = ( toRemove &amp;amp;&amp;amp; toAdd &amp;amp;&amp;amp; toRemove === toAdd &amp;amp;&amp;amp; toAdd.length ),&lt;br /&gt;
			matches;&lt;br /&gt;
		if ( key ) key = &#039;|&#039; + key;&lt;br /&gt;
		// Remove&lt;br /&gt;
		if ( toRemove &amp;amp;&amp;amp; toRemove.length ) {&lt;br /&gt;
			matches = find_category( wikitext, toRemove );&lt;br /&gt;
			if ( !matches || !matches.length ) {&lt;br /&gt;
				return {&lt;br /&gt;
					text: wikitext,&lt;br /&gt;
					summary: summary,&lt;br /&gt;
					error: HC.messages.cat_notFound.replace( /\$1/g, toRemove )&lt;br /&gt;
				};&lt;br /&gt;
			} else {&lt;br /&gt;
				var before = wikitext.substring( 0, matches[ 0 ].match.index ),&lt;br /&gt;
					after = wikitext.substring( matches[ 0 ].match.index + matches[ 0 ].match[ 0 ].length );&lt;br /&gt;
				if ( matches.length &amp;gt; 1 ) {&lt;br /&gt;
				// Remove all occurrences in after&lt;br /&gt;
					matches.re.lastIndex = 0;&lt;br /&gt;
					after = after.replace( matches.re, &#039;&#039; );&lt;br /&gt;
				}&lt;br /&gt;
				if ( toAdd ) {&lt;br /&gt;
					// nameSpace = matches[ 0 ].match[ 1 ] || nameSpace; Canonical namespace should be always preferred&lt;br /&gt;
					if ( key === null ) key = matches[ 0 ].match[ 2 ];&lt;br /&gt;
				// Remember the category key, if any.&lt;br /&gt;
				}&lt;br /&gt;
				// Remove whitespace (properly): strip whitespace, but only up to the next line feed.&lt;br /&gt;
				// If we then have two linefeeds in a row, remove one. Otherwise, if we have two non-&lt;br /&gt;
				// whitespace characters, insert a blank.&lt;br /&gt;
				var i = before.length - 1;&lt;br /&gt;
				while ( i &amp;gt;= 0 &amp;amp;&amp;amp; before.charAt( i ) !== &#039;\n&#039; &amp;amp;&amp;amp; before.substr( i, 1 ).search( /\s/ ) &amp;gt;= 0 ) i--;&lt;br /&gt;
&lt;br /&gt;
				var j = 0;&lt;br /&gt;
				while ( j &amp;lt; after.length &amp;amp;&amp;amp; after.charAt( j ) !== &#039;\n&#039; &amp;amp;&amp;amp; after.substr( j, 1 ).search( /\s/ ) &amp;gt;= 0 ) j++;&lt;br /&gt;
&lt;br /&gt;
				if ( i &amp;gt;= 0 &amp;amp;&amp;amp; before.charAt( i ) === &#039;\n&#039; &amp;amp;&amp;amp; ( !after.length || j &amp;lt; after.length &amp;amp;&amp;amp; after.charAt( j ) === &#039;\n&#039; ) ) i--;&lt;br /&gt;
&lt;br /&gt;
				if ( i &amp;gt;= 0 ) before = before.substring( 0, i + 1 ); else before = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( j &amp;lt; after.length ) after = after.substring( j ); else after = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
				if (&lt;br /&gt;
					before.length &amp;amp;&amp;amp; before.substring( before.length - 1 ).search( /\S/ ) &amp;gt;= 0 &amp;amp;&amp;amp;&lt;br /&gt;
					after.length &amp;amp;&amp;amp; after.substr( 0, 1 ).search( /\S/ ) &amp;gt;= 0&lt;br /&gt;
				) {&lt;br /&gt;
					before += &#039; &#039;;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				cat_point = before.length;&lt;br /&gt;
				if ( cat_point === 0 &amp;amp;&amp;amp; after.length &amp;amp;&amp;amp; after.substr( 0, 1 ) === &#039;\n&#039; ) after = after.substr( 1 );&lt;br /&gt;
&lt;br /&gt;
				wikitext = before + after;&lt;br /&gt;
				if ( !keyChange ) {&lt;br /&gt;
					if ( HC.template_categories[ toRemove ] ) { summary.push( HC.messages.template_removed.replace( /\$1/g, toRemove ) ); } else { summary.push( HC.messages.cat_removed.replace( /\$1/g, toRemove ) ); }&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// Add&lt;br /&gt;
		if ( toAdd &amp;amp;&amp;amp; toAdd.length ) {&lt;br /&gt;
			matches = find_category( wikitext, toAdd );&lt;br /&gt;
			if ( matches &amp;amp;&amp;amp; matches.length ) {&lt;br /&gt;
				// Already exists&lt;br /&gt;
				return {&lt;br /&gt;
					text: wikitext,&lt;br /&gt;
					summary: summary,&lt;br /&gt;
					error: HC.messages.cat_exists.replace( /\$1/g, toAdd )&lt;br /&gt;
				};&lt;br /&gt;
			} else {&lt;br /&gt;
				var onCat = false;&lt;br /&gt;
				if ( cat_point &amp;lt; 0 ) {&lt;br /&gt;
					var point = find_insertionpoint( wikitext );&lt;br /&gt;
					cat_point = point.idx;&lt;br /&gt;
					onCat = point.onCat;&lt;br /&gt;
				} else {&lt;br /&gt;
					onCat = true;&lt;br /&gt;
				}&lt;br /&gt;
				var newcatstring = &#039;[[&#039; + nameSpace + &#039;:&#039; + toAdd + ( key || &#039;&#039; ) + &#039;]]&#039;;&lt;br /&gt;
				if ( cat_point &amp;gt;= 0 ) {&lt;br /&gt;
					var suffix = wikitext.substring( cat_point );&lt;br /&gt;
					wikitext = wikitext.substring( 0, cat_point ) + ( cat_point &amp;gt; 0 ? &#039;\n&#039; : &#039;&#039; ) + newcatstring + ( !onCat ? &#039;\n&#039; : &#039;&#039; );&lt;br /&gt;
					if ( suffix.length &amp;amp;&amp;amp; suffix.substr( 0, 1 ) !== &#039;\n&#039; ) wikitext += &#039;\n&#039; + suffix; else wikitext += suffix;&lt;br /&gt;
				} else {&lt;br /&gt;
					if ( wikitext.length &amp;amp;&amp;amp; wikitext.substr( wikitext.length - 1, 1 ) !== &#039;\n&#039; ) wikitext += &#039;\n&#039;;&lt;br /&gt;
&lt;br /&gt;
					wikitext += ( wikitext.length ? &#039;\n&#039; : &#039;&#039; ) + newcatstring;&lt;br /&gt;
				}&lt;br /&gt;
				if ( keyChange ) {&lt;br /&gt;
					var k = key || &#039;&#039;;&lt;br /&gt;
					if ( k.length ) k = k.substr( 1 );&lt;br /&gt;
&lt;br /&gt;
					summary.push( substitute( HC.messages.cat_keychange, [ null, toAdd, k ] ) );&lt;br /&gt;
				} else {&lt;br /&gt;
					summary.push( HC.messages.cat_added.replace( /\$1/g, toAdd ) );&lt;br /&gt;
				}&lt;br /&gt;
				if ( HC.uncat_regexp &amp;amp;&amp;amp; !is_hidden ) {&lt;br /&gt;
					var txt = wikitext.replace( HC.uncat_regexp, &#039;&#039; ); // Remove &amp;quot;uncat&amp;quot; templates&lt;br /&gt;
					if ( txt.length !== wikitext.length ) {&lt;br /&gt;
						wikitext = txt;&lt;br /&gt;
						summary.push( HC.messages.uncat_removed );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return {&lt;br /&gt;
			text: wikitext,&lt;br /&gt;
			summary: summary,&lt;br /&gt;
			error: null&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// The real HotCat UI&lt;br /&gt;
&lt;br /&gt;
	function evtKeys( e ) {&lt;br /&gt;
		/* eslint-disable no-bitwise */&lt;br /&gt;
		var code = 0;&lt;br /&gt;
		if ( e.ctrlKey ) { // All modern browsers&lt;br /&gt;
		// Ctrl-click seems to be overloaded in FF/Mac (it opens a pop-up menu), so treat cmd-click&lt;br /&gt;
		// as a ctrl-click, too.&lt;br /&gt;
			if ( e.ctrlKey || e.metaKey ) code |= 1;&lt;br /&gt;
&lt;br /&gt;
			if ( e.shiftKey ) code |= 2;&lt;br /&gt;
		}&lt;br /&gt;
		return code;&lt;br /&gt;
	}&lt;br /&gt;
	function evtKill( e ) {&lt;br /&gt;
		if ( e.preventDefault ) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			e.stopPropagation();&lt;br /&gt;
		} else {&lt;br /&gt;
			e.cancelBubble = true;&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var catLine = null,&lt;br /&gt;
		onUpload = false,&lt;br /&gt;
		editors = [],&lt;br /&gt;
&lt;br /&gt;
		commitButton = null,&lt;br /&gt;
		commitForm = null,&lt;br /&gt;
		multiSpan = null,&lt;br /&gt;
&lt;br /&gt;
		pageText = null,&lt;br /&gt;
		pageTime = null,&lt;br /&gt;
		pageWatched = false,&lt;br /&gt;
		watchCreate = false,&lt;br /&gt;
		watchEdit = false,&lt;br /&gt;
		minorEdits = false,&lt;br /&gt;
		editToken = null,&lt;br /&gt;
&lt;br /&gt;
		is_rtl = false,&lt;br /&gt;
		serverTime = null,&lt;br /&gt;
		lastRevId = null,&lt;br /&gt;
		pageTextRevId = null,&lt;br /&gt;
		conflictingUser = null,&lt;br /&gt;
&lt;br /&gt;
		newDOM = false; // true if MediaWiki serves the new UL-LI DOM for categories&lt;br /&gt;
&lt;br /&gt;
	function CategoryEditor() {&lt;br /&gt;
		this.initialize.apply( this, arguments );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function setPage( json ) {&lt;br /&gt;
		var startTime = null;&lt;br /&gt;
		if ( json &amp;amp;&amp;amp; json.query ) {&lt;br /&gt;
			if ( json.query.pages ) {&lt;br /&gt;
				var page = json.query.pages[ !conf.wgArticleId ? &#039;-1&#039; : String( conf.wgArticleId ) ];&lt;br /&gt;
				if ( page ) {&lt;br /&gt;
					if ( page.revisions &amp;amp;&amp;amp; page.revisions.length ) {&lt;br /&gt;
						// Revisions are sorted by revision ID, hence [ 0 ] is the one we asked for, and possibly there&#039;s a [ 1 ] if we&#039;re&lt;br /&gt;
						// not on the latest revision (edit conflicts and such).&lt;br /&gt;
						pageText = page.revisions[ 0 ][ &#039;*&#039; ];&lt;br /&gt;
						if ( page.revisions[ 0 ].timestamp ) pageTime = page.revisions[ 0 ].timestamp.replace( /\D/g, &#039;&#039; );&lt;br /&gt;
						if ( page.revisions[ 0 ].revid ) pageTextRevId = page.revisions[ 0 ].revid;&lt;br /&gt;
						if ( page.revisions.length &amp;gt; 1 ) conflictingUser = page.revisions[ 1 ].user;&lt;br /&gt;
					}&lt;br /&gt;
					if ( page.lastrevid ) lastRevId = page.lastrevid;&lt;br /&gt;
					if ( page.starttimestamp ) startTime = page.starttimestamp.replace( /\D/g, &#039;&#039; );&lt;br /&gt;
					pageWatched = typeof page.watched === &#039;string&#039;;&lt;br /&gt;
					if ( json.query.tokens ) editToken = json.query.tokens.csrftoken;&lt;br /&gt;
					if ( page.langlinks &amp;amp;&amp;amp; ( !json[ &#039;query-continue&#039; ] || !json[ &#039;query-continue&#039; ].langlinks ) ) {&lt;br /&gt;
						// We have interlanguage links, and we got them all.&lt;br /&gt;
						var re = &#039;&#039;;&lt;br /&gt;
						for ( var i = 0; i &amp;lt; page.langlinks.length; i++ ) re += ( i &amp;gt; 0 ? &#039;|&#039; : &#039;&#039; ) + page.langlinks[ i ].lang.replace( /([\\^$.?*+()])/g, &#039;\\$1&#039; );&lt;br /&gt;
						if ( re.length ) interlanguageRE = new RegExp( &#039;((^|\\n\\r?)(\\[\\[\\s*(&#039; + re + &#039;)\\s*:[^\\]]+\\]\\]\\s*))+$&#039; );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// Siteinfo&lt;br /&gt;
			if ( json.query.general ) {&lt;br /&gt;
				if ( json.query.general.time &amp;amp;&amp;amp; !startTime ) startTime = json.query.general.time.replace( /\D/g, &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
				if ( HC.capitalizePageNames === null ) {&lt;br /&gt;
					// ResourceLoader&#039;s JSParser doesn&#039;t like .case, so override eslint.&lt;br /&gt;
					// eslint-disable-next-line dot-notation&lt;br /&gt;
					HC.capitalizePageNames = ( json.query.general[ &#039;case&#039; ] === &#039;first-letter&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			serverTime = startTime;&lt;br /&gt;
			// Userinfo&lt;br /&gt;
			if ( json.query.userinfo &amp;amp;&amp;amp; json.query.userinfo.options ) {&lt;br /&gt;
				watchCreate = !HC.dont_add_to_watchlist &amp;amp;&amp;amp; json.query.userinfo.options.watchcreations === &#039;1&#039;;&lt;br /&gt;
				watchEdit = !HC.dont_add_to_watchlist &amp;amp;&amp;amp; json.query.userinfo.options.watchdefault === &#039;1&#039;;&lt;br /&gt;
				minorEdits = json.query.userinfo.options.minordefault === 1;&lt;br /&gt;
				// If the user has the &amp;quot;All edits are minor&amp;quot; preference enabled, we should honor that&lt;br /&gt;
				// for single category changes, no matter what the site configuration is.&lt;br /&gt;
				if ( minorEdits ) HC.single_minor = true;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var saveInProgress = false;&lt;br /&gt;
	function initiateEdit( doEdit, failure ) {&lt;br /&gt;
		if ( saveInProgress ) return;&lt;br /&gt;
		saveInProgress = true;&lt;br /&gt;
		var oldButtonState;&lt;br /&gt;
		if ( commitButton ) {&lt;br /&gt;
			oldButtonState = commitButton.disabled;&lt;br /&gt;
			commitButton.disabled = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function fail() {&lt;br /&gt;
			saveInProgress = false;&lt;br /&gt;
			if ( commitButton ) commitButton.disabled = oldButtonState;&lt;br /&gt;
			failure.apply( this, arguments );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Must use Ajax here to get the user options and the edit token.&lt;br /&gt;
		$.getJSON(&lt;br /&gt;
			conf.wgServer + conf.wgScriptPath + &#039;/api.php?&#039; +&lt;br /&gt;
			&#039;format=json&amp;amp;action=query&amp;amp;rawcontinue=&amp;amp;titles=&#039; + encodeURIComponent( conf.wgPageName ) +&lt;br /&gt;
			&#039;&amp;amp;prop=info%7Crevisions%7Clanglinks&amp;amp;inprop=watched&amp;amp;rvprop=content%7Ctimestamp%7Cids%7Cuser&amp;amp;lllimit=500&#039; +&lt;br /&gt;
			&#039;&amp;amp;rvlimit=2&amp;amp;rvdir=newer&amp;amp;rvstartid=&#039; + conf.wgCurRevisionId + &#039;&amp;amp;meta=siteinfo%7Cuserinfo%7Ctokens&amp;amp;type=csrf&amp;amp;uiprop=options&#039;,&lt;br /&gt;
			function ( json ) {&lt;br /&gt;
				setPage( json );&lt;br /&gt;
				doEdit( fail );&lt;br /&gt;
			}&lt;br /&gt;
		).fail( function ( req ) {&lt;br /&gt;
			fail( req.status + &#039; &#039; + req.statusText );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function multiChangeMsg( count ) {&lt;br /&gt;
		var msg = HC.messages.multi_change;&lt;br /&gt;
		if ( typeof msg !== &#039;string&#039; &amp;amp;&amp;amp; msg.length )&lt;br /&gt;
			if ( mw.language &amp;amp;&amp;amp; mw.language.convertPlural ) { msg = mw.language.convertPlural( count, msg ); } else { msg = msg[ msg.length - 1 ]; }&lt;br /&gt;
&lt;br /&gt;
		return substitute( msg, [ null, String( count ) ] );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function currentTimestamp() {&lt;br /&gt;
		var now = new Date();&lt;br /&gt;
		var ts = String( now.getUTCFullYear() );&lt;br /&gt;
		function two( s ) {&lt;br /&gt;
			return s.substr( s.length - 2 );&lt;br /&gt;
		}&lt;br /&gt;
		ts +=&lt;br /&gt;
			two( &#039;0&#039; + ( now.getUTCMonth() + 1 ) ) +&lt;br /&gt;
			two( &#039;0&#039; + now.getUTCDate() ) +&lt;br /&gt;
			two( &#039;00&#039; + now.getUTCHours() ) +&lt;br /&gt;
			two( &#039;00&#039; + now.getUTCMinutes() ) +&lt;br /&gt;
			two( &#039;00&#039; + now.getUTCSeconds() );&lt;br /&gt;
		return ts;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function performChanges( failure, singleEditor ) {&lt;br /&gt;
		if ( pageText === null ) {&lt;br /&gt;
			failure( HC.messages.multi_error );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// Backwards compatibility after message change (added $2 to cat_keychange)&lt;br /&gt;
		if ( HC.messages.cat_keychange.indexOf( &#039;$2&#039; ) &amp;lt; 0 ) HC.messages.cat_keychange += &#039;&amp;quot;$2&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
		// More backwards-compatibility with earlier HotCat versions:&lt;br /&gt;
		if ( !HC.messages.short_catchange ) HC.messages.short_catchange = &#039;[[&#039; + HC.category_canonical + &#039;:$1]]&#039;;&lt;br /&gt;
&lt;br /&gt;
		// Create a form and submit it. We don&#039;t use the edit API (api.php?action=edit) because&lt;br /&gt;
		// (a) sensibly reporting back errors like edit conflicts is always a hassle, and&lt;br /&gt;
		// (b) we want to show a diff for multi-edits anyway, and&lt;br /&gt;
		// (c) we want to trigger onsubmit events, allowing user code to intercept the edit.&lt;br /&gt;
		// Using the form, we can do (b) and (c), and we get (a) for free. And, of course, using the form&lt;br /&gt;
		// automatically reloads the page with the updated categories on a successful submit, which&lt;br /&gt;
		// we would have to do explicitly if we used the edit API.&lt;br /&gt;
		var action;&lt;br /&gt;
		// Normally, we don&#039;t have to care about edit conflicts. If some other user edited the page in the meantime, the&lt;br /&gt;
		// server will take care of it and merge the edit automatically or present an edit conflict screen. However, the&lt;br /&gt;
		// server suppresses edit conflicts with oneself. Hence, if we have a conflict, and the conflicting user is the&lt;br /&gt;
		// current user, then we set the &amp;quot;oldid&amp;quot; value and switch to diff, which gives the &amp;quot;you are editing an old version;&lt;br /&gt;
		// if you save, any more recent changes will be lost&amp;quot; screen.&lt;br /&gt;
		var selfEditConflict = ( lastRevId !== null &amp;amp;&amp;amp; lastRevId !== conf.wgCurRevisionId || pageTextRevId !== null &amp;amp;&amp;amp;&lt;br /&gt;
			pageTextRevId !== conf.wgCurRevisionId ) &amp;amp;&amp;amp; conflictingUser &amp;amp;&amp;amp; conflictingUser === conf.wgUserName;&lt;br /&gt;
		if ( singleEditor &amp;amp;&amp;amp; !singleEditor.noCommit &amp;amp;&amp;amp; !HC.no_autocommit &amp;amp;&amp;amp; editToken &amp;amp;&amp;amp; !selfEditConflict ) {&lt;br /&gt;
			// If we do have an edit conflict, but not with ourself, that&#039;s no reason not to attempt to save: the server side may actually be able to&lt;br /&gt;
			// merge the changes. We just need to make sure that we do present a diff view if it&#039;s a self edit conflict.&lt;br /&gt;
			commitForm.wpEditToken.value = editToken;&lt;br /&gt;
			action = commitForm.wpDiff;&lt;br /&gt;
			if ( action ) action.name = action.value = &#039;wpSave&#039;;&lt;br /&gt;
		} else {&lt;br /&gt;
			action = commitForm.wpSave;&lt;br /&gt;
			if ( action ) action.name = action.value = &#039;wpDiff&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		var result = {&lt;br /&gt;
				text: pageText&lt;br /&gt;
			},&lt;br /&gt;
			changed = [],&lt;br /&gt;
			added = [],&lt;br /&gt;
			deleted = [],&lt;br /&gt;
			changes = 0,&lt;br /&gt;
			toEdit = singleEditor ? [ singleEditor ] : editors,&lt;br /&gt;
			error = null,&lt;br /&gt;
			edit,&lt;br /&gt;
			i;&lt;br /&gt;
		for ( i = 0; i &amp;lt; toEdit.length; i++ ) {&lt;br /&gt;
			edit = toEdit[ i ];&lt;br /&gt;
			if ( edit.state === CategoryEditor.CHANGED ) {&lt;br /&gt;
				result = change_category(&lt;br /&gt;
					result.text,&lt;br /&gt;
					edit.originalCategory,&lt;br /&gt;
					edit.currentCategory,&lt;br /&gt;
					edit.currentKey,&lt;br /&gt;
					edit.currentHidden );&lt;br /&gt;
				if ( !result.error ) {&lt;br /&gt;
					changes++;&lt;br /&gt;
					if ( !edit.originalCategory || !edit.originalCategory.length ) {&lt;br /&gt;
						added.push( edit.currentCategory );&lt;br /&gt;
					} else {&lt;br /&gt;
						changed.push( {&lt;br /&gt;
							from: edit.originalCategory,&lt;br /&gt;
							to: edit.currentCategory&lt;br /&gt;
						} );&lt;br /&gt;
					}&lt;br /&gt;
				} else if ( error === null ) {&lt;br /&gt;
					error = result.error;&lt;br /&gt;
				}&lt;br /&gt;
			} else if (&lt;br /&gt;
				edit.state === CategoryEditor.DELETED &amp;amp;&amp;amp; edit.originalCategory &amp;amp;&amp;amp; edit.originalCategory.length ) {&lt;br /&gt;
				result = change_category(&lt;br /&gt;
					result.text,&lt;br /&gt;
					edit.originalCategory,&lt;br /&gt;
					null, null, false );&lt;br /&gt;
				if ( !result.error ) {&lt;br /&gt;
					changes++;&lt;br /&gt;
					deleted.push( edit.originalCategory );&lt;br /&gt;
				} else if ( error === null ) {&lt;br /&gt;
					error = result.error;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if ( error !== null ) { // Do not commit if there were errors&lt;br /&gt;
			action = commitForm.wpSave;&lt;br /&gt;
			if ( action ) action.name = action.value = &#039;wpDiff&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		// Fill in the form and submit it&lt;br /&gt;
		commitForm.wpMinoredit.checked = minorEdits;&lt;br /&gt;
		commitForm.wpWatchthis.checked = !conf.wgArticleId &amp;amp;&amp;amp; watchCreate || watchEdit || pageWatched;&lt;br /&gt;
		if ( conf.wgArticleId || !!singleEditor ) {&lt;br /&gt;
			// Prepare change-tag save&lt;br /&gt;
			if ( action &amp;amp;&amp;amp; action.value === &#039;wpSave&#039; ) {&lt;br /&gt;
				if ( HC.changeTag ) {&lt;br /&gt;
					commitForm.wpChangeTags.value = HC.changeTag;&lt;br /&gt;
					HC.messages.using = &#039;&#039;;&lt;br /&gt;
					HC.messages.prefix = &#039;&#039;;&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				commitForm.wpAutoSummary.value = HC.changeTag;&lt;br /&gt;
			}&lt;br /&gt;
			if ( changes === 1 ) {&lt;br /&gt;
				if ( result.summary &amp;amp;&amp;amp; result.summary.length ) commitForm.wpSummary.value = HC.messages.prefix + result.summary.join( HC.messages.separator ) + HC.messages.using;&lt;br /&gt;
				commitForm.wpMinoredit.checked = HC.single_minor || minorEdits;&lt;br /&gt;
			} else if ( changes ) {&lt;br /&gt;
				var summary = [];&lt;br /&gt;
				var shortSummary = [];&lt;br /&gt;
				// Deleted&lt;br /&gt;
				for ( i = 0; i &amp;lt; deleted.length; i++ ) summary.push( &#039;−&#039; + substitute( HC.messages.short_catchange, [ null, deleted[ i ] ] ) );&lt;br /&gt;
&lt;br /&gt;
				if ( deleted.length === 1 ) shortSummary.push( &#039;−&#039; + substitute( HC.messages.short_catchange, [ null, deleted[ 0 ] ] ) ); else if ( deleted.length ) shortSummary.push( &#039;− &#039; + multiChangeMsg( deleted.length ) );&lt;br /&gt;
&lt;br /&gt;
				// Added&lt;br /&gt;
				for ( i = 0; i &amp;lt; added.length; i++ ) summary.push( &#039;+&#039; + substitute( HC.messages.short_catchange, [ null, added[ i ] ] ) );&lt;br /&gt;
&lt;br /&gt;
				if ( added.length === 1 ) shortSummary.push( &#039;+&#039; + substitute( HC.messages.short_catchange, [ null, added[ 0 ] ] ) ); else if ( added.length ) shortSummary.push( &#039;+ &#039; + multiChangeMsg( added.length ) );&lt;br /&gt;
&lt;br /&gt;
				// Changed&lt;br /&gt;
				var arrow = is_rtl ? &#039;\u2190&#039; : &#039;\u2192&#039;; // left and right arrows. Don&#039;t use ← and → in the code.&lt;br /&gt;
				for ( i = 0; i &amp;lt; changed.length; i++ ) {&lt;br /&gt;
					if ( changed[ i ].from !== changed[ i ].to ) {&lt;br /&gt;
						summary.push(&lt;br /&gt;
							&#039;±&#039; + substitute( HC.messages.short_catchange, [ null, changed[ i ].from ] ) + arrow +&lt;br /&gt;
							substitute( HC.messages.short_catchange, [ null, changed[ i ].to ] )&lt;br /&gt;
						);&lt;br /&gt;
					} else {&lt;br /&gt;
						summary.push( &#039;±&#039; + substitute( HC.messages.short_catchange, [ null, changed[ i ].from ] ) );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				if ( changed.length === 1 ) {&lt;br /&gt;
					if ( changed[ 0 ].from !== changed[ 0 ].to ) {&lt;br /&gt;
						shortSummary.push(&lt;br /&gt;
							&#039;±&#039; + substitute( HC.messages.short_catchange, [ null, changed[ 0 ].from ] ) + arrow +&lt;br /&gt;
							substitute( HC.messages.short_catchange, [ null, changed[ 0 ].to ] )&lt;br /&gt;
						);&lt;br /&gt;
					} else {&lt;br /&gt;
						shortSummary.push( &#039;±&#039; + substitute( HC.messages.short_catchange, [ null, changed[ 0 ].from ] ) );&lt;br /&gt;
					}&lt;br /&gt;
				} else if ( changed.length ) {&lt;br /&gt;
					shortSummary.push( &#039;± &#039; + multiChangeMsg( changed.length ) );&lt;br /&gt;
				}&lt;br /&gt;
				if ( summary.length ) {&lt;br /&gt;
					summary = summary.join( HC.messages.separator );&lt;br /&gt;
					if ( summary.length &amp;gt; 200 - HC.messages.prefix.length - HC.messages.using.length ) summary = shortSummary.join( HC.messages.separator );&lt;br /&gt;
&lt;br /&gt;
					commitForm.wpSummary.value = HC.messages.prefix + summary + HC.messages.using;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		commitForm.wpTextbox1.value = result.text;&lt;br /&gt;
		commitForm.wpStarttime.value = serverTime || currentTimestamp();&lt;br /&gt;
		commitForm.wpEdittime.value = pageTime || commitForm.wpStarttime.value;&lt;br /&gt;
		if ( selfEditConflict ) commitForm.oldid.value = String( pageTextRevId || conf.wgCurRevisionId );&lt;br /&gt;
&lt;br /&gt;
		// Submit the form in a way that triggers onsubmit events: commitForm.submit() doesn&#039;t.&lt;br /&gt;
		commitForm.hcCommit.click();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function resolveOne( page, toResolve ) {&lt;br /&gt;
		var cats = page.categories,&lt;br /&gt;
			lks = page.links,&lt;br /&gt;
			is_dab = false,&lt;br /&gt;
			is_redir = typeof page.redirect === &#039;string&#039;, // Hard redirect?&lt;br /&gt;
			is_hidden = page.categoryinfo &amp;amp;&amp;amp; typeof page.categoryinfo.hidden === &#039;string&#039;,&lt;br /&gt;
			is_missing = typeof page.missing === &#039;string&#039;,&lt;br /&gt;
			i;&lt;br /&gt;
		for ( i = 0; i &amp;lt; toResolve.length; i++ ) {&lt;br /&gt;
			if ( i &amp;amp;&amp;amp; toResolve[ i ].dabInputCleaned !== page.title.substring( page.title.indexOf( &#039;:&#039; ) + 1 ) ) continue;&lt;br /&gt;
			// Note: the server returns in page an NFC normalized Unicode title. If our input was not NFC normalized, we may not find&lt;br /&gt;
			// any entry here. If we have only one editor to resolve (the most common case, I presume), we may simply skip the check.&lt;br /&gt;
			toResolve[ i ].currentHidden = is_hidden;&lt;br /&gt;
			toResolve[ i ].inputExists = !is_missing;&lt;br /&gt;
			toResolve[ i ].icon.src = ( is_missing ? HC.existsNo : HC.existsYes );&lt;br /&gt;
		}&lt;br /&gt;
		if ( is_missing ) return;&lt;br /&gt;
		if ( !is_redir &amp;amp;&amp;amp; cats &amp;amp;&amp;amp; ( HC.disambig_category || HC.redir_category ) ) {&lt;br /&gt;
			for ( var c = 0; c &amp;lt; cats.length; c++ ) {&lt;br /&gt;
				var cat = cats[ c ].title;&lt;br /&gt;
				// Strip namespace prefix&lt;br /&gt;
				if ( cat ) {&lt;br /&gt;
					cat = cat.substring( cat.indexOf( &#039;:&#039; ) + 1 ).replace( /_/g, &#039; &#039; );&lt;br /&gt;
					if ( cat === HC.disambig_category ) {&lt;br /&gt;
						is_dab = true;&lt;br /&gt;
						break;&lt;br /&gt;
					} else if ( cat === HC.redir_category ) {&lt;br /&gt;
						is_redir = true;&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if ( !is_redir &amp;amp;&amp;amp; !is_dab ) return;&lt;br /&gt;
		if ( !lks || !lks.length ) return;&lt;br /&gt;
		var titles = [];&lt;br /&gt;
		for ( i = 0; i &amp;lt; lks.length; i++ ) {&lt;br /&gt;
			if (&lt;br /&gt;
				// Category namespace -- always true since we ask only for the category links&lt;br /&gt;
				lks[ i ].ns === 14 &amp;amp;&amp;amp;&lt;br /&gt;
				// Name not empty&lt;br /&gt;
				lks[ i ].title &amp;amp;&amp;amp; lks[ i ].title.length&lt;br /&gt;
			) {&lt;br /&gt;
				// Internal link to existing thingy. Extract the page name and remove the namespace.&lt;br /&gt;
				var match = lks[ i ].title;&lt;br /&gt;
				match = match.substring( match.indexOf( &#039;:&#039; ) + 1 );&lt;br /&gt;
				// Exclude blacklisted categories.&lt;br /&gt;
				if ( !HC.blacklist || !HC.blacklist.test( match ) ) titles.push( match );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if ( !titles.length ) return;&lt;br /&gt;
		for ( i = 0; i &amp;lt; toResolve.length; i++ ) {&lt;br /&gt;
			if ( i &amp;amp;&amp;amp; toResolve[ i ].dabInputCleaned !== page.title.substring( page.title.indexOf( &#039;:&#039; ) + 1 ) ) continue;&lt;br /&gt;
			toResolve[ i ].inputExists = true; // Might actually be wrong if it&#039;s a redirect pointing to a non-existing category&lt;br /&gt;
			toResolve[ i ].icon.src = HC.existsYes;&lt;br /&gt;
			if ( titles.length &amp;gt; 1 ) {&lt;br /&gt;
				toResolve[ i ].dab = titles;&lt;br /&gt;
			} else {&lt;br /&gt;
				toResolve[ i ].text.value =&lt;br /&gt;
					titles[ 0 ] + ( toResolve[ i ].currentKey !== null ? &#039;|&#039; + toResolve[ i ].currentKey : &#039;&#039; );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function resolveRedirects( toResolve, params ) {&lt;br /&gt;
		if ( !params || !params.query || !params.query.pages ) return;&lt;br /&gt;
		for ( var p in params.query.pages ) resolveOne( params.query.pages[ p ], toResolve );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function resolveMulti( toResolve, callback ) {&lt;br /&gt;
		var i;&lt;br /&gt;
		for ( i = 0; i &amp;lt; toResolve.length; i++ ) {&lt;br /&gt;
			toResolve[ i ].dab = null;&lt;br /&gt;
			toResolve[ i ].dabInput = toResolve[ i ].lastInput;&lt;br /&gt;
		}&lt;br /&gt;
		if ( noSuggestions ) {&lt;br /&gt;
			callback( toResolve );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// Use %7C instead of |, otherwise Konqueror insists on re-encoding the arguments, resulting in doubly encoded&lt;br /&gt;
		// category names. (That is a bug in Konqueror. Other browsers don&#039;t have this problem.)&lt;br /&gt;
		var args = &#039;action=query&amp;amp;prop=info%7Clinks%7Ccategories%7Ccategoryinfo&amp;amp;plnamespace=14&#039; +&lt;br /&gt;
			&#039;&amp;amp;pllimit=&#039; + ( toResolve.length * 10 ) +&lt;br /&gt;
			&#039;&amp;amp;cllimit=&#039; + ( toResolve.length * 10 ) +&lt;br /&gt;
			&#039;&amp;amp;format=json&amp;amp;titles=&#039;;&lt;br /&gt;
		for ( i = 0; i &amp;lt; toResolve.length; i++ ) {&lt;br /&gt;
			var v = toResolve[ i ].dabInput;&lt;br /&gt;
			v = replaceShortcuts( v, HC.shortcuts );&lt;br /&gt;
			toResolve[ i ].dabInputCleaned = v;&lt;br /&gt;
			args += encodeURIComponent( &#039;Category:&#039; + v );&lt;br /&gt;
			if ( i + 1 &amp;lt; toResolve.length ) args += &#039;%7C&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$.getJSON( conf.wgServer + conf.wgScriptPath + &#039;/api.php?&#039; + args,&lt;br /&gt;
			function ( json ) {&lt;br /&gt;
				resolveRedirects( toResolve, json );&lt;br /&gt;
				callback( toResolve );&lt;br /&gt;
			} ).fail( function ( req ) {&lt;br /&gt;
			if ( !req ) noSuggestions = true;&lt;br /&gt;
			callback( toResolve );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function makeActive( which ) {&lt;br /&gt;
		if ( which.is_active ) return;&lt;br /&gt;
		for ( var i = 0; i &amp;lt; editors.length; i++ )&lt;br /&gt;
			if ( editors[ i ] !== which ) editors[ i ].inactivate();&lt;br /&gt;
&lt;br /&gt;
		which.is_active = true;&lt;br /&gt;
		if ( which.dab ) {&lt;br /&gt;
			// eslint-disable-next-line no-use-before-define&lt;br /&gt;
			showDab( which );&lt;br /&gt;
		} else {&lt;br /&gt;
			// Check for programmatic value changes.&lt;br /&gt;
			var expectedInput = which.lastRealInput || which.lastInput || &#039;&#039;;&lt;br /&gt;
			var actualValue = which.text.value || &#039;&#039;;&lt;br /&gt;
			if ( !expectedInput.length &amp;amp;&amp;amp; actualValue.length || expectedInput.length &amp;amp;&amp;amp; actualValue.indexOf( expectedInput ) ) {&lt;br /&gt;
				// Somehow the field&#039;s value appears to have changed, and which.lastSelection therefore is no longer valid. Try to set the&lt;br /&gt;
				// cursor at the end of the category, and do not display the old suggestion list.&lt;br /&gt;
				which.showsList = false;&lt;br /&gt;
				var v = actualValue.split( &#039;|&#039; );&lt;br /&gt;
				which.lastRealInput = which.lastInput = v[ 0 ];&lt;br /&gt;
				if ( v.length &amp;gt; 1 ) which.currentKey = v[ 1 ];&lt;br /&gt;
&lt;br /&gt;
				if ( which.lastSelection ) {&lt;br /&gt;
					which.lastSelection = {&lt;br /&gt;
						start: v[ 0 ].length,&lt;br /&gt;
						end: v[ 0 ].length&lt;br /&gt;
					};&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( which.showsList ) which.displayList();&lt;br /&gt;
&lt;br /&gt;
			if ( which.lastSelection ) {&lt;br /&gt;
				if ( is_webkit ) {&lt;br /&gt;
					// WebKit (Safari, Chrome) has problems selecting inside focus()&lt;br /&gt;
					// See http://code.google.com/p/chromium/issues/detail?id=32865#c6&lt;br /&gt;
					window.setTimeout(&lt;br /&gt;
						function () {&lt;br /&gt;
							which.setSelection( which.lastSelection.start, which.lastSelection.end );&lt;br /&gt;
						},&lt;br /&gt;
						1 );&lt;br /&gt;
				} else {&lt;br /&gt;
					which.setSelection( which.lastSelection.start, which.lastSelection.end );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function showDab( which ) {&lt;br /&gt;
		if ( !which.is_active ) {&lt;br /&gt;
			makeActive( which );&lt;br /&gt;
		} else {&lt;br /&gt;
			which.showSuggestions( which.dab, false, null, null ); // do autocompletion, no key, no engine selector&lt;br /&gt;
			which.dab = null;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function multiSubmit() {&lt;br /&gt;
		var toResolve = [];&lt;br /&gt;
		for ( var i = 0; i &amp;lt; editors.length; i++ )&lt;br /&gt;
			if ( editors[ i ].state === CategoryEditor.CHANGE_PENDING || editors[ i ].state === CategoryEditor.OPEN ) toResolve.push( editors[ i ] );&lt;br /&gt;
&lt;br /&gt;
		if ( !toResolve.length ) {&lt;br /&gt;
			initiateEdit( function ( failure ) {&lt;br /&gt;
				performChanges( failure );&lt;br /&gt;
			}, function ( msg ) {&lt;br /&gt;
				alert( msg );&lt;br /&gt;
			} );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		resolveMulti( toResolve, function ( resolved ) {&lt;br /&gt;
			var firstDab = null;&lt;br /&gt;
			var dontChange = false;&lt;br /&gt;
			for ( var i = 0; i &amp;lt; resolved.length; i++ ) {&lt;br /&gt;
				if ( resolved[ i ].lastInput !== resolved[ i ].dabInput ) {&lt;br /&gt;
					// We didn&#039;t disable all the open editors, but we did asynchronous calls. It is&lt;br /&gt;
					// theoretically possible that the user changed something...&lt;br /&gt;
					dontChange = true;&lt;br /&gt;
				} else {&lt;br /&gt;
					if ( resolved[ i ].dab ) {&lt;br /&gt;
						if ( !firstDab ) firstDab = resolved[ i ];&lt;br /&gt;
					} else {&lt;br /&gt;
						if ( resolved[ i ].acceptCheck( true ) ) resolved[ i ].commit();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( firstDab ) {&lt;br /&gt;
				showDab( firstDab );&lt;br /&gt;
			} else if ( !dontChange ) {&lt;br /&gt;
				initiateEdit( function ( failure ) {&lt;br /&gt;
					performChanges( failure );&lt;br /&gt;
				}, function ( msg ) {&lt;br /&gt;
					alert( msg );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function setMultiInput() {&lt;br /&gt;
		if ( commitButton || onUpload ) return;&lt;br /&gt;
		commitButton = make( &#039;input&#039; );&lt;br /&gt;
		commitButton.type = &#039;button&#039;;&lt;br /&gt;
		commitButton.value = HC.messages.commit;&lt;br /&gt;
		commitButton.onclick = multiSubmit;&lt;br /&gt;
		if ( multiSpan ) multiSpan.parentNode.replaceChild( commitButton, multiSpan ); else catLine.appendChild( commitButton );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function checkMultiInput() {&lt;br /&gt;
		if ( !commitButton ) return;&lt;br /&gt;
		var hasChanges = false;&lt;br /&gt;
		for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
			if ( editors[ i ].state !== CategoryEditor.UNCHANGED ) {&lt;br /&gt;
				hasChanges = true;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		commitButton.disabled = !hasChanges;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var suggestionEngines = {&lt;br /&gt;
		opensearch: {&lt;br /&gt;
			uri: &#039;/api.php?format=json&amp;amp;action=opensearch&amp;amp;namespace=14&amp;amp;limit=30&amp;amp;search=Category:$1&#039;, // $1 = search term&lt;br /&gt;
			// Function to convert result of uri into an array of category names&lt;br /&gt;
			handler: function ( queryResult, queryKey ) {&lt;br /&gt;
				if ( queryResult &amp;amp;&amp;amp; queryResult.length &amp;gt;= 2 ) {&lt;br /&gt;
					var key = queryResult[ 0 ].substring( queryResult[ 0 ].indexOf( &#039;:&#039; ) + 1 );&lt;br /&gt;
					var titles = queryResult[ 1 ];&lt;br /&gt;
					var exists = false;&lt;br /&gt;
					if ( !cat_prefix ) cat_prefix = new RegExp( &#039;^(&#039; + HC.category_regexp + &#039;):&#039; );&lt;br /&gt;
&lt;br /&gt;
					for ( var i = 0; i &amp;lt; titles.length; i++ ) {&lt;br /&gt;
						cat_prefix.lastIndex = 0;&lt;br /&gt;
						var m = cat_prefix.exec( titles[ i ] );&lt;br /&gt;
						if ( m &amp;amp;&amp;amp; m.length &amp;gt; 1 ) {&lt;br /&gt;
							titles[ i ] = titles[ i ].substring( titles[ i ].indexOf( &#039;:&#039; ) + 1 ); // rm namespace&lt;br /&gt;
							if ( key === titles[ i ] ) exists = true;&lt;br /&gt;
						} else {&lt;br /&gt;
							titles.splice( i, 1 ); // Nope, it&#039;s not a category after all.&lt;br /&gt;
							i--;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					titles.exists = exists;&lt;br /&gt;
					if ( queryKey !== key ) titles.normalized = key;&lt;br /&gt;
					// Remember the NFC normalized key we got back from the server&lt;br /&gt;
					return titles;&lt;br /&gt;
				}&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		internalsearch: {&lt;br /&gt;
			uri: &#039;/api.php?format=json&amp;amp;action=query&amp;amp;list=allpages&amp;amp;apnamespace=14&amp;amp;aplimit=30&amp;amp;apfrom=$1&amp;amp;apprefix=$1&#039;,&lt;br /&gt;
			handler: function ( queryResult ) {&lt;br /&gt;
				if ( queryResult &amp;amp;&amp;amp; queryResult.query &amp;amp;&amp;amp; queryResult.query.allpages ) {&lt;br /&gt;
					var titles = queryResult.query.allpages;&lt;br /&gt;
					for ( var i = 0; i &amp;lt; titles.length; i++ ) titles[ i ] = titles[ i ].title.substring( titles[ i ].title.indexOf( &#039;:&#039; ) + 1 ); // rm namespace&lt;br /&gt;
&lt;br /&gt;
					return titles;&lt;br /&gt;
				}&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		exists: {&lt;br /&gt;
			uri: &#039;/api.php?format=json&amp;amp;action=query&amp;amp;prop=info&amp;amp;titles=Category:$1&#039;,&lt;br /&gt;
			handler: function ( queryResult, queryKey ) {&lt;br /&gt;
				if ( queryResult &amp;amp;&amp;amp; queryResult.query &amp;amp;&amp;amp; queryResult.query.pages &amp;amp;&amp;amp; !queryResult.query.pages[ -1 ] ) {&lt;br /&gt;
					// Should have exactly 1&lt;br /&gt;
					for ( var p in queryResult.query.pages ) {&lt;br /&gt;
						var title = queryResult.query.pages[ p ].title;&lt;br /&gt;
						title = title.substring( title.indexOf( &#039;:&#039; ) + 1 );&lt;br /&gt;
						var titles = [ title ];&lt;br /&gt;
						titles.exists = true;&lt;br /&gt;
						if ( queryKey !== title ) titles.normalized = title;&lt;br /&gt;
						// NFC&lt;br /&gt;
						return titles;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		subcategories: {&lt;br /&gt;
			uri: &#039;/api.php?format=json&amp;amp;action=query&amp;amp;list=categorymembers&amp;amp;cmtype=subcat&amp;amp;cmlimit=max&amp;amp;cmtitle=Category:$1&#039;,&lt;br /&gt;
			handler: function ( queryResult ) {&lt;br /&gt;
				if ( queryResult &amp;amp;&amp;amp; queryResult.query &amp;amp;&amp;amp; queryResult.query.categorymembers ) {&lt;br /&gt;
					var titles = queryResult.query.categorymembers;&lt;br /&gt;
					for ( var i = 0; i &amp;lt; titles.length; i++ ) titles[ i ] = titles[ i ].title.substring( titles[ i ].title.indexOf( &#039;:&#039; ) + 1 ); // rm namespace&lt;br /&gt;
&lt;br /&gt;
					return titles;&lt;br /&gt;
				}&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		parentcategories: {&lt;br /&gt;
			uri: &#039;/api.php?format=json&amp;amp;action=query&amp;amp;prop=categories&amp;amp;titles=Category:$1&amp;amp;cllimit=max&#039;,&lt;br /&gt;
			handler: function ( queryResult ) {&lt;br /&gt;
				if ( queryResult &amp;amp;&amp;amp; queryResult.query &amp;amp;&amp;amp; queryResult.query.pages ) {&lt;br /&gt;
					for ( var p in queryResult.query.pages ) {&lt;br /&gt;
						if ( queryResult.query.pages[ p ].categories ) {&lt;br /&gt;
							var titles = queryResult.query.pages[ p ].categories;&lt;br /&gt;
							for ( var i = 0; i &amp;lt; titles.length; i++ ) titles[ i ] = titles[ i ].title.substring( titles[ i ].title.indexOf( &#039;:&#039; ) + 1 ); // rm namespace&lt;br /&gt;
&lt;br /&gt;
							return titles;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				return null;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var suggestionConfigs = {&lt;br /&gt;
		searchindex: {&lt;br /&gt;
			name: &#039;Search index&#039;,&lt;br /&gt;
			engines: [ &#039;opensearch&#039; ],&lt;br /&gt;
			cache: {},&lt;br /&gt;
			show: true,&lt;br /&gt;
			temp: false,&lt;br /&gt;
			noCompletion: false&lt;br /&gt;
		},&lt;br /&gt;
		pagelist: {&lt;br /&gt;
			name: &#039;Page list&#039;,&lt;br /&gt;
			engines: [ &#039;internalsearch&#039;, &#039;exists&#039; ],&lt;br /&gt;
			cache: {},&lt;br /&gt;
			show: true,&lt;br /&gt;
			temp: false,&lt;br /&gt;
			noCompletion: false&lt;br /&gt;
		},&lt;br /&gt;
		combined: {&lt;br /&gt;
			name: &#039;Combined search&#039;,&lt;br /&gt;
			engines: [ &#039;opensearch&#039;, &#039;internalsearch&#039; ],&lt;br /&gt;
			cache: {},&lt;br /&gt;
			show: true,&lt;br /&gt;
			temp: false,&lt;br /&gt;
			noCompletion: false&lt;br /&gt;
		},&lt;br /&gt;
		subcat: {&lt;br /&gt;
			name: &#039;Subcategories&#039;,&lt;br /&gt;
			engines: [ &#039;subcategories&#039; ],&lt;br /&gt;
			cache: {},&lt;br /&gt;
			show: true,&lt;br /&gt;
			temp: true,&lt;br /&gt;
			noCompletion: true&lt;br /&gt;
		},&lt;br /&gt;
		parentcat: {&lt;br /&gt;
			name: &#039;Parent categories&#039;,&lt;br /&gt;
			engines: [ &#039;parentcategories&#039; ],&lt;br /&gt;
			cache: {},&lt;br /&gt;
			show: true,&lt;br /&gt;
			temp: true,&lt;br /&gt;
			noCompletion: true&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	CategoryEditor.UNCHANGED = 0;&lt;br /&gt;
	CategoryEditor.OPEN = 1; // Open, but no input yet&lt;br /&gt;
	CategoryEditor.CHANGE_PENDING = 2; // Open, some input made&lt;br /&gt;
	CategoryEditor.CHANGED = 3;&lt;br /&gt;
	CategoryEditor.DELETED = 4;&lt;br /&gt;
&lt;br /&gt;
	// Support: IE6&lt;br /&gt;
	// IE6 sometimes forgets to redraw the list when editors are opened or closed.&lt;br /&gt;
	// Adding/removing a dummy element helps, at least when opening editors.&lt;br /&gt;
	var dummyElement = make( &#039;\xa0&#039;, true );&lt;br /&gt;
&lt;br /&gt;
	function forceRedraw() {&lt;br /&gt;
		if ( dummyElement.parentNode ) document.body.removeChild( dummyElement ); else document.body.appendChild( dummyElement );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Event keyCodes that we handle in the text input field/suggestion list.&lt;br /&gt;
	var BS = 8,&lt;br /&gt;
		TAB = 9,&lt;br /&gt;
		RET = 13,&lt;br /&gt;
		ESC = 27,&lt;br /&gt;
		SPACE = 32,&lt;br /&gt;
		PGUP = 33,&lt;br /&gt;
		PGDOWN = 34,&lt;br /&gt;
		UP = 38,&lt;br /&gt;
		DOWN = 40,&lt;br /&gt;
		DEL = 46,&lt;br /&gt;
		IME = 229;&lt;br /&gt;
&lt;br /&gt;
	CategoryEditor.prototype = {&lt;br /&gt;
&lt;br /&gt;
		initialize: function ( line, span, after, key, is_hidden ) {&lt;br /&gt;
			// If a span is given, &#039;after&#039; is the category title, otherwise it may be an element after which to&lt;br /&gt;
			// insert the new span. &#039;key&#039; is likewise overloaded; if a span is given, it is the category key (if&lt;br /&gt;
			// known), otherwise it is a boolean indicating whether a bar shall be prepended.&lt;br /&gt;
			if ( !span ) {&lt;br /&gt;
				this.isAddCategory = true;&lt;br /&gt;
				// Create add span and append to catLinks&lt;br /&gt;
				this.originalCategory = &#039;&#039;;&lt;br /&gt;
				this.originalKey = null;&lt;br /&gt;
				this.originalExists = false;&lt;br /&gt;
				if ( !newDOM ) {&lt;br /&gt;
					span = make( &#039;span&#039; );&lt;br /&gt;
					span.className = &#039;noprint&#039;;&lt;br /&gt;
					if ( key ) {&lt;br /&gt;
						span.appendChild( make( &#039; | &#039;, true ) );&lt;br /&gt;
						if ( after ) {&lt;br /&gt;
							after.parentNode.insertBefore( span, after.nextSibling );&lt;br /&gt;
							after = after.nextSibling;&lt;br /&gt;
						} else if (line) {&lt;br /&gt;
							line.appendChild( span );&lt;br /&gt;
						}&lt;br /&gt;
					} else if ( line &amp;amp;&amp;amp; line.firstChild ) {&lt;br /&gt;
						span.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
						line.appendChild( span );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				this.linkSpan = make( &#039;span&#039; );&lt;br /&gt;
				this.linkSpan.className = &#039;noprint nopopups hotcatlink&#039;;&lt;br /&gt;
				var lk = make( &#039;a&#039; );&lt;br /&gt;
				lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
				lk.onclick = this.open.bind( this );&lt;br /&gt;
				lk.appendChild( make( HC.links.add, true ) );&lt;br /&gt;
				lk.title = HC.tooltips.add;&lt;br /&gt;
				this.linkSpan.appendChild( lk );&lt;br /&gt;
				span = make( newDOM ? &#039;li&#039; : &#039;span&#039; );&lt;br /&gt;
				span.className = &#039;noprint&#039;;&lt;br /&gt;
				if ( is_rtl ) span.dir = &#039;rtl&#039;;&lt;br /&gt;
&lt;br /&gt;
				span.appendChild( this.linkSpan );&lt;br /&gt;
				if ( after ) {&lt;br /&gt;
					after.parentNode.insertBefore( span, after.nextSibling );&lt;br /&gt;
				} else if ( line ) {&lt;br /&gt;
					line.appendChild( span );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				this.normalLinks = null;&lt;br /&gt;
				this.undelLink = null;&lt;br /&gt;
				this.catLink = null;&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( is_rtl ) span.dir = &#039;rtl&#039;;&lt;br /&gt;
&lt;br /&gt;
				this.isAddCategory = false;&lt;br /&gt;
				this.catLink = span.firstChild;&lt;br /&gt;
				this.originalCategory = after;&lt;br /&gt;
				this.originalKey = ( key &amp;amp;&amp;amp; key.length &amp;gt; 1 ) ? key.substr( 1 ) : null; // &amp;gt; 1 because it includes the leading bar&lt;br /&gt;
				this.originalExists = !hasClass( this.catLink, &#039;new&#039; );&lt;br /&gt;
				// Create change and del links&lt;br /&gt;
				this.makeLinkSpan();&lt;br /&gt;
				if ( !this.originalExists &amp;amp;&amp;amp; this.upDownLinks ) this.upDownLinks.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				span.appendChild( this.linkSpan );&lt;br /&gt;
			}&lt;br /&gt;
			this.originalHidden = is_hidden;&lt;br /&gt;
			this.line = line;&lt;br /&gt;
			this.engine = HC.suggestions;&lt;br /&gt;
			this.span = span;&lt;br /&gt;
			this.currentCategory = this.originalCategory;&lt;br /&gt;
			this.currentExists = this.originalExists;&lt;br /&gt;
			this.currentHidden = this.originalHidden;&lt;br /&gt;
			this.currentKey = this.originalKey;&lt;br /&gt;
			this.state = CategoryEditor.UNCHANGED;&lt;br /&gt;
			this.lastSavedState = CategoryEditor.UNCHANGED;&lt;br /&gt;
			this.lastSavedCategory = this.originalCategory;&lt;br /&gt;
			this.lastSavedKey = this.originalKey;&lt;br /&gt;
			this.lastSavedExists = this.originalExists;&lt;br /&gt;
			this.lastSavedHidden = this.originalHidden;&lt;br /&gt;
			if ( this.catLink &amp;amp;&amp;amp; this.currentKey ) this.catLink.title = this.currentKey;&lt;br /&gt;
&lt;br /&gt;
			editors[ editors.length ] = this;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeLinkSpan: function () {&lt;br /&gt;
			this.normalLinks = make( &#039;span&#039; );&lt;br /&gt;
			var lk = null;&lt;br /&gt;
			if ( this.originalCategory &amp;amp;&amp;amp; this.originalCategory.length ) {&lt;br /&gt;
				lk = make( &#039;a&#039; );&lt;br /&gt;
				lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
				lk.onclick = this.remove.bind( this );&lt;br /&gt;
				lk.appendChild( make( HC.links.remove, true ) );&lt;br /&gt;
				lk.title = HC.tooltips.remove;&lt;br /&gt;
				this.normalLinks.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
				this.normalLinks.appendChild( lk );&lt;br /&gt;
			}&lt;br /&gt;
			if ( !HC.template_categories[ this.originalCategory ] ) {&lt;br /&gt;
				lk = make( &#039;a&#039; );&lt;br /&gt;
				lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
				lk.onclick = this.open.bind( this );&lt;br /&gt;
				lk.appendChild( make( HC.links.change, true ) );&lt;br /&gt;
				lk.title = HC.tooltips.change;&lt;br /&gt;
				this.normalLinks.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
				this.normalLinks.appendChild( lk );&lt;br /&gt;
				if ( !noSuggestions &amp;amp;&amp;amp; HC.use_up_down ) {&lt;br /&gt;
					this.upDownLinks = make( &#039;span&#039; );&lt;br /&gt;
					lk = make( &#039;a&#039; );&lt;br /&gt;
					lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
					lk.onclick = this.down.bind( this );&lt;br /&gt;
					lk.appendChild( make( HC.links.down, true ) );&lt;br /&gt;
					lk.title = HC.tooltips.down;&lt;br /&gt;
					this.upDownLinks.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
					this.upDownLinks.appendChild( lk );&lt;br /&gt;
					lk = make( &#039;a&#039; );&lt;br /&gt;
					lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
					lk.onclick = this.up.bind( this );&lt;br /&gt;
					lk.appendChild( make( HC.links.up, true ) );&lt;br /&gt;
					lk.title = HC.tooltips.up;&lt;br /&gt;
					this.upDownLinks.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
					this.upDownLinks.appendChild( lk );&lt;br /&gt;
					this.normalLinks.appendChild( this.upDownLinks );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.linkSpan = make( &#039;span&#039; );&lt;br /&gt;
			this.linkSpan.className = &#039;noprint nopopups hotcatlink&#039;;&lt;br /&gt;
			this.linkSpan.appendChild( this.normalLinks );&lt;br /&gt;
			this.undelLink = make( &#039;span&#039; );&lt;br /&gt;
			this.undelLink.className = &#039;nopopups hotcatlink&#039;;&lt;br /&gt;
			this.undelLink.style.display = &#039;none&#039;;&lt;br /&gt;
			lk = make( &#039;a&#039; );&lt;br /&gt;
			lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
			lk.onclick = this.restore.bind( this );&lt;br /&gt;
			lk.appendChild( make( HC.links.restore, true ) );&lt;br /&gt;
			lk.title = HC.tooltips.restore;&lt;br /&gt;
			this.undelLink.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
			this.undelLink.appendChild( lk );&lt;br /&gt;
			this.linkSpan.appendChild( this.undelLink );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		invokeSuggestions: function ( dont_autocomplete ) {&lt;br /&gt;
			if ( this.engine &amp;amp;&amp;amp; suggestionConfigs[ this.engine ] &amp;amp;&amp;amp; suggestionConfigs[ this.engine ].temp &amp;amp;&amp;amp; !dont_autocomplete ) this.engine = HC.suggestions; // Reset to a search upon input&lt;br /&gt;
&lt;br /&gt;
			this.state = CategoryEditor.CHANGE_PENDING;&lt;br /&gt;
			var self = this;&lt;br /&gt;
			window.setTimeout( function () {&lt;br /&gt;
				self.textchange( dont_autocomplete );&lt;br /&gt;
			}, HC.suggest_delay );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeForm: function () {&lt;br /&gt;
			var form = make( &#039;form&#039; );&lt;br /&gt;
			form.method = &#039;POST&#039;;&lt;br /&gt;
			form.onsubmit = this.accept.bind( this );&lt;br /&gt;
			this.form = form;&lt;br /&gt;
			var self = this;&lt;br /&gt;
			var text = make( &#039;input&#039; );&lt;br /&gt;
			text.type = &#039;text&#039;;&lt;br /&gt;
			text.size = HC.editbox_width;&lt;br /&gt;
			if ( !noSuggestions ) {&lt;br /&gt;
				// Be careful here to handle IME input. This is browser/OS/IME dependent, but basically there are two mechanisms:&lt;br /&gt;
				// - Modern (DOM Level 3) browsers use compositionstart/compositionend events to signal composition; if the&lt;br /&gt;
				//   composition is not canceled, there&#039;ll be a textInput event following. During a composition key events are&lt;br /&gt;
				//   either all suppressed (FF/Gecko), or otherwise have keyDown === IME for all keys (Webkit).&lt;br /&gt;
				//   - Webkit sends a textInput followed by keyDown === IME and a keyUp with the key that ended composition.&lt;br /&gt;
				//   - Gecko doesn&#039;t send textInput but just a keyUp with the key that ended composition, without sending keyDown&lt;br /&gt;
				//     first. Gecko doesn&#039;t send any keydown while IME is active.&lt;br /&gt;
				// - Older browsers signal composition by keyDown === IME for the first and subsequent keys for a composition. The&lt;br /&gt;
				//   first keyDown !== IME is certainly after the end of the composition. Typically, composition end can also be&lt;br /&gt;
				//   detected by a keyDown IME with a keyUp of space, tab, escape, or return.&lt;br /&gt;
				text.onkeyup = function ( evt ) {&lt;br /&gt;
					var key = evt.keyCode || 0;&lt;br /&gt;
					if ( self.ime &amp;amp;&amp;amp; self.lastKey === IME &amp;amp;&amp;amp; !self.usesComposition &amp;amp;&amp;amp; ( key === TAB || key === RET || key === ESC || key === SPACE ) ) self.ime = false;&lt;br /&gt;
&lt;br /&gt;
					if ( self.ime ) return true;&lt;br /&gt;
&lt;br /&gt;
					if ( key === UP || key === DOWN || key === PGUP || key === PGDOWN ) {&lt;br /&gt;
						// In case a browser doesn&#039;t generate keypress events for arrow keys...&lt;br /&gt;
						if ( self.keyCount === 0 ) return self.processKey( evt );&lt;br /&gt;
					} else {&lt;br /&gt;
						if ( key === ESC &amp;amp;&amp;amp; self.lastKey !== IME ) {&lt;br /&gt;
							if ( !self.resetKeySelection() ) {&lt;br /&gt;
								// No undo of key selection: treat ESC as &amp;quot;cancel&amp;quot;.&lt;br /&gt;
								self.cancel();&lt;br /&gt;
								return;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
						// Also do this for ESC as a workaround for Firefox bug 524360&lt;br /&gt;
						// https://bugzilla.mozilla.org/show_bug.cgi?id=524360&lt;br /&gt;
						self.invokeSuggestions( key === BS || key === DEL || key === ESC );&lt;br /&gt;
					}&lt;br /&gt;
					return true;&lt;br /&gt;
				};&lt;br /&gt;
				text.onkeydown = function ( evt ) {&lt;br /&gt;
					var key = evt.keyCode || 0;&lt;br /&gt;
					self.lastKey = key;&lt;br /&gt;
					self.keyCount = 0;&lt;br /&gt;
					// DOM Level &amp;lt; 3 IME input&lt;br /&gt;
					if ( !self.ime &amp;amp;&amp;amp; key === IME &amp;amp;&amp;amp; !self.usesComposition ) {&lt;br /&gt;
						// self.usesComposition catches browsers that may emit spurious keydown IME after a composition has ended&lt;br /&gt;
						self.ime = true;&lt;br /&gt;
					} else if ( self.ime &amp;amp;&amp;amp; key !== IME &amp;amp;&amp;amp; !( key &amp;gt;= 16 &amp;amp;&amp;amp; key &amp;lt;= 20 || key &amp;gt;= 91 &amp;amp;&amp;amp; key &amp;lt;= 93 || key === 144 ) ) {&lt;br /&gt;
						// Ignore control keys: ctrl, shift, alt, alt gr, caps lock, windows/apple cmd keys, num lock. Only the windows keys&lt;br /&gt;
						// terminate IME (apple cmd doesn&#039;t), but they also cause a blur, so it&#039;s OK to ignore them here.&lt;br /&gt;
						// Note: Safari 4 (530.17) propagates ESC out of an IME composition (observed at least on Win XP).&lt;br /&gt;
						self.ime = false;&lt;br /&gt;
					}&lt;br /&gt;
					if ( self.ime ) return true;&lt;br /&gt;
&lt;br /&gt;
					// Handle return explicitly, to override the default form submission to be able to check for ctrl&lt;br /&gt;
					if ( key === RET ) return self.accept( evt );&lt;br /&gt;
&lt;br /&gt;
					// Inhibit default behavior of ESC (revert to last real input in FF: we do that ourselves)&lt;br /&gt;
					return ( key === ESC ) ? evtKill( evt ) : true;&lt;br /&gt;
				};&lt;br /&gt;
				// And handle continued pressing of arrow keys&lt;br /&gt;
				text.onkeypress = function ( evt ) {&lt;br /&gt;
					self.keyCount++;&lt;br /&gt;
					return self.processKey( evt );&lt;br /&gt;
				};&lt;br /&gt;
				$( text ).on( &#039;focus&#039;, function () {&lt;br /&gt;
					makeActive( self );&lt;br /&gt;
				} );&lt;br /&gt;
				// On IE, blur events are asynchronous, and may thus arrive after the element has lost the focus. Since IE&lt;br /&gt;
				// can get the selection only while the element is active (has the focus), we may not always get the selection.&lt;br /&gt;
				// Therefore, use an IE-specific synchronous event on IE...&lt;br /&gt;
				// Don&#039;t test for text.selectionStart being defined;&lt;br /&gt;
				$( text ).on(&lt;br /&gt;
					( text.onbeforedeactivate !== undefined &amp;amp;&amp;amp; text.createTextRange ) ? &#039;beforedeactivate&#039; : &#039;blur&#039;,&lt;br /&gt;
					this.saveView.bind( this ) );&lt;br /&gt;
				// DOM Level 3 IME handling&lt;br /&gt;
				try {&lt;br /&gt;
					// Setting lastKey = IME provides a fake keyDown for Gecko&#039;s single keyUp after a cmposition. If we didn&#039;t do this,&lt;br /&gt;
					// cancelling a composition via ESC would also cancel and close the whole category input editor.&lt;br /&gt;
					$( text ).on( &#039;compositionstart&#039;, function () {&lt;br /&gt;
						self.lastKey = IME;&lt;br /&gt;
						self.usesComposition = true;&lt;br /&gt;
						self.ime = true;&lt;br /&gt;
					} );&lt;br /&gt;
					$( text ).on( &#039;compositionend&#039;, function () {&lt;br /&gt;
						self.lastKey = IME;&lt;br /&gt;
						self.usesComposition = true;&lt;br /&gt;
						self.ime = false;&lt;br /&gt;
					} );&lt;br /&gt;
					$( text ).on( &#039;textInput&#039;, function () {&lt;br /&gt;
						self.ime = false;&lt;br /&gt;
						self.invokeSuggestions( false );&lt;br /&gt;
					} );&lt;br /&gt;
				} catch ( any ) {&lt;br /&gt;
					// Just in case some browsers might produce exceptions with these DOM Level 3 events&lt;br /&gt;
				}&lt;br /&gt;
				$( text ).on( &#039;blur&#039;, function () {&lt;br /&gt;
					self.usesComposition = false;&lt;br /&gt;
					self.ime = false;&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
			this.text = text;&lt;br /&gt;
&lt;br /&gt;
			this.icon = make( &#039;img&#039; );&lt;br /&gt;
&lt;br /&gt;
			var list = null;&lt;br /&gt;
			if ( !noSuggestions ) {&lt;br /&gt;
				list = make( &#039;select&#039; );&lt;br /&gt;
				list.onclick = function () {&lt;br /&gt;
					if ( self.highlightSuggestion( 0 ) ) self.textchange( false, true );&lt;br /&gt;
				};&lt;br /&gt;
				list.ondblclick = function ( e ) {&lt;br /&gt;
					if ( self.highlightSuggestion( 0 ) ) self.accept( e );&lt;br /&gt;
				};&lt;br /&gt;
				list.onchange = function () {&lt;br /&gt;
					self.highlightSuggestion( 0 );&lt;br /&gt;
					self.text.focus();&lt;br /&gt;
				};&lt;br /&gt;
				list.onkeyup = function ( evt ) {&lt;br /&gt;
					if ( evt.keyCode === ESC ) {&lt;br /&gt;
						self.resetKeySelection();&lt;br /&gt;
						self.text.focus();&lt;br /&gt;
						window.setTimeout( function () {&lt;br /&gt;
							self.textchange( true );&lt;br /&gt;
						}, HC.suggest_delay );&lt;br /&gt;
					} else if ( evt.keyCode === RET ) {&lt;br /&gt;
						self.accept( evt );&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				if ( !HC.fixed_search ) {&lt;br /&gt;
					var engineSelector = make( &#039;select&#039; );&lt;br /&gt;
					for ( var key in suggestionConfigs ) {&lt;br /&gt;
						if ( suggestionConfigs[ key ].show ) {&lt;br /&gt;
							var opt = make( &#039;option&#039; );&lt;br /&gt;
							opt.value = key;&lt;br /&gt;
							if ( key === this.engine ) opt.selected = true;&lt;br /&gt;
&lt;br /&gt;
							opt.appendChild( make( suggestionConfigs[ key ].name, true ) );&lt;br /&gt;
							engineSelector.appendChild( opt );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					engineSelector.onchange = function () {&lt;br /&gt;
						self.engine = self.engineSelector.options[ self.engineSelector.selectedIndex ].value;&lt;br /&gt;
						self.text.focus();&lt;br /&gt;
						self.textchange( true, true ); // Don&#039;t autocomplete, force re-display of list&lt;br /&gt;
					};&lt;br /&gt;
					this.engineSelector = engineSelector;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.list = list;&lt;br /&gt;
&lt;br /&gt;
			function button_label( id, defaultText ) {&lt;br /&gt;
				var label = null;&lt;br /&gt;
				if (&lt;br /&gt;
					onUpload &amp;amp;&amp;amp;&lt;br /&gt;
					window.UFUI !== undefined &amp;amp;&amp;amp;&lt;br /&gt;
					window.UIElements !== undefined &amp;amp;&amp;amp;&lt;br /&gt;
					UFUI.getLabel instanceof Function&lt;br /&gt;
				) {&lt;br /&gt;
					try {&lt;br /&gt;
						label = UFUI.getLabel( id, true );&lt;br /&gt;
						// Extract the plain text. IE doesn&#039;t know that Node.TEXT_NODE === 3&lt;br /&gt;
						while ( label &amp;amp;&amp;amp; label.nodeType !== 3 ) label = label.firstChild;&lt;br /&gt;
					} catch ( ex ) {&lt;br /&gt;
						label = null;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				if ( !label || !label.data ) return defaultText;&lt;br /&gt;
&lt;br /&gt;
				return label.data;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Do not use type &#039;submit&#039;; we cannot detect modifier keys if we do&lt;br /&gt;
			var OK = make( &#039;input&#039; );&lt;br /&gt;
			OK.type = &#039;button&#039;;&lt;br /&gt;
			OK.value = button_label( &#039;wpOkUploadLbl&#039;, HC.messages.ok );&lt;br /&gt;
			OK.onclick = this.accept.bind( this );&lt;br /&gt;
			this.ok = OK;&lt;br /&gt;
&lt;br /&gt;
			var cancel = make( &#039;input&#039; );&lt;br /&gt;
			cancel.type = &#039;button&#039;;&lt;br /&gt;
			cancel.value = button_label( &#039;wpCancelUploadLbl&#039;, HC.messages.cancel );&lt;br /&gt;
			cancel.onclick = this.cancel.bind( this );&lt;br /&gt;
			this.cancelButton = cancel;&lt;br /&gt;
&lt;br /&gt;
			var span = make( &#039;span&#039; );&lt;br /&gt;
			span.className = &#039;hotcatinput&#039;;&lt;br /&gt;
			span.style.position = &#039;relative&#039;;&lt;br /&gt;
			span.appendChild( text );&lt;br /&gt;
&lt;br /&gt;
			// Support: IE8, IE9&lt;br /&gt;
			// Put some text into this span (a0 is nbsp) and make sure it always stays on the same&lt;br /&gt;
			// line as the input field, otherwise, IE8/9 miscalculates the height of the span and&lt;br /&gt;
			// then the engine selector may overlap the input field.&lt;br /&gt;
			span.appendChild( make( &#039;\xa0&#039;, true ) );&lt;br /&gt;
			span.style.whiteSpace = &#039;nowrap&#039;;&lt;br /&gt;
&lt;br /&gt;
			if ( list ) span.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
			if ( this.engineSelector ) span.appendChild( this.engineSelector );&lt;br /&gt;
&lt;br /&gt;
			if ( !noSuggestions ) span.appendChild( this.icon );&lt;br /&gt;
&lt;br /&gt;
			span.appendChild( OK );&lt;br /&gt;
			span.appendChild( cancel );&lt;br /&gt;
			form.appendChild( span );&lt;br /&gt;
			form.style.display = &#039;none&#039;;&lt;br /&gt;
			this.span.appendChild( form );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		display: function ( evt ) {&lt;br /&gt;
			if ( this.isAddCategory &amp;amp;&amp;amp; !onUpload &amp;amp;&amp;amp; this.line ) {&lt;br /&gt;
				// eslint-disable-next-line no-new&lt;br /&gt;
				new CategoryEditor( this.line, null, this.span, true ); // Create a new one&lt;br /&gt;
			}&lt;br /&gt;
			if ( !commitButton &amp;amp;&amp;amp; !onUpload ) {&lt;br /&gt;
				for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
					if ( editors[ i ].state !== CategoryEditor.UNCHANGED ) {&lt;br /&gt;
						setMultiInput();&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( !this.form ) this.makeForm();&lt;br /&gt;
&lt;br /&gt;
			if ( this.list ) this.list.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			this.currentCategory = this.lastSavedCategory;&lt;br /&gt;
			this.currentExists = this.lastSavedExists;&lt;br /&gt;
			this.currentHidden = this.lastSavedHidden;&lt;br /&gt;
			this.currentKey = this.lastSavedKey;&lt;br /&gt;
			this.icon.src = ( this.currentExists ? HC.existsYes : HC.existsNo );&lt;br /&gt;
			this.text.value = this.currentCategory + ( this.currentKey !== null ? &#039;|&#039; + this.currentKey : &#039;&#039; );&lt;br /&gt;
			this.originalState = this.state;&lt;br /&gt;
			this.lastInput = this.currentCategory;&lt;br /&gt;
			this.inputExists = this.currentExists;&lt;br /&gt;
			this.state = this.state === CategoryEditor.UNCHANGED ? CategoryEditor.OPEN : CategoryEditor.CHANGE_PENDING;&lt;br /&gt;
			this.lastSelection = {&lt;br /&gt;
				start: this.currentCategory.length,&lt;br /&gt;
				end: this.currentCategory.length&lt;br /&gt;
			};&lt;br /&gt;
			this.showsList = false;&lt;br /&gt;
			// Display the form&lt;br /&gt;
			if ( this.catLink ) this.catLink.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			this.linkSpan.style.display = &#039;none&#039;;&lt;br /&gt;
			this.form.style.display = &#039;inline&#039;;&lt;br /&gt;
			this.ok.disabled = false;&lt;br /&gt;
			// Kill the event before focussing, otherwise IE will kill the onfocus event!&lt;br /&gt;
			var result = evtKill( evt );&lt;br /&gt;
			this.text.focus();&lt;br /&gt;
			this.text.readOnly = false;&lt;br /&gt;
			checkMultiInput();&lt;br /&gt;
			return result;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		show: function ( evt, engine, readOnly ) {&lt;br /&gt;
			var result = this.display( evt );&lt;br /&gt;
			var v = this.lastSavedCategory;&lt;br /&gt;
			if ( !v.length ) return result;&lt;br /&gt;
&lt;br /&gt;
			this.text.readOnly = !!readOnly;&lt;br /&gt;
			this.engine = engine;&lt;br /&gt;
			this.textchange( false, true ); // do autocompletion, force display of suggestions&lt;br /&gt;
			forceRedraw();&lt;br /&gt;
			return result;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		open: function ( evt ) {&lt;br /&gt;
			return this.show( evt, ( this.engine &amp;amp;&amp;amp; suggestionConfigs[ this.engine ].temp ) ? HC.suggestions : this.engine );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		down: function ( evt ) {&lt;br /&gt;
			return this.show( evt, &#039;subcat&#039;, true );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		up: function ( evt ) {&lt;br /&gt;
			return this.show( evt, &#039;parentcat&#039; );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		cancel: function () {&lt;br /&gt;
			if ( this.isAddCategory &amp;amp;&amp;amp; !onUpload ) {&lt;br /&gt;
				this.removeEditor(); // We added a new adder when opening&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Close, re-display link&lt;br /&gt;
			this.inactivate();&lt;br /&gt;
			this.form.style.display = &#039;none&#039;;&lt;br /&gt;
			if ( this.catLink ) this.catLink.style.display = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
			this.linkSpan.style.display = &#039;&#039;;&lt;br /&gt;
			this.state = this.originalState;&lt;br /&gt;
			this.currentCategory = this.lastSavedCategory;&lt;br /&gt;
			this.currentKey = this.lastSavedKey;&lt;br /&gt;
			this.currentExists = this.lastSavedExists;&lt;br /&gt;
			this.currentHidden = this.lastSavedHidden;&lt;br /&gt;
			if ( this.catLink )&lt;br /&gt;
				if ( this.currentKey &amp;amp;&amp;amp; this.currentKey.length ) { this.catLink.title = this.currentKey; } else { this.catLink.title = &#039;&#039;; }&lt;br /&gt;
&lt;br /&gt;
			if ( this.state === CategoryEditor.UNCHANGED ) {&lt;br /&gt;
				if ( this.catLink ) this.catLink.style.backgroundColor = &#039;transparent&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( !onUpload ) {&lt;br /&gt;
					try {&lt;br /&gt;
						this.catLink.style.backgroundColor = HC.bg_changed;&lt;br /&gt;
					} catch ( ex ) {}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			checkMultiInput();&lt;br /&gt;
			forceRedraw();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		removeEditor: function () {&lt;br /&gt;
			if ( !newDOM ) {&lt;br /&gt;
				var next = this.span.nextSibling;&lt;br /&gt;
				if ( next ) next.parentNode.removeChild( next );&lt;br /&gt;
			}&lt;br /&gt;
			if (this.span &amp;amp;&amp;amp; this.span.parentNode) {&lt;br /&gt;
				this.span.parentNode.removeChild( this.span );&lt;br /&gt;
			}&lt;br /&gt;
			for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
				if ( editors[ i ] === this ) {&lt;br /&gt;
					editors.splice( i, 1 );&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			checkMultiInput();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		rollback: function ( evt ) {&lt;br /&gt;
			this.undoLink.parentNode.removeChild( this.undoLink );&lt;br /&gt;
			this.undoLink = null;&lt;br /&gt;
			this.currentCategory = this.originalCategory;&lt;br /&gt;
			this.currentKey = this.originalKey;&lt;br /&gt;
			this.currentExists = this.originalExists;&lt;br /&gt;
			this.currentHidden = this.originalHidden;&lt;br /&gt;
			this.lastSavedCategory = this.originalCategory;&lt;br /&gt;
			this.lastSavedKey = this.originalKey;&lt;br /&gt;
			this.lastSavedExists = this.originalExists;&lt;br /&gt;
			this.lastSavedHidden = this.originalHidden;&lt;br /&gt;
			this.state = CategoryEditor.UNCHANGED;&lt;br /&gt;
			if ( !this.currentCategory || !this.currentCategory.length ) {&lt;br /&gt;
				// It was a newly added category. Remove the whole editor.&lt;br /&gt;
				this.removeEditor();&lt;br /&gt;
			} else {&lt;br /&gt;
				// Redisplay the link...&lt;br /&gt;
				this.catLink.removeChild( this.catLink.firstChild );&lt;br /&gt;
				this.catLink.appendChild( make( this.currentCategory, true ) );&lt;br /&gt;
				this.catLink.href = wikiPagePath( HC.category_canonical + &#039;:&#039; + this.currentCategory );&lt;br /&gt;
				this.catLink.title = this.currentKey || &#039;&#039;;&lt;br /&gt;
				this.catLink.className = this.currentExists ? &#039;&#039; : &#039;new&#039;;&lt;br /&gt;
				this.catLink.style.backgroundColor = &#039;transparent&#039;;&lt;br /&gt;
				if ( this.upDownLinks ) this.upDownLinks.style.display = this.currentExists ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				checkMultiInput();&lt;br /&gt;
			}&lt;br /&gt;
			return evtKill( evt );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		inactivate: function () {&lt;br /&gt;
			if ( this.list ) this.list.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			this.is_active = false;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		acceptCheck: function ( dontCheck ) {&lt;br /&gt;
			this.sanitizeInput();&lt;br /&gt;
			var value = this.text.value.split( &#039;|&#039; );&lt;br /&gt;
			var key = null;&lt;br /&gt;
			if ( value.length &amp;gt; 1 ) key = value[ 1 ];&lt;br /&gt;
&lt;br /&gt;
			var v = value[ 0 ].replace( /_/g, &#039; &#039; ).replace( /^\s+|\s+$/g, &#039;&#039; );&lt;br /&gt;
			if ( HC.capitalizePageNames ) v = capitalize( v );&lt;br /&gt;
&lt;br /&gt;
			this.lastInput = v;&lt;br /&gt;
			v = replaceShortcuts( v, HC.shortcuts );&lt;br /&gt;
			if ( !v.length ) {&lt;br /&gt;
				this.cancel();&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
			if ( !dontCheck &amp;amp;&amp;amp; (&lt;br /&gt;
				conf.wgNamespaceNumber === 14 &amp;amp;&amp;amp; v === conf.wgTitle || HC.blacklist &amp;amp;&amp;amp; HC.blacklist.test( v ) ) ) {&lt;br /&gt;
				this.cancel();&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
			this.currentCategory = v;&lt;br /&gt;
			this.currentKey = key;&lt;br /&gt;
			this.currentExists = this.inputExists;&lt;br /&gt;
			return true;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		accept: function ( evt ) {&lt;br /&gt;
			// eslint-disable-next-line no-bitwise&lt;br /&gt;
			this.noCommit = ( evtKeys( evt ) &amp;amp; 1 ) !== 0;&lt;br /&gt;
			var result = evtKill( evt );&lt;br /&gt;
			if ( this.acceptCheck() ) {&lt;br /&gt;
				var toResolve = [ this ];&lt;br /&gt;
				var original = this.currentCategory;&lt;br /&gt;
				resolveMulti( toResolve, function ( resolved ) {&lt;br /&gt;
					if ( resolved[ 0 ].dab ) {&lt;br /&gt;
						showDab( resolved[ 0 ] );&lt;br /&gt;
					} else {&lt;br /&gt;
						if ( resolved[ 0 ].acceptCheck( true ) ) {&lt;br /&gt;
							resolved[ 0 ].commit(&lt;br /&gt;
								( resolved[ 0 ].currentCategory !== original ) ?&lt;br /&gt;
									HC.messages.cat_resolved.replace( /\$1/g, original ) :&lt;br /&gt;
									null );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
			return result;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		close: function () {&lt;br /&gt;
			if ( !this.catLink ) {&lt;br /&gt;
				// Create a catLink&lt;br /&gt;
				this.catLink = make( &#039;a&#039; );&lt;br /&gt;
				this.catLink.appendChild( make( &#039;foo&#039;, true ) );&lt;br /&gt;
				this.catLink.style.display = &#039;none&#039;;&lt;br /&gt;
				this.span.insertBefore( this.catLink, this.span.firstChild.nextSibling );&lt;br /&gt;
			}&lt;br /&gt;
			this.catLink.removeChild( this.catLink.firstChild );&lt;br /&gt;
			this.catLink.appendChild( make( this.currentCategory, true ) );&lt;br /&gt;
			this.catLink.href = wikiPagePath( HC.category_canonical + &#039;:&#039; + this.currentCategory );&lt;br /&gt;
			this.catLink.className = this.currentExists ? &#039;&#039; : &#039;new&#039;;&lt;br /&gt;
			this.lastSavedCategory = this.currentCategory;&lt;br /&gt;
			this.lastSavedKey = this.currentKey;&lt;br /&gt;
			this.lastSavedExists = this.currentExists;&lt;br /&gt;
			this.lastSavedHidden = this.currentHidden;&lt;br /&gt;
			// Close form and redisplay category&lt;br /&gt;
			this.inactivate();&lt;br /&gt;
			this.form.style.display = &#039;none&#039;;&lt;br /&gt;
			this.catLink.title = this.currentKey || &#039;&#039;;&lt;br /&gt;
			this.catLink.style.display = &#039;&#039;;&lt;br /&gt;
			if ( this.isAddCategory ) {&lt;br /&gt;
				if ( onUpload &amp;amp;&amp;amp; this.line ) {&lt;br /&gt;
					// eslint-disable-next-line no-new&lt;br /&gt;
					new CategoryEditor( this.line, null, this.span, true ); // Create a new one&lt;br /&gt;
				}&lt;br /&gt;
				this.isAddCategory = false;&lt;br /&gt;
				this.linkSpan.parentNode.removeChild( this.linkSpan );&lt;br /&gt;
				this.makeLinkSpan();&lt;br /&gt;
				this.span.appendChild( this.linkSpan );&lt;br /&gt;
			}&lt;br /&gt;
			if ( !this.undoLink ) {&lt;br /&gt;
				// Append an undo link.&lt;br /&gt;
				var span = make( &#039;span&#039; );&lt;br /&gt;
				var lk = make( &#039;a&#039; );&lt;br /&gt;
				lk.href = &#039;#catlinks&#039;;&lt;br /&gt;
				lk.onclick = this.rollback.bind( this );&lt;br /&gt;
				lk.appendChild( make( HC.links.undo, true ) );&lt;br /&gt;
				lk.title = HC.tooltips.undo;&lt;br /&gt;
				span.appendChild( make( &#039; &#039;, true ) );&lt;br /&gt;
				span.appendChild( lk );&lt;br /&gt;
				this.normalLinks.appendChild( span );&lt;br /&gt;
				this.undoLink = span;&lt;br /&gt;
				if ( !onUpload ) {&lt;br /&gt;
					try {&lt;br /&gt;
						this.catLink.style.backgroundColor = HC.bg_changed;&lt;br /&gt;
					} catch ( ex ) {}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( this.upDownLinks ) this.upDownLinks.style.display = this.lastSavedExists ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
			this.linkSpan.style.display = &#039;&#039;;&lt;br /&gt;
			this.state = CategoryEditor.CHANGED;&lt;br /&gt;
			checkMultiInput();&lt;br /&gt;
			forceRedraw();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		commit: function () {&lt;br /&gt;
			// Check again to catch problem cases after redirect resolution&lt;br /&gt;
			if (&lt;br /&gt;
				(&lt;br /&gt;
					this.currentCategory === this.originalCategory &amp;amp;&amp;amp;&lt;br /&gt;
					(&lt;br /&gt;
						this.currentKey === this.originalKey ||&lt;br /&gt;
						this.currentKey === null &amp;amp;&amp;amp; !this.originalKey.length&lt;br /&gt;
					)&lt;br /&gt;
				) ||&lt;br /&gt;
				conf.wgNamespaceNumber === 14 &amp;amp;&amp;amp; this.currentCategory === conf.wgTitle ||&lt;br /&gt;
				HC.blacklist &amp;amp;&amp;amp; HC.blacklist.test( this.currentCategory )&lt;br /&gt;
			) {&lt;br /&gt;
				this.cancel();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.close();&lt;br /&gt;
			if ( !commitButton &amp;amp;&amp;amp; !onUpload ) {&lt;br /&gt;
				var self = this;&lt;br /&gt;
				initiateEdit( function ( failure ) {&lt;br /&gt;
					performChanges( failure, self );&lt;br /&gt;
				}, function ( msg ) {&lt;br /&gt;
					alert( msg );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		remove: function ( evt ) {&lt;br /&gt;
			// eslint-disable-next-line no-bitwise&lt;br /&gt;
			this.doRemove( evtKeys( evt ) &amp;amp; 1 );&lt;br /&gt;
			return evtKill( evt );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		doRemove: function ( noCommit ) {&lt;br /&gt;
			if ( this.isAddCategory ) { // Empty input on adding a new category&lt;br /&gt;
				this.cancel();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if ( !commitButton &amp;amp;&amp;amp; !onUpload ) {&lt;br /&gt;
				for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
					if ( editors[ i ].state !== CategoryEditor.UNCHANGED ) {&lt;br /&gt;
						setMultiInput();&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( commitButton ) {&lt;br /&gt;
				this.catLink.title = &#039;&#039;;&lt;br /&gt;
				this.catLink.style.cssText += &#039;; text-decoration : line-through !important;&#039;;&lt;br /&gt;
				try {&lt;br /&gt;
					this.catLink.style.backgroundColor = HC.bg_changed;&lt;br /&gt;
				} catch ( ex ) {}&lt;br /&gt;
				this.originalState = this.state;&lt;br /&gt;
				this.state = CategoryEditor.DELETED;&lt;br /&gt;
				this.normalLinks.style.display = &#039;none&#039;;&lt;br /&gt;
				this.undelLink.style.display = &#039;&#039;;&lt;br /&gt;
				checkMultiInput();&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( onUpload ) {&lt;br /&gt;
					// Remove this editor completely&lt;br /&gt;
					this.removeEditor();&lt;br /&gt;
				} else {&lt;br /&gt;
					this.originalState = this.state;&lt;br /&gt;
					this.state = CategoryEditor.DELETED;&lt;br /&gt;
					this.noCommit = noCommit || HC.del_needs_diff;&lt;br /&gt;
					var self = this;&lt;br /&gt;
					initiateEdit(&lt;br /&gt;
						function ( failure ) {&lt;br /&gt;
							performChanges( failure, self );&lt;br /&gt;
						},&lt;br /&gt;
						function ( msg ) {&lt;br /&gt;
							self.state = self.originalState;&lt;br /&gt;
							alert( msg );&lt;br /&gt;
						} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		restore: function ( evt ) {&lt;br /&gt;
			// Can occur only if we do have a commit button and are not on the upload form&lt;br /&gt;
			this.catLink.title = this.currentKey || &#039;&#039;;&lt;br /&gt;
			this.catLink.style.textDecoration = &#039;&#039;;&lt;br /&gt;
			this.state = this.originalState;&lt;br /&gt;
			if ( this.state === CategoryEditor.UNCHANGED ) {&lt;br /&gt;
				this.catLink.style.backgroundColor = &#039;transparent&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				try {&lt;br /&gt;
					this.catLink.style.backgroundColor = HC.bg_changed;&lt;br /&gt;
				} catch ( ex ) {}&lt;br /&gt;
			}&lt;br /&gt;
			this.normalLinks.style.display = &#039;&#039;;&lt;br /&gt;
			this.undelLink.style.display = &#039;none&#039;;&lt;br /&gt;
			checkMultiInput();&lt;br /&gt;
			return evtKill( evt );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// Internal operations&lt;br /&gt;
&lt;br /&gt;
		selectEngine: function ( engineName ) {&lt;br /&gt;
			if ( !this.engineSelector ) return;&lt;br /&gt;
			for ( var i = 0; i &amp;lt; this.engineSelector.options.length; i++ ) this.engineSelector.options[ i ].selected = this.engineSelector.options[ i ].value === engineName;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		sanitizeInput: function () {&lt;br /&gt;
			var v = this.text.value || &#039;&#039;;&lt;br /&gt;
			v = v.replace( /^(\s|_)+/, &#039;&#039; ); // Trim leading blanks and underscores&lt;br /&gt;
			var re = new RegExp( &#039;^(&#039; + HC.category_regexp + &#039;):&#039; );&lt;br /&gt;
			if ( re.test( v ) ) v = v.substring( v.indexOf( &#039;:&#039; ) + 1 ).replace( /^(\s|_)+/, &#039;&#039; );&lt;br /&gt;
			v = v.replace(/\u200E$/, &#039;&#039;); // Trim ending left-to-right mark&lt;br /&gt;
			if ( HC.capitalizePageNames ) v = capitalize( v );&lt;br /&gt;
&lt;br /&gt;
			// Only update the input field if there is a difference. Various browsers otherwise&lt;br /&gt;
			// reset the selection and cursor position after each value re-assignment.&lt;br /&gt;
			if ( this.text.value !== null &amp;amp;&amp;amp; this.text.value !== v ) this.text.value = v;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeCall: function ( url, callbackObj, engine, queryKey, cleanKey ) {&lt;br /&gt;
			var cb = callbackObj,&lt;br /&gt;
				e = engine,&lt;br /&gt;
				v = queryKey,&lt;br /&gt;
				z = cleanKey,&lt;br /&gt;
				thisObj = this;&lt;br /&gt;
&lt;br /&gt;
			function done() {&lt;br /&gt;
				cb.callsMade++;&lt;br /&gt;
				if ( cb.callsMade === cb.nofCalls ) {&lt;br /&gt;
					if ( cb.exists ) cb.allTitles.exists = true;&lt;br /&gt;
&lt;br /&gt;
					if ( cb.normalized ) cb.allTitles.normalized = cb.normalized;&lt;br /&gt;
&lt;br /&gt;
					if ( !cb.dontCache &amp;amp;&amp;amp; !suggestionConfigs[ cb.engineName ].cache[ z ] ) suggestionConfigs[ cb.engineName ].cache[ z ] = cb.allTitles;&lt;br /&gt;
&lt;br /&gt;
					thisObj.text.readOnly = false;&lt;br /&gt;
					if ( !cb.cancelled ) thisObj.showSuggestions( cb.allTitles, cb.noCompletion, v, cb.engineName );&lt;br /&gt;
&lt;br /&gt;
					if ( cb === thisObj.callbackObj ) thisObj.callbackObj = null;&lt;br /&gt;
&lt;br /&gt;
					cb = undefined;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$.getJSON( url, function ( json ) {&lt;br /&gt;
				var titles = e.handler( json, z );&lt;br /&gt;
				if ( titles &amp;amp;&amp;amp; titles.length ) {&lt;br /&gt;
					if ( cb.allTitles === null ) cb.allTitles = titles; else cb.allTitles = cb.allTitles.concat( titles );&lt;br /&gt;
					if ( titles.exists ) cb.exists = true;&lt;br /&gt;
					if ( titles.normalized ) cb.normalized = titles.normalized;&lt;br /&gt;
				}&lt;br /&gt;
				done();&lt;br /&gt;
			} ).fail( function ( req ) {&lt;br /&gt;
				if ( !req ) noSuggestions = true;&lt;br /&gt;
				cb.dontCache = true;&lt;br /&gt;
				done();&lt;br /&gt;
			} );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		callbackObj: null,&lt;br /&gt;
&lt;br /&gt;
		textchange: function ( dont_autocomplete, force ) {&lt;br /&gt;
			// Hide all other lists&lt;br /&gt;
			makeActive( this );&lt;br /&gt;
			// Get input value, omit sort key, if any&lt;br /&gt;
			this.sanitizeInput();&lt;br /&gt;
			var v = this.text.value;&lt;br /&gt;
			// Disregard anything after a pipe.&lt;br /&gt;
			var pipe = v.indexOf( &#039;|&#039; );&lt;br /&gt;
			if ( pipe &amp;gt;= 0 ) {&lt;br /&gt;
				this.currentKey = v.substring( pipe + 1 );&lt;br /&gt;
				v = v.substring( 0, pipe );&lt;br /&gt;
			} else {&lt;br /&gt;
				this.currentKey = null;&lt;br /&gt;
			}&lt;br /&gt;
			if ( this.lastInput === v &amp;amp;&amp;amp; !force ) return; // No change&lt;br /&gt;
			if ( this.lastInput !== v ) checkMultiInput();&lt;br /&gt;
&lt;br /&gt;
			this.lastInput = v;&lt;br /&gt;
			this.lastRealInput = v;&lt;br /&gt;
&lt;br /&gt;
			// Mark blacklisted inputs.&lt;br /&gt;
			this.ok.disabled = v.length &amp;amp;&amp;amp; HC.blacklist &amp;amp;&amp;amp; HC.blacklist.test( v );&lt;br /&gt;
&lt;br /&gt;
			if ( noSuggestions ) {&lt;br /&gt;
			// No Ajax: just make sure the list is hidden&lt;br /&gt;
				if ( this.list ) this.list.style.display = &#039;none&#039;;&lt;br /&gt;
				if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
				if ( this.icon ) this.icon.style.display = &#039;none&#039;;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( !v.length ) {&lt;br /&gt;
				this.showSuggestions( [] );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var cleanKey = v.replace( /[\u200E\u200F\u202A-\u202E]/g, &#039;&#039; ).replace( wikiTextBlankRE, &#039; &#039; );&lt;br /&gt;
			cleanKey = replaceShortcuts( cleanKey, HC.shortcuts );&lt;br /&gt;
			cleanKey = cleanKey.replace( /^\s+|\s+$/g, &#039;&#039; );&lt;br /&gt;
			if ( !cleanKey.length ) {&lt;br /&gt;
				this.showSuggestions( [] );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( this.callbackObj ) this.callbackObj.cancelled = true;&lt;br /&gt;
&lt;br /&gt;
			var engineName = suggestionConfigs[ this.engine ] ? this.engine : &#039;combined&#039;;&lt;br /&gt;
&lt;br /&gt;
			dont_autocomplete = dont_autocomplete || suggestionConfigs[ engineName ].noCompletion;&lt;br /&gt;
			if ( suggestionConfigs[ engineName ].cache[ cleanKey ] ) {&lt;br /&gt;
				this.showSuggestions( suggestionConfigs[ engineName ].cache[ cleanKey ], dont_autocomplete, v, engineName );&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var engines = suggestionConfigs[ engineName ].engines;&lt;br /&gt;
			this.callbackObj = {&lt;br /&gt;
				allTitles: null,&lt;br /&gt;
				callsMade: 0,&lt;br /&gt;
				nofCalls: engines.length,&lt;br /&gt;
				noCompletion: dont_autocomplete,&lt;br /&gt;
				engineName: engineName&lt;br /&gt;
			};&lt;br /&gt;
			this.makeCalls( engines, this.callbackObj, v, cleanKey );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeCalls: function ( engines, cb, v, cleanKey ) {&lt;br /&gt;
			for ( var j = 0; j &amp;lt; engines.length; j++ ) {&lt;br /&gt;
				var engine = suggestionEngines[ engines[ j ] ];&lt;br /&gt;
				var url = conf.wgServer + conf.wgScriptPath + engine.uri.replace( /\$1/g, encodeURIComponent( cleanKey ) );&lt;br /&gt;
				this.makeCall( url, cb, engine, v, cleanKey );&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		showSuggestions: function ( titles, dontAutocomplete, queryKey, engineName ) {&lt;br /&gt;
			this.text.readOnly = false;&lt;br /&gt;
			this.dab = null;&lt;br /&gt;
			this.showsList = false;&lt;br /&gt;
			if ( !this.list ) return;&lt;br /&gt;
			if ( noSuggestions ) {&lt;br /&gt;
				if ( this.list ) this.list.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( this.icon ) this.icon.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				this.inputExists = true; // Default...&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			this.engineName = engineName;&lt;br /&gt;
			if ( engineName ) {&lt;br /&gt;
				if ( !this.engineSelector ) this.engineName = null;&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			if ( queryKey ) {&lt;br /&gt;
				if ( this.lastInput.indexOf( queryKey ) ) return;&lt;br /&gt;
				if ( this.lastQuery &amp;amp;&amp;amp; this.lastInput.indexOf( this.lastQuery ) === 0 &amp;amp;&amp;amp; this.lastQuery.length &amp;gt; queryKey.length ) return;&lt;br /&gt;
			}&lt;br /&gt;
			this.lastQuery = queryKey;&lt;br /&gt;
&lt;br /&gt;
			// Get current input text&lt;br /&gt;
			var v = this.text.value.split( &#039;|&#039; );&lt;br /&gt;
			var key = v.length &amp;gt; 1 ? &#039;|&#039; + v[ 1 ] : &#039;&#039;;&lt;br /&gt;
			v = ( HC.capitalizePageNames ? capitalize( v[ 0 ] ) : v[ 0 ] );&lt;br /&gt;
			var vNormalized = v;&lt;br /&gt;
			var knownToExist = titles &amp;amp;&amp;amp; titles.exists;&lt;br /&gt;
			var i;&lt;br /&gt;
			if ( titles ) {&lt;br /&gt;
				if ( titles.normalized &amp;amp;&amp;amp; v.indexOf( queryKey ) === 0 ) {&lt;br /&gt;
				// We got back a different normalization than what is in the input field&lt;br /&gt;
					vNormalized = titles.normalized + v.substring( queryKey.length );&lt;br /&gt;
				}&lt;br /&gt;
				var vLow = vNormalized.toLowerCase();&lt;br /&gt;
				// Strip blacklisted categories&lt;br /&gt;
				if ( HC.blacklist ) {&lt;br /&gt;
					for ( i = 0; i &amp;lt; titles.length; i++ ) {&lt;br /&gt;
						if ( HC.blacklist.test( titles[ i ] ) ) {&lt;br /&gt;
							titles.splice( i, 1 );&lt;br /&gt;
							i--;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				titles.sort(&lt;br /&gt;
					function ( a, b ) {&lt;br /&gt;
						if ( a === b ) return 0;&lt;br /&gt;
&lt;br /&gt;
						if ( a.indexOf( b ) === 0 ) return 1;&lt;br /&gt;
						// a begins with b: a &amp;gt; b&lt;br /&gt;
						if ( b.indexOf( a ) === 0 ) return -1;&lt;br /&gt;
						// b begins with a: a &amp;lt; b&lt;br /&gt;
						// Opensearch may return stuff not beginning with the search prefix!&lt;br /&gt;
						var prefixMatchA = ( a.indexOf( vNormalized ) === 0 ? 1 : 0 );&lt;br /&gt;
						var prefixMatchB = ( b.indexOf( vNormalized ) === 0 ? 1 : 0 );&lt;br /&gt;
						if ( prefixMatchA !== prefixMatchB ) return prefixMatchB - prefixMatchA;&lt;br /&gt;
&lt;br /&gt;
						// Case-insensitive prefix match!&lt;br /&gt;
						var aLow = a.toLowerCase(),&lt;br /&gt;
							bLow = b.toLowerCase();&lt;br /&gt;
						prefixMatchA = ( aLow.indexOf( vLow ) === 0 ? 1 : 0 );&lt;br /&gt;
						prefixMatchB = ( bLow.indexOf( vLow ) === 0 ? 1 : 0 );&lt;br /&gt;
						if ( prefixMatchA !== prefixMatchB ) return prefixMatchB - prefixMatchA;&lt;br /&gt;
&lt;br /&gt;
						if ( a &amp;lt; b ) return -1;&lt;br /&gt;
&lt;br /&gt;
						if ( b &amp;lt; a ) return 1;&lt;br /&gt;
&lt;br /&gt;
						return 0;&lt;br /&gt;
					} );&lt;br /&gt;
				// Remove duplicates and self-references&lt;br /&gt;
				for ( i = 0; i &amp;lt; titles.length; i++ ) {&lt;br /&gt;
					if (&lt;br /&gt;
						i + 1 &amp;lt; titles.length &amp;amp;&amp;amp; titles[ i ] === titles[ i + 1 ] ||&lt;br /&gt;
						conf.wgNamespaceNumber === 14 &amp;amp;&amp;amp; titles[ i ] === conf.wgTitle&lt;br /&gt;
					) {&lt;br /&gt;
						titles.splice( i, 1 );&lt;br /&gt;
						i--;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( !titles || !titles.length ) {&lt;br /&gt;
				if ( this.list ) this.list.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( engineName &amp;amp;&amp;amp; suggestionConfigs[ engineName ] &amp;amp;&amp;amp; !suggestionConfigs[ engineName ].temp ) {&lt;br /&gt;
					if ( this.icon ) this.icon.src = HC.existsNo;&lt;br /&gt;
&lt;br /&gt;
					this.inputExists = false;&lt;br /&gt;
				}&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var firstTitle = titles[ 0 ];&lt;br /&gt;
			var completed = this.autoComplete( firstTitle, v, vNormalized, key, dontAutocomplete );&lt;br /&gt;
			var existing = completed || knownToExist || firstTitle === replaceShortcuts( v, HC.shortcuts );&lt;br /&gt;
			if ( engineName &amp;amp;&amp;amp; suggestionConfigs[ engineName ] &amp;amp;&amp;amp; !suggestionConfigs[ engineName ].temp ) {&lt;br /&gt;
				this.icon.src = ( existing ? HC.existsYes : HC.existsNo );&lt;br /&gt;
				this.inputExists = existing;&lt;br /&gt;
			}&lt;br /&gt;
			if ( completed ) {&lt;br /&gt;
				this.lastInput = firstTitle;&lt;br /&gt;
				if ( titles.length === 1 ) {&lt;br /&gt;
					this.list.style.display = &#039;none&#039;;&lt;br /&gt;
					if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// (Re-)fill the list&lt;br /&gt;
			while ( this.list.firstChild ) this.list.removeChild( this.list.firstChild );&lt;br /&gt;
&lt;br /&gt;
			for ( i = 0; i &amp;lt; titles.length; i++ ) {&lt;br /&gt;
				var opt = make( &#039;option&#039; );&lt;br /&gt;
				opt.appendChild( make( titles[ i ], true ) );&lt;br /&gt;
				opt.selected = completed &amp;amp;&amp;amp; ( i === 0 );&lt;br /&gt;
				this.list.appendChild( opt );&lt;br /&gt;
			}&lt;br /&gt;
			this.displayList();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		displayList: function () {&lt;br /&gt;
			this.showsList = true;&lt;br /&gt;
			if ( !this.is_active ) {&lt;br /&gt;
				this.list.style.display = &#039;none&#039;;&lt;br /&gt;
				if ( this.engineSelector ) this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var nofItems = ( this.list.options.length &amp;gt; HC.listSize ? HC.listSize : this.list.options.length );&lt;br /&gt;
			if ( nofItems &amp;lt;= 1 ) nofItems = 2;&lt;br /&gt;
&lt;br /&gt;
			this.list.size = nofItems;&lt;br /&gt;
			this.list.style.align = is_rtl ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
			this.list.style.zIndex = 5;&lt;br /&gt;
			this.list.style.position = &#039;absolute&#039;;&lt;br /&gt;
			// Compute initial list position. First the height.&lt;br /&gt;
			var anchor = is_rtl ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
			var listh = 0;&lt;br /&gt;
			if ( this.list.style.display === &#039;none&#039; ) {&lt;br /&gt;
				// Off-screen display to get the height&lt;br /&gt;
				this.list.style.top = this.text.offsetTop + &#039;px&#039;;&lt;br /&gt;
				this.list.style[ anchor ] = &#039;-10000px&#039;;&lt;br /&gt;
				this.list.style.display = &#039;&#039;;&lt;br /&gt;
				listh = this.list.offsetHeight;&lt;br /&gt;
				this.list.style.display = &#039;none&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				listh = this.list.offsetHeight;&lt;br /&gt;
			}&lt;br /&gt;
			// Approximate calculation of maximum list size&lt;br /&gt;
			var maxListHeight = listh;&lt;br /&gt;
			if ( nofItems &amp;lt; HC.listSize ) maxListHeight = ( listh / nofItems ) * HC.listSize;&lt;br /&gt;
&lt;br /&gt;
			function viewport( what ) {&lt;br /&gt;
				if ( is_webkit &amp;amp;&amp;amp; !document.evaluate ) {&lt;br /&gt;
				// Safari &amp;lt; 3.0&lt;br /&gt;
					return window[ &#039;inner&#039; + what ];&lt;br /&gt;
				}&lt;br /&gt;
				var s = &#039;client&#039; + what;&lt;br /&gt;
				if ( window.opera ) return document.body[ s ];&lt;br /&gt;
&lt;br /&gt;
				return ( document.documentElement ? document.documentElement[ s ] : 0 ) || document.body[ s ] || 0;&lt;br /&gt;
			}&lt;br /&gt;
			function scroll_offset( what ) {&lt;br /&gt;
				var s = &#039;scroll&#039; + what;&lt;br /&gt;
				var result = ( document.documentElement ? document.documentElement[ s ] : 0 ) || document.body[ s ] || 0;&lt;br /&gt;
				if ( is_rtl &amp;amp;&amp;amp; what === &#039;Left&#039; ) {&lt;br /&gt;
					// RTL inconsistencies.&lt;br /&gt;
					// FF: 0 at the far right, then increasingly negative values.&lt;br /&gt;
					// IE &amp;gt;= 8: 0 at the far right, then increasingly positive values.&lt;br /&gt;
					// Webkit: scrollWidth - clientWidth at the far right, then down to zero.&lt;br /&gt;
					// Opera: don&#039;t know...&lt;br /&gt;
					if ( result &amp;lt; 0 ) result = -result;&lt;br /&gt;
&lt;br /&gt;
					if ( !is_webkit ) result = scroll_offset( &#039;Width&#039; ) - viewport( &#039;Width&#039; ) - result;&lt;br /&gt;
&lt;br /&gt;
					// Now all have webkit behavior, i.e. zero if at the leftmost edge.&lt;br /&gt;
				}&lt;br /&gt;
				return result;&lt;br /&gt;
			}&lt;br /&gt;
			function position( node ) {&lt;br /&gt;
				// Stripped-down simplified position function. It&#039;s good enough for our purposes.&lt;br /&gt;
				if ( node.getBoundingClientRect ) {&lt;br /&gt;
					var box = node.getBoundingClientRect();&lt;br /&gt;
					return {&lt;br /&gt;
						x: Math.round( box.left + scroll_offset( &#039;Left&#039; ) ),&lt;br /&gt;
						y: Math.round( box.top + scroll_offset( &#039;Top&#039; ) )&lt;br /&gt;
					};&lt;br /&gt;
				}&lt;br /&gt;
				var t = 0,&lt;br /&gt;
					l = 0;&lt;br /&gt;
				do {&lt;br /&gt;
					t += ( node.offsetTop || 0 );&lt;br /&gt;
					l += ( node.offsetLeft || 0 );&lt;br /&gt;
					node = node.offsetParent;&lt;br /&gt;
				} while ( node );&lt;br /&gt;
				return {&lt;br /&gt;
					x: l,&lt;br /&gt;
					y: t&lt;br /&gt;
				};&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var textPos = position( this.text ),&lt;br /&gt;
				nl = 0,&lt;br /&gt;
				nt = 0,&lt;br /&gt;
				offset = 0,&lt;br /&gt;
				// Opera 9.5 somehow has offsetWidth = 0 here?? Use the next best value...&lt;br /&gt;
				textBoxWidth = this.text.offsetWidth || this.text.clientWidth;&lt;br /&gt;
			if ( this.engineName ) {&lt;br /&gt;
				this.engineSelector.style.zIndex = 5;&lt;br /&gt;
				this.engineSelector.style.position = &#039;absolute&#039;;&lt;br /&gt;
				this.engineSelector.style.width = textBoxWidth + &#039;px&#039;;&lt;br /&gt;
				// Figure out the height of this selector: display it off-screen, then hide it again.&lt;br /&gt;
				if ( this.engineSelector.style.display === &#039;none&#039; ) {&lt;br /&gt;
					this.engineSelector.style[ anchor ] = &#039;-10000px&#039;;&lt;br /&gt;
					this.engineSelector.style.top = &#039;0&#039;;&lt;br /&gt;
					this.engineSelector.style.display = &#039;&#039;;&lt;br /&gt;
					offset = this.engineSelector.offsetHeight;&lt;br /&gt;
					this.engineSelector.style.display = &#039;none&#039;;&lt;br /&gt;
				} else {&lt;br /&gt;
					offset = this.engineSelector.offsetHeight;&lt;br /&gt;
				}&lt;br /&gt;
				this.engineSelector.style[ anchor ] = nl + &#039;px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			if ( textPos.y &amp;lt; maxListHeight + offset + 1 ) {&lt;br /&gt;
			// The list might extend beyond the upper border of the page. Let&#039;s avoid that by placing it&lt;br /&gt;
			// below the input text field.&lt;br /&gt;
				nt = this.text.offsetHeight + offset + 1;&lt;br /&gt;
				if ( this.engineName ) this.engineSelector.style.top = this.text.offsetHeight + &#039;px&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				nt = -listh - offset - 1;&lt;br /&gt;
				if ( this.engineName ) this.engineSelector.style.top = -( offset + 1 ) + &#039;px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			this.list.style.top = nt + &#039;px&#039;;&lt;br /&gt;
			this.list.style.width = &#039;&#039;; // No fixed width (yet)&lt;br /&gt;
			this.list.style[ anchor ] = nl + &#039;px&#039;;&lt;br /&gt;
			if ( this.engineName ) {&lt;br /&gt;
				this.selectEngine( this.engineName );&lt;br /&gt;
				this.engineSelector.style.display = &#039;&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			this.list.style.display = &#039;block&#039;;&lt;br /&gt;
			// Set the width of the list&lt;br /&gt;
			if ( this.list.offsetWidth &amp;lt; textBoxWidth ) {&lt;br /&gt;
				this.list.style.width = textBoxWidth + &#039;px&#039;;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// If the list is wider than the textbox: make sure it fits horizontally into the browser window&lt;br /&gt;
			var scroll = scroll_offset( &#039;Left&#039; );&lt;br /&gt;
			var view_w = viewport( &#039;Width&#039; );&lt;br /&gt;
			var w = this.list.offsetWidth;&lt;br /&gt;
			var l_pos = position( this.list );&lt;br /&gt;
			var left = l_pos.x;&lt;br /&gt;
			var right = left + w;&lt;br /&gt;
			if ( left &amp;lt; scroll || right &amp;gt; scroll + view_w ) {&lt;br /&gt;
				if ( w &amp;gt; view_w ) {&lt;br /&gt;
					w = view_w;&lt;br /&gt;
					this.list.style.width = w + &#039;px&#039;;&lt;br /&gt;
					if ( is_rtl ) left = right - w; else right = left + w;&lt;br /&gt;
				}&lt;br /&gt;
				var relative_offset = 0;&lt;br /&gt;
				if ( left &amp;lt; scroll ) relative_offset = scroll - left; else if ( right &amp;gt; scroll + view_w ) relative_offset = -( right - scroll - view_w );&lt;br /&gt;
&lt;br /&gt;
				if ( is_rtl ) relative_offset = -relative_offset;&lt;br /&gt;
&lt;br /&gt;
				if ( relative_offset ) this.list.style[ anchor ] = ( nl + relative_offset ) + &#039;px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		autoComplete: function ( newVal, actVal, normalizedActVal, key, dontModify ) {&lt;br /&gt;
			if ( newVal === actVal ) return true;&lt;br /&gt;
&lt;br /&gt;
			if ( dontModify || this.ime || !this.canSelect() ) return false;&lt;br /&gt;
&lt;br /&gt;
			// If we can&#039;t select properly or an IME composition is ongoing, autocompletion would be a major annoyance to the user.&lt;br /&gt;
			if ( newVal.indexOf( actVal ) ) {&lt;br /&gt;
				// Maybe it&#039;ll work with the normalized value (NFC)?&lt;br /&gt;
				if ( normalizedActVal &amp;amp;&amp;amp; newVal.indexOf( normalizedActVal ) === 0 ) {&lt;br /&gt;
					if ( this.lastRealInput === actVal ) this.lastRealInput = normalizedActVal;&lt;br /&gt;
&lt;br /&gt;
					actVal = normalizedActVal;&lt;br /&gt;
				} else {&lt;br /&gt;
					return false;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// Actual input is a prefix of the new text. Fill in new text, selecting the newly added suffix&lt;br /&gt;
			// such that it can be easily removed by typing backspace if the suggestion is unwanted.&lt;br /&gt;
			this.text.focus();&lt;br /&gt;
			this.text.value = newVal + key;&lt;br /&gt;
			this.setSelection( actVal.length, newVal.length );&lt;br /&gt;
			return true;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		canSelect: function () {&lt;br /&gt;
			return this.text.setSelectionRange ||&lt;br /&gt;
			this.text.createTextRange ||&lt;br /&gt;
			this.text.selectionStart !== undefined &amp;amp;&amp;amp;&lt;br /&gt;
			this.text.selectionEnd !== undefined;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		setSelection: function ( from, to ) {&lt;br /&gt;
			// this.text must be focused (at least on IE)&lt;br /&gt;
			if ( !this.text.value ) return;&lt;br /&gt;
			if ( this.text.setSelectionRange ) { // e.g. khtml&lt;br /&gt;
				this.text.setSelectionRange( from, to );&lt;br /&gt;
			} else if ( this.text.selectionStart !== undefined ) {&lt;br /&gt;
				if ( from &amp;gt; this.text.selectionStart ) {&lt;br /&gt;
					this.text.selectionEnd = to;&lt;br /&gt;
					this.text.selectionStart = from;&lt;br /&gt;
				} else {&lt;br /&gt;
					this.text.selectionStart = from;&lt;br /&gt;
					this.text.selectionEnd = to;&lt;br /&gt;
				}&lt;br /&gt;
			} else if ( this.text.createTextRange ) { // IE&lt;br /&gt;
				var new_selection = this.text.createTextRange();&lt;br /&gt;
				new_selection.move( &#039;character&#039;, from );&lt;br /&gt;
				new_selection.moveEnd( &#039;character&#039;, to - from );&lt;br /&gt;
				new_selection.select();&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		getSelection: function () {&lt;br /&gt;
			var from = 0,&lt;br /&gt;
				to = 0;&lt;br /&gt;
			// this.text must be focused (at least on IE)&lt;br /&gt;
			if ( !this.text.value ) {&lt;br /&gt;
				// No text.&lt;br /&gt;
			} else if ( this.text.selectionStart !== undefined ) {&lt;br /&gt;
				from = this.text.selectionStart;&lt;br /&gt;
				to = this.text.selectionEnd;&lt;br /&gt;
			} else if ( document.selection &amp;amp;&amp;amp; document.selection.createRange ) { // IE&lt;br /&gt;
				var rng = document.selection.createRange().duplicate();&lt;br /&gt;
				if ( rng.parentElement() === this.text ) {&lt;br /&gt;
					try {&lt;br /&gt;
						var textRng = this.text.createTextRange();&lt;br /&gt;
						textRng.move( &#039;character&#039;, 0 );&lt;br /&gt;
						textRng.setEndPoint( &#039;EndToEnd&#039;, rng );&lt;br /&gt;
						// We&#039;re in a single-line input box: no need to care about IE&#039;s strange&lt;br /&gt;
						// handling of line ends&lt;br /&gt;
						to = textRng.text.length;&lt;br /&gt;
						textRng.setEndPoint( &#039;EndToStart&#039;, rng );&lt;br /&gt;
						from = textRng.text.length;&lt;br /&gt;
					} catch ( notFocused ) {&lt;br /&gt;
						from = this.text.value.length;&lt;br /&gt;
						to = from; // At end of text&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return {&lt;br /&gt;
				start: from,&lt;br /&gt;
				end: to&lt;br /&gt;
			};&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		saveView: function () {&lt;br /&gt;
			this.lastSelection = this.getSelection();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		processKey: function ( evt ) {&lt;br /&gt;
			var dir = 0;&lt;br /&gt;
			switch ( this.lastKey ) {&lt;br /&gt;
				case UP:&lt;br /&gt;
					dir = -1;&lt;br /&gt;
					break;&lt;br /&gt;
				case DOWN:&lt;br /&gt;
					dir = 1;&lt;br /&gt;
					break;&lt;br /&gt;
				case PGUP:&lt;br /&gt;
					dir = -HC.listSize;&lt;br /&gt;
					break;&lt;br /&gt;
				case PGDOWN:&lt;br /&gt;
					dir = HC.listSize;&lt;br /&gt;
					break;&lt;br /&gt;
				case ESC: // Inhibit default behavior (revert to last real input in FF: we do that ourselves)&lt;br /&gt;
					return evtKill( evt );&lt;br /&gt;
			}&lt;br /&gt;
			if ( dir ) {&lt;br /&gt;
				if ( this.list.style.display !== &#039;none&#039; ) {&lt;br /&gt;
				// List is visible, so there are suggestions&lt;br /&gt;
					this.highlightSuggestion( dir );&lt;br /&gt;
					// Kill the event, otherwise some browsers (e.g., Firefox) may additionally treat an up-arrow&lt;br /&gt;
					// as &amp;quot;place the text cursor at the front&amp;quot;, which we don&#039;t want here.&lt;br /&gt;
					return evtKill( evt );&lt;br /&gt;
				} else if (&lt;br /&gt;
					this.keyCount &amp;lt;= 1 &amp;amp;&amp;amp;&lt;br /&gt;
					( !this.callbackObj || this.callbackObj.callsMade === this.callbackObj.nofCalls )&lt;br /&gt;
				) {&lt;br /&gt;
					// If no suggestions displayed, get them, unless we&#039;re already getting them.&lt;br /&gt;
					this.textchange();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return true;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		highlightSuggestion: function ( dir ) {&lt;br /&gt;
			if ( noSuggestions || !this.list || this.list.style.display === &#039;none&#039; ) return false;&lt;br /&gt;
&lt;br /&gt;
			var curr = this.list.selectedIndex;&lt;br /&gt;
			var tgt = -1;&lt;br /&gt;
			if ( dir === 0 ) {&lt;br /&gt;
				if ( curr &amp;lt; 0 || curr &amp;gt;= this.list.options.length ) return false;&lt;br /&gt;
&lt;br /&gt;
				tgt = curr;&lt;br /&gt;
			} else {&lt;br /&gt;
				tgt = curr &amp;lt; 0 ? 0 : curr + dir;&lt;br /&gt;
				tgt = tgt &amp;lt; 0 ? 0 : tgt;&lt;br /&gt;
				if ( tgt &amp;gt;= this.list.options.length ) tgt = this.list.options.length - 1;&lt;br /&gt;
			}&lt;br /&gt;
			if ( tgt !== curr || dir === 0 ) {&lt;br /&gt;
				if ( curr &amp;gt;= 0 &amp;amp;&amp;amp; curr &amp;lt; this.list.options.length &amp;amp;&amp;amp; dir !== 0 ) this.list.options[ curr ].selected = false;&lt;br /&gt;
&lt;br /&gt;
				this.list.options[ tgt ].selected = true;&lt;br /&gt;
				// Get current input text&lt;br /&gt;
				var v = this.text.value.split( &#039;|&#039; );&lt;br /&gt;
				var key = v.length &amp;gt; 1 ? &#039;|&#039; + v[ 1 ] : &#039;&#039;;&lt;br /&gt;
				var completed = this.autoComplete( this.list.options[ tgt ].text, this.lastRealInput, null, key, false );&lt;br /&gt;
				if ( !completed || this.list.options[ tgt ].text === this.lastRealInput ) {&lt;br /&gt;
					this.text.value = this.list.options[ tgt ].text + key;&lt;br /&gt;
					if ( this.canSelect() ) this.setSelection( this.list.options[ tgt ].text.length, this.list.options[ tgt ].text.length );&lt;br /&gt;
				}&lt;br /&gt;
				this.lastInput = this.list.options[ tgt ].text;&lt;br /&gt;
				this.inputExists = true; // Might be wrong if from a dab list...&lt;br /&gt;
				if ( this.icon ) this.icon.src = HC.existsYes;&lt;br /&gt;
&lt;br /&gt;
				this.state = CategoryEditor.CHANGE_PENDING;&lt;br /&gt;
			}&lt;br /&gt;
			return true;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		resetKeySelection: function () {&lt;br /&gt;
			if ( noSuggestions || !this.list || this.list.style.display === &#039;none&#039; ) return false;&lt;br /&gt;
&lt;br /&gt;
			var curr = this.list.selectedIndex;&lt;br /&gt;
			if ( curr &amp;gt;= 0 &amp;amp;&amp;amp; curr &amp;lt; this.list.options.length ) {&lt;br /&gt;
				this.list.options[ curr ].selected = false;&lt;br /&gt;
				// Get current input text&lt;br /&gt;
				var v = this.text.value.split( &#039;|&#039; );&lt;br /&gt;
				var key = v.length &amp;gt; 1 ? &#039;|&#039; + v[ 1 ] : &#039;&#039;;&lt;br /&gt;
				// ESC is handled strangely by some browsers (e.g., FF); somehow it resets the input value before&lt;br /&gt;
				// our event handlers ever get a chance to run.&lt;br /&gt;
				var result = v[ 0 ] !== this.lastInput;&lt;br /&gt;
				if ( v[ 0 ] !== this.lastRealInput ) {&lt;br /&gt;
					this.text.value = this.lastRealInput + key;&lt;br /&gt;
					result = true;&lt;br /&gt;
				}&lt;br /&gt;
				this.lastInput = this.lastRealInput;&lt;br /&gt;
				return result;&lt;br /&gt;
			}&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
	}; // end CategoryEditor.prototype&lt;br /&gt;
&lt;br /&gt;
	function initialize() {&lt;br /&gt;
		// User configurations: Do this here, called from the onload handler, so that users can&lt;br /&gt;
		// override it easily in their own user script files by just declaring variables. JSconfig&lt;br /&gt;
		// is some feature used at Wikimedia Commons.&lt;br /&gt;
		var config = ( window.JSconfig !== undefined &amp;amp;&amp;amp; JSconfig.keys ) ? JSconfig.keys : {};&lt;br /&gt;
		HC.dont_add_to_watchlist = ( window.hotcat_dont_add_to_watchlist !== undefined ?&lt;br /&gt;
			!!window.hotcat_dont_add_to_watchlist :&lt;br /&gt;
			( config.HotCatDontAddToWatchlist !== undefined ? config.HotCatDontAddToWatchlist :&lt;br /&gt;
				HC.dont_add_to_watchlist ) );&lt;br /&gt;
		HC.no_autocommit = ( window.hotcat_no_autocommit !== undefined ?&lt;br /&gt;
			!!window.hotcat_no_autocommit : ( config.HotCatNoAutoCommit !== undefined ?&lt;br /&gt;
				config.HotCatNoAutoCommit :&lt;br /&gt;
				// On talk namespace default autocommit off&lt;br /&gt;
				( conf.wgNamespaceNumber % 2 ?&lt;br /&gt;
					true : HC.no_autocommit ) ) );&lt;br /&gt;
		HC.del_needs_diff = ( window.hotcat_del_needs_diff !== undefined ?&lt;br /&gt;
			!!window.hotcat_del_needs_diff :&lt;br /&gt;
			( config.HotCatDelNeedsDiff !== undefined ?&lt;br /&gt;
				config.HotCatDelNeedsDiff :&lt;br /&gt;
				HC.del_needs_diff ) );&lt;br /&gt;
		HC.suggest_delay = window.hotcat_suggestion_delay || config.HotCatSuggestionDelay || HC.suggest_delay;&lt;br /&gt;
		HC.editbox_width = window.hotcat_editbox_width || config.HotCatEditBoxWidth || HC.editbox_width;&lt;br /&gt;
		HC.suggestions = window.hotcat_suggestions || config.HotCatSuggestions || HC.suggestions;&lt;br /&gt;
		if ( typeof HC.suggestions !== &#039;string&#039; || !suggestionConfigs[ HC.suggestions ] ) HC.suggestions = &#039;combined&#039;;&lt;br /&gt;
&lt;br /&gt;
		HC.fixed_search = ( window.hotcat_suggestions_fixed !== undefined ?&lt;br /&gt;
			!!window.hotcat_suggestions_fixed : ( config.HotCatFixedSuggestions !== undefined ?&lt;br /&gt;
				config.HotCatFixedSuggestions : HC.fixed_search ) );&lt;br /&gt;
		HC.single_minor = ( window.hotcat_single_changes_are_minor !== undefined ?&lt;br /&gt;
			!!window.hotcat_single_changes_are_minor :&lt;br /&gt;
			( config.HotCatMinorSingleChanges !== undefined ?&lt;br /&gt;
				config.HotCatMinorSingleChanges :&lt;br /&gt;
				HC.single_minor ) );&lt;br /&gt;
		HC.bg_changed = window.hotcat_changed_background || config.HotCatChangedBackground || HC.bg_changed;&lt;br /&gt;
		HC.use_up_down = ( window.hotcat_use_category_links !== undefined ?&lt;br /&gt;
			!!window.hotcat_use_category_links :&lt;br /&gt;
			( config.HotCatUseCategoryLinks !== undefined ?&lt;br /&gt;
				config.HotCatUseCategoryLinks :&lt;br /&gt;
				HC.use_up_down ) );&lt;br /&gt;
		HC.listSize = window.hotcat_list_size || config.HotCatListSize || HC.listSize;&lt;br /&gt;
		if ( conf.wgDBname !== &#039;commonswiki&#039; ) HC.changeTag = config.HotCatChangeTag || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
		// The next whole shebang is needed, because manual tags get not submitted except of save&lt;br /&gt;
		if ( HC.changeTag ) {&lt;br /&gt;
			var eForm = document.editform,&lt;br /&gt;
				catRegExp = new RegExp( &#039;^\\[\\[(&#039; + HC.category_regexp + &#039;):&#039; ),&lt;br /&gt;
				oldTxt;&lt;br /&gt;
			// Returns true if minor change&lt;br /&gt;
			var isMinorChange = function () {&lt;br /&gt;
				var newTxt = eForm.wpTextbox1;&lt;br /&gt;
				if ( !newTxt ) return;&lt;br /&gt;
				newTxt = newTxt.value;&lt;br /&gt;
				var oldLines = oldTxt.match( /^.*$/gm ),&lt;br /&gt;
					newLines = newTxt.match( /^.*$/gm ),&lt;br /&gt;
					cArr; // changes&lt;br /&gt;
				var except = function ( aArr, bArr ) {&lt;br /&gt;
					var result = [],&lt;br /&gt;
						lArr, // larger&lt;br /&gt;
						sArr; // smaller&lt;br /&gt;
					if ( aArr.length &amp;lt; bArr.length ) {&lt;br /&gt;
						lArr = bArr;&lt;br /&gt;
						sArr = aArr;&lt;br /&gt;
					} else {&lt;br /&gt;
						lArr = aArr;&lt;br /&gt;
						sArr = bArr;&lt;br /&gt;
					}&lt;br /&gt;
					for ( var i = 0; i &amp;lt; lArr.length; i++ ) {&lt;br /&gt;
						var item = lArr[ i ];&lt;br /&gt;
						var ind = $.inArray( item, sArr );&lt;br /&gt;
						if ( ind === -1 ) result.push( item );&lt;br /&gt;
						else sArr.splice( ind, 1 ); // don&#039;t check this item again&lt;br /&gt;
					}&lt;br /&gt;
					return result.concat( sArr );&lt;br /&gt;
				};&lt;br /&gt;
				cArr = except( oldLines, newLines );&lt;br /&gt;
				if ( cArr.length ) {&lt;br /&gt;
					cArr = $.grep( cArr, function ( c ) {&lt;br /&gt;
						c = $.trim( c );&lt;br /&gt;
						return ( c &amp;amp;&amp;amp; !catRegExp.test( c ) );&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
				if ( !cArr.length ) {&lt;br /&gt;
					oldTxt = newTxt;&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			if ( conf.wgAction === &#039;submit&#039; &amp;amp;&amp;amp; conf.wgArticleId &amp;amp;&amp;amp; eForm &amp;amp;&amp;amp; eForm.wpSummary &amp;amp;&amp;amp; document.getElementById( &#039;wikiDiff&#039; ) ) {&lt;br /&gt;
				var sum = eForm.wpSummary,&lt;br /&gt;
					sumA = eForm.wpAutoSummary;&lt;br /&gt;
				if ( sum.value &amp;amp;&amp;amp; sumA.value === HC.changeTag ) { // HotCat diff&lt;br /&gt;
				// MD5 hash of the empty string, as HotCat edit is based on empty sum&lt;br /&gt;
					sumA.value = sumA.value.replace( HC.changeTag, &#039;d41d8cd98f00b204e9800998ecf8427e&#039; );&lt;br /&gt;
					// Attr creation and event handling is not same in all (old) browsers so use $&lt;br /&gt;
					var $ct = $( &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpChangeTags&amp;quot;&amp;gt;&#039; ).val( HC.changeTag );&lt;br /&gt;
					$( eForm ).append( $ct );&lt;br /&gt;
					oldTxt = eForm.wpTextbox1.value;&lt;br /&gt;
					$( &#039;#wpSave&#039; ).one( &#039;click&#039;, function () {&lt;br /&gt;
						if ( $ct.val() )&lt;br /&gt;
							sum.value = sum.value.replace( ( HC.messages.using || HC.messages.prefix ), &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
					} );&lt;br /&gt;
					var removeChangeTag = function () {&lt;br /&gt;
						$( eForm.wpTextbox1 ).add( sum ).one( &#039;input&#039;, function () {&lt;br /&gt;
							window.setTimeout( function () {&lt;br /&gt;
								if ( !isMinorChange() ) $ct.val( &#039;&#039; );&lt;br /&gt;
								else removeChangeTag();&lt;br /&gt;
							}, 500 );&lt;br /&gt;
						} );&lt;br /&gt;
					};&lt;br /&gt;
					removeChangeTag();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// Numeric input, make sure we have a numeric value&lt;br /&gt;
		HC.listSize = parseInt( HC.listSize, 10 );&lt;br /&gt;
		if ( isNaN( HC.listSize ) || HC.listSize &amp;lt; 5 ) HC.listSize = 5;&lt;br /&gt;
&lt;br /&gt;
		HC.listSize = Math.min( HC.listSize, 30 ); // Max size&lt;br /&gt;
&lt;br /&gt;
		// Localize search engine names&lt;br /&gt;
		if ( HC.engine_names ) {&lt;br /&gt;
			for ( var key in HC.engine_names )&lt;br /&gt;
				if ( suggestionConfigs[ key ] &amp;amp;&amp;amp; HC.engine_names[ key ] ) suggestionConfigs[ key ].name = HC.engine_names[ key ];&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		// Catch both native RTL and &amp;quot;faked&amp;quot; RTL through [[MediaWiki:Rtl.js]]&lt;br /&gt;
		is_rtl = hasClass( document.body, &#039;rtl&#039; );&lt;br /&gt;
		if ( !is_rtl ) {&lt;br /&gt;
			if ( document.defaultView &amp;amp;&amp;amp; document.defaultView.getComputedStyle ) { // Gecko etc.&lt;br /&gt;
				is_rtl = document.defaultView.getComputedStyle( document.body, null ).getPropertyValue( &#039;direction&#039; );&lt;br /&gt;
			} else if ( document.body.currentStyle ) { // IE, has subtle differences to getComputedStyle&lt;br /&gt;
				is_rtl = document.body.currentStyle.direction;&lt;br /&gt;
			} else { // Not exactly right, but best effort&lt;br /&gt;
				is_rtl = document.body.style.direction;&lt;br /&gt;
			}&lt;br /&gt;
			is_rtl = ( is_rtl === &#039;rtl&#039; );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function can_edit() {&lt;br /&gt;
		var container = null;&lt;br /&gt;
		switch ( mw.config.get( &#039;skin&#039; ) ) {&lt;br /&gt;
			case &#039;cologneblue&#039;:&lt;br /&gt;
				container = document.getElementById( &#039;quickbar&#039; );&lt;br /&gt;
			/* fall through */&lt;br /&gt;
			case &#039;standard&#039;:&lt;br /&gt;
			case &#039;nostalgia&#039;:&lt;br /&gt;
				if ( !container ) container = document.getElementById( &#039;topbar&#039; );&lt;br /&gt;
				var lks = container.getElementsByTagName( &#039;a&#039; );&lt;br /&gt;
				for ( var i = 0; i &amp;lt; lks.length; i++ ) {&lt;br /&gt;
					if (&lt;br /&gt;
						param( &#039;title&#039;, lks[ i ].href ) === conf.wgPageName &amp;amp;&amp;amp;&lt;br /&gt;
						param( &#039;action&#039;, lks[ i ].href ) === &#039;edit&#039;&lt;br /&gt;
					) {&lt;br /&gt;
						return true;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				return false;&lt;br /&gt;
			default:&lt;br /&gt;
				// all modern skins:&lt;br /&gt;
				return document.getElementById( &#039;ca-edit&#039; ) !== null;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Legacy stuff&lt;br /&gt;
	function closeForm() {&lt;br /&gt;
		// Close all open editors without redirect resolution and other asynchronous stuff.&lt;br /&gt;
		for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
			var edit = editors[ i ];&lt;br /&gt;
			if ( edit.state === CategoryEditor.OPEN ) {&lt;br /&gt;
				edit.cancel();&lt;br /&gt;
			} else if ( edit.state === CategoryEditor.CHANGE_PENDING ) {&lt;br /&gt;
				edit.sanitizeInput();&lt;br /&gt;
				var value = edit.text.value.split( &#039;|&#039; );&lt;br /&gt;
				var key = null;&lt;br /&gt;
				if ( value.length &amp;gt; 1 ) key = value[ 1 ];&lt;br /&gt;
				var v = value[ 0 ].replace( /_/g, &#039; &#039; ).replace( /^\s+|\s+$/g, &#039;&#039; );&lt;br /&gt;
				if ( !v.length ) {&lt;br /&gt;
					edit.cancel();&lt;br /&gt;
				} else {&lt;br /&gt;
					edit.currentCategory = v;&lt;br /&gt;
					edit.currentKey = key;&lt;br /&gt;
					edit.currentExists = this.inputExists;&lt;br /&gt;
					edit.close();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function setup_upload() {&lt;br /&gt;
		onUpload = true;&lt;br /&gt;
		// Add an empty category bar at the end of the table containing the description, and change the onsubmit handler.&lt;br /&gt;
		var ip = document.getElementById( &#039;mw-htmlform-description&#039; ) || document.getElementById( &#039;wpDestFile&#039; );&lt;br /&gt;
		if ( !ip ) {&lt;br /&gt;
			ip = document.getElementById( &#039;wpDestFile&#039; );&lt;br /&gt;
			while ( ip &amp;amp;&amp;amp; ip.nodeName.toLowerCase() !== &#039;table&#039; ) ip = ip.parentNode;&lt;br /&gt;
		}&lt;br /&gt;
		if ( !ip ) return;&lt;br /&gt;
		var reupload = document.getElementById( &#039;wpForReUpload&#039; );&lt;br /&gt;
		var destFile = document.getElementById( &#039;wpDestFile&#039; );&lt;br /&gt;
		if (&lt;br /&gt;
			( reupload &amp;amp;&amp;amp; !!reupload.value ) ||&lt;br /&gt;
			( destFile &amp;amp;&amp;amp; ( destFile.disabled || destFile.readOnly ) )&lt;br /&gt;
		) {&lt;br /&gt;
			return; // re-upload form...&lt;br /&gt;
		}&lt;br /&gt;
		// Insert a table row with two fields (label and empty category bar)&lt;br /&gt;
		var labelCell = make( &#039;td&#039; );&lt;br /&gt;
		var lineCell = make( &#039;td&#039; );&lt;br /&gt;
		// Create the category line&lt;br /&gt;
		catLine = make( &#039;div&#039; );&lt;br /&gt;
		catLine.className = &#039;catlinks&#039;;&lt;br /&gt;
		catLine.id = &#039;catlinks&#039;;&lt;br /&gt;
		catLine.style.textAlign = is_rtl ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
		// We&#039;ll be inside a table row. Make sure that we don&#039;t have margins or strange borders.&lt;br /&gt;
		catLine.style.margin = &#039;0&#039;;&lt;br /&gt;
		catLine.style.border = &#039;none&#039;;&lt;br /&gt;
		lineCell.appendChild( catLine );&lt;br /&gt;
		// Create the label&lt;br /&gt;
		var label = null;&lt;br /&gt;
		if ( window.UFUI &amp;amp;&amp;amp; window.UIElements &amp;amp;&amp;amp; UFUI.getLabel instanceof Function ) {&lt;br /&gt;
			try {&lt;br /&gt;
				label = UFUI.getLabel( &#039;wpCategoriesUploadLbl&#039; );&lt;br /&gt;
			} catch ( ex ) {&lt;br /&gt;
				label = null;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if ( !label ) {&lt;br /&gt;
			labelCell.id = &#039;hotcatLabel&#039;;&lt;br /&gt;
			labelCell.appendChild( make( HC.categories, true ) );&lt;br /&gt;
		} else {&lt;br /&gt;
			labelCell.id = &#039;hotcatLabelTranslated&#039;;&lt;br /&gt;
			labelCell.appendChild( label );&lt;br /&gt;
		}&lt;br /&gt;
		labelCell.className = &#039;mw-label&#039;;&lt;br /&gt;
		labelCell.style.textAlign = &#039;right&#039;;&lt;br /&gt;
		labelCell.style.verticalAlign = &#039;middle&#039;;&lt;br /&gt;
		// Change the onsubmit handler&lt;br /&gt;
		var form = document.getElementById( &#039;upload&#039; ) || document.getElementById( &#039;mw-upload-form&#039; );&lt;br /&gt;
		if ( form ) {&lt;br /&gt;
			var newRow = ip.insertRow( -1 );&lt;br /&gt;
			newRow.appendChild( labelCell );&lt;br /&gt;
			newRow.appendChild( lineCell );&lt;br /&gt;
			form.onsubmit = ( function ( oldSubmit ) {&lt;br /&gt;
				return function () {&lt;br /&gt;
					var do_submit = true;&lt;br /&gt;
					if ( oldSubmit ) {&lt;br /&gt;
						if ( typeof oldSubmit === &#039;string&#039; ) {&lt;br /&gt;
						// eslint-disable-next-line no-eval&lt;br /&gt;
							do_submit = eval( oldSubmit );&lt;br /&gt;
						} else if ( oldSubmit instanceof Function ) {&lt;br /&gt;
							do_submit = oldSubmit.apply( form, arguments );&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if ( !do_submit ) return false;&lt;br /&gt;
					closeForm();&lt;br /&gt;
					// Copy the categories&lt;br /&gt;
					var eb = document.getElementById( &#039;wpUploadDescription&#039; ) || document.getElementById( &#039;wpDesc&#039; );&lt;br /&gt;
					var addedOne = false;&lt;br /&gt;
					for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
						var t = editors[ i ].currentCategory;&lt;br /&gt;
						if ( !t ) continue;&lt;br /&gt;
						var key = editors[ i ].currentKey;&lt;br /&gt;
						var new_cat = &#039;[[&#039; + HC.category_canonical + &#039;:&#039; + t + ( key ? &#039;|&#039; + key : &#039;&#039; ) + &#039;]]&#039;;&lt;br /&gt;
						// Only add if not already present&lt;br /&gt;
						var cleanedText = eb.value&lt;br /&gt;
							.replace( /&amp;lt;!--(\s|\S)*?--&amp;gt;/g, &#039;&#039; )&lt;br /&gt;
							.replace( /&amp;lt;nowiki&amp;gt;(\s|\S)*?&amp;lt;\/nowiki&amp;gt;/g, &#039;&#039; );&lt;br /&gt;
						if ( !find_category( cleanedText, t, true ) ) {&lt;br /&gt;
							eb.value += &#039;\n&#039; + new_cat;&lt;br /&gt;
							addedOne = true;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if ( addedOne ) {&lt;br /&gt;
					// Remove &amp;quot;subst:unc&amp;quot; added by Flinfo if it didn&#039;t find categories&lt;br /&gt;
						eb.value = eb.value.replace( /\{\{subst:unc\}\}/g, &#039;&#039; );&lt;br /&gt;
					}&lt;br /&gt;
					return true;&lt;br /&gt;
				};&lt;br /&gt;
			}( form.onsubmit ) );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var cleanedText = null;&lt;br /&gt;
&lt;br /&gt;
	function isOnPage( span ) {&lt;br /&gt;
		if ( span.firstChild.nodeType !== Node.ELEMENT_NODE ) return null;&lt;br /&gt;
&lt;br /&gt;
		var catTitle = title( span.firstChild.getAttribute( &#039;href&#039; ) );&lt;br /&gt;
		if ( !catTitle ) return null;&lt;br /&gt;
&lt;br /&gt;
		catTitle = catTitle.substr( catTitle.indexOf( &#039;:&#039; ) + 1 ).replace( /_/g, &#039; &#039; );&lt;br /&gt;
		if ( HC.blacklist &amp;amp;&amp;amp; HC.blacklist.test( catTitle ) ) return null;&lt;br /&gt;
&lt;br /&gt;
		var result = {&lt;br /&gt;
			title: catTitle,&lt;br /&gt;
			match: [ &#039;&#039;, &#039;&#039;, &#039;&#039; ]&lt;br /&gt;
		};&lt;br /&gt;
		if ( pageText === null ) return result;&lt;br /&gt;
&lt;br /&gt;
		if ( cleanedText === null ) {&lt;br /&gt;
			cleanedText = pageText&lt;br /&gt;
				.replace( /&amp;lt;!--(\s|\S)*?--&amp;gt;/g, &#039;&#039; )&lt;br /&gt;
				.replace( /&amp;lt;nowiki&amp;gt;(\s|\S)*?&amp;lt;\/nowiki&amp;gt;/g, &#039;&#039; );&lt;br /&gt;
		}&lt;br /&gt;
		result.match = find_category( cleanedText, catTitle, true );&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var initialized = false;&lt;br /&gt;
	var setupTimeout = null;&lt;br /&gt;
&lt;br /&gt;
	function findByClass( scope, tag, className ) {&lt;br /&gt;
		var result = $( scope ).find( tag + &#039;.&#039; + className );&lt;br /&gt;
		return ( result &amp;amp;&amp;amp; result.length ) ? result[ 0 ] : null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function setup( additionalWork ) {&lt;br /&gt;
		if ( initialized ) return;&lt;br /&gt;
		initialized = true;&lt;br /&gt;
		if ( setupTimeout ) {&lt;br /&gt;
			window.clearTimeout( setupTimeout );&lt;br /&gt;
			setupTimeout = null;&lt;br /&gt;
		}&lt;br /&gt;
		// Find the category bar, or create an empty one if there isn&#039;t one. Then add -/+- links after&lt;br /&gt;
		// each category, and add the + link.&lt;br /&gt;
		catLine =&lt;br /&gt;
			// Special:Upload&lt;br /&gt;
			catLine ||&lt;br /&gt;
			document.getElementById( &#039;mw-normal-catlinks&#039; );&lt;br /&gt;
		var hiddenCats = document.getElementById( &#039;mw-hidden-catlinks&#039; );&lt;br /&gt;
		if ( !catLine ) {&lt;br /&gt;
			var footer = null;&lt;br /&gt;
			if ( !hiddenCats ) {&lt;br /&gt;
				footer = findByClass( document, &#039;div&#039;, &#039;printfooter&#039; );&lt;br /&gt;
				if ( !footer ) return; // Don&#039;t know where to insert the category line&lt;br /&gt;
			}&lt;br /&gt;
			catLine = make( &#039;div&#039; );&lt;br /&gt;
			catLine.id = &#039;mw-normal-catlinks&#039;;&lt;br /&gt;
			catLine.style.textAlign = is_rtl ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
			// Add a label&lt;br /&gt;
			var label = make( &#039;a&#039; );&lt;br /&gt;
			label.href = conf.wgArticlePath.replace( &#039;$1&#039;, &#039;Special:Categories&#039; );&lt;br /&gt;
			label.title = HC.categories;&lt;br /&gt;
			label.appendChild( make( HC.categories, true ) );&lt;br /&gt;
			catLine.appendChild( label );&lt;br /&gt;
			catLine.appendChild( make( &#039;:&#039;, true ) );&lt;br /&gt;
			// Insert the new category line&lt;br /&gt;
			var container = ( hiddenCats ? hiddenCats.parentNode : document.getElementById( &#039;catlinks&#039; ) );&lt;br /&gt;
			if ( !container ) {&lt;br /&gt;
				container = make( &#039;div&#039; );&lt;br /&gt;
				container.id = &#039;catlinks&#039;;&lt;br /&gt;
				footer.parentNode.insertBefore( container, footer.nextSibling );&lt;br /&gt;
			}&lt;br /&gt;
			container.className = &#039;catlinks noprint&#039;;&lt;br /&gt;
			container.style.display = &#039;&#039;;&lt;br /&gt;
			if ( !hiddenCats ) container.appendChild( catLine ); else container.insertBefore( catLine, hiddenCats );&lt;br /&gt;
		} // end if catLine exists&lt;br /&gt;
		if ( is_rtl ) catLine.dir = &#039;rtl&#039;;&lt;br /&gt;
&lt;br /&gt;
		// Create editors for all existing categories&lt;br /&gt;
&lt;br /&gt;
		function createEditors( line, is_hidden ) {&lt;br /&gt;
			var i;&lt;br /&gt;
			var cats = line.getElementsByTagName( &#039;li&#039; );&lt;br /&gt;
			if ( cats.length ) {&lt;br /&gt;
				newDOM = true;&lt;br /&gt;
				line = cats[ 0 ].parentNode;&lt;br /&gt;
			} else {&lt;br /&gt;
				cats = line.getElementsByTagName( &#039;span&#039; );&lt;br /&gt;
			}&lt;br /&gt;
			// Copy cats, otherwise it&#039;ll also magically contain our added spans as it is a live collection!&lt;br /&gt;
			var copyCats = new Array( cats.length );&lt;br /&gt;
			for ( i = 0; i &amp;lt; cats.length; i++ ) copyCats[ i ] = cats[ i ];&lt;br /&gt;
			for ( i = 0; i &amp;lt; copyCats.length; i++ ) {&lt;br /&gt;
				var test = isOnPage( copyCats[ i ] );&lt;br /&gt;
				if ( test !== null &amp;amp;&amp;amp; test.match !== null &amp;amp;&amp;amp; line ) {&lt;br /&gt;
				// eslint-disable-next-line no-new&lt;br /&gt;
					new CategoryEditor( line, copyCats[ i ], test.title, test.match[ 2 ], is_hidden );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return copyCats.length ? copyCats[ copyCats.length - 1 ] : null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var lastSpan = createEditors( catLine, false );&lt;br /&gt;
		// Create one to add a new category&lt;br /&gt;
		// eslint-disable-next-line no-new&lt;br /&gt;
		new CategoryEditor( newDOM ? catLine.getElementsByTagName( &#039;ul&#039; )[ 0 ] : catLine, null, null, lastSpan !== null, false );&lt;br /&gt;
		if ( !onUpload ) {&lt;br /&gt;
			if ( pageText !== null &amp;amp;&amp;amp; hiddenCats ) {&lt;br /&gt;
				if ( is_rtl ) hiddenCats.dir = &#039;rtl&#039;;&lt;br /&gt;
				createEditors( hiddenCats, true );&lt;br /&gt;
			}&lt;br /&gt;
			// And finally add the &amp;quot;multi-mode&amp;quot; span. (Do this at the end, otherwise it ends up in the list above.)&lt;br /&gt;
			var enableMulti = make( &#039;span&#039; );&lt;br /&gt;
			enableMulti.className = &#039;noprint&#039;;&lt;br /&gt;
			if ( is_rtl ) enableMulti.dir = &#039;rtl&#039;;&lt;br /&gt;
			catLine.insertBefore( enableMulti, catLine.firstChild.nextSibling );&lt;br /&gt;
			enableMulti.appendChild( make( &#039;\xa0&#039;, true ) ); // nbsp&lt;br /&gt;
			multiSpan = make( &#039;span&#039; );&lt;br /&gt;
			enableMulti.appendChild( multiSpan );&lt;br /&gt;
			multiSpan.innerHTML = &#039;(&amp;lt;a&amp;gt;&#039; + HC.addmulti + &#039;&amp;lt;/a&amp;gt;)&#039;;&lt;br /&gt;
			var lk = multiSpan.getElementsByTagName( &#039;a&#039; )[ 0 ];&lt;br /&gt;
			lk.onclick = function ( evt ) {&lt;br /&gt;
				setMultiInput();&lt;br /&gt;
				checkMultiInput();&lt;br /&gt;
				return evtKill( evt );&lt;br /&gt;
			};&lt;br /&gt;
			lk.title = HC.multi_tooltip;&lt;br /&gt;
			lk.style.cursor = &#039;pointer&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		cleanedText = null;&lt;br /&gt;
		if ( additionalWork instanceof Function ) additionalWork();&lt;br /&gt;
		mw.hook( &#039;hotcat.ready&#039; ).fire(); // Execute registered callback functions&lt;br /&gt;
		$( &#039;body&#039; ).trigger( &#039;hotcatSetupCompleted&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function createCommitForm() {&lt;br /&gt;
		if ( commitForm ) return;&lt;br /&gt;
		var formContainer = make( &#039;div&#039; );&lt;br /&gt;
		formContainer.style.display = &#039;none&#039;;&lt;br /&gt;
		document.body.appendChild( formContainer );&lt;br /&gt;
		formContainer.innerHTML =&lt;br /&gt;
			&#039;&amp;lt;form id=&amp;quot;hotcatCommitForm&amp;quot; method=&amp;quot;post&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;&#039; +&lt;br /&gt;
			conf.wgScript + &#039;?title=&#039; + encodeURIComponent( conf.wgPageName ) + &#039;&amp;amp;action=submit&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpTextbox1&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;model&amp;quot; value=&amp;quot;&#039; + conf.wgPageContentModel + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;text/x-wiki&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpSummary&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;wpMinoredit&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;wpWatchthis&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpAutoSummary&amp;quot; value=&amp;quot;d41d8cd98f00b204e9800998ecf8427e&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEdittime&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpStarttime&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpDiff&amp;quot; value=&amp;quot;wpDiff&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;oldid&amp;quot; value=&amp;quot;0&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;hcCommit&amp;quot; value=&amp;quot;hcCommit&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpEditToken&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpUltimateParam&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;wpChangeTags&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;ℳ𝒲♥𝓊𝓃𝒾𝒸ℴ𝒹ℯ&amp;quot; name=&amp;quot;wpUnicodeCheck&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
			&#039;&amp;lt;/form&amp;gt;&#039;;&lt;br /&gt;
		commitForm = document.getElementById( &#039;hotcatCommitForm&#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getPage() {&lt;br /&gt;
		// We know we have an article here.&lt;br /&gt;
		if ( !conf.wgArticleId ) {&lt;br /&gt;
			// Doesn&#039;t exist yet. Disable on non-existing User pages -- might be a global user page.&lt;br /&gt;
			if ( conf.wgNamespaceNumber === 2 ) return;&lt;br /&gt;
			pageText = &#039;&#039;;&lt;br /&gt;
			pageTime = null;&lt;br /&gt;
			setup( createCommitForm );&lt;br /&gt;
		} else {&lt;br /&gt;
			var url = conf.wgServer + conf.wgScriptPath + &#039;/api.php?format=json&amp;amp;callback=HotCat.start&amp;amp;action=query&amp;amp;rawcontinue=&amp;amp;titles=&#039; +&lt;br /&gt;
			encodeURIComponent( conf.wgPageName ) +&lt;br /&gt;
			&#039;&amp;amp;prop=info%7Crevisions&amp;amp;rvprop=content%7Ctimestamp%7Cids&amp;amp;meta=siteinfo&amp;amp;rvlimit=1&amp;amp;rvstartid=&#039; +&lt;br /&gt;
			conf.wgCurRevisionId;&lt;br /&gt;
			var s = make( &#039;script&#039; );&lt;br /&gt;
			s.src = url;&lt;br /&gt;
			HC.start = function ( json ) {&lt;br /&gt;
				setPage( json );&lt;br /&gt;
				setup( createCommitForm );&lt;br /&gt;
			};&lt;br /&gt;
			document.getElementsByTagName( &#039;head&#039; )[ 0 ].appendChild( s );&lt;br /&gt;
			setupTimeout = window.setTimeout( function () {&lt;br /&gt;
				setup( createCommitForm );&lt;br /&gt;
			}, 4000 ); // 4 sec, just in case getting the wikitext takes longer.&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function setState( state ) {&lt;br /&gt;
		var cats = state.split( &#039;\n&#039; );&lt;br /&gt;
		if ( !cats.length ) return null;&lt;br /&gt;
&lt;br /&gt;
		if ( initialized &amp;amp;&amp;amp; editors.length === 1 &amp;amp;&amp;amp; editors[ 0 ].isAddCategory ) {&lt;br /&gt;
			// Insert new spans and create new editors for them.&lt;br /&gt;
			var newSpans = [];&lt;br /&gt;
			var before = editors.length === 1 ? editors[ 0 ].span : null;&lt;br /&gt;
			var i;&lt;br /&gt;
			for ( i = 0; i &amp;lt; cats.length; i++ ) {&lt;br /&gt;
				if ( !cats[ i ].length ) continue;&lt;br /&gt;
				var cat = cats[ i ].split( &#039;|&#039; );&lt;br /&gt;
				var key = cat.length &amp;gt; 1 ? cat[ 1 ] : null;&lt;br /&gt;
				cat = cat[ 0 ];&lt;br /&gt;
				var lk = make( &#039;a&#039; );&lt;br /&gt;
				lk.href = wikiPagePath( HC.category_canonical + &#039;:&#039; + cat );&lt;br /&gt;
				lk.appendChild( make( cat, true ) );&lt;br /&gt;
				lk.title = cat;&lt;br /&gt;
				var span = make( &#039;span&#039; );&lt;br /&gt;
				span.appendChild( lk );&lt;br /&gt;
				if ( !i ) catLine.insertBefore( make( &#039; &#039;, true ), before );&lt;br /&gt;
&lt;br /&gt;
				catLine.insertBefore( span, before );&lt;br /&gt;
				if ( before &amp;amp;&amp;amp; i + 1 &amp;lt; cats.length ) parent.insertBefore( make( &#039; | &#039;, true ), before );&lt;br /&gt;
&lt;br /&gt;
				newSpans.push( {&lt;br /&gt;
					element: span,&lt;br /&gt;
					title: cat,&lt;br /&gt;
					key: key&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
			// And change the last one...&lt;br /&gt;
			if ( before ) before.parentNode.insertBefore( make( &#039; | &#039;, true ), before );&lt;br /&gt;
&lt;br /&gt;
			for ( i = 0; i &amp;lt; newSpans.length; i++ ) {&lt;br /&gt;
			// eslint-disable-next-line no-new&lt;br /&gt;
				new CategoryEditor( catLine, newSpans[ i ].element, newSpans[ i ].title, newSpans[ i ].key );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getState() {&lt;br /&gt;
		var result = null;&lt;br /&gt;
		for ( var i = 0; i &amp;lt; editors.length; i++ ) {&lt;br /&gt;
			var text = editors[ i ].currentCategory;&lt;br /&gt;
			var key = editors[ i ].currentKey;&lt;br /&gt;
			if ( text &amp;amp;&amp;amp; text.length ) {&lt;br /&gt;
				if ( key !== null ) text += &#039;|&#039; + key;&lt;br /&gt;
				if ( result === null ) result = text; else result += &#039;\n&#039; + text;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function really_run() {&lt;br /&gt;
		initialize();&lt;br /&gt;
&lt;br /&gt;
		if ( !HC.upload_disabled &amp;amp;&amp;amp; conf.wgNamespaceNumber === -1 &amp;amp;&amp;amp; conf.wgCanonicalSpecialPageName === &#039;Upload&#039; &amp;amp;&amp;amp; conf.wgUserName ) {&lt;br /&gt;
			setup_upload();&lt;br /&gt;
			setup( function () {&lt;br /&gt;
				// Check for state restoration once the setup is done otherwise, but before signalling setup completion&lt;br /&gt;
				if ( window.UploadForm &amp;amp;&amp;amp; UploadForm.previous_hotcat_state ) UploadForm.previous_hotcat_state = setState( UploadForm.previous_hotcat_state );&lt;br /&gt;
			} );&lt;br /&gt;
		} else {&lt;br /&gt;
			if ( !conf.wgIsArticle || conf.wgAction !== &#039;view&#039; || param( &#039;diff&#039; ) !== null || param( &#039;oldid&#039; ) !== null || !can_edit() || HC.disable() ) return;&lt;br /&gt;
			getPage();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		if ( HC.started ) return;&lt;br /&gt;
		HC.started = true;&lt;br /&gt;
		loadTrigger.register( really_run );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Export legacy functions&lt;br /&gt;
	window.hotcat_get_state = function () {&lt;br /&gt;
		return getState();&lt;br /&gt;
	};&lt;br /&gt;
	window.hotcat_set_state = function ( state ) {&lt;br /&gt;
		return setState( state );&lt;br /&gt;
	};&lt;br /&gt;
	window.hotcat_close_form = function () {&lt;br /&gt;
		closeForm();&lt;br /&gt;
	};&lt;br /&gt;
	HC.runWhenReady = function ( callback ) {&lt;br /&gt;
		// run user-registered code once HotCat is fully set up and ready.&lt;br /&gt;
		mw.hook( &#039;hotcat.ready&#039; ).add( callback );&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Make sure we don&#039;t get conflicts with AjaxCategories (core development that should one day&lt;br /&gt;
	// replace HotCat).&lt;br /&gt;
	mw.config.set( &#039;disableAJAXCategories&#039;, true );&lt;br /&gt;
&lt;br /&gt;
	// Run as soon as possible. This varies depending on MediaWiki version;&lt;br /&gt;
	// window&#039;s &#039;load&#039; event is always safe, but usually we can do better than that.&lt;br /&gt;
&lt;br /&gt;
	if ( conf.wgCanonicalSpecialPageName !== &#039;Upload&#039; ) {&lt;br /&gt;
		// Reload HotCat after (VE) edits (bug T103285)&lt;br /&gt;
		mw.hook( &#039;postEdit&#039; ).add( function () {&lt;br /&gt;
			// Reset HotCat in case this is a soft reload (e.g. VisualEditor edit), unless the categories&lt;br /&gt;
			// were not re-rendered and our interface is still there (e.g. DiscussionTools edit)&lt;br /&gt;
			if ( document.querySelector( &#039;#catlinks .hotcatlink&#039; ) ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			catLine = null;&lt;br /&gt;
			editors = [];&lt;br /&gt;
			initialized = false;&lt;br /&gt;
			HC.started = false;&lt;br /&gt;
			run();&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// We can safely trigger just after user configuration is loaded.&lt;br /&gt;
	// Use always() instead of then() to also start HotCat if the user module has problems.&lt;br /&gt;
	$.when( mw.loader.using( &#039;user&#039; ), $.ready ).always( run );&lt;br /&gt;
}( jQuery, mediaWiki ) );&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-InsertTranslate.js&amp;diff=888297</id>
		<title>MediaWiki:Gadget-InsertTranslate.js</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-InsertTranslate.js&amp;diff=888297"/>
		<updated>2022-03-06T01:08:04Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Updates for new version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* wikiEditor extra group and icons for developers allowing for easy tags of code insertion into articles*/&lt;br /&gt;
&lt;br /&gt;
var customizeToolbar = function() {&lt;br /&gt;
$( &#039;#wpTextbox1&#039; ).wikiEditor( &#039;addToToolbar&#039;, {&lt;br /&gt;
        &#039;section&#039;: &#039;advanced&#039;,&lt;br /&gt;
        &#039;groups&#039;: {&lt;br /&gt;
                &#039;lang&#039;: {&lt;br /&gt;
                        &#039;label&#039;: &#039;Tags&#039; // or use labelMsg for a localized label, see above&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
$(&#039;#wpTextbox1&#039;).wikiEditor(&#039;addToToolbar&#039;, {&lt;br /&gt;
       section: &#039;advanced&#039;,&lt;br /&gt;
       group: &#039;lang&#039;,&lt;br /&gt;
       tools: {&lt;br /&gt;
              &amp;quot;atrans&amp;quot;: {&lt;br /&gt;
                         label: &#039;Insert translate tags&#039;,&lt;br /&gt;
                         type: &#039;button&#039;,&lt;br /&gt;
                         icon: &#039;/images/2/29/Translate_button.png&#039;,&lt;br /&gt;
                         action: {&lt;br /&gt;
                                 type: &#039;encapsulate&#039;,&lt;br /&gt;
                                 options: {&lt;br /&gt;
                                          pre: &#039;\u003ctranslate&amp;gt;&#039;,&lt;br /&gt;
                                          peri: &amp;quot;Text to translate&amp;quot;,&lt;br /&gt;
                                          post: &#039;\u003c\u002ftranslate&amp;gt;&#039;&lt;br /&gt;
                                 }&lt;br /&gt;
                         }&lt;br /&gt;
               }&lt;br /&gt;
       }&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
$(&#039;#wpTextbox1&#039;).wikiEditor(&#039;addToToolbar&#039;, {&lt;br /&gt;
       section: &#039;advanced&#039;,&lt;br /&gt;
       group: &#039;lang&#039;,&lt;br /&gt;
       tools: {&lt;br /&gt;
              &amp;quot;alangs&amp;quot;: {&lt;br /&gt;
                         label: &#039;Insert language tags&#039;,&lt;br /&gt;
                         type: &#039;button&#039;,&lt;br /&gt;
                         icon: &#039;/images/1/1e/Language_button.png&#039;,&lt;br /&gt;
                         action: {&lt;br /&gt;
                                 type: &#039;encapsulate&#039;,&lt;br /&gt;
                                 options: {&lt;br /&gt;
                                          pre: &#039;\u003cnoinclude&amp;gt;&#039;,&lt;br /&gt;
                                          peri: &amp;quot;\u003clanguages \u002f&amp;gt;&amp;quot;,&lt;br /&gt;
                                          post: &#039;\u003c\u002fnoinclude&amp;gt;&#039;&lt;br /&gt;
                                 }&lt;br /&gt;
                         }&lt;br /&gt;
               }&lt;br /&gt;
       }&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
$( &#039;#wpTextbox1&#039; ).wikiEditor( &#039;addToToolbar&#039;, {&lt;br /&gt;
	section: &#039;advanced&#039;,&lt;br /&gt;
	group: &#039;lang&#039;,&lt;br /&gt;
	tools: {&lt;br /&gt;
		&amp;quot;comment&amp;quot;: {&lt;br /&gt;
			label: &#039;Comment&#039;,&lt;br /&gt;
			type: &#039;button&#039;,&lt;br /&gt;
			icon: &#039;//upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png&#039;,&lt;br /&gt;
			action: {&lt;br /&gt;
				type: &#039;encapsulate&#039;,&lt;br /&gt;
				options: {&lt;br /&gt;
					pre: &amp;quot;&amp;lt;!-- &amp;quot;,&lt;br /&gt;
					post: &amp;quot; --&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
$( &#039;#wpTextbox1&#039; ).wikiEditor( &#039;addToToolbar&#039;, {&lt;br /&gt;
	section: &#039;advanced&#039;,&lt;br /&gt;
	group: &#039;lang&#039;,&lt;br /&gt;
	tools: {&lt;br /&gt;
		&amp;quot;comment&amp;quot;: {&lt;br /&gt;
			label: &#039;Insert Category {{#translation:}}&#039;,&lt;br /&gt;
			type: &#039;button&#039;,&lt;br /&gt;
			icon: &#039;/images/7/7a/Language_Icon.png&#039;,&lt;br /&gt;
			action: {&lt;br /&gt;
				type: &#039;encapsulate&#039;,&lt;br /&gt;
				options: {&lt;br /&gt;
					pre: &amp;quot;{{#translation:}}&amp;quot;,&lt;br /&gt;
					post: &amp;quot;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} );&lt;br /&gt;
 &lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */&lt;br /&gt;
if ( [ &#039;edit&#039;, &#039;submit&#039; ].indexOf( mw.config.get( &#039;wgAction&#039; ) ) !== -1 ) {&lt;br /&gt;
	mw.loader.using( &#039;user.options&#039; ).then( function () {&lt;br /&gt;
		// This can be the string &amp;quot;0&amp;quot; if the user disabled the preference ([[phab:T54542#555387]])&lt;br /&gt;
		if ( mw.user.options.get( &#039;usebetatoolbar&#039; ) == 1 ) {&lt;br /&gt;
			$.when(&lt;br /&gt;
				mw.loader.using( &#039;ext.wikiEditor&#039; ), $.ready&lt;br /&gt;
			).then( customizeToolbar );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-InsertCode.js&amp;diff=888296</id>
		<title>MediaWiki:Gadget-InsertCode.js</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=MediaWiki:Gadget-InsertCode.js&amp;diff=888296"/>
		<updated>2022-03-06T01:07:14Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: Fixes for new version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* wikiEditor extra group and icons for developers allowing for easy tags of code insertion into articles*/&lt;br /&gt;
&lt;br /&gt;
var customizeToolbar = function() {&lt;br /&gt;
$( &#039;#wpTextbox1&#039; ).wikiEditor( &#039;addToToolbar&#039;, {&lt;br /&gt;
        &#039;section&#039;: &#039;advanced&#039;,&lt;br /&gt;
        &#039;groups&#039;: {&lt;br /&gt;
                &#039;code&#039;: {&lt;br /&gt;
                        &#039;label&#039;: &#039;Insert Code&#039; // or use labelMsg for a localized label, see above&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
} );&lt;br /&gt;
       jQuery(document).ready(function ($) {&lt;br /&gt;
        $(&#039;#wpTextbox1&#039;).wikiEditor(&#039;addToToolbar&#039;, {&lt;br /&gt;
                section: &#039;advanced&#039;,&lt;br /&gt;
                group: &#039;code&#039;,&lt;br /&gt;
                tools: {&lt;br /&gt;
                        buttonId: {&lt;br /&gt;
                                label: &#039;Insert PHP code tags&#039;,&lt;br /&gt;
                                type: &#039;button&#039;,&lt;br /&gt;
                                icon: &#039;/images/5/5d/PHP_Icon.png&#039;,&lt;br /&gt;
                                action: {&lt;br /&gt;
                                        type: &#039;encapsulate&#039;,&lt;br /&gt;
                                        options: {&lt;br /&gt;
                                                pre: &#039;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;\r&#039;,&lt;br /&gt;
                                                peri: &amp;quot;Insert php code here\r&amp;quot;,&lt;br /&gt;
                                                post: &amp;quot;&amp;lt;/source&amp;gt;&amp;quot;&lt;br /&gt;
                                        }&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
});&lt;br /&gt;
       jQuery(document).ready(function ($) {&lt;br /&gt;
        $(&#039;#wpTextbox1&#039;).wikiEditor(&#039;addToToolbar&#039;, {&lt;br /&gt;
                section: &#039;advanced&#039;,&lt;br /&gt;
                group: &#039;code&#039;,&lt;br /&gt;
                tools: {&lt;br /&gt;
                        buttonId: {&lt;br /&gt;
                                label: &#039;Insert JavaScript code tags&#039;,&lt;br /&gt;
                                type: &#039;button&#039;,&lt;br /&gt;
                                icon: &#039;/images/f/f0/JS_editor_toolbar_icon.png&#039;,&lt;br /&gt;
                                action: {&lt;br /&gt;
                                        type: &#039;encapsulate&#039;,&lt;br /&gt;
                                        options: {&lt;br /&gt;
                                                pre: &#039;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;\r&#039;,&lt;br /&gt;
                                                peri: &amp;quot;Insert javascript code here\r&amp;quot;,&lt;br /&gt;
                                                post: &amp;quot;&amp;lt;/source&amp;gt;&amp;quot;&lt;br /&gt;
                                        }&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
});&lt;br /&gt;
jQuery(document).ready(function ($) {&lt;br /&gt;
        $(&#039;#wpTextbox1&#039;).wikiEditor(&#039;addToToolbar&#039;, {&lt;br /&gt;
                section: &#039;advanced&#039;,&lt;br /&gt;
                group: &#039;code&#039;,&lt;br /&gt;
                tools: {&lt;br /&gt;
                        buttonId: {&lt;br /&gt;
                                label: &#039;Insert XML code tags&#039;,&lt;br /&gt;
                                type: &#039;button&#039;,&lt;br /&gt;
                                icon: &#039;/images/1/10/XML_toolbar_icon.png&#039;,&lt;br /&gt;
                                action: {&lt;br /&gt;
                                        type: &#039;encapsulate&#039;,&lt;br /&gt;
                                        options: {&lt;br /&gt;
                                                pre: &#039;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;\r&#039;,&lt;br /&gt;
                                                peri: &amp;quot;Insert XML code here\r&amp;quot;,&lt;br /&gt;
                                                post: &amp;quot;&amp;lt;/source&amp;gt;&amp;quot;&lt;br /&gt;
                                        }&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        });&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */&lt;br /&gt;
if ( [ &#039;edit&#039;, &#039;submit&#039; ].indexOf( mw.config.get( &#039;wgAction&#039; ) ) !== -1 ) {&lt;br /&gt;
	mw.loader.using( &#039;user.options&#039; ).then( function () {&lt;br /&gt;
		// This can be the string &amp;quot;0&amp;quot; if the user disabled the preference ([[phab:T54542#555387]])&lt;br /&gt;
		if ( mw.user.options.get( &#039;usebetatoolbar&#039; ) == 1 ) {&lt;br /&gt;
			$.when(&lt;br /&gt;
				mw.loader.using( &#039;ext.wikiEditor&#039; ), $.ready&lt;br /&gt;
			).then( customizeToolbar );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=881080</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=881080"/>
		<updated>2022-02-12T22:41:00Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: /* Onboarding Release Leads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
== Onboarding Release Leads ==&lt;br /&gt;
Release Leads will need access to a number of resources. The following are required:&lt;br /&gt;
* Account on Github (added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] for the Joomla Org (which also provides jenkins access) and [https://github.com/orgs/joomla-backports/teams/cms-release-leads the CMS Release Leads team] for the Joomla Backport org.&lt;br /&gt;
* The Forum (Ensure users are aware of release threads)&lt;br /&gt;
* Glip (CMS Maintainers, CMS Release Leads, WebMasters Team, Production, CMS Release Team)&lt;br /&gt;
* Introduction with Translation, JSST and Webmaster Liasons&lt;br /&gt;
* SSH keys added to Update and Downloads servers (including VPN Access)&lt;br /&gt;
* Downloads Website (Release Leads -&amp;gt; CMS ACL Group)&lt;br /&gt;
* Developer Website (? ACL Group)&lt;br /&gt;
* AWS Account in Release_Managers Group. User must reset password and setup MFA.&lt;br /&gt;
* Drone Admins&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876795</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876795"/>
		<updated>2022-01-30T19:54:02Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: /* Onboarding Release Leads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
== Onboarding Release Leads ==&lt;br /&gt;
Release Leads will need access to a number of resources. The following are required:&lt;br /&gt;
* Account on Github (added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] for the Joomla Org (which also provides jenkins access) and [https://github.com/orgs/joomla-backports/teams/cms-release-leads the CMS Release Leads team] for the Joomla Backport org.&lt;br /&gt;
* The Forum (Ensure users are aware of release threads)&lt;br /&gt;
* Glip (CMS Maintainers, CMS Release Leads, WebMasters Team, Production, CMS Release Team)&lt;br /&gt;
* Introduction with Translation, JSST and Webmaster Liasons&lt;br /&gt;
* SSH keys added to Update and Downloads servers&lt;br /&gt;
* Downloads Website (Release Leads -&amp;gt; CMS ACL Group)&lt;br /&gt;
* Developer Website (? ACL Group)&lt;br /&gt;
* AWS Account in Release_Managers Group. User must reset password and setup MFA.&lt;br /&gt;
* Drone Admins&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876794</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876794"/>
		<updated>2022-01-30T17:54:22Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: /* Onboarding Release Leads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
== Onboarding Release Leads ==&lt;br /&gt;
Release Leads will need access to a number of resources. The following are required:&lt;br /&gt;
* Account on Github (added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] for the Joomla Org (which also provides jenkins access) and [https://github.com/orgs/joomla-backports/teams/cms-release-leads the CMS Release Leads team] for the Joomla Backport org.&lt;br /&gt;
* The Forum (Ensure users are aware of release groups)&lt;br /&gt;
* Glip (CMS Maintainers, CMS Release Leads, WebMasters Team, JSST)&lt;br /&gt;
* Introduction with Translation, JSST and Webmaster Liasons&lt;br /&gt;
* SSH keys added to Update and Downloads servers&lt;br /&gt;
* Downloads Website (Release Leads -&amp;gt; CMS ACL Group)&lt;br /&gt;
* AWS Account in Release_Managers Group. User must reset password and setup MFA.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876793</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876793"/>
		<updated>2022-01-30T17:53:33Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: /* Onboarding Release Leads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
== Onboarding Release Leads ==&lt;br /&gt;
Release Leads will need access to a number of resources. The following are required:&lt;br /&gt;
* Account on Github (added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] for the Joomla Org (which also provides jenkins access) and [https://github.com/orgs/joomla-backports/teams/cms-release-leads the CMS Release Leads team] for the Joomla Backport org.&lt;br /&gt;
* The Forum (Ensure users are aware of release groups)&lt;br /&gt;
* Glip (CMS Maintainers, CMS Release Leads, WebMasters Team, JSST)&lt;br /&gt;
* Introduction with Translation, JSST and Webmaster Liasons&lt;br /&gt;
* SSH keys added to Update and Downloads servers&lt;br /&gt;
* Downloads Website (Release Leads -&amp;gt; CMS ACL Group)&lt;br /&gt;
* AWS Account in Release_Managers Group&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876792</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876792"/>
		<updated>2022-01-30T17:53:08Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
== Onboarding Release Leads ==&lt;br /&gt;
Release Leads will need access to a number of resources. The following are required:&lt;br /&gt;
- Account on Github (added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] for the Joomla Org (which also provides jenkins access) and [https://github.com/orgs/joomla-backports/teams/cms-release-leads the CMS Release Leads team] for the Joomla Backport org.&lt;br /&gt;
- The Forum (Ensure users are aware of release groups)&lt;br /&gt;
- Glip (CMS Maintainers, CMS Release Leads, WebMasters Team, JSST)&lt;br /&gt;
- Introduction with Translation, JSST and Webmaster Liasons&lt;br /&gt;
- SSH keys added to Update and Downloads servers&lt;br /&gt;
- Downloads Website (Release Leads -&amp;gt; CMS ACL Group)&lt;br /&gt;
- AWS Account in Release_Managers Group&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876769</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876769"/>
		<updated>2022-01-30T11:36:25Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: /* Maintenance Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
Release Leads will need access to a number of resources. But accounts on Github (and being added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] - which also provides jenkins access), the Forum and Glip are effectively mandatory.&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 9-10 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876403</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=876403"/>
		<updated>2022-01-30T01:30:47Z</updated>

		<summary type="html">&lt;p&gt;Wilsonge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This is a general procedure explanation for managing releases of Joomla! and the Joomla! Framework. This list is best suited for a [[Minor Release]] or [[Maintenance Release]], however the steps will generally apply to a [[Major Release]] as well but will require some judgement calls from the release manager and/or leadership team.&lt;br /&gt;
&lt;br /&gt;
There is a more formal checklist available [https://github.com/joomla/joomla-cms/blob/4.1-dev/build/release-checklist.md on GitHub] for release leads to use that is intended to complement the steps described in this page.&lt;br /&gt;
&lt;br /&gt;
Release Leads will need access to a number of resources. But accounts on Github (and being added to [https://github.com/orgs/joomla/teams/cms-release-leads/members the CMS Release Leads team] - which also provides jenkins access), the Forum and Glip are effectively mandatory.&lt;br /&gt;
&lt;br /&gt;
= CMS Release Cycle =&lt;br /&gt;
&lt;br /&gt;
== Issue Triage, Patch Review, Merging Patches ==&lt;br /&gt;
The release cycle for a new software version begins immediately after the previous one is completed. In the immediate hours and days after a release, the [https://github.com/joomla/joomla-cms issue tracker] and [https://forum.joomla.org/ support forums], in close coordination with the [https://volunteers.joomla.org/teams/bug-squad Bug Squad] and [https://volunteers.joomla.org/teams/cms-release-team CMS Release Team], should be monitored for reports of potential regressions or critical bugs that would warrant a quick follow-on release to address the issue. It is generally suggested to wait 48-72 hours before resuming merging of reviewed and ready for commit pull requests to keep the release branch &amp;quot;clean&amp;quot; and ready for a release (note this is only a suggestion, if need be a release manager could create a branch from the release tag however this involves a bit more effort therefore this suggestion is for simplicity&#039;s sake).&lt;br /&gt;
&lt;br /&gt;
Throughout the release cycle, the release manager should be involved with reviewing patches and merging reviewed patches to the appropriate release branch. As of this writing (where 4.0.6 is the present release), the following branches are generally active:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt;: This is the 3.x branch, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;: This is the 4.0.x branch - there are no more intended releases to this branch unless required by security fixes.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;: This is the main release branch and is where most activity occurs, generally only bug fixes and &amp;quot;general&amp;quot; maintenance work should merge to this branch although minor features may be merged at the discretion of the release manager and/or leadership team. All code from 3.10-dev is merged into this branch.&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;: This is the release branch for the next minor release (the branch&#039;s name will always be the version it represents), new features should be merged to this branch&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
All branches should remain in-sync and all work should be regularly merged forward. Given the above example, the following is the recommended merging workflow (in general, the suggested workflow is that 3.10-dev is merged to the current 4.x-dev branch and then through to the next minor branch):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;3.10-dev&amp;lt;/tt&amp;gt; should be merged into &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.0-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;4.1-dev&amp;lt;/tt&amp;gt; should be merged to &amp;lt;tt&amp;gt;4.2-dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is suggested that at least once per week branch merging occurs.&lt;br /&gt;
&lt;br /&gt;
== Preparing To Release ==&lt;br /&gt;
When scheduling and preparing a release, the timeline should be communicated with the Production and Marketing &amp;amp; Communication Department leadership so that all teams are prepared to support the release. Note that when scheduling releases, consideration should be given to holidays around the world and the impact of issuing a release near those periods considered. Helpful resources include http://interfaith-calendar.org/ and https://www.timeanddate.com/holidays/&lt;br /&gt;
&lt;br /&gt;
=== Review Release Milestone and Blockers ===&lt;br /&gt;
On GitHub, check the [https://github.com/joomla/joomla-cms/milestones milestone] for the release you are preparing to create and for any open items with the [https://github.com/joomla/joomla-cms/labels/release-blocker release-blocker] label. If there are remaining open items, review them to determine if they are items that should be included in the release or if they can be rescheduled to a later release.&lt;br /&gt;
&lt;br /&gt;
=== Release Schedule ===&lt;br /&gt;
==== Minor Release ====&lt;br /&gt;
Given the nature of a minor release, the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* Six weeks prior to planned stable release: Tag the first Beta release&lt;br /&gt;
** At this point the release should be considered feature complete and new features should be deferred to the next minor release&lt;br /&gt;
* Weekly Beta releases should follow this until the Release Candidate&lt;br /&gt;
* Two weeks prior to planned stable release: Tag the Release Candidate&lt;br /&gt;
** At this point the release branch(es) should remain closed for committing except for high priority bug fixes and language updates&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* One week prior to planned stable release: If necessary, create a second Release Candidate&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
==== Maintenance Release ====&lt;br /&gt;
Maintenance releases operate on a 4-6 week cycle and the following is the suggested release timeline:&lt;br /&gt;
&lt;br /&gt;
* 7 days before planned release date: Tag a Release Candidate&lt;br /&gt;
** With the Release Candidate, language freeze is also in effect and no language changes are permitted unless there is an urgent need (which should be communicated with the translations coordinator); note that if necessary the language freeze may be declared earlier but the Release Candidate should be considered the &amp;quot;no later than&amp;quot; time&lt;br /&gt;
** Inform the CMS Release Team and call out anything that you would like extra testing on&lt;br /&gt;
* 2-3 days before release: Build final packages - share with CMS Release Team and do release preparation activities.&lt;br /&gt;
* Planned release date: Tag the stable release&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Release Changes ===&lt;br /&gt;
Before tagging a release, the list of changes in the release should be reviewed by the release manager and/or leadership team. The list of changes can be found using GitHub&#039;s compare function with the URL &amp;lt;tt&amp;gt;https://github.com/joomla/joomla-cms/compare/&amp;lt;version&amp;gt;...4.1-dev&amp;lt;/tt&amp;gt; which will compare the changes from &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; to the current 4.1-dev branch (for example, https://github.com/joomla/joomla-cms/compare/3.9.0...3.9.1-rc is the comparison from the 3.9.0 release tag to the 3.9.1-rc tag). Key purposes of this review include:&lt;br /&gt;
&lt;br /&gt;
* Ensuring all patches are compliant with Semantic Versioning (SemVer) (i.e. no backward compatibility breaks in minor or maintenance releases and no features in maintenance releases); SemVer violations should be cleared with the Production Department leadership&lt;br /&gt;
* Ensuring all code revisions are compatible with Joomla&#039;s minimum supported versions (i.e. no PHP 5.4 syntax in 3.x releases where PHP 5.3 is the minimum supported version, exceptions may be made if introducing a code path and files that will only be executed on newer PHP versions)&lt;br /&gt;
** Joomla&#039;s testing integrations should not be relied on in full for this as there are large portions of the Joomla code base which do not have automated test coverage, and as of this writing, there is not a code linting process in place checking for potential issues&lt;br /&gt;
* Ensuring features and &amp;quot;significant&amp;quot; changes are documented&lt;br /&gt;
&lt;br /&gt;
=== Security Fixes ===&lt;br /&gt;
From time to time, security fixes must be included in a release. Prior to every release, the release manager should check with the [https://volunteers.joomla.org/teams/security-strike-team Security Strike Team] to determine if security fixes are required, and if so ensure this is communicated to all members involved with release work (i.e. the marketing team liaison who assists with the publication of release related material). When a security release is necessary, an internal Release Candidate should be built for testing by the Security Strike Team, CMS Release Team, and [https://volunteers.joomla.org/teams/cms-maintenance-team CMS Maintenance Team] with all security patches included. These teams should also receive information about the vulnerabilities being addressed to ensure there are no regressions in the impacted areas.&lt;br /&gt;
&lt;br /&gt;
Note, when a security fix involves a Joomla Framework package, the Framework package should be patched first and a release created of the affected package then the CMS updated with &amp;lt;tt&amp;gt;composer update&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sometimes security fixes are required for composer dependencies that are out of support. In such cases we fork the 3rd party dependency into https://github.com/joomla-backports and then apply security fixes there in a &amp;lt;tt&amp;gt;joomla-backports&amp;lt;/tt&amp;gt; branch (and override the [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L28-L32 repository in composer.json] and as well as the branch reference [https://github.com/joomla/joomla-cms/blob/3.10.5/composer.json#L54 here]. Links are a sample for PHPMailer overrides in Joomla 3.10).&lt;br /&gt;
&lt;br /&gt;
=== Release FAQ ===&lt;br /&gt;
Create Release FAQ Category on the Joomla Documentation site. (i.e. Clone the contents of an existing page such as [https://docs.joomla.org/Category:Version_4.0.6_FAQ FAQ] and update the version number to your required version)&lt;br /&gt;
&lt;br /&gt;
== Building a Release ==&lt;br /&gt;
Building a release starts with checking that any files and folders that have been deleted are included in the arrays in the installer script at &amp;lt;tt&amp;gt;administrator/components/com_admin/script.php&amp;lt;/tt&amp;gt;. There is a helper script in the repository to assist with this located at &amp;lt;tt&amp;gt;build/deleted_file_check.php&amp;lt;/tt&amp;gt;. Running &amp;lt;tt&amp;gt;php build/deleted_file_check.php&amp;lt;/tt&amp;gt; with its required &amp;lt;tt&amp;gt;--from&amp;lt;/tt&amp;gt; option will write a file to &amp;lt;tt&amp;gt;build/deleted_files.txt&amp;lt;/tt&amp;gt; with the list of files deleted since the from reference. Please see the PHP file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
The following steps require the individual to create commits and tags. It is suggested that these commits and tags be GPG signed as an extra security step but this is not a mandatory requirement as of this writing.&lt;br /&gt;
&lt;br /&gt;
If creating a security release, at this point you should apply all patches provided by the security team.&lt;br /&gt;
&lt;br /&gt;
Once it is confirmed that the deleted files listing is correct, the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script should be executed to set the new version number. This script will also perform maintenance steps such as correcting the copyright year ranges for all files and replacing the &amp;lt;tt&amp;gt;__DEPLOY_VERSION__&amp;lt;/tt&amp;gt; placeholder. Please see the file for all documentation about this script.&lt;br /&gt;
&lt;br /&gt;
After running this script, review all changes with &amp;lt;tt&amp;gt;git diff&amp;lt;/tt&amp;gt; as a final check before creating your release commit. Once you are satisfied that all changes are correct, commit your changes locally. Once committed, create the release tag locally; all release tags should be the version number you are creating and should match the output of &amp;lt;tt&amp;gt;Joomla\CMS\Version::getShortVersion()&amp;lt;/tt&amp;gt; (so if you have created 3.9.0-beta2 then the tag should be named 3.9.0-beta2).&lt;br /&gt;
&lt;br /&gt;
Once the tag has been created, you will run the &amp;lt;tt&amp;gt;build/build.php&amp;lt;/tt&amp;gt; script to generate the release packages. To ensure a clean build is produced, the script makes an archive of the tag you are building using the &amp;lt;tt&amp;gt;git archive&amp;lt;/tt&amp;gt; command and extracts this to the &amp;lt;tt&amp;gt;build/tmp/&amp;lt;timestamp&amp;gt;&amp;lt;/tt&amp;gt; directory. Depending on the patch version number, the following packages will be created in the &amp;lt;tt&amp;gt;build/tmp/packages&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* 0: Full installation and upgrade packages&lt;br /&gt;
* 1: Full installation, upgrade packages, and patch packages for x.y.0 to x.y.1&lt;br /&gt;
* 2+: Full installation, upgrade packages, patch packages for x.y.0 to x.y.&amp;lt;new&amp;gt; and x.y.&amp;lt;new-1&amp;gt; to x.y.&amp;lt;new&amp;gt; (i.e. when creating 3.8.8 this will create a patch package suitable for all 3.8.x releases and an optimized patch package for 3.8.7 to 3.8.8)&lt;br /&gt;
&lt;br /&gt;
Additionally, the script will generate a &amp;lt;tt&amp;gt;build/tmp/checksums.txt&amp;lt;/tt&amp;gt; file with the checksums for all generated packages. &amp;lt;tt&amp;gt;build/tmp/github_release.txt&amp;lt;/tt&amp;gt; is also produced which is a text template used for the GitHub releases.&lt;br /&gt;
&lt;br /&gt;
After the packages are created, you should validate that you are able to install and update a site using the ZIP packages (as these are the most frequently used type and served by our update system).&lt;br /&gt;
&lt;br /&gt;
== Publishing a Release ==&lt;br /&gt;
=== Release Packages ===&lt;br /&gt;
Depending on the type of release being created, you will publish the release packages in different locations.&lt;br /&gt;
&lt;br /&gt;
==== Alpha, Beta, Release Candidate ====&lt;br /&gt;
The packages for these releases are uploaded to GitHub. When ready to publish, you should push the release tag you created to GitHub and use their interface to create a release from the tag and upload the packages.&lt;br /&gt;
&lt;br /&gt;
==== Stable ====&lt;br /&gt;
The packages for stable releases are uploaded to multiple locations, this is in part driven by the fact that the Amazon Web Services (AWS) S3 region used by Joomla is blocked in some locations therefore download mirrors are available when necessary.&lt;br /&gt;
&lt;br /&gt;
Note that the Joomla! Downloads Portal release can be done in advance (as long as the release is kept unpublished until release day). The Update server and GitHub releases are public by default and therefore should only be done at the time of release.&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Downloads Portal =====&lt;br /&gt;
The canonical source for all stable releases is the [https://downloads.joomla.org/ Joomla! Downloads Portal]. The packages served from the site use Joomla&#039;s AWS account. You will need to log into the AWS console to upload the packages to S3 under the &amp;lt;tt&amp;gt;joomla-official-downloads&amp;lt;/tt&amp;gt; bucket. The exact path inside the bucket is &amp;lt;tt&amp;gt;joomladownloads/joomla&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; where &amp;lt;tt&amp;gt;&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; is the major version number (i.e. &amp;lt;tt&amp;gt;joomla3&amp;lt;/tt&amp;gt;), note for compatibility with Akeeba Release System folders for each individual release are not used. You can use [https://aws.amazon.com/cli/ AWS CLI] to upload these files - but MFA is still required - follow the procedure documented [https://aws.amazon.com/premiumsupport/knowledge-center/authenticate-mfa-cli/ here] or use a tool to automate this such as [https://github.com/broamski/aws-mfa AWS-MFA]&lt;br /&gt;
&lt;br /&gt;
Once files have been uploaded to S3 then you need to generate the release in Akeeba Release System on the Downloads Portal. To generate all required items quickly it&#039;s recommended to use the &amp;lt;tt&amp;gt;cli/ars-create-cms-release.php&amp;lt;/tt&amp;gt; script - the source for this can be found on [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-create-cms-release.php Github].&lt;br /&gt;
&lt;br /&gt;
Note that if you need to rebuild a package - for example because issues are found in the release candidate - you do not need to re-create the ARS resources but simply delete and reupload the S3 packages then use the &amp;lt;tt&amp;gt;cli/ars-get-hashes.php&amp;lt;/tt&amp;gt; script on the downloads site (which simply update the checksums for each item in the release) - source code for this is also located at  [https://github.com/joomla/downloads.joomla.org/blob/master/www/cli/ars-get-hashes.php Github].&lt;br /&gt;
&lt;br /&gt;
===== Joomla! Update Server =====&lt;br /&gt;
The Joomla! Update Server is used as a mirror for the download packages. After connecting to the server, you should create a new folder at &amp;lt;tt&amp;gt;www/releases/&amp;lt;version&amp;gt;&amp;lt;/tt&amp;gt; (i.e. &amp;lt;tt&amp;gt;www/releases/3.9.1&amp;lt;/tt&amp;gt; for the 3.9.1 release) and upload the packages here.&lt;br /&gt;
&lt;br /&gt;
===== GitHub =====&lt;br /&gt;
The packages are also uploaded to GitHub. This is similar to the steps for alpha, beta, and release candidate releases above. Note that you only need to push the release tag at this point (i.e. &amp;lt;tt&amp;gt;git push --tags&amp;lt;/tt&amp;gt;), you can wait to push the updated release branch until after the release is available.&lt;br /&gt;
&lt;br /&gt;
=== Announcements ===&lt;br /&gt;
==== joomla.org ====&lt;br /&gt;
For all stable releases, the main release announcement is published to the &amp;lt;tt&amp;gt;Joomla! Official News &amp;gt; Project Release News&amp;lt;/tt&amp;gt; category on the main &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; website. This is primarily handled by the Marketing team - however release leads are expected to contribute to the &#039;&#039;Bug fixes and Improvements&#039;&#039; section as well as highlighting any other information that may need to be called out as part of release notes. After release the Social Media team need to be made aware to ensure the release is available on social media - use the &#039;&#039;Contact the Social Media Team&#039;&#039; Channel on Glip.&lt;br /&gt;
&lt;br /&gt;
For a minor release, an updated version of the landing page at &amp;lt;tt&amp;gt;joomla.org/4&amp;lt;/tt&amp;gt; (previously &amp;lt;tt&amp;gt;joomla.org/3&amp;lt;/tt&amp;gt;) is published. Generally, this site is backed up from the sandbox location and transferred to the live domain shortly before release, this transfer should be coordinated with the [https://volunteers.joomla.org/teams/webmasters-team Webmasters Team].&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
For security releases, all accompanying articles are published to the &amp;lt;tt&amp;gt;News &amp;gt; Security Centre&amp;lt;/tt&amp;gt; category on the Joomla! Developer Network. As these articles are referenced from the main release announcement, these should be published at the same time.&lt;br /&gt;
&lt;br /&gt;
== Update Server ==&lt;br /&gt;
The update server must be updated to alert websites that a core update is available, this subdomain is managed on GitHub at https://github.com/joomla/update.joomla.org. Prior to each release, a pull request should be prepared with necessary changes for the release (generally this updates the version number, announcement URL, package URLs, and package checksums for the stable release and updating the version number for the nightly builds), see https://github.com/joomla/update.joomla.org/pull/117 as an example of this update for the 3.9.1 release. Pushes to the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of this repo are automatically deployed thanks to a Jenkins job, notifications for many of the Jenkins jobs are sent to the &amp;lt;tt&amp;gt;.org Build Notifications&amp;lt;/tt&amp;gt; channel on RingCentral Glip so you should ensure a success notification was sent here otherwise check if there was an issue with the job and/or manually deploy the updated files.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;update.joomla.org&amp;lt;/tt&amp;gt; subdomain is behind a CDN and it generally takes 5-10 minutes for all nodes to update, if need be you can access &amp;lt;tt&amp;gt;update1.joomla.org&amp;lt;/tt&amp;gt; to verify the right files are deployed without using the CDN. Note files cache times aren&#039;t consistent and often we&#039;ve seen issues where the list update file is the new version and the extension.xml file is on the old version.&lt;br /&gt;
&lt;br /&gt;
== Post Release Actions ==&lt;br /&gt;
Once the release is published, there are several additional tasks that should be completed shortly after.&lt;br /&gt;
&lt;br /&gt;
=== Post-Release Version Bump ===&lt;br /&gt;
The version should be bumped to the next version scheduled for release using the &amp;lt;tt&amp;gt;build/bump.php&amp;lt;/tt&amp;gt; script (i.e. after the 3.9.1 release this would be bumped to 3.9.2-dev).&lt;br /&gt;
&lt;br /&gt;
=== Branch Merging ===&lt;br /&gt;
After incrementing the version number, you should merge all the release changes forward to other active branches (especially in the case of a security release). Ensure you pay careful attention while resolving merge conflicts, when making a merge that includes a version bump generally all files which contain the version string and/or release date will be in conflict (as of this writing this is 8 files).&lt;br /&gt;
&lt;br /&gt;
=== Push Updated Branches ===&lt;br /&gt;
When ready, you should directly push your updates to the Git repo. If you elect to use pull requests, the pull requests should NEVER be squashed or rebased otherwise this will wipe out Git&#039;s awareness of the merged commits and will make your next branch merges even more complex. Likewise, as an example, if the commit preparing the 3.9.1 release and bumping the version string to 3.9.2-dev were squash merged as a pull request, then the commit that the 3.9.1 release was tagged from would not be in the repository.&lt;br /&gt;
&lt;br /&gt;
=== Update Release Milestones ===&lt;br /&gt;
On GitHub, all merged items are assigned to a milestone to help organize items. With each release, the [https://github.com/joomla/joomla-cms/milestones milestones] should be updated to ensure that the milestone for the release you created has been closed and a milestone for the next release is open.&lt;br /&gt;
&lt;br /&gt;
=== Regenerate Nightly Builds ===&lt;br /&gt;
The nightly builds for any branch updated during the release process should be regenerated to include the release&#039;s changes. These can be manually triggered within the &amp;lt;tt&amp;gt;CMS Packaging&amp;lt;/tt&amp;gt; folder on the Jenkins server.&lt;br /&gt;
&lt;br /&gt;
=== Website Updates ===&lt;br /&gt;
With all code updates pushed, there are several website updates that need to be triggered.&lt;br /&gt;
&lt;br /&gt;
==== api.joomla.org ====&lt;br /&gt;
With each release, an updated build of the API documentation should be deployed to the &amp;lt;tt&amp;gt;api.joomla.org&amp;lt;/tt&amp;gt; website. These updates are triggered with the &amp;lt;tt&amp;gt;Joomla! API &amp;gt; Deploy Docs - CMS&amp;lt;/tt&amp;gt; job on Jenkins. As this job relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed.&lt;br /&gt;
&lt;br /&gt;
==== developer.joomla.org ====&lt;br /&gt;
After a release, the &amp;lt;tt&amp;gt;Joomla! Project Roadmap&amp;lt;/tt&amp;gt; article in the &amp;lt;tt&amp;gt;Uncategorised&amp;lt;/tt&amp;gt; category should be updated to reflect the newly released version and updated links, as well as adding expected release dates for the next release.&lt;br /&gt;
&lt;br /&gt;
The version whitelist for the statistics server should also be updated to allow the next version to be submitted; if you have not already, you should have a clone of the https://github.com/joomla/statistics-server repository on your local system. Once cloned and set up, run the &amp;lt;tt&amp;gt;bin/stats tags:joomla&amp;lt;/tt&amp;gt; command to regenerate the Joomla version whitelist. As this command relies on the release tags from the CMS repo, this can only be done after the release tag has been pushed. The updated &amp;lt;tt&amp;gt;versions/joomla.json&amp;lt;/tt&amp;gt; should be committed and pushed, and a Jenkins job will deploy the updated site resources.&lt;br /&gt;
&lt;br /&gt;
== Additional Considerations ==&lt;br /&gt;
The release manager or a delegate is suggested to be in communication with the Webmasters Team to ensure the &amp;lt;tt&amp;gt;joomla.org&amp;lt;/tt&amp;gt; websites are updated in a timely manner. When a security release is scheduled, it is encouraged to share the update release package with the team so that our sites may be updated before the fix is made public to mitigate the chance of the vulnerability being used to exploit one of our sites. It also provides additional testing for security fixes on real world sites in addition to the tests performed by the CMS Release Team.&lt;br /&gt;
&lt;br /&gt;
= Framework Release Cycle =&lt;br /&gt;
The packages of the Joomla Framework are on an independent lifecycle meaning each package can be updated and released independently of all others. Generally the only restriction is with major releases, which should coincide with the CMS release cycle (i.e. CMS 3.x uses Framework 1.x, CMS 4.x will use Framework 2.x therefore Framework 2.0 stable releases should not be made until the CMS is in its beta phase at the earliest).&lt;br /&gt;
&lt;br /&gt;
== Tagging a Release ==&lt;br /&gt;
Most packages can be tagged and released through the &amp;lt;tt&amp;gt;Joomla! Framework &amp;gt; Package Release&amp;lt;/tt&amp;gt; job on Jenkins, however as of this writing this job only supports tagging releases from a repository&#039;s &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch. To tag a release, select the package you wish to update and specify the version you are releasing in the job&#039;s parameters and run the job; all releases should follow Semantic Versioning to set the correct number.&lt;br /&gt;
&lt;br /&gt;
Once the job has completed, you should verify the new release is visible on [https://packagist.org/packages/joomla/ Packagist]. Within a day, the new update should be visible on the [https://framework.joomla.org/status Joomla Framework Status page] (the database is updated via cron job reading from Packagist&#039;s API), if the updated version isn&#039;t seen on the site in a relatively timely manner you should clone the website locally and debug the &amp;lt;tt&amp;gt;packagist:sync:releases&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Security Releases ==&lt;br /&gt;
When a security release is created, a pull request should be sent to the [https://github.com/FriendsOfPHP/security-advisories FriendsOfPHP/security-advisories repository] with relevant details. This repository is used by many tools in the PHP and Composer ecosystem to alert users of security issues. https://github.com/FriendsOfPHP/security-advisories/pull/134 is an example of this pull request.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Wilsonge</name></author>
	</entry>
</feed>