python -m http.server 8000
You first start one server on a desktop/laptop which has the software, and then any client (Android, iOS, PlayStation, Kindle, etc) with a web browser (no need to install any client software) can upload or download files from the web GUI. python -m http.server 8000
You first start one server on a desktop/laptop which has the software, and then any client (Android, iOS, PlayStation, Kindle, etc) with a web browser (no need to install any client software) can upload or download files from it. chmod +x upload_server
./upload_server
Determine your machine's IP address using: # Linux
hostname -I
# Mac
ifconfig
# Windows
ipconfig
Navigate to the server's ip address port 8000 (indicated by the hostname -I command you ran earlier) in the web browser of your choice on any device (no need to download or install any client applications) and upload files using the web UI or directly via curl: curl -X POST --data-binary @file_to_upload.txt http://192.168.1.X:8000/uploaded_file.txt
Then download the file to another machine or mobile device either from the web GUI or via a commandline tool: curl http://192.168.1.X:8000/uploads/uploaded_file.txt --output downloaded_file.txt
If you don't have a local network, you can setup an adhoc hotspot on any Android 9+ (Settings > Network & internet > Hotspot & tethering https://support.google.com/android/answer/9059108) or iPhone (Settings > Personal Hotspot), then connect to it using any WiFi-enabled device. python -m http.server 8000
Download prebuilt binaries for Linux, Windows, Mac OS from https://github.com/akovacs/uploadserver/releases/ or install from source if you prefer # Linux
hostname -I
# Mac
ifconfig
# Windows
ipconfig
Start the file server, and then navigate to it using the web browser of your choice on any device connected to the WiFi network (no need for a client application). chmod +x upload_server
./upload_server
Navigate to the server's ip address (indicated by the hostname -I command you ran earlier) port 8000 in the browser of your choice and upload files using the web UI or directly via curl: curl -X POST --data-binary @file_to_upload.txt http://192.168.1.X:8000/uploaded_file.txt
Then download the file to another machine or mobile device either from your web browser or via a commandline tool: curl http://192.168.1.X:8000/uploads/uploaded_file.txt --output downloaded_file.txt python -m http.server 8000
to share a directory over a local network. Then you can point a web browser on another device to port 8000 of the server's IP address to download files. However, this can be slow for larger files. python -m http.server 8000
Download prebuilt binaries for Linux, Windows, Mac OS from https://github.com/akovacs/uploadserver/releases/
or install from source if you prefer [1] chmod +x upload_server
./upload_server
Navigate to the server's ip address port 8000 in the browser of your choice and upload files using the web UI or directly via curl: curl -X POST --data-binary @file_to_upload.txt http://192.168.1.X:8000/uploaded_file.txt
Then download the file to another machine or mobile device either from your web browser or via a commandline tool: curl http://192.168.1.X:8000/uploads/uploaded_file.txt --output downloaded_file.txt
[1] Steps for installing from source code: # install rust toolchain
sudo apt install rustc git
curl https://sh.rustup.rs -sSf | sh
rustup install nightly
rustup default nightly
git clone https://github.com/akovacs/uploadserver
cd uploadserver
cargo run --release python -m http.server 8000
Basically just start the file server, and then navigate to it using the web browser of your choice on any device (no need for a client application). pkg install curl
pkg install git
pkg install rust
git clone https://github.com/akovacs/uploadserver
cd uploadserver
cargo run --release
Then navigate to your machine's ip address port 8000 in the browser of your choice and upload files using the web UI or directly via curl: curl -X POST --data-binary @file_to_upload.txt http://localhost:8000/file_to_upload.txt
MIT licensed, so please feel free to do whatever you want with it as long as you provide attribution. Renderer -> Browser: BeginNavigation()
Browser -> Network: URLRequest()
Browser <- Network: URLResponse()
Renderer <- Browser: CommitNavigation()
Renderer -> Browser: DidCommitNavigation()
will output the following sequence diagram: .--------. .-------. .-------.
|Renderer| |Browser| |Network|
'--------' '-------' '-------'
| | |
| BeginNavigation() | |
|-------------------->| |
| | |
| |URLRequest() |
| |------------>|
| | |
| |URLResponse()|
| |<------------|
| | |
| CommitNavigation() | |
|<--------------------| |
| | |
|DidCommitNavigation()| |
|-------------------->| |
.--------. .-------. .-------.
|Renderer| |Browser| |Network|
'--------' '-------' '-------'
and then you can perform further edits using something like https://asciiflow.com/ (web, free) or https://ivanceras.github.io/bob-editor/ (web, free) or https://monodraw.helftone.com/ (Mac only, proprietary) as mentioned in other comments from https://news.ycombinator.com/item?id=37040883. Renderer -> Browser: BeginNavigation()
Browser -> Network: URLRequest()
Browser <- Network: URLResponse()
Renderer <- Browser: CommitNavigation()
Renderer -> Browser: DidCommitNavigation()
will output the following sequence diagram: .--------. .-------. .-------.
|Renderer| |Browser| |Network|
'--------' '-------' '-------'
| | |
| BeginNavigation() | |
|-------------------->| |
| | |
| |URLRequest() |
| |------------>|
| | |
| |URLResponse()|
| |<------------|
| | |
| CommitNavigation() | |
|<--------------------| |
| | |
|DidCommitNavigation()| |
|-------------------->| |
.--------. .-------. .-------.
|Renderer| |Browser| |Network|
'--------' '-------' '-------'
and then you can perform further edits using something like https://asciiflow.com/ (web, free) or https://ivanceras.github.io/bob-editor/ (web, free) or https://monodraw.helftone.com/ (Mac only, proprietary) as mentioned in other comments.
WiFi USB Client: Fingernail, eg: Asus USB-AX56 adapter (25.5 x 16 x 9mm) [8]
WiFi Card Client: Postage stamp, eg: Intel Dual-Band Wireless Adapter AC-7260NGW M.2 2230 (22mm x 30mm x 2.4mm) [10]
802.11n Wireless N range: theoretically 230 ft (70 m) range indoors and 820 ft (250m) range outdoors, which is approximately 1 FIFA soccer field's (105 x 68 m) width for indoor range, and 2 soccer fields end-to-end by 3 side-to-side for outdoor range. Newer protocols do not seem to have extended the range of individual radios but rather rely on repeaters or range extender devices to provide additional coverage.
https://www.hummingbirdnetworks.com/articles/what-is-the-dis...
https://en.wikipedia.org/wiki/IEEE_802.11#Protocol
https://publications.fifa.com/de/football-stadiums-guideline...
Some of these are slightly older devices dating from around 2020, but the sizes should generally still be approximately the same in 2025.
Router/Access point: Mobile operating systems like WebOS, Android, and iOS have had hotspot capabilites built-in since around around 2010 (Mobile Hotspot on Palm Pre and Pixi Plus in 2010 [1], Wifi Tethering in Android 2.2 Froyo in 2010 [2], and Personal Hotspot in iOS 4.3 for iPhone 4 and 3GS in 2011 [3]). Today you can configure your phone to become a personal Wifi router with one button press [4], [5].
[1] https://www.cnn.com/2010/TECH/01/07/ces.palm.pre.plus.pixi/i...
https://web.archive.org/web/20101125023042/http://articles.c...
https://archive.is/UD1Dm
[2] https://www.wired.com/2010/05/android-22-froyo-features-usb-...
https://web.archive.org/web/20140707210122/https://www.wired...
https://archive.is/kjH1N
[3] https://www.engadget.com/2011-03-09-ios-4-3-spotlight-person...
https://web.archive.org/web/20251018061108/https://www.engad...
https://archive.is/QBRod
[4] https://support.google.com/android/answer/9059108?hl=en
[5] https://support.apple.com/guide/iphone/share-your-internet-c...
For a discrete router device, TP-Link TL-WR802N (57 × 57 ×18 mm) [6] and GL-Inet GL-MT300N (58 x 58 x 25mm) [7] are matchbox-sized travel router devices that fit into the palm of your hand, cost less than $30 USD, and consume less than 2.75W (they can be run from a basic 5V, 1A USB connection).
[6] https://www.tp-link.com/us/home-networking/wifi-router/tl-wr...
https://web.archive.org/web/20250724184720/https://www.tp-li...
[7] https://www.gl-inet.com/products/gl-mt300n-v2/
https://web.archive.org/web/20250822045920/https://www.gl-in...
Wifi Client: Wifi capabilities are now built into mobile phone, TV, and many camera chipsets, there is no separate card required. If you want a separate WiFi adapter, you can buy a USB adapter that is about the size of a fingernail or 5 small coins stacked together (eg: 5 US pennies, or 5 Euro 1-cent coins), basically take the metal part of a USB-A male connector and extend or extrude it a bit. This Asus USB-AX56 adapter [8] is 25.5 x 16 x 9mm and supports WiFi 6 (802.11ax) with theoretical speeds up to 9.6 Gbps (actual real-world speeds appear closer to 800 Mbps). Streams in Wifi 6 can be up to 160MHz wide via channel bonding of up to 8 adjacent 20 MHz channels, but in practice this is only feasible in locations with low or no interference. Note that wider channels have a reduced effective range and perform poorly at a distance or through obstructions.
[8] https://www.asus.com/networking-iot-servers/adapters/all-ser...
https://web.archive.org/web/20251018061524/https://www.asus....
https://www.wi-fi.org/wi-fi-macphy
Discrete Wifi cards can still be found in some laptop computers (although many Wifi cards are now soldered down), one of the more recent (introduced around 2013 to 2015) and smaller sizes is M.2 2230 (22mm x 30mm x 2.4mm) which is also the form factor for some M.2 PCI-Express SSDs (solid state storage drives, typically flash devices). These are about the size of a postage stamp, weigh around 2.3 grams, and cost around $20 USD or less.
One example is Intel AX210 [9] which supports Wi-Fi 6E, on 3 bands: 2.4 / 5 / 6GHz in a 2x2 configuration (2 TX transmit and 2 RX receive antennas) at speeds of 2.4 Gbps, and also features Bluetooth 5.3.
[9] https://www.intel.com/content/www/us/en/products/sku/204836/...
A popular previous-generation device is Intel Dual-Band Wireless Adapter AC-7260NGW [10] with good support for GNU/Linux, again with a M.2 2230 (22mm x 30mm x 2.4mm) form-factor approximately the size of a postage stamp, supporting Wifi 5 802.11ac with up to 867 Mbps theoretical bandwidth on dual bands in a 2x2 configuration (2 TX transmit and 2 RX receive radios), and 433 Mbps per stream. Channels can be up to 80MHz wide via channel bonding of 4 adjacent 20 MHz channels.
An alternative, earlier form factor was Half Mini-PCI-Express, for example Intel Dual-Band Wirelss Adapter AC-7260HMW [10] at 26.80 x 30 x 2.4 mm.
[10] https://www.mouser.com/datasheet/2/612/dual-band-wireless-ac...
https://web.archive.org/web/20251018061520/https://www.mouse...