Skip to content
SPECIFICTION
Get listed

pypiserver

github.com

Free plan WindowsmacOSLinuxAPISelf-hosted
Visit github.com
Spec score 8.4 #16 of 64 in Artifact repository software

What it is

pypiserver is a minimal, self-hosted package index for uploading and downloading Python packages with tools such as pip and easy_install. It serves packages from regular directories, including wheels, bdists, eggs and PGP signatures, and scans those directories recursively. Packages can be uploaded with pip, setuptools, twine or pypi-uploader, or copied to the server with scp. Upload access can be protected with an Apache htpasswd file; API users can configure custom authentication callables. The maintainers advise password protection for uploads, and the documentation recommends a reverse proxy to provide HTTPS. pypiserver can run as a WSGI application, with documented integrations for Docker, nginx, Apache, gunicorn and Paste. It provides a health endpoint that returns HTTP 200 when the service is running, with an option to configure the endpoint. The current version supports Python 3.10+ and PyPy3. It is free at free and is listed for Linux, macOS, Windows, API and self-hosted use. Its API covers the operations needed by common package tools rather than the full PyPI API; documentation uploads are accepted but not saved to disk.

Spec sheet

Purpose
pypiserver is a minimal PyPI-compatible server for uploading and downloading Python packages with pip or easy_install.Read 10 Oct 2026 · github.com
Intended users
The project describes itself as a self-hosted package index for users who want to serve their own Python packages.Read 9 Oct 2026 · github.com
Deployment
The project publishes Docker images for main branch pushes and dev, alpha, beta, and final releases.Read 10 Oct 2026 · github.com
Integrations
The documentation shows integration with pip, easy_install, setuptools, twine, Docker, and reverse proxies including Nginx and Traefik.Read 10 Oct 2026 · github.com
Support
The maintainers direct users to GitHub Discussions and a Zulip community chat, and direct bug reports to GitHub’s bug tracker.Read 10 Oct 2026 · github.com
License
The project’s remaining code is distributed under the zlib/libpng license, and its bundled Bottle copy is MIT-licensed.Read 10 Oct 2026 · github.com
API and servers
Its API returns a WSGI application that can be run with supported or user-chosen WSGI servers.Read 10 Oct 2026 · github.com
API limit
pypiserver implements only enough of the PyPI API for easy_install, pip install, and search, rather than the full API.Read 9 Oct 2026 · github.com
Authentication
Uploads can be protected with Apache htpasswd authentication, and API users can configure a custom authentication callable.Read 10 Oct 2026 · github.com
Clients
Standard Python packaging tools including pip and twine can use it as a package index.Read 9 Oct 2026 · github.com
Docker
Official Docker images are built for main pushes and development, prerelease, and final releases.Read 9 Oct 2026 · github.com
Documentation limitation
It accepts documentation uploads but does not save them to disk.Read 9 Oct 2026 · github.com
Health checks
It provides a default /health endpoint that returns HTTP 200 when the service is up and supports a configurable endpoint.Read 9 Oct 2026 · github.com
HTTPS
The documentation recommends putting pypiserver behind a reverse proxy to provide HTTPS.Read 9 Oct 2026 · github.com
Limitations
It does not implement the full PyPI API and documents that it accepts documentation uploads but does not save them to disk.Read 10 Oct 2026 · github.com
Package formats
It supports wheels, source distributions, eggs, and accompanying PGP signatures.Read 10 Oct 2026 · github.com
Platform support
The README includes Windows service instructions using NSSM and systemd service instructions for Linux.Read 10 Oct 2026 · github.com
PyPI compatibility
It implements the PyPI interfaces needed for standard packaging tools such as pip and twine to use it as a package index.Read 10 Oct 2026 · github.com
Python support
The current version works with Python 3.10+ and PyPy3; older Python versions are not tested and the 1.x series is unsupported.Read 10 Oct 2026 · github.com
Scale limit
The server scans the package directory for each incoming HTTP request by default, which can noticeably slow down service for thousands of packages; directory caching can improve performance.Read 9 Oct 2026 · github.com
Security guidance
The project strongly advises password-protecting uploads and describes HTTPS deployment through a reverse proxy as the preferred approach.Read 10 Oct 2026 · github.com
Storage
It serves packages from regular directories and scans package directories recursively.Read 10 Oct 2026 · github.com
Upload methods
Packages can be uploaded with pip, setuptools, twine, pypi-uploader, or copied with scp.Read 10 Oct 2026 · github.com
Uploading
Packages can be uploaded with pip, setuptools, twine, pypi-uploader, or copied to the server with scp.Read 9 Oct 2026 · github.com

Plans and prices

pypiserver Free Open-source package server; self-hosted; minimal PyPI-compatible API Read 10 Oct 2026 · github.com

Every pypiserver plan and price →

Strong points and limits

Strong points

  • Serves packages from regular directories.
  • Supports pip and twine as package-index clients.
  • Uploads can use several tools or scp.
  • Docker images and WSGI deployment are documented.

Limits

  • Uploads should be password protected.
  • HTTPS requires a reverse proxy.
  • It does not implement the full PyPI API.
  • Documentation uploads are not saved to disk.

Who it suits

pypiserver suits people who want to host their own Python package index and use standard packaging tools to access it. It is intended for self-hosted deployment and supports common package workflows.

Verdict

pypiserver covers core package-index needs for a self-hosted Python package repository. Its limited API, upload security setup and lack of saved documentation uploads are relevant constraints when choosing it.

Where Specifiction places it

Alternatives to pypiserverAll alternatives →