Not all Joomla extensions are built the same.
Some are powerful but heavy. Others solve simple problems but introduce unnecessary complexity. When we started building the TDC Lab extension suite, we made a deliberate decision: keep everything clean, consistent, and close to Joomla’s core architecture.
This post walks through how our extensions are built — and more importantly, why that matters for performance, maintainability, and long-term compatibility.
Joomla-Native MVC — No Abstraction Layers
Every TDC Lab extension is built using Joomla 5/6 native MVC. No wrapper frameworks, no custom abstraction layers.
Components follow the standard admin/ and site/ split, with Controllers, Models, Views, and Tables in a predictable structure.
Plugins use CMSPlugin with SubscriberInterface, and modules use the classic entry-point pattern.
Why this matters:
- No learning curve if you already know Joomla
- No hidden framework behaviour
- Full compatibility with Joomla 5 and 6
- Less risk of breakage during upgrades
Consistent Structure Across Every Extension
Every extension follows the same structure. Once you understand one, you understand them all.
com_name/
├── admin/
├── site/
└── media/
Why this matters:
- Faster development across multiple extensions
- Easier maintenance and debugging
- Simpler onboarding for contributors
- Reduced cognitive load when switching between projects
---
Clear Separation: Components, Modules, Plugins
Each extension type has a clear responsibility:
- Components handle data, admin interfaces, and frontend views
- Modules display subsets of component data
- Plugins handle system-level behaviour like shortcodes or script blocking
Why this matters:
- Smaller, focused pieces of code
- Better stability (one part failing does not break everything)
- Easier testing and debugging
---
Direct Asset Loading (No Web Asset Manager)
CSS and JavaScript are loaded directly using predictable paths rather than relying on Joomla’s Web Asset Manager.
$doc->addStyleSheet('/media/com_example/css/style.css');
Why this matters:
- No silent failures
- Easier debugging
- No dependency resolution issues
- More predictable behaviour across environments
---
Clean SEF URLs with RouterView
Each component uses Joomla’s RouterView with standard rule sets to generate clean URLs like:
/faqs/category-alias/question-alias
Why this matters:
- Better SEO
- No custom routing logic required
- Reliable URL parsing across all use cases
---
Consistent Database Schema
All tables follow a standard structure:
state,featured,orderingcreated,modifiedcreated_by,modified_byparams(JSON configuration)
Why this matters:
- Works seamlessly with Joomla admin features
- No custom logic needed for common behaviours
- Easy to extend without breaking schema
---
Self-Contained Language Files
Each extension includes its own language files instead of placing them in Joomla’s global language folder.
Why this matters:
- Clean uninstall (no leftover files)
- Easier translation management
- Better modularity
---
Lightweight by Design
There are some things we deliberately do not include:
- No jQuery
- No frontend Bootstrap
- No heavy JS frameworks
- No external CDN dependencies
Why this matters:
- Faster load times
- No conflicts with site templates
- Fully self-contained extensions
- Better long-term stability
---
Semantic HTML and Clean CSS
Frontend output uses semantic HTML and component-prefixed class names:
<div class="testimoniallab-wrapper">
Theming is handled using CSS custom properties rather than large settings panels.
Why this matters:
- Better accessibility
- Cleaner integration with site designs
- No style conflicts with templates
- Less configuration overhead
---
Built for Updates from Day One
All extensions use upgrade-safe installer manifests and versioned SQL update scripts.
Why this matters:
- Smooth updates inside Joomla
- No need to uninstall/reinstall
- Safe database changes over time
---
What Makes This Different
Many older Joomla extensions were built with:
- Legacy APIs
- jQuery dependencies
- Bootstrap-heavy output
- Mixed logic in modules
TDC Lab extensions take a different approach:
- Modern Joomla APIs
- Strict structure and separation
- Lightweight frontend output
- Predictable, maintainable code
---
Why This Matters
This architecture is not just about clean code — it directly benefits the people using the extensions:
- Faster websites
- Fewer conflicts with templates
- Better long-term compatibility
- Simpler configuration and setup
And from a development perspective:
- Faster iteration across multiple extensions
- Easier debugging and maintenance
- A scalable foundation for a growing ecosystem
---
Final Thoughts
When you are building a single extension, structure matters. When you are building a suite of extensions, it matters even more.
The goal is simple: keep everything predictable, lightweight, and aligned with Joomla’s core — so both developers and users benefit.