.forgejo/workflows | ||
.github | ||
.vscode | ||
.gitignore | ||
.prettierrc | ||
bun.lock | ||
eslint.config.js | ||
index.ts | ||
jsr.json | ||
LICENSE | ||
package.json | ||
README.md | ||
tsconfig.json |
@hloth/minecraft-query
The fastest lightweight JavaScript wrapper for Minecraft's query protocol. Get MOTD, online players, version and other metadata about Minecraft server in JS. Full TypeScript support, ESM-only, no dependencies, tested on Bun and Node.js v22. Works on Edge.
Install
- Bun:
bun add @hloth/minecraft-query
- NPM:
npm install @hloth/minecraft-query
- Yarn:
yarn add @hloth/minecraft-query
- PNPM:
pnpm add @hloth/minecraft-query
- JSR:
jsr install @hloth/minecraft-query
Usage
import { getPlayers } from "@hloth/minecraft-query";
const players = await getPlayers("demo.mcstatus.io");
// -> ['player1', 'player2', 'jeb']
import { getBasicInfo } from "@hloth/minecraft-query";
const { motd, onlinePlayers, maxPlayers } = await getBasicInfo("demo.mcstatus.io");
// -> { motd: 'A Minecraft Server', onlinePlayers: 0, maxPlayers: 20 }
API reference
arg
can be either a hostname (with default port 25565) or an object of type:
type MinecraftQueryOptions = {
/** Only host, no https protocol. E.g. `example.org`, not `https://example.org` */
hostname: MinecraftHostname;
/** Default is 25565 */
port?: number;
/** Default is 2000ms (2 seconds) */
timeoutMs?: number;
/** Default is 3 */
retries?: number;
};
Two types of responses are:
Basic info:
type BasicResponse = {
/** With Minecraft formatting characters */
motd: string;
/** Hardcoded to `SMP` */
gametype: string | null;
/** World name */
map: string;
onlinePlayers: number;
maxPlayers: number;
ipAddress: string;
};
and full info:
type FullResponse = BasicResponse & {
/** Everything in BasicResponse and ... */
/** Hardcoded to `MINECRAFT` */
gameId: string;
/** E.g. `1.20.1` */
version: string;
software: string | null;
plugins: string[];
port: number;
players: string[];
};
getBasicInfo(arg): Promise<BasicResponse>
Get MOTD, gametype, map, online players, max players and IP address of the server.
getFullInfo(arg): Promise<FullResponse>
Get MOTD, gametype, map, online players, max players, IP address, game ID, version, server software, plugins, port and list of online players nicknames.
Syntax sugar helpers:
getMotd(): Promise<string>
getGametype(): Promise<string | null>
getMap(): Promise<string>
getOnlinePlayers(): Promise<number>
getMaxPlayers(): Promise<number>
getIpAddress(): Promise<string>
getGameId(): Promise<string>
getVersion(): Promise<string>
getSoftware(): Promise<string | null>
getPlugins(): Promise<string[]>
getPort(): Promise<number>
getPlayers(): Promise<string[]>
They are making the same getBasicInfo/getFullInfo call under the hood and returning only the requested property. If you need more than one property, consider using getBasicInfo/getFullInfo instead to avoid multiple network calls.
License
Donate
hloth.dev/donate · Tor: hlothdevzkti6suoksy7lcy7hmpxnr3msu5waokzaslsi2mnx5ouu4qd.onion/donate