Desktop, mobile, and web clients for TFTP-based firmware provisioning.
flossware-tftp-os is the application layer for tftp-os, providing user-facing frontends for managing TFTP-based firmware provisioning. tftp-os is the reusable library; this repo contains the clients that consume it.
Each frontend is its own installable package with independent dependencies.
| Frontend | Directory | Package | Technology | Status |
|---|---|---|---|---|
| REST API / Web | flossware-tftp-os-web/ |
flossware-tftp-os-web |
Python FastAPI | Implemented |
| Terminal UI | flossware-tftp-os-tui/ |
flossware-tftp-os-tui |
Python curses | Implemented |
| Desktop GUI | flossware-tftp-os-gui/ |
flossware-tftp-os-gui |
Python tkinter | Implemented |
| Java TUI | flossware-tftp-os-java/ |
Maven | Java Lanterna | Implemented |
| Java Swing GUI | flossware-tftp-os-swing/ |
Maven | Java Swing | Implemented |
| Android | flossware-tftp-os-android/ |
Gradle | Kotlin Material 3 | Implemented |
| iOS | flossware-tftp-os-ios/ |
Swift Package | Swift SwiftUI | Implemented |
The Python frontends import tftpos directly and use the library API:
pip install tftpos
# Install just the frontend you need
pip install -e flossware-tftp-os-tui/ # terminal UI
pip install -e flossware-tftp-os-gui/ # desktop GUI
pip install -e flossware-tftp-os-web/ # REST API + webThe web frontend serves a FastAPI REST API that Java, Android, and iOS clients connect to:
# Start the REST API server
flossware-tftp-os-web --config /etc/tftpos/tftpos.toml --hosts /etc/tftpos/hosts.toml
# API available at http://localhost:8080/api/v1/
# Swagger docs at http://localhost:8080/docscd flossware-tftp-os-java && mvn package # Lanterna TUI
cd flossware-tftp-os-swing && mvn package # Swing GUI
java -jar target/flossware-tftp-os-java-0.1.0.jar --api-url http://localhost:8080
java -jar target/flossware-tftp-os-swing-0.1.0.jar --api-url http://localhost:8080- Android: Open
flossware-tftp-os-android/in Android Studio, configure API URL in Settings - iOS: Open
flossware-tftp-os-ios/Package.swiftin Xcode, configure API URL in Settings
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Python TUI │ │ Python GUI │ │ REST API │
│ (curses) │ │ (tkinter) │ │ (FastAPI) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└────────────────┼────────────────┘
│ tftpos library (direct import)
v
┌─────────────┐
│ tftp-os │
│ (library) │
└─────────────┘
^
│ REST API (HTTP)
┌────────────────┼────────────────┐
│ │ │
┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ Java TUI │ │ Java Swing │ │ Mobile │
│ (Lanterna) │ │ (Swing) │ │(Android/iOS)│
└─────────────┘ └─────────────┘ └─────────────┘
tftp-os is designed as a reusable library. You can build your own application on top of it without using this repo at all:
from tftpos.config import load_config, load_hosts
from tftpos.engine import FirmwareEngine
from tftpos.matcher import HostMatcher
from tftpos.registry import PluginRegistry
config = load_config(Path("/etc/tftpos/tftpos.toml"))
rules = load_hosts(Path("/etc/tftpos/hosts.toml"))
registry = PluginRegistry()
matcher = HostMatcher(rules)
engine = FirmwareEngine(registry, matcher, config)
firmware_path = engine.serve(mac="aa:bb:cc:dd:ee:ff")git clone https://github.com/FlossWare/flossware-tftp-os.git
cd flossware-tftp-os
# Python frontends (dev mode)
pip install -e flossware-tftp-os-tui/
pip install -e flossware-tftp-os-web/
pip install -e flossware-tftp-os-gui/
# Java frontends
cd flossware-tftp-os-java && mvn package
cd flossware-tftp-os-swing && mvn package