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.1

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.1
File Size Uploaded
smpsave-0.3.1.tar.gz 57.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smpsave 0.3.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

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