vaalboks
Vaalboks is a small file-sharing server for a local network. Drop files or folders in the browser, then download them from another device on the same network.
The name is Afrikaans for “dull box” — a straightforward tool for moving files between computers without a separate hosted service.
Stack
- Python 3.14, Django 6.1, uv
- Frontend: plain HTML/CSS/JS + htmx 4.0
- Uploads use XHR for live progress and speed tracking; downloads use streaming
fetch
Run
After installing the package, start the server with:
uvx vaalboks
This starts HTTPS on 0.0.0.0:8443 with two workers. Runtime data is stored
in ./vaalboks-data, and a self-signed certificate is generated there on
first launch. Migrations and static-file collection run automatically. Use
--http for plain HTTP on port 8123. The CLI uses Gunicorn on Linux and macOS
and Uvicorn on Windows.
When running from this checkout:
uv run python manage.py runserver 0.0.0.0:8123
Then open http://<your-LAN-IP>:8123/ from any device on the network.
(Find your IP with ipconfig getifaddr en0.)
Use as a Django app
The file-sharing interface can also be mounted in an existing Django project.
Install vaalboks, add share to INSTALLED_APPS, configure the directory
used for uploads, and include the app URLs:
# settings.py
INSTALLED_APPS = [
# ...
"share",
]
VAALBOKS_SHARED_ROOT = BASE_DIR / "shared"
# urls.py
from django.urls import include, path
urlpatterns = [
path("share/", include("share.urls")),
]
The app does not require the bundled vaalboks settings, middleware, or
server. The host project remains responsible for Django middleware, static
files, CSRF, and deployment configuration.
Direct Gunicorn HTTPS + zstd
This section applies to Linux and macOS. Windows users should use the vaalboks
command, which selects Uvicorn automatically.
Gunicorn can terminate HTTPS, and Django compresses eligible text responses with zstd:
uv run gunicorn vaalboks.asgi:application \
--worker-class uvicorn_worker.UvicornWorker \
--workers 2 \
--bind 0.0.0.0:8443 \
--certfile certs/vaalboks-cert.pem \
--keyfile certs/vaalboks-key.pem
Open https://<your-LAN-IP>:8443/ and trust the self-signed certificate on
each device that will connect. This setup provides HTTPS and zstd compression.
The CLI also accepts --host, --port, --workers, --data-dir,
--certfile, and --keyfile.
Publishing
Build artifacts locally with:
uv build
The repository includes GitHub Actions for quality checks and publishing on a published GitHub release. Configure PyPI trusted publishing for the GitHub repository before creating the first release; no long-lived PyPI token is required.
How it works
GET /— single page with drop zone and live file listingGET /api/files/— htmx partial that re-renders the listing after uploadsPOST /api/upload/— multipart upload; folders are traversed client-side (webkitGetAsEntry) and each file is sent with its relative pathGET /files/<path>— download a shared file (path-traversal protected)
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 vaalboks-0.1.0.tar.gz.
File metadata
- Download URL: vaalboks-0.1.0.tar.gz
- Upload date:
- Size: 41.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f361bf76cb0e8ea8112d36c876873546d13ea62dc1f453e4179fc426ee7bab2f
|
|
| MD5 |
8b11aa6e641f711c8e2d367f6cab85d9
|
|
| BLAKE2b-256 |
52c1eaa84c035f9ee0265c573303fa543b85389b08d6155ce741ca86b2f75bc2
|
Provenance
The following attestation bundles were made for vaalboks-0.1.0.tar.gz:
Publisher:
publish.yml on rsxm/vaalboks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vaalboks-0.1.0.tar.gz -
Subject digest:
f361bf76cb0e8ea8112d36c876873546d13ea62dc1f453e4179fc426ee7bab2f - Sigstore transparency entry: 2727994929
- Sigstore integration time:
-
Permalink:
rsxm/vaalboks@2815c3b1f7cd1290771043df2877c4a44a2aeff7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rsxm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2815c3b1f7cd1290771043df2877c4a44a2aeff7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file vaalboks-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vaalboks-0.1.0-py3-none-any.whl
- Upload date:
- Size: 42.2 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 |
3d06f1aeddc8a8be4f3bc5e5337a1ff640ea39f1d5602cc9e6ff837515d7f617
|
|
| MD5 |
d79ab3b6cb90a844bf2ddd40dc08191b
|
|
| BLAKE2b-256 |
6453bf3a1e1e09edae570fa4816c5e5395b41118f42f0fdd356648c26ad16411
|
Provenance
The following attestation bundles were made for vaalboks-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on rsxm/vaalboks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vaalboks-0.1.0-py3-none-any.whl -
Subject digest:
3d06f1aeddc8a8be4f3bc5e5337a1ff640ea39f1d5602cc9e6ff837515d7f617 - Sigstore transparency entry: 2727996380
- Sigstore integration time:
-
Permalink:
rsxm/vaalboks@2815c3b1f7cd1290771043df2877c4a44a2aeff7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rsxm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2815c3b1f7cd1290771043df2877c4a44a2aeff7 -
Trigger Event:
release
-
Statement type: