APO FJ Downloads
Premium Download Manager for Joomla 4 / 5 / 6
Apotentia Flexible Joomla Downloads · Documentation
Note: Issues detected with version 1.0.0 — reworking now and will release version 1.1.0 soon. Downloads and purchases are paused until then.
Overview
APO FJ Downloads—short for Apotentia Flexible Joomla Downloads—is a premium download management extension for Joomla built from the ground up for PHP 8.1+ and Joomla 4, 5, and 6. The "FJ" stands for "Flexible Joomla": flexible layouts, flexible access control, flexible storage—adapted to how your site actually works, not the other way around.
Note: APO FJ Downloads is an original Apotentia LLC product. It is not affiliated with, derived from, or related to JDownloads or any other existing Joomla extension.
APO FJ Downloads provides everything a site administrator needs to manage, organize, and securely serve file downloads—from a handful of PDFs to thousands of files across dozens of categories.
Unlike legacy download managers that bolt security on as an afterthought, APO FJ Downloads is security-first: MIME-type verification on every upload, one-time token-based file serving, rate limiting, download quotas, and files served exclusively through PHP controllers—never direct filesystem URLs.
The extension ships as a single installable Joomla package containing 11 sub-extensions.
Key Features
MIME-Type Enforcement
Server-side file inspection via libmagic on every upload. Never trusts client-provided Content-Type. Per-category allowlists.
Granular Access Control
Permissions at global, component, category, and download levels. Per-group download quotas (daily/weekly/monthly). Time-window access restrictions.
Secure File Serving
One-time tokens with configurable TTL. Files stored outside web root. X-Sendfile/X-Accel-Redirect support. HTTP 206 range requests for download resume.
Twig Layout Engine
Customizable Twig templates for every view type. Layout cascade: shortcode → download → category → global → system fallback. Full template override support.
Content Shortcodes
Embed downloads anywhere with {apofjdl id=42} or {apofjdl category=5 layout=grid limit=10}. Works in any Joomla article or custom HTML module.
Rate Limiting & Quotas
Per-user and per-IP velocity limiting. Configurable download quotas per user group with daily, weekly, monthly, and lifetime periods.
Media Preview
HTML5 audio and video players for supported file types. Inline preview directly on download detail pages. Configurable per category.
REST API
Full CRUD API for downloads, categories, and file serving. JSON:API format. Joomla token authentication with per-action permissions.
Smart Search & Modules
Smart Search indexer for full-text search. Four companion modules: Latest Downloads, Most Popular, Category Tree, and Search.
Mass Downloads
Select multiple files and download as a streaming ZIP archive. Memory-safe for large file sets. ACL and quota checked per file.
Download Logging
Download logs with GDPR-compliant IP hashing. Filterable by user, download, status, and date range. Full admin viewer.
Ratings & Reviews
Star ratings and text reviews with moderation queue. One rating per user per download. Aggregate scores displayed on listings.
Architecture
APO FJ Downloads ships as a single Joomla package containing 11 tightly integrated sub-extensions.
| Package | Type | Description |
|---|---|---|
| com_apofjdownloads | Component | Core download management—admin CRUD, frontend views, file serving |
| lib_apofjdownloads | Library | Shared library: MIME detection, storage adapters, layout engine, token manager, ACL |
| plg_content_* | Plugin | Content shortcode processing |
| plg_system_* | Plugin | System-level ACL enforcement, MIME hooks, event dispatching |
| plg_webservices_* | Plugin | REST API endpoint registration |
| plg_finder_* | Plugin | Smart Search indexer for downloads and categories |
| plg_actionlog_* | Plugin | Admin action logging integration |
| mod_*_latest | Module | Latest downloads widget |
| mod_*_popular | Module | Most popular downloads widget |
| mod_*_categories | Module | Category tree navigation widget |
| mod_*_search | Module | Download search form widget |
Compatible with Joomla 4.4+, 5.x, and 6.x. Requires PHP 8.1 or higher. Tested across PHP 8.1, 8.2, 8.3, and 8.4.
Pricing
Start free with Lite, or buy Pro for the full extension. Every Pro tier includes every feature—the only difference is how many domains you can activate. Pro is a one-time purchase: you get a perpetual license (never expires) plus 1 year of updates. After the year, the extension keeps working forever; renew the update entitlement in your account portal whenever you want another year of patches and new features.
Lite
Core download management with 5 MB file size limit. Basic ACL and download counts.
Paused — v1.1.0 soonSingle Site
Full Pro extension. Unlimited file size, all 11 sub-extensions, priority support.
Paused — v1.1.0 soonAgency
Same full Pro extension across five client or company sites.
Paused — v1.1.0 soonUnlimited
Deploy on every site you manage. No domain counting.
Paused — v1.1.0 soonDevelopment Roadmap
APO FJ Downloads v1.0.0 ships with Phases 1–3 complete (248 tests, 184 passing) plus the four companion modules and license validation system originally scoped later. Public documentation and the v1.0.0 release packaging are also live. Remaining Phase 4–5 items are planned for future releases.
Shipped early in v1.0.0: ✓ four companion modules (Latest Downloads, Most Popular, Categories Tree, Featured Downloads).
Remaining: media preview (audio/video), mass ZIP downloads, remote storage adapters (S3), ratings and reviews, custom fields integration, Smart Search plugin.
Shipped: ✓ license key validation system (HMAC-signed, activation tracking, domain limits) · ✓ public documentation · ✓ v1.0.0 release packaging (Lite + Pro builds).
Remaining: full content REST API (downloads + categories with JSON:API format), WCAG 2.1 AA accessibility compliance, performance optimization (<200ms TTFB target).
Secure downloads. 248 tests. GPL v2+.
The download manager Joomla deserves.
248 tests · GPL v2+ · Joomla 4, 5, 6 · PHP 8.1+
Questions? Get in touch