updog is a free, open source file management & sync project written in Python and released under MIT. It has 3,412 GitHub stars, 341 forks and 14 open issues, and was last pushed 10 months ago. On this registry it ranks #28 of 39 tracked projects in File Management & Sync, with 5 head-to-head comparisons available.

What is updog?

Updog is a Python 3.11+ HTTP/S file server that replaces Python's SimpleHTTPServer, adding file uploads alongside downloads, ad hoc SSL certificates and HTTP basic authentication for developers and operators who need to move files between machines without standing up a full file-sharing service.

What it is

Updog is an MIT-licensed, command-line file server written in Python and distributed through the Python packaging ecosystem, as version 2.0.1, requiring Python 3.11 or newer. It is installed with pip or pipx, and its own development workflow uses Poetry. The project sits in this registry under Productivity & Utilities / File Management & Sync and is tagged file-sharing, file-upload, http-server, https-server and simplehttpserver. It began as, and remains, a replacement for Python's SimpleHTTPServer: the same idea of serving a directory over HTTP from a terminal, extended with the capabilities the standard library version does not have.

The concrete problem it solves is the one-way nature of that built-in server. SimpleHTTPServer is quick to start but it only serves files outward, so sending a file back the other way means reaching for a different tool, a chat client or a shared drive. Updog keeps the same single-command convenience while making the session two-way: a chosen root directory is served on a configurable address and port, and the browser page accepts uploads as well as downloads. It also closes the gaps that make casual HTTP serving awkward on real machines — a password gate for the page, TLS for the connection, CORS headers when a browser application is being tested against it, and an option to keep absolute directory paths out of what clients can see.

Key capabilities

  • Serves a root directory selected with -d or --directory (the default is the current directory), bound with -b or --bind (default 0.0.0.0) and published on -p or --port (default 9090).
  • Handles both downloading and uploading through the browser interface, which the built-in SimpleHTTPServer does not do.
  • Protects the page with --password over HTTP basic authentication, where the username is left blank and the password is entered in the password field.
  • Enables TLS either with --ssl for an ad hoc certificate, or with --ssl-cert and --ssl-key to supply a custom certificate and private key.
  • Adds CORS headers when started with --cors, for web application testing.
  • Hides the full directory path and shows relative paths with --hide-base-path, described in the README as an OpSec measure.
  • Reports its version and full argument list through --version and -h or --help.

Who uses it and how

  • A developer who needs to hand a file to someone on the same network can run updog in the directory holding it and pass along the URL, rather than routing the file through a chat client or shared drive.
  • On a machine with several interfaces, the server can be pinned to one address, for example updog -b 192.168.1.10 -p 8080, so it listens only where intended.
  • Password-protected sessions use updog --password with HTTP basic auth, which suits short-lived sharing with a small group rather than per-person accounts.
  • Testing a browser-based application against a local server is a stated use for the --cors flag.
  • Work on sensitive targets justifies --hide-base-path, which keeps the server's absolute directory structure out of what clients see.

Getting started

Install with pip install updog, or with pipx install updog, which the README recommends for command-line tools; running updog with no arguments serves the current directory. For development, clone the repository, run poetry install, then poetry run updog.

How it compares

The only comparable tool named in the project's own documentation is Python's SimpleHTTPServer, which updog is explicitly built to replace. Where SimpleHTTPServer is a read-only convenience for serving files, updog keeps the same command-line simplicity while adding uploads, TLS and basic-auth protection.

When to use it — and when not to

The README indicates no database, object store or mail service to operate: updog is a single Python package that runs as a foreground process, which makes it cheap to start and equally cheap to lose when the terminal closes. It is a poor fit for anyone needing named user accounts, per-file permissions or auditable access, because authentication is a single shared password over HTTP basic auth. The documentation is short and usage-focused — installation, an argument table and a set of examples — so those seeking operational guidance, clustering or a long release history should look elsewhere; the current release is 2.0.1 and the last push to the repository was in November 2025.

project readme (upstream, from github) — read inline

Version 2.0.1 Python 3.11+ MIT License sc0tfree Twitter

updog

Updog is a replacement for Python's SimpleHTTPServer. It allows uploading and downloading via HTTP/S, can set ad hoc SSL certificates and use HTTP basic auth.

Installation

Install using pip:

pip install updog

Or using pipx (recommended for CLI tools):

pipx install updog

For development:

git clone https://github.com/sc0tfree/updog.git
cd updog
poetry install
poetry run updog

Usage

updog [-d DIRECTORY] [-b ADDRESS] [-p PORT] [--password PASSWORD] [--ssl | --ssl-cert CERT --ssl-key KEY] [--cors] [--hide-base-path]

Argument Description
-d DIRECTORY, --directory DIRECTORY Root directory [Default=.]
-b ADDRESS, --bind ADDRESS Bind to specific address [Default=0.0.0.0]
-p PORT, --port PORT Port to serve [Default=9090]
--password PASSWORD Use a password to access the page. (No username)
--ssl Enable SSL with ad-hoc certificate
--ssl-cert CERT Path to custom SSL certificate
--ssl-key KEY Path to custom SSL private key
--cors Enable CORS headers
--hide-base-path Hide full directory path (show relative paths)
--version Show version
-h, --help Show help

Examples

Serve from your current directory:

updog

Serve from another directory:

updog -d /another/directory

Serve from port 1234:

updog -p 1234

Password protect the page:

updog --password examplePassword123!

Please note: updog uses HTTP basic authentication. To login, you should leave the username blank and just enter the password in the password field.

Use an SSL connection (ad-hoc certificate):

updog --ssl

Use an SSL connection with custom certificates:

updog --ssl-cert /path/to/cert.pem --ssl-key /path/to/key.pem

Bind to a specific IP address:

updog -b 192.168.1.10 -p 8080

Enable CORS for web application testing:

updog --cors

Hide full directory paths (OpSec):

updog --hide-base-path

What's updog?

Not much, how about you?

Thanks

A special thank you to Nicholas Smith for designing the updog logo.

Frequently asked questions

Is updog free to use?

updog is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does updog do?

Updog is a replacement for Python's SimpleHTTPServer. It allows uploading and downloading via HTTP/S, can set ad hoc SSL certificates and use http basic auth.

What is updog written in?

updog is primarily written in Python. Its source is publicly available at https://github.com/sc0tfree/updog, and it has 3,412 GitHub stars.