Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Ownfoil

Static Badge Latest Release Docker Image Size (latest semver)
Docker Pulls Unraid downloads
Image archs
Tinfoil Version Sphaira Version CyberFoil Version

Ownfoil is a Nintendo Switch library manager, that will also turn your library into a fully customizable and self-hosted Shop, supporting multiple clients. The goal of this project is to manage your library, identify any missing content (DLCs or updates) and provide a user friendly way to browse and install your content. Some of the features include:

  • multi user authentication
  • web interface for configuration and browsing the library
  • content identification using content decryption or filename
  • automatic library organization
  • console keys management
  • multiple clients support
  • shop customization

Installation

[!CAUTION] There is no website associated with this project, only this GitHub repo.
Ownfoil is not released as an application or an executable file - DO NOT download or execute anything related to Ownfoil outside of this repository and its instructions.

Using Docker

Ownfoil is shipped as a docker container for easy deployment, data persistency and updates. If you are unfamiliar with Docker, check the installation documentation here.

Docker run

Running this command will start the shop on local port 8465 with the library in /your/game/directory, and persist the data and config directories:

docker run -d -p 8465:8465 \
   -v /your/game/directory:/games \
   -v ./config:/app/config \
   -v ./data:/app/data \
   --name ownfoil \
   a1ex4/ownfoil

To see the logs of the container:

  docker logs -f ownfoil

Docker compose

Create a file named docker-compose.yml with the following content:

---
services:
  ownfoil:
    container_name: ownfoil
    image: a1ex4/ownfoil
   # environment:
   #   # For write permission in config directory
   #   - PUID=1000
   #   - PGID=1000
   #   # to create/update an admin user at startup
   #   - USER_ADMIN_NAME=admin
   #   - USER_ADMIN_PASSWORD=asdvnf!546
   #   # to create/update a regular user at startup
   #   - USER_GUEST_NAME=guest
   #   - USER_GUEST_PASSWORD=oerze!@8981
    volumes:
      - /your/game/directory:/games
      - ./data:/app/data
      - ./config:/app/config
    ports:
      - "8465:8465"

[!TIP] You can control the UID and GID of the user running the app in the container with the PUID and PGID environment variables. By default the user is created with 1000:1000. If you want to have the same ownership for mounted directories, you need to set those variables with the UID and GID returned by the id command.

You can then create and start the container with the command (executed in the same directory as the docker-compose file):

docker-compose up -d

This is usefull if you don't want to remember the docker run command and have a persistent and reproductible container configuration.

Using Python

This requires Python to be installed on your system. If that's not the case you can use uv to install a Python environment.

Download the repository as a zip archive, extract it, install the dependencies and you're good to go!
  1. Download the repository code on GitHub:
    1. Make sure you are visiting the official repo URL at https://github.com/a1ex4/ownfoil
    2. Above the list of files, click <> Code.
    3. Click Download ZIP.
  2. Extract the zip archive and navigate to the ownfoil-master directory
  3. Open a terminal in this folder (on Windows, Right click → Open command window here)
  4. Install dependencies and run Ownfoil:
$ pip install -r requirements.txt
$ python app/app.py

Using uv

Ownfoil can also be run with uv directly from this repository, without cloning it or managing a Python environment yourself.

After installing uv, open a terminal (Press Win + R, type wt, and press Enter), then either:

  • Run it once, without installing anything permanently:
uvx --from git+https://github.com/a1ex4/ownfoil ownfoil
  • Install it as a persistent uv tool, so the ownfoil command stays available:
uv tool install git+https://github.com/a1ex4/ownfoil
ownfoil

By default, config/ and data/ are created in the current directory. Pass a directory to use instead (works the same way with uvx, just append it after ownfoil):

ownfoil /path/to/persist
uvx --from git+https://github.com/a1ex4/ownfoil ownfoil /path/to/persist

[!TIP] On Windows, the first run also creates an ownfoil.bat next to config/ and data/, so you can start Ownfoil again by double-clicking it instead of reopening a terminal.

On Windows, Gunicorn cannot run, so it's best suited for local/personal use there rather than a production deployment.

