Open-source project
sganggs/Stronghold-Protocol avatar
sganggs/Stronghold-Protocol

Stronghold-Protocol: Browser Co-op Tower Defense

明日方舟「卫戍协议:盟约」非官方同人复刻:浏览器自走棋塔防,单人或 1–4 人联机合作(非商业)

1,867 stars405 forksJavaScriptGPL-3.0

At a glance

What is it?
Stronghold-Protocol is an unofficial browser recreation of Arknights seasonal gameplay for solo or cooperative sessions with one to four players. It combines auto-chess preparation, browser-simulated combat, and a lightweight Node.js server, while its non-commercial terms and separate asset rights constrain redistribution.
Who is it for?
Stronghold-Protocol suits players who want its specific Arknights fan-game in a browser with solo, AI-assisted, or cooperative play. It does not suit commercial deployment, unrestricted redistribution of Arknights assets, or developers seeking a general-purpose game engine.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • sganggs/Stronghold-Protocol1,867 ★ · +348
Star history
Repository2026-10-162026-11-07
sganggs/Stronghold-Protocol1.5k1.9k

348 Stars in the last 22 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Stronghold-Protocol's Solo and Cooperative Match Flow

Stronghold-Protocol recreates the Arknights seasonal mode "卫戍协议:盟约" for browsers rather than reproducing the official desktop or mobile client. It is intended for players who want that specific mode in single-player simulation or cooperative sessions for one to four people. Alliance sessions contain no PvP. Empty seats can be assigned to AI teammates, so a single participant does not need to fill every slot with another person.

The documented match begins with confirmation of its settings and a strategy selection from 40 choices. Preparation then covers recruiting, refreshing, upgrading the dispatch center, placing operators on grid squares, assigning equipment, and selecting deployment facing. During combat, deployed operators fight automatically while enemies enter through red gates. A leaked enemy does not immediately remove target life. The interface displays a red `−N` marker, and settlement applies the accumulated loss.

The main sequence contains 14 rounds, with an additional fifteenth "隐秘核心" round under documented difficulty conditions. The project lists standard, peril, extinction, and ultimate difficulties for independent and alliance simulation. This is a full match implementation rather than a single battle demonstration, but the README also states that a few rules are based on inference and may differ from the official game.

Stronghold-Protocol's Client Combat and Server Coordination

The repository separates the Node.js entry point under `server/`, common code under `shared/`, and the browser application under `public/`. According to the README, the default model does not ask the host to simulate every visible combat interaction. Each participant's browser simulates combat, while the server manages rooms, economy, turns, and alliance coordination. The project says a low-power computer can therefore host a session because much of the combat work remains on client devices.

The default environment value is `SP_COMBAT=client`. Setting `SP_COMBAT=server` changes the model so the server performs combat simulation and distributes results. That option changes where computation occurs, but the README does not publish comparative CPU, latency, or bandwidth figures for the two modes. A related balance is available through `SP_VERIFY`: it accepts `off`, `sample`, which recalculates approximately one in eight client results, or `all`. Full verification increases server CPU use according to the configuration table.

Cooperative sessions also define disconnect behavior. Alliance players can reopen the page within ten minutes and return to their seat. Their formation continues fighting with the last submitted state, and the player can temporarily transfer control to AI. An independent session can be resumed for 24 hours from the same browser. Those windows do not imply that room state survives deletion of browser data or a restart of the host.

Installing Stronghold-Protocol and Starting a Match

The source workflow is appropriate for developers or anyone preparing a custom installation. Stronghold-Protocol requires Node.js 22 or 24. Clone the repository, install dependencies, run the setup utility, and start the server:

bash
git clone https://github.com/sganggs/Stronghold-Protocol.git
cd Stronghold-Protocol
npm install
npm run setup
npm start

The `postinstall` lifecycle copies Pixi, Preact, and Three into `public/vendor`. The setup command checks the environment and downloads approximately 550 MB of art and audio. The README says this transfer can be interrupted and resumed. After the server starts, open `http://localhost:3000` and create either an independent or alliance session.

If startup fails, the documented diagnostic command checks Node.js, assets, port occupation, LAN addresses, and firewall information:

bash
npm run doctor

Release bundles provide a simpler player route. On Windows, start `scripts\start-windows.bat`. On macOS or Linux, run:

bash
./scripts/start.sh

The server defaults to TCP port 3000. A different port can be selected with the documented startup argument or the `PORT` environment variable. Weak devices can lower graphics quality in settings, request the 2D board through `?board=2d`, or select the simplified renderer through `?render=fallback`.

Stronghold-Protocol Asset Choices and Docker Deployment

Stronghold-Protocol distinguishes code from the assets needed for its recreation. The complete release archive is documented as approximately 560 MB compressed and 790 MB after extraction. It includes art, audio, two language voice sets, battlefield scenes, and official 3D board textures. The lite archive is approximately 22 MB and downloads about 550 MB of assets on first startup. Both bundles use the same server code and runtime dependencies.

