Rules to detect game engines and other technologies based on Steam depot file lists

Overview

SteamDB File Detection Rule Sets

This is a set of scripts that are used by SteamDB to make educated guesses about the engine(s) & technology used to build various games.

It makes educated guesses, but they are just that, guesses.
It is not perfect.
It will never be perfect.
Do not expect it to be perfect.

You can browse the result of this here: https://steamdb.info/tech/

Overview

Every app on Steam is associated with a number of file depots. For each app on Steam, SteamDB will run these scripts over all the filenames in all of its depots. Note that it is filenames, not files. These scripts only scan the names of the files, not the data they contain. Note that there are over 100 million files on SteamDB, so scanning filenames alone is already a pretty big task.

These detections rely on SteamDB being able to access the file lists. Use SteamDB's token dumper program if you can to improve the coverage!

Pattern-matching rules

rules.ini defines a set of regular expressions which are run against every filename in the Steam Database. A PHP script uses the resulting matches to make educated guesses about what the most likely technology could be.

The ini file defines multiple sections, each with its own sub-patterns:

  • Engine
  • Evidence
  • Container
  • Emulator
  • AntiCheat
  • SDK

Here's an example of some rule patterns:

[Engine]
AdobeAIR = (?:^|/)Adobe AIR(?:$|/)
AdventureGameStudio = (?:^|/)(?:AGSteam\.dll|acsetup\.cfg)$
XNA[] = (?:^|/|\.)XNA(?:$|/|\.)
XNA[] = (?:^|/)xnafx31_redist\.msi$
FNA = (?:^|/)fna\.dll$

This snippet defines a section named "Engine." On SteamDB pattern names are prefixed with the section name. So that becomes "Engine.AdobeAIR", "Engine.AdventureGameStudio", "Engine.XNA", and so on.

Let's look at that first line which mentions AdobeAIR: AdobeAIR = (?:^|/)Adobe AIR(?:$|/). This regular expression assigns the pattern value of Engine.AdobeAIR to any file or directory that has the exact name "Adobe AIR", or contains that exact phrase as a parent directory in its path. We highly recommend the site regexr.com to test your regular expressions.

Some things to note:

  • All rules are case INsensitive
  • You can assign multiple rules to a single definition, and any of them will cause a match. Just use the [] after the pattern name as shown in the above example for XNA.
  • The regex pattern runs on the full file path as it appears in the depot, e.g. game/bin/win64/dota2.exe, not just dota2.exe
  • File paths will always use / (forward slash) as the path separator
  • The regex generator uses ~ as the boundary, so there is no need to escape /
  • Detections that work only for a single game are generally unwanted

Engine means game/software engines. The definition for this is pretty fuzzy and invites endless debate but basically if it is a big library or toolkit that many people use to make games and software we call that an engine.

Evidence are patterns that get fed to the script on a second pass to help identify things that weren't identified on the first pass.

Container is a category to refer to things like Electron, a common wrapper for HTML5 games. This is because games that use Electron often have some other technology they're using that they would consider their actual engine, such as PixiJS, Phaser, OpenFL, Heaps, etc.

Emulator is for identifying packed-in emulation technology. For instance, many DOS games come packaged with DOSBOX, and so we note those files with Emulator.DOSBOX.

AntiCheat is for anti-cheat files like BattlEye, EasyAntiCheat, and PunkBuster.

SDK are all other libraries and software development kits that an app might be using.

How it works

A two-pass script runs over every file. On the first pass it tries to make a "slam dunk" identification based on a strong signal from any file. Engine patterns are primarily used here, looking for obvious things like Unity, Unreal, MonoGame, RPGMaker, XNA/FNA, AdobeAIR, etc. These game engines often have very clear signatures — ie "UnityEngine.dll". An "Engine" pattern should be strong enough to confidently match against a particular engine based on one single positive match against any file in the depot.

Evidence patterns are meant for building up "hints" about what kind of engine or technology might be in use when a slam-dunk identification is not possible from a single pattern match. Once all the obvious tests have been made, if a particular app has no clear identification it will do a second pass in FileDetector.php by calling the TryDeduceEngine() function. For instance, GameMaker games are hard to identify based on any single file, but they have a common pattern: an "options.ini" file, a "data.win" file, and an audio file matching the pattern snd_.ogg. The problem is that these are pretty generic filenames that often occur outside of GameMaker games. However, once we have already ruled out most of the other engines from our first logic pass if we find two or more of these three file patterns chances are very good we're looking at a GameMaker game.