Usage

Once Ownfoil is running, the Shop Web UI is now accessible with your computer/server IP and port, by navigating to http://<computer/server IP>:8465, i.e. http://localhost:8465 from the same computer or http://192.168.1.100:8465 from a device in your network.

Clients supported

Ownfoil supports multiple clients to install content on your Nintendo Switch:

Tinfoil:

  • ✅ HTTP / HTTPS protocol support
  • ✅ User authentication
  • ✅ Shop browsing with icons and banners
  • ✅ Content filtering (games, updates, DLC, XCI) based on URL
  • ✅ New games, DLC, Updates, Recommended and XCI sections
  • ✅ Compressed content (NSZ and XCZ) support
  • ✅ Encrypted shop support
  • ✅ Client side Host verification for secure connections
  • ✅ Tinfoil shop customization

Sphaira:

  • ✅ HTTP / HTTPS protocol support
  • ✅ User authentication
  • ✅ Directory-based file browsing
  • ✅ Content filtering (games, updates, DLC, XCI) based on URL
  • ✅ Compressed content (NSZ and XCZ) support

CyberFoil:

  • ✅ HTTP / HTTPS protocol support
  • ✅ User authentication
  • ✅ Shop browsing with icons and Sections (Updates, DLC)
  • ✅ Compressed content (NSZ and XCZ) support
  • ✅ Client side Host verification for secure connections
  • ✅ Custom welcome message (MOTD)

[!TIP] Check the Setup page in the Web UI for specific instructions on configuring each app, using local or remote access.

User administration

Ownfoil requires an admin user to be created to enable Authentication for your Shop. Go to the Settings to create a first user that will have admin rights. Then you can add more users to your shop the same way.

Library administration

In the Settings page under the Library section, you can add directories containing your content. You can then manually trigger the library scan: Ownfoil will scan the content of the directories and try to identify every supported file (currently nsp, nsz, xci, xcz).

[!TIP] There is watchdog in place for all your configured libraries: files moved, renamed, added or removed will be reflected directly in your library.

The automatic library organization can be configured in the Organizer section to set your own templates, enable removing older updates...

Titles configuration

In the Settings page under the Titles section is where you specify the language of your Shop (currently the same for all users).

This is where you can also upload your console keys file to enable content identification using decryption, instead of only using filenames. If you do not provide keys, Ownfoil expects the files to be named [APP_ID][vVERSION].

Ownfoil will warn you if any master key is invalid or missing, to ensure all backups can be decrypted and identified.

Shop customization

In the Settings page under the Shop section is where you customize your Shop, like the message displayed when successfully accessing the shop from Tinfoil or if the shop is private or public.

Metadata

Release files for ownfoil 2.4.0.dev0

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

Source distribution (sdist)

Source distribution for ownfoil 2.4.0.dev0
File Size Uploaded
ownfoil-2.4.0.dev0.tar.gz 239.9 kB Details

Built distribution (wheel)

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

Total release size: 479.7 kB

Release files / ownfoil-2.4.0.dev0.tar.gz

Download URL ownfoil-2.4.0.dev0.tar.gz
Size 239.9 kB
Tags Source
SHA-256 checksum
How to use checksums
78adaa0ab2b5158d351210c9c6d03767a82cb6405afd6f762a927b291ad7ad06
BLAKE2b-256 checksum
How to use checksums
56d7e0e79c3f197bb14f25c4c6c33cf3c4cdb884285a31937fb6c75c16ab65ef
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 28, 2026.

Transparency log

Release files / ownfoil-2.4.0.dev0-py3-none-any.whl

Download URL ownfoil-2.4.0.dev0-py3-none-any.whl
Size 239.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a92b0e76c3fb22f102c96ee5f1b35b1b8bad235d35433260d2526be91ff634d9
BLAKE2b-256 checksum
How to use checksums
70dfecfea79ec642219524b625e6a43c510fc663261c28c89db2a5c7a388a028
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 28, 2026.

Transparency log

Release history Release notifications | RSS feed

2.5.0

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

This release

2.4.0.dev0 This release

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