-
Notifications
You must be signed in to change notification settings - Fork 2
Modules
🌐 English · Deutsch
The Module Manager (/extensions, admin only) lets you install and manage modules that extend MediaForge — with their own pages, settings cards, sidebar links or providers. Sidebar entries contributed by a module carry a small "M" pill (tooltip: "Module: <name>") so you can always tell built-in features from module features. The page is fully mobile-responsive.
The store is built into the /extensions page: the catalog loads automatically in the browser, and the Refresh button bypasses the ~15 minute cache. The store URL and the trusted signing keys are compiled into the build and cannot be changed via the UI (shown read-only). Admins can, however, add extra repository URLs — one http(s) URL per line.
The trust tier is decided by cryptographic signature verification — not by what the store index claims:
| Tier | Meaning |
|---|---|
| Official | Signed with the MediaForge team key |
| Verified | Third-party code that was reviewed, repackaged and signed by a maintainer |
| Unverified | Unsigned, signed with an unknown key, or modified after signing |
Additionally, an Unreviewed badge marks submissions nobody has read yet. Unverified and unreviewed modules are hidden by default and only appear when the toggle "Allow unverified and unreviewed modules" is enabled.
⚠️ A module runs inside MediaForge with full access to your data. Only enable unverified/unreviewed modules if you trust the source.
- The package is first downloaded to a staging area, where the signature is verified — packages that fail verification never reach the live folder.
- New modules go live immediately, without a restart: blueprint, settings card, sidebar entries and translations are available on the next request.
- Upgrading an already-loaded module stays staged and shows a "restart required" banner; the UI offers a built-in self-restart.
Modules may declare their own Python requirements. The Install dependency button (admin) installs only the declared requirements from PyPI into ~/.mediaforge/module_deps/ — MediaForge's own dependencies always take import precedence. The same button works for store modules before installing them.
Modules can declare settings keys whose values are stored encrypted in the database. Settings-card fields of type secret are encrypted automatically.
Modules can register their own backup categories, which then show up in the export/import dialog — see Backup.
The same store also distributes theme packs — CSS-only skins for the whole UI (index entries with "type": "template", marked with a Theme badge and filterable in the catalog). They install and uninstall live, never needing a restart. See Theme Packs.
The store is open to third parties, and the /extensions page says so: above the store settings there is a Build your own module or theme card linking straight to the material you need.
| Link | Where it goes |
|---|---|
| Module examples |
.examples/thirdparties/ — working example modules (own pages, tabs, menus, providers, hooks, UI components), each with its own README |
| Theme examples |
.examples/themes/ — a complete example theme pack plus README |
| Developer docs | this page and the developer section of the wiki |
| Publish on the developer portal | mediaforge.softarchiv.com — upload a finished module or theme so it appears in the store |
A module does not have to invent its own look. MediaForge's core CSS is loaded on every page and its class names are stable, so a module that uses them looks native for free — badges, toggles, the chb-main checkbox, segmented buttons, multi-selects, token fields, chips, pagination, KPI cards, the MFCharts chart primitives, and the shared TMDB detail modal (MFDetailModal), which gives you a poster/synopsis/metadata view for anything you can name by TMDB id.
Two stylesheets divide the vocabulary between them. forms.css holds the form controls — the chb-main checkbox, segmented buttons, multi-selects, token fields, chips, pagination — and is loaded everywhere. mf_components.css holds the layout and content blocks the July 2026 redesign is built from, and needs its own <link> on your page:
| Block | What it is |
|---|---|
.mf-search |
Search field with a leading icon and a clear button |
.mf-toolbar |
Page toolbar with one row per job — row 1 finds, row 2 shapes the view |
.mf-poster-grid / .mf-poster-card
|
Responsive 2:3 poster grid; status in a corner flag, attribution in a permanently visible foot |
.mf-avatar |
Initials disc for "who asked for this" |
.mf-timeline |
Continuous time rail with stops, a glowing "now" dot and named gaps ("3 days with nothing") |
.mf-progress |
Named stages of one item (requested → approved → downloaded) |
.mf-empty |
Inline "nothing matches these filters" state, as opposed to the full-page .empty-state
|
The Calendar and Seerr pages are built out of these, so a module that uses them does not just look native — it stays in step when those pages are restyled. Every colour comes from the theme tokens, so a user's theme pack restyles a module's page for free.
Enable the Example: UI Components module for a live, click-through gallery of all of them with copyable markup, and see the "Reusable UI components" section of .examples/thirdparties/README.md for the reference table.
Each module card carries one state — Running, Off, Skipped or Error — and the list puts problems first, because those are the ones you need. Under the name it lists what the module actually registered in MediaForge: menu entries and settings cards, but also content sources, hosters, event hooks and background workers, with the ones that reach into MediaForge's own work highlighted. For a module you did not write yourself that is a more useful answer than who signed it. An import error can be unfolded in full and copied in one click, for a bug report.
Uninstalling a module now really removes its routes from the running app instead of only blocking them, so a module can be uninstalled and installed again without a restart.
A freshly submitted entry starts out unreviewed, so it is only listed while Allow unverified and unreviewed modules is enabled. A module from a third-party repository or an unsigned submission is not second-class by design — it simply carries no signature this build trusts.
🇬🇧 English
Users
- Installation
- Getting Started
- Migration from AniWorld
- Configuration
- Web UI
- Download System
- Download History
- AutoSync
- Calendar
- Library
- Authentication
- Notifications
- Integrations
- SyncPlay
- Anime4K Upscaling
- Encoding
- Modules
- Theme Packs
- Backup
- Docker
- Supported Sites
Developers
🇩🇪 Deutsch
Benutzer
- Installation
- Erste Schritte
- Umzug von AniWorld
- Konfiguration
- Web-UI
- Download-System
- Download-Verlauf
- AutoSync
- Kalender
- Bibliothek
- Authentifizierung
- Benachrichtigungen
- Integrationen
- SyncPlay
- Anime4K-Upscaling
- Encoding
- Module
- Theme-Pakete
- Backup
- Docker
- Unterstützte Seiten
Entwickler