# Tsukiweb ports Tsukihime to the browser and asks you to recreate the assets

> Tsukiweb is a React and Vite web port of the visual novel Tsukihime that adds savedata previews, an interactive flowchart and multiple languages, but it ships no game assets, so a fully working copy means recreating the resources yourself. It suits readers and contributors who want the story on modern devices.

**requinDr/tsukiweb-public** — Porting Tsukihime to the web to make it accessible on different devices with QoL improvements

- Repository: https://github.com/requinDr/tsukiweb-public
- Website: https://tsukiweb.holofield.fr
- Stars: 851 · Forks: 82
- Language: KerboScript
- License: not declared
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/requindr-tsukiweb-public

## An old story, a modern reader

The stated goal of the project is to provide an accessible modern way of reading an old, beautiful story. It is a port of Tsukihime to the web, so that the visual novel runs on devices that no longer have a compatible interpreter, and the project description frames it as accessibility with quality of life improvements rather than a reimplementation for its own sake. The listed additions are concrete: savedata previews, an interactive flowchart, multiple languages support, and more. The flowchart is the one that changes how a reader interacts with the story, since it turns the branching structure of a visual novel into something you can navigate rather than something you rediscover by playing through branches. The repository is a public one, and the deployment lives at tsukiweb.holofield.fr.

## The PWA installs from the title screen

Installation for an end user is unusually simple, and the README explains it in two sentences. The Progressive Web App can be installed from the title screen, and it offers a better experience in general. What that means in practice is that a reader does not install anything from a package manager or a store, and does not need a native runtime, since the story runs in a browser tab that can be added to the home screen of a phone. For a visual novel, that is the difference between a project you can only run on one platform and one you can read on whatever device is at hand. The same reasoning explains the choice of web as the target: the original engine was a local application, and the port moves the execution environment into the one piece of software nearly every device already has.

## Running it locally with Node

Contributors and tinkerers have two documented local routes, and the Node one is a five step list in the README. You install Node.js, with the version given as `v22.18+`, then get the source code, then install the dependencies from the project directory, then start the development server, then open the URL shown in the terminal output. The three commands that matter are the clone, the install and the start:

```bash
git clone --recursive <repository-url>
npm install
npm start
```

The `--recursive` flag is not optional decoration. The repository contains a `tsukiweb-common` directory and a `.gitmodules` file, and the package manifest depends on it as a local file dependency, `"@tsukiweb/common": "file:tsukiweb-common"`. A shallow clone without submodules leaves you without the shared code the application imports.

## Docker as the other local route

The alternative is Docker, and the README keeps it brief on purpose. Docker can be used for local deployment, and the full instructions are in `docker/README.md`, with a warning that the commands must be run from the `docker/` directory. That directory is one of the top level entries in the repository, so the container setup is versioned alongside the code rather than described on a wiki page. For a reader who only wants to look at the port, the Docker path is the one that avoids installing a Node toolchain, while the Node path is the one you want if you intend to change the code. The package scripts also include a `proxy` script that starts Vite with `--mode proxy`, which suggests a mode for pointing the dev server at a remote resource server.

## The resources are not in the repository, and that is the catch

This is the constraint that decides whether the project is usable for you. The README states that none of the original assets are provided with this repository, and points to a wiki page called Recreating the resources for a fully offline experience. Everything else in the project, the engine, the interface, the flowchart, the translations, is present, but the art, the audio and the script data are not, because they are the original author's work. A user who wants to read the story needs to supply those resources from their own copy of the game, which means the port is a way to run the existing content in a better reader rather than a redistribution of it. A contributor who wants to work on the code does not need them, and the README points such people at the roadmap and the contributing guidelines.

## A modern stack with a shared common package

The project technologies are listed as React with Vite, TypeScript and SASS, and the manifest confirms a current generation set: React 19, Vite 8, TypeScript and Sass, with a Node engine requirement of `>=22.18`. The dependency list shows how the reading experience is assembled. `wouter` handles routing, `@tanstack/react-virtual` virtualises long lists, `motion` covers animation, `react-toastify` provides notifications, `yet-another-react-lightbox` handles image viewing, `react-error-boundary` isolates rendering failures, and `classnames` handles conditional class names. The build script is a chain that typechecks the shared package first, then typechecks the project, then builds, and there is a separate check script that runs the shared package's own typecheck in isolation.

## Translations, releases, and a licence that is not stated

Multiple languages are a stated feature, and the contribution path for them is documented on a wiki page called Adding a translation, which is linked under useful links alongside the contributing guidelines. The release history moved quickly through the first stable version: v1.0.0 on 2026-08-15, v1.1.0 on 2026-09-03 and v1.1.1 on 2026-09-15, and the last push to the repository was on 2026-10-09. The repository is not archived. Two things are worth flagging in the metadata. The package is marked `"private": true`, which fits a repository you clone and run rather than install. And the licence is not identified in the repository metadata, so anyone planning to redistribute a build of this port, or to base work on it, has to establish the terms from the project directly instead of assuming an open source grant.

## Conclusion

Adopt Tsukiweb if you want to read Tsukihime on a phone or a modern browser and care about the quality of life additions, since the port is installable as a progressive web app and ships an interactive flowchart, savedata previews and translation support. Do not expect a ready to run game, because the repository contains no original assets and the wiki page on recreating the resources is the missing piece. Verify first which resources you can legally supply, since the licence is not identified in the repository metadata, and note that the `tsukiweb-common` submodule is required for the project to build at all.

## FAQ

### How do I install Tsukiweb as a user?

The Progressive Web App can be installed from the title screen, and the README says it offers a better experience in general. No package manager or native runtime is involved.

### How do I run Tsukiweb locally with Node?

Install Node.js `v22.18+`, clone the repository with `--recursive`, then run `npm install` and `npm start` from the project directory and open the URL shown in the terminal output.

### Why are the game assets missing from the repository?

The README states that none of the original assets are provided with the repository and points to a wiki page on recreating the resources for a fully offline experience. The code is open, the original art and audio are absent.

### What quality of life features does Tsukiweb add?

The README lists savedata previews, an interactive flowchart, multiple languages support, and more, on top of being a web port that runs on modern devices.

### Why does the git clone need the --recursive flag?

The repository carries a `tsukiweb-common` submodule and the manifest depends on it as a local file dependency, `@tsukiweb/common` pointing at `file:tsukiweb-common`, so the shared code has to be present for the project to build.

## Sources

- [Issues](https://github.com/requinDr/tsukiweb-public/issues)
- [Project website](https://tsukiweb.holofield.fr)
- [README](https://github.com/requinDr/tsukiweb-public/blob/main/README.md)
- [Releases](https://github.com/requinDr/tsukiweb-public/releases)
- [requinDr/tsukiweb-public on GitHub](https://github.com/requinDr/tsukiweb-public)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/requindr-tsukiweb-public
