No description
  • Python 47.6%
  • Dart 38.2%
  • Makefile 5%
  • Shell 3.2%
  • PowerShell 3.2%
  • Other 2.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Boffin 38e011c14a
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
docs: add mobile/ to root README (platform table + project structure)
2026-09-09 16:44:13 +00:00
.github/workflows Add mobile/ Flutter app: on-device HTTP file server for Android 2026-09-09 04:58:04 +00:00
assets feat: add project icon and improve Makefile build process 2026-05-18 21:14:12 +05:30
cli Add "show all" option to bypass ignore rules 2026-08-14 02:45:25 +00:00
core Add "show all" option to bypass ignore rules 2026-08-14 02:45:25 +00:00
gui Add "show all" option to bypass ignore rules 2026-08-14 02:45:25 +00:00
mobile mobile: fix Stop crash + add a working Stop button in the notification 2026-09-09 12:23:34 +00:00
.gitignore Add mobile/ Flutter app: on-device HTTP file server for Android 2026-09-09 04:58:04 +00:00
build.bat Remove old binaries before replacing in build scripts 2026-05-18 14:47:11 +05:30
build.ps1 Remove old binaries before replacing in build scripts 2026-05-18 14:47:11 +05:30
build.sh Update Linux build script and environment variables 2026-05-20 13:08:49 +05:30
main.py Initial commit: Added share-forge project 2026-05-17 09:11:35 +05:30
Makefile fix: suppress gtk-update-icon-cache and update-desktop-database errors on install 2026-06-10 14:48:29 +05:30
README.md docs: add mobile/ to root README (platform table + project structure) 2026-09-09 16:44:13 +00:00
requirements.txt Initial commit: Added share-forge project 2026-05-17 09:11:35 +05:30

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