No description
- Python 47.6%
- Dart 38.2%
- Makefile 5%
- Shell 3.2%
- PowerShell 3.2%
- Other 2.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
Build Linux amd64 / 🐧 Linux amd64 Build (push) Has been cancelled
Build Linux arm64 / 🐧 Linux arm64 Build (push) Has been cancelled
Build Windows EXE / 🪟 Windows Build (push) Has been cancelled
Build Linux amd64 / 🚀 GitHub Release (push) Has been cancelled
Build Linux arm64 / 🚀 GitHub Release (push) Has been cancelled
Build Windows EXE / 🚀 GitHub Release (push) Has been cancelled
|
||
| .github/workflows | ||
| assets | ||
| cli | ||
| core | ||
| gui | ||
| mobile | ||
| .gitignore | ||
| build.bat | ||
| build.ps1 | ||
| build.sh | ||
| main.py | ||
| Makefile | ||
| README.md | ||
| requirements.txt | ||
share-forge
Local network file server, in two flavors:
| Platform | Stack | Docs | |
|---|---|---|---|
| Desktop | Linux, Windows | Python + Flask + PyQt6 | this file |
| Mobile | Android | Flutter/Dart | mobile/README.md |
Both serve the same file-listing UI over LAN — browse, upload, download
individual files, and download a folder as a ZIP. The Android build lives
in mobile/ and is built independently via
.github/workflows/android-release.yml
— desktop changes at the repo root don't trigger a mobile rebuild and
vice versa.
Desktop (Linux, Windows)
Browse, upload, and download files over LAN via a clean web UI. Supports folder ZIP download, individual file download, file upload, and directory browsing.
Project Structure
share-forge/
├── assets/
│ └── share-forge.png # App icon (used for .desktop entry)
├── core/
│ ├── __init__.py
│ ├── config.py # Constants, ignored dirs, IP helper
│ ├── server.py # Flask app factory (routes, MIME handling)
│ └── template.py # HTML template (file listing UI)
├── gui/
│ ├── __init__.py
│ └── main_window.py # PyQt6 GUI (multi-server, tray, log)
├── cli/
│ ├── __init__.py
│ └── main.py # CLI entry point (argparse, --kill, --auto-port)
├── mobile/ # Android app (Flutter) — see mobile/README.md
│ ├── lib/
│ │ ├── main.dart # UI: New Server form + Active Servers list
│ │ ├── server.dart # shelf server — mirrors core/server.py
│ │ ├── template.dart # same HTML/CSS as core/template.py
│ │ └── config.dart # mirrors core/config.py
│ └── pubspec.yaml
├── .github/
│ └── workflows/
│ └── android-release.yml # builds mobile/ on push (mobile/**) and v* tags
├── main.py # Dispatcher: GUI (default) or --cli
├── requirements.txt
├── Makefile # Linux: build + install + .desktop entry
├── build.sh # Linux build script
├── build.bat # Windows build script (cmd)
└── build.ps1 # Windows build script (PowerShell)
Usage
GUI
python main.py
CLI
python main.py --cli [directory] [-p PORT] [--auto-port] [--kill]
# Examples
python main.py --cli # serve current dir on :5000
python main.py --cli /home/user/docs # serve specific dir
python main.py --cli -p 8080 # custom port
python main.py --cli --auto-port # pick next free port automatically
python main.py --cli --kill # kill any running instance
Build & Install (Linux)
# Build GUI + CLI binaries → ./bin/
make build
# Install binary + desktop entry + icon
make install
# Uninstall
make uninstall
# Clean build artefacts
make clean
# Options
make build DEBUG=1 # verbose PyInstaller output
make install PREFIX=/usr # system-wide install
After make install:
~/.local/bin/share-forge— GUI binary~/.local/bin/share-forge-cli— CLI binary~/.local/share/applications/share-forge.desktop— app menu entry~/.local/share/icons/hicolor/256x256/apps/share-forge.png— icon
Build (Windows)
CMD:
build.bat
PowerShell:
.\build.ps1
Output: bin\share-forge.exe and bin\share-forge-cli.exe
Requirements
- Python 3.11+
- Flask, Werkzeug, PyQt6
pip install -r requirements.txt