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 loginopens 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 bind0.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.
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 skill |
Install deployment instructions for your coding agents. |
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.
Persistence
Deployments have no persistent disks or volumes. Whatever the app writes to its own filesystem is gone when it restarts, and at every release.
Instead, each pod has its own private S3-compatible bucket for object storage.
Use with any aws-s3 client. S3_BUCKET, BUCKET_NAME and AWS_* environment
variables and access keys are already set.
.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)
Deploying with a coding agent
Install the freepod skill:
freepod skill install
Then just prompt:
Build a URL shortener for freepod and deploy it to links.freepod.eu
Supported: Claude Code, Codex, OpenCode, Amp, Gemini CLI
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file freepod-0.2.1.tar.gz.
File metadata
- Download URL: freepod-0.2.1.tar.gz
- Upload date:
- Size: 114.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a4b4f0d9c4efa79a7b32f07f9eaea6c54d5db14d18620f2715d95aa4e31c9ea
|
|
| MD5 |
3a9a08f88ff40524d34a457c028a8cb0
|
|
| BLAKE2b-256 |
976b7f04ff4c2cf10a9e05e6639fef28370c995896740fa997716295c679047a
|
Provenance
The following attestation bundles were made for freepod-0.2.1.tar.gz:
Publisher:
publish-cli.yml on erikvanzijst/freepod
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
freepod-0.2.1.tar.gz -
Subject digest:
0a4b4f0d9c4efa79a7b32f07f9eaea6c54d5db14d18620f2715d95aa4e31c9ea - Sigstore transparency entry: 2504193735
- Sigstore integration time:
-
Permalink:
erikvanzijst/freepod@a39d25b7539bd8d7d602d4395c294f727368407a -
Branch / Tag:
refs/tags/freepod-v0.2.1 - Owner: https://github.com/erikvanzijst
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@a39d25b7539bd8d7d602d4395c294f727368407a -
Trigger Event:
push
-
Statement type:
File details
Details for the file freepod-0.2.1-py3-none-any.whl.
File metadata
- Download URL: freepod-0.2.1-py3-none-any.whl
- Upload date:
- Size: 72.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dbebc4e93190dc881507c5e4475bf588f9ad0d33e0ce6cf2522aa1f04e10da9
|
|
| MD5 |
52b733a7bf680471ad6a1c6cbf7f9723
|
|
| BLAKE2b-256 |
394465a10656fe79a50af441af7620f2a3a399001b3ac8f3cf5edc8bc255c0dd
|
Provenance
The following attestation bundles were made for freepod-0.2.1-py3-none-any.whl:
Publisher:
publish-cli.yml on erikvanzijst/freepod
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
freepod-0.2.1-py3-none-any.whl -
Subject digest:
3dbebc4e93190dc881507c5e4475bf588f9ad0d33e0ce6cf2522aa1f04e10da9 - Sigstore transparency entry: 2504194610
- Sigstore integration time:
-
Permalink:
erikvanzijst/freepod@a39d25b7539bd8d7d602d4395c294f727368407a -
Branch / Tag:
refs/tags/freepod-v0.2.1 - Owner: https://github.com/erikvanzijst
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@a39d25b7539bd8d7d602d4395c294f727368407a -
Trigger Event:
push
-
Statement type: