Local quality-of-life tuning for KIOU.
Adjust frame-rate, suppress false AFK warnings, autosave kifu files,
and strengthen the on-device post-game kifu analysis engine — all client-side, zero server impact.
KIOU (棋桜) is an online shogi game by 株式会社ネコノメ, available on the App Store.
KiouForge is a local quality-of-life extension for KIOU that unlocks settings the retail client doesn't expose — frame-rate presets, AFK warning suppression, post-game kifu analysis tuning, and kifu autosave. Every change runs on-device and never touches the server or affects live match play.
| Toggle | What it does |
|---|---|
| FPS Override | Extends the retail 30/60 preset list to {15, 24, 30, 45, 60, 90, 120} fps. >60 requires a ProMotion device; see Performance notes. |
| AFK Guard | Suppresses the "no input detected" warning and the automatic surrender that follows. The retail timer fires after ~60 s of no input. Useful during long-think or analysis sessions. |
| Analysis Tune | Raises the depth, hash, and skill parameters the on-device Rshogi NNUE engine uses for post-game kifu analysis only. Has no effect during live matches. |
| Kifu Autosave | Automatically exports a .kif file to Documents/KiouForge/ when any match ends. Filename includes timestamp, mode, player names (Unicode — Japanese names preserved as-is), and starting position. Per-mode toggles (AI, CPU Stream, Local PvP, Online PvP, Record/Replay) are available in the sub-screen; all modes default to on. |
| Account Switching | Save and switch between multiple KIOU accounts without resetting the app. Accounts are captured automatically on login. Tap Account → Active in the settings sheet to view the list, tap a row to switch (app navigates to the title screen automatically). New Register creates a fresh account without going through KIOU's Reset button. |
The frame-rate stepper cycles through {15, 24, 30, 45, 60, 90, 120}.
Default is 60 (retail value) so a fresh install changes nothing.
| Preset | Use-case |
|---|---|
| 15 / 24 | Aggressive battery saver |
| 30 | Low-power, retail-low |
| 45 | Balanced |
| 60 | Retail default |
| 90 / 120 | ProMotion devices only (iPhone 13 Pro+ / iPad Pro M1+) |
Achieving >60 fps requires:
- A ProMotion device.
- The patched IPA build (the Chinlan pipeline adds
CADisableMinimumFrameDurationOnPhone = trueto Info.plist automatically).
The post-game analysis button (on the kifu detail screen) runs the
on-device Rshogi NNUE engine (NativeSyncSession) locally. KIOU ships
with conservative defaults:
| Parameter | Retail default | Range |
|---|---|---|
Analysis Depth |
15 | 1 – 36 |
Analysis Hash |
16 MB | 16 / 64 / 128 / 256 / 512 / 1024 MB |
Analysis Skill |
20 (max) | 1 – 20 |
Higher depth and hash give a stronger analysis at the cost of longer run time (depth scales roughly exponentially in branching factor). Skill level 20 is already the maximum; lower values intentionally weaken the engine.
These parameters apply only to the post-game review screen. During a live match the engine runs with its built-in defaults — Analysis Tune has no effect on in-match AI support or move suggestions.
When a match ends, KiouForge writes a standard KIF 2.0 file to
Documents/KiouForge/ in the app's sandbox (visible in the Files app and
Filza).
Filename format:
{timestamp}_{mode}_{black}vs{white}_{startpos}.kif
| Segment | Example | Notes |
|---|---|---|
timestamp |
20260614T234500 |
UTC, ISO 8601 basic format |
mode |
OnlinePvPMode |
See mode names in the Features table |
black / white |
田中太郎vs佐藤花子 |
Player names as-is; only / and control characters are stripped |
startpos |
startpos |
startpos for the standard initial position, sfen-<8 hex> for handicap games, unknown if unresolvable |
File contents:
Standard KIF 2.0 (UTF-8, no BOM) compatible with PiyoShogi, Shogi Browser Q, KifuCloud, and other Japanese kifu viewers. Includes player names, start date/time, time control, and ending reason where available.
Right-edge swipe → settings sheet with four sections:
- Features — one toggle per row in the Features table. Tapping the Kifu Autosave row drills into a sub-screen with per-mode toggles (AI Match, CPU Stream, Local PvP, Online PvP, Record/Replay). The master toggle and the per-mode toggle must both be on for autosave to fire in that mode.
- Performance — FPS stepper.
- Engine — Analysis Depth / Analysis Hash / Analysis Skill steppers.
- About — repo link, author X handle, build commit.
All values persist between launches.
KIOU itself has no official account linking — once you uninstall the app
or wipe the device, the deviceId is gone and your account is unrecoverable.
KiouForge fills that gap by recording every account that passes through
LoginAsync and persisting the identifiers to NSUserDefaults. The saved
list survives app updates, and since you can export it, your accounts
survive device transfers too.
How it works:
- On first launch after install, the currently-logged-in account is captured
from
UserSaveDataExtensions.AccountExists. - On every successful login,
RunLoginSequenceAsync.MoveNextrecords theLoginReply(deviceId, userName, userId fromJWT.sub). - From the settings sheet → Account → Active you can see all saved
accounts and tap one to switch. KiouForge arms a
pending_device_idsubstitution; the nextLoginArgs.Createcall silently swaps thedeviceIdargument so the server returns the chosen account's session. - New Register arms a fresh UUID and routes the next launch into the name-entry flow — creating a new account without touching KIOU's own Reset button (which can trigger server-side rebinding of the existing account's UUID).
distinctId (TDAnalytics keychain UUID) is intentionally not touched
during a switch — overriding it causes a -40004 auth failure.
The accounts screen has a share button (top right) that writes
kf_accounts.json to a temp file and opens the system share sheet. The
JSON is plain — each entry has uuid, userName, openId, userId,
distinctId, savedAt, and an optional ranks array.
Use cases:
- Backup — save the JSON to Files / iCloud / your Mac before reinstalling.
- Device transfer — export from the old device, then on the new device
drop the JSON into
Library/Preferences/<bundle>.plist(under thekiou_forge.account.accountskey) and your saved accounts move with you. - Recovery — even if KIOU itself loses the deviceId, the UUID stored in your exported JSON can be replayed via the Active account list to log back into the original account.
This is the closest thing to "account linking" KIOU has — and it's entirely client-side.
KIOU is an online game — it updates frequently and old versions stop working server-side. The recommended target is always the latest supported version.
| Feature | 1.0.1 (build 11) | 1.0.2 (build 12) |
|---|---|---|
| FPS Override | ✓ | ✓ |
| AFK Guard | ✓ | ✓ |
| Analysis Tune | ✓ | ✓ |
| Kifu Autosave | ✓ | ✓ |
| Account Switching | — | ✓ |
Account Switching requires hook sites introduced in 1.0.2; the Jailed/JB build
always targets the latest version only (RVAs are pinned at compile time).
The Patched IPA build selects the recipe at build time via TARGET_VERSION.
| Latest supported KIOU | 1.0.2 (CFBundleVersion 12) |
| KIOU minimum iOS | 10.0 (MinimumOSVersion in app bundle) |
| KiouForge minimum iOS | 13.0 (requires UIWindowScene) |
| Tested on | iOS 15.0 – 26, arm64 |
| Distribution | Jailbroken .deb, TrollStore jailed .dylib, Patched IPA (Sideloadly / AltStore) |
make package install transfers and installs the .deb over SSH.
Requires OpenSSH on both sides — openssh-server on the device (install
via Sileo/Zebra) and ssh on the host.
make package
make package install THEOS_DEVICE_IP=<device-ip>TrollStore is only supported on specific iOS versions. Check the supported versions table before proceeding.
make jailed
# -> packages/jailed/KiouForge.dylibStage inside the decrypted KIOU .app/Frameworks/, add an LC_LOAD_DYLIB,
and install via TrollStore.
For devices where TrollStore is unavailable. Install the patched IPA with Sideloadly or AltStore.
Requires a decrypted KIOU IPA (e.g. obtained via palera1n + Filza, or TrollDecrypt). The App Store download is FairPlay-encrypted and cannot be patched directly.
# default (1.0.2)
mkdir -p assets/1.0.2
cp ~/Downloads/Kiou-1.0.2.ipa assets/1.0.2/
make ipa
# -> packages/ipa/KiouForge-patched.ipa
# target a specific version
make ipa TARGET_VERSION=1.0.1Before building after editing hook sites or after a KIOU update:
# verify current recipe against a specific version's dump + IPA
PYTHONPATH=shared:. TARGET_VERSION=1.0.2 python3 -m tools.verify_sites \
--recipe recipes \
--index assets/1.0.2/dump.cs.index.json \
--ipa assets/1.0.2/Kiou-1.0.2.ipa


