Skip to main content

Periplus

Periplus (from Latin periplūs “account of a voyage” and Ancient Greek περίπλους “voyage, naval manoeuvre, account of a voyage”) is a web file explorer built with Flask and Bulma. It serves the current working directory over HTTP with a sortable, keyboard-friendly UI and on-the-fly ZIP downloads.

✨ Features

  • Browse directories and view files from your filesystem
  • Sort by name, size, or modification time (ascending/descending)
  • Toggle visibility of hidden files
  • Inline image previews and a full-page viewer with keyboard navigation
  • Multi-select ZIP download (entire folders or arbitrary selections)
  • File uploads with preserved modification time (when provided by the browser)
  • Create new folders
  • Rename files/folders
  • Send files/folders to the system wastebasket instead of deleting outright
  • Responsive UI based on Bulma, no JavaScript framework
  • No internet access required when run locally

Minimal JavaScript

Periplus is designed to rely on JavaScript as little as possible; JavaScript only adds the following extras:

  • Uploads keep file modification times
  • Keyboard navigation in the viewer (← → Esc)
  • “Select all” and checkbox-based multi-file ZIP downloads
  • Smoother navigation (no extra history entries, in-place delete refresh)

📦 Installation

Periplus is available on PyPI and can be installed as usual, for example:

pip install periplus

🚀 Usage

From the directory you want to expose:

# Run the Flask development server on http://127.0.0.1:5000/
periplus run

# Make it available to the local network on port 5000
periplus run --host=0.0.0.0

Flask provides many more options, including for production use, which are discussed in its documentation.

Periplus is primarily designed for local use and light ad-hoc sharing on trusted networks. Because it exposes the directory tree of the process’s working directory, it should not be used on an untrusted network without additional access controls or isolation.

URL structure

Periplus uses the first URL segment to indicate the current mode:

  • GET /browse/...: main UI (folder listings, or raw file responses)
    • GET / redirects to GET /browse/
  • GET /view/...: full-page file viewer
  • GET /preview/...: small thumbnail previews
  • GET /full-preview/...: full-size previews (or suitable conversion)
  • GET /download/...: file downloads and on-the-fly ZIP archives
  • GET /rename/...: rename a file/folder and redirect
  • GET /delete/...: send a file/folder to the wastebasket and redirect
  • GET /static/...: built-in CSS and icons

Sorting and visibility state are preserved via query parameters:

  • sort=name|size|date
  • reverse (present for descending)
  • show-hidden (present to show dotfiles)

📜 Licence

Periplus is licensed under the terms of the Mozilla Public Licence 2.0, provided in License.

The licences for Bulma (parts of which are included in src/periplus/css/user.css) and for the Feather icons (two of which are included in src/periplus/svg) are provided in the respective subdirectories.

Metadata

Release files for periplus 1.1.0

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

Source distribution (sdist)

Source distribution for periplus 1.1.0
File Size Uploaded
periplus-1.1.0.tar.gz 254.0 kB Details

Built distribution (wheel)

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

Total release size: 508.4 kB

Release files / periplus-1.1.0.tar.gz

Download URL periplus-1.1.0.tar.gz
Size 254.0 kB
Tags Source
SHA-256 checksum
How to use checksums
406ea1d79ecf0d9d8e8eba2e869ec3450fd43fb811a953c1261bf1dc91d92ce3
BLAKE2b-256 checksum
How to use checksums
af4d89e38ffe07f594ba5aae9a19d1597bf6e16e85baa6b6b335bc1699a6c8cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 22, 2026.

Transparency log

Release files / periplus-1.1.0-py3-none-any.whl

Download URL periplus-1.1.0-py3-none-any.whl
Size 254.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fb3332e9ea095db7b00fc9cfd0341e6a3f74484908cbb233faf1d143378067df
BLAKE2b-256 checksum
How to use checksums
657e62b985e1187cf0b5066547bdce8b85d57fe614befe55e888f64bbf3240f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

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