Some content cannot be fetched by the lite setup. The official 3D board, selected interface icons, certain enemy models, and most selected summon models require extraction from a local Arknights PC client. The documented extraction path requires Python 3.8 or newer. Without those files, Stronghold-Protocol substitutes a 2D board, approximate icons, colored ordinary source-stone mites, and portrait-style summon substitutes. The game remains playable, but its presentation is reduced.

The repository includes a `Dockerfile` based on `node:22-alpine`. Its basic container command is:

bash
docker run -d --name stronghold -p 3000:3000 --restart unless-stopped stronghold-protocol

The Dockerfile says the client still runs without art by using placeholder visuals. It also documents `PORT`, `HOST`, `SP_COMBAT`, `SP_VERIFY`, `TRUST_PROXY`, and `DEBUG`. Asset-bearing deployments require either an internet-enabled image build or a mounted host asset directory, as detailed in `docs/DEPLOY.md`.

Stronghold-Protocol Game Systems and Selection Boundaries

The gameplay documentation covers a broad set of systems. Stronghold-Protocol lists 112 recruitable operators plus promoted variants, 283 manually implemented skills, operator traits, equipment, tactics, terrain devices, summons, elemental damage, elemental bursts, blocking, push and pull behavior, and deployment delays. Alliance play adds a shared recruitment pool and a cooperative defense feature in which a teammate with a perfect defense can move in to intercept enemies that another player leaked.

The final assault places a group on a shared battlefield against a boss health bar. It lists ten enemy leaders, including a giant leader with an attack area of approximately five by three grid squares. This degree of detail indicates broad game coverage, but the README does not provide comparative balance data or compatibility results for every official rule. Its fidelity claim is also qualified: rules and values are compared with official data tables and PRTS where possible, while some behavior remains inferred.

Stronghold-Protocol is the wrong choice for developers who need a reusable tower-defense engine, a game unrelated to Arknights, or an official source of authoritative seasonal rules. Its dependency on separately handled game assets is also a firm boundary for organizations that need unrestricted redistribution or commercial use. The GPL code licence does not remove the rights restrictions that apply to Arknights names and media.

Stronghold-Protocol Alternatives, Upgrades, and Licence Costs

The official Arknights game is the direct functional alternative because it contains the source mode and its intended presentation. Stronghold-Protocol differs by offering a browser client, solo simulation, cooperative sessions without PvP, and a small Node.js host that can leave combat simulation on clients. The project describes itself as unofficial and unauthorized, so matching some official data does not grant official status.

Within Stronghold-Protocol, server-side and client-side combat are operational alternatives. `SP_COMBAT=client` keeps simulation on participants' browsers, while `SP_COMBAT=server` centralizes it on the host. `SP_VERIFY` controls how much submitted combat the server recalculates. The repository does not document comparative measurements that would justify selecting either model solely on claimed speed.

Recent maintenance activity is visible. The repository is not archived, its last push was on 2026-10-15, and releases v0.2.4, v0.2.5, and v0.2.6 were published on 2026-10-10, 2026-10-12, and 2026-10-13. Update archives are documented for existing 0.2.x installations, but players must stop the server and merge the extracted update contents. The startup process rejects an update when program files were modified or the installation belongs to an unsupported version such as 0.1.x.

The code uses `GPL-3.0-or-later`. The README separately prohibits commercial use of the project and states that game assets are outside the GPL. This is not legal advice, but code and assets must be evaluated as separate licensing concerns.

Editorial conclusion

Stronghold-Protocol suits players who want its specific Arknights fan-game in a browser with solo, AI-assisted, or cooperative play. It does not suit commercial deployment, unrestricted redistribution of Arknights assets, or developers seeking a general-purpose game engine. Before adopting it, verify Node.js and browser support, review `NOTICE.md`, and confirm that the required asset bundle and any local extraction fit the intended environment.

Frequently asked questions

What is Stronghold-Protocol?

It is an unofficial browser recreation of Arknights' "卫戍协议:盟约" mode. It supports independent simulation or cooperative sessions for one to four players, with no PvP.

How do I install and start Stronghold-Protocol?

From source, clone the repository and run `npm install`, `npm run setup`, then `npm start`. Release installations use `scripts\start-windows.bat` on Windows or `./scripts/start.sh` on macOS and Linux.

Does Stronghold-Protocol require an Arknights client?

No. The official 3D board and some models require local extraction, while the lite package downloads most other assets. Without the client, Stronghold-Protocol uses documented 2D and alternative visual substitutes.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. sganggs/Stronghold-Protocol on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sganggs-stronghold-protocol.svg)](https://hysenlabs.com/projects/sganggs-stronghold-protocol)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/sganggs-stronghold-protocol.svg)](https://hysenlabs.com/projects/sganggs-stronghold-protocol)

Was this useful?