Tests

If you have PHP installed locally, you can run the tests from the root directory by typing php tests/Test.php.

Contributing

See CONTRIBUTING.md file.

How SteamDB uses this information

SteamDB makes two sets of identifications — the technology the file likely represents, and the technology the app makes use of. Each file will match against at most one rule in a section. Therefore the order of the rules and the two-pass tests matters, but an app can have multiple rulings applied to it.

It is even possible for an app to have multiple game engines — this happens when an app represents a multi-game compilation, or uses one technology for its launcher app and one for the game itself, or whatever.

False negatives and positives

Report false classifications here

It is inevitable when working at this scale that we will have both false negatives and false positives.

False negatives are when a game is made with a certain technology and we fail to identify it as such. For many engines, there is nothing we can do about this because there simply isn't enough information left by the filenames alone to reliably detect them. Some engines leave no reliable trace of their identity whatsoever (particularly HTML5 game engines), others like GameMaker and Godot leave subtle patterns that allow us to make educated guesses, and others are super obvious.

We try to err on the side of avoiding false positives, even if that causes us to have more false negatives.

That said, this is all fuzzy at best and all we can do is try to select for the best tradeoffs. Don't expect this tool to be an omniscient oracle, it's operations are quite simple.

Absence of evidence is not evidence of absence

Something to emphasize is we are certainly undercounting engines/technology in three main ways:

  1. We can't detect things we don't yet have rules for
  2. False negatives will keep us from detecting every instance of a particular technology, even if we have rules for it
  3. Some engines are fundamentally undetectable or extremely difficult to identify

For instance, the HaxeFlixel game engine likely represents a large percentage of Lime/OpenFL games on Steam. However, HaxeFlixel does not leave a particular signature that easily distinguishes games made with it from conventional Lime/OpenFL games. We can't even distinguish between games made in Lime (a low level framework) and games made in OpenFL (a high level framework based on Lime). This pattern likely repeats with many other game engines and technologies.

So please note these limitations any time you use this data for anything important.

One game can match multiple engines

Sometimes games will include extra software like a level editor, a launcher, or configuration tool and that will be written in an engine other than what was used to build the game itself. Therefore it is not uncommon to find games that match multiple engines. The script is not able to disentangle this information, so an appid matching for multiple engines is simply saying that it found files matching the signatures of all of those engines within the depots associated with that appid. Nothing more, nothing less.

For a practical example: The Witcher: Enhanced Edition contains a digital comic book that is displayed in a standalone app created with the Unity Engine. The game itself was written in the Aurora engine.

Issues
  • Many games after recent Godot changes

    Many games after recent Godot changes

    SteamDB link to the game

    From pastebin that @larsiusprime sent me, all these have wrongly been removed from matching Godot. They have a pattern that we can properly match.

    App 1041180 - Removed Engine.Godot
    App 1269540 - Removed Engine.Godot
    App 1389030 - Removed Engine.Godot
    App 1412500 - Removed Engine.Godot
    App 1429120 - Removed Engine.Godot
    App 1507970 - Removed Engine.Godot
    App 1539630 - Removed Engine.Godot
    App 1561390 - Removed Engine.Godot
    App 1660050 - Removed Engine.Godot
    App 1684810 - Removed Engine.Godot
    App 388490 - Removed Engine.Godot
    App 498310 - Removed Engine.Godot
    App 863330 - Removed Engine.Godot
    

    What should it be detected as?

    Godot

    False negative 
    opened by akien-mga 27
  • Godot games with multiple PCK files

    Godot games with multiple PCK files

    SteamDB link to the game

    https://steamdb.info/app/498310/info/ https://steamdb.info/app/1079290/info/

    What should it be detected as?

    Godot

    Additional information

    These should be detected as Godot, but we currently exclude these knowingly as we fear a high number of false positives due to old games using .pck extensions for their multiple asset packs (data.pck, sounds.pck, etc.).

    I do think that after the last few days' improvements to the Godot heuristics, we should be able to include them provided that they pass the other Godot 3.0+ criteria, i.e. there must be a mygame.pck that matches mygame.exe, mygame.x86_64, mygame.x86 or mygame.

    I don't think that there is any pre-Godot 3.0 game using multiple PCKs, so it should be OK to keep excluding data.pck + other PCKs, as this is the case that would lead to most false positives.

    Before pushing a potential fix for this, I would recommend sharing a list of what would be the new additions, so that I can review it and ensure that there aren't any false negatives.

    False negative 
    opened by akien-mga 13
  • Add CRIWARE

    Add CRIWARE

    opened by M00nG 10
  • Add Missing Descriptions

    Add Missing Descriptions

    Brief explanation of the change

    Added missing descriptions For now it's a draft until i finish doing missing ones and maybe change the ones i really don't like.

    Type: Engine Type: SDK 
    opened by Lifeismana 8
  • Add Photon as Sdk

    Add Photon as Sdk

    SteamDB app page links to a few games using this

    https://steamdb.info/app/1124300/ https://steamdb.info/app/1557740/ https://steamdb.info/app/823130/

    Brief explanation of the change

    Add Photon as an Sdk Simply called it Photon, (because the company is called Photon) should i add networking to it ? closes #81

    Type: SDK 
    opened by Lifeismana 7
  • Borderlands 2 wrongly detected as XNA

    Borderlands 2 wrongly detected as XNA

    SteamDB link to the game

    https://steamdb.info/app/49520/

    What is it being detected as and what should it be detected as? Any other information?

    Borderlands 2 is being wrongly detected as XNA. It should be detected as Unreal Engine.

    False positive 
    opened by LaserYGD 7
  • Engines/frostbite

    Engines/frostbite

    SteamDB app page links to a few games using this

    https://steamdb.info/depot/1222731/ https://steamdb.info/depot/1262541/ https://steamdb.info/depot/1262601/ https://steamdb.info/depot/1313861/ https://steamdb.info/depot/1238811/

    Brief explanation of the change

    Added Frostbite Engine.

    Type: Engine 
    opened by Suvitruf 7
  • Photon networking

    Photon networking

    Some reference to the SDK, such as the developer site or a wikipedia article.

    https://www.photonengine.com/ used in many popular games for networking/multiplayer

    SteamDB links

    https://steamdb.info/app/1124300/ https://steamdb.info/app/761890/ https://steamdb.info/app/794260/ https://steamdb.info/app/471710/ https://steamdb.info/app/1557740/ https://steamdb.info/app/823130/subs/

    Possible way to detect it

    Photon3Unity3D.dll Photon3DotNet.dll PhotonLoadbalancingApi.dll PhotonRealtime.dll PhotonChat.dll PhotonUnityNetworking.dll PhotonUnityNetworking.Utilities.dll

    Type: Engine 
    opened by LaserYGD 7
  • Add GDevelop as Engine

    Add GDevelop as Engine

    SteamDB app page links to a few games using this

    https://steamdb.info/app/1307760/ https://steamdb.info/app/1622620/ https://steamdb.info/app/842170/ https://steamdb.info/app/1460910/ https://steamdb.info/app/1342220/

    Brief explanation of the change

    Hi 👋 This adds rules for detecting GDevelop (both for GDevelop 5 and GDevelop 4).

    Type: Engine 
    opened by 4ian 6
  • Infinity Engine games are being detected as Aurora

    Infinity Engine games are being detected as Aurora

    SteamDB link to the game

    https://steamdb.info/app/228280/ https://steamdb.info/app/257350/ https://steamdb.info/app/466300/ https://steamdb.info/app/321800/

    What is it being detected as and what should it be detected as? Any other information?

    Infinity Engine games are currently tagged as Aurora.

    Complete list of Infinity Engine games on Steam: https://steamdb.info/app/228280/ https://steamdb.info/app/257350/ https://steamdb.info/app/385970/ https://steamdb.info/app/321800/ https://steamdb.info/app/466300/

    Complete list of Aurora Engine games on Steam: https://steamdb.info/app/704450/ https://steamdb.info/app/2760/ https://steamdb.info/app/32370/ https://steamdb.info/app/208580/ https://steamdb.info/app/7110/ https://steamdb.info/app/20900/ https://steamdb.info/app/17450/ https://steamdb.info/app/1238040/

    False positive 
    opened by Duffadash 5
  • FINAL FANTASY XV incorrectly detected as Engine.PlayFirstPlayground

    FINAL FANTASY XV incorrectly detected as Engine.PlayFirstPlayground

    SteamDB link to the game

    https://steamdb.info/app/637650/

    What is it being detected as and what should it be detected as? Any other information?

    datas/words.pfp triggers detection for Engine.PlayFirstPlayground.

    False positive 
    opened by yretenai 0
  • Kex Engine - remove false positives

    Kex Engine - remove false positives

    Brief explanation of the change

    Friendship Club and Toast Time have files config.kpf which make false positives for the Kex engine. This fix adds negative lookbehind to exclude those files.

    opened by mastan-rus 2
  • IW (Call of Duty) Engine

    IW (Call of Duty) Engine

    Some reference to the engine, such as the developer site or a wikipedia article.

    https://en.wikipedia.org/wiki/IW_(game_engine)

    SteamDB links

    https://steamdb.info/app/2630/ https://steamdb.info/app/7940/ https://steamdb.info/app/209650/ https://steamdb.info/app/393080/ https://steamdb.info/app/209160/

    Possible way to detect it

    Call of Duty uses "fast files" to store game data, so a regex looking for 'ff' is useful, so is 'iwd'. All games seem to also have a "main" and "zone" folder at root level. I don't have all COD games and my regex is not great but I'm guessing something like this will capture most of them

    iwengine[] = .ff$ iwengine[] = .iwd$ iwengine[] = (?:^|/)main. iwengine[] = (?:^|/)zone.

    Type: Engine 
    opened by Impossible 5
  • The Albino Hunter wrongly detected as ChromeEngine

    The Albino Hunter wrongly detected as ChromeEngine

    SteamDB link to the game

    https://steamdb.info/app/355520/

    What is it being detected as and what should it be detected as? Any other information?

    It's a RPG Maker game. Currently detected as both RPG Maker and ChromeEngine.

    The rest of the games on the ChromeEngine list look correct. There are plenty more games using this engine but they are not available on Steam. I checked the SteamDB engine list against the list on Wikipedia and searched for all titles on Steam.

    Side note: the upcoming Dying Light 2 Stay Human (release date December 7) is using ChromeEngine 7, no depot files yet so it can't be detected at the moment.

    False positive 
    opened by dpanter 2
  • GameGuru

    GameGuru

    Some reference to the engine, such as the developer site or a wikipedia article.

    https://store.steampowered.com/app/266310/GameGuru/

    SteamDB links

    https://steamdb.info/depot/799531/ https://steamdb.info/depot/1541111/ https://steamdb.info/depot/1090581/

    Possible way to detect it

    There seems to be always

    • setup.ini
    • userdetails.ini
    • visuals.ini

    Or maybe detecting the folder names as they seem to be the same as well?

    Type: Engine 
    opened by f1WN356Uh51a1W6cn 0
  • Engine: orx

    Engine: orx

    Some reference to the engine, such as the developer site or a wikipedia article.

    Orx is an open source (zlib license), heavily data-driven, lightweight, cross-platform 2D game engine written in C. It currently supports Windows, Linux, MacOS, iOS and Android.

    Home page: https://orx-project.org Github repository: https://github.com/orx/orx Wikipedia page: https://en.wikipedia.org/wiki/ORX

    SteamDB links

    As far as I know, so far there's only a single game made with orx that has been published on Steam (I was part of the dev team):

    https://steamdb.info/app/352210/

    Possible way to detect it

    The engine is always contained inside a single file. Its name depends on the target platform:

    • orx.dll on Windows
    • liborx.so on Linux
    • liborx.dylib on MacOS
    Type: Engine 
    opened by iarwain 0
  • Clickteam Fusion 2.5

    Clickteam Fusion 2.5

    Some reference to the engine, such as the developer site or a wikipedia article.

    Hi, I'm a moderator of the Clickteam community, I noticed that Clickteam Fusion never appears anywhere on Steam, meaning its apps/games aren't detected in any way. I really would like to see it getting a bit more attention since there are amazing games made with it that people have no idea about it. So if I can provide anything to help identifying Fusion games, I will be glad to help!

    SteamDB links

    https://steamdb.info/app/251130/ https://steamdb.info/app/252010/ https://steamdb.info/app/319480/ https://steamdb.info/app/298630/ https://steamdb.info/app/248310/ https://steamdb.info/app/1151620/ https://steamdb.info/app/736260/ https://steamdb.info/app/601810/ https://steamdb.info/app/350070/ https://steamdb.info/app/274270/ https://steamdb.info/app/207530/ https://steamdb.info/app/315610/ https://steamdb.info/app/319510/ https://steamdb.info/app/332800/ https://steamdb.info/app/354140/ https://steamdb.info/app/506610/ https://steamdb.info/app/237740/ https://steamdb.info/app/777670/

    Possible way to detect it

    I now you guys currently only operate in filenames, but unfortunately Fusion games are usually a single EXE, so I really hope you guys could make a exception to detect it.

    For starters there's 3 kinds of Fusion games (well, if you don't count Multimedia Fusion 2 games)

    • Packed EXE
    • Unpacked EXE
    • Chowdren exported

    The Packed EXE is the default one, it has a mmfs2.dll inside of the EXE. (Probably Multimedia Fusion 2.0 games/apps will also have this same DLL inside)

    The Unpacked EXE has a dat file with the same name as the exe and a "modules" folder, this folder can have different names, but it will always have the mmfs2.dll inside.

    Chowdren exported is a bit different, I don't know much of it since it's a paid conversion, but it usually has a Assets.dat and a data folder...

    Type: Engine 
    opened by FuurioBR 17
  • Engine: 3D Gamestudio aka Gamestudio A8

    Engine: 3D Gamestudio aka Gamestudio A8

    Some reference to the engine, such as the developer site or a wikipedia article.

    3D Gamestudio, oftentimes only referred to as Gamestudio, is a very old school toolset (engine + editors) which some people used before Unity was a thing. It might be referred to as A8 as well, short for Acknex 8 (rolls right of the tongue, right?).

    Super old school homepage: http://www.conitec.net/english/gstudio/index.PHP Manual and API reference: http://manual.3dgamestudio.net/

    It's a Windows only 32bit DirectX 9.0c engine. It's hell to work with.

    SteamDB links

    (My game: ) https://steamdb.info/app/688130/

    https://steamdb.info/app/724390/

    https://steamdb.info/app/34900/

    https://steamdb.info/app/259640/

    https://steamdb.info/app/280640/

    Some of those are made with previous iterations of Gamestudio (A4 through A8) but they all contain the same base data.

    Possible way to detect it

    The engine DLL acknex.dll should be included in pretty much every game made with this toolset. *.wrs container files are present if the game creator owns the Pro version of the engine. A file called acknex.wdf, a starter window definition, might be present, as well as d3dx9_42.dll and/ or d3dx9_32.dll and d3dx9_30.dll files. Furthermore, d3dcompiler_42.dll might be included in most games.

    Type: Engine 
    opened by Superku 4
  • Detect nw.js

    Detect nw.js

    Some reference to the SDK, such as the developer site or a wikipedia article.

    https://nwjs.io/

    SteamDB links

    This is the only one I'm aware of (my own project). It's very similar to Electron, but less popular.

    https://steamdb.info/app/853450/

    Possible way to detect it

    I believe these would be some good candidates to detect nw.js:

    In the top-level directory: icudtl.dat node.dll nw.dll nw_100_percent.pak nw_200_percent.pak nw_elf.dll nwjc.exe payload.exe pnacl (folder) resources.pak

    Type: Engine 
    opened by Maelfyn 1
  • Add Raycasting Game Maker

    Add Raycasting Game Maker

    SteamDB app page links to a few games using this

    https://steamdb.info/app/796480/ https://steamdb.info/app/654350/ https://steamdb.info/app/527750/ https://steamdb.info/app/1417500/ https://steamdb.info/app/1610130/ https://steamdb.info/app/664350/

    Brief explanation of the change

    I added detection of the game.pak and cs.pak files that are present in RGM games. Due to the really awful name of the game archive, and the fact that only 2 files are needed (the .exe which can be named anything and the .pak), it makes it quite a challenge to detect. I've written the regex so it will only find the .pak files in the root directory, as to avoid detecting CEF/Electron internal files.

    The engine isn't super common, but I personally know of at least 2 dozen games on Steam that use it, so I figured I'd contribute it.

    Type: Engine 
    opened by YellowberryHN 2
