Modules / hybrid_mount

Hybrid Mount

META

Next Generation Mounting Metamodule with OverlayFS and Magic Mount.

README

Hybrid Mount

Language Platform License Version

Hybrid Mount is a mount orchestration metamodule for KernelSU and APatch. It merges module files into Android partitions through a unified policy engine backed by three mount backends:

  • OverlayFS β€” layered mounts for broad compatibility.
  • Magic Mount β€” bind-mount for direct path replacement or fallback.
  • Kasumi β€” LKM-backed routing with runtime hide, spoof, and stealth features.

A built-in SolidJS WebUI provides graphical management, live state monitoring, and configuration editing.

πŸ‡¨πŸ‡³ δΈ­ζ–‡ζ–‡ζ‘£


Table of Contents


Features

  • Three backends, one policy engine β€” assign paths to OverlayFS, Magic Mount, or Kasumi with per-path granularity.
  • Deterministic planning β€” conflicts are detected at plan time, not discovered randomly at boot.
  • Built-in WebUI β€” manage modules, edit configuration, monitor runtime state, and control Kasumi features from a browser or WebView.
  • Kasumi runtime integration β€” LKM autoload, mirror routing, mount hiding, maps/statfs spoofing, UID hiding, uname spoofing, and kstat rules.
  • Recovery-friendly β€” stale runtime files are cleaned automatically; misconfigurations can be reset with gen-config.
  • Automation-friendly β€” JSON-over-Unix-socket daemon protocol for scripting or external controllers.

Quick Start

Installation

  1. Install KernelSU or APatch on your device.
  2. Download the latest Hybrid Mount release ZIP from GitHub Releases.
  3. Flash the ZIP through your root manager’s module installer.
  4. Reboot. Hybrid Mount will auto-detect your environment and apply the default overlay policy.

Post-install

# Check runtime status
hybrid-mount daemon status

# List detected modules
hybrid-mount modules

# Open the WebUI in your browser
# (the daemon prints the URL to logcat on startup)

Changing mount mode for a module

# /data/adb/hybrid-mount/config.toml
[rules.my_module]
default_mode = "magic"

[rules.my_module.paths]
"system/bin/problematic_binary" = "ignore"

Mount Modes

Mode Backend Best for
overlay OverlayFS Modules that add or replace files without conflicts. Default mode.
magic Bind mount Modules that need direct per-file replacement; fallback when OverlayFS is unavailable.
kasumi Kasumi LKM Modules requiring explicit mirror routing or runtime hide/spoof features.
ignore β€” Excluding specific paths from any mount processing.

OverlayFS storage modes

The OverlayFS backend supports two storage strategies for the upper/work layers:

  • ext4 (default) β€” creates an ext4 disk image. Persists across reboots, supports xattr.
  • tmpfs β€” uses a tmpfs mount. Volatile, lighter weight, but lost on reboot.
overlay_mode = "ext4"

Fallback behavior

When enable_overlay_fallback = true, modules planned for OverlayFS that cannot mount (kernel lacks overlay support) automatically retry as Magic Mount. This reduces boot-time failures on kernels with unstable overlay support.


WebUI

Hybrid Mount includes a SolidJS-based WebUI served by the daemon over a local TCP socket. The daemon prints the access URL to logcat on startup.

Capabilities

  • Status dashboard β€” live mount statistics, active partitions, storage mode, daemon health.
  • Module management β€” list all detected modules with their effective mount modes; apply mode changes interactively.
  • Configuration editor β€” full config.toml editing with validation, including per-module path rules.
  • Kasumi control panel β€” LKM status, rule listing, feature toggles, uname configuration, maps/kstat rules.

Access

The WebUI runs on http://127.0.0.1:<random-port> with a cryptographic access token. The daemon manages the lifecycle β€” no separate web server needed. On-device, use a browser or WebView; remotely, forward the port via ADB.


Configuration

Default path: /data/adb/hybrid-mount/config.toml.

Top-level fields

Key Type Default Description
moduledir string /data/adb/modules Module source directory.
mountsource string auto-detect Runtime source tag (KSU, APatch).
partitions list [] Extra managed partitions.
overlay_mode ext4 | tmpfs ext4 Overlay upper/work storage mode.
disable_umount bool false Skip umount operations (debug only).
enable_overlay_fallback bool false Retry overlay-planned modules as Magic Mount when OverlayFS is unavailable.
default_mode overlay | magic | kasumi overlay Global default mount policy.
rules map {} Per-module and per-path mount policies.

Example

moduledir = "/data/adb/modules"
mountsource = "KSU"
partitions = ["system", "vendor"]
overlay_mode = "ext4"
enable_overlay_fallback = true
default_mode = "overlay"

[rules.viper4android]
default_mode = "magic"

[rules.viper4android.paths]
"system/etc/audio_policy.conf" = "overlay"

[rules.sensitive_module]
default_mode = "kasumi"

[rules.sensitive_module.paths]
"system/bin/helper" = "kasumi"
"system/etc/placeholder" = "ignore"

Kasumi

Kasumi is the LKM-backed backend. Beyond mount routing, it provides a suite of runtime hide and spoof capabilities.

Activation

Setting kasumi.enabled = true makes the backend available. The Kasumi runtime is actually enabled when at least one of these conditions is met:

  • The mount plan contains a Kasumi-managed module or path.
  • An auxiliary feature is configured (hidexattr, mount hide, maps spoof, statfs spoof, UID hiding, uname spoof, cmdline replacement, kstat rules, or user hide rules).

Key config fields

Field Purpose
kasumi.enabled Master switch for Kasumi integration.
kasumi.lkm_autoload Auto-load the Kasumi LKM during startup.
kasumi.lkm_dir LKM search directory.
kasumi.lkm_kmi_override Optional KMI version override for LKM selection.
kasumi.mirror_path Mirror root used by Kasumi rules (default /dev/kasumi_mirror).
kasumi.enable_kernel_debug Toggle kernel-side debug logging.
kasumi.enable_stealth Explicit stealth mode.
kasumi.enable_hidexattr Compatibility umbrella β€” enables stealth, mount hide, maps spoof, and statfs spoof together.
kasumi.enable_mount_hide Hide mounts globally or by path pattern.
kasumi.mount_hide.path_pattern Path pattern for mount hiding.
kasumi.enable_maps_spoof Enable /proc/<pid>/maps spoofing.
kasumi.maps_rules Per-inode/device maps rewrite rules.
kasumi.enable_statfs_spoof Enable statfs spoofing.
kasumi.statfs_spoof.path / .spoof_f_type Path-scoped statfs spoof configuration.
kasumi.hide_uids UIDs to hide from Kasumi-aware queries.
kasumi.uname.* Structured uname spoof (sysname, release, version, machine).
kasumi.cmdline_value Replacement /proc/cmdline content.
kasumi.kstat_rules Per-target stat metadata spoof rules.

Commands

# Status and diagnostics
hybrid-mount kasumi status
hybrid-mount kasumi version
hybrid-mount kasumi features
hybrid-mount kasumi list          # list active rules
hybrid-mount lkm status

# Enable / disable runtime features
hybrid-mount kasumi enable
hybrid-mount kasumi disable

# Mount hiding
hybrid-mount kasumi mount-hide enable --path-pattern /dev/kasumi_mirror

# statfs spoofing
hybrid-mount kasumi statfs-spoof enable --path /system --f-type 0x794c7630

# Maps spoof rules
hybrid-mount kasumi maps add \
  --target-ino 1 --target-dev 2 \
  --spoofed-ino 3 --spoofed-dev 4 \
  --path /dev/kasumi_mirror/system/bin/sh

# Kstat spoof rules
hybrid-mount kasumi kstat upsert \
  --target-ino 11 --target-path /system/bin/app_process64 \
  --spoofed-ino 22 --spoofed-dev 33

# Rule management
hybrid-mount kasumi rule add --target /system/bin/tool --source /data/adb/modules/my_module/system/bin/tool
hybrid-mount kasumi rule merge --target /system/lib64 --source /data/adb/modules/my_module/system/lib64
hybrid-mount kasumi rule hide --path /system/bin/su
hybrid-mount kasumi rule delete --path /system/bin/old_tool

Policy Reference

Precedence

When multiple policies could apply to a path, evaluation order is:

  1. Path-level override β€” rules.<module>.paths["<path>"]
  2. Module-level default β€” rules.<module>.default_mode
  3. Global default β€” default_mode

Behavior matrix

Rule result Backend available? enable_overlay_fallback Effective behavior
overlay Yes any Mount with OverlayFS.
overlay No false Skip and report as failed.
overlay No true Retry as Magic Mount.
magic n/a any Mount with Magic Mount.
kasumi Yes any Route through Kasumi.
kasumi No any Skip Kasumi mapping.
ignore n/a any Do not mount.

Practical recipes

  • One problematic binary on bind mount, rest on overlay: set module default to overlay, override the binary path to magic.
  • Temporarily exclude a conflicting file: set the path to ignore.
  • Kernel with flaky OverlayFS: set enable_overlay_fallback = true.

CLI

hybrid-mount [OPTIONS] [COMMAND]

Global options

Flag Description
-c, --config <PATH> Custom config file path.
-m, --moduledir <PATH> Override module directory.
-s, --mountsource <SOURCE> Override source tag.
-p, --partitions <CSV> Override partition list.

Subcommands

Command Description
gen-config Generate a default config file.
show-config Print effective config as JSON.
save-config --payload <HEX_JSON> Save config from a WebUI payload.
save-module-rules --module <ID> --payload <HEX_JSON> Update rules for one module.
modules List detected modules.
daemon status Query daemon runtime state.
daemon stop Stop the daemon.
kasumi ... Kasumi management (see Kasumi).
lkm load / unload / status LKM lifecycle management.
hide list / add / remove / apply User hide rule management.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  config.toml                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Inventory Discovery              β”‚
β”‚         Scan module tree, classify entries    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Mount Planner                    β”‚
β”‚    Evaluate rules (path > module > global)    β”‚
β”‚    Generate overlay / magic / kasumi plan     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Executors                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ OverlayFSβ”‚ β”‚  Magic   β”‚ β”‚   Kasumi     β”‚ β”‚
β”‚  β”‚ executor β”‚ β”‚  Mount   β”‚ β”‚   executor   β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Runtime State + Daemon             β”‚
β”‚   Persist state β†’ Unix socket β†’ WebUI/CLI     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Source layout

src/
β”œβ”€β”€ conf/          Config schema, TOML loader, CLI definition
β”œβ”€β”€ domain/        Core types: MountMode, ModuleRules, path matching
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ inventory/ Module discovery and listing
β”‚   β”œβ”€β”€ ops/       Mount plan generation and per-backend execution
β”‚   β”œβ”€β”€ daemon/    Unix socket server, HTTP/SSE, protocol
β”‚   β”œβ”€β”€ api/       Payload builders for WebUI endpoints
β”‚   └── startup/   Boot sequence, recovery, retry logic
β”œβ”€β”€ mount/
β”‚   β”œβ”€β”€ overlayfs/ OverlayFS backend (ext4 image / tmpfs)
β”‚   β”œβ”€β”€ magic_mount/ Bind-mount backend
β”‚   └── kasumi/    Kasumi rule compilation, runtime, status
β”œβ”€β”€ sys/           Low-level: mount syscalls, LKM load/unload, Kasumi UAPI
└── utils/         Logging, path utilities, validation

webui/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ routes/    Page components (Status, Config, Modules, Kasumi, Info)
β”‚   β”œβ”€β”€ components/ Shared UI components (NavBar, Toast, Skeleton)
β”‚   └── lib/       API bridge, stores, codecs, i18n
└── locales/       9-language internationalization

xtask/             Build and release automation
module/            Module packaging scripts and static assets

Build

Prerequisites

  • Rust nightly (from rust-toolchain.toml)
  • Android NDK r27+ and cargo-ndk
  • Node.js 20+ and pnpm (for WebUI)

Commands

# Full release package (binary + WebUI) β†’ output/
cargo run -p xtask -- build --release

# Binary only (skip WebUI)
cargo run -p xtask -- build --release --skip-webui

# Local arm64 debug build
./scripts/build-local.sh

# Local build with prebuilt Kasumi LKM .ko assets
./scripts/build-local.sh --release --kasumi-lkm-dir /path/to/kasumi-lkm

# WebUI dev server (hot reload)
cd webui && pnpm install && pnpm dev

# Lint everything
cargo run -p xtask -- lint
cd webui && pnpm lint

# Run tests
cargo +nightly test
cd webui && pnpm test

Release profile

The release profile uses opt-level = 3, lto = "fat", codegen-units = 1, strip = true, and panic = "abort" for minimal binary size.


Operational Notes

  • Mount source auto-detection: fresh installs detect the runtime environment automatically. Only set mountsource explicitly if auto-detection fails.
  • Recovery from bad config: run hybrid-mount gen-config to reset to defaults, then reapply rules incrementally.
  • Kasumi LKM: the LKM must match the running kernel. Use lkm_kmi_override if the auto-detected KMI is incorrect.
  • kasumi kstat clear-config: only removes persisted config. Existing kernel-side rules persist until LKM reload or runtime rebuild.
  • Binary size: prefer dependency feature trimming and profile tuning before invasive refactoring.

License

Licensed under Apache-2.0.

Release History

v4.0.1

Published on May 10, 2026
Download

v4.0.1

Features

  • Enhance daemon and web UI with system info and runtime validation - Refactor server handling to use poll for improved performance. - Introduce system_info in API responses and update related interfaces. - Add URL validation to prevent malformed requests. - Improve error handling in config and kasumi stores with warnings for missing data. - Update App initialization to load UI and daemon concurrently.

  • App Enhance app initialization phase tracking and loading UI

  • daemon Add daemon_startup_mode config with persistent boot and webui toggle Add a daemon_startup_mode config option (on-demand / persistent) that controls whether the daemon starts on-demand via KSU exec or persists at boot via service.sh. Includes ping-first bridge optimization for faster reconnection. Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

  • Update TopBar to provide default app name and language title; add preconnect and styles in index.html

  • Add clear mount errors functionality and UI updates - Implemented clearMountErrors API method in both mock and real API. - Updated AppAPI interface to include clearMountErrors. - Added clear-mount-errors command to the daemon command payload. - Enhanced Module interface to include mount_error property. - Added localization strings for mount error messages in multiple languages. - Introduced error indicators and banners in the ModulesTab component to display mount errors. - Added a button to clear mount errors, with loading state management.

  • Enhance mount error handling and add clear mount errors functionality

