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, ordering
  • created, modified
  • created_by, modified_by
  • params (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.

View our extensions