Owner
Steam Database
🚰 We occasionally make the pipes leak
Steam Database
Dépôt pour les cours et TP de BSN 1 en PHP

Introduction au WEB - Back Applications à télécharger et installer : Visual Studio Code : lien MAMP (serveur) : lien Ngrok : lien Base Après la config

Dan 5 Nov 17, 2021
Library for PHP 7.4+ to detect Browsers and Devices

This library requires PHP 7.4+. Also a PSR-3 compatible logger and a PSR-16 compatible cache are required. In

Thomas Müller 32 Nov 25, 2021
Library allows to detect emoji, remove emoji, encode emoji and decode emoji in string.

It allows to detect emoji, remove emoji, encode emoji and decode emoji in string. Installation composer require anisimov/emoji How to use Encode and

Aleksey Anisimov 6 Nov 8, 2021
Detect flaws in your architecture, before they drag you down into the depths of dependency hell ...

Detect flaws in your architecture before they drag you down into the depths of dependency hell ... What it does System Requirements Installation Phive

Michael Haeuslmann 479 Nov 19, 2021
Rector upgrades rules for Doctrine

Rector Rules for Doctrine See available Doctrine rules Install This package is already part of rector/rector package, so it works out of the box.

Rector 24 Nov 22, 2021
A Pocketmine-MP (PMMP) plugin to help staff members enforce the rules of the server.

