Skip to main content

freepod

Take a local project directory to a running deployment on freepod.eu.

pip install freepod || uv tool install freepod
cd myapp
freepod login      # sign in through the browser
freepod init       # choose a hostname for this project
freepod deploy     # https://myapp.freepod.eu

deploy packs the working tree, uploads it, builds a container image on the platform and releases it. By the time the command returns, the app is live on its own hostname over HTTPS. Ship a new version by running it again.

There is no Dockerfile to write and nothing to configure: Railpack detects the stack — Node, Python, Go, Java, PHP, Ruby, Rust and more — and builds an image from your source as it is.

What you need

  • A Freepod account. freepod login opens the sign-in page, which is also where you can register.
  • Python 3.9 or newer, for the CLI itself. The project you deploy can be in any language Railpack supports.
  • An app that listens on $PORT. The platform assigns the port and passes it in the environment, so bind 0.0.0.0:$PORT (process.env.PORT, os.environ["PORT"], …) rather than a fixed number. An app that picks its own port receives no traffic.

Deployments have no persistent disk. Whatever the app writes to its own filesystem is gone when it restarts, and at every release.

Commands

Command What it does
freepod login Sign in, and remember the credential.
freepod init Set the current directory up as a project: choose a hostname, write .freepod.json.
freepod deploy Pack, build and release the current project.
freepod builds List your builds, most recent first.
freepod delete Delete this project's deployment.
freepod whoami Report who you are signed in as.
freepod logout Forget the stored credential.

freepod --help and freepod <command> --help cover the flags.

Hostnames

init asks for one. A bare name becomes a subdomain of the platform: myapp is served at myapp.freepod.eu. To use a domain of your own, point a CNAME at freepod.eu first, then give init the full name. Certificates are issued and renewed for you either way.

.freepod.json

init writes it, and it is meant to be committed. It records the hostname you chose and which deployment this directory belongs to, so the next deploy — yours, a coworker's, or CI's — updates that same app instead of creating a second one. To change a value, edit the file; the next deploy applies it.

What gets uploaded

The working tree, minus .git/, anything your .gitignore excludes, and the usual build output (node_modules/, .venv/, __pycache__/, dist/, …). A .freepodignore file — same syntax as .gitignore, and applied last — keeps out anything else the build does not need.

Re-including a file follows git's rules, with one wrinkle worth knowing: the negation has to name the path (!node_modules/patched.js; a bare !patched.js does nothing), and nothing beneath a directory you excluded yourself can come back. Exclude build/* rather than build/ if you need an exception.

Output

The address is the only thing deploy writes to stdout. The build log, the progress bar and every status line go to stderr:

URL=$(freepod deploy)

Deployments are listed and managed at freepod.eu. Source and issues: github.com/erikvanzijst/freepod.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freepod-0.1.2.tar.gz (102.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freepod-0.1.2-py3-none-any.whl (62.3 kB view details)

Uploaded Python 3

File details

Details for the file freepod-0.1.2.tar.gz.

File metadata

  • Download URL: freepod-0.1.2.tar.gz
  • Upload date:
  • Size: 102.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for freepod-0.1.2.tar.gz
Algorithm Hash digest
SHA256 07fa6ea883142a3bfb3d9b84bf677b9bbb328a51a1e0fecd92d7a55914afa0d0
MD5 a10719d62b42e8efd69717ed725042c6
BLAKE2b-256 882142481a3be01b32c6c9f74c2288e7d0164d88b353516dce88593e54837f03

See more details on using hashes here.

Provenance

The following attestation bundles were made for freepod-0.1.2.tar.gz:

Publisher: publish-cli.yml on erikvanzijst/freepod

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file freepod-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: freepod-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 62.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for freepod-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 116fcedc4e82d06edf8ae17ba5cd0f0d30c7c7408e89d45f710ad3fdd4de12d7
MD5 7c4d4b20dd2fa29a6f060d9a2cca3e1a
BLAKE2b-256 8eafa4918e9ca7879bf38c7e13de1f1891fa537ca08af906bcf1ef6ede54481f

See more details on using hashes here.

Provenance

The following attestation bundles were made for freepod-0.1.2-py3-none-any.whl:

Publisher: publish-cli.yml on erikvanzijst/freepod

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.11.1

2 files

0.11.0

2 files

0.10.0

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

This release

0.1.2 This release

2 files

0.1.1

2 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