{"id":41048399,"url":"https://github.com/kumpelblase2/skrillax","last_synced_at":"2026-01-22T11:16:33.712Z","repository":{"id":46319416,"uuid":"515322718","full_name":"kumpelblase2/skrillax","owner":"kumpelblase2","description":"Learning Rust and ECS by implementing an emulator for Silkroad Online.","archived":false,"fork":false,"pushed_at":"2025-12-26T19:19:16.000Z","size":1176,"stargazers_count":38,"open_issues_count":7,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-28T09:09:47.698Z","etag":null,"topics":["bevy","emulation","rust","silkroad","silkroad-online"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kumpelblase2.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":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-18T19:54:49.000Z","updated_at":"2025-12-26T19:19:21.000Z","dependencies_parsed_at":"2023-01-23T11:16:00.653Z","dependency_job_id":"67e99eb9-4d6d-46a2-9a61-9b22f67c668b","html_url":"https://github.com/kumpelblase2/skrillax","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kumpelblase2/skrillax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kumpelblase2%2Fskrillax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kumpelblase2%2Fskrillax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kumpelblase2%2Fskrillax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kumpelblase2%2Fskrillax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kumpelblase2","download_url":"https://codeload.github.com/kumpelblase2/skrillax/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kumpelblase2%2Fskrillax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28661900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"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":["bevy","emulation","rust","silkroad","silkroad-online"],"created_at":"2026-01-22T11:16:33.206Z","updated_at":"2026-01-22T11:16:33.707Z","avatar_url":"https://github.com/kumpelblase2.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skrillax\n\nLearning Rust and ECS by implementing an emulator for an MMORPG.\n\nSkrillax is my learning project for playing around with Rust, learning about lifetimes, shared state, async, and\nwhatever else I encounter on the way. My goal isn't to have a (fully) working server emulator. However, having a\nsomewhat working program at the end of the day would help with motivation.\n\nThis project is organized in a few subprojects, each having their own individual goal:\n\n- [silkroad-protocol](crates/silkroad-protocol/README.md): Packet specification that is used for communicating with the\n  client\n- silkroad-rpc: Shared types for RPC between servers\n- silkroad-navmesh: Navigation Mesh implementation, loading from official data files\n- [silkroad-gateway](silkroad-gateway/README.md): Loginserver implementation\n- [silkroad-agent](silkroad-agent/README.md): Gameserver implementation\n\nIt also uses the [`skrillax-network`](https://github.com/kumpelblase2/skrillax-network) family of crates, such as\n`skrillax-stream`, `skrillax-serde`, and `skrillax-packet`.\n\n## Usage\n\nWhile there's a lot (probably 97%) still missing, it's possible to run the server(s) and connect to it. There are\ntwo ways to go from here: Either you run the servers in a container or you run them directly. Please follow the\nsteps for the method you chose below.\n\nIn both cases you also need a working Silkroad Online installation. This needs to also be accessible by the server,\nas this provides most of the data (skills, characters, items, world mesh). Unlike many previous implementations,\nthis currently uses a (mostly) recent iSro version (around v1.669). Currently, it will accept any version, but it\nmight cause the client to crash at any point.\n\n### via Docker\n\nIf you want to run the servers in a docker container, ensure docker is already installed as well as docker-compose.\nNext, copy the `docker-compose.yml.example` to `docker-compose.yml`. Now adjust the `\u003csilkroad game location\u003e` to\nmatch the path of your silkroad directory (e.g. `/home/me/games/silkroad`). Then you can simply run\n\n```shell\n$ docker-compose up\n```\n\nto start all servers; the database, the gateway server, and the agent server. You're almost ready, please continue\nwith the [after install](#after-setup) step.\n\n### Local Build\n\nYou can also choose to build and run the servers directly. For this you need to first install\n[Rust](https://www.rust-lang.org/tools/install). You can verify the installation by running `rustc --version` and\nchecking that you get a version back. Additionally, make sure you have either installed or otherwise access to a\nPostgreSQL instance.\n\nFirst, lets set up the database. For this, create a new database in postgres that we can use. Then migrate the\ndatabase using the scripts provided in the `migrations` folder. You can either do this manually or, if you want to\ncontinuously develop, use `sqlx` to do it for you. You can install `sqlx` by running\n`cargo install sqlx-cli --features postgres`. Next, copy the `.env.example` to `.env` and adjust the connection\nstring to your installation. Format is: `postgres://\u003cuser\u003e:\u003cpassword\u003e@\u003chost\u003e/\u003cdb\u003e`. Then, you can run `cargo sqlx \nmigrate run`. After all this, your database should have some tables in it, albeit empty.\n\nNow we need to adjust the configuration files. In `configs/agent_server.toml` and `configs/gateway_server.toml`\nconfigure the database connection similar to the following with the appropriate values for your environment:\n\n```toml\n[database]\nhost = \"localhost\"\nuser = \"skrillax\"\npassword = \"skrillax\"\ndatabase = \"skrillax\"\n```\n\nWe also need to adjust the `game.data-location` path in the `agent_server.toml` to match that of your Silkroad\ninstallation directory as well as the `rpc-address` in the same config to be `localhost`. If you plan on running the\nagent and gateway server on different hosts, the address you put in here should be the host or ip the gateway can\nuse to access the agent server.\n\nWith the configuration and database set up, we can now start the servers. It doesn't really matter in which order we\ndo it - the gateway server will pick up the agent server by checking occasionally - but you can start the gateway\nserver first:\n\n```shell\n$ cargo run --bin silkroad-gateway --release\n```\n\nAfter that, you can do the same with the agent server:\n\n```shell\n$ cargo run --bin silkroad-agent --release\n```\n\nBoth servers should start up just fine and would now wait for connections.\n\n### After Setup\n\nThe servers are now running, and you could connect to them, but there would be no user to use to log in. One can be\ncreated using the gateway:\n\n```shell\n$ cargo run --bin silkroad-gateway --release -- register \u003cusername\u003e \u003cpassword\u003e\n```\n\nand fill in the parameters with the values you wish. With these, you will be able to log in.\n\nAs a last step, you need to configure Silkroad to use the local gateway server instead. You can do this either by\nusing a so-called \"Loader\" to redirect the client to the gateway server on startup, or by editing the `Media.pk2`\ndirectly. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumpelblase2%2Fskrillax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkumpelblase2%2Fskrillax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumpelblase2%2Fskrillax/lists"}