StaffMode is an all-in-one Pocketmine-MP (PMMP) moderation plugin made to simplify the life of staff members.

ItsMax123 8 Nov 14, 2021
Custom PHPStan rules

phpstan-rules Provides additional rules for phpstan/phpstan. Installation Run $ composer require --dev alister/phpstan-rules Usage All of the rules pr

Alister Bulman 1 Nov 4, 2021
The game is implemented as an example of scalable and high load architecture combined with modern software development practices

Crossword game The game is implemented as an example of scalable and high load architecture combined with modern software development practices Exampl

Roman 50 Sep 22, 2021
A console noughts and crosses game written in php

Tic-tac-toe A console noughts and crosses game written in php To play, simply clone the file Navigate to the file directory on your terminal and run t

Etorojah Okon 1 Oct 13, 2021
Moodle plugin to limit the access to course content according to the user level in Block Game.

Moodle plugin to limit the access to course content according to the user level in Block Game.

null 3 Jul 9, 2021
A useful PocketMine-MP plugin that allows you to create crates in-game!

ComplexCrates A useful PocketMine-MP plugin that allows you to create crates in-game! Commands Main command: /crate Sub commands: create

Oğuzhan 8 Aug 26, 2021
Game Boy Camera Wifi Photo Extractor

Game Boy Camera Fast Wifi Adapter Plug in your Game Boy Camera, turn it on, and you can have the photos on your phone in under 2 minutes! Why I Made I

