{"id":47744172,"url":"https://github.com/awemorris/suika3","last_synced_at":"2026-07-11T22:00:43.324Z","repository":{"id":332096405,"uuid":"1129931895","full_name":"awemorris/suika3","owner":"awemorris","description":"Suika3 is a crazy visual novel engine with advanced JIT/AOT scripting. Works on Windows, macOS, Linux, iPhone, Android, consoles, and PC98!","archived":false,"fork":false,"pushed_at":"2026-07-09T21:28:03.000Z","size":204892,"stargazers_count":33,"open_issues_count":1,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-07-09T22:08:44.049Z","etag":null,"topics":["game-engine","iphone-app","pc98","retro-pc","risc-v","visual-novel"],"latest_commit_sha":null,"homepage":"https://suika3.vn/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/awemorris.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-07T19:39:35.000Z","updated_at":"2026-07-09T20:11:19.000Z","dependencies_parsed_at":"2026-04-22T07:02:12.421Z","dependency_job_id":null,"html_url":"https://github.com/awemorris/suika3","commit_stats":null,"previous_names":["suika3-community/suika3","awemorris/suika3"],"tags_count":630,"template":false,"template_full_name":null,"purl":"pkg:github/awemorris/suika3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2Fsuika3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2Fsuika3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2Fsuika3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2Fsuika3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/awemorris","download_url":"https://codeload.github.com/awemorris/suika3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2Fsuika3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35376135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game-engine","iphone-app","pc98","retro-pc","risc-v","visual-novel"],"created_at":"2026-04-03T00:24:56.358Z","updated_at":"2026-07-11T22:00:43.311Z","avatar_url":"https://github.com/awemorris.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Suika3: Modern, Portable, Full-stack Visual Novel Engine\n========================================================\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/logo-mid.png\" alt=\"Suika3 Logo\" width=\"480\" hspace=\"20\"\u003e\n  \u003cbr\u003e\n  \u003ci\u003eStandard Universal Infrastructure for Kinetic Arts, 3rd Edition\u003c/i\u003e\u003cbr\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://suika3.vn/wasm/\"\u003e\n    Click to Start Browser Demo!\u003cbr\u003e\n    \u003cimg src=\"https://github.com/awemorris/suika3/blob/main/docs/img/lts2607-1.webp\" width=\"480\" alt=\"Suika3 Web Demo Game\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://discord.gg/YZsq9u9Mgr\"\u003e\u003cimg src=\"https://img.shields.io/badge/suika3.vn-Discord-green\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-ZLib-green.svg\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/stars/awemorris/suika3.svg?style=flat\u0026logo=github\u0026colorB=yellow\u0026label=stars\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/forks/awemorris/suika3.svg\"\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://suika3.vn/en/\"\u003eEnglish\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/es/\"\u003eEspañol\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/fr/\"\u003eFrançais\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/de/\"\u003eDeutsch\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/ru/\"\u003eРусский\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/zh-Hans/\"\u003e簡体中文\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/zh-Hant/\"\u003e繁体中文\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://suika3.vn/ja/\"\u003e日本語\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/awemorris/suika3/releases/latest\"\u003e Downloads\u003c/a\u003e\u0026nbsp;|\u0026nbsp;\n    \u003ca href=\"https://github.com/awemorris/suika3/blob/main/docs/mkdocs-en/docs/tutorial.md\"\u003eTutorial\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\nSuika3 is practical game middleware designed to let visual novels and\n2D games be built once and continue selling steadily across current\nand future platforms for more than 30 years. It has been tested on\nmost 32-bit and 64-bit computers produced after 1985. Developers can\nuse the binaries as-is, or they can use Suika3 as a foundation for\nbuilding in-house game engines.\n\n---\n\n## TL;DR\n\n### For Creators\n\n- **What is this for?:**\n    - Creating visual novels and selling them on App Store and Steam at the same time, eliminating porting headaches.\n- **Who is this for?:**\n    - Professional creators who make visual novels.\n- **What is the primary advantage?:**\n    - Develop once and keep shipping to future platforms Suika3 will support.\n\n### For Engineers\n\n- **Long-Term:** 25+ years of development since 2001, 10+ years of long-term support for each LTS version.\n- **Performance:** Native, JIT, core written in 100% pure ANSI C.\n- **Hybrid Scripting:** JIT for PC, AOT for mobile, ensuring App Store compliance. OSS equivalent to Unity IL2CPP.\n- **Broad Platform Support :** A real working list, not just a future roadmap.\n    - Desktop: Windows, macOS, Linux, Raspberry Pi, FreeBSD\n    - Mobile: iOS, Android, HarmonyOS NEXT\n    - Web: WebAssembly, Chromebook\n    - Console: PlayStation 4/5, Xbox Series X|S, Switch (really works)\n    - Exotic: NetBSD, OpenBSD, Solaris 10/11, BeOS, Haiku\n    - Retro: NEC PC-9801, IBM PC/AT (really works)\n- **JIT:** JIT works with 10 architectures, including x86, x86_64, ARMv7, Arm64, MIPS32, MIPS64, PowerPC 32, PowerPC 64, RISC-V 32, and RISC-V 64.\n- **Interpreter/AOT:** Also works with Motorola 68000, Sun SPARC, DEC Alpha, HP PA-RISC, IBM s390x, Hitachi SH-4, Itanium, Xtensa, etc.\n- **2D Support:** It's also a fully-featured, unlimited 2D game engine.\n\n---\n\n## Installation\n\n### Binary Downloads\n\n\u003cimg src=\"https://img.shields.io/badge/CI%20Build%20Status-All%20Green%20Released-green\"\u003e\u003cbr\u003e\n\nThe project is already complete, and you can download real working versions of the product artifacts.\nInstead of worrying about adoption statistics, download the SDK right now and give it a try by yourself.\nYou will definitely like it!\n\n[Downloads](https://github.com/awemorris/suika3/releases/latest)\n[Tutorial](docs/mkdocs-en/docs/tutorial.md)\n\n**Direct Links to Latest LTS Release** [(Release Note)](https://github.com/awemorris/suika3/blob/main/docs/RELEASENOTE.md)\n\n| OS                                    | File                                                                                                                          |\n|---------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|\n| Full SDK (Recommended)                | [Suika3-Full-SDK.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-SDK-Full.zip)                       |\n| Documents                             | [suika3-documents.zip](https://github.com/awemorris/suika3/releases/latest/download/suika3-documents.zip)                     |\n| Windows 64-bit Intel/AMD (Win 7+)     | [suika3-win64.exe](https://github.com/awemorris/suika3/releases/latest/download/suika3-win64.exe)                             |\n| Windows 32-bit Intel/AMD (Win XP+)    | [suika3-win32.exe](https://github.com/awemorris/suika3/releases/latest/download/suika3-win32.exe)                             |\n| Windows Arm64 Win10+                  | [suika3-arm64.exe](https://github.com/awemorris/suika3/releases/latest/download/suika3-arm64.exe)                             |\n| Windows CLI (Win 7+)                  | [suika3-cli.exe](https://github.com/awemorris/suika3/releases/latest/download/suika3-cli.exe)                                 |\n| macOS 10.11+ DMG                      | [Suika3.dmg](https://github.com/awemorris/suika3/releases/latest/download/Suika3.dmg)                                         |\n| macOS 10.11+ CLI                      | [suika3-macos-universal.tar.gz](https://github.com/awemorris/suika3/releases/latest/download/suika3-macos-universal.tar.gz)   |\n| macOS (Xcode)                         | [Suika3-macOS-Xcode.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-macOS-Xcode.zip)                 |\n| Linux Flatpak x86_64 Intel/AMD        | [Suika3-x86_64.flatpak](https://github.com/awemorris/suika3/releases/latest/download/Suika3-x86_64.flatpak)                   |\n| Linux Flatpak Arm64 (Raspberry Pi 3+) | [Suika3-aarch64.flatpak](https://github.com/awemorris/suika3/releases/latest/download/Suika3-aarch64.flatpak)                 |\n| iOS (Xcode)                           | [Suika3-iOS-Xcode.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-iOS-Xcode.zip)                     |\n| Android (Android Studio)              | [Suika3-Android-Studio.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-Android-Studio.zip)           |\n| OpenHarmony (DevEco Studio)           | [Suika3-OpenHarmony-DevEco.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-OpenHarmony-DevEco.zip)   |\n| Wasm (HTML)                           | [suika3-wasm.html](https://github.com/awemorris/suika3/releases/latest/download/suika3-wasm.html)                             |\n| Unity (PS5/Switch/Xbox)               | [Suika3-Unity.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-Unity.zip)                             |\n| NEC PC-9801 MS-DOS                    | [suika-98.exe](https://github.com/awemorris/suika3/releases/latest/download/suika-98.exe)                                     |\n| IBM PC/AT MS-DOS                      | [suika-at.exe](https://github.com/awemorris/suika3/releases/latest/download/suika-at.exe)                                     |\n\n### Package Managers \u0026 Automated Installation\n\nWindoww (Terminal):\n```\ncurl -o \"%TEMP%\\suika3.exe\" -L https://github.com/awemorris/suika3/releases/latest/download/suika3-cli.exe\npowershell -NoProfile -Command \"Start-Process cmd -Verb RunAs -ArgumentList '/c copy /Y \\\"%TEMP%\\suika3.exe\\\" \\\"C:\\Windows\\System32\\suika3.exe\\\"'\"\nsuika3\n```\n\nLinux (Flathub):\n```\nflatpak install --user flathub vn.suika3.engine\nflatpak run vn.suika3.engine\n```\n\nmacOS (Homebrew):\n```\nbrew tap awemorris/suika3\nbrew install suika3\nsuika3\n```\n\nFreeBSD (Ports):\n```\npkg install suika3\nsuika3\n```\n---\n\n## Demo and Gallery\n\n\u003c!-- SCREENSHOT --\u003e\n\u003cdiv align=\"center\"\u003e\n  macOS 26\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-macos26.webp\" alt=\"Suika3 on Windows 11\" width=\"640\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  Windows 11\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-win11.webp\" alt=\"Suika3 on Windows 11\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-win11-2.webp\" alt=\"Suika3 on Windows 11\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-win11-3.webp\" alt=\"Suika3 on Windows 11\" width=\"480\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  Debian GNU/Linux 13\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-linux.webp\" alt=\"Suika3 on Ubuntu 24.04\" width=\"480\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  iOS\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-ios.webp\" alt=\"Suika3 on iOS\" width=\"480\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  Android (\u003ca href=\"https://github.com/awemorris/suika3/releases/download/26.07.2/suika3-demo.apk\"\u003eDemo APK Here!\u003c/a\u003e)\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-android.webp\" alt=\"Suika3 on Android\" width=\"480\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  Solaris 10\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-solaris10.webp\" alt=\"Suika3 on Solaris 10\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  Haiku\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-haiku.webp\" alt=\"Suika3 on Haiku OS\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  NEC PC-9801 (80386/JIT, PCM sound)\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-pc98.png\" alt=\"Suika3 on NEC PC-9801\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n  IBM PC/AT (80386/JIT)\u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/screenshot-pcat.png\" alt=\"Suika3 on IBM PC/AT\" width=\"480\"\u003e\u003cbr\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\n---\n\n## VS Code Integration\n\n### Syntax Highlighting\n\nThere is an awesome VS Code extension by `@lalalll-lalalll` to support\nsyntax highlighting for Suika3, including `NovelML`, `Ray`, `GUI`, and `Anime` files.\n\nCheck it out: [NovelML-Helper](https://github.com/lalalll-lalalll/NovelML-Helper)\n\nTo install this extension, visit the repository and download the .vsix file from the\n[Releases page](https://github.com/lalalll-lalalll/NovelML-Highlighter/releases),\nthen install it on VS Code.\n\n\u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/syntax-highlighter-3.png\" alt=\"Install highlighter 1\" width=\"320\" hspace=\"20\"\u003e\n\n### Copilot Completion\n\nYou can write `NovelML` and `Ray` using Copilot Chat and/or Completion\nbecause the SDK contains the full documentation inside the project and\nCopilot can refer it.\n\n### Desktop Execution\n\nOpen the extracted folder by `Visual Studio Code`.\n\n- Click the command bar, `Run Task --\u003e Suika3: Run` (or just press `Ctrl-Shift-B`)\n- Suika3 will launch immediately!\n\n\u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/vscode-2.webp\" alt=\"VSCode 2\" width=\"640\" hspace=\"20\"\u003e\n\n- Any script errors will appear in the `PROBLEMS` tab.\n- You can click an error to jump directly to the corresponding line in the source code.\n\n\u003cimg src=\"https://raw.githubusercontent.com/awemorris/suika3/refs/heads/main/docs/img/vscode-3.webp\" alt=\"VSCode 3\" width=\"640\" hspace=\"20\"\u003e\n\n### iOS and Android Execution\n\nEver dreamed of becoming an iOS/Android developer in just a minute?\nWith Suika3, it's that simple.\n\n- One-Click:\n    - By selecting the `Suika3: Build iOS IPA` or `Suika3: Build Android APK`\n      task, Suika3 will automatically build the app and install it\n      onto your USB-connected smartphone.\n- For Android:\n    - Turn on `Developer Mode` and `USB Debugging` on the phone\n    - No manual setup required on the Suika3 side\n    - No Android Studio required, of course\n    - No paid license required\n    - JDK and Android SDK will be downloaded automatically during the build process\n- For iOS:\n    - Xcode 15+ required (free)\n    - No paid license required for testing on iPhone simulators\n    - `Apple Developer Program` required for testing on real iPhone/iPad ($99/year)\n\nI truly believe Suika3 is one of the most streamlined tools in the\nworld for creating and publishing iPhone, iPad, and Android apps to\nthe stores!\n\nEven if you aren't ready to publish just yet, imagine the look on your\nfriends' faces when they see your game running smoothly on an iPhone.\nYou'll be the star of the day.\n\nAnd if you're looking for a publisher to back your project, having a\nplayable, high-quality mobile demo is your ultimate weapon. It speaks\nlouder than any pitch deck ever could!\n\n---\n\n## Index\n\n- [Introduction](#introduction)\n- [Key Features](#key-features)\n- [Kanban](#kanban-status)\n- [Getting Started Guide](#getting-started-guide)\n- [Building from Source](#building-from-source)\n- [Quick Look](#quick-look)\n- [Examples](#examples)\n- [Why Ray?](#why-ray)\n- [Technical Overview](#technical-overview)\n- [Garbage Collection](#garbage-collection)\n- [Ray Scripting Host](#ray-scripting-host)\n- [Compatibility List](#compatibility-list)\n- [Documentation](#documentation)\n- [Internationalization](#internationalization)\n- [Third-party Libraries](#third-party-libraries)\n- [CMake Presets](#cmake-presets)\n- [Codebase \u0026 Maturity](#codebase--maturity)\n- [Quality Assurance](#quality-assurance)\n- [Adoption Status](#adoption-status)\n- [Repository Structure](#repository-structure)\n- [Asset File Formats](#asset-file-formats)\n- [Game Packaging \u0026 Distribution](#game-packaging-distribution)\n- [Engine Feature List](#engine-feature-list)\n- [Versioning Policy](#versioning-policy)\n- [License](#license)\n- [Support \u0026 Contact](#support--contact)\n- [Community](#community)\n- [Contribution](#contribution)\n- [Lineage: The Grand Journey](#lineage-the-grand-journey)\n- [Why Suika3?: Our Philosophy](#why-suika3-our-philosophy)\n- [FAQ](#faq)\n\n---\n\n## Introduction\n\nSuika3 is yet another Visual Novel Engine for 2030s and beyond. It is\na production-grade game runtime, specifically engineered for\ncommercial mobile app development.\n\nWe've brought Suika3 to life with a deep love for mobile devices —\nthe platforms that major 3D engines left behind.\n\nGames made with Suika3 are powered by `NovelML` and the `Ray`\nscripting platform. It runs swiftly, but it's not a lightweight\ntechnology.\n\n- **NovelML** (\"演戲標記\"): A tag-based, human-readable, extensible\n  DSL designed specifically for visual novels. It features concise,\n  declarative tags for seamless dialogue and scene control. Developers\n  can add custom tags using `Ray`.\n\n- **Ray** (\"光陰腳本\"): The robust scripting language for Suika3. It\n  utilizes a high-speed JIT compiler on desktop platforms (Sun-Ray JIT\n  VM; codename \"諏訪武叡\") and can be compiled into native binaries\n  (Lunar-Ray AOT Compiler; codename \"少彥智叡\") for production or\n  mobile environments, alongside the interpreter (Ubi-Ray Interpreter;\n  codename \"天滿梅貴\"). Our native technology, Ray, enables you to\n  make not only VN but also generic 2D games.\n  (Ray codename: \"神威/和光全球之天媛\")\n\nAlthough Suika3 is designed as a professional tool, you are absolutely\nwelcome to use it just for fun — after all, fun is the driving force\nbehind every great community.\n\n\u003e [!TIP]\n\u003e Suika3 is ambitious software born from over 25 years of independent\n\u003e R\u0026D, and the project is still shaping its future together with early\n\u003e adopters.\n\n---\n\n## Key Features\n\nSuika3 is engineered with modern techniques, and delivers:\n\n- **High Performance**: Powered by Sun-Ray JIT, it delivers 4-13x\n  faster execution speed compared to our interpreter backend in\n  synthetic benchmarks.\n\n- **Optimized**: Engineered to run smoothly at 60 fps even on\n  low-spec hardware such as Raspberry Pi in developing regions.\n\n- **True Portability**: Designed with a \"port anywhere\" strategy,\n  ensuring compatibility with almost every modern platform.\n\n- **Extensible**: NovelML can be seamlessly extended using the Ray\n  language. Developers can implement custom tags simply by writing a\n  Ray function named `Tag_*()`.\n\n- **Sophisticated**: Our `Story-View-Logic Architecture` streamlines\n  game development. `NovelML` manages the timeline and flow of the\n  game, `GUI` and `Anime` drive the UI/UX, and `Ray` encapsulates\n  complex implementation details.\n\n- **Reliable**: The project follow a structured `Quality Assurance` process\n  to deliver reliable software.\n\n- **Mobile UI/UX:** The default UX is mobile-first with a hamburger\n  menu. Desktop-style tiny buttons on message windows are not a\n  primary target due to mobile usability and store review risks.\n\n- **Battery-Friendly:** With only 1% CPU usage on Core Ultra 5 228V,\n  8% on Apple M5, and 20% on Apple A15 Bionic during 60 fps gameplay,\n  it's perfect for extended play on the go! It prevents your phone or\n  laptop from overheating—pretty \"cool,\" isn't it?\n\n- **Long-Term Support:** Built with a highly portable codebase, our\n  software is designed to support future platforms through the 2030s,\n  2040s, and beyond. LTS versions include a minimum of 10 years of\n  bug-fix support.\n\n---\n\n## Kanban (Status)\n\n**The current version is `26.07.x LTS`:**\n\n- `26.07.x LTS` is now considered stable.\n- A detailed list of all issues can be found in [BUGS.md](BUGS.md).\n- See [Quality Assurance](#quality-assurance) for more details.\n\n**Our current status is:**\n\n- ✅ Cleaning up the Suika2 codebase. (OpenNovel) (June 2024 - November 2024)\n- ✅ Implementing the scripting language. (NoctLang) (December 2024 - March 2025)\n- ✅ Implementing the 2D game runtime. (Playfield Engine) (March 2025 - October 2025)\n- ✅ Implementing the tag execution engine. (Suika3) (January 2026 - February 2026)\n- ✅ Refactoring all C functions into a stable \"C API\". (January 2026 - February 2026)\n- ✅ Implementing all tags in C. (January 2026 - February 2026)\n- ✅ Wrapping \"C API\" for Ray. (February 2026 - March 2026)\n- ✅ API Freeze (March 7, 2026)\n- ✅ GUI Animation Implementation (March 10, 2026)\n- ✅ Code Freeze (March 12, 2026)\n- ✅ Milestone: `Suika3 26.04 (=LTS RC1)` (April 1, 2026)\n- ✅ Milestone: `Suika3 26.05 (=LTS RC2)` (May 1, 2026)\n- ✅ Milestone: `Suika3 26.06 (=LTS RC3)` (June 1, 2026)\n- ✅ Goal: `Suika3 26.07.0 LTS` Public Release (June 29, 2026)\n\n**Optional Tasks:**\n- ✅ Document: `SRS: System Requirement Specification` for enterprise users\n- Document: `SDS: System Design Specification` for enterprise users\n\n---\n\n## Getting Started Guide\n\nSee also [Getting Started Guid](docs/mkdocs-en/getting-started.md)\n\nThis guide will help you jump-start your very first visual novel\nproject in just a few easy steps.\n\n### Installation\n\nLet's get Suika3 running so you can see the magic happen!\n\n**Windows:**\n- **Download \u0026 Extract**\n    - Download [Suika3-full.zip](https://github.com/awemorris/suika3/releases/latest/download/Suika3-full.zip) and extract it to your preferred folder.\n- **Launch**\n    - Open the folder and run `suika3.exe` to start to the sample game!\n\n**macOS:**\n- **Download \u0026 Extract**\n    - Download Suika3-SDK-Full.zip and extract it to your preferred folder.\n- **Mount the Disk Image**\n    - Navigate to `SDK/macos/` and open `Suika3.dmg`.\n- **Setup the App Bundle**\n    - Copy the `Suika3` app from the DMG into the same folder where `suika3.exe` (and the data folder) is located.\n    - Note: The app bundle must reside alongside your game data to function correctly.\n- **Launch**\n    - Double-click the `Suika3` app to start the sample game!\n\n**Linux:**\n- **Download \u0026 Extract**\n    - Download Suika3-full.zip and extract it to your preferred directory.\n- **Install the Flatpak Package**\n    - Navigate to `SDK/linux/` and open `Suika3.flatpak` (or run `flatpak install --user Suika3.flatpak`).\n    - This associates `.novel` and `.ray` files with the Suika3.\n- **Launch**\n    - Open the extracted folder, then double-click `start.novel` to launch the sample game!\n\n### Personalize Your Story (`start.novel`)\n\nNow, let's make the game say exactly what you want.\n\n- **Open:**\n    - Find the `start.novel` file in your project folder and open it with your favorite text editor.\n- **Edit:**\n    - Add the following tag at the beginning of the file:\n    ```\n    [text text=\"Hello, world! This is my first game.\"]\n    ```\n- **Test:**\n    - Save the file and run Suika3 again.\n    - You should see your new message on the screen!\n\n- **Edit:** Replace the existing text with the following command:\n```\n[text text=\"Hello, world! This is my first game.\"]\n```\n- **Test:** Save the file and run `suika3.exe` again. You should see your new message on the screen!\n\n### Under the Hood (Advanced Tips)\n\nYou can easily change the screen size of your game.\n\n- **Locate:** Open the `main.ray` file in your editor.\n- **Modify:** Look for the `func setup()` section. You can change the resolution and the title of your window here:\n```\n// Called when the window is opened.\nfunc setup() {\n    return {\n        width:      1280,            // The width of your game\n        height:     720,             // The height of your game\n        title:      \"My First Game\", // Your game's title\n        fullscreen: false            // Set to true for full-screen mode\n    };\n}\n```\n\nThe bottom part of your `main.ray` file contains the core game logic\nin `Ray`. It's best to leave these functions as they are unless you\nare doing advanced customization:\n\n- `func start()`: This is called once when your game launches.\n- `func update()`: This runs every single frame to handle game logic.\n- `func render()`: This draws everything on the screen after the update is done.\n\n```\n// Called before the game starts.\nfunc start() {\n    // Load plugins here.\n    // Suika.loadPlugin(\"testplugin\");\n\n    // Do not delete the following line.\n    Suika.start();\n}\n\n// Called before a frame rendering.\nfunc update() {\n    // Do not delete the following line.\n    Suika.update();\n}\n\n// Called every frame rendering.\nfunc render() {\n    // Do not delete the following line.\n    Suika.render();\n}\n```\n\n\u003e [!TIP]\n\u003e These functions are the core mechanism of the `Playfield Engine` that\n\u003e powers Suika3. Suika.start(), Suika.update(), and Suika.render() must\n\u003e remain in place for the game to function properly.\n\n---\n\n## Building from Source\n\nPlease refer to [build.md](docs/mkdocs-en/docs/build.md) for platform-specific instructions.\n\n```\n# Clone the repo.\ngit clone https://github.com/awemorris/suika3.git\ncd suika3\n\n# Make a build directory.\nmkdir build \u0026\u0026 cd build\n\n# Build and install.\ncmake .. \u0026\u0026 cmake --build . --parallel \u0026\u0026 sudo cmake --install .\n\n# Run the sample.\ncd ../game\nsuika3\n```\n\n---\n\n## Quick Look\n\n### NovelML\n\n`start.novel` file looks like:\n\n```\n# Show a background image.\n[bg file=\"bg/coast.png\" time=\"0.5\"]\n\n# Show a character image.\n[ch center=\"ch/midori-normal.png\" time=\"0.5\" fade=\"normal\"]\n\n# Show a question text.\n[text text=\"Choose a name.\"]\n\n# Show options.\n[choose\n    name=\"choose_result\"\n    text1=\"March\"\n    text2=\"April\"\n    text3=\"May\"\n]\n\n# Branch by the choose's result.\n[if lhs=\"${choose_result}\" op=\"==\" rhs=\"March\"]\n    [set name=\"name\" value=\"March\"]\n[elseif lhs=\"${choose_result}\" op=\"==\" rhs=\"April\"]\n    [set name=\"name\" value=\"April\"]\n[else]\n    [set name=\"name\" value=\"May\"]\n[endif]\n\n# Show a text.\n[text name=\"${name}\" text=\"Hello! My name is ${name}.\"]\n```\n\n---\n\n## Examples\n\n[A sample game](game) is included in the release zip.\n\nSee the `game/` folder for:\n- Demo project\n- Sample assets\n- NovelML usage\n- Ray usage\n\n---\n\n## Why Ray?\n\n- **Instant Iteration:** No compile cycles, no waiting. The built-in\n  JIT compiler runs your scripts immediately after editing, so you can\n  tweak gameplay and see results in real-time.\n\n- **True Native Performance:** Run extensions at full speed on iOS,\n  Android, and consoles. Even on platforms where JIT is restricted,\n  you never have to sacrifice performance thanks to AOT. Ray is a\n  native technology.\n\n- **Sandbox Model:** Scripts cannot access arbitrary files/network.\n  Only game assets and save data are accessible via engine-managed\n  APIs.\n\n- **Smooth Store Approval:** Dramatically lower the risk of\n  rejection. Since final builds consist of native code via AOT, you'll\n  breeze through App Store and console certifications.\n\n- **Easy to Learn, Powerful to Use:** The JavaScript-inspired syntax\n  is friendly for beginners, yet offers the deep flexibility\n  experienced developers expect for complex systems.\n\n- **Long-term Stability:** Because the project develops the language\n  in-house, you're shielded from breaking changes in upstream projects.\n  We own and control the full stack, so your scripts stay compatible forever.\n\nIn short, since I couldn't find a practical, free language that\nintegrated JIT, AOT, and an interpreter into a single project,\nI created one ourselves.\n\n---\n\n## Technical Overview\n\nIf these specifications excite you, you're probably in the right\nplace.\n\nSuika3 is not merely an SDL wrapper with scripting. It features its\nown rendering and audio backends, and its own scripting language,\npositioning it as a fully independent game runtime.\n\n### Core Architecture\n\nSuika3 is based on `PlayField Engine`, a comprehensive 2D game runtime.\nThis means that Suika3 is fully extensible using the Playfield API.\n\nPlayfield Engine was originally developed specifically for Suika3.\nThe name \"Playfield\" was inspired by PlayStation during Awe's time at\nthe SIE PlayStation firmware team.\n\n```\n+------------------------------+\n|        NovelML (Tags)        | --\u003e Will be expanded to other game genres.\n+------------------------------+\n|     Plugin Tags (by Ray)     | --\u003e Ray can be compiled into a native binary!\n+------------------------------+\n|       Base Tags (by C)       |\n+------------------------------+\n|       Ray Wrapper API        |\n+------------------------------+\n|         Suika3 C API         |\n+------------------------------+\n|       Playfield C API        |\n+---------------+--------------+\n|   StratoHAL   |   NoctLang   |\n+---------------+--------------+\n|       Operating System       |\n+------------------------------+\n```\n\n- **Scripting**: Integrates\n  [NoctLang](https://github.com/awemorris/NoctLang), a tiny yet mighty\n  language designed for game scripting.\n\n* **Rendering**: Supports native DirectX 9/11/12, Metal, OpenGL,\n  OpenGL ES, and WebGL for wide compatibility.\n\n* **Audio**: Provides audio output support through native\n  DirectSound or XAudio2 (Windows), Audio Unit (macOS/iOS), ALSA\n  (Linux), OSS (BSD), and other APIs.\n\n### StratoHAL\n\nStratoHAL originated as the codebase of a 2D game runtime developed\nsince 2001, and has been Zlib-licensed with a proven record of\nexceptional stability.\n\nEvolving over a quarter century from the Windows 9x era, StratoHAL has\ngrown to support macOS, Linux, iOS, Android, WebAssembly, and Unity.\nIt has been running reliably on smartphones for more than a decade.\n\nWhile SDL3 already exists as a popular free/libre software\nalternative, StratoHAL covers:\n\n- The same major platforms as SDL3.\n\n- Uniquely provides console support through Unity Integration without\n  relying on any NDA-restricted code on the source tree.\n\n- Software 3D rendering for older platforms.\n\n### Platform Support and Components\n\n|Platform Type  |OS / Platform       |Graphics                 |Sound                  |SDK                  |\n|---------------|--------------------|-------------------------|-----------------------|---------------------|\n|Desktop        |Windows             |DirectX 12/11/9          |DirectSound            |Win32 API            |\n|               |macOS               |Metal                    |Audio Unit             |AppKit (Objective-C) |\n|               |ChromeOS            |WebGL 2                  |OpenAL (Emscripten)    |Emscripten (C)       |\n|               |Linux               |OpenGL 3                 |ALSA                   |C, X11 or Wayland    |\n|               |*BSD                |OpenGL 3                 |/dev/dsp \\| /dev/audio |C, X11               |\n|               |Solaris 11          |Software                 |/dev/dsp               |C, X11               |\n|               |Solaris 10          |Software                 |/dev/audio             |C, X11               |\n|               |Qt                  |OpenGL 3                 |Qt Sound               |Qt                   |\n|Mobile         |iOS                 |Metal                    |Audio Unit             |UIKit (Objective-C)  |\n|               |Android             |OpenGL ES 2              |OpenSL ES              |Android NDK          |\n|               |HarmonyOS NEXT      |OpenGL ES 2              |OpenSL ES              |OpenHarmony SDK      |\n|Web            |WebAssembly (Wasm)  |WebGL 2                  |OpenAL (Emscripten)    |Emscripten (C)       |\n|Console        |Unity               |Unity                    |Unity                  |Unity Native Plugin  |\n|               |Xbox Series X\\|S    |DirectX 12               |XAudio2                |Microsoft GDK        |\n\n### Console Unity Plugin Notice\n\nPlayfield Engine provides Unity Plugin binaries for platforms\nincluding Windows 64-bit and game consoles.  These binaries are built\nentirely with the official version of LLVM/Clang toolchain (no\nproprietary SDKs).\n\nFor Xbox series, you can use the native Microsoft GDK port directly, not via Unity.\n\n### NoctLang\n\n```\nRay = NoctLang + Suika3 API + Playfield API\n```\n\n**NoctLang** is a scripting language designed for in-app sandboxed\nscripting.  With a game-oriented syntax, it emphasizes clarity,\ninstant startup, and tight integration with the game runtime.\n\nThe built-in JIT compiler supports a wide range of CPU architectures\nto cover most gaming consoles and smartphones, including:\n\n- ✅ Intel x86 (Xbox) [jit-x86.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-x86.c)\n- ✅ AMD64/x86_64 (PS4/PS5/Xbox One/Xbox series X|S) [jit-x86_64.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-x86_64.c)\n- ✅ ARMv7 (PS Vita) [jit-arm32.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-arm32.c)\n- ✅ Arm64 (Switch/Switch2) [jit-arm64.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-arm64.c)\n- ✅ PowerPC 32 (Wii/GameCube) [jit-ppc32.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-ppc32.c)\n- ✅ PowerPC 64 (PS3/Xbox 360) [jit-ppc64.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-ppc64.c)\n- ✅ MIPS32 (PS1/PSP) [jit-mips32.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-mips32.c)\n- ✅ MIPS64 (N64/PS2) [jit-mips64.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-mips64.c)\n- ✅ RISC-V 32 (for future devices) [jit-riscv32.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-riscv32.c)\n- ✅ RISC-V 64 (for future devices) [jit-riscv64.c](https://github.com/awemorris/suika3/blob/main/external/PlayfieldEngine/external/NoctLang/src/core/jit-riscv64.c)\n\nThese architectures are well-supported,\nI can say at least they all pass [the test suite](external/PlayfieldEngine/external/NoctLang/tests/run-syntax.sh).\n\nHowever, the following are not supported yet (interpreter-only) because of the lack of development machines:\n\n- Sun SPARC (runs interpreter)\n- DEC Alpha (Runs interpreter)\n- Motorola 68000 (Runs interpreter)\n- Loongson (Runs interpreter)\n- HP PA-RISC (Runs interpreter)\n- IBM Z (Runs interpreter)\n- SH-4 (Dreamcast) (Runs interpreter)\n- **Challenge:** If you have one, please provide a ssh access to the development environment for 3 days. I can port there ;-)\n\n### AOT Compilation\n\nFor platforms where JIT is restricted (such as mobile or consoles),\nNoctLang can fall back to at least interpreter mode, and modern AOT\n(ahead-of-time) compilation using a C source backend — ensuring full\ncompatibility even in tightly controlled environments.\n\nPlease see [AOT](docs/mkdocs-en/docs/aot.md) for more details.\n\n### Script Execution Mode\n\n|Platform          |Mode               |\n|------------------|-------------------|\n|Windows x86       |JIT                |\n|Windows x64       |JIT                |\n|Windows arm64     |JIT                |\n|macOS x86_64      |JIT                |\n|macOS arm64       |JIT                |\n|Linux x86         |JIT                |\n|Linux x86_64      |JIT                |\n|Linux armv7       |JIT                |\n|Linux arm64       |JIT                |\n|iOS               |Interpreter or AOT |\n|Android           |Interpreter or AOT |\n|HarmonyOS NEXT    |Interpreter or AOT |\n|WebAssembly       |Interpreter or AOT |\n|Unity Plugin      |Interpreter or AOT |\n|Xbox              |Interpreter or AOT |\n|FreeBSD           |JIT                |\n|NetBSD            |JIT                |\n|OpenBSD           |Interpreter or AOT |\n|Solaris 11 x86_64 |JIT                |\n|Solaris 11 Sparc  |Interpreter or AOT |\n\n### Runtime Footprint\n\nThe footprint of Suika3 is very small.\n\n| OS           | Binary Size  | Memory Usage                |\n|--------------|--------------|-----------------------------|\n| Windows 11   | 2 MB         | 300 MB in the task manager  |\n| Windows 2000 | 3 MB         | 8 MB in the task manager    |\n\n\u003e [!TIP]\n\u003e Due to the modern graphics architecture, game applications using\n\u003e DirectX 12 typically consume at least 300 MB of memory even before\n\u003e loading any game assets. The runtime itself consumes only 8 MB on\n\u003e Windows 2000.\n\n### JIT Pipeline\n\nNoctLang uses a dual-IR architecture where HIR handles analysis and\nLIR unifies execution across interpreter, JIT, and AOT backends:\n\n- **HIR (High-level Intermediate Representation)**\n    - Structured control flow graph (CFG) for program analysis.\n    - Expression DAG for algebraic simplification.\n    - Basis for future advanced optimizations.\n\n```\nCFG for \"func foo(a) { if (a \u003e 0) { return a; } else { return -a; } }\"\n\n  +---------------+\n  | 0: Func Block |         -- pred: none, succ: 1\n  +---------------+\n     +-------------+\n     | 1: IF Block |        -- pred: 0, succ: 2 (true), 3 (false)\n     +-------------+\n        +----------------+\n        | 2: Basic Block |  -- pred 1, succ 5\n        +----------------+\n     +---------------+\n     | 3: Else Block |      -- pred 1, succ 4\n     +---------------+\n        +----------------+\n        | 4: Basic Block |  -- pred 3, succ 5\n        +----------------+\n  +--------------+\n  | 5: End Block |          -- pred 2, 4\n  +--------------+\n                                 (pred = predecessor, succ = successor)\n     \n```\n\n- **LIR (Low-level Intermediate Representation)**\n    - VM bytecode, serving as the primary format for both interpretation and JIT codegen input.\n    - High abstraction level to achieve fast, portable interpretation.\n    - Compact enough for efficient machine code lowering in the JIT.\n\n```\n  LIR for \"a = 1 + 2\"\n\n    ICONST       %0, 1               ; Load constant 1\n    ICONST       %1, 2               ; Load constant 2\n    ADD          %2, %0, %1          ; Compute sum\n    STORESYMBOL  \"a\", %2             ; Store result into global variable \"a\"\n```\n\nCompilation stages are as below.\n\n```\n +-----+     +-----+     +-----+     +-----+\n | SRC | --\u003e | AST | --\u003e | HIR | --\u003e | LIR | -----\u003e [Interpreter Backend]\n +-----+     +-----+     +-----+     +-----+   |\n                                               +--\u003e [JIT Backend]\n                                               |\n                                               +--\u003e [C Backend]\n```\n\nThe separation of HIR and LIR enables:\n\n- **Robust JIT pipeline**: minimal overhead from analysis to code generation.\n- **Clarity in architecture**: each stage has a well-defined role, simplifying maintenance.\n- **Portability**: the same LIR can be interpreted directly or lowered into optimized machine code.\n\nAs shown above, HIR expresses structure, while LIR expresses\nexecution. This split allows NoctLang to keep the JIT pipeline\norganized without sacrificing optimization opportunities.\n\nBecause all JIT backends translate from the same LIR, portability\nacross architectures comes naturally.  This unified approach is what\nmakes NoctLang both portable and maintainable.\n\n### Unified Execution Model\n\nNoctLang preserves strict bytecode semantics across its JIT, AOT, and\ninterpreter execution models. Each NoctLang bytecode instruction maps\ndirectly to a corresponding runtime C function. In the NoctLang JIT—a\nmethod-level baseline JIT—every bytecode instruction is translated\ninto a runtime function call. The same mechanism applies to both AOT\nand interpreter execution. Consequently, all three execution models\nleverage a unified infrastructure, ensuring full semantic equivalence.\n\nThis streamlined, unified execution model represents the core novelty\nof NoctLang. To the best of our knowledge, NoctLang is the first\npractical language to unify JIT, AOT, and interpreter execution while\nmaintaining rigorous semantic consistency across all execution modes.\n\n---\n\n## Garbage Collection\n\n`Ray` features a high-performance generational garbage collector,\ninspired by the architecture of the Java HotSpot VM. This design\nensures that developers can focus on creation without being\ninterrupted by the dreaded \"GC spikes\" or frame drops.\n\nObjects in scripts (strings, dictionaries) are managed by GC,\nwhile large assets such as textures are managed by native code.\n\n### Core Mechanism: Generational GC\n\nThe system categorizes objects into two groups to optimize memory\nmanagement:\n\n* Young Generation: Most objects die young. Suika3 handles these using\n  a high-speed Copying Algorithm (Semi-space Copy GC), which clears\n  out temporary data in a flash. (typically \u003c 0.1ms)\n\n* Old Generation: Long-lived objects are moved here. This area uses a\n  Mark-Sweep-Compact GC algorithm, which periodically reorganizes\n  memory to prevent fragmentation. (typically 10-300ms)\n\nFor more detailed implementation, please check\n[gc.h](external/PlayfieldEngine/external/NoctLang/src/core/gc.h) and\n[gc.c](external/PlayfieldEngine/external/NoctLang/src/core/gc.c).\n\n### Frame-Synchronized Latency Hiding\n\nThe real \"magic\" of Ray lies in its timing. By executing the\nYoung-generation Copy GC every single frame, the system effectively\nhides the GC processing time within the natural frame interval.\n\nThanks to this generational strategy, the heavier Old-generation\nMark-and-Sweep is rarely triggered, maintaining a constant 60 fps\nexperience for the player.\n\n---\n\n## Ray Scripting Host\n\n`suika3-cli.exe` has a feature to run Ray scripts in the console.\nThis program is not sandboxed and scripts are able to access \"unsafe\" APIs\nthat are [described here](https://github.com/awemorris/NoctLang/blob/main/docs/library.md).\n\nThe CLI can handle files and images, that is, developers can write\ncross-platform scripts to process game assets, without installing Python.\n\nTo run a script:\n```\n\u003e suika3-cli my-script.ray\n```\n\nScript should be like this:\n```\nfunc main(arg) {\n    print(\"Hello, World!\");\n}\n```\n\nThe CLI is also available on PC98 and PC/AT.\nA contemporary scripting language with JIT VM on MS-DOS looks like a magic!\n\n---\n\n## Compatibility List\n\n### Platform Availability at a Glance\n\n`Supported` means the upstream (`Playfield Engine`) fully supports it.\n\n| Category    | OS / Environment   | Status       | Last Checked | Checked On                       |\n|-------------|--------------------|--------------|--------------|----------------------------------|\n| **Desktop** | Windows            | ✅ Supported | 3 April 2026 | Windows 11 (x64/Arm64)           |\n|             | macOS              | ✅ Supported | 3 April 2026 | macOS 26 Tahoe (Apple Silicon)   |\n|             | Linux              | ✅ Supported | 3 April 2026 | Ubuntu 24.04 LTS (x86_64)        |\n| **Mobile**  | iOS                | ✅ Supported | 3 April 2026 | iOS 18                           |\n|             | Android            | ✅ Supported | 3 April 2026 | Android 15                       |\n|             | HarmonyOS NEXT     | ✅ Supported | -            | API 10+                          |\n| **BSD**     | FreeBSD            | ✅ Supported | 5 April 2026 | 15.0-RELEASE amd64               |\n|             | NetBSD             | ✅ Supported | 5 April 2026 | 10.0 amd64, aarch64, armv7       |\n|             | OpenBSD            | ✅ Supported | 5 April 2026 | 7.8 amd64, aarch64, armv7        |\n| **Web**     | WebAssembly (Wasm) | ✅ Supported | 3 April 2026 | Chrome, Edge, Safari             |\n|             | Chromebook         | ✅ Supported | -            | Chrome Browser / Linux Container |\n| **Other**   | Unity Integration  | ✅ Supported | -            | Unity 6.2 (Windows x86_64)       |\n\n### 64-bit Windows Binary Compatibility List\n\nThe official recommended binary is the 64-bit version.\n\n| OS      | Version                     | Patch | CPU    | Runtimes                              | 64-bit Binary | Direct3D |\n|---------|-----------------------------|-------|--------|---------------------------------------|---------------|----------|\n| Windows | 11                          |       | x64    | (None required)                       | ✅            | 12.0     |\n| Windows | 11                          |       | arm64  | (None required)                       | ✅            | 12.0     |\n| Windows | 10                          |       | x64    | (None required)                       | ✅            | 12.0     |\n| Windows | 10                          |       | arm64  | (None required)                       | ✅            | 12.0     |\n| Windows | 8.1                         |       | x64    | (None required)                       | ✅            | 11.0     |\n| Windows | 8                           |       | x64    | (None required)                       | ✅            | 11.0     |\n| Windows | 7                           | SP1   | x64    | (None required)                       | ✅            | 11.0     |\n| Windows | 7                           |       | x64    | UCRT Update (KB2999226)               | ✅            | 11.0     |\n| Windows | Vista                       | SP2   | x64    | Platform Update                       | ✅            | 11.0     |\n| Windows | Vista                       | SP1   | x64    | DirectX End-User Runtimes (June 2010) | ✅            | 9.0      |\n| Windows | Vista                       |       | x64    | DirectX End-User Runtimes (June 2010) | ✅            | 9.0      |\n| Windows | XP Professional x64 Edition | SP2   | x64    | DirectX End-User Runtimes (June 2010) | ✅            | 9.0      |\n| Windows | XP Professional x64 Edition | SP1   | x64    | DirectX End-User Runtimes (June 2010) | ✅            | 9.0      |\n| Windows | XP Professional x64 Edition |       | x64    | DirectX End-User Runtimes (June 2010) | ✅            | 9.0      |\n\n### 32-bit Windows Compatibility List\n\nSuika3 provides the 32-bit binary `suika3-32.exe` for backward compatibility,\nsupporting legacy systems through older runtimes.\n\n| OS      | Version                     | Patch | CPU    | Runtimes                               | 32-bit Binary | Direct3D               |\n|---------|-----------------------------|-------|--------|----------------------------------------|---------------|------------------------|\n| Windows | 11                          |       | x64    | (None required)                        | ✅            | 12.0                   |\n| Windows | 11                          |       | arm64  | (None required)                        | ✅            | 12.0                   |\n| Windows | 10                          |       | x86    | (None required)                        | ✅            | 12.0                   |\n| Windows | 10                          |       | x64    | (None required)                        | ✅            | 12.0                   |\n| Windows | 10                          |       | arm64  | (None required)                        | ✅            | 12.0                   |\n| Windows | 8.1                         |       | x86    | (None required)                        | ✅            | 11.0                   |\n| Windows | 8.1                         |       | x64    | (None required)                        | ✅            | 11.0                   |\n| Windows | 8                           |       | x86    | (None required)                        | ✅            | 11.0                   |\n| Windows | 8                           |       | x64    | (None required)                        | ✅            | 11.0                   |\n| Windows | 7                           | SP1   | x86    | (None required)                        | ✅            | 11.0                   |\n| Windows | 7                           |       | x86    | (None required)                        | ✅            | 11.0                   |\n| Windows | 7                           | SP1   | x64    | (None required)                        | ✅            | 11.0                   |\n| Windows | 7                           |       | x64    | (None required)                        | ✅            | 11.0                   |\n| Windows | Vista                       | SP2   | x86    | DirectX 11 Platform Update             | ✅            | 11.0                   |\n| Windows | Vista                       | SP1   | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | Vista                       |       | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | Vista                       | SP2   | x64    | DirectX 11 Platform Update             | ✅            | 11.0                   |\n| Windows | Vista                       | SP1   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | Vista                       |       | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | XP                          | SP3   | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | XP                          | SP2   | x86    |                                        | --\u003e           | Need VS2008            |\n| Windows | XP                          | SP1   | x86    |                                        | --\u003e           | Need VS2008            |\n| Windows | XP                          |       | x86    | DirectX 9.0b Runtime                   | ✅            | 9.0                    |\n| Windows | XP Professional x64 Edition | SP2   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | XP Professional x64 Edition | SP1   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | XP Professional x64 Edition |       | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0                    |\n| Windows | 2000                        | SP4   | x86    | DirectX End-User Runtimes (June 2010)  | --\u003e           | Need VS2008            |\n| Windows | 2000                        | SP3   | x86    | DirectX End-User Runtimes (June 2010)  | --\u003e           | Need VS2008            |\n| Windows | 2000                        | SP2   | x86    | DirectX End-User Runtimes (June 2010)  | --\u003e           | Need VS2008            |\n| Windows | 2000                        | SP1   | x86    | DirectX End-User Runtimes (June 2010)  | --\u003e           | Need VS2008            |\n| Windows | 2000                        |       | x86    | DirectX End-User Runtimes (June 2010)  | --\u003e           | Need VS2008            |\n| Windows | Me                          |       | x86    |                                        | --\u003e           | Need VC++ 6.0          |\n| Windows | 98                          |       | x86    |                                        | --\u003e           | Need VC++ 6.0          |\n| Windows | 95                          |       | x86    |                                        | --\u003e           | Need VC++ 6.0          |\n| Windows | NT 4.0                      |       | x86    |                                        | --\u003e           | Need VC++ 6.0          |\n| Windows | NT 3.51                     |       | x86    |                                        | ❌            | Insufficient Win32 API |\n\n### macOS Compatibility List\n\n| OS                     | Version | Mac CPU              | Status                       |\n|------------------------|---------|----------------------|------------------------------|\n| macOS Tahoe            | 26.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Sequoia          | 15.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Sonoma           | 14.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Ventura          | 13.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Monterey         | 12.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Big Sur          | 11.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Catalina         | 10.15   | x86_64               | ✅ OK                        |\n| macOS Mojave           | 10.14   | x86_64               | ✅ OK                        |\n| macOS High Sierra      | 10.13   | x86_64               | ✅ OK                        |\n| macOS Sierra           | 10.12   | x86_64               | ✅ OK                        |\n| OS X El Capitan        | 10.11   | x86_64               | ✅ OK                        |\n| OS X Yosemite          | 10.10   | x86_64               | ❌ No Metal                  |\n| OS X Mavericks         | 10.9    | x86_64               | ❌ No Metal                  |\n| OS X Mountain Lion     | 10.8    | x86_64               | ❌ No Metal                  |\n| Mac OS X Lion          | 10.7    | x86_64               | ❌ No Metal                  |\n| Mac OS X Snow Leopard  | 10.6    | i386 / x86_64        | ❌ No Metal, No AVFoundation |\n| Mac OS X Leopard       | 10.5    | ppc / ppc64 / i386   | ❌ No Metal, No AVFoundation |\n| Mac OS X Tiger         | 10.4    | ppc / ppc64 / i386   | ❌ No Metal, No AVFoundation |\n| Mac OS X Panther       | 10.3    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Jaguar        | 10.2    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Puma          | 10.1    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Cheetah       | 10.0    | ppc                  | ❌ No Metal, No AVFoundation |\n\n### Linux Compatibility List\n\n| Distribution      | Version               | CPU             | Status | Graphics                                |\n|-------------------|-----------------------|-----------------|--------|-----------------------------------------|\n| Debian            | 13 / 12               | x86_64, arm64   | ✅     | X11 + OpenGL 3 or Wayland + OpenGL ES 3 |\n| Raspberry Pi OS   | Debian 13             | arm64, armv7    | ✅     | X11 + OpenGL ES                         |\n| Ubuntu            | 24.04 / 22.04 / 20.04 | x86_64, arm64   | ✅     | X11 + OpenGL 3 or Wayland + OpenGL ES 3 |\n| Kubuntu           | 25.04                 | x86_64, arm64   | ✅     | X11 + OpenGL 3 or Wayland + OpenGL ES 3 |\n| Linux Mint        | 22.3                  | x86_64          | ✅     | X11 + OpenGL 3 or Wayland + OpenGL ES 3 |\n| Fedora            | 43                    | x86_64          | ✅     | X11 + OpenGL 3 or Wayland + OpenGL ES 3 |\n| Odroid Variants   |                       | arm64           | ✅     | GBM + DRM + EGL + OpenGL ES             |\n\n### iOS Compatibility List\n\n| OS     | Status   |\n|--------|----------|\n| iOS 26 | ✅       |\n| iOS 18 | ✅       |\n| iOS 17 | ✅       |\n| iOS 16 | ✅       |\n| iOS 15 | ✅       |\n| iOS 14 | ✅       |\n| iOS 13 | ✅       |\n| iOS 12 | ✅       |\n| iOS 11 | ✅       |\n| iOS 10 | ✅       |\n| iOS 9  | ✅       |\n| iOS 8  | ✅       |\n| iOS 7  | No Metal |\n\n### Android Compatibility List\n\n| OS          | Status |\n|-------------|--------|\n| Android 16  | ✅     |\n| Android 15  | ✅     |\n| Android 14  | ✅     |\n| Android 13  | ✅     |\n| Android 12  | ✅     |\n| Android 11  | ✅     |\n| Android 10  | ✅     |\n| Android 9   | ✅     |\n| Android 8   | ✅     |\n| Android 7   | ✅     |\n| Android 6   | ✅     |\n| Android 5   | ✅     |\n| Android 4.4 | ✅     |\n\n### HarmonyOS / OpenHarmony Compatibility List\n\n| OS         | Status |\n|------------|--------|\n| API 20     | ✅     |\n| API 12     | ✅     |\n\n### FreeBSD\n\n| OS         | Status      |\n|------------|-------------|\n| FreeBSD 15 | ✅          |\n| FreeBSD 14 | ✅          |\n\n### NetBSD\n\n| OS         | Status      |\n|------------|-------------|\n| NetBSD 10  | ✅          |\n| NetBSD 9   | ✅          |\n| NetBSD 8   | ✅          |\n\n### OpeBSD\n\n| OS           | Status      |\n|--------------|-------------|\n| OpenBSD 7.8  | ✅          |\n\n### Solaris\n\n| OS         | Status      |\n|------------|-------------|\n| Solaris 11 | ✅          |\n| Solaris 10 | ✅          |\n| Solaris 9  | Not Checked |\n| Solaris 8  | Not Checked |\n| Solaris 7  | Not Checked |\n\n---\n\n## Documentation\n\nDocumentation is available at the Website:\n- [English](https://suika3.vn/en/docs/)\n- [Spanish](https://suika3.vn/es/docs/)\n- [French](https://suika3.vn/fr/docs/)\n- [German](https://suika3.vn/de/docs/)\n- Italian (now translating)\n- [Russian](https://suika3.vn/ru/docs/)\n- Greek (now translating)\n- [簡体中文](https://suika3.vn/zh-Hans/docs/)\n- [繁体中文](https://suika3.vn/zh-Hant/docs/)\n- [日本語](https://suika3.vn/ja/docs/)\n\n---\n\n## Internationalization\n\nSuika3 supports the following languages.\n\n| Language               | Our Code    | Translation Type         | Scope of Translation             | Progress      |\n|------------------------|-------------|--------------------------|----------------------------------|---------------|\n| English (Fallback)     | `en`        | Original                 | UI / Docs / Samples              | Baseline      |\n| English (America)      | `en-us`     | None                     | UI                               | -             |\n| English (British)      | `en-gb`     | None                     | UI                               | -             |\n| Spanish (Fallback)     | `es`        | Machine Translation      | UI                               | Done          |\n| Spanish (Spain)        | `es-es`     | None                     | UI                               | -             |\n| Spanish (Latin America)| `es-la`     | None                     | UI                               | -             |\n| French (Fallback)      | `fr`        | Machine Translation      | UI                               | Done          |\n| French (France)        | `fr-fr`     | None                     | UI                               | -             |\n| French (Canada)        | `fr-ca`     | None                     | UI                               | -             |\n| Italian                | `it`        | Machine Translation      | UI                               | -             |\n| German                 | `de`        | Machine Translation      | UI                               | Done          |\n| Greek                  | `el`        | Machine Translation      | UI                               | Done          |\n| Russian                | `ru`        | Machine Translation      | UI                               | Done          |\n| Simplified Chinese     | `zh-cn`     | Machine Translation      | UI                               | Done          |\n| Traditional Chinese    | `zh-tw`     | Machine Translation      | UI                               | Done          |\n| Japanese               | `ja`        | Native Translation       | UI                               | Done          |\n\n### How To Switch Languages\n\nSuika3 uses the system locale. To switch languages, set your system\nlocale.\n\nIn addition, the sample game has language switching buttons in the\nconfig screen.\n\n### Contributing Translations\n\nThe project welcomes community contributions to improve our translations!\nIf you want to help us reach more developers, here is how you can contribute:\n\n0.  Do `grep -r _TR() .` and detect original messages.\n1.  **Locate the Files**: Translation assets are managed across three core directories:\n    - `resources/i18n/message.txt` (Suika3 part, `S3_TR()`)\n    - `external/PlayfieldEngine/resources/i18n/message.txt` (Playfield Engine part, `PF_TR()`)\n    - `external/PlayfieldEngine/external/NoctLang/i18n/message.txt` (NoctLang part, `N_TR()`)\n    - `external/PlayfieldEngine/external/StratoHAL/i18n/message.txt` (StratoHAL part, `HAL_TR()`)\n2.  **Submit Your Changes**: \n    - Found a typo or a weird machine translation? Feel free to open a **Pull Request**.\n    - Want to add a new language? Please open an **Issue** first!\n\n\u003e [!TIP]\n\u003e Manual/Professional translations are prioritized over\n\u003e machine-generated content. Your human touch makes a huge difference!\n\n---\n\n## Third-Party Libraries\n\nOur software is built upon several free/libre software libraries. To\nensure build reproducibility and long-term maintainability, all\nnecessary source code tarballs and patches are bundled within this\nrepository under the\n`external/PlayfieldEngine/external/StratoHAL/lib/` directory.\n\n### Core Libraries\n\n| Library          | Purpose             | Key Feature                                            |\n|------------------|---------------------|--------------------------------------------------------|\n| Playfield Engine | 2D Game Runtime     | Our base game runtime. (in-house)                      |\n| NoctLang         | Scripting Language  | Our scripting language. (in-house)                     |\n| zlib             | Compression         | Deflate algorithm for general data compression.        |\n| libpng           | Image               | Reference library for supporting PNG images.           |\n| JPEG9            | Image               | Industry-standard JPEG image decompression.            |\n| libwebp          | Image               | Modern, high-efficiency image format support.          |\n| FreeType2        | Font                | High-quality font rendering and glyph processing.      |\n| libogg           | Audio Container     | Bitstream handling for Ogg multimedia files.           |\n| libvorbis        | Audio Codec         | Lossy audio compression used for BGM and SE.           |\n| brotli           | Compression         | High-ratio compression for web and data assets. (WOFF) |\n| bzip2            | Compression         | High-quality data compressor for archives.             |\n\n### License Compliance\n\nEach library is used according to its respective free/libre software\nlicense. Please refer to the `NOTICE` file in this repository for the\nfull text of each license and copyright notice.\n\n---\n\n## CMake Presets\n\nSuika3 ships with CMake presets covering various platforms and build\nconfigurations.\n\n| Preset                      | Platform              | Compiler   | Type           |\n|-----------------------------|-----------------------|------------|----------------|\n| windows-vs2022-x86          | Windows               | MSVC       | Executable     |\n| windows-vs2026-x86          | Windows               | MSVC       | Executable     |\n| windows-vs2022-x64          | Windows               | MSVC       | Executable     |\n| windows-vs2026-x64          | Windows               | MSVC       | Executable     |\n| windows-vs2022-x64-console  | Windows               | MSVC       | Executable     |\n| windows-vs2026-x64-console  | Windows               | MSVC       | Executable     |\n| windows-vs2022-arm64        | Windows               | MSVC       | Executable     |\n| windows-vs2026-arm64        | Windows               | MSVC       | Executable     |\n| windows-mingw-x86           | Windows               | MinGW-GCC  | Executable     |\n| windows-mingw-x86_64        | Windows               | MinGW-GCC  | Executable     |\n| windows-mingw-arm64         | Windows               | MinGW-LLVM | Executable     |\n| windows-mingw-win95         | Windows 9x            | MinGW-GCC  | Executable     |\n| macos                       | macOS                 | Clang      | App Bundle     |\n| macos-lib                   | macOS (lib)           | Clang      | Library        |\n| macos-cli                   | macOS (CLI)           | Clang      | Executable     |\n| linux                       | Linux (Wayland/X11)   | GCC        | Executable     |\n| linux-debug                 | Linux Debug           | GCC        | Executable     |\n| linux-wayland               | Linux (Wayland)       | GCC        | Executable     |\n| linux-x11                   | Linux (X11)           | GCC        | Executable     |\n| linux-dri                   | Linux (DRI)           | GCC        | Executable     |\n| linux-dri-rot90             | Linux (DRI)           | GCC        | Executable     |\n| linux-fbdev                 | Linux (fbdev)         | GCC        | Executable     |\n| linux-x11soft               | Linux                 | GCC        | Executable     |\n| freebsd                     | FreeBSD               | Clang      | Executable     |\n| freebsd-wayland             | FreeBSD               | Clang      | Executable     |\n| freebsd-x11                 | FreeBSD               | Clang      | Executable     |\n| freebsd-x11soft             | FreeBSD               | Clang      | Executable     |\n| netbsd                      | NetBSD                | GCC        | Executable     |\n| netbsd-x11soft              | NetBSD                | GCC        | Executable     |\n| openbsd                     | OpenBSD (OpenGL)      | Clang      | Executable     |\n| openbsd-x11soft             | OpenBSD (Soft3D)      | Clang      | Executable     |\n| solaris11                   | Solaris11             | SunCC      | Executable     |\n| solaris10                   | Solaris10             | SunCC      | Executable     |\n| haiku                       | Haiku OS              | GCC        | Executable     |\n| wasm                        | WebAssembly           | Emscripten | HTML + Wasm    |\n| wasm-local                  | Chromebook            | Emscripten | HTML + Wasm    |\n| ios-device                  | iOS Device            | Clang      | Static Library |\n| ios-simulator               | iOS Simulator         | Clang      | Static Library |\n| android-x86                 | Android x86           | Clang      | Shared Library |\n| android-x86_64              | Android x86_64        | Clang      | Shared Library |\n| android-armv7               | Android armv7         | Clang      | Shared Library |\n| android-arm64               | Android arm64         | Clang      | Shared Library |\n| android-riscv64             | Android riscv64       | Clang      | Shared Library |\n| openharmony-arm64           | HarmonyOS NEXT arm64  | Clang      | Static Library |\n| openharmony-armv7           | HarmonyOS NEXT armv7  | Clang      | Static Library |\n| openharmony-x86_64          | HarmonyOS NEXT x86_64 | Clang      | Static Library |\n| unity-win64                 | Unity Plugin          | Clang-CL   | DLL Plugin     |\n| unity-switch                | Unity Plugin          | Clang      | Static Library |\n| unity-ps5                   | Unity Plugin          | Clang      | Static Library |\n| unity-xbox                  | Unity Plugin          | Clang      | Static Library |\n| windows-vs2022-gdk-desktop  | Windows               | MSVC       | Executable     |\n| windows-vs2022-gdk-xbox-xs  | Windows               | MSVC       | Executable     |\n| windows-vs2026-gdk-desktop  | Windows               | MSVC       | Executable     |\n| windows-vs2026-gdk-xbox-xs  | Windows               | MSVC       | Executable     |\n| pc98                        | MS-DOS NEC PC-9801    | OpenWatcom | Executable     |\n| pcat                        | MS-DOS IBM PC/AT      | OpenWatcom | Executable     |\n\n---\n\n## Codebase \u0026 Maturity\n\nSuika3 is a robust 2D game runtime with over 100k lines of code (LoC).\nThis is not a weekend project but a mature codebase evolved over 25+ years.\n\n- **Proven Stability:** Includes core modules refined since 2001.\n\n- **Modern Architecture:** Features a clean HAL (Hardware Abstraction\n  Layer) separated in 2016 and high-performance GPU rendering\n  implemented in 2022.\n\n- **Native Multi-Platform:** Built mostly with C, and the platform\n  native languages, including C++ (DirectX), Swift (macOS/iOS),\n  Objective-C (macOS/iOS), C# (Unity) and Shaders (HLSL/GLSL/Metal).\n\n---\n\n## Quality Assurance\n\nIn **Software Engineering**, reliability is fundamentally a function\nof time. As Suika3 has been newly released in April 2026, the engine\nis currently in its early lifecycle stage regarding field-tested\nuptime. Consequently, formal quality metrics are not yet fully\napplicable.\n\nHowever, the architecture inherits over two decades of development\nexpertise, ensuring a solid foundation for the QA process leading\ntoward our first LTS (Long-Term Support).\n\n### Our Path to Stability\n\nThe project is committed to delivering a production-grade engine.\nOur QA roadmap is as follows:\n\n1. **Bug Tracking**: The project maintains a comprehensive log of all\n  identified issues. See [BUGS.md](BUGS.md)\n\n2. **Data-Driven Hardening**: The project analyzes root causes and\n  resolution rates to quantify and improve software stability.\n\n3. **Commercial-Grade Standards**: Our ultimate goal is to achieve\n  a level of robustness that meets the rigorous requirements of\n  commercial app production.\n\n---\n\n## Adoption Status\n\nThe project aims to create a new market for \"Mobile Visual Novels\" and\nhave not yet established a track record.\n\nIf you are interested in helping shape this new market as an **Early\nAdopter**, the project warmly invites you to join our community.\n\nIf you prefer to adopt tools with an established track record, you may\nwish to revisit the project once Suika3 has matured further.\n\n---\n\n## Repository Structure\n\n```\ninclude/                           # Public headers\nsrc/                               # Source code\nresources/                         # Assets and resources\n  projects/                          # Official project base for iOS, Android, etc.\ncmake/                             # CMake configuration files and presets\ndocs/                              # Documentation source files (MkDocs)\nexternal/                          # Third-party libraries and dependencies\n  PlayfieldEngine/                   # The core 2D game runtime\n    external/                          # Sub-dependencies of Playfield Engine\n      NoctLang/                          # Scripting language used by the engine\n        include/                           # Public headers for NoctLang\n        src/                               # Source code for NoctLang\n          core/                              # Core implementation of NoctLang\n      StratoHAL/                         # Hardware Abstraction Layer for cross-platform support\n        include/                           # Public headers for StratoHAL\n        src/                               # Source code for StratoHAL\n```\n\n---\n\n## Asset File Formats\n\n- Images:\n    - Supported formats: PNG, JPEG, WebP.\n\n- Audio:\n    - Supported formats: Ogg Vorbis, 44100Hz, Stereo or Mono.\n\n- Fonts:\n    - Supported formats: TrueType (TTF), OpenType (OTF)\n\n---\n\n## Game Packaging \u0026 Distribution\n\n| OS                 | Assets                                                                                                                         |\n|--------------------|--------------------------------------------------------------------------------------------------------------------------------|\n| Windows            | Assets should be stored into a file name `assets.arc`.                                                                         |\n| macOS              | Assets should be stored into `Contents/Resources/assets.arc` inside the app bundle.                                            |\n| Linux              | Assets should be stored into a file name `assets.arc`.                                                                         |\n| iOS                | Assets should be stored into `Contents/Resources/assets.arc` inside the app bundle.                                            |\n| Android            | Assets must not be packed. Please add your assets to the `app/src/main/assets/` folder directly as normal files.               |\n| HarmonyOS NEXT     | Assets must not be packed. Please add your assets to the `entry/src/main/resources/rawfiles/` folder directly as normal files. |\n| WebAssembly (Wasm) | Assets should be stored into `assets.arc` and placed alongside `index.html`.                                                   |\n| Unity              | Assets must not be packed. Please add your assets to the `Assets/Resources/StreamingAssets/` folder directly as normal files.  |\n\nTo generate `assets.arc` from your game assets, please use the\n`suika3-pack` tool. The `suika3-pack` tool creates an obfuscated\narchive of your assets that can be efficiently loaded by the\nruntime. (The obfuscation algorithm is a key rotating XOR, and it is\nnot intended for strong security. It can help prevent casual\ntampering. The obfuscation key can be changed in \"key.h\".)\n\nOn Windows, macOS, and Linux, you can use a predefined task on Visual\nStudio Code.\n\n- Click the search bar\n- Click `Run Task`\n- Click `Suika3: Create a package file`\n\n---\n\n## Engine Feature List\n\n**2D Game Support:**\n- Texture from:\n    - Color\n    - Image\n    - Font\n- Render:\n    - Pixel-wise\n    - Scaling\n    - 3D Transform\n- Audio Playback (Vorbis)\n- Asset File Access\n- Save Data Access\n\n**Visual Novel Out-of-box Support:**\n- Message Display\n- Option Selection\n- Background and Character Display / Transition\n- Sound Playback\n- Movie Playback\n- Layered Raster Image Animation (Shift, Scale, Rotate)\n- UI/UX Construction\n- Save / Load\n- Skip Mode\n- Auto Mode\n- Skip Seen Messages\n- Message History Display and Voice Replay\n- CG Gallery\n- Localization\n- Simulation Parameter Display\n\n**Future  Work:**\n- 2D RPG Map Walk\n- 3D Character Model\n- Network Play\n\n---\n\n## Roadmap\n\n- Visual Novels (Done)\n- Other 2D games that have story parts\n\n---\n\n## Versioning Policy\n\n`Year.Month.Patch-Level`\n\n| Version  | Level                              | Release Date        | Support Period     |\n|----------|------------------------------------|---------------------|--------------------|\n| 26.04    | Feature Rollup / LTS RC1           | April 2026          | - codename \"北辰天歸\" |\n| 26.05    | Feature Rollup / LTS RC2           | May 2026            | -                  |\n| 26.06    | Feature Rollup / LTS RC3           | June 2026           | -                  |\n| 26.07    | Long Term Support                  | July 2026           | 10 years (minimum) |\n| 26.08    | Feature Rollup                     | August 2026         | -                  |\n| 26.09    | Feature Rollup                     | September 2026      | -                  |\n| 26.10    | Feature Rollup                     | October 2026        | -                  |\n| 26.11    | Feature Rollup                     | November 2026       | -                  |\n| 26.12    | Feature Rollup                     | December 2026       | -                  |\n| 27.01    | Feature Rollup                     | January 2027        | -                  |\n| 27.02    | Feature Rollup                     | February 2027       | -                  |\n| 27.03    | Feature Rollup                     | March 2027          | -                  |\n| 27.04    | Feature Rollup / LTS RC1           | April 2027          | -                  |\n| 27.05    | Feature Rollup / LTS RC2           | May 2027            | -                  |\n| 27.06    | Feature Rollup / LTS RC3           | June 2027           | -                  |\n| 27.07    | Long Term Support                  | July 2027           | 10 years (minimum) |\n| 27.08    | Feature Rollup                     | August 2027         | -                  |\n| 27.09    | Feature Rollup                     | September 2027      | -                  |\n| 27.10    | Feature Rollup                     | October 2027        | -                  |\n| 27.11    | Feature Rollup                     | November 2027       | -                  |\n| 27.12    | Feature Rollup                     | December 2027       | -                  |\n| 28.01    | Feature Rollup                     | January 2028        | -                  |\n| 28.02    | Feature Rollup                     | February 2028       | -                  |\n| 28.03    | Feature Rollup                     | March 2028          | -                  |\n| 28.04    | Feature Rollup / LTS RC1           | April 2028          | -                  |\n| 28.05    | Feature Rollup / LTS RC2           | May 2028            | -                  |\n| 28.06    | Feature Rollup / LTS RC3           | June 2028           | -                  |\n| 28.07    | Long Term Support                  | July 2028           | 10 years (minimum) |\n\n---\n\n## Comparison\n\n| Item                 | Suika3            | Unity                | Godot                | Ren'Py          | Kirikiri Z    | Tyrano Script           |\n|----------------------|-------------------|----------------------|----------------------|-----------------|---------------|-------------------------|\n| Core                 | ANSI C (C89)      | C++                  | C++                  | Python          | C++           | JavaScript              |\n| VN Scripting         | NovelML           | (Plugin)             | (Plugin)             | Ren'Py Script   | KAG           | KAG Custom              |\n| Genric Scripting     | Ray / C / C++     | C#                   | GDScript / C# / C++  | Python          | TJS           | JavaScript              |\n| Execution            | JIT VM / AOT      | Mono / IL2CPP        | GDScript VM / Native | Interpreter     | Interpreter   | Browser / Electron      |\n| Performance          | Very High         | High                 | High                 | Low             | Low           | Mid                     |\n| Binary Size          | Very Small        | Large                | Mid                  | Mid             | Small         | Large                   |\n| Portability          | Top-Tier          | Mainstream Platforms | Mainstream Platforms | Desktop-Centric | Windows Only  | Web + Desktop           |\n| App Store Compliance | High              | High                 | High                 | Low             | Not Supported | Low (WebView)           |\n| VN Support           | Native            | Plugin               | Plugin               | Native          | Native        | Native                  |\n| Generic 2D Game      | Strong            | Strong               | Strong               | Weak            | Weak          | Weak                    |\n| GPU Support          | Yes               | Yes                  | Yes                  | Yes             | Limited       | Yes                     |\n| HarmonyOS Support    | Yes               | No                   | No                   | No              | No            | No                      |\n| PC98 Support         | Yes               | No                   | No                   | No              | No            | No                      |\n| Core Maintainability | High (C+HAL)      | Low (Proprietary)    | High (C++)           | Low (CPython)   | Mid           | Low (V8)                |\n| Learning Curve       | Very Easy         | Mid-High             | Mid-High             | Very Easy       | Mid           | Mid                     |\n| License              | OSS (Zlib)        | Proprietary          | OSS (MIT)            | OSS (MIT)       | OSS (Custom)  | Proprietary (No Redist) |\n\n---\n\n## License\n\nSuika3 is a permissive\n[free/libre software](https://www.gnu.org/philosophy/free-sw.en.html),\nreleased under the permissive `ZLib License`.\n\n* You can use Suika3 for commercial games.\n* You do not need to open-source your game code.\n* You may modify and redistribute the software.\n* Attribution is appreciated but not required.\n\n```\nSuika3\nCopyright (c) 2026 Awe Morris / SCHOLA SUIKAE\n```\n\nThe full license is available at [LICENSE](LICENSE) and [NOTICE](NOTICE).\n\n---\n\n## Support \u0026 Contact\n\nFor general inquiries, bug reports, and technical assistance:\n\n- **GitHub Issues**: Preferred for formal bug tracking and feature\n  requests.\n\n- **[Discord Server](https://discord.gg/YZsq9u9Mgr)**: The best place\n  for real-time discussions and quick questions.\n\nWe strive to provide timely support and help creators bring their\nstories to life.\n\n### Professional \u0026 Enterprise Support\n\nFor studios and developers requiring formal and guaranteed maintenance\ncontracts, priority bug fixes, or private consultations, please\ncontact us directly via email. I'm committed to ensuring your\nproject's success in high-stakes production environments.\n\nIn addition, console game development often comes with strict limits\non using open-source software outside of the platform's provided\nbinaries. To address this, I offer a proprietary version of Suika3.\nWith a direct licensing agreement, you can treat Suika3 as part of\nyour own proprietary codebase, allowing you to smoothly pass the\nplatform's submission review.\n\nI offer flexible, highly affordable pricing tailored to your\nproject's scale:\n\n- Indie Titles: Starting at 100 USD per title\n- Enterprise Titles: Capped at a maximum of 3,000 USD per title\n- Discounts available\n\n- **Contact**: Awe Morris \u003cawe@suika3.vn\u003e\n\nNot looking for a formal contract? No problem. If you are an indie\ndeveloper or hobbyist and prefer to keep things casual, just ping us\non GitHub Issue or Discord with any questions. I'm always happy to\nchat, and I'll do my best to respond or push a fix as soon as\npossible! ;-)\n\n---\n\n## Community\n\n### Discord\n\n[Discord Server](https://discord.gg/YZsq9u9Mgr)\n\nOur server does not tolerate any form of discrimination. It is an\ninclusive space that embraces all human differences, including, but\nnot limited to, race, gender, skill levels, and neurodiversity.\n\n### Commitment to Inclusivity\n\nThe project is committed to providing a welcoming and safe environment for\neveryone. Any form of discrimination is strictly prohibited.\n\nOur community warmly welcomes developers of all backgrounds, including\nbut not limited to:\n\n- **Identity \u0026 Expression:** Race, ethnicity, nationality, language,\n  gender identity and expression, sexual orientation, and sex\n  characteristics.\n\n- **Personal Attributes:** Age, body size, personal appearance,\n  illness, and neurodiversity.\n\n- **Life Context:** Faiths, beliefs, disability (e.g. visibility, but\n  not limited), level of experience, education, and socio-economic\n  status.\n\n- **Justice \u0026 Inclusion:** The project explicitly welcomes individuals with past\n  criminal records, firmly believing in the power of second chances\n  and the inherent value of every contributor who participates\n  respectfully.\n\n### Governance\n\nSuika3 provides a clean upstream codebase intended to serve as a\nreliable foundation for downstream customizations. Users are\nencouraged to maintain private forks tailored to their own needs.\nCreating your own rebranded version is a natural and fully supported\nuse of the project.\n\nBecause of this philosophy, Suika3 does not employ a formal governance\nstructure. Instead, the project is guided by its lead maintainer in\nclose collaboration with community users.\n\n---\n\n## Contribution\n\nThe project welcomes contributions from everyone! Whether you are fixing a bug,\nimproving documentation, or proposing new features, your help is what\ndrives **Suika3** forward.\n\n---\n\n## Lineage: The Grand Journey\n\nSuika3 represents the culmination of over two decades of relentless innovation and development:\n\n- **Suika Studio (2001–2004)**: The origin of our codebase, featuring\n  our first GUI-based editors. [Archive](https://github.com/awemorris/suika-studio-2002)\n\n- **Unfruitiful (2005–2015)**: A decade of R\u0026D focused on establishing\n  a robust portability layer for cross-platform support.\n\n- **Suika2 (2016–2024)**: The cornerstone of our current architecture\n  and the fruit of a decade of dedicated R\u0026D. It delivers a full\n  visual novel experience with extensive platform compatibility.\n  Several games with Suika3 were sold on App Store. [Archive](https://github.com/awemorris/suika2)\n\n- **Playfield Engine (2025–)**: A versatile 2D runtime derived from the\n  core portability layer of the Suika series. [Repo](https://github.com/awemorris/PlayfieldEngine)\n\n- **Suika3 (2026–)**: By synthesizing these legacies and introducing\n  `NovelML` and `Ray`, Suika3 delivers the stability of its\n  predecessors alongside the flexibility of modern technology.\n\n---\n\n## Why Suika3?: Our Philosophy\n\nThe project is not looking at the existing VN market. We aim to\npioneer a mobile VN market that does not yet exist.\n\nCreators with different goals may also find excellent resources in\nother runtimes like Ren'Py, Unity, or Godot.\n\n### Mission: Building a Sustainable Ecosystem\n\nOur dedication to the commercial success of visual novels is a\nstrategic response to the long-term health of the medium. The project\nbelieves that for visual novels to flourish in the 2030s, they must\ntranscend hobbyist boundaries and re-establish themselves as a\nthriving creative industry.\n\nSince the 2010s, the visual novel market has faced significant growth\nchallenges. One critical bottleneck has been the **lack of\nhigh-performance software engines** capable of delivering a seamless\n**native experience on iOS and Android**. While developers typically\nwork on PCs, for most people today, the primary personal computer is a\nsmartphone.\n\nWithout accessible, professional-grade tools for modern mobile\nplatforms, many creators have been restricted to limited distribution\nchannels. As a result, the medium has struggled to reach a global,\nmobile-first audience, slowing its overall expansion.\n\nWhile free and hobbyist projects are culturally valuable and\nindispensable, they alone may not always sustain a large creative\nindustry. A truly healthy ecosystem may require:\n\n- **Commercially Viable Games** — Titles that reach players on their\n  primary devices and generate the economic activity necessary for\n  creators to build long-term careers.\n\n- **Economic Independence** — Empowering talent, particularly in Asia\n  and the Global South, to overcome economic barriers through\n  storytelling.\n\n- **A Living Industry** — Transforming the medium from a niche\n  interest into a sustainable market where creativity can lead to\n  self-reliance.\n\nIn our view, it is a natural professional expectation for commercial\nsuccess.\n\nPlease note that this philosophy does not reject hobbyist or\nexperimental projects. The project simply focuses on a different problem space:\nsustainability at scale.\n\n### Our Vision: Catalyst for Growth\n\nThe project does not aim to provide just another tool. Our goal is to\nprovide a **catalyst for growth**.\n\nBy offering a \"port-anywhere\" engine that delivers native performance\nwithout the overhead of heavy frameworks, the project enables developers to\nfocus on what matters most: **telling stories that endure.**\n\nBecause the project loves visual novels, we are committed to pushing the medium\nforward and ensuring it remains a vibrant and economically viable art\nform for decades to come.\n\n### Our Values: Empowering Talents for Sustainable Careers\n\nOur value is to empower talent—particularly in Asia and the Global\nSouth—to build sustainable careers through their storytelling. The project\nbelieves that with the right tools, creativity can overcome economic\nbarriers.\n\nOur commitment to the permissive license is for those people who\npublish and sell original visual novels on the App Store and Google\nPlay, regardless of their software, hardware, and budget limitations.\n\n---\n\n## FAQ\n\n- [What's this?](#whats-this)\n- [Is this a competitor to existing engines such as Ren'Py, Unity, or Godot?](#is-this-a-competitor-to-existing-engines-such-as-renpy-unity-or-godot)\n- [Is this okay to use for now?](#is-this-okay-to-use-for-now)\n- [Doesn't \"over 25 years of maturity\" contradict \"zero operational use\"?](#doesnt-over-25-years-of-maturity-contradict-zero-operational-use)\n- [Oh it's bus factor 1, isn't it?](#oh-its-bus-factor-1-isnt-it)\n- [Can companies maintain their own forks?](#can-companies-maintain-their-own-forks)\n- [Who makes the decisions?](#who-makes-the-decisions)\n- [Is Suika3 open source software? Can it be used commercially?](#is-suika3-open-source-software-can-it-be-used-commercially)\n- [What about the license for third-party libraries?](#what-about-the-license-for-third-party-libraries)\n- [JIT is disabled on iOS/console, so what should I do?](#jit-is-disabled-on-iosconsole-so-what-should-i-do)\n- [Are scripts safe? Can they access files or the network?](#are-scripts-safe-can-they-access-files-or-the-network)\n- [Is it easy to pass the store review?](#is-it-easy-to-pass-the-store-review)\n- [Is \"Supports all modern platforms\" really true?](#is-supports-all-modern-platforms-really-true)\n- [What does \"via Unity\" mean for console support?](#what-does-via-unity-mean-for-console-support)\n- [To what extent is HarmonyOS NEXT supported?](#to-what-extent-is-harmonyos-next-supported)\n- [Can you reproduce \"4-13x times faster\"? What are the measurement conditions?](#can-you-reproduce-4-13x-times-faster-what-are-the-measurement-conditions)\n- [Old GC takes 10 to 300ms, but does it cause frame drops?](#old-gc-takes-10-to-300ms-but-does-it-cause-frame-drops)\n- [How do I start making games? Any samples?](#how-do-i-start-making-games-any-samples)\n- [How do I go about developing plugins?](#how-do-i-go-about-developing-plugins)\n- [Can I migrate from existing assets (like Ren'Py or Unity)?](#can-i-migrate-from-existing-assets-like-renpy-or-unity)\n- [Where's the document? Is it the latest version?](#wheres-the-document-is-it-the-latest-version)\n- [Is Japanese/Chinese/... supported?](#is-japanesechinese-supported)\n- [Where should I go if I'm in trouble?](#where-should-i-go-if-im-in-trouble)\n- [What about SLAs and maintenance contracts for businesses?](#what-about-slas-and-maintenance-contracts-for-businesses)\n- [What are the minimum requirements?](#what-are-the-minimum-requirements)\n- [What does \"Supported\" mean?](#what-does-supported-mean)\n- [Will there be breaking changes? What is the compatibility policy?](#will-there-be-breaking-changes-what-is-the-compatibility-policy)\n- [Does it support DLC or in-app purchases?](#does-it-support-dlc-or-in-app-purchases)\n- [Why the deep devotion to Apple and iPhone?](#why-the-deep-devotion-to-apple-and-iphone)\n- [Why Using Python on iOS is Challenging?](#why-using-python-on-ios-is-challenging)\n\n### What's this?\n\nSuika3 is a next-generation 2D game and visual novel runtime designed\nwith professional studios and commercial app development in mind. It\naims for high performance, long-term maintainability, and broad\nplatform support through native implementations (primarily in C).\n\n### Is this a competitor to existing engines such as Ren'Py, Unity, or Godot?\n\nRather than being competitors, the project targets different problem\nareas. Suika3 clearly states its direction as \"creating a\nmobile-centric VN market that can withstand commercial use,\" and\nrespects existing engines as viable options.\n\nBy the way, Suika3 might seem like a competitor to Ren'Py if you\ncompare them by VN genre. However, Suika3 is actually a competitor to\nUnity when you compare them by technology because Ray scripting can be\nconsidered an open-source equivalent to Unity's IL2CPP.\n\n### Is this okay to use for now?\n\nStabilization for the first LTS release is progressing smoothly, and\nquality metrics are showing steady improvement. The 26.05 series is\nalready stable enough for general use.\n\nWhile the user base is currently small, giving you the choice to adopt\nearly or wait for further maturity, GitHub issues are typically\nresolved within a day. This ensures a high level of community support\nfor all users.\n\n### Doesn't \"over 25 years of maturity\" contradict \"few operational use\"?\n\nSuika3 itself is a new integration, but it builds upon a long lineage\nincluding Suika2 and StratoHAL. In other words, it's a \"new package\nwith an old foundation.\"\n\n### Oh it's bus factor 1, isn't it?\n\nThe policy explicitly states \"encouraging forks and rebrands\" and\n\"maintaining a clean upstream without formal governance,\" fostering an\napproach that makes downstream maintenance easier.\n\n### Can companies maintain their own forks?\n\nWith both \"Software Requirement Specification\" (SRS) and \"Software\nDesign Specification\" (SDS) provided, it is ideal for enterprise\nmaintenance. Furthermore, \"professional/enterprise support\" is\navailable, enabling the transfer of necessary know-how to the adopting\norganization.\n\n### Who makes the decisions?\n\nThe lead developers make the decisions. I do not maintain a formal\ngovernance structure for the community.\n\n### Is Suika3 open source software? Can it be used commercially?\n\nSuika3 is released under the zlib license and qualifies as Open Source\nSoftware (OSS) under the FOSS definition. It can be used freely in\ncommercial projects.\n\nHowever, its positioning differs slightly from many projects typically\nfound on GitHub. While many OSS projects thrive by building upon large\nexisting ecosystems, Suika3 is designed around core components\ndeveloped almost entirely from scratch, with external dependencies\nkept to an absolute minimum.\n\nWhile I have deep respect for the philosophy of GNU/Linux and the\nbroader open-source community, our goal has always been to deliver\n\"commercial-grade quality\" that meets our own rigorous\nstandards. Because of this strong independence, Suika3 may feel closer\nto \"commercial software provided as OSS\" than to a typical\ncommunity-driven OSS project.\n\nAccordingly, the project actively welcomes closed-source forks and downstream\ncommercial products built on top of this project.\n\n### What about the license for third-party libraries?\n\nSee [NOTICE](NOTICE) for the full text of each license and copyright\nnotice for the third-party libraries used in Suika3.\n\n### JIT is disabled on iOS/console, so what should I do?\n\nThe official binaries use an interpreter in those environments. While\nI believe our interpreter is sufficiently fast, if you require speed\nor if even the interpreter poses a problem for a store review, please\nuse [AOT](docs/mkdocs-en/aot.md). This is a perfect solution boasting\n4.1-13.5x the speed compared to the interpreter.\n\n### Are scripts safe? Can they access files or the network?\n\nNo, scripts run in a sandboxed environment and cannot access files\noutside the resource bundle or the network. It can access only the\nAPIs exposed by the engine, which are designed to be safe for game\nlogic.\n\n### Is it easy to pass the store review?\n\nI believe that using AOT compilation dramatically lowers the hurdle\nfor store reviews, as it essentially becomes a native app simply\nexecuting tags, not running a generic-purpose scripting. However, we\ncannot guarantee the outcome of store reviews, as they can be up to\nthe game quality including graphical design, user experience, and\ncontent.\n\n### Is \"Supports all modern platforms\" really true?\n\nIt's understandable that you find this hard to believe, but everything\nis working according to our checks. However, when you ship it as a\nproduct, please perform QA/QC at your own responsibility.\n\n### What does \"via Unity\" mean for console support?\n\nEven if I port Suika3 to consoles, I cannot disclose its source code\ndue to the NDA. However, dedicated versions of Unity are available for\nconsoles. Therefore, I ported Suika3 into a Unity plugin. Using this\nplugin allows you to run Suika3 within Unity. In other words, if you\nhave the console version of Unity and a \"devkit\" machine, you can run\nSuika3 on consoles as well.\n\nPlease understand that the console has UI/UX requirements, so you will\nneed to implement them additionally.\n\n### To what extent is HarmonyOS NEXT supported?\n\nAll of the core developer resides outside China and does not possess\nthe actual hardware sold in China. Consequently, functionality has\nonly been verified using an emulator.\n\n### Can you reproduce \"4-13x times faster\"? What are the measurement conditions?\n\nThis is a synthetic benchmark designed to measure the performance difference.\n\nMeasurement code:\n```\nfunc main() {\n    var sum = 0;\n    for(i in 0..10000) {\n        for(j in 0..100000) {\n            sum = sum + 1;\n        }\n    }\n}\n```\n\n| CPU                     | Arch     | JIT (s) | Interpreter (s) | Scaling (JIT vs Interpreter) |\n|-------------------------|----------|---------|-----------------|------------------------------|\n| PowerPC 970FX           | ppc64    | 29.47   | 397.22          | 13.5x                        |\n| Ingenic JZ4770          | mips32   | 129.75  | 1447.36         | 11.2x                        |\n| Intel Core Ultra 5 228V | x86_64   | 5.93    | 34.95           | 5.9x                         |\n| Apple M5                | arm64    | 2.76    | 11.34           | 4.1x                         |\n\nIn a real game app, the performance difference may vary depending on\nthe your logic and the amount of script execution. However, I have\nobserved that in typical visual novel scenarios, the performance\nimprovement can be significant, often around 5x faster when using AOT\ncompared to the interpreter.\n\n### Old GC takes 10 to 300ms, but does it cause frame drops?\n\nThe Old GC is rarely invoked. Large buffers like images are managed by\nC and are properly freed manually. The targets for GC are strings and\ndictionary objects in scripts, and the Old GC is not invoked unless\nsomething unusual occurs.\n\n### How do I start making games? Any samples?\n\nPlease see the\n[Getting Started Guide](docs/mkdocs-en/docs/getting-started.md)\nfor a step-by-step guide to creating your first game with Suika3.\nThe project also provides sample games in the `game/` directory of this\nrepository, which you can use as references or starting points for\nyour own projects.\n\n### How do I go about developing plugins?\n\nPlease see the [Plugin Development Guide](docs/mkdocs-en/docs/plugin.md)\nfor detailed instructions on how to create plugins for Suika3.\n\n### Can I migrate from existing assets (like Ren'Py or Unity)?\n\nOnly consider migration when targeting mobile is necessary and your\nexisting engine makes it difficult. Otherwise, migration may not be\nworth the effort.\n\nImages and audio can be migrated by batch converting their formats,\nbut the UI requires manual porting. Scenarios also need manual\nporting, though AI could enable some degree of automated conversion.\n\n### Where's the document? Is it the latest version?\n\nSee [Documentation](docs/mkdocs-en/docs/index.md) for the latest\ndocumentation.\n\n### Is Japanese/Chinese/... supported?\n\nGames are Unicode compliant, so you can use any language that does not\nuse Unicode composition in your game content. The engine itself is\ninternationalized, and error messages are shown in local languages.\n\nFor Japanese and CJK games, Suika3 supports:\n* Kinsoku characters including line breaking rules\n* Ruby annotations\n* Vertical writing\n\nNote that Right-To-Left writing system is currently not implemented\nyet because of the lack of the speakers in the development\nteam. Please contact the developers if you can help implementing it.\n\n### Where should I go if I'm in trouble?\n\nPlease ask questions on GitHub or Discord. If you're unfamiliar with\nGitHub and don't like Discord, email is fine too ;-)\n\n### What about SLAs and maintenance contracts for businesses?\n\nPlease request the service level you require. For a contract covering\nonly bug fixes, the cost is typically around 100 USD per month. For a\ncomprehensive contract including feature additions, it is\napproximately 5000 USD per game title. If you are based in an emerging\ncountry and cannot cover these costs, please reach out to discuss\noptions.\n\n### What are the minimum requirements?\n\nPlease see the [Compatibility List](#compatibility-list) for detailed\ninformation on supported platforms and their requirements.\n\n- Official Configuration\n    - Display: 640x480 24bpp\n    - CPU: 1GHz\n    - RAM: 512MB\n    - GPU: DirectX 9 / OpenGL 3.0 / OpenGL ES 2.0 / Metal 1.0\n    - Disk: 2MB + assets\n\n- Minimum Configuration for Embedded Devices\n    - Display: Any size, 24bpp required\n    - CPU: 200MHz\n    - RAM: 64MB\n    - GPU: Not required\n    - Disk: 2MB + assets\n\n### What does \"Supported\" mean?\n\nThis indicates that the sample game has passed the verification\nprocess to ensure it runs on either the actual hardware or an\nemulator.\n\nIt just means the project has a working codebase for the platform, and you\nneed a final QA for your game.\n\n### Will there be breaking changes? What is the compatibility policy?\n\nNo backward-breaking changes to API specification will be made to past\nreleases. Existing API functions will not be changed, and new APIs\nwill be added instead. If behavior must be altered, a flag will be\nprovided to configure the behavior mode. Note that save data\nspecifications may not be compatible across releases. For a single\nproduct, please fix and lock the major release version to be used.\n\n### Does it support DLC or in-app purchases?\n\nNo, it doesn't, and there are no plans to support them.\n\nInstead, please assume a subscription-based distribution model, like\nApple Arcade. In this model, a visual novel becomes a work that is\nread for a long time—much like a book—and is monetized through\ncontinuous viewing and playtime, similar to YouTube videos.\n\nThe visual novel market on mobile cannot survive unless it adapts to\nthis long-tail distribution.\n\nEven if the project is supported by a small number of core fans, I\nrecommend selling merchandise rather than relying on DLC. Additional\ncontent should be provided as free app updates rather than being split\ninto paid segments; the work should always remain a single, unified\nexperience.\n\nAt present, this remains a forward-looking perspective. However,\nin-app monetization models—particularly those resembling gambling\nmechanics—may face increasing regulatory restrictions depending on\nregional policies. It is possible that such regulations could expand\nand become a broader global standard over time.\n\nFor this reason, building a business model that does not rely on\nin-app purchases is not only a risk mitigation strategy, but also a\npath toward more sustainable revenue. More importantly, it allows each\nwork to remain available, discoverable, and continuously\nplayed—enabling it to be appreciated and loved over the long term.\n\nFurthermore, platform holders are the core of distribution and\nessential business partners. On mobile and consoles, it’s necessary\nto design projects based not only on \"what you want to create\" but\nalso on \"what kind of experience the platformer expects.\" This might\nseem like a different dimension from pure artistic creation. However,\nas a professional creator, this is an indispensable process for\ndelivering your work sustainably.\n\nGame subscription serv","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawemorris%2Fsuika3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fawemorris%2Fsuika3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawemorris%2Fsuika3/lists"}