smpsave - Dynamic Provisioner for Private Game Servers
Save money hosting private game servers on demand.
- Start and stop your game server on demand through Discord, let your friends do the same.
- Back up server files between restarts.
- Automatically shut off the server to save on costs.
See documentation for more info.
Installing
Install as a standalone tool with uv:
uv tool install smpsave
This puts smpsave-cli on your PATH in its own isolated environment. You can also run it
without installing:
uvx --from smpsave smpsave-cli --help
Or install via pip:
pip install smpsave
To install from a checkout of this repository:
uv tool install .
Developing
Create the virtualenv and install all dependencies (including dev and docs tools):
uv sync
Run the CLI from the checkout:
uv run smpsave-cli --help
Build the docs:
uv run sphinx-build docs docs/_build
Testing and code quality
Run the unit tests with pytest:
uv run pytest
Lint with ruff (add --fix to auto-fix):
uv run ruff check
uv run ruff check --fix
Check or apply formatting with ruff (use --check to verify without changing files):
uv run ruff format --check
uv run ruff format
Type-check with mypy:
uv run mypy smpsave
Building
Build the sdist and wheel into dist/:
uv build
Releasing
- Bump the version:
uv version --bump patch # or minor, major
- Commit
pyproject.tomlanduv.lock, then push. - Publish a GitHub release with the tag
v<version>(e.g.v0.2.3). This triggers the PyPI deploy workflow.
Elevator pitch
Want a dedicated server powerful enough for your favorite game, but don't want to pay a cloud host
nearly $50 per month? Use smpsave to only pay for what you need.
Let's say you play on your private game server 10 hours a week.
Billing before using smpsave:
- Linode 8GB shared CPU, running 24/7 for all ~720 hours in a month: $48
- With only ~40 hours of actual play, ~94% of that cost is wasted money.
Billing after using smpsave:
- Linode 8GB shared CPU, running 10 hours a week or ~40 hours a month: $2.88
While this could be achieved by having someone manually provision the server as needed, that individual becomes a single point of failure for keeping the game running. By exposing the server controls through Discord, anyone in the group can spin up the server when they want to play.
Metadata
Release files for smpsave 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| smpsave-0.3.1.tar.gz | 57.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| smpsave-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.1 kB
Release files / smpsave-0.3.1.tar.gz
| Download URL | smpsave-0.3.1.tar.gz |
|---|---|
| Size | 57.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ef1f82444c8c6c1f502de2c5c15dc846d749639a3ef9b1fab45e366bab6fe974
|
|
BLAKE2b-256 checksum How to use checksums |
a0132b8dfcd1c1776130b0e059c30a1e78b91297da3bda0a6a74aac339efd59a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / smpsave-0.3.1-py3-none-any.whl
| Download URL | smpsave-0.3.1-py3-none-any.whl |
|---|---|
| Size | 46.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c42197352f037ab314b7e86b851a5cb4720d50858780a644bbad140ec5a819fe
|
|
BLAKE2b-256 checksum How to use checksums |
dcb277b3cedc24886728e09a24c0a147000afed94e88802390a9795c2c2a3ec7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency log