slime-mc 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. slime_mc-1.0.0/.gitignore +56 -0
  2. slime_mc-1.0.0/CHANGELOG.md +69 -0
  3. slime_mc-1.0.0/CONTRIBUTING.md +102 -0
  4. slime_mc-1.0.0/LICENSE +21 -0
  5. slime_mc-1.0.0/PKG-INFO +423 -0
  6. slime_mc-1.0.0/README.md +382 -0
  7. slime_mc-1.0.0/RELEASING.md +99 -0
  8. slime_mc-1.0.0/pyproject.toml +97 -0
  9. slime_mc-1.0.0/src/slime/__init__.py +10 -0
  10. slime_mc-1.0.0/src/slime/__main__.py +6 -0
  11. slime_mc-1.0.0/src/slime/api/__init__.py +1 -0
  12. slime_mc-1.0.0/src/slime/api/adoptium.py +211 -0
  13. slime_mc-1.0.0/src/slime/api/papermc.py +256 -0
  14. slime_mc-1.0.0/src/slime/checks.py +413 -0
  15. slime_mc-1.0.0/src/slime/cli.py +1248 -0
  16. slime_mc-1.0.0/src/slime/config.py +230 -0
  17. slime_mc-1.0.0/src/slime/errors.py +48 -0
  18. slime_mc-1.0.0/src/slime/java.py +279 -0
  19. slime_mc-1.0.0/src/slime/logging_setup.py +39 -0
  20. slime_mc-1.0.0/src/slime/models.py +361 -0
  21. slime_mc-1.0.0/src/slime/process.py +323 -0
  22. slime_mc-1.0.0/src/slime/properties.py +196 -0
  23. slime_mc-1.0.0/src/slime/provision.py +165 -0
  24. slime_mc-1.0.0/src/slime/store.py +145 -0
  25. slime_mc-1.0.0/src/slime/tui/__init__.py +5 -0
  26. slime_mc-1.0.0/src/slime/tui/app.py +184 -0
  27. slime_mc-1.0.0/src/slime/tui/app.tcss +222 -0
  28. slime_mc-1.0.0/src/slime/tui/screens/__init__.py +1 -0
  29. slime_mc-1.0.0/src/slime/tui/screens/confirm.py +48 -0
  30. slime_mc-1.0.0/src/slime/tui/screens/create.py +280 -0
  31. slime_mc-1.0.0/src/slime/tui/screens/dashboard.py +122 -0
  32. slime_mc-1.0.0/src/slime/tui/screens/doctor.py +112 -0
  33. slime_mc-1.0.0/src/slime/tui/screens/java.py +222 -0
  34. slime_mc-1.0.0/src/slime/tui/screens/server.py +219 -0
  35. slime_mc-1.0.0/src/slime/utils/__init__.py +1 -0
  36. slime_mc-1.0.0/src/slime/utils/archives.py +97 -0
  37. slime_mc-1.0.0/src/slime/utils/downloads.py +132 -0
  38. slime_mc-1.0.0/tests/conftest.py +19 -0
  39. slime_mc-1.0.0/tests/fixtures/adoptium_assets.json +17 -0
  40. slime_mc-1.0.0/tests/fixtures/adoptium_releases.json +1 -0
  41. slime_mc-1.0.0/tests/fixtures/fill_builds.json +32 -0
  42. slime_mc-1.0.0/tests/fixtures/fill_projects.json +1 -0
  43. slime_mc-1.0.0/tests/fixtures/fill_versions.json +1 -0
  44. slime_mc-1.0.0/tests/test_adoptium.py +125 -0
  45. slime_mc-1.0.0/tests/test_archives.py +92 -0
  46. slime_mc-1.0.0/tests/test_checks.py +203 -0
  47. slime_mc-1.0.0/tests/test_cli.py +188 -0
  48. slime_mc-1.0.0/tests/test_config.py +101 -0
  49. slime_mc-1.0.0/tests/test_downloads.py +102 -0
  50. slime_mc-1.0.0/tests/test_java.py +277 -0
  51. slime_mc-1.0.0/tests/test_models.py +212 -0
  52. slime_mc-1.0.0/tests/test_papermc.py +222 -0
  53. slime_mc-1.0.0/tests/test_process.py +205 -0
  54. slime_mc-1.0.0/tests/test_properties.py +111 -0
  55. slime_mc-1.0.0/tests/test_provision.py +184 -0
  56. slime_mc-1.0.0/tests/test_store.py +160 -0
  57. slime_mc-1.0.0/tests/test_version.py +28 -0
