Skip to main content

smpsave - Dynamic Provisioner for Private Game Servers

PyPI - Version PyPI - Python Version PyPI Deploy

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.

image

image

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

  1. Bump the version:
    uv version --bump patch   # or minor, major
    
  2. Commit pyproject.toml and uv.lock, then push.
  3. 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.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smpsave 0.3.0
File Size Uploaded
smpsave-0.3.0.tar.gz 56.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smpsave 0.3.0
File Interpreter ABI Platform
smpsave-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 102.2 kB

Release files / smpsave-0.3.0.tar.gz

Download URL smpsave-0.3.0.tar.gz
Size 56.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5566f608582e44a5fc290e5276a8109991d8ded05ae2fb3cc5b81bc187e7e7c5
BLAKE2b-256 checksum
How to use checksums
e96d76404ef01a06537df6db33724a9c834b33d4fda2f9dbbcf9544fbb1aa141
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.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 29, 2026.

Transparency log

Release files / smpsave-0.3.0-py3-none-any.whl

Download URL smpsave-0.3.0-py3-none-any.whl
Size 46.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec4bdba4bbeff30bf28e1885ff048e6ca55f6260d8cff7b3d16149a088bab33b
BLAKE2b-256 checksum
How to use checksums
a05957c8e32c88069d02a9edbb942b6ba7fe59fd73f59c86b33029ff43914fd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.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 29, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page