{"id":45899198,"url":"https://github.com/masterlaplace/flakkari","last_synced_at":"2026-02-27T22:02:55.907Z","repository":{"id":209564131,"uuid":"724318708","full_name":"MasterLaplace/Flakkari","owner":"MasterLaplace","description":"Flakkari is a UDP/TCP game server initially developed for the R-Type Epitech project and updated for the Video Games course at University Laval","archived":false,"fork":false,"pushed_at":"2026-01-01T01:50:15.000Z","size":7474,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-05T16:59:04.867Z","etag":null,"topics":["rtype","server","tcp","udp","unity3d"],"latest_commit_sha":null,"homepage":"https://masterlaplace.github.io/Flakkari/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MasterLaplace.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":".github/SUPPORT.md","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},"funding":{"github":["MasterLaplace"]}},"created_at":"2023-11-27T20:53:56.000Z","updated_at":"2026-01-01T01:49:55.000Z","dependencies_parsed_at":"2023-11-28T03:25:16.743Z","dependency_job_id":"4368ee1d-54ae-4a74-84a5-5fac5cc56132","html_url":"https://github.com/MasterLaplace/Flakkari","commit_stats":null,"previous_names":["masterlaplace/flakkari"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/MasterLaplace/Flakkari","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterLaplace%2FFlakkari","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterLaplace%2FFlakkari/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterLaplace%2FFlakkari/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterLaplace%2FFlakkari/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MasterLaplace","download_url":"https://codeload.github.com/MasterLaplace/Flakkari/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterLaplace%2FFlakkari/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29917208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"ssl_error","status_checked_at":"2026-02-27T19:37:41.463Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["rtype","server","tcp","udp","unity3d"],"created_at":"2026-02-27T22:02:54.857Z","updated_at":"2026-02-27T22:02:55.885Z","avatar_url":"https://github.com/MasterLaplace.png","language":"C++","funding_links":["https://github.com/sponsors/MasterLaplace"],"categories":[],"sub_categories":[],"readme":"# ME : Flakkari\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"docs/Images/Flakkari.png\" alt=\"Flakkari logo\" style=\"height: 200px\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ch3 align=\"center\"\u003e📦 Download \u0026#xa0; : \u0026#xa0;\n    \u003ca href=\"https://github.com/MasterLaplace/Flakkari/releases/latest/\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/v/release/MasterLaplace/Flakkari.svg?label=Latest%20Version\u0026style=for-the-badge\" alt=\"Latest Version\"\u003e\n    \u003c/a\u003e\u0026#xa0; | \u0026#xa0;\n    📜 License \u0026#xa0; : \u0026#xa0;\n    \u003ca href=\"https://github.com/MasterLaplace/Flakkari/blob/main/LICENSE\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/License-MIT-brightgreen.svg?style=for-the-badge\" alt=\"License: MIT\"\u003e\n    \u003c/a\u003e\n    \u003c/h3\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ch3 align=\"center\"\u003e🌐 Supported Platforms\n    \u0026#xa0; : \u0026#xa0;\n    \u003cimg\n        src=\"https://img.shields.io/badge/Linux-blue?style=for-the-badge\"\n        alt=\"Linux deb\"\n        href=\"https://github.com/MasterLaplace/Flakkari/releases/latest/download/flakkari-linux.deb\"\n    \u003e \u0026#xa0; | \u0026#xa0;\n    \u003cimg\n        src=\"https://img.shields.io/badge/Windows-blue?style=for-the-badge\"\n        alt=\"Windows\"\n        href=\"https://github.com/MasterLaplace/Flakkari/releases/latest/download/flakkari-win64.exe\"\n    \u003e \u0026#xa0; | \u0026#xa0;\n    \u003cimg\n        src=\"https://img.shields.io/badge/MacOS-blue?style=for-the-badge\"\n        alt=\"MacOS\"\n        href=\"https://github.com/MasterLaplace/Flakkari/releases/latest/download/flakkari-macos.pkg\"\n    \u003e\n    \u003c/h3\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ch3 align=\"center\"\u003e📡 Supported Protocol\n        \u0026#xa0; : \u0026#xa0;\n        \u003cimg src=\"https://img.shields.io/badge/UDP-blue?style=for-the-badge\" alt=\"UDP\"\u003e\n        \u0026#xa0; | \u0026#xa0;\n        \u003cimg src=\"https://img.shields.io/badge/TCP-blue?style=for-the-badge\" alt=\"TCP\"\u003e\n    \u003c/h3\u003e\n\u003c/p\u003e\n\n---\n\n## :placard: Table of Contents\n\n- [Description](#description)\n  - [Games Request](#video_game-games-request)\n- [Running](#running)\n  - [Environment Setup](#gear-environment-setup)\n  - [Build and Run](#rocket-build-and-run)\n  - [Build Modes](#gear-build-modes)\n  - [Build Commands](#hammer-build-commands)\n  - [Package Installation](#package-installation)\n  - [Environment Variables](#earth_asia-environment-variables)\n- [Docker](#docker)\n- [Documentation](#documentation)\n- [Latest Release](#latest-release)\n- [License](#license)\n- [Contacts](#contacts)\n\n---\n\n\u003cdiv id='description'/\u003e\n\n## :pencil: **DESCRIPTION**\n\nFlakkari is a UDP/TCP server and client library initially developed for the R-Type Epitech project and updated for the Video Games course at University Laval. It enables network-based gameplay, supporting multiple games and clients simultaneously through its multi-threaded architecture. The server is designed to handle high concurrency and ensure low latency, making it suitable for real-time multiplayer games. Flakkari also includes features such as game state synchronization, player authentication, and robust error handling to provide a seamless gaming experience.\n\n**🎮 Client Library:** Flakkari provides a static library (`flakkari-client`) that can be integrated into your game projects. This library handles network communication, packet serialization, and game state synchronization, allowing you to focus on game logic.\n\n**🔄 Auto-Update Feature:** Flakkari supports automatic game downloads from remote repositories, allowing the server to fetch and update games dynamically. This feature can be disabled for environments requiring pure MIT licensing.\n\nFlakkari also has a [Unity client](Libraries/Flakkari4Unity/README.md) library to facilitate the development of multiplayer games. This library is available in C# and can be used to connect to the Flakkari server, send and receive messages and manage game events. It is designed to be easy to integrate into existing game projects and provides advanced features to simplify the development of multiplayer games.\n\n\u003e [!NOTE]\n\u003e The project is still under development and may not be stable.\n\n\u003cdiv id='video_game-games-request'/\u003e\n\n### :video_game: **GAMES REQUEST**\n\nWe provide a game request system that allows you to request a game to be added to the server. To do so, please open an [Github Issues](https://github.com/MasterLaplace/Flakkari/issues/new/choose). Select the `Game Request` template and provide the information following the template.\nWe will gladly review your request and add the game to the server if it meets the requirements.\n\nThe available games are listed in the [Games](Games) directory. Each game has its own configuration file. The server will load the games from this directory and make them available to clients. The main advantage of this system is that you can add new games without modifying the server code. The server will automatically update the list of available games when it starts or when a new game is added/removed/modified in the remote directory.\n\nAnd if you want to add a new game, you can follow the [Game Configuration](docs/GameConfiguration.md) guide.\n\n\u003e [!WARNING]\n\u003e Before submitting a game request, please make sure that the game you are requesting is not already in the repository.\n\u003e Also, be aware that the game you are requesting must be open-source and must comply with the Code Of Conduct.\n\n---\n\n\u003cdiv id='running'/\u003e\n\n## :truck: **RUNNING**\n\n\u003cdiv id='gear-environment-setup'/\u003e\n\n#### :gear: **ENVIRONMENT SETUP**\n\nBefore running the server, you need to set the game directory environment variable:\n\n```shell\n# Set the games directory environment variable\nexport FLAKKARI_GAME_DIR=\"/path/to/your/Games\"\n\n# For the current project structure:\nexport FLAKKARI_GAME_DIR=\"$(pwd)/Games\"\n\n# Or use absolute path:\nexport FLAKKARI_GAME_DIR=\"/home/user/Flakkari/Games\"\n```\n\n\u003e [!NOTE]\n\u003e **FLAKKARI_GAME_DIR:** This environment variable specifies the default directory containing game configurations. It's used as a fallback when no game directory is provided via command-line arguments.\n\n\u003cdiv id='rocket-build-and-run'/\u003e\n\n#### :rocket: **BUILD AND RUN**\n\n```shell\n# Clone repository\n$\u003e git clone https://github.com/MasterLaplace/Flakkari.git\n$\u003e cd Flakkari\n\n# Set environment variable\n$\u003e export FLAKKARI_GAME_DIR=\"$(pwd)/Games\"\n\n# Build with XMake (recommended, cross-platform)\n$\u003e xmake\n\n# Build both server and client\n$\u003e xmake build flakkari-server flakkari-client\n\n# Or build only the server\n$\u003e xmake build flakkari-server\n\n# Or build only the client library\n$\u003e xmake build flakkari-client\n\n# Alternative: Build with CMake\n$\u003e mkdir build \u0026\u0026 cd build\n$\u003e cmake .. \u0026\u0026 cmake --build .\n\n# Run the server executable\n$\u003e xmake run flakkari-server\n# Or manually: ./build/linux/x86_64/release/flakkari-server\n\n# Alternative: Run with explicit arguments (no env variable needed):\n$\u003e ./build/linux/x86_64/release/flakkari-server -g Games -i localhost -p 8081\n# XMake: or on Windows: .\\build\\windows\\x64\\release\\flakkari-server.exe -g Games -i localhost -p 8081\n# CMake: or from build directory: ./flakkari-server -g Games -i localhost -p 8081\n```\n\n**Using the Client Library:**\n\n```cpp\n#include \"Flakkari/Client/UDPClient.hpp\"\n\n// Create a client instance\nFlakkari::UDPClient client(\"MyGame\", \"127.0.0.1\", 8081);\n\n// Connect to the server\nclient.connectToServer();\n\n// Send a packet\nProtocol::Packet\u003cProtocol::CommandId\u003e packet;\n// ... configure packet ...\nclient.sendPacket(packet.serialize());\n\n// Receive packets\nauto receivedPacket = client.getNextPacket();\nif (receivedPacket.has_value()) {\n    // Process packet\n}\n\n// Disconnect\nclient.disconnectFromServer();\n```\n\n**Running the Example Client:**\n\nA complete example client is available in `examples/client.cpp`:\n\n```shell\n# Build the example client\n$\u003e xmake build example-client\n\n# Start the server in one terminal\n$\u003e export FLAKKARI_GAME_DIR=\"$(pwd)/Games\"\n$\u003e xmake run flakkari-server -g Games -i 127.0.0.1 -p 12345\n\n# Run the example client in another terminal\n$\u003e xmake run example-client\n\n# Expected output:\n# [CLIENT] Starting Flakkari example client...\n# [CLIENT] Connecting to server at 127.0.0.1:12345\n# [CLIENT] Connected! Waiting for packets...\n# [CLIENT] Press Ctrl+C to stop\n```\n\n**Integrating the Client Library in Your Project:**\n\n```shell\n# With XMake\nadd_deps(\"flakkari-client\")\ntarget(\"your-game\")\n    add_deps(\"flakkari-client\")\n    add_includedirs(\"$(projectdir)\")  -- For Flakkari/ prefix\n\n# With CMake\nfind_package(flakkari-client REQUIRED)\ntarget_link_libraries(your-game PRIVATE flakkari-client)\n```\n\nTo run the server with\n\n- the games directory: `./Games` that contains the games configurations\n\n- the IP address: `localhost`\n\n- the port: `8081`\n\nexpected architecture of the games list directory:\n\n```shell\nGames\n├── Game_01.json\n├── Game_01\n│   └── config.cfg\n├── Game_02.json\n└── Game_02\n    └── config.cfg\n```\n\n\u003cdiv id='gear-build-modes'/\u003e\n\n#### :gear: **BUILD MODES**\n\nFlakkari supports two compilation modes to accommodate different license requirements:\n\n**🔄 Full Mode (with auto-update) - Default:**\n\n```shell\n# Enable auto-update functionality (default)\n$\u003e xmake config --with-autoupdate=true\n$\u003e xmake\n\n# Features: Automatic game downloads from remote repositories\n# Dependencies: libgit2 (GPL-2.0), libcurl, OpenSSL 3.0+\n# License: MIT + GPL dependencies for auto-update feature\n```\n\n**🪶 Lightweight Mode (MIT-only):**\n\n```shell\n# Disable auto-update for pure MIT license\n$\u003e xmake config --with-autoupdate=false\n$\u003e xmake\n\n# Features: Core server functionality only\n# Dependencies: nlohmann_json, singleton (MIT)\n# License: Pure MIT, no GPL dependencies\n```\n\n\u003e [!NOTE]\n\u003e **License Considerations:** The auto-update feature uses libgit2 (GPL-2.0-only). When enabled, the resulting binary includes GPL dependencies. For commercial use or MIT-only deployments, use `--with-autoupdate=false` to build a lightweight version with pure MIT licensing.\n\n\u003cdiv id='hammer-build-commands'/\u003e\n\n#### :hammer: **BUILD COMMANDS**\n\n**XMake commands:**\n\n```shell\n# Clean build files\n$\u003e xmake clean\n\n# Build in debug mode\n$\u003e xmake f -m debug \u0026\u0026 xmake\n\n# Build in release mode (default)\n$\u003e xmake f -m release \u0026\u0026 xmake\n\n# Build specific target\n$\u003e xmake build flakkari-server  # Server only\n$\u003e xmake build flakkari-client  # Client library only\n\n# Install the project\n$\u003e xmake install\n\n# Package the project (see packaging options below)\n$\u003e xmake pack\n\n# Run tests (if available)\n$\u003e xmake test\n```\n\n**Packaging options:**\n\n```shell\n# Package both server and client (default)\n$\u003e xmake pack -y\n\n# Package only the server\n$\u003e xmake f --pack-server=y --pack-client=n -y\n$\u003e xmake pack -y\n\n# Package only the client library\n$\u003e xmake f --pack-server=n --pack-client=y -y\n$\u003e xmake pack -y\n\n# Back to full package\n$\u003e xmake f --pack-server=y --pack-client=y -y\n```\n\nThe packages will be generated in `build/xpack/flakkari/` with names like:\n- `flakkari-full-linux-x86_64-v0.8.0.zip` (both server and client)\n- `flakkari-server-linux-x86_64-v0.8.0.zip` (server only)\n- `flakkari-client-linux-x86_64-v0.8.0.zip` (client library only)\n\n**Alternative CMake commands:**\n\n```shell\n# Create build directory\n$\u003e mkdir build \u0026\u0026 cd build\n\n# Configure the project\n(build)$\u003e cmake .. \u0026\u0026 cmake --build .\n\n# Or configure with Ninja\n(build)$\u003e cmake -G Ninja .. \u0026\u0026 cmake --build .\n\n# Install the project\n(build)$\u003e sudo cmake --build . --target install\n\n# Build documentation\n(build)$\u003e cmake --build . --target doc\n\n# Build package\n(build)$\u003e cmake --build . --config Release --target package\n```\n\n\u003cdiv id='package-installation'/\u003e\n\n#### 📦 **PACKAGE INSTALLATION**\n\n```bash\n# Install the package\n# For windows systems\n(build)$\u003e flakkari-win64.exe\n\n# For macos systems\n(build)$\u003e sudo installer -pkg flakkari-macos.pkg -target /\n\n# For redhat based systems\n(build)$\u003e sudo rpm -i flakkari-linux.rpm\n\n# For debian based systems\n(build)$\u003e sudo dpkg -i flakkari-linux.deb\n```\n\n\u003cdiv id='earth_asia-environment-variables'/\u003e\n\n#### :earth_asia: **ENVIRONMENT VARIABLES**\n\n| Variable | Description | Example | Required |\n|----------|-------------|---------|----------|\n| `FLAKKARI_GAME_DIR` | Default directory containing game configurations | `./Games` or `/path/to/games` | Yes* |\n\n\u003e [!NOTE]\n\u003e **\\*Required when:** No game directory is specified via `-g/--games` command-line argument.\n\nThe `FLAKKARI_GAME_DIR` environment variable serves as a fallback location for game configurations when not explicitly provided through command-line arguments.\n\n---\n\n\u003cdiv id='docker'/\u003e\n\n## :whale: **DOCKER RUN**\n\n```bash\n# install docker on ubuntu\n$ sudo apt-get update\n$ sudo apt-get install docker-ce docker-ce-cli containerd.io\n\n# check docker version (optional)\n$ docker --version\n\u003e Docker version 24.0.7, build afdd53b\n\n# build docker image\n$ docker build -t flakkari .\n\n# run docker image\n$ docker run -p 8081:8081 -it flakkari\n\n# list docker images\n$ docker ps\n\n# stop docker image\n$ docker stop \u003ccontainer-id\u003e\n\n# remove docker image\n$ docker rm \u003ccontainer-id\u003e\n```\n\n---\n\n\u003cdiv id='documentation'/\u003e\n\n## :wrench: **DOCUMENTATION**\n\nWiki:\n\n- [**Technical Documentation \u0026 Wiki**](https://MasterLaplace.github.io/Flakkari/)\n\nFor detailed documentation on the Flakkari protocol, see:\n\n- [**Flakkari Protocol Documentation**](docs/RFC.txt)\n\n---\n\n## :rocket: LATEST RELEASE\n\n\u003e :clipboard: [Change Log](CHANGELOG.md) and [Security Policy](SECURITY.md)\n\n- [![Latest Release](https://img.shields.io/github/v/release/MasterLaplace/Flakkari.svg?label=version)](https://github.com/MasterLaplace/Flakkari/releases/latest/)\n\n---\n\n\u003cdiv id='license'/\u003e\n\n## :scroll: **LICENSE**\n\nThis project is licensed under the terms of the [MIT License](./LICENSE).\n\n**License Considerations:**\n\n- **Core Flakkari Library:** MIT License\n- **Auto-Update Feature:** When enabled (`--with-autoupdate=true`), includes libgit2 (GPL-2.0-only) dependency\n- **Lightweight Build:** Use `--with-autoupdate=false` for pure MIT licensing without GPL dependencies\n\nCopyright © 2023-2024 [Master_Laplace](https://github.com/MasterLaplace).\n\n---\n\n\u003cdiv id='contacts'/\u003e\n\n## :mailbox_with_mail: **CONTACTS**\n\nThis server project has been carried out by:\n\n\u003ctable align=\"center\"\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/MasterLaplace/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/MasterLaplace?v=4?s=100\" width=\"100px;\" alt=\"MasterLaplace\"/\u003e\u003cbr/\u003e\u003ca href=\"https://github.com/MasterLaplace/\"\u003e\u003cimg src=\"https://img.shields.io/github/followers/MasterLaplace?label=Master_Laplace\u0026style=social\" alt=\"Master_Laplace\"/\u003e\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n---\n\n\u003cp align=\"center\"\u003eME.inc\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasterlaplace%2Fflakkari","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmasterlaplace%2Fflakkari","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasterlaplace%2Fflakkari/lists"}