Download Latest Version v0.33.1 source code.zip (12.9 MB)
Home / v0.26.0
Name Modified Size InfoDownloads / 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_menu to 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_init
    • il2cpp_string_new
    • il2cpp_string_chars
    • il2cpp_string_length
    • Add the corresponding hachimi_get_api C exports to support all
    • newly added functions. (by @Kamirias in 2a4ef29)
  • ast_ruby support. (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 utilizes gui::simple_window_layout with 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)
Source: README.md, updated 2026-06-12