Matt G 59 Nov 11, 2021
This plugin adds custom pets to game for PocketMine-MP!

ComplexPets A plugin that adds pets to game made by OguzhanUmutlu for PocketMine-MP. Command Simply type /pets and summon your favorite animal! Featur

Oğuzhan 10 Aug 12, 2021
A game-mode for Minecraft: Bedrock Edition

HardCoreFactions This is an unpaid commission that was only released for educational purposes, consider using it as a reference rather than having it

Doge 3 Sep 8, 2021
Encuentra_Al_Puffle-Game Es un juego sencillo, lo cuál desarrollé a modo de práctica y por gusto

Encuentra_Al_Puffle-Game Es un juego sencillo, lo cuál desarrollé a modo de práctica y por gusto. Tomando como referencia a los puffles (frailecillos)

Moises Reyes 4 Aug 11, 2021
Simple game server with php without socket programming. Uses the Api request post(json).

QMA server Simple game server with php without socket programming. Uses the Api request post(json). What does this code do? Register the user as a gue

reza malekpour 3 Sep 4, 2021
Simple KPHP game, a proof of concept thing

KPHP Game About This is a game written in PHP using kphp-sdlite library. Gameplay video: https://www.youtube.com/watch?v=L44l4Tqm4Fc This game feature

Iskander (Alex) Sharipov 19 Nov 24, 2021
🚀 An open source multiplayer space strategy game.

Badges Introduction The game story takes place in a virtual galaxy where randomly generated planets produce various raw materials which can be used by

Galaxy of Drones Online 183 Nov 16, 2021
Web typing game

Welcome in Typing Game by Cards™ Introduction This game consist of typing 5 french expressions, the fatest you can ! Get Started Clone the repository

Clément ARLANDIS 1 Oct 23, 2021