Skip to main content

Production-grade static file server for Python WSGI & ASGI.

Project description

ServeStatic

Website


ServeStatic simplifies static file serving with minimal lines of configuration. It enables you to create a self-contained unit without requiring external services like Nginx or Amazon S3. This can simplify any production deployment, but is especially useful for platforms like Heroku, OpenShift, and other PaaS providers.

This project is designed to work seamlessly with CDNs to ensure high performance for traffic-intensive sites. It can be run in "standalone" mode, or alongside any preexisting ASGI/WSGI app. A command-line interface is provided to perform common tasks such as multi-format compression, file-name hashing, and manifest generation. Extra features and auto-configuration are available for Django users.

When using ServeStatic, best practices are automatically handled such as:

  • Automatically serving compressed content
  • Proper handling of Accept-Encoding and Vary headers
  • Setting far-future cache headers for immutable static files.

Visit the documentation to get started or learn more about ServeStatic .

Frequently Asked Questions

Isn't serving static files from Python horribly inefficient?

The short answer to this is that if you care about performance and efficiency then you should be using ServeStatic behind a CDN (such as CloudFront). Due to the caching headers ServeStatic sends, the vast majority of static requests will be served directly by the CDN without touching your application, so it really doesn't make much difference how efficient ServeStatic is.

That said, ServeStatic is pretty efficient. Because it only has to serve a fixed set of files it does all the work of finding files and determining the correct headers upfront on initialization. Requests can then be served with little more than a dictionary lookup to find the appropriate response. Also, when used with gunicorn (and most other WSGI servers) the actual business of pushing the file down the network interface is handled by the kernel's very efficient sendfile syscall, not by Python.

Shouldn't I be pushing my static files to S3 (using Django-Storages)?

A push-based approach adds complexity and fragility to your deployment process: extra libraries specific to your storage backend, extra configuration and authentication keys, and extra tasks that must be run at specific points in the deployment in order for everything to work. With the CDN-as-caching-proxy approach that ServeStatic takes there are just two bits of configuration: the URL of the CDN, and the URL of your application. Everything else is just standard HTTP semantics. This makes your deployments simpler, your life easier, and you happier.

What's the point in ServeStatic when I can use apache/nginx?

There are two answers here. One is that ServeStatic is designed to work in situations where apache, nginx, and the like aren't easily available. But more importantly, it's easy to underestimate what's involved in serving static files correctly. Does your few lines of nginx configuration distinguish which files which will never change and set the cache headers appropriately? Did you add the right CORS headers so that your fonts load correctly when served via a CDN? Did you turn on the special nginx setting which allows it to send gzip content in response to an HTTP/1.0 request? Did you install, enable, and configure support for zstd and brotli compression?

None of this is rocket science, but it's fiddly and annoying and ServeStatic takes care of all it for you.


This project is a fork of WhiteNoise for ASGI support, bug fixes, security updates, new features, and performance upgrades.

Project details


Download files

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

Source Distribution

servestatic-4.3.1.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

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

servestatic-4.3.1-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file servestatic-4.3.1.tar.gz.

File metadata

  • Download URL: servestatic-4.3.1.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for servestatic-4.3.1.tar.gz
Algorithm Hash digest
SHA256 e28bdd4fbe13a28374754c2554cec4e1d6c8af4dc65d604b71ef8860a16408fa
MD5 73fb8e4b77e0112f8c152eb0d5cf5782
BLAKE2b-256 9307c1d5fe373c4f1d86a7a976f5a407daa9335cd8f9b9682b1c25d5f2386207

See more details on using hashes here.

Provenance

The following attestation bundles were made for servestatic-4.3.1.tar.gz:

Publisher: ci.yml on Archmonger/ServeStatic

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

File details

Details for the file servestatic-4.3.1-py3-none-any.whl.

File metadata

  • Download URL: servestatic-4.3.1-py3-none-any.whl
  • Upload date:
  • Size: 39.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for servestatic-4.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9792a4fe2de1df67e1e87aa4efb3c8d28bb3ebd64128a1a10162db84d87c6b36
MD5 f01a6c5be0382ae7d2f1d3c684f7a22b
BLAKE2b-256 502fc1a7d5b949b55bda4a55e49b040f385bc098d307bd4bdeb498c550219473

See more details on using hashes here.

Provenance

The following attestation bundles were made for servestatic-4.3.1-py3-none-any.whl:

Publisher: ci.yml on Archmonger/ServeStatic

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page