a rust rewrite of yno-server, aiming to be a drop-in replacement while also being faster and more stable.
these instructions can also be adapted to run the original go implementation, since that doesn't have any setup instructions
- start downloading the game you want to host
- generate a preshared key for the client and server and place it in
/key.bin - build with:
just build - look in
/target/release, that's where the pengui-server executable is - get an instance of mariadb initialized with
/sql/init.sqlor use your already existing ynoserver database - create a config.yaml where you're running the executable following the development config in the root of the repo
ie if running./pengui-serverin/target/releasecreate/target/release/config.yaml
or specify path to config using--config
right now it contains all the fields from ynoserver, most of which aren't used yet just leave them empty or with the bogus values from the development config - run the produced executable
- use or create an nginx config that routes traffic to the created socket in
/sockets/{game_name}.socket
where{game_name}is the game_name field of the config - optional - accept docker and just start using that please
- symlink a copy of yume 2kki to
/2kki- so the map (
*.lmu) files are directly in/2kki/*.lmu
- so the map (
- generate or grab the key.bin from the ynoengine wasm binary which your testing client(s) use and put it in
/key.bin
docker compose up -djust run
- check:
just check - format:
just fmt - fully reset database:
just devdb- this will delete the entire database and rebuild it from scratch using
/db/init.sql - when the entire database has been reverse engineered we will switch to proper sqlx migrations
- this will delete the entire database and rebuild it from scratch using
this project is bound by the AGPL-3.0 license because it contains a lot of ported code from the original go implementation. even though most rust projects are dual licensed under the MIT license and the Apache-2.0 license, this project is still licensed under the AGPL-3.0 because of its restrictions on derivative works.
- room websocket
- client handler
- message signing
- switch room (partial)
- movement
- facing direction
- flashing
- tone
- transparency & visibility
- system graphic
- sound effects
- battle animations
- changing sprites
- pictures (
experimental) - syncing switches (
partial) - syncing variables (
partial) - syncing events
- these sync events require a lot of supporting infrastructure, which i haven't made yet
- animation commands
- client handler
- session websocket
- client handler
- player count
- setting name
- chat messages
- expeditions
- setting private mode
- player info
- ...
- api (partial)
- friends
- parties
- badges
- admin
- player info
- save syncing
- reporting
- notifications
- events
- screenshots
- ...
- infrastructure
- database, ask for newer schema dump?
- current player registry
- router
- authentication middleware
- moderation middleware
- minigames (
needs a refactor) - ipc
- config
- command line
- assets
- production docker file
- documentation
- ...
also check out pengui-ball, the rust rewrite of the frontend.