v5.0.0
Features
-
Add custom bind mounts
-
Require clean reinstall for legacy upgrades
-
Support KernelSU late-load (jailbreak) mode Ported from Tools-cx-app/meta-magic_mount-rs 00f525ce and adapted to Hybrid Mount's mount model: remove install/startup refusal, add module/emulated-soft-reboot.sh plus hybrid-mount emulated-soft-reboot, detach the previous run's mounts before KernelSU's emulated soft reboot re-runs metamount.sh, and self-heal at startup when KSU_LATE_LOAD=1. Co-authored-by: Tools-cx-app localhost.hutao@gmail.com
-
i18nAdd Turkish translation aligned with dev Adapted from Tools-cx-app/meta-magic_mount-rs d70c151 to dev's locale schema: drop entries for suspended Kasumi/experimental features, add translations for the new compatibility/custom-mount keys, and register tr-TR in the language selector. Co-authored-by: MrRaita seyfettin.ozviran@protonmail.com -
observabilityAdd low-overhead stage latency logging Add StageTimer records for coarse boot/mount stages ([latency] scope=..., stage=..., status=ok, elapsed_us=...) and HYBRID_MOUNT_LOG_LEVEL (default info; debug restores per-module and per-mount details).
Fixes
-
Update default overlay mode to ext4 in configuration
-
Harden webui daemon transport
-
Strengthen filesystem persistence paths
-
Report directory scan errors
-
Improve module shell parsing
-
daemonTrack sse clients by registry -
Harden daemon state updates
-
webuiGuard concurrent config saves -
Fix an issue where a regular file overwrite was incorrectly promoted to a tmpfs mount for the entire directory for magic_mount.
-
Fix mount gap for magic_mount make private should be recursively, and fixed native detector mount gap. Co-authored-by: 947409161 947409161@qq.com Tested-by: 947409161 947409161@qq.com
-
Restore maintenance checks
-
Fix moduledir is tempdir YuzakiKokuban is so stupid
-
Restore Android target build
-
webuiKeep TypeScript within lint support -
Support Kasumi protocol v16 status output (#374) ## Summary - treat unsupported legacy
fix_mountsas an optional Kasumi operation - skip known protocol v16 feature-status records in rule listings - keep unknown records and valid lowercase path rules strict ## Root cause Kasumi protocol v16 returnsEOPNOTSUPPfor the legacyKSM_IOC_REORDER_MNT_IDioctl and appends records such asstealth enabledandselinux_fix enabledto rule listings. Runtime configuration was applied successfully, but userspace reported failure duringfix_mountsor status refresh. ## Validation - Android arm64 full release build - Android arm64 Clippy for all targets with-D warnings- Android arm64 test targets compiled withcargo ndk ... test --no-run- Pixel 9 Pro: runtime config apply returnsapplied: true, rule listing succeeds, Kasumi remainsavailable -
Correct finit_module syscall number for aarch64 (273 not 379) (#368) Bug:
SYS_FINIT_MODULE_NUMwas hardcoded as379for both ARM (32-bit) and aarch64 (64-bit). Effect: On all aarch64 devices, loading the Kasumi LKM fails withENOSYS (Function not implemented)because syscall 379 doesn't exist on aarch64 — the correct number is273per the generic syscall table (asm-generic/unistd.h). Fix: Split the cfg gates —aarch64→273,arm→379(unchanged). Ref:https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/unistd.h#L663 -
Tolerate incomplete module directories (#372) ## Summary - skip module directories without a regular
module.propduring boot discovery - apply the same behavior to the WebUI module-list API - add focused regression tests for valid modules next to an incomplete directory Fixes #367. ## Root causeb18fe7fchanged module discovery so any directory under/data/adb/moduleswithout a regularmodule.propaborted the entire scan. On the affected device,/data/adb/modules/TA_utlis a residual directory withoutmodule.prop. That prevented both boot mounting and the WebUI module page from processing unrelated valid modules. ## Behavior Directories without a regularmodule.propare logged and skipped. Existing regularmodule.propfiles are still validated, so malformed module IDs remain errors. ## Validation - Android arm64 full feature check - Android arm64 Clippy for all targets with-D warnings- regression coverage for boot discovery and WebUI module listing - Pixel 9 Pro cold reboot: metamodule starts automatically and OverlayFS targets contain the expected module files -
Prevent non-GKI KMI status failures from blocking daemon startup (#376) ## Summary - keep Kasumi runtime status collection working when a vendor kernel release has no -androidNN- KMI segment - allow the daemon to start with default state only when daemon_state.json is missing - keep malformed, inaccessible, or otherwise invalid runtime state errors fatal - add regression coverage for standard GKI and Sony-style vendor kernel releases ## Root cause On a Sony XQ-DQ72 running kernel 5.15.207-g3ddad1147e36, OverlayFS mounts completed successfully, but runtime finalization still collected Kasumi telemetry while Kasumi was disabled. lkm::current_kmi() rejected the vendor release because it has no -androidNN- segment, causing the metamodule mount script to exit with status 1 before daemon_state.json was written. The WebUI then attempted to wake the daemon. The daemon treated the missing runtime state file as fatal and exited before binding /data/adb/hybrid-mount/run/daemon.sock, so the user only saw the secondary 3-second socket timeout. ## Behavior current_kmi() remains strict for actual LKM selection and loading. Only the optional runtime status field falls back to an empty KMI with a warning, so non-GKI kernels are not mapped to an arbitrary prebuilt module. Daemon recovery is limited to NotFound. Corrupt JSON, permission failures, and other state errors still fail with context. Full non-GKI manual KMI selection through the LKM status/WebUI flow is intentionally out of scope for this PR. ## Validation - cargo fmt --all -- --check - Android arm64 cargo check --target aarch64-linux-android --all-features --tests - Android arm64 cargo clippy --target aarch64-linux-android --all-features --tests -- -D warnings - Android arm64 control-plane-only check - Android arm64 no-default-features check
-
Restore legacy config compatibility
-
webuiTolerate CRLF in generated protocol check -
webuiPin typescript to 6.x for eslint compatibility -
late-loadMake stale mount cleanup best-effort -
Tolerate non-directory entries in module discovery Port the tolerance from codex/fix-recent-issues (6c1b51b): stray files next to module directories no longer abort boot scanning or the WebUI module list. Directories without a regular module.prop are still skipped, and real modules keep strict ID/prop validation. Co-authored-by: 由崎黑板 94628337+YuzakiKokuban@users.noreply.github.com
-
Harden runtime and release pipeline
-
daemonMake config update semantics reboot-aware Config changes are persisted for the next boot after the Kasumi backend removal. The daemon now reports applied/reboot_required for set/patch/reset, the WebUI surfaces a reboot-required notice instead of pretending changes apply live, and README/locales are aligned. Adds an Indonesian README translation. -
httpHarden WebUI HTTP request parsing Strictly match the /rpc route, reject duplicate or missing Content-Length, accept only digit-only length values, and reject unsupported Transfer-Encoding. Adds regression tests for each case. -
uninstallStop daemon and detach owned mounts before cleanup Uninstall now best-effort stops the resident daemon, detaches Hybrid Mount-owned mounts via emulated-soft-reboot, falls back to killing the recorded PID, and skips CLI calls for the Nano flavor. -
ciRun shellcheck steps with bash The lints job has no bash default shell, so the new ShellCheck step failed on 'set -o pipefail' under sh.
Performance
-
coreReduce mount filesystem overhead -
webuiStreamline saves and route loading -
modulesCache scans and split API code -
Add mount pipeline metrics
-
Materialize overlay paths on demand
-
Scan module markers in one pass
-
Reuse module inventory snapshot
-
Coalesce batch runtime refreshes
-
Cache kasumi runtime probes
-
webuiUpdate config fields locally -
Trim runtime dependencies
Refactors
-
Centralize runtime cache invalidation
-
webuiRemove unused config save path -
Remove legacy compatibility paths
-
Suspend Kasumi and full distribution
-
Remove Kasumi and make Lite the default release - Drop Kasumi backend, LKM packaging, CLI/daemon/API surface, and docs - Make Lite the default release; Nano unchanged; legacy kasumi configs map to magic - Serve a valid idle daemon state so the WebUI shows 'not mounted' instead of validation errors - Fix release workflow for the new Lite zip naming and update.json sync
Documentation
-
Align verification guidance
-
Document late-load (jailbreak) support
-
changelogRecord unreleased fixes and CI improvements
Tests
-
Model SELinux xattrs in Linux fixtures
-
Use writable opaque xattr on Linux
CI / Tooling
-
Validate project license boundaries
-
Add supply-chain gates and publish release checksums Add ShellCheck and dependency-audit workflows, verify ZIP contents for both flavors in build CI, attach SHA256SUMS to GitHub and KernelSU-Repo releases, and stop prerelease tags from overwriting main's update.json to avoid versionCode collisions.
Maintenance
-
Sync upstream module updates and switch to GPL-3 Sync selected upstream module installer behavior, improve daemon WebUI error handling, and switch project licensing metadata and headers to GPL-3.0-only while leaving webui licensing untouched. Co-authored-by: Tools-cx-app localhost.hutao@gmail.com
-
Revert "style: update layout and styling for navigation and status components" This reverts commit 7d36dbc.
-
Version SSE events and generate protocol types
-
Improve local verification tooling
-
Pin git dependencies
-
Remove orphaned kasumi and mirror-sync modules These files were left behind by the Kasumi removal and are not wired into the module graph. mirror_sync.rs additionally referenced a sync_dir helper that no longer exists.
Other
-
Update layout and styling for navigation and status components
-
Classify daemon command metadata
-
Defer SSE connection until subscribed
-
Add Turkish (tr) translation support. (#379) Since my native language wasn't available in the WebUI, it felt a bit unusual to use. That's why I decided to localize it into Turkish. I hope you accept it. Thanks... (cherry picked from commit d70c151)
-
Add Turkish README localization. (#380) (cherry picked from commit da28a72)
-
Add README_TR.md links to the two required sections (#381) (cherry picked from commit 019799f)