Minecraft Status is a cross-platform Python application that reads local Minecraft Java Edition world data and publishes a Discord Rich Presence.
It is designed for Windows, macOS, and Linux, and it supports background operation, Discord reconnects, optional auto-start, encrypted local user configuration, and multiple Minecraft save formats.
session.lockstart, stop, restart, status, and logssetup and config client-id for Client ID management without editing source filesplayers/ storage and dimensions/ storagepypresence currently supports Python 3.9 and newer. See its documentation for current package information.
Clone the repository and create a virtual environment:
python -m venv .venv
Linux/macOS:
source .venv/bin/activate
Windows PowerShell:
.venv\\Scripts\\Activate.ps1
Install the package:
python -m pip install -U pip
python -m pip install -e .
For development:
python -m pip install -e '.[dev]'
Optional OS credential-store integration:
python -m pip install -e '.[keyring]'
Create a Discord application at:
https://discord.com/developers/applications
Upload Rich Presence assets in the application and note their asset keys. The defaults in the project expect:
minecraft for the large imageminecraft for the small imageThe application uses the Discord desktop client's local IPC connection. Your Discord Client ID is stored locally and is not included in this repository.
Configure the Client ID once:
minecraft-status setup
The application validates the ID through Discord before saving it.
To change it later:
minecraft-status config client-id
The stored configuration is encrypted locally. When an OS credential store is available, the encryption key is kept there. Otherwise a local key file with restrictive permissions is used as a fallback. The encrypted configuration and key are ignored by Git.
Start in the background:
minecraft-status start
Check the process:
minecraft-status status
Stop it:
minecraft-status stop
Restart it:
minecraft-status restart
Run in the foreground for development:
minecraft-status run
Show recent logs:
minecraft-status logs
Show 100 lines:
minecraft-status logs --lines 100
Follow logs live:
minecraft-status logs --follow
Clear the log:
minecraft-status logs --clear
Auto-start is disabled by default.
Enable it explicitly:
minecraft-status autostart enable
Disable it:
minecraft-status autostart disable
Check it:
minecraft-status autostart status
Auto-start does not start Minecraft itself. It only starts Minecraft Status when you log into your operating system.
Minecraft Status reads local Minecraft save data only to build the Presence shown in Discord.
The application does not upload the user's Client ID or local Minecraft files to a project server.
The local configuration file is encrypted. The repository contains no user configuration, encryption key, PID file, or runtime logs.
Rich Presence itself is visible on Discord according to Discord's activity/privacy behavior.
The reader is structured around the actual world layout instead of assuming one release format.
Covered layouts include:
playerdata/<uuid>.datplayers/data/<uuid>.datData.Player fallbackstats/<uuid>.jsonplayers/stats/<uuid>.jsonachievement.* entriesplayers/advancements/<uuid>.jsonMinecraft 26.1 introduced a major world-storage change: default dimensions moved under dimensions/minecraft/..., and player storage moved under players/. The reader explicitly handles those paths.
Vanilla advancement names are bundled from Minecraft 26.2 English localization, while legacy 1.8.9 achievement names are bundled from the 1.8.9 English localization. Unknown advancement IDs, including modded ones, fall back to a readable ID-derived name instead of being silently dropped.
Recipe advancements such as minecraft:recipes/... are not counted as player advancements because they are recipe-unlock progress rather than the normal advancement tabs.
This project tests real 26.x data through fixtures and parser compatibility. Real older-version world fixtures should be added before claiming a specific older version is fully integration-tested.
Run the included test runner:
python -m tests.run_all
Or use pytest:
pytest
The tests/fixtures/ directory contains small synthetic JSON samples for legacy and modern stats/advancements so format compatibility can be tested without launching Minecraft.
minecraft-status/
├── src/
│ └── minecraft_status/
│ ├── main.py
│ ├── config.py
│ ├── user_config.py
│ ├── secure_store.py
│ ├── process_manager.py
│ ├── autostart_manager.py
│ └── minecraft_reader/
│ ├── advancement_names.py
│ └── ...
├── tests/
│ ├── test_advancement_names.py
│ └── fixtures/
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
├── README.md
├── LICENSE
└── .gitignore
This project is licensed under the GNU General Public License v3.0 or later. See LICENSE.
24 commits
Python
100.0%
Minecraft Status is a cross-platform Python application that reads local Minecraft Java Edition world data and publishes a Discord Rich Presence.
It is designed for Windows, macOS, and Linux, and it supports background operation, Discord reconnects, optional auto-start, encrypted local user configuration, and multiple Minecraft save formats.
session.lockstart, stop, restart, status, and logssetup and config client-id for Client ID management without editing source filesplayers/ storage and dimensions/ storagepypresence currently supports Python 3.9 and newer. See its documentation for current package information.
Clone the repository and create a virtual environment:
python -m venv .venv
Linux/macOS:
source .venv/bin/activate
Windows PowerShell:
.venv\\Scripts\\Activate.ps1
Install the package:
python -m pip install -U pip
python -m pip install -e .
For development:
python -m pip install -e '.[dev]'
Optional OS credential-store integration:
python -m pip install -e '.[keyring]'
Create a Discord application at:
https://discord.com/developers/applications
Upload Rich Presence assets in the application and note their asset keys. The defaults in the project expect:
minecraft for the large imageminecraft for the small imageThe application uses the Discord desktop client's local IPC connection. Your Discord Client ID is stored locally and is not included in this repository.
Configure the Client ID once:
minecraft-status setup
The application validates the ID through Discord before saving it.
To change it later:
minecraft-status config client-id
The stored configuration is encrypted locally. When an OS credential store is available, the encryption key is kept there. Otherwise a local key file with restrictive permissions is used as a fallback. The encrypted configuration and key are ignored by Git.
Start in the background:
minecraft-status start
Check the process:
minecraft-status status
Stop it:
minecraft-status stop
Restart it:
minecraft-status restart
Run in the foreground for development:
minecraft-status run
Show recent logs:
minecraft-status logs
Show 100 lines:
minecraft-status logs --lines 100
Follow logs live:
minecraft-status logs --follow
Clear the log:
minecraft-status logs --clear
Auto-start is disabled by default.
Enable it explicitly:
minecraft-status autostart enable
Disable it:
minecraft-status autostart disable
Check it:
minecraft-status autostart status
Auto-start does not start Minecraft itself. It only starts Minecraft Status when you log into your operating system.
Minecraft Status reads local Minecraft save data only to build the Presence shown in Discord.
The application does not upload the user's Client ID or local Minecraft files to a project server.
The local configuration file is encrypted. The repository contains no user configuration, encryption key, PID file, or runtime logs.
Rich Presence itself is visible on Discord according to Discord's activity/privacy behavior.
The reader is structured around the actual world layout instead of assuming one release format.
Covered layouts include:
playerdata/<uuid>.datplayers/data/<uuid>.datData.Player fallbackstats/<uuid>.jsonplayers/stats/<uuid>.jsonachievement.* entriesplayers/advancements/<uuid>.jsonMinecraft 26.1 introduced a major world-storage change: default dimensions moved under dimensions/minecraft/..., and player storage moved under players/. The reader explicitly handles those paths.
Vanilla advancement names are bundled from Minecraft 26.2 English localization, while legacy 1.8.9 achievement names are bundled from the 1.8.9 English localization. Unknown advancement IDs, including modded ones, fall back to a readable ID-derived name instead of being silently dropped.
Recipe advancements such as minecraft:recipes/... are not counted as player advancements because they are recipe-unlock progress rather than the normal advancement tabs.
This project tests real 26.x data through fixtures and parser compatibility. Real older-version world fixtures should be added before claiming a specific older version is fully integration-tested.
Run the included test runner:
python -m tests.run_all
Or use pytest:
pytest
The tests/fixtures/ directory contains small synthetic JSON samples for legacy and modern stats/advancements so format compatibility can be tested without launching Minecraft.
minecraft-status/
├── src/
│ └── minecraft_status/
│ ├── main.py
│ ├── config.py
│ ├── user_config.py
│ ├── secure_store.py
│ ├── process_manager.py
│ ├── autostart_manager.py
│ └── minecraft_reader/
│ ├── advancement_names.py
│ └── ...
├── tests/
│ ├── test_advancement_names.py
│ └── fixtures/
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
├── README.md
├── LICENSE
└── .gitignore
This project is licensed under the GNU General Public License v3.0 or later. See LICENSE.
24 commits
Python
100.0%