Metadata-Version: 2.4
Name: pineapplee
Version: 0.1.6
Summary: A beautiful, feature-rich local file server
Author: KalaaKaar
License-Expression: MIT
Project-URL: Homepage, https://github.com/ApoorvDixitt/Pinapplee
Project-URL: Repository, https://github.com/ApoorvDixitt/Pinapplee
Keywords: file-server,local,flask,cloudflare,sharing
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Utilities
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flask>=2.0
Requires-Dist: werkzeug>=2.0
Dynamic: license-file

<div align="center">

# 🍍 Pineapplee

<p><strong>A clean, fast, local file server — right in your browser.</strong></p>

<p>
  <a href="https://pypi.org/project/pineapplee/"><img src="https://img.shields.io/pypi/v/pineapplee?color=f59e0b&logo=python&logoColor=white" alt="PyPI version"></a>
  <a href="https://pypi.org/project/pineapplee/"><img src="https://img.shields.io/pypi/pyversions/pineapplee?color=3b82f6" alt="Python"></a>
  <a href="https://pypi.org/project/pineapplee/"><img src="https://img.shields.io/pypi/dm/pineapplee?color=8b5cf6" alt="Downloads"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-10b981.svg" alt="License: MIT"></a>
</p>

<p>
  <a href="https://pypi.org/project/pineapplee/">PyPI</a> ·
  <a href="https://github.com/ApoorvDixitt/Pinapplee">GitHub</a> ·
  <a href="https://github.com/ApoorvDixitt/Pinapplee/issues">Report a Bug</a>
</p>

</div>

---

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`](https://pipx.pypa.io/) installs Python CLI tools in isolated environments — no conflicts, no permission errors. This is the best way to install on **macOS**, **Linux**, and **Windows**.

```bash
# 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:

```bash
pipx install pineapplee
```

Update to the latest version:

```bash
pipx upgrade pineapplee
```

### Using pip

If you're inside a virtual environment or managing packages yourself:

```bash
pip install pineapplee
```

Update:

```bash
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:
> ```bash
> python3 -m venv ~/myenv
> source ~/myenv/bin/activate
> pip install pineapplee
> ```

---

## 🚀 Quick Start

```bash
# 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

```bash
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` | Make sure `~/.local/bin` is in your PATH, or reinstall with `pipx` |
| Folder names with spaces return 404 | Upgrade to v0.1.5+ (`pipx upgrade pineapplee`) |
| 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 |

---

## 📄 License

MIT © [KalaaKaar](https://github.com/ApoorvDixitt)
