peekin
A lightweight, read-only file browser for your web browser. Browse a folder and preview images (swipeable gallery), video, audio, PDF, rendered Markdown, and source code with syntax highlighting. Works on desktop and phone. Fully offline.
Run
uvx peekin # share the current folder on http://127.0.0.1:8000
uvx peekin ~/Pictures --open # share a folder and open the browser
python -m peekin # after: pip install peekin
Until the first PyPI release:
uvx --from git+https://github.com/sumanmichael/peekin peekin
Share on your network
uvx peekin --host 0.0.0.0
peekin needs a password whenever it listens on something other than
localhost. If you don't set one, it generates one and prints it at startup.
Set your own with PEEKIN_PASSWORD=... or --password-file FILE.
--no-password turns the password off (not recommended on shared networks).
Options
| Option | Default | Meaning |
|---|---|---|
FOLDER |
. |
Folder to share |
--host |
127.0.0.1 |
Address to listen on (0.0.0.0 for your network) |
--port |
8000 |
Port |
--password-file |
Read the password from this file's first line | |
--no-password |
off | Never ask for a password |
--thumbs |
off | Image thumbnails in grid view (install with uvx --from 'peekin[thumbs]' peekin --thumbs) |
--show-hidden |
off | Show dotfiles |
--open |
off | Open the browser |
Security
- Read-only: nothing in the shared folder can be changed through peekin.
- Paths cannot escape the shared folder, including through symlinks.
- Five wrong passwords lock that IP address out for 60 seconds, doubling each time.
- HTML and SVG files are downloaded, never rendered, so files you share can't run scripts in peekin.
- Other websites you visit can't read your files through peekin: cross-site requests are blocked, and
without a password peekin only answers to IP addresses,
localhost, and*.localnames. - No HTTPS: use it on networks you trust, not on the public internet.
Develop
uv run pytest
uv run peekin .
Release
- Bump
__version__insrc/peekin/__init__.pyand commit. gh release create vX.Y.Z --generate-notes(the tag must match the version).- The
publishworkflow tests, builds, and uploads to PyPI via trusted publishing.
License
MIT. Bundles Lucide icons (ISC) and the Schibsted Grotesk
font (SIL OFL 1.1); their licenses are in LICENSES/.
Release files for peekin 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| peekin-1.0.0.tar.gz | 126.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| peekin-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 204.4 kB
Release files / peekin-1.0.0.tar.gz
| Download URL | peekin-1.0.0.tar.gz |
|---|---|
| Size | 126.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ad7d438306f565b62bbc84c4201f5dd3db060947a152614ee6f4582f3b7941bc
|
|
BLAKE2b-256 checksum How to use checksums |
76b52bcd8c947c25d1d7dadd0e065ae8d119b0bf65227782574897544995c4cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / peekin-1.0.0-py3-none-any.whl
| Download URL | peekin-1.0.0-py3-none-any.whl |
|---|---|
| Size | 77.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8082f61a657e9b68676aab9b535658ca3a6f82e882465838e1388bee3cd27803
|
|
BLAKE2b-256 checksum How to use checksums |
e1eded23a6b8be7d1b552f096da5162e089fdf329cb922766cd058486ed88bf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|