A server that manages game sessions over LDN. Used by the Nintendo Switch 1 emulator, Ryujinx, for pseudo-online multiplayer gameplay. https://ldn.ryujinx.app
Find a file
2025-11-10 21:42:46 -06:00
.github Many changes to synchronisation and stats dumping to fix issues, add a delay on scan, change to build for ARM 2024-11-12 17:49:33 +00:00
LdnServer Fix FileSystemWatcher usage 2025-10-26 11:47:29 +00:00
Network Hide ghost lobbies after a while, add IP ban, fixes for healthcheck script 2025-03-12 18:07:04 +00:00
patches Rewrite flakes properly 2024-01-01 16:37:36 +00:00
py-healthcheck Hide ghost lobbies after a while, add IP ban, fixes for healthcheck script 2025-03-12 18:07:04 +00:00
Stats Hide ghost lobbies after a while, add IP ban, fixes for healthcheck script 2025-03-12 18:07:04 +00:00
Utils Cleanup 2025-10-26 02:59:29 -05:00
.dockerignore Add dockerignore 2023-03-11 14:45:42 +01:00
.editorconfig Add .editorconfig 2023-05-29 18:09:47 +02:00
.gitignore Add gitignore. 2020-08-09 13:53:02 +01:00
default.nix Update dependencies and use .NET 8 2024-03-08 22:54:22 +01:00
deps.nix Update dependencies and use .NET 8 2024-03-08 22:54:22 +01:00
docker-compose.yml Hide ghost lobbies after a while, add IP ban, fixes for healthcheck script 2025-03-12 18:07:04 +00:00
Dockerfile Many changes to synchronisation and stats dumping to fix issues, add a delay on scan, change to build for ARM 2024-11-12 17:49:33 +00:00
flake.lock flake.nix: Add option to collect crash dumps 2024-03-13 01:00:26 +01:00
flake.nix flake: Add rate limit for incoming connections 2024-09-25 16:07:51 +02:00
LanPlayServer.csproj Many changes to synchronisation and stats dumping to fix issues, add a delay on scan, change to build for ARM 2024-11-12 17:49:33 +00:00
LanPlayServer.sln Initial Commit. 2020-08-09 13:49:17 +01:00
LICENSE.txt Add MIT License 2024-11-12 00:38:15 +01:00
Program.cs Cleanup 2025-10-26 02:59:29 -05:00
README.md Add MIT License 2024-11-12 00:38:15 +01:00

__________                     __ .__                  .____         .___        
\______   \ ___.__. __ __     |__||__|  ____  ___  ___ |    |      __| _/  ____  
 |       _/<   |  ||  |  \    |  ||  | /    \ \  \/  / |    |     / __ |  /    \ 
 |    |   \ \___  ||  |  /    |  ||  ||   |  \ >    <  |    |___ / /_/ | |   |  \
 |____|_  / / ____||____/ /\__|  ||__||___|  //__/\_ \ |_______ \\____ | |___|  /
        \/  \/            \______|         \/       \/         \/     \/      \/ 

Ryujinx LDN Multiplayer Server

This server drives multiplayer "matchmaking" in Ryujinx's local wireless implementation. Players can create "networks" on the server, which can then be scanned and found by other players as if they were within that network's range. The server entirely manages the network information and player join/leave lifecycle for all games created.

License

This software is licensed under the terms of the MIT license.

Configuration

This app can be configured using the following environment variables:

Name Description Default value Notes
LDN_HOST The address the server should be listening on. "0.0.0.0"
LDN_PORT The port the server should be using. 30456
LDN_GAMELIST_PATH The path to the file containing a mapping of application ids and names. "gamelist.json" This can be a relative or an absolute path.
LDN_REDIS_SOCKET The path to the unix socket of the redis server to connect to. "" If this is variable is not empty LDN_REDIS_HOST and LDN_REDIS_PORT will be ignored.
LDN_REDIS_HOST The address of the redis server to connect to. "127.0.0.1"
LDN_REDIS_PORT The port of the redis server to connect to. 6379

Proxy

Ryujinx uses an application layer proxy to simulate communications in a network, which directs traffic created by the C# socket to a proxy server, which routes and sends it to the relevant parties. By default, Ryujinx attempts to create a proxy server on the network owner's system, expose a port to the internet, and tell joiners to connect to it. If this does not work, the proxy is done through the master server itself, using a lot of the same mechanisms.

Analytics via Redis (JSON objects)

  • ldn
    This provide global analytics over the whole server.
    E.g.:

    {
        "total_game_count": 4,
        "private_game_count": 1,
        "public_game_count": 3,
        "in_progress_count": 0,
        "master_proxy_count": 0,
        "total_player_count": 10,
        "private_player_count": 3,
        "public_player_count": 7
    }
    
  • games
    This provide detailed analytics over all games. Only public games are available.
    E.g.:

    {
        "d2d0244c2b4544d7a26cd051e0e993e9": {
            "id": "d2d0244c2b4544d7a26cd051e0e993e9",
            "player_count": 3,
            "max_player_count": 4,
            "game_name": "Puyo Puyo Tetris",
            "title_id": "010053d0001be000",
            "mode": "P2P",
            "status": "Joinable",
            "players": [
                "Player1",
                "Player2",
                "Player3"
            ]
        }
    }