Joomla explained
Joomla is a free, open source content management system that powers everything from small business websites to large multilingual portals. It looks like "just a website tool" at first, but underneath it is a complete application framework with users, permissions, multilingual support, and a REST API.
This article explains what Joomla really is and how it fits together. It covers the basics for website owners and editors, the daily setup for administrators, and the technical details for developers. You will learn how a Joomla site is built, how the backend and frontend relate, how extensions work, and how Joomla 6 exposes content through the Web Services API.
Joomla is not one program. It is a framework that runs many small parts together.
The goal is simple: help you understand Joomla well enough to plan, run, and grow a site with confidence.
1. The Basics
1.1 What is Joomla?
Joomla is a content management system (CMS). A CMS lets you create and manage a website without writing HTML by hand. You log in, type your content, click save, and the system builds the public pages for you.
Three facts define Joomla:
- It is free and open source, released under the GNU GPL license.
- It is written in PHP and stores its data in a database such as MySQL or MariaDB.
- It is maintained by a global volunteer community, not a single company.
1.2 What Can You Build With It?
Joomla is a general-purpose CMS. People use it for many kinds of sites:
| Type of site | Example |
|---|---|
| Business website | Company pages, services, contact forms. |
| News or magazine | Many authors, categories, and tags. |
| Membership site | Restricted content for logged-in users. |
| Multilingual portal | One site in several languages. |
| Web application | Custom components for bookings, catalogues, and more. |
1.3 Joomla, WordPress, and Drupal
People often compare the three big open source systems. A short, fair summary:
- WordPress is the simplest to start with and dominates blogs and small sites.
- Drupal is the most flexible for very large, custom projects, but has a steeper learning curve.
- Joomla sits in the middle. It gives you strong built-in features (multilingual, access control, custom fields) without needing many extra plugins.
The big advantage of Joomla is that a lot of power is already in the core. You do not need a long list of add-ons just to build a serious site.
Back to top2. A Short History and the Version Cycle
2.1 Where Joomla Comes From
Joomla started in 2005 as a fork of an older CMS called Mambo. The name comes from the Swahili word Jumla, which means "all together". That idea still fits: Joomla brings many parts together into one system.
2.2 Major Versions
Joomla moves forward in major releases. Each major version may change how extensions and templates work:
| Year | Version | What changed |
|---|---|---|
| 2005 | Joomla 1.0 | Fork of Mambo CMS. |
| 2008-2012 | Joomla 1.5 - 2.5 | The classic era, very long-lived. |
| 2012 | Joomla 3.x | Bootstrap front end, long support, very widely used. |
| 2021 | Joomla 4.x | A big modern rewrite: new backend, Web Services API, namespaced code. |
| 2023 | Joomla 5.x | Refinement, performance, and cleaner code. |
| 2025 | Joomla 6.x | The current generation, building on the 4 and 5 architecture. |
2.3 Why Versions Matter
Two practical rules follow from the version cycle:
- Keep your site on a supported version. Old versions stop receiving security fixes.
- Plan for major upgrades in advance, because some extensions need an update to keep working.
Minor updates (for example 6.0 to 6.1) are usually safe and quick. Major upgrades need a test run on a copy of your site first.
Back to top3. The Building Blocks of a Joomla Site
Almost everything you do in Joomla uses the same small set of building blocks. Once you know these seven words, the rest of the system makes sense.
3.1 The Seven Core Concepts
| Concept | What it is |
|---|---|
| Article | A single piece of content, one page of text and images. |
| Category | A container that groups articles and other items. |
| Menu | A list of links that decides which pages exist and how visitors reach them. |
| Module | A small block of content placed around the main page (login box, menu, latest news). |
| Component | The main application that fills the central part of a page. |
| Plugin | Background code that reacts to events and changes how Joomla behaves. |
| Template | The design layer that controls how everything looks. |
3.2 How a Page Comes Together
When a visitor opens a page, Joomla assembles it from these parts:
Menu item decides which component and view to load
|
Component builds the main content (for example an article)
|
Modules add blocks around it (menu, search, login)
|
Plugins run during the process and can change the output
|
Template wraps everything in the site design
This is the single most important idea in Joomla: a menu item chooses a component, the template draws the frame, and modules fill the spaces around the content.
3.3 A Quick Example
Imagine a "News" page:
- A menu item of type "Category Blog" points to the News category.
- The component
com_contentreads the articles in that category. - A module shows the main menu on the left, another shows a search box.
- The template decides colours, fonts, and the position of each block.
4. Installing Joomla
4.1 What You Need
Joomla runs on a normal web server. The typical requirements are:
- A web server: Apache, NGINX or OpenLiteSpeed
- PHP in a supported version (Joomla 6 uses a recent PHP release).
- A database: MySQL, MariaDB or PostgreSQL.
- HTTPS, so that the website traffic of visitors and logins is encrypted.
This combination is often called a LAMP stack (Linux, Apache, MySQL, PHP).
4.2 The Installation Steps
A fresh install follows a short, guided process:
1. Download Joomla and upload the files to your server.
2. Create an empty database and a database user.
3. Open the site in your browser to start the web installer.
4. Enter the site name, the admin account, and the database details.
5. Joomla creates the tables and finishes the setup.
After install, Joomla asks you to delete the installation folder. This is a safety step, so nobody can run the installer again.
4.3 Sample Data
During install you can load sample data. This fills the site with example articles, menus, and modules. It is a good way to learn, because you can see how a working site is wired together. On a real project, install a blank site instead.
Back to top5. The Backend: the Administrator Area
5.1 Two Sides of Every Joomla Site
Every Joomla website has two parts:
- The frontend: the public website your visitors see.
- The backend: the private control panel where you manage the site.
You reach the backend by adding /administrator to your site address:
https://example.test/administrator
5.2 The Main Menus
The backend top menu groups every task into a few clear areas:
| Menu | What you manage there |
|---|---|
| System | Global settings, cache, users, templates, maintenance. |
| Content | Articles, categories, custom fields, and the media library. |
| Menus | The site menus and their menu items. |
| Components | The larger built-in tools (contacts, banners, smart search, and more). |
| Users | User accounts, groups, and access levels. |
5.3 The Home Dashboard
After login you land on the Home Dashboard. It shows quick links, sample widgets, and important notices such as available updates. Treat the update notice as a job to do, not a message to ignore.
Back to top6. The Frontend and Templates
6.1 What a Template Does
A template controls the look of your site: colours, fonts, spacing, and where each block goes. The same content can look completely different under two templates, because the content and the design are kept separate.
6.2 Module Positions
Templates define named module positions, such as sidebar-right or top-a. You then assign modules to these positions. This is how you decide, for example, that the login box appears top right and the menu appears on the left.
Template position "menu" → Main Menu module
Template position "sidebar" → Latest Articles module
Template position "footer" → Copyright module
6.3 Site and Administrator Templates
Joomla has separate templates for the two sides of the site:
- A site template for the public frontend.
- An administrator template for the backend.
You can install several templates and switch the active one, or assign a different template to specific menu items.
6.4 Overrides
Templates can include overrides: copies of Joomla's default layout files placed inside the template. Overrides let you change how a component looks without editing Joomla's core files, so your changes survive updates. We return to this in the developer section.
Back to top7. Extensions: How to extend Joomla's functionality
You extend Joomla by installing extensions. An extension is a package you upload in the backend. Knowing the different types saves a lot of confusion.
7.1 The Five Main Extension Types
| Type | Role | Prefix |
|---|---|---|
| Component | A full application; fills the main page area. | com_ |
| Module | A small block placed in a template position. | mod_ |
| Plugin | Background code that reacts to events. | plg_ |
| Template | The design layer of the site or backend. | tpl_ |
| Language | A translation pack for the interface. | lang |
Two more types exist for developers and packagers:
- Library: shared PHP code that several extensions can reuse, instead of each one shipping its own copy.
- Package: a bundle that installs many extensions at once. A shop, for example, often arrives as one package that contains its component, modules, and plugins together.
7.2 How They Work Together
A real feature often uses several types at once. A shop, for example, might ship as:
- A component for the product catalogue and checkout.
- A module for the "shopping cart" block.
- A plugin that adds product search results to Smart Search.
7.3 Installing Extensions Safely
You install extensions under System → Install → Extensions. Two safety rules matter:
- Only install extensions from sources you trust. An extension runs with full access to your site.
- Prefer extensions that are actively maintained and support your Joomla version.
8. Users, Groups, and Access Control
8.1 The Three ACL Concepts
Joomla has a powerful Access Control List (ACL) system. It is built from three ideas that work together:
| Concept | Question it answers |
|---|---|
| User Group | Which group does this user belong to? |
| Access Level | Which groups can see this item? |
| Permissions | What can a group do (create, edit, delete)? |
8.2 Default User Groups
Joomla ships with a ready-made set of groups, arranged as a tree. Each group inherits from its parent:
Public
+-- Registered
| +-- Author
| +-- Editor
| +-- Publisher
+-- Manager
+-- Administrator
+-- Super Users
A Super User can do everything. A Registered user can only see content reserved for logged-in visitors. You can add your own groups for any situation, such as "Paid Members" or "Staff".
8.3 Permissions Inherit From the Top
Permissions flow downward, from global settings to the single item:
Global Configuration
+-- Component (for example com_content)
+-- Category
+-- Article
At each level a permission can be Inherit, Allowed, or Denied. A "Denied" high up cannot be overridden lower down. A useful rule: deny at the highest level you can, allow at the lowest level you must.
Back to top9. Multilingual Joomla
9.1 Built Into the Core
One of Joomla's strongest features is that multilingual support is built in. You do not need a paid extension to run a site in several languages.
9.2 How It Works
A multilingual site uses a few connected parts:
- Install one language pack per language.
- Enable the Language Filter plugin.
- Create content languages and tag each article, category, and menu with a language.
- Add associations so Joomla knows that the English and Dutch versions of a page belong together.
9.3 The Language Switcher
A small Language Switcher module lets visitors jump between languages. Thanks to associations, it sends them to the matching translated page instead of back to the home page.
Back to top10. Under the Hood (Developer View)
10.1 The Directory Layout
A Joomla install has a clear folder structure. The most important folders are:
administrator/ the backend application and admin parts of components
api/ the Web Services (REST) application
components/ the frontend part of each component
modules/ site modules
plugins/ all plugins, grouped by type
templates/ site templates
libraries/ the Joomla and Framework core code
language/ installed language packs
media/ public CSS, JavaScript, and images
images/ your uploaded media
cache/, tmp/, logs/ working folders
10.2 The Database
Joomla stores almost everything in the database. Table names use a configurable prefix, written as #__ in code (for example #__content for articles). The prefix lets several Joomla sites share one database safely.
A few core tables show the pattern:
| Table | Stores |
|---|---|
#__content |
Articles. |
#__categories |
Categories for every component. |
#__menu |
Menu items. |
#__modules |
Modules and their settings. |
#__extensions |
Every installed extension. |
#__users |
User accounts (passwords are stored as hashes, never plain text). |
#__user_usergroup_map |
Which user belongs to which group. |
#__assets |
The ACL rules; this is the table behind every permission. |
The #__assets table is the quiet engine of Joomla's access control. Every component, category, and article has a matching asset row that stores its permission rules as JSON, arranged as a nested tree so permissions can inherit from parent to child. When ACL "does not behave", the cause is almost always here.
10.3 The MVC Pattern
Joomla components follow the Model-View-Controller (MVC) pattern. This separates the work into three roles:
- The Model talks to the database and holds the data.
- The View turns that data into HTML, JSON, or another format.
- The Controller reacts to the request and ties the two together.
Modern Joomla code is fully namespaced and uses a factory to load components. A typical example:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$factory = $app->bootComponent('com_content')->getMVCFactory();
$model = $factory->createModel('Articles', 'Site', ['ignore_request' => true]);
$items = $model->getItems();
10.4 Service Providers and Dependency Injection
Modern Joomla extensions no longer rely on global access to build their objects. Each extension ships a service provider that registers its classes in a Dependency Injection (DI) container. Joomla then asks the container for what it needs, and the container wires the parts together.
For a component the entry point is one file:
com_example/
services/
provider.php registers the component in the DI container
src/
Controller/
Model/
View/
The benefit is cleaner, testable code: classes declare what they depend on instead of reaching out for it. This is also why modern Joomla code follows PSR standards and can use Composer for third-party libraries.
10.5 The Database Abstraction Layer
Developers rarely write raw SQL strings in Joomla. Instead they use the Database Abstraction Layer and its query builder, which produces safe, portable queries:
$db = $this->getDatabase();
$query = $db->getQuery(true)
->select($db->quoteName(['id', 'title']))
->from($db->quoteName('#__content'))
->where($db->quoteName('state') . ' = :state')
->bind(':state', 1, ParameterType::INTEGER);
$db->setQuery($query);
$rows = $db->loadObjectList();
The query builder quotes names, binds parameters, and adapts to the database in use. This prevents SQL injection and keeps the same code working on MySQL and MariaDB.
10.6 Events and Plugins
Joomla uses an event system driven by an event dispatcher. At key moments it fires an event, and plugins listen for it. For example, onContentPrepare fires before content is shown, so a plugin can change the text. This is how Joomla stays flexible without anyone editing the core.
10.7 Performance and Caching
Joomla can cache rendered output to make pages faster. It offers page cache, view cache, and module cache. Remember to clear the cache after you change content or settings.
On busy sites you combine Joomla's own cache with server-level tuning:
- OPcache: a PHP setting that keeps compiled code in memory, so PHP does not recompile on every request.
- Redis or Memcached: fast in-memory storage that Joomla can use for its cache and sessions instead of files.
- A CDN: serves images, CSS, and JavaScript from servers close to the visitor.
- Image optimization: smaller images mean faster pages and better scores.
- Database indexing: on large sites, good indexes keep queries fast.
11. The Web Services API (Headless Joomla)
11.1 Joomla as a Backend for Other Apps
Since Joomla 4, the core includes a Web Services API. This is a REST interface that lets other programs read and write Joomla data. You can use Joomla purely as a content backend for a mobile app or a separate frontend.
11.2 Authentication With a Token
API calls use a token instead of a normal login. You create a token for a user in the backend, then send it in a header:
curl -H "X-Joomla-Token: <your-token>" \
https://example.test/api/index.php/v1/content/articles
11.3 Common Endpoints
The API mirrors the structure of the core components:
| Endpoint | Returns |
|---|---|
/v1/content/articles |
A list of articles. |
/v1/content/articles/42 |
One article by id. |
/v1/content/categories |
Content categories. |
/v1/users |
User accounts. |
/v1/menus |
Menus and menu items. |
11.4 The Joomla CLI
Joomla also ships a command line tool for server tasks, such as clearing the cache or running scheduled jobs:
php cli/joomla.php core:check-updates
php cli/joomla.php cache:clean
This is useful for automation and for running tasks without opening the backend.
Back to top12. Security and Maintenance
12.1 Updates Are Your First Defence
The single most important security task is to keep Joomla and all extensions up to date. Most hacked Joomla sites run outdated software with known holes. Joomla shows updates on the dashboard and can update itself with one click.
12.2 A Simple Maintenance Routine
| How often | Task |
|---|---|
| Weekly | Check for Joomla and extension updates; apply them. |
| Weekly | Confirm that a recent backup exists and works. |
| Monthly | Review users, especially Super Users, and remove unused accounts. |
| Monthly | Check the Action Logs for unusual activity. |
12.3 Backups
A backup is a full copy of your files and database that you can restore after a problem. Always test that a backup actually restores; an untested backup is not a backup. Keep at least one copy at another location off the server.
12.4 Extra Protection
- Use strong passwords and enable two-factor authentication for backend users.
- Serve the whole site over HTTPS.
- Add security headers (Joomla has a built-in HTTP Headers plugin).
- Remove extensions you no longer use; unused code is still a risk.
12.5 What Joomla Protects You With by Default
A lot of security is already built into the core, so well-written extensions get it for free:
| Mechanism | What it does |
|---|---|
| CSRF tokens | Every form carries a one-time token, so attackers cannot forge requests on a user's behalf. |
| Input filtering | Joomla cleans incoming request data through its input class instead of trusting it raw. |
| Password hashing | Passwords are stored as strong one-way hashes, never as readable text. |
| Session protection | Sessions are validated to reduce hijacking and fixation. |
The key point for developers: use Joomla's input, form, and database tools. They apply these protections automatically. Hand-written shortcuts around them are where most extension vulnerabilities come from.
Back to top13. SEO and Metadata
13.1 Search Engine Friendly URLs
Joomla can produce clean, readable URLs. In System → Global Configuration → Site you enable:
- Search Engine Friendly URLs: turns
index.php?option=com_content&id=42into/news/joomla-6-released. - URL Rewriting: removes
index.phpfrom the address (needs server rewrite rules).
13.2 Metadata
Every article, category, and menu item can carry a meta title and meta description. Joomla also supports a global metadata setting and lets you control the robots directive per page (for example index, follow or noindex).
13.3 Built-in SEO Helpers
- Categories and Tags create natural topic clusters and clean URL paths.
- The Redirect component catches broken links and sends visitors to the right page.
- Sitemap support is available through extensions, so search engines find every page.
Good URLs and honest metadata do most of the SEO work. The rest is good content.
Back to top14. Common Mistakes and Pitfalls
14.1 Treating Joomla Like a Static Site
Symptom: an editor tries to build every page as one long article and pastes raw HTML for layout.
Fix: use menus, categories, and modules. Let Joomla assemble pages so the design stays consistent and easy to change.
14.2 Skipping Updates
Symptom: the site runs an old version for years, then gets hacked or breaks on a server upgrade.
Fix: update on a schedule. Test major upgrades on a copy first, then apply them to the live site.
14.3 Editing Core Files
Symptom: someone changes a Joomla core file to tweak a layout (called "core hack"), and the next update wipes the change.
Fix: use template overrides and plugins. Never edit core files directly.
14.4 Installing Too Many Extensions
Symptom: the site is slow, and every update is risky because dozens of add-ons might break.
Fix: use the core where you can. Each extra extension is more code to trust, update, and secure.
14.5 No Backup Before Changes
Symptom: an update or edit goes wrong and there is no way back.
Fix: take a tested backup before every update or large change.
Back to top15. Best Practices
If you only remember a few things from this article, remember these:
- Learn the seven building blocks first; the rest of Joomla follows from them.
- Keep Joomla and every extension on a supported, updated version.
- Build pages with menus, components, and modules, not with hand-written HTML.
- Use template overrides instead of editing core files.
- Prefer the strong core features over piling on extensions.
- Take a tested backup before any update or major change.
- Plan your categories, menus, and languages before you fill the site with content.
16. Quick Reference
BACKEND https://yoursite/administrator
NEW ARTICLE Content → Articles → New
NEW MENU Menus → Manage → Add Menu
ADD MODULE System → Site Modules → New
INSTALL EXT System → Install → Extensions
USERS & ACL Users → Manage / Groups / Access Levels
TEMPLATE System → Site Templates
SEF URLS System → Global Configuration → Site
UPDATES System → Update → Joomla / Extensions
API /api/index.php/v1/... with X-Joomla-Token
CLI php cli/joomla.php <command>
Back to top17. Summary
Joomla is far more than a tool for typing web pages. It is a complete system that brings many parts together:
- Content: articles, categories, and tags.
- Structure: menus and components that decide what each page does.
- Design: templates, module positions, and overrides.
- People: users, groups, and a deep access control system.
- Reach: built-in multilingual support and an SEO-friendly router.
- Integration: a REST API and a CLI for headless and automated use.
Because so much power lives in the core, a well-set-up Joomla site stays maintainable for years. The key is to learn how the parts fit together, keep everything updated, and let Joomla assemble your pages instead of fighting the system.
If you are planning a new Joomla site, migrating from an older version, or you suspect that your current setup holds you back, it pays to get the foundation right early. A clear structure today saves a lot of repair work later.
Back to top

Joomla specialist and Linux admin for fast, secure and scalable websites.


