+============================================+ | servers.luanti.org statistics | | 10 days (30rd Oct 2025 -- 06th Nov 2025) | | Only server list fetches were counted. | +============================================+ General stats ------------- total: 765329 IPv4 -> 448978 58.66% IPv6 -> 316351 41.34% Browser -> 72290 09.45% Game -> 693039 90.55% Note: While visiting servers.minetest.net will redirect, the list file itself won't. So there are no distortions expected due to the rename. Game stats ---------- total: 268307 unique (by IP): 92185 Minetest/Luanti (or identifies as such): 5.14 -> 50192 18.71% 5.13 -> 13019 04.85% 5.12 -> 4318 01.61% 5.11 -> 4591 01.71% 5.10 -> 7150 02.66% 5.9 -> 2026 00.76% 5.8 -> 5910 02.20% 5.7 -> 1397 00.52% 5.6 -> 5072 01.89% 5.5 -> 1773 00.66% 5.4 -> 2727 01.02% 5.3 -> 350 00.13% 5.2 -> 49 00.02% 5.1 -> 1088 00.41% 5.0 -> 11526 04.30% 0.4.17 -> 2460 00.92% 0.4.16 -> 992 00.37% 0.4.15 -> 216 00.08% 0.4.14 -> 47 00.02% 0.4.13 -> 2936 01.09% 0.4.12 -> 28 00.01% 0.4.11 -> 52 00.02% 0.4.10 -> 26 00.01% 0.4.9 -> 1 00.00% 0.4.8 -> 0 00.00% series 5.x -> 112585 41.96% series 0.4.x -> 6758 02.52% dev version string -> 7058 02.63% Third party (only notable): KawaiiWorld -> 106006 39.51% MultiCraft -> 8220 03.06% MineBoostV2 -> 674 00.25% Dragonfire -> 412 00.15% Matematica Superpiatta -> 377 00.14% other/unknown -> 33275 12.40% Note about 5.0: All of these requests seem to be from a (rather popular?) Android app built from a particular dev commit before the 5.0 release, making it incompatible with all servers no matter the version. Which app this is is unknown. It is suspected that the app doesn't even allow multiplayer and fetching the list is a code bug/accident. Note about 0.4.13: There seems to be an (old?) iOS app that is based on 0.4.13, since 99% of these are from iOS. Note about KawaiiWorld: Version numbers suggest that these are based on old versions of the MultiCraft codebase (specifically 1.6 or 1.5) and therefore on Minetest 0.4.17. Note about MultiCraft: Since version 1.5.0 (Sep 2019) and newer are using MultiCraft's own server list, all clients visible here are just old remnants. Note about other/unknown: Technically some of these could be Minetest 0.4.7 or older - as it did not set an user agent - but that's extremely unlikely. These requests are mostly curl, Go-http-client and other programmatic clients plus a bunch of small Android forks and cheat clients. Third party links: * KawaiiWorld: by or * MultiCraft: * Dragonfire: * Matematica Superpiatta: by Protocol versions ----------------- total: 233106 By maximum version: v51 -> 990 00.42% v50 -> 50604 21.71% v49 -> 9720 04.17% v48 -> 8077 03.46% v47 -> 5483 02.35% v46 -> 7350 03.15% v45 -> 708 00.30% v44 -> 1345 00.58% v43 -> 2660 01.14% v42 -> 1341 00.58% v41 -> 5150 02.21% v40 -> 2304 00.99% v39 -> 3216 01.38% v38 -> 1059 00.45% v37 -> 83 00.04% v36 -> 11444 04.91% v35 -> 2 00.00% v34 -> 0 00.00% v33 -> 0 00.00% v32 -> 117905 50.58% v31 -> 3 00.00% v30 -> 125 00.05% v29 -> 0 00.00% v28 -> 163 00.07% v27 -> 2960 01.27% v26 -> 80 00.03% v25 -> 52 00.02% v24 -> 76 00.03% By supported range: v51 -> 1196 00.51% v50 -> 51800 22.22% v49 -> 61520 26.39% v48 -> 69597 29.86% v47 -> 75080 32.21% v46 -> 82430 35.36% v45 -> 83138 35.67% v44 -> 84483 36.24% v43 -> 87143 37.38% v42 -> 88484 37.96% v41 -> 93634 40.17% v40 -> 95938 41.16% v39 -> 99154 42.54% v38 -> 100213 42.99% v37 -> 100296 43.03% (↥ 5.x series) v36 -> 11445 04.91% v35 -> 3 00.00% v34 -> 3 00.00% v33 -> 3 00.00% v32 -> 117908 50.58% (↧ 0.4 series) v31 -> 117911 50.58% v30 -> 118036 50.64% v29 -> 118036 50.64% v28 -> 118199 50.71% v27 -> 121159 51.98% v26 -> 121239 52.01% v25 -> 121291 52.03% v24 -> 3207 01.38% Explanation: The maximum of 0.4.17 is v32, the minimum of 5.0 is v37. Versions 33 until 36 were never released (dev builds only). v51 is a dev version at the time of writing. ⚠️ Important warning ⚠️: Questionable Android apps distort these numbers a whole lot (take note of v32). For example the same survey under only Windows users puts 1% on 0.4 and 98% on 5.x. Platform stats -------------- total: 233120 x86 -> 993 00.43% x86_64 -> 70897 30.41% armv6/7l -> 12690 05.44% aarch64 -> 95532 40.98% (Apple) -> 52368 22.46% ??? -> 640 00.27% (Linux-based) -> 148658 63.77% Windows -> 28250 12.12% Darwin -> 55623 23.86% Emscripten -> 474 00.20% *BSD -> 92 00.04% Note about Apple: This means Apple mobile devices (iPad, iPhone, iPod), which return their model instead of CPU architecture in uname(). I did not care to sort them apart. You can assume that the majority is aarch64 these days. Note about Linux-based: This figure includes both "real" Linux and Android. Geographic stats ---------------- total: 233120 Continents: Asia (AS) -> 81381 34.91% Europe (EU) -> 66920 28.71% North Am. (NA) -> 49148 21.08% South Am. (SA) -> 24529 10.52% Africa (AF) -> 8349 03.58% Oceania (OC) -> 2770 01.19% Countries (top 10): United States (US) -> 37614 16.14% Russia (RU) -> 15838 06.79% Indonesia (ID) -> 14730 06.32% Germany (DE) -> 13289 05.70% Philippines (PH) -> 12585 05.40% Brazil (BR) -> 11718 05.03% India (IN) -> 8540 03.66% France (FR) -> 8121 03.48% Argentina (AR) -> 5757 02.47% Vietnam (VN) -> 5605 02.40% Windows stats ------------- total: 28250 Windows 11 -> 14430 51.08% Windows 10 -> 12500 44.25% Windows 8(.1) -> 537 01.90% Windows 7 -> 769 02.72% Windows Vista -> 3 00.01% Windows XP -> 11 00.04% older -> 0 00.00% Any Windows on ARM users? Not in this time frame. "Windows/10.0.* arm64" shows up from time to time and I'd estimate 1-4 monthly users. Platform stats (new) -------------------- total: 84270 Linux -> 29358 34.84% Android -> 28905 34.30% Windows -> 22459 26.65% Darwin -> 3007 03.57% Emscripten -> 426 00.51% *BSD -> 92 00.11% Desktop -> 55350 65.68% Android -> 28905 34.30% iOS -> 15 00.02% Explanation: Starting with 5.9 Luanti sends a precise indication that it's running on Android (and the version), so these numbers only include 5.9 or newer. Note about Darwin: In the first table, Darwin includes both macOS and iOS. In the second table, Darwin is correctly split into Desktop and iOS. You can subtract the two to arrive at 2992 for macOS. Geographic stats (new) ---------------------- total: 84277 Continents: Europe (EU) -> 39565 46.95% North Am. (NA) -> 17493 20.76% Asia (AS) -> 14580 17.30% South Am. (SA) -> 8428 10.00% Africa (AF) -> 3300 03.92% Oceania (OC) -> 907 01.08% Countries (top 10): United States (US) -> 13953 16.56% Germany (DE) -> 10282 12.20% France (FR) -> 6228 07.39% Russia (RU) -> 5579 06.62% India (IN) -> 2890 03.43% Brazil (BR) -> 2718 03.23% Argentina (AR) -> 2500 02.97% United Kingdom (GB) -> 2358 02.80% Spain (ES) -> 1899 02.25% Philippines (PH) -> 1813 02.15% Note: Same as previous section this only covers 5.9 or newer. Android stats ------------- total: 28905 x86 -> 334 01.16% x86_64 -> 796 02.75% armv6/7l -> 3479 12.04% aarch64 -> 24296 84.05% API36 -> 1169 04.04% API35 -> 5528 19.12% API34 -> 4582 15.85% API33 -> 5007 17.32% API32 -> 118 00.41% API31 -> 2773 09.59% API30 -> 2906 10.05% API29 -> 2999 10.38% API28 -> 1627 05.63% API27 -> 707 02.45% API26 -> 405 01.40% API25 -> 168 00.58% API24 -> 209 00.72% API23 -> 511 01.77% API22 -> 180 00.62% API21 -> 16 00.06% Note about API levels: These correspond to Android major/minor versions, see iOS stats --------- total: 52383 iPad -> 24181 46.16% iPhone -> 28172 53.78% iPod -> 30 00.06% +========================+ | big pile of commands | +========================+ fgrep -n '[30/Oct/2025:20:22:19' raw.log | head -1 tail -n +8692592 raw.log | grep "GET /list" > serverlist_10days.log wc -l serverlist_10days.log cat serverlist_10days.log | awk '{ if($1 !~ ":") print $0 }' | wc -l cat serverlist_10days.log | awk '{ if($1 ~ ":") print $0 }' | wc -l ## cat serverlist_10days.log | egrep -c "Mozilla|Opera" cat serverlist_10days.log | egrep -c -v "Mozilla|Opera" cat serverlist_10days.log | egrep -v "Mozilla|Opera" | ./wwwuniq.py game.log # the script filters out log lines from the same IP within 120s of each other ## for v in $(seq 14 -1 10); do count=$(cat game.log | cut -d '"' -f 6-7 | egrep -c "^Luanti/5\.$v") printf '5.%d -> %-7d\n' $v $count done for v in $(seq 9 -1 0); do count=$(cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/5\.$v") printf '5.%d -> %-7d\n' $v $count done cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.17" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.16" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.15" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.14" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.13" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.12" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/(0\.4\.11|gUnknown)" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.10" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest[/ ]0\.4\.9" cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest 0\.4\.8" ## calc.exe ## cat game.log | cut -d '"' -f 6-7 | egrep -c '^(Minetest|Luanti)/[0-9.]+-dev' ## cat game.log | cut -d '"' -f 6-7 | egrep -v "^(Minetest|Luanti)/" | \ cut -d "/" -f 1 | sort | uniq -c | sort -n cat game.log | sed -rn 's|.*\?proto_version_min=([0-9]+)&proto_version_max=([0-9]+).*|\1 \2|gp' > proto.log wc -l proto.log ## for i in $(seq 51 -1 24); do printf "v$i -> %-7d\n" $(grep -c " $i\$" proto.log) done ## for i in $(seq 51 -1 24); do printf "v$i -> %-7d\n" $(awk "{ if($i >= \$1 && $i <= \$2) print $0 }" proto.log | wc -l) done cat game.log | cut -d '"' -f 6-7 | egrep "\(\S+ \S+\)\"" > newer.log cat newer.log | cut -d '(' -f 2 | cut -d ')' -f 1 | \ sed -re 's/i(Phone|Pad|Pod)[0-9,]+/apple/' > plat.log wc -l newer.log ## cat plat.log | egrep -c "(x86|i[3-6]86)$" cat plat.log | egrep -c "(x86_64|amd64)$" cat plat.log | egrep -c "armv[67]l?$" cat plat.log | egrep -c "(aarch64|armv8l?|arm64)$" cat plat.log | egrep -c "apple$" cat plat.log | egrep -c -v "(x86|i[3-6]86|x86_64|amd64|armv[678]l?|aarch64|arm64|apple)$" ## cat newer.log | cut '-d(' -f2 | cut '-d/' -f1 | sort | uniq -c | sort -n calc.exe cat game.log | egrep "\(\S+ \S+\)\"" | cut -d ' ' -f 1 | ./geoiptool.py > geo.log # this script retrives continent and country for an IP, e.g. ("1.1.1.1" -> "1.1.1.1 NA US") wc -l geo.log ## cat geo.log | cut -d " " -f 2 | sort | uniq -c | sort -rn ## cat geo.log | cut -d " " -f 3 | sort | uniq -c | sort -rn | head -10 cat newer.log | cut '-d(' -f2 | grep "Windows/" | cut -d '/' -f2 | cut -d ')' -f1 > winver.log wc -l winver.log ## cat winver.log | grep -c "^10\.0\.2" cat winver.log | grep -c "^10\.0\.1" cat winver.log | grep -c "^6\.[23]" cat winver.log | grep -c "^6\.1" cat winver.log | grep -c "^6\.0" cat winver.log | grep -c "^5\.[12]" cat winver.log | egrep -v "^(5\.[12]|6\.[0-3]|10\.0)" | wc -l cat game.log | egrep 'proto_version_max=(4[4-9]|[5-9][0-9])\b' | cut -d '"' -f 6-7 | egrep "\(\S+ \S+\)\"" > new59.log wc -l new59.log ## cat new59.log | cut '-d(' -f2 | cut '-d/' -f1 | sort | uniq -c | sort -n ## cat new59.log | egrep -c -v "Android/| iP" cat new59.log | fgrep -c "Android/" cat new59.log | fgrep -c " iP" cat game.log | egrep 'proto_version_max=(4[4-9]|[5-9][0-9])\b' | cut -d ' ' -f 1 | ./geoiptool.py > geo59.log wc -l geo59.log ## cat geo59.log | cut -d " " -f 2 | sort | uniq -c | sort -rn ## cat geo59.log | cut -d " " -f 3 | sort | uniq -c | sort -rn | head -10 cat new59.log | grep -o "Android/.*$" | cut -d ')' -f1 > droid.log wc -l droid.log ## cat droid.log | egrep -c "i686$" cat droid.log | egrep -c "x86_64$" cat droid.log | egrep -c "armv[67]l?$" cat droid.log | egrep -c "(aarch64|armv8l?)$" ## for i in $(seq 36 -1 21); do printf "API$i -> %-5d\n" $(awk "{ if(\$1 == \"Android/$i\") print $0 }" droid.log | wc -l) done cat newer.log | egrep "i(Phone|Pad|Pod)" > ios.log wc -l ios.log ## cat ios.log | grep -c iPhone cat ios.log | grep -c iPad cat ios.log | grep -c iPod