Pineapplee turns any folder on your machine into a shareable web interface — browse, upload, download, and manage files from any device on your network, or share publicly with a single flag.
✨ Features
| 📁 Browse & Navigate | Clean file listing with sortable columns, pagination, breadcrumb trail, and folder navigation |
| ⬆️ Upload | Drag-and-drop files or entire folders — with real-time progress |
| ⬇️ Download | Single files or bulk ZIP archives with smart compression |
| 👁️ Preview | Images, video, audio, PDFs, and text files — all in-browser |
| ✏️ Rename & Delete | Manage files without leaving the browser |
| 📊 Folder Sizes | Async background calculation — listing loads instantly |
| 🌍 Public Share | One flag to expose your server publicly via Cloudflare Tunnel — no account needed |
| 🔒 Safe by default | Path traversal protection, symlink validation, upload size limits |
🚀 Installation
Recommended (using pipx)
pipx installs Python CLI tools in isolated environments — no conflicts, no permission errors. This is the best way to install on macOS, Linux, and Windows.
# Install pipx if you don't have it
# macOS / Linux (Homebrew)
brew install pipx
# Windows (scoop)
scoop install pipx
# Or with pip (any OS)
pip install pipx
pipx ensurepath
Then install Pineapplee:
pipx install pineapplee
Update to the latest version:
pipx upgrade pineapplee
Using pip
If you're inside a virtual environment or managing packages yourself:
pip install pineapplee
Update:
pip install --upgrade pineapplee
Getting
externally-managed-environmenterror? Modern macOS/Linux (PEP 668) blocks system-wide pip installs to protect your OS Python. Usepipxinstead (see above), or use a virtual environment:python3 -m venv ~/myenv source ~/myenv/bin/activate pip install pineapplee
🚀 Quick Start
# Serve the current directory
pineapplee
# Serve a specific path
pineapplee ~/Downloads
# Different port
pineapplee --port 9000
# Share publicly over the internet
pineapplee --public
# Check installed version
pineapplee --version
Open http://localhost:8089 — and you're in.
📖 Usage
usage: pineapplee [-h] [-v] [--port PORT] [--public] [directory]
positional arguments:
directory Directory to serve (default: current directory)
options:
-h, --help show this help message and exit
-v, --version show installed version and exit
--port, -p Port to listen on (default: 8089)
--public Expose publicly via Cloudflare Tunnel
Local network sharing
Pineapple binds to 0.0.0.0, so any device on your LAN can reach it at the Network URL printed in the terminal:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 🍍 Pineapple File Server ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ ┃
┃ 📂 Serving /Users/you/Documents ┃
┃ 🔗 Local http://localhost:8089 ┃
┃ 🌐 Network http://192.168.1.5:8089 ┃
┃ 📦 Max upload 500 MB ┃
┃ ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Press Ctrl+C to stop ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Public sharing
pineapplee --public
On first run this downloads the cloudflared binary (~50 MB, cached to ~/.pineapplee/bin/). A public trycloudflare.com URL is printed — share it with anyone, anywhere.
🔒 Security
- All file paths are validated and confined to the served directory
- Symlinks pointing outside the root are silently ignored
- Upload size capped at 500 MB by default
- Hidden files (dotfiles,
__pycache__,node_modules,.egg-info, etc.) are never shown
Note: Pineapple is designed for local and trusted-network use. Do not expose it to the public internet without understanding the implications.
📋 Requirements
- Python >= 3.8
- Flask >= 2.0
All dependencies are installed automatically.
🐛 Troubleshooting
| Problem | Solution |
|---|---|
externally-managed-environment error |
Use pipx install pineapplee instead of pip |
command not found: pineapplee |
Run pipx ensurepath and restart your terminal. If using pip, add ~/.local/bin to your PATH: export PATH="$HOME/.local/bin:$PATH" in ~/.zshrc or ~/.bashrc |
--public tunnel shows 404 |
Upgrade to latest version — fixed IPv6/IPv4 mismatch. Also wait 5-10 sec after URL appears for DNS propagation |
cloudflared blocked on macOS |
Upgrade to latest — quarantine flag is now auto-removed. Or manually: xattr -d com.apple.quarantine ~/.pineapplee/bin/cloudflared |
| Folder names with spaces return 404 | Upgrade to v0.1.5+ — Unicode normalization fix |
| Slow loading on large directories | Upgrade to v0.1.5+ — listing is now paginated |
cloudflared not found (--public) |
First run downloads it automatically; ensure internet access |
| Multiple Python versions installed | Use python3 -m pip install pineapplee to ensure the right pip, or use pipx |
📄 License
MIT © KalaaKaar
Metadata
Release files for pineapplee 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pineapplee-0.1.8.tar.gz | 26.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pineapplee-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.8 kB
Release files / pineapplee-0.1.8.tar.gz
| Download URL | pineapplee-0.1.8.tar.gz |
|---|---|
| Size | 26.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
329ff7c2f5baca58a5a4ad22278153ac86f7f4615d7ada6f5023db316beeafac
|
|
BLAKE2b-256 checksum How to use checksums |
1f498fb08f4f83510a8774730256ea61224b1a1025a1d4221624e7cc6bbc684c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / pineapplee-0.1.8-py3-none-any.whl
| Download URL | pineapplee-0.1.8-py3-none-any.whl |
|---|---|
| Size | 24.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5f4863375591737a1340233924be240cb1ec14debe393c0e38b3e323bfc01698
|
|
BLAKE2b-256 checksum How to use checksums |
e75902236a6d4d8915719c144367f2f1ce6d07847dff9dbeb55b1b377f0489bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|