One module · HTTPS by default · No config language

A production server small enough to read.

Servette is a production nanoserver: a single readable Python module that serves a static site on the public internet with a trusted certificate that renews itself, security headers on every response, rate limiting, and a hardened service that survives reboots.

No configuration language to learn, and a single dependency the install brings with it. Install the package, run the wizard, done.

$ pipx install servette # then run: servette
servette — first run
servette> setup

  Site folder     created, empty for now
  Domain          example.com
  Email for certs you@example.com
  Password        skipped

  Ready to start? yes

   certificate issued (Let's Encrypt)
   HTTP → HTTPS redirect active
   security headers enabled
   installed as a system service

Your site is live at https://example.com
Renewal is automatic. Nothing else to do.

1

module to read — the whole server, and nothing else

1

third-party dependency — cryptography, installed with the package

6,816

lines of Python — small enough for one person to fully understand

0

config files to write; a wizard asks, then it runs

What it is

A production layer over the smallest possible server.

Python's standard library ships http.server: the canonical nanoserver. It serves a folder in one command, and — by its own documentation — stops well short of production. Servette is the layer that closes that gap, and nothing beyond it.

It gets a real certificate

A trusted Let's Encrypt certificate, issued by Servette's own ACME client during setup and renewed by a watchdog well before it expires. Plain HTTP is redirected up to HTTPS.

It is hard to abuse

Security headers on every response, a sliding-window rate limiter, optional password protection, path-traversal refusal, and a connection cap that closes rather than queues.

It stays up

Installed as a sandboxed systemd service running as its own unprivileged user, restarted within seconds if it dies, and back after a reboot.

It stays legible

One module, small enough for one person to fully understand — a weekend's honest work, not a career. No plugin system, no configuration language, no hidden machinery to take on trust.

Everything in that list exists because it is necessary to serve a site on the open internet honestly. Nothing is there because another server has it.

What it is not

The honest limits.

Servette serves files. Anything that runs in a browser is fair game — a portfolio, a documentation site, a serious client-side app. Anything that needs the server to think is not.

No dynamic content

A POST gets a 405. A POST needs a destination — a database, an email, a file — and Servette has none. A form's backend lives elsewhere.

No SPA deep links

Files are served as they are, so /about 404s unless that file exists. Use hash routing, or a platform with rewrite rules.

No proxying or plugins

No reverse proxy, load balancer, or live config API. Servette can sit behind one trusted proxy hop; it does not become one.

A request to add any of these is not a feature request; it is a request for a different program. The honest answer is usually to reach for a general-purpose server that does more.

This site

Where to go from here

Three pages, in the order most people want them.

How it Compares

Where Servette sits against general-purpose servers, development servers, managed platforms, and its closest small peers — and why simplicity and security usually trade against each other.

How it Works

The developer's view: the design principles, the architecture map, what each region of the module does, and how to work on Servette itself.

How to Use it

Getting a site live: installing the package, running the wizard, leaving it running, publishing from the browser admin page over your own SSH tunnel, and the full command reference.

License

MIT License

Copyright (c) 2026 Andy Emerson

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.