Fixes

  • schema Replace manual Default impl with derive macro for DaemonStartupMode

  • nuke Skip nuke execution if KSU is not loaded

Maintenance

  • Revert "feat(App): enhance app initialization phase tracking and loading UI" This reverts commit 08534f6f316b3f73ca2e09b95efdea4a5f8ff8ba.

v4.0.0

Published on May 10, 2026
Download

v4.0.0

Features

  • Enhance ksu handling in module loading and add fallback check

  • daemon Implement command handling and HTTP server for WebUI - Added commands.rs to handle various daemon commands including status, configuration, and Kasumi operations. - Introduced http.rs to manage the HTTP server for WebUI interactions, including session management and SSE support. - Implemented request validation and response formatting for daemon commands. - Created validation schemas in validation.ts for structured error handling and response parsing in the WebUI.

  • App Ensure status is loaded during app initialization

Fixes

  • Review and harden frontend-backend interaction - saveConfigToFile now includes kasumi and rules fields (was silently dropping) - Replace fastrand token generation with /dev/urandom CSPRNG - Use {err} instead of {err:#} in HTTP responses to avoid leaking filesystem paths - Remove Access-Control-Allow-Private-Network CORS header - Add /proc//cmdline verification to PID file cleanup - Add config.toml.bak backup before overwriting config - Remove duplicate KasumiUnameMode enum, reuse schema::KasumiUnameMode - Replace inverted bool return with ConnectionAction enum in HTTP handler - Add typed DaemonCommandPayload discriminated union matching Rust serde tags - Add runDaemonCommand() bypassing JSON-in-shell-string round-trip - Preserve first error in bridge retry for debugging - Fix clearKasumiUname transaction order (clear runtime before config) - Fix ensureDaemonAwake TOCTOU race - Add proper types to RuntimeStatePayload stable fields - Rename parseHybridMountJsonOutput to parseDaemonJsonOutput - Clarify extractConfig fallback logic with comment

Refactors

  • Remove module metadata from runtime entries and tests for cleaner payload handling

  • runtime_state Simplify conditional check in save method

  • sysStore Remove redundant systemInfo updates in handleSseUpdate

Maintenance

  • Update .gitignore to include CLAUDE.md

  • Pnpm format

  • Make clippy happy

Other

  • Refactor inventory discovery and planner modules for improved directory handling and performance

v3.6.1

Published on May 6, 2026
Download

v3.6.1

Features

  • Add jq installation to Dockerfile and ensure jq is available in release workflow

v3.5.6

Published on April 26, 2026
Download

v3.5.6

Features

  • kasumi Rename hymo -> kasumi

  • Add nuke functionality before cleanup for ext4 storage mode

  • Enhance module status update with kasumi_enabled flag

Fixes

  • Update git remote URL for HymoFS source to Kasumi repository

  • Enhance module build process to handle multiple .ko files

  • ci Generate webui files before lint

Refactors

Maintenance

  • Revert "refactor: update build workflow to trigger on workflow_run and simplify conditions" This reverts commit 736332d.

Other

  • Make cargo clippy happy

v3.5.5

Published on April 25, 2026
Download

v3.5.5

Features

  • Enhance kptools command handling and error reporting in nuke module

  • Add mount topology command and handler for API

  • Implement SaveConfigPatch struct and related functionality for config updates

  • Enhance APatch KPM loading mechanism and improve error handling

  • Refactor configuration handling to use ConfigSession for improved session management and patch application

  • Add fast allocator feature and optimize release build settings for smaller binaries

  • Refactor magic_mount to use MagicMountOptions for improved parameter handling

  • config Refactor config loading to use load_default_config for improved error handling

  • cli Add command to save all module rules and improve error logging

  • tests Add unit tests for configuration and validation functions

  • Add ModuleModeStats struct and integrate mode statistics into RuntimeState

Fixes

  • Refactor config initialization in tests for clarity and consistency

  • core Tighten config loading and module visibility Fail fast when the default config file exists but cannot be parsed, include blocked modules in the WebUI module list without affecting active mount scanning, and generate complete built-in partition metadata for the bundled WebUI.

  • config Fail on invalid default config

  • Fix clippy warnings

  • Code quality improvements across multiple modules - Unify versionCode formula between build.rs and xtask (major100000+minor1000+patch) - Replace unwrap_or(0) with proper error propagation in xtask versionCode - Add Copy derive to MountMode, remove unnecessary .clone() calls - Add "type": "error" discriminator to ErrorPayload for robust frontend detection - Clean up unreachable code in conf/store.rs (bail! instead of read+unreachable!) - Add collision detection in get_mnt() with exists() check loop - Make init_logging() error handling explicit with .ok() - Add sync comments for cal_git_code between build.rs and xtask - Update webui submodule to b56861d

  • Fix cargo fmt and clippy issues

  • Update metadata URL to point to the correct repository

  • Update default_mode in config.toml using sed for better configuration management

  • Remove modules.img during ext4 cleanup Ensure finalize cleanup also deletes modules.img after tempdir removal when storage mode is ext4, so stale ext4 image files are not left behind. Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

  • Update read_c_buf to use iter().map for better clarity

Refactors

  • Remove ignoreProtocolMismatch functionality and related UI elements

  • Remove unused test cases and improve error handling in nuke and mount modules

  • core Move dynamic partition discovery into runtime Extract partition discovery into a dedicated module, switch managed partition decisions to a shared runtime-driven source across sync, planning, hymofs, magic mount, topology, and system APIs, and update the bundled webui submodule pointer to the pushed runtime-driven partition display changes.

  • Remove mimalloc dependency and update log handling for Android

  • Simplify config update handling and improve logging for HymoFS

  • api Replace serde_json::Value with typed structs, add structured error output and save-full-config - Replace json!() macros with typed Serialize structs: FeatureInfo, LkmPayload, MountStatsPayload, HymofsVersionPayload, SystemPayload, HymofsStatusPayload, MountTopologyPayload - Add ErrorPayload + print_json_error() for structured JSON error output on API commands, so frontend can parse errors from stdout - Add save-full-config CLI command that deserializes full Config instead of partial ConfigPatch, catching missing fields early - Add active_mounts and tmpfs_xattr_supported to SystemPayload - Remove unused paths from xtask generation: MODE_CONFIG, IMAGE_MNT, DAEMON_LOG - Add Clone derive to HymoFsRuntimeInfo, Serialize derive to LkmStatus

  • Refactor update desc APatch was supported module config(bmax121/APatch@05984a6), so we can directly using apd/ksud module set

  • Replace println! with scoped_log! for better logging in overlayfs utils

  • Refactor update desc only using write file

  • Update storage mode handling to use enum for clarity and type safety

  • Replace hardcoded managed partitions with constant from defs

  • Enhance error handling and logging in API and configuration loading functions

  • Remove unnecessary blank line in RuntimeState implementation

CI / Tooling

  • android Drop armv7 and x86_64 support

  • Cache hymofs lkm builds

  • Minimized size (#316) minimized size

Maintenance

  • Update license headers to Apache License 2.0 across multiple files - Changed license information from GNU General Public License to Apache License 2.0 in the following files: - src/mount/hymofs/common.rs - src/mount/hymofs/compile.rs - src/mount/hymofs/mod.rs - src/mount/hymofs/runtime.rs - src/mount/hymofs/status.rs - src/mount/magic_mount/mod.rs - src/mount/magic_mount/utils.rs - src/mount/mod.rs - src/mount/node.rs - src/mount/overlayfs/mod.rs - src/mount/overlayfs/overlayfs.rs - src/mount/overlayfs/utils.rs - src/mount/umount_mgr.rs - src/sys/fs/file.rs - src/sys/fs/mod.rs - src/sys/fs/xattr.rs - src/sys/hymofs.rs - src/sys/lkm.rs - src/sys/mod.rs - src/sys/mount.rs - src/sys/nuke.rs - src/utils/mod.rs - src/utils/path.rs - src/utils/validation.rs - xtask/Cargo.toml - xtask/src/main.rs - xtask/src/zip_ext.rs

  • Revert "feat: add fast allocator feature and optimize release build settings for smaller binaries" This reverts commit d4ded05.

  • Run license header workflow weekly

  • Fix typos, remove cert/key files, optimize string allocations, and standardize NDK version - build.rs: fix variable name typos (manjorβ†’major, conutβ†’count) - main.rs: replace panic!() with clean eprintln! + process::exit(1) - Remove cert.pem and private.enc from repository - Replace .to_string_lossy().to_string() with .into_owned() across 12 call sites - Standardize NDK version to r29 in release.yml (matching build.yml) Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Add .claude/settings.local.json and .claude/ to .gitignore

  • Format code for better readability in extract_module_id function

  • Revert "refactor: refactor update desc" it will cause description no update This reverts commit f8c7b90.

Other

  • Panic on KernelSU late-load mode in rust entrypoint

  • Make clippy happy

v3.5.1

Published on April 19, 2026
Download

v3.5.1

Features

  • Implement SELinux context and ownership cloning for file operations

v3.5.0

Published on April 19, 2026
Download

v3.5.0

Features

  • lkm Fallback to ksud insmod when finit_module fails on KernelSU When finit_module fails and the runtime environment is KernelSU, retry loading the HymoFS LKM via ksud debug insmod. Falls back through /data/adb/ksud then $PATH, and surfaces both failures on error.

  • nuke Add strict verification for apatch nuke execution

  • xattr Add support for legacy system file context in firmware paths

  • xattr Refactor path resolution and context handling for managed partitions

  • xattr Add function to determine if live context should apply to managed partitions

Fixes

  • lkm Use 'ksud insmod' instead of 'ksud debug insmod'

  • Improve live SELinux context application

  • Collapse xattr let-chains for clippy

  • Try fix GPU driver selinux is error

  • Fix xattr

Refactors

  • xattr Clean up formatting and improve readability in path resolution functions

  • Improve code formatting and readability across multiple files

  • Separate domain models and hymofs orchestration

  • Enhance cleanup logic and add mounted path check

  • Remove unused LiveContextCache and related functions

  • core Simplify runtime state finalization

  • xattr Remove unused lgetxattr import

Maintenance

  • Remove unused test modules and associated test cases across various files - Deleted test modules and their corresponding tests from user_hide_rules.rs, mod.rs, compile.rs, mod.rs, runtime.rs, tests.rs, utils.rs, file.rs, hymofs.rs, lkm.rs, and node.rs. - Cleaned up code by removing commented-out test code and unnecessary imports. - This cleanup improves code readability and maintainability by eliminating redundant test cases that are no longer needed.

  • Revert "Speed up CI by skipping hymofs LKM builds by default" This reverts commit 58e8b20.

Other

  • Switch to GPLv2 licence

  • Using hawkeye to manage licence

  • Refactor sync and runtime finalization logic - Updated perform_sync to use defs::managed_partition_names for managed partitions. - Removed the build_managed_partitions function from sync.rs and replaced its usage. - Modified build_runtime_state to accept ExecutionResult instead of MountPlan. - Changed collect_active_mounts to use ExecutionResult for active mounts collection. - Introduced managed_partition_names and managed_partition_set in defs.rs for better partition management. - Refactored build_managed_partitions in hymofs/common.rs to utilize the new managed_partition_set. - Enhanced collect_module_files in magic_mount/utils.rs to accept magic_modules and use_hymofs parameters. - Implemented path normalization functions in hymofs/compile.rs for better path handling. - Updated sync_dir in file.rs to use a live context cache for improved performance. - Refined extended attribute handling in xattr.rs with better error logging and caching. - Removed deprecated functions in hymofs.rs to streamline the codebase.

  • Simplify LiveContextSourceKind display

  • Opt TMPFS_XATTR_SUPPORTED lock using AtomicBool, instead of OnceLock

  • Refactor CLI handlers and remove legacy hymofs compatibility

  • Split core API payload builders by domain

  • Speed up CI by skipping hymofs LKM builds by default

v3.4.7

Published on April 16, 2026
Download

v3.4.7

Features

  • hymofs Integrate HymoFS as third mount mode - New hymofs executor that drives the HymoFS LKM via ioctl rules (ADD_RULE / ADD_MERGE_RULE / HIDE_RULE / ADD_MAPS_RULE / HIDE_OVERLAY_XATTRS), with bidirectional src/resolved_src matching to keep module-side paths like /system/product working alongside the kernel's canonical form. - LKM lifecycle management: autoload/unload, KMI override, runtime probe via /proc/modules, and packaging of per-KMI hymofs_lkm.ko under module/hymofs_lkm/ via xtask (HYBRID_MOUNT_HYMOFS_LKM_DIR). - New CLI surface: hybrid-mount hymofs {status,list,enable,disable, stealth,hidexattr,maps,hide-uids,mount-hide,statfs-spoof,uname, cmdline,fix-mounts,clear,release-connection,invalidate-cache} and hybrid-mount lkm {status,load,unload,set-autoload,set-kmi, clear-kmi}, plus user-hide persistence (hide add/remove/list/apply). - Planner / controller / runtime-state / finalization updated to treat hymofs as a first-class mount mode alongside overlay/magic. - Config schema extends with HymofsConfig (flags, uname/cmdline spoof, hide_uids, maps_rules, kstat_rules, mount_hide, statfs_spoof) and persists to /data/adb/hybrid-mount/hymofs.toml. - WebUI: new HymoFS tab with LKM card, runtime toggles, identity spoof, user-hide list, maps rules, and capability summary. Bottom-nav snowflake icon. hymofsStore uses /proc/modules as a fast probe: on LKM unloaded it synthesizes a fallback status that preserves the previous real config so the master toggle never flips off on unload. - CI: build.yml and release.yml now call build-hymofs-lkm.yml (matrix: 7 KMIs x arm64), download the .ko artifacts, and stage them via HYBRID_MOUNT_HYMOFS_LKM_DIR before xtask build. - scripts/build-local.sh: local build helper with --hymofs-lkm-dir for dev iterations.

Fixes

  • hymofs Drop redundant u64 casts in statvfs math to satisfy clippy

  • hymofs Stabilise statvfs and default-config unit tests - statvfs_usage: widen via u64::from and silence the per-platform unnecessary_cast / useless_conversion lints instead of carrying target-gated code just for this helper. - hymofs_runtime_requires_mapping_or_explicit_feature: Config::default() turns stealth on; clear all auxiliary feature flags in the test so it actually exercises the 'no mapping, no feature' path.

  • hymofs Remove redundant imports in compile and runtime modules

  • action Update download-artifact action to v8

  • planner Handle symlinks and improve error logging in generate_with_root function feat(utils): enhance collect_module_files to maintain partition structure fix(node): update symlink handling in Node implementation and add tests

  • module_status Improve status description formatting in update_description function

  • hymofs Align cmdline sync/clear behavior with upstream semantics

  • hymofs Isolate runtime sync and harden compat

  • storage Align tmpfs and ext4 selinux context

Refactors

  • hymofs Unify config and tighten runtime behavior

  • hymofs Reorganize use statements for better readability

  • build Remove setup-build-env action and integrate KPM setup directly in workflows

Other

  • Add HymoFS module with runtime and status management - Introduced a new HymoFS module in src/mount/hymofs/mod.rs to encapsulate functionality related to the HymoFS file system. - Implemented runtime management in src/mount/hymofs/runtime.rs, including feature toggles, runtime configuration synchronization, and application of mount rules. - Created a status management module in src/mount/hymofs/status.rs to handle operational checks and runtime information collection. - Added comprehensive tests in src/mount/hymofs/tests.rs to validate runtime behavior, feature toggles, and rule compilation. - Ensured proper logging and error handling throughout the module for better debugging and operational visibility.

v3.4.6

Published on April 9, 2026
Download

v3.4.6

Features

  • xtask Call notify crate directly

Maintenance

  • Split notify into separate repository

v3.4.5

Published on April 6, 2026
Download

v3.4.5

Features

  • Add ext4 probe and post-check for APatch nuke flow

  • Finalize APatch nuke KPM support

  • Enhance ext4 sysfs handling by using function pointers for dynamic symbol resolution

Fixes

  • Fix late mode check Signed-off-by: Tools-app localhost.hutao@gmail.com

  • Fix panic

  • Make kpm module compile in CI toolchain headers

  • Collapse nested if to satisfy clippy

  • Use APatch kptools for kpm nuke calls

  • Only extract kpm assets on APatch

Performance

  • sync Reduce repeated module tree traversal

Maintenance

  • Remove extra kpm README and related doc entries

v3.4.2

Published on April 3, 2026
Download

v3.4.2

Other

  • Fix installer notice confirmation blocking

  • Improve mount planning diagnostics

  • Refactor magic mount stats into context

  • Make node traversal deterministic

  • Polish executor naming and diagnostics text

  • Unify logging format across runtime

v3.4.1

Published on April 2, 2026
Download

v3.4.1

Fixes

  • core Resolve naming refactor build errors

  • recovery Avoid state borrow conflict

  • planner Split configured extra partitions

  • planner Preserve real partition names for symlink targets

  • umount Restore queued try-umount commit

Refactors

  • core Split boot and command entrypoints

  • executor Split overlay and magic handlers

  • storage Split backends and ext4 setup

  • recovery Split retry state and markers

  • core Extract finalization workflow

  • core Separate module description updates

  • inventory Separate module presentation

  • core Clarify controller and runtime names

  • startup Rename boot recovery modules

  • naming Rename entry, inventory, and fallback modules

  • naming Rename status and finalization modules

  • umount Drop extra /mnt cleanup and unify wording

Tests

  • planner Add mount plan scenarios

CI / Tooling

  • submodule Track webui on configured branch

  • release Generate changelog with git-cliff

Other

  • .github/workflows/update_webui_submodule.yml

v3.3.1

Published on March 29, 2026
Download

v3.3.1

Changes since v3.3.0:

  • ci(release): install armv7 android rust target

v3.2.2

Published on March 24, 2026
Download

v3.2.2

Changes since v3.2.1:

  • build: pin nightly toolchain for rustfmt consistency
  • chore(submodule): update webui [skip ci]
  • ci: restrict webui updater workflow to dev branch
  • fix: make cargo clippy happy
  • metainstall: add support for hot install
  • feat(core): auto detect manual mount scripts to prevent conflicts
  • chore: update license headers [skip ci]
  • chore(release): sync version v3.2.1 [skip ci]

v3.2.1

Published on March 22, 2026
Download

v3.2.1

Changes since v3.2.0:

  • chore: remove unused update_desc
  • Revert "ci: promote only latest prereleases"
  • Revert "ci(workflow): fix unrecognized 'secrets' context in if conditions"
  • sync: sync magic mount updates from upstream
  • adj: removed normalize_module_layout
  • chore(deps): bump the crates group with 2 updates
  • chore(tools): update notify binary [skip ci]
  • chore(deps): bump rustls-webpki
  • chore: bump webui submodule
  • Update dependabot.yml
  • Remove leftover EROFS module tool
  • refactor: Fixed the issue with the size of the statistics
  • BREAKING CHANGE: feat: The erofs is marked as deprecated
  • ci: add caches to compilation workflows
  • xtask: adj: adj target platform(Tools-cx-app/meta-magic_mount-rs#31)
  • Fix EROFS magic fallback and logging
  • Fix EROFS empty remount handling
  • ci(workflow): fix unrecognized 'secrets' context in if conditions

v3.1.6

Published on March 15, 2026
Download

v3.1.6

Changes since v3.1.5:

  • chore: fmt
  • adj: Adjusting loop logic
  • chore: make cargo clippy
  • fix: Fixing layout errors
  • chore: fmt
  • feat: removed trait MountDriver in backend
  • fix: fix glob rules again
  • fix: make clippy happy
  • fix: restore missing utils module and logging statements
  • perf: eliminate O(N^2) tree cloning in magic mount and fix I/O safety
  • fix: resolve critical mount bugs, ext4 inode exhaustion, and strict sync limits
  • fix: fix error glob rules
  • improve: Delete all imgs before mounting img.
  • chore(deps): bump quinn-proto from 0.11.13 to 0.11.14 in /tools/notify in the cargo group across 1 directory (#249)
  • feat(issue): add kernel version & hook type fields with auto-labeling
  • chore: update license headers [skip ci]
  • ci: delete unused workflow i18n
  • ci: fix webui submodule path
  • chore: add hybrid-mount-webui-md3 as webui submodule
  • chore: remove webui folder for submodule migration
  • chore(tools): update notify binary [skip ci]
  • chore(deps): update dependencies in Cargo.lock
  • chore(deps-dev): bump eslint in /webui in the crates group
  • chore(deps): bump the crates group with 2 updates
  • fix: make clippy happy
  • refactor: remove random kworker camouflage feature
  • feat: refactor logger system
  • feat: add const_format dependency and refactor path constants
  • feat: normalize module directory layout during sync
  • chore(logging):logger tag to "Hybrid_Logger"
  • ci: Simplify commit and push steps in workflow (#242)
  • chore(tools): update notify binary [skip ci]
  • chore(deps): bump aws-lc-sys
  • chore(tools): update notify binary [skip ci]
  • chore(deps): bump the crates group in /tools/notify with 2 updates
  • chore(deps): bump zip from 8.1.0 to 8.2.0 in the crates group
  • chore(release): sync version v3.1.5 [skip ci]

v3.1.5

Published on March 1, 2026
Download

v3.1.5

Changes since v3.1.4:

  • fix(core): expose full anyhow error chain and sanitize newlines for module.prop
  • feat(core): catch daemon startup errors and display crash reason in module description
  • feat(i18n): add step to delete old translation branch in workflow
  • chore(deps-dev): bump globals from 17.3.0 to 17.4.0 in /webui in the crates group (#234)
  • [skip ci]fix: update image source and correct binary name in README files
  • chore(deps): bump actions/upload-artifact in the crates group
  • New Crowdin translations by GitHub Action
  • refactor: remove unused import of Show from ConfigTab component
  • refactor: remove umount coexistence option and optimize ModulesTab performance
  • Refactor store usage to uiStore and moduleStore across components
  • feat: refactor application structure and implement new store management for configuration, modules, and system state
  • fix(webui): resolve swipe stuck issue caused by requestAnimationFrame race condition
  • feat: add Vietnamese translation for Hybrid Mount (#229)
  • fix: fix error handling when scan modules (#228)
  • feat(perf): implement UI performance optimizations
  • chore(release): sync version v3.1.4 [skip ci]

v3.1.4

Published on February 27, 2026
Download

v3.1.4

Changes since v3.1.3:

  • fix(planner): correct module partition directory detection logic
  • chore(deps): bump rollup

v3.1.2

Published on February 23, 2026
Download

v3.1.2

Changes since v3.1.1:

  • feat: add remote release step for KernelSU-Repo in workflow
  • fix: correct typo in module summary
  • chore(release): sync version v3.1.1 [skip ci]

Module Details

Module ID
hybrid_mount
1062
Stars
19
Releases

Latest Version

v4.0.1
Released 5/10/2026
Download Now