Skip to main content

🍍 Pineapplee

A clean, fast, local file server — right in your browser.

PyPI version Python Downloads License: MIT

PyPI · GitHub · Report a Bug


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-environment error? Modern macOS/Linux (PEP 668) blocks system-wide pip installs to protect your OS Python. Use pipx instead (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)

Source distribution for pineapplee 0.1.8
File Size Uploaded
pineapplee-0.1.8.tar.gz 26.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pineapplee 0.1.8
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.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