| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| hachimi.dll | 2026-06-12 | 21.7 MB | |
| hachimi_installer.exe | 2026-06-12 | 12.3 MB | |
| libmain-arm64-v8a.so | 2026-06-12 | 19.5 MB | |
| blake3.json | 2026-06-12 | 183 Bytes | |
| sha256.json | 2026-06-12 | 99 Bytes | |
| README.md | 2026-06-12 | 18.9 kB | |
| v0.26.0 source code.tar.gz | 2026-06-12 | 7.5 MB | |
| v0.26.0 source code.zip | 2026-06-12 | 7.7 MB | |
| Totals: 8 Items | 68.7 MB | 0 | |
What's Changed
-
Update Brazilian Portuguese translations (#91) (by @0Mateus in e709be2)
-
Increase min column size for homepage and maintainer labels in tl info window (by @kairusds in f1a167f)
-
Update Spanish translations (#89)
- Update Spanish (ES) translations
- Revert License translation (by @Rekoiru in 7cdd646)
-
Update indonesian translation (#90) (by @1kazuu in 9f3065c)
-
Zh-cn TL string update (#88)
- update zh-cn tl strings
- Update and adjust zh-cn tl strings
- delete license part (by @yingyingyingqwq in 1149498)
-
Update filipino translations (#87) (by @searinminecraft in e460ba8)
-
Fix some config editor options not showing up in search (by @kairusds in 4858964)
-
Fix config editor custom_title_name text input and save freeze on Windows (by @kairusds in 0e4895c)
-
Bump version (by @kairusds in 2942f02)
-
Add plugin lifecycle callbacks and IL2CPP helpers to plugin API (#84)
- Expose two new plugin vtable functions for lifecycle hooks:
on_game_init: Called after the game finishes initializing. Plugins- register via
Hachimi.plugin_init_callbacks. on_present: Called every DirectX Present frame (Windows-only).- Plugins register via
Hachimi.present_callbacks. - Expose
gui_ui_combo_menuto the plugin API, providing a searchable - combo box widget that plugins can use in their GUI sections.
- Expose four IL2CPP string/object helpers through the vtable:
il2cpp_runtime_object_initil2cpp_string_newil2cpp_string_charsil2cpp_string_length- Add the corresponding
hachimi_get_apiC exports to support all - newly added functions. (by @Kamirias in 2a4ef29)
-
ast_rubysupport. (by @Mario0051 in 82fee5f) -
Overhaul parallel downloader and translation updater, add config options and cleanup deps
- Replace mpsc channels with crossbeam_channel for parallel downloads
- Add 206->200 fallback for servers that don't support Range requests on translation updates
- Add RAII ZipCleanupGuard to ensure temp ZIP files are removed on failure
- Add double mmap validation to prevent crashes on corrupted/empty ZIP files during translation updates
- Add free disk space pre-check (Windows FFI + Android JNI) before extracting translation updates
- Prevent concurrent translation update runs with a try_lock mutex (TOCTOU fix)
- Cap parallel download threads to max(1, min(parallelism/2, 4))
- Add etag_translation_updates "Fastpath translation updates" config toggle for conditional GET requests
- Add async translation repo removal using a persistent UI notification
- Automatically refresh translation repo cache and icons after an update finishes
- Rename TlUpdateMode -> TLAutoUpdaterMode and related config keys
- Move custom window title to Windows-specific config, apply dynamically on save
- Add SMTC unregister() call when the setting is toggled off
- Add search filters to Live/Captions config editor rows
- Add hide_now_loading, replace_to_builtin_font, and orientation guide config options
- Fix Android input routing to ensure corner tap overlay toggle is reliably detected
- Remove unused rmpv and rand dependencies, clean up Cargo.lock
- Fix unused variable/import warnings across multiple files
- Use translation_repo_info.details_title for the translation repo info window title instead of a suffix to prevent oversizing the window (by @kairusds in d2eaa98)
-
Features ported from https://github.com/Kimjio/umamusume-localify
- Windows System Media Transport Controls (SMTC) integration
- Displays current song metadata (title, artist) and album art in Windows media controls
- Play/pause/next/previous support for lives and home jukebox
- Creates Start Menu shortcut for AUMID registration
- New config option: enable_smtc (default: true)
- Windows taskbar progress indicator
- Shows download progress on taskbar during game downloads (DownloadView, BackgroundDownloadProgressUI, DownloadProgressUIGame)
- Shows indeterminate progress during connecting screen
- Shows boot progress on title screen
- Shows error state on download errors
- New config options: taskbar_show_progress_on_download, taskbar_show_progress_on_connecting
- Voice captions/subtitles system
- Hooks CriWare audio functions to capture voice cue info
- Displays in-game caption overlay using Notification prefab
- Captions show localized text with configurable font size, color, outline, position, and background opacity
- SEH exception guarding on Windows via microseh
- New config options: caption_enable, caption_lines_char_count,
- caption_font_size, caption_color, caption_outline_size,
- caption_outline_color, caption_bg_alpha, caption_pos_x,
- caption_pos_y
- Live concert playback slider
- Overlay slider in Live concerts for seeking playback position
- Audio sync via CriAtomExPlayer seek/restart
- New config options: live_slider_always_show, live_playback_loop
- Champions Meeting live concert text override
- Overrides Champions Meeting live concert text with custom resource ID and year
- Fills character name arrays from MasterCharacterSystemText
- New config options: champions_live_show_text, champions_live_resource_id, champions_live_year
- CySpring physics frame scale uncap
- Allows uncapped frame scale for CySpring cloth physics at high FPS
- New config option: cyspring_mono_uncap_frame_scale
- NowLoading screen skip
- Option to hide NowLoading screens while still invoking completion callbacks
- Also forces orientation guide type to 0 when ui_loading_show_orientation_guide is disabled on Windows
- New config options: hide_now_loading, ui_loading_show_orientation_guide
- Replace built-in font option
- Calls AssignDefaultFont on TextCommon Awake when enabled
- New config option: replace_to_builtin_font
- Custom window title in Windows
- Option to set custom window title text via SetWindowTextW
- New config option: custom_title_name
- Other changes:
- Always hook LoadLibraryW (remove steam overlay conflict check)
- Move criware lib detection before hooking_finished check so criware::init runs properly
- Add SceneManager/Scene hooks for active scene detection
- Add Texture2D::Apply and ImageConversion::EncodeToPNG wrappers
- Simplify Texture2D constructor to 2-param overload
- Add Application::systemLanguage address resolver
- Add Screen::get_IsSplitWindow/get_IsVertical address wrappers
- Add cross-platform get_proc_address utility
- Add SQL query helpers for master database tables
- New Windows feature flags: Win32_UI_Shell_PropertiesSystem,
- Win32_System_Com_StructuredStorage, Win32_System_Variant, Media,
- Foundation, Storage_Streams, Win32_System_WinRT, Win32_System_Com,
- Data_Xml_Dom, UI_Notifications
- Config editor UI for all new options with enum combo boxes and conditional sections
- Defer config save in config editor until after window closes
- IS_CONSUMING_INPUT and WANTS_INPUT made pub for cross-module access
- IS_LIVE_SCENE atomic for live concert state tracking (by @Mario0051 in ecf2677)
-
Automatic translation is now non-blocking. (by @Mario0051 in 1ff56c4)
-
Fixes [#56] (by @Mario0051 in e01be04)
-
Added dynamic API lookup for plugins (v3 init)
- Adds hachimi_init_v3 entry point that receives a get_api function
- pointer instead of a vtable struct, so plugins no longer need to
- match the Vtable field order
- V2+ plugins using hachimi_init continue to work as before
- Originally from Mario0051/Hachimi-Edge@e58dd1a (by @kairusds in af0b4ab)
-
The "Landscape overlay scale" setting is now optional (enabled by default). (by @Mario0051 in cc7b922)
-
Allow inputs to bypass the GUI if they are made in an area that the GUI is not covering. (by @Mario0051 in c077431)
-
Disable window viewport constraint (by @Mario0051 in 9741daa)
-
Add menu width and path getters to plugin API
- Adds gui_get_menu_width and gui_set_menu_width for plugins to
- read and change the sidebar overlay width
- Adds hachimi_get_base_dir for plugins to get the game data directory
- Adds hachimi_get_data_path for plugins to get the Hachimi data path
- Originally from Mario0051/Hachimi-Edge@2e76e7ca, Mario0051/Hachimi-Edge@e11e4354,
- Mario0051/Hachimi-Edge@23db0405, Mario0051/Hachimi-Edge@9c54251d (by @kairusds in bd90382)
-
Fix meta index retry runtime error and blank meta_index_url crash
- Fixes a runtime error when retrying a failed meta index download,
- the old request object would be reused after being consumed. Now
- creates a fresh request on retry.
- Fixes a crash when meta_index_url is set to a blank string, now
- resets to the default URL when the field is cleared.
- Fixes kairusds/Hachimi-Edge#49
- Originally from Mario0051/Hachimi-Edge@8acb14d (by @kairusds in 74412f3)
-
Use existing tl_repo::store_progress for ca86fa0 (by @kairusds in 9a35954)
-
Show progress bar when checking for translation updates. (by @Mario0051 in ca86fa0)
-
Prevent updater prompts from stacking.
- The interval will be paused while the prompt is visible. (by @Mario0051 in e0ef60e)
-
Fix bugs from 83b1d71
- Fixes:
- Replace AtomicBool + sleep loop with crossbeam_channel for proper
- thread stop signal, dropping the sender immediately terminates the
- thread instead of waiting for the next sleep cycle
- Use Instant-based next_check timer instead of manual elapsed counter,
- properly resets when interval shrinks
- Allow thread restart while sleeping, channel disconnection breaks
- out of recv_timeout immediately
- Move update check logic inline in the thread loop instead of
- spawning a new thread on every check_for_updates call
- Replace HEAD + GET double request with single conditional GET using
- If-None-Match header, handling 304 Not Modified responses
- Clear skipped_etag after a successful update so subsequent checks
- can proceed normally
- Guard silent mode with progress check to prevent auto-applying
- updates while another update is already in progress
- Remove unnecessary .to_owned() on bool (SimpleOkDialog) (by @kairusds in e463e99)
-
Added translations auto-updater with periodic checking and silent mode
- Features:
- Background thread that periodically checks for translation updates
- based on a configurable interval in seconds
- Silent mode that auto-applies available updates without user
- interaction
- ETag-based caching to skip unchanged remote index files
- skipped_etag mechanism to defer updates when another update is
- already in progress
- New config options:
- tl_update_interval_sec: check interval in seconds (0 = disabled)
- tl_update_mode: Disabled, Manual, or Silent
- Other:
- check_for_updates method that fetches remote index and compares
- against local cache
- GUI toggle for silent mode and interval setting (by @Mario0051 in 83b1d71)
-
Improve accuracy of progress bar when downloading translations. (by @Mario0051 in a6543f3)
-
Add integrity check to serial downloader and buffer handling safety fix. (by @Mario0051 in f5dc613)
-
Increase ConfigEditor height (by @kairusds in 96a2b6b)
-
Text formatting changes (#81)
- Allow enabling best fit globally
- Scale epithets nicely
- Add min width and height adjustment templates
- These can be used as a form of soft $(nb) and are
- particularly helpful with autofit.
- Don't change game-set autofit instances
- Applies to global setting.
- Add min/max autofit font size args to template
- Change afit template to take a state
- This matches vo/ho and enables use in all cases,
- such as game-set values or global repo settings.
- Simplify skill text formatting
- This also improves it, depending on how you view it.
- Clean up SQL-side skill formatting logic
- Adjust skill name element sizes to fit
- For whatever reason they didn't make them adjust dynamically, so we'll
- have to do it for them in the wonky way.
- Skill adjustment would have been so easy otherwise...
- There are other ways to do this, but this was the simplest for now.
- Scale skills correctly on Limit Break screen
- Auto-wrap and center choice button text
- Auto-size names in stories
- Auto-size missions
- Implement formatting templates for AnText
- Improve skill display on Limit Break screen
- Size name plates appropriately
- Size card titles appropriately on upgrade screen
- Fix method signatures
- Not that it really matters to us, but hey.
- Fix Limit Break screen not sizing on first open
- Start is called after Setup, so the fitter negates the adjustments
- for the first skill displayed. Move disabling fitter to Setup
- as perf diff is minuscule. (by @noccu in 038f259)
-
Added Window APIs for plugins
- Bump plugin API version to 3
- Added plugin API methods:
gui_new_window_id,gui_show_window&gui_close_window. gui_show_window utilizesgui::simple_window_layoutwith a vertical scrollbar internally. Documentation on how to use these will be in https://hachimi.noccu.art/docs/plugins/development - Not to be confused with Microsoft Windows (by @kairusds in 5400e3f)
-
Added search bar for Condig Editor
- Added View Contributors button in About menu and improved a couple of related strings (by @kairusds in 740a128)
-
Remove double tap Volume Up action for toggling ingame ui on Android (by @kairusds in c6297e5)
-
Add multi translation repo management, keybind system overhaul & more
- Added the ability to switch between multiple translation repositories from the in-game menu ("Change Translation Repo")
- Added an "Add Translation Repository" dialog to browse and download additional translation repos
- Added a "Translation Repo Details" window showing repo name, description, homepage, maintainer, contributors, and links from info.json
- Added a "Show Changelog" button in the translation update dialog that renders the repo's changelog (supports both plaintext and Markdown formats)
- Added "Edit Excludes" menu item and Excludes Editor window to manage which files/folders are excluded from translation updates
- Excludes now support directory matching, excluding a folder will also exclude all files inside it
- Reworked the keybind capture system with a unified "Set Keybind" dialog that works the same way on both Windows and Android
- Key presses during keybind capture are now properly consumed and won't pass through to the game
- The old "Press to set" button for the menu open hotkey has been replaced with the new keybind capture dialog
- Added a keybind button for the "Hide ingame UI" hotkey in the config editor, allowing it to be changed via the keybind dialog
- On Android, the splash screen now also shows the generic action name for the menu open hotkey
- Added display names for many more keys on Android: D-Pad, Volume Up/Down, Back, Copy/Cut/Paste, and various symbol keys (semicolon, comma, brackets, backslash, slash, grave, minus, period, plus, equals)
- Unknown keys are now shown as
Key <code>instead of being unrecognized - Added notification when the active translation repo is changed and localized data is reloaded
- Added notification when the translation data folder is missing after a repo change
- Each translation repo now has its own separate cache file instead of sharing a single one
- Legacy single translation repo setups are automatically migrated to the new multi-repo system on startup
- Improved translation update performance and smoother progress reporting (now throttled to 60fps and utilizing crossbeam-channel)
- Fixed Homescreen Background Season options (Summer, Fall, Winter, Cherry Blossom) appearing in the config editor for non-JP regions where they are unsupported
- Renamed application metadata ProductName to "Hachimi Edge" for tauri-winres in Windows
- Add ES, PT-BR, ID & FIL translations for the new Set Keybind system. ES by @Rekoiru, PT-BR by @0Mateus, ID by @ggktm & FIL by @searinminecraft
- Added support for translation repo info.json, place it in your localized_data folder to provide metadata. Example:
{ "name": "Translation Repo Name", "description": "Translation Repo Description", // plaintext changelog "changelog_url": "https://example.com/CHANGELOG.txt", // markdown changelog "changelog_url": "https://example.com/CHANGELOG.md", "homepage": "https://github.com/TLRepoOwner/TLRepoName", "links": [ ["button_name", "https://example.com"], ["button_name2", "https://example2.com"] ], "maintainer": "maintainer_name", // web page of the list of contributors "contributors": "https://example.com/contributors-list.html" // OR names of each contributors inside of a text file separated by newlines from a URL "contributors": "https://example.com/contributors.txt" // OR JSON array of contributors' names "contributors": ["contributor1", "contributor2", "contributor3"], // Language of the translation repo // List of valid languages: https://developers.google.com/workspace/admin/directory/v1/languages "language": "en" } - Repos can display a custom icon in the Change Translation Repo window by placing an icon.png file in their localized_data folder. By default, if this icon file doesn't exist it'll use the Hachimi icon
- changelog_url supports .txt, .md, and .markdown files. .txt is rendered as plaintext, .md/.markdown is rendered as Markdown
- contributors can be provided as a URL to a contributors webpage, a URL to a .txt file (one name per line), or a JSON array of names (by @kairusds in 9901761)