To create a Joomla website you need hosting that runs PHP 8.3 or newer, a MySQL or PostgreSQL database, and the Joomla 6 package. Install it with your host’s one-click installer or by uploading the files and running the web installer, then build the site from articles, categories, menu items, modules and a template. The install takes ten minutes; learning the structure takes an afternoon.
Joomla sits between WordPress and a framework: more structure out of the box than WordPress, far less code than Laravel. It ships with multilingual support, granular access control and a menu system that doubles as a routing layer. That last part is why WordPress users get stuck, so I have given it its own section below.
Requirements before you buy hosting
| Component | Minimum | Recommended |
|---|---|---|
| PHP | 8.3.0 | 8.4 |
| MySQL | 8.0.13 | 8.4 |
| MariaDB | 10.4 | 12.0 |
| PostgreSQL | 12.0 | 17.6 |
| Web server | Apache 2.4, Nginx 1.26, IIS 10 | Nginx 1.29 |
| PHP extensions | json, simplexml, dom, zlib, gd, plus mysqlnd or pdo_mysql or pdo_pgsql | mbstring as well |
| PHP memory limit | Whatever the host gives you | 256 MB |
Any decent shared plan in the $3 to $10 a month range clears this. Two things to confirm before you pay: that you can select the PHP version yourself, and that mod_rewrite or the Nginx equivalent is available, because SEF URLs depend on it. The full requirements list lives in the official Joomla technical requirements page.
Step 1: One-click installer or manual install?
Use the one-click installer if your host offers Joomla in Softaculous, Installatron or their own app catalog. It creates the database, unzips the files and runs the installer for you in about a minute. The only real downsides are that some hosts lag a version or two behind, and that you learn nothing about where things live.
Install manually if you want a specific version, are deploying to a VPS, or need the site in a subdirectory. It is genuinely not hard.
Step 2: Install Joomla manually
Download the latest full package from downloads.joomla.org. Then, over SSH:
cd ~/public_html
unzip Joomla_6.1.2-Stable-Full_Package.zip
# Sane permissions: 755 on folders, 644 on files
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# Create the database and a dedicated user
mysql -u root -p -e "CREATE DATABASE joomla6 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'a-long-random-password';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON joomla6.* TO 'joomla'@'localhost'; FLUSH PRIVILEGES;"On shared hosting you will do the database part in cPanel’s MySQL Databases screen instead, and upload the zip through File Manager. Either way, write down the database name, user, password and host before you continue.
Now open your domain in a browser. The web installer runs in five screens: site language and name, Super User details, database connection, a progress bar, and an optional language-pack step. Two things to get right on screen two: do not call the account admin, and use an email address you can actually receive mail at, because that is your password reset path.
Joomla also ships a command-line installer, which is what you want for scripted or containerized deploys:
php installation/joomla.php install --site-name="Acme Co" --admin-user="Jane Doe" --admin-username=jdoe --admin-email=jane@example.com --db-type=mysqli --db-host=localhost --db-user=joomla --db-name=joomla6
# See every available option
php installation/joomla.php help installStep 3: Lock it down immediately
A production install removes the installation folder automatically when it finishes. Verify it is actually gone — if the folder is still there because of a permissions problem, anyone who finds it can re-run the installer and take the site. Delete it over FTP or SSH if the installer could not.
Then do these three things before you write a single article:
- Enable multi-factor authentication on the Super User. Go to Users → Manage, open your account, and use the Multi-factor Authentication tab. Joomla supports authenticator-app codes, WebAuthn (passkeys, fingerprint, security key), YubiKey and email codes. Generate the backup codes and store them somewhere that is not the site. You can require MFA per user group from Users → Manage → Options.
- Confirm file permissions. 644 for files and 755 for directories. If anything is 777, fix it.
configuration.phpcan safely be 444 once the site is running. - Set up backups and updates. Joomla 6 can update its own core automatically, and it is on by default for patch and minor releases. Leave it on and take a backup before major version jumps.
/administrator and bots know it. MFA is the single highest-value five minutes you will spend on this site. Rate limiting or an IP allowlist on that directory is a good second layer.The Joomla mental model (for WordPress users)
Here is the thing that trips everyone up: in Joomla, the menu item defines the page. An article on its own has no layout and no clean URL. A menu item points at a view of your content (a single article, a category blog, a list, a contact form) and that menu item carries the layout options, the module assignments, the page title and the URL segment. Publishing an article and wondering why it does not appear anywhere is the classic first-day experience.
| Joomla concept | What it does | Closest WordPress equivalent |
|---|---|---|
| Article | A single piece of content | Post or page |
| Category | Nested grouping; one per article, mandatory | Category, but you cannot pick two |
| Menu item | Chooses the view, the layout and the URL | Menu link + page template + permalink combined |
| Module | A block rendered in a template position | Widget or block in a template area |
| Component | The application that owns the main body area | A plugin that registers a post type and its templates |
| Plugin | Event-driven code that reacts to what Joomla does | Plugin using hooks and filters |
| Template | The HTML and CSS shell, with named positions | Theme |
| Template style | A saved variation you can assign to specific menu items | No real equivalent |
The admin sidebar reflects this: Content for articles, categories, media and site modules, Menus for structure, Components for the bundled applications like Contacts and Smart Search, Users for accounts and permissions, and System for configuration, templates, plugins, languages and updates.
Step 4: Your first category and article
Create the container first. Content → Categories → New, give it a title such as “News”, save. Then Content → Articles → New, write the article, set its Category to News in the right-hand panel, and save. Set Featured to Yes if you want it on the front page.
Step 5: Build a menu and set the default home item
Go to Menus → Manage → Add New Menu and create one called Main Menu if the sample data did not. Then Menus → Main Menu → Add New Menu Item. Give it a title, click Select next to Menu Item Type, and choose what this page shows — Articles → Category Blog for a news listing, Articles → Single Article for an about page.
Exactly one menu item must be the site default. In the menu item list, click the star in the Home column for the item you want as your front page. That item’s layout is what visitors see at your root URL.
New menus do not appear on the site until you publish a Menu module pointing at them. Joomla usually offers to create one when you add the menu; if you said no, you will do it in the next step.
Step 6: Assign modules to template positions
Go to Content → Site Modules → New and pick a module type — Menu, Latest Articles, Search, Custom (for arbitrary HTML). Then set three things:
- Position. Pick from the dropdown, which lists the positions your active template defines. Cassiopeia, the default site template, gives you names like
menu,topbar,sidebar-rightandbottom-a. If you cannot picture where a position sits, append?tp=1to your site URL to see the positions drawn on the page. - Menu Assignment tab. This is where you decide which pages the module appears on. The default is every page; choose “Only on the pages selected” for a sidebar that belongs to one section.
- Status. Set it to Published. A module with a position and no published status renders nothing and gives no error.
Step 7: Install a template and an extension
Everything installs the same way. Go to System → Install → Extensions and use whichever tab suits you: Upload Package File for a zip you downloaded, Install from URL to let Joomla fetch it, Install from Folder for large packages you uploaded over FTP, or Install from Web to browse the Joomla Extensions Directory without leaving the admin.
After installing a template, activate it at System → Site Templates Styles and click the star to make it the default. You can also assign a style to specific menu items, which is how you give a landing page a different shell from the rest of the site.
Before you install anything from the JED, check the last update date and the supported Joomla version. Joomla 6 keeps a backward-compatibility plugin enabled so most Joomla 5 extensions still load, but an extension nobody has touched since Joomla 3 is a liability, not a shortcut.
Step 8: Turn on SEF URLs
Out of the box your URLs look like index.php?option=com_content&view=article&id=12. Fix that before you publish anything, because changing URLs later means redirects.
- In your site root, rename
htaccess.txtto.htaccess(Apache only; on Nginx you configure rewrites in the server block instead). - Go to System → Global Configuration → Site and find the SEO block.
- Set Search Engine Friendly URLs to Yes and Use URL Rewriting to Yes. Leave Add Suffix to URL off unless you specifically want
.htmlendings. - Save, then click through several pages. If anything 404s, see the troubleshooting section.
Multilingual basics
Joomla does this natively, which is its single biggest advantage over a stock WordPress install. The sequence: install the language packs from System → Install → Languages, publish a content language for each at System → Content Languages, enable the System – Language Filter plugin, then build one menu per language with its own default home item tagged to that language. Finally add a Language Switcher module. Set it up before you have 200 articles; retrofitting is far more work.
Keeping it updated
Check System → Update → Joomla for core releases and System → Update → Extensions for everything else. Joomla 6’s automatic core updates cover patch and minor versions; major upgrades stay manual on purpose. Back up first, always, and test on a copy if the site earns money. If you want a staging copy on your own machine to test against, the same logic as installing WordPress on a local host applies — a local PHP and MySQL stack, then restore your backup into it.
Troubleshooting
Blank white admin page
A white screen is almost always a PHP fatal error with display off. Open configuration.php and set $error_reporting = 'maximum';, or check your host’s PHP error log. The usual culprits: a PHP version below 8.3, a missing extension such as gd or dom, a memory limit under 128 MB, or a template or plugin that is not Joomla 6 compatible. If it started right after installing an extension, rename that extension’s folder over FTP to disable it and get back in.
“The most recent request was denied”
The full message ends “because it contained an invalid security token”. It is a CSRF token failure, not a hack. Causes, in order of likelihood: your admin session expired while the form sat open (just log back in), your browser is blocking cookies for the domain, or your site URL is inconsistent — you logged in at example.com and submitted from www.example.com. Pick one canonical hostname, redirect the other, and raise the session lifetime in Global Configuration if it keeps happening.
404s after enabling SEF URLs
Three checks. Did you rename htaccess.txt to .htaccess? Is mod_rewrite enabled and does the host allow AllowOverride? And if Joomla lives in a subfolder, is RewriteBase in .htaccess uncommented and pointing at that folder? On Nginx, none of this applies — you need the rewrite rules in the server block, so turn Use URL Rewriting off until they are in place.
Extension install fails on upload size
The Extensions install screen shows your current maximum upload size. If your package is bigger, raise upload_max_filesize and post_max_size in PHP settings (and max_execution_time, since big installs time out too). If you cannot change PHP settings, use Install from URL or upload the unzipped package over FTP and use Install from Folder instead. Both bypass the browser upload entirely.
Frequently asked questions
Is Joomla free?
Yes. Joomla is open source under the GPL and the core software costs nothing. You pay for hosting, a domain, and optionally commercial templates or extensions. A capable Joomla site can run for well under $100 a year in the US.
Which Joomla version should I install in 2026?
Joomla 6.1.2, the current release. Do not start a new project on Joomla 5 or earlier: you would be building on a branch that is already past its prime and you would miss automatic core updates and the newer custom-field types.
Is Joomla harder than WordPress?
Steeper at the start, flatter later. The menu-item-defines-the-page model takes a day to click. In exchange you get built-in multilingual support, real access control levels, and less reliance on third-party plugins for basics. If you only ever want a blog, WordPress is quicker.
How do I add Google Analytics to a Joomla site?
Either install a tracking extension from the JED, or add the Google tag to your template’s index.php through a template override so an update does not overwrite it. The logic is identical to the WordPress case, covered in our guides to adding Google Analytics and installing Google Tag Manager.
Where does Joomla store its configuration?
Global settings live in configuration.php in the site root, including the database credentials. Everything else — extension parameters, module settings, menu items — lives in database tables prefixed with your install’s table prefix. It is the same pattern as where WordPress plugin settings are stored, and the same database query techniques apply when you need to find a setting fast.
Can I move a Joomla site to another host?
Yes. Copy all files, export and import the database, then update the database credentials and the $log_path and $tmp_path values in configuration.php. Backup extensions such as Akeeba automate the whole thing including the path rewrites.
Wrapping up
The order that works: hosting with PHP 8.3 or better, a clean database, the manual install if you want to understand your site or the one-click if you do not, then MFA and permissions before any content. Learn that menu items define pages and the rest of Joomla stops feeling arbitrary.
Get SEF URLs on and your category structure decided before you publish, because both are painful to change once search engines have indexed you. Then leave automatic core updates enabled, keep backups you have actually tested restoring, and check your extensions against each major release. That is a site you can still maintain in five years.