@@ -0,0 +1,56 @@
1
+ # Byte-compiled / optimized files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Virtual environments
7
+ .venv/
8
+ venv/
9
+ env/
10
+ ENV/
11
+
12
+ # Packaging and build artifacts
13
+ build/
14
+ dist/
15
+ *.egg-info/
16
+ *.egg
17
+ .eggs/
18
+ wheelhouse/
19
+
20
+ # Test and tooling caches
21
+ .pytest_cache/
22
+ .mypy_cache/
23
+ .ruff_cache/
24
+ .coverage
25
+ .coverage.*
26
+ coverage.xml
27
+ htmlcov/
28
+ .tox/
29
+ .nox/
30
+ .hypothesis/
31
+
32
+ # Slime runtime home (when SLIME_HOME points inside the checkout)
33
+ .slime/
34
+ slime-home/
35
+
36
+ # Logs and temporary files
37
+ *.log
38
+ tmp/
39
+ .cache/
40
+
41
+ # IDE and editor files
42
+ .idea/
43
+ .vscode/
44
+ *.swp
45
+ *.swo
46
+ *~
47
+
48
+ # Secrets and local overrides
49
+ .env
50
+ .env.*
51
+ !.env.example
52
+
53
+ # OS metadata
54
+ .DS_Store
55
+ Thumbs.db
56
+ desktop.ini
@@ -0,0 +1,69 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.0.0] - 2026-11-02
11
+
12
+ First public release. This consolidates the 0.1.0 development series, which was
13
+ never published. Slime is distributed as `slime-mc` on PyPI and installs the
14
+ `slime` entry point.
15
+
16
+ ### Added
17
+
18
+ - Full-screen Textual TUI: server dashboard, creation wizard, live console,
19
+ Java manager and environment diagnostics.
20
+ - Typer CLI with commands for servers, Java runtimes, diagnostics and
21
+ configuration.
22
+ - PaperMC Fill API v3 client for Paper, Folia, Velocity and Waterfall,
23
+ including build channels (`STABLE`, `BETA`, `ALPHA`, `ANY`).
24
+ - Eclipse Adoptium API v3 client and Temurin Java manager: download, SHA-256
25
+ verification, safe archive extraction and per-server runtime selection.
26
+ - Server provisioning: jar download, generated `server.properties` and
27
+ `eula.txt`, port, memory and Java version defaults.
28
+ - Foreground server process management with streamed console output, command
29
+ input, graceful stop and per-server logs.
30
+ - Environment checks (`slime doctor`): Python, OS, disk space, port conflicts,
31
+ EULA, jar, Java and `server.properties` consistency, with a CI-friendly exit
32
+ code.
33
+ - TOML configuration (`~/.slime/config.toml`) and `SLIME_HOME` / `--home`
34
+ overrides.
35
+ - Test suite covering models, properties, config, store, checks, API clients,
36
+ provisioning, process handling, CLI, archives, downloads and Java management.
37
+ - GitHub Actions CI for Windows and Linux on Python 3.11-3.14, plus a tagged
38
+ release workflow that builds, publishes to PyPI and creates a GitHub release.
39
+ - Project infrastructure: MIT license, changelog, contribution guide, release
40
+ checklist, `.gitignore` and `.gitattributes`.
41
+
42
+ ### Changed
43
+
44
+ - Adapted the Fill API parsers to the 2026 response format while staying
45
+ tolerant of the older shape.
46
+ - Calendar-based Minecraft versions `26.x+` now default to Java 25.
47
+ - Migrated TUI imports to Textual 2.x (`from textual import work`).
48
+ - API clients now derive their default `User-Agent` from the package version
49
+ instead of hard-coding it.
50
+
51
+ ### Fixed
52
+
53
+ - Removed a circular import between TUI screens and `SlimeApp`.
54
+ - `ServerStore.write_pid()` now creates the parent directory, so a PID file can
55
+ be written before the server directory exists.
56
+ - Replaced `Enum` with `StrEnum`, typed bindings with `ClassVar`, and removed
57
+ unsafe `try/except/pass` blocks; `ruff check .` and `mypy` are clean.
58
+
59
+ ### Known limitations
60
+
61
+ - No cross-process `stop`: a server lives as long as the Slime process that
62
+ started it. Stop it from the TUI, with `Ctrl+C`, or with the `stop` console
63
+ command.
64
+ - Generated proxies (`velocity.toml`, `waterfall.yml`) must be configured
65
+ manually.
66
+ - Windows 7 / 8 / 8.1 are not supported by this branch.
67
+
68
+ [Unreleased]: https://github.com/cizik5064-bit/slime/compare/v1.0.0...HEAD
69
+ [1.0.0]: https://github.com/cizik5064-bit/slime/releases/tag/v1.0.0
@@ -0,0 +1,102 @@
1
+ # Contributing to Slime
2
+
3
+ Thanks for taking the time to help. Slime is a small project, so clear reports
4
+ and focused pull requests are very welcome.
5
+
6
+ ## Before you start
7
+
8
+ - For bugs, open an issue with the Slime version (`slime --version`), your OS,
9
+ Python version and the exact command you ran. Include relevant lines from
10
+ `~/.slime/logs/slime.log`. Never paste tokens, passwords or other secrets.
11
+ - For features, open an issue first so we can agree on the scope before you
12
+ spend time on code.
13
+ - Report security problems privately to the maintainers instead of opening a
14
+ public issue.
15
+
16
+ ## Development setup
17
+
18
+ Requirements: Python 3.11+ and git.
19
+
20
+ ```bash
21
+ git clone https://github.com/cizik5064-bit/slime.git
22
+ cd slime
23
+ python -m venv .venv
24
+ ```
25
+
26
+ Windows:
27
+
28
+ ```powershell
29
+ .venv\Scripts\Activate.ps1
30
+ pip install -e ".[dev]"
31
+ ```
32
+
33
+ Linux/macOS:
34
+
35
+ ```bash
36
+ source .venv/bin/activate
37
+ pip install -e ".[dev]"
38
+ ```
39
+
40
+ Run the app from the checkout with `slime` or `python -m slime`. Use a temporary
41
+ home directory when experimenting so your real servers are not touched:
42
+
43
+ ```powershell
44
+ $env:SLIME_HOME = "$env:TEMP\slime-dev"
45
+ slime doctor
46
+ ```
47
+
48
+ ## Checks
49
+
50
+ Every change must keep these commands green:
51
+
52
+ ```bash
53
+ ruff check .
54
+ mypy
55
+ pytest
56
+ ```
57
+
58
+ `pytest` and the linters run in CI on Windows and Linux for Python 3.11 through
59
+ 3.14. Tests must not depend on network access; use `respx` and the fixtures in
60
+ `tests/fixtures` for HTTP clients.
61
+
62
+ ## Code style
63
+
64
+ - Code, identifiers, UI strings, docstrings and documentation are in English.
65
+ - Keep the existing layout: API clients return dataclasses, provisioning is
66
+ separate from process management, and the TUI only orchestrates services.
67
+ - Add type hints to public functions. Prefer small, testable modules.
68
+ - Do not add dependencies without discussing it in an issue first.
69
+ - Never accept the Minecraft EULA on the user's behalf.
70
+ - Do not log secrets, tokens or personal data.
71
+
72
+ ## Tests
73
+
74
+ - Add or update tests for every behaviour change.
75
+ - Put shared fixtures in `tests/conftest.py`, keep network fixtures in
76
+ `tests/fixtures/`.
77
+ - A bug fix should include a regression test that fails before the fix.
78
+
79
+ ## Commits and pull requests
80
+
81
+ - Use short imperative commit subjects, for example
82
+ `fix: create PID parent directory` or `feat: add Java 25 defaults`.
83
+ - Keep pull requests focused; unrelated refactors belong in a separate PR.
84
+ - Describe what changed, why, and how you tested it. Mention the OS and Python
85
+ version if the change is platform-specific.
86
+ - Update `CHANGELOG.md` under `[Unreleased]` for user-visible changes.
87
+ - Update `README.md` when behaviour, commands or requirements change.
88
+
89
+ ## Versioning
90
+
91
+ Before `1.0.0`, versions are bumped at the maintainer's discretion. After the
92
+ first public release, every user-visible change bumps the version in
93
+ `pyproject.toml` and `src/slime/__init__.py`, and adds a `CHANGELOG.md` entry:
94
+
95
+ - patch for bug fixes and small changes;
96
+ - minor for new functionality;
97
+ - major for incompatible changes.
98
+
99
+ ## License
100
+
101
+ By contributing, you agree that your contribution is licensed under the MIT
102
+ License (see `LICENSE`).
slime_mc-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Slime contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,423 @@
1
+ Metadata-Version: 2.5
2
+ Name: slime-mc
3
+ Version: 1.0.0
4
+ Summary: A friendly Minecraft server manager for PaperMC servers, with a TUI and a CLI.
5
+ Project-URL: Homepage, https://github.com/cizik5064-bit/slime
6
+ Project-URL: Documentation, https://github.com/cizik5064-bit/slime#readme
7
+ Project-URL: Issues, https://github.com/cizik5064-bit/slime/issues
8
+ Project-URL: Changelog, https://github.com/cizik5064-bit/slime/blob/main/CHANGELOG.md
9
+ Author: Slime contributors
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: adoptium,cli,java,minecraft,paper,papermc,server,tui,velocity
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Environment :: Win32 (MS Windows)
16
+ Classifier: Intended Audience :: End Users/Desktop
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: MacOS
19
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 10
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: 3.14
26
+ Classifier: Topic :: Games/Entertainment
27
+ Classifier: Topic :: System :: Systems Administration
28
+ Requires-Python: >=3.11
29
+ Requires-Dist: httpx<1,>=0.27
30
+ Requires-Dist: psutil<8,>=5.9.8
31
+ Requires-Dist: rich<15,>=13.7.1
32
+ Requires-Dist: textual<3,>=0.79
33
+ Requires-Dist: typer<1.0,>=0.12.5
34
+ Provides-Extra: dev
35
+ Requires-Dist: mypy>=1.11; extra == 'dev'
36
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
37
+ Requires-Dist: pytest>=8.2; extra == 'dev'
38
+ Requires-Dist: respx>=0.21; extra == 'dev'
39
+ Requires-Dist: ruff>=0.6; extra == 'dev'
40
+ Description-Content-Type: text/markdown
41
+
42
+ # Slime
43
+
44
+ [![CI](https://github.com/cizik5064-bit/slime/actions/workflows/ci.yml/badge.svg)](https://github.com/cizik5064-bit/slime/actions/workflows/ci.yml)
45
+ [![PyPI](https://img.shields.io/pypi/v/slime-mc.svg)](https://pypi.org/project/slime-mc/)
46
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
47
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](pyproject.toml)
48
+
49
+ **A friendly Minecraft server manager for humans, not sysadmins.**
50
+
51
+ Slime is a Python application with a full-screen terminal UI (TUI) and a
52
+ scriptable CLI. It helps beginners create, configure, run and troubleshoot
53
+ Minecraft servers without hunting for jars, Java versions or API URLs.
54
+
55
+ > **Status: 1.0.0 — first public release.** Core features are implemented and
56
+ > covered by tests, but Slime is still young. Expect rough edges and please
57
+ > report them on the issue tracker.
58
+
59
+ ---
60
+
61
+ ## Why Slime?
62
+
63
+ Setting up a Minecraft server usually involves five different websites, a Java
64
+ version you did not know you needed, a EULA you have never read, and a port
65
+ that is already in use. Slime turns that into a guided flow:
66
+
67
+ ```text
68
+ slime java install 21
69
+ slime server create survival --project paper --memory 4096 --accept-eula
70
+ slime server run survival
71
+ ```
72
+
73
+ Or just run `slime` and use the TUI.
74
+
75
+ ## Features
76
+
77
+ - **PaperMC Fill API v3** — download the latest builds of Paper, Folia,
78
+ Velocity and Waterfall directly from the official API. No scraping, no
79
+ BuildTools.
80
+ - **Temurin Java manager** — install the exact Eclipse Adoptium JDK a server
81
+ needs (8, 11, 16, 17, 21, 25), per platform and architecture. Slime downloads
82
+ the archive, verifies the SHA-256 checksum, extracts it into `~/.slime/java`
83
+ and records the exact `bin/java` path.
84
+ - **TUI + CLI** — a Textual interface for browsing servers, editing settings,
85
+ watching the console live and sending commands; a Typer CLI for automation.
86
+ - **Server lifecycle** — create, start, stop, restart, delete and inspect
87
+ servers. A foreground console streams logs and accepts commands via stdin.
88
+ - **Environment checks** — Python, OS, disk space, available RAM, port
89
+ conflicts, EULA status, server jar, `server.properties` consistency and Java
90
+ availability.
91
+ - **Beginner-friendly defaults** — sensible `server.properties`, MOTD, port,
92
+ memory and Java version detection; clear error messages with actionable hints.
93
+ - **Cross-platform** — Windows 10+ and Linux (macOS works but is not a primary
94
+ target). Windows 7/8/8.1 will require a separate legacy build; see
95
+ [Platform support](#platform-support).
96
+ - **Local-first** — everything lives in `~/.slime` by default. No account, no
97
+ telemetry, no cloud.
98
+
99
+ ## Supported projects
100
+
101
+ | Project | Kind | API | Java (by default) |
102
+ | --- | --- | --- | --- |
103
+ | Paper | Server | [Fill v3](https://fill.papermc.io/v3) | 21 for 1.20.5+, 17 for 1.17–1.20.4, 8 for ≤1.16.5 |
104
+ | Folia | Server | Fill v3 | same as Paper |
105
+ | Velocity | Proxy | Fill v3 | 17 |
106
+ | Waterfall | Proxy | Fill v3 | 11 |
107
+
108
+ Slime only uses the official PaperMC Fill API for these four projects. Spigot,
109
+ Forge, NeoForge and Fabric are not supported yet.
110
+
111
+ Proxies generate their own `velocity.toml` / `waterfall.yml` on first start.
112
+ Slime prepares the directory and jar, then leaves proxy networking config to
113
+ you.
114
+
115
+ ## Requirements
116
+
117
+ - **Python 3.11+**
118
+ - **Windows 10+** or **Linux** (x86-64 or ARM64)
119
+ - Internet access for the first setup (PaperMC and Adoptium APIs)
120
+ - At least 1 GiB of free disk space; 5 GiB+ recommended
121
+
122
+ ## Installation
123
+
124
+ Slime requires Python 3.11 or newer.
125
+
126
+ The recommended way is an isolated installation with
127
+ [pipx](https://pipx.pypa.io/):
128
+
129
+ ```bash
130
+ pipx install slime-mc
131
+ ```
132
+
133
+ Or install it into the current environment with pip:
134
+
135
+ ```bash
136
+ pip install slime-mc
137
+ ```
138
+
139
+ Run it:
140
+
141
+ ```bash
142
+ slime --version
143
+ slime
144
+ ```
145
+
146
+ ### From source (development)
147
+
148
+ ```bash
149
+ git clone https://github.com/cizik5064-bit/slime.git
150
+ cd slime
151
+ python -m venv .venv
152
+ ```
153
+
154
+ Windows:
155
+
156
+ ```powershell
157
+ .venv\Scripts\Activate.ps1
158
+ pip install -e ".[dev]"
159
+ ```
160
+
161
+ Linux/macOS:
162
+
163
+ ```bash
164
+ source .venv/bin/activate
165
+ pip install -e ".[dev]"
166
+ ```
167
+
168
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow.
169
+
170
+ ## Quick start (CLI)
171
+
172
+ ```bash
173
+ # 1. Install the Java version the server needs
174
+ slime java install 21
175
+
176
+ # 2. Create a Paper server using the latest Minecraft version
177
+ slime server create survival --project paper --memory 4096 --accept-eula
178
+
179
+ # 3. Start it in the foreground and attach the console
180
+ slime server run survival
181
+ ```
182
+
183
+ Inside the console, type Minecraft commands (`op Notch`, `say hello`, `stop`).
184
+ Press **Ctrl+C** to stop the server gracefully.
185
+
186
+ Useful follow-ups:
187
+
188
+ ```bash
189
+ slime server list
190
+ slime server info survival --checks
191
+ slime doctor
192
+ slime server versions --project paper
193
+ slime server builds 1.21.4 --project paper
194
+ ```
195
+
196
+ Choosing a version and build explicitly:
197
+
198
+ ```bash
199
+ slime server create creative \
200
+ --project paper \
201
+ --version 1.21.4 \
202
+ --channel STABLE \
203
+ --memory 6144 \
204
+ --port 25566 \
205
+ --accept-eula
206
+ ```
207
+
208
+ ## Quick start (TUI)
209
+
210
+ ```bash
211
+ slime
212
+ ```
213
+
214
+ | Key | Action |
215
+ | --- | --- |
216
+ | `n` | New server |
217
+ | `j` | Java manager |
218
+ | `d` | Doctor (environment checks) |
219
+ | `r` | Refresh |
220
+ | `q` | Quit (stops servers started by the TUI) |
221
+ | `Enter` | Open the selected server |
222
+ | `Esc` | Back |
223
+
224
+ The server screen shows live console output, a command input, and Start / Stop /
225
+ Restart / Delete buttons. Servers started from the TUI keep running while you
226
+ navigate between screens, and are stopped gracefully when you quit Slime.
227
+
228
+ ## Commands
229
+
230
+ ### Global
231
+
232
+ ```text
233
+ slime [--home PATH] [--verbose] [--version]
234
+ slime tui
235
+ slime doctor [--server NAME] [--json]
236
+ ```
237
+
238
+ With no arguments, `slime` opens the TUI when stdout is a terminal.
239
+
240
+ ### Servers
241
+
242
+ ```text
243
+ slime server list [--json]
244
+ slime server create NAME [--project paper|folia|velocity|waterfall]
245
+ [--version VERSION] [--build N] [--channel STABLE|BETA|ALPHA|ANY]
246
+ [--memory MB] [--port PORT] [--java MAJOR]
247
+ [--motd TEXT] [--accept-eula]
248
+ slime server info NAME [--checks] [--json]
249
+ slime server run NAME [--memory MB] [--java PATH] [--no-console]
250
+ slime server eula NAME [--accept/--revoke]
251
+ slime server delete NAME [--yes] [--keep-files]
252
+ slime server path NAME
253
+ slime server versions [--project PROJECT] [--limit N] [--json]
254
+ slime server builds VERSION [--project PROJECT] [--channel CHANNEL] [--limit N] [--json]
255
+ ```
256
+
257
+ ### Java
258
+
259
+ ```text
260
+ slime java list [--json]
261
+ slime java releases [--json]
262
+ slime java install MAJOR [--force] [--os OS] [--arch ARCH]
263
+ slime java remove MAJOR [--yes]
264
+ slime java which [MAJOR] [--server NAME]
265
+ ```
266
+
267
+ ### Configuration
268
+
269
+ ```text
270
+ slime config show [--json]
271
+ slime config set KEY VALUE
272
+ slime config path
273
+ ```
274
+
275
+ Editable settings: `default_memory_mb`, `default_java_major`, `default_port`,
276
+ `accept_eula_default`.
277
+
278
+ ## How Java selection works
279
+
280
+ Each server records the Java **major** it needs. Slime resolves it in this
281
+ order:
282
+
283
+ 1. An explicit `java_path` on the server (set with `slime server run --java`).
284
+ 2. A Temurin runtime managed by Slime with the same major
285
+ (`~/.slime/java/temurin-<major>-<os>-<arch>`).
286
+ 3. A system Java found on `PATH` or via `JAVA_HOME`, but only if its major
287
+ matches exactly.
288
+
289
+ If nothing matches, Slime tells you exactly what to run:
290
+
291
+ ```text
292
+ Error: Java 21 is required by survival (Paper 1.21.4), but it is not installed.
293
+ Hint: Install it with: slime java install 21
294
+ ```
295
+
296
+ Install specific runtimes with:
297
+
298
+ ```bash
299
+ slime java install 17
300
+ slime java install 21
301
+ slime java list
302
+ ```
303
+
304
+ Slime never installs a JDK silently. It also never overwrites `eula=true`
305
+ without explicit confirmation (`--accept-eula` or an interactive prompt).
306
+
307
+ ## Where files live
308
+
309
+ Default home: `~/.slime` (override with `SLIME_HOME` or `--home`).
310
+
311
+ ```text
312
+ ~/.slime/
313
+ config.toml # settings
314
+ servers/
315
+ <name>/
316
+ slime.json # Slime metadata (project, build, Java, port, RAM)
317
+ server.jar # downloaded PaperMC jar
318
+ server.properties # generated for servers
319
+ eula.txt # generated for servers
320
+ world/ # created by Minecraft on first start
321
+ java/
322
+ temurin-21-windows-x64/
323
+ bin/java.exe
324
+ slime-java.json
325
+ cache/ # temporary downloads
326
+ logs/
327
+ slime.log
328
+ <server>.log # full console log per server
329
+ ```
330
+
331
+ `server.properties` is only created if it is missing: existing user values are
332
+ preserved. Slime warns when the port in `server.properties` disagrees with the
333
+ port recorded in `slime.json`.
334
+
335
+ ## Environment checks
336
+
337
+ `slime doctor` (or `d` in the TUI) reports:
338
+
339
+ - Python version (3.11+)
340
+ - Operating system (Windows 10+, Linux, macOS)
341
+ - Writable Slime home directory
342
+ - Free disk space (error below 1 GiB, warning below 5 GiB)
343
+ - Per server: jar, Java runtime, EULA, port, RAM, `server.properties` port
344
+ - Installed Java runtimes
345
+
346
+ Exit code `2` means at least one check failed, which makes it usable in CI.
347
+
348
+ ## Platform support
349
+
350
+ | Platform | Status |
351
+ | --- | --- |
352
+ | Windows 10 / 11 | Primary target |
353
+ | Linux x86-64 | Primary target |
354
+ | Linux ARM64 | Supported by Adoptium; lightly tested |
355
+ | macOS | Should work, not a primary target |
356
+ | Windows 8.1 | Not supported by Python 3.11+ |
357
+ | Windows 7 / 8 | Needs a separate legacy build (Python 3.8, older Textual) |
358
+
359
+ Windows 7 and 8/8.1 support cannot be added to this codebase: Python 3.9+ and
360
+ modern Textual do not run there. A future `0.x-legacy` build may target Python
361
+ 3.8 with pinned dependencies. Until then, Slime prints a clear compatibility
362
+ error on unsupported Windows versions.
363
+
364
+ ## Development
365
+
366
+ ```bash
367
+ python -m venv .venv
368
+ source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
369
+ pip install -e ".[dev]"
370
+
371
+ ruff check .
372
+ pytest
373
+ ```
374
+
375
+ Project layout:
376
+
377
+ ```text
378
+ src/slime/
379
+ cli.py # Typer commands
380
+ tui/ # Textual app, screens, CSS
381
+ api/papermc.py # Fill API v3 client
382
+ api/adoptium.py # Adoptium API v3 client
383
+ java.py # Temurin install/discovery
384
+ provision.py # create-server flow
385
+ process.py # server process + console
386
+ checks.py # environment checks
387
+ store.py # ~/.slime/server registry
388
+ models.py # data models and validation
389
+ properties.py # server.properties / eula.txt
390
+ tests/ # pytest suite (in progress)
391
+ ```
392
+
393
+ The design favours explicit, testable modules: API clients return dataclasses,
394
+ provisioning is separated from process management, and the TUI only orchestrates
395
+ services.
396
+
397
+ ## Roadmap
398
+
399
+ - [x] Core architecture, models and validation
400
+ - [x] Fill API v3 client (Paper, Folia, Velocity, Waterfall)
401
+ - [x] Adoptium Temurin client and Java manager
402
+ - [x] CLI (servers, Java, diagnostics, config)
403
+ - [x] Textual TUI (dashboard, server console, create wizard, Java, doctor)
404
+ - [x] Full test suite and CI on Windows + Linux
405
+ - [x] First public release (1.0.0)
406
+ - [x] Packaging on PyPI (`slime-mc`)
407
+ - [ ] Backups and restore
408
+ - [ ] Plugin/mod browser (Modrinth / Hangar)
409
+ - [ ] RCON console and cross-process server control
410
+ - [ ] Legacy Windows 7/8.1 build
411
+ - [ ] Standalone binaries via PyInstaller
412
+
413
+ ## Disclaimer
414
+
415
+ Slime is an unofficial community project. It is not affiliated with Mojang,
416
+ Microsoft, PaperMC, or Eclipse Adoptium. Minecraft is a trademark of Mojang
417
+ Studios. By creating a server you agree to the
418
+ [Minecraft EULA](https://aka.ms/MinecraftEULA); Slime only records your
419
+ explicit acceptance and never accepts it for you.
420
+
421
+ ## License
422
+
423
+ MIT — see [LICENSE](LICENSE).