- Can be used as a template or as an installer
- Support for AOSP/LOS/PixelStock and Closest Kin Like ROMS
- Monospace / Bengali font / Emoji / Serif support (user dependent)
- Android 12/13/14/15 ready
- Compatible with Magisk, KernelSU/KernelSU Next, and APatch
Install like a normal module from Magisk, KernelSU/KernelSU Next, or APatch Manager. KernelSU/APatch installs should be done from their manager apps, not from custom recovery.
KernelSU/APatch users: current mount implementations may require an active mount metamodule before regular modules can mount files under system/. If fonts do not apply after reboot, install and reboot with a mount metamodule first, such as meta-overlayfs, magic mount, or hybrid mount, then reinstall this module.
You can use the template as an installer or as a regular Magisk module template, or both at the same time.
To use it as a module template you can copy the renamed files directly to the template's Files folder to make a permanent module.
To use the template as an installer first you have to create a folder named MFFM in your local storage. Then you can copy your renamed files to the MFFM & MFFM/Fonts folder. Other detailed instructions are in particular sections of the respective topics (Which file/script goes where).
Remember you can use both mode (Template/Installer) at the same, so it really doesn't matter where ever (inside the template or in the MFFM foler) you put your files. The template should work just fine.
If same category files (eg. Bengali Fonts) are present in both the MFFM folder and inside of the module (in Files folder), the module's content will be flashed and MFFM folder's content will be ignored.
- Download the template from Releases folder.
- The best way is to use the template is to use it with
MT Managerfile manager. With MT Manager you can directly edit the zip file without unpacking it. - Eitherway you can unpack the zip file with any file manager, I recommend Mixplorer. And after editing/copying files in the template, repack the template content to
.ziparchive to make a module. - You are going to need at least one style
Regular.ttfto use this template. You can use upto 18 styles currently. Rename your font file as stated bellow:Black.ttf BlackItalic.ttf ExtraBold.ttf ExtraBoldItalic.ttf Bold.ttf BoldItalic.ttf SemiBold.ttf SemiBoldItalic.ttf Medium.ttf MediumItalic.ttf Regular.ttf Italic.ttf Light.ttf LightItalic.ttf ExtraLight.ttf ExtraLightItalic.ttf Thin.ttf ThinItalic.ttf - And then copy those font files to
Filesfolder of the template to make a module. - If you want to use in installer mode, create a folder named
FontsinsideMFFMfolder. Put the renamed files in theMFFM/Fontsfolder. Flash the template/Installer
Compiled/updated module ZIPs are automatically signed using ZipSignerust — a high-performance, memory-safe Rust tool that adds standard JAR signatures (META-INF/MANIFEST.MF, CERT.SF, CERT.RSA) to Android ZIP archives. Both compile.py and update.py sign every produced module automatically.
- Auto-download: the first time a script signs a module, it downloads the correct ZipSignerust binary for your platform into
tools/and caches it. Supported platforms: Windows x64/arm64, Linux x64/arm64/armv7 (covers native Linux and WSL). - Auto key generation: an RSA-2048 key pair is generated on first run into
keys/(mffm_private.pem,mffm_public.pem) and reused for every subsequent signing. Keepkeys/mffm_private.pemsafe — it authenticates your modules. - Cross-environment: written in pure Python with
urllib/subprocess, so it behaves identically on PowerShell/Windows and WSL/Linux. No shell-specific commands are used. - Graceful fallback: if the optional
cryptographypackage is missing, or the tool download fails, the script prints a clear notice and leaves an unsigned archive inDist/instead of aborting.
pip install cryptography
This is only needed to generate the key pair. Once keys/ exists, signing works without it.
# Prepare keys + download the tool (no archive required)
python signing.py
# Sign a zip in place (leaves a .bak backup, then removes it on success)
python signing.py path/to/module.zip
# Sign to a separate output file
python signing.py path/to/module.zip path/to/signed.ziptools/, keys/, and *.bak are gitignored — they are machine-specific and never committed.
- Even though the following tutorial follows the
installermode, you can shove therenamed filesdirectly to the Template'sFilesfolder to use it as a permanent module.
- You are gonna need 3 styles/weights of your Bengali font, Bold/Medium/Regular. If you have only one weight (ie. Regular), copy it and make total 3 copies.
- Rename the 3 weight (Bold/Medium/Regular) Bengali font like this:
Beng-Regular.ttf
Beng-Medium.ttf
Beng-Bold.ttf
- Then you can directly copy the font files to
MFFM Folder (/LocalStorage/MFFM)or make a zip archive directly(without putting them in a folder)and rename it toBeng-FontName.zipand then copy it toMFFMfolder to avoid messy environment inside theMFFMfolder. Eg:Beng-Kalpurush.zip
- Add
Emoji-before the name of your Emoji font and put it in theMFFMfolder. EG: renameWhatsappEmoji.ttftoEmoji-WhatsappEmoji.ttf - Put
MFFM_UniEmoji_v5.5.shinside theMFFM Folder (/LocalStorage/MFFM)folder alongside the renamed emoji file. The add-on stagesNotoColorEmoji.ttf, scans system emoji font targets, repairs app data emoji fonts with backups, and hooks the module action/service/boot/uninstall lifecycle. - UniEmoji writes runtime logs/status under
/sdcard/MFFM/EmojiModule. KernelSU/APatch without a mount metamodule fall back to data-only emoji repair.
- To use any
Monospacefont, addMono-before the name of your font and put it inMFFMfolder. EG: renameFiracode-Regular.ttftoMono-Firacode-Regular.ttf
- To use Serif font, you will need 4 styles. Regular, Italic, Bold and BoldItalic. Rename your fonts like this:
Serif-Regular.ttf
Serif-Italic.ttf
Serif-Bold.ttf
Serif-BoldItalic.ttf
- After renaming, either copy them direct to
MFFMfolder or make azip archivefollowing this naming pattern, 'Serif-YourFontName.zip' egSerif-SourceSerif.zipand as usual copy the archive toMFFMfolder. - Lastly, however you place your files in
MFFMfolder, if the naming patterns are followed it will be installed once you flash your original font module.
- If your MFFM template powered modules stop working in Google Apps or do not change at all, use the module action button in Magisk, KernelSU/KernelSU Next, or APatch Manager. The action disables the Google Fonts provider, clears Google font caches, and restarts Gboard. No reboot is needed for the action path; force close any Google app if it still has old font cache.
- If method mentioned above is not working for you then flash KillGMSFont Magisk Module by MrCarb0n
- Push to
main/masterto build and publish a GitHub Release automatically. - Push a tag like
v2026.05.10to publish that exact tagged release. - You can also run
Build and Release Templatemanually from GitHub Actions and provideversion/version_codeinputs. - Release assets are named like
MFFM_Template_v2026.05.10_MFFMv11.zip. - If
version_codeis not provided, date versions like2026.05.10become20260510; semver versions like11.2.3become11002003.
- OMF | OMF Template | CFI | Noto Emoji Plus | KillGMSFont | Magifont