Go-drop banner

Go-drop

10 devlogs
28h 55m 21s

A fast, minimal command-line file sharing tool written in Go. Serve any file, folder, or text snippet over your local network or expose it to the internet.

This project uses AI

[from README.md]
This project was built as a personal learning experience with Go, and was developed largely independently. AI was mainly used for:

Bubble Tea (TUI)

  • The TUI integration in ui.go was one of the hardest parts of the project. AI was consulted to help understand how Bubble Tea’s event/message model works, it took a lot amount of timeee.

Bug Fixing and Debugging

  • AI was consulted when facing difficult bugs, particularly in:
    • Event handling in the TUI (e.g. ensuring the UI updates correctly on file transfer progress, handling events)
    • Cache control headers and browser caching issues (e.g. ensuring that files are not cached by the browser to prevent bugs)
    • Other bugs occurring during development, since Go is not a language I’m deeply familiar with.

Documentation

  • This README was partially generated by AI and then modified to ensure accuracy.

Used ChatGPT, Gemini and Github Copilot (mainly for inline suggestions)

Demo Repository

Loading README...

cskartikey

Tagged your project as well cooked!

šŸ”„ cskartikey marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

artur33

Shipped this project!

Hours: 28.92
Cookies: šŸŖ 647
Multiplier: 22.37 cookies/hr

Shipping go-drop, a CLI file sharing tool written in Go :)
It lets you serve any file, folder, or text snippet over your local network or expose it to the internet via a tunnel (localhost.run) straight from your terminal.
It started as a tiny personal tool (because I needed to move some files and did’t have a usb drive :/) and I just wanted to transfer files without dragging them through Discord or Drive. It turned into a proper CLI app (kinda…) with a live Bubble Tea TUI, HTTPS with self-signed certs, receive mode, password, file previews in the browser, online tunneling, and QR codes that warn you when your terminal is too small to display them lol.
The hardest part was definitely the Bubble Tea TUI. I lost so much time just understanding how its everything works and restructuring the whole codebase around it. Everything has to flow through messages and I kept breaking things. I’m still not 100% happy with how clean it ended up, but it works, so that’s gud :D
I’m proud that this actually feels like a tool and the online tunnel especially I thought that was going to be difficult to implement and it ended up being easy yeeehh.
The project also taught me a lot about Go, networking, TLS, TUI, and how to build something that just works (in Go). But I still prefer Python after all of this, hihi :)

artur33

Note: Last devlog for this project. This started as a small personal tool to quickly transfer files, but it turned into a (kinda, lol) CLI application. Along the way I learned a lot about Go, a bittt of networking and TUI. The project definitely grew more complex than I initially expected :D

Added/Fixed:

  • QR generation moved fully into the terminal UI
  • Prints warning if the terminal window is too small
  • Properly respects the noqr CLI flag
  • Displays truncated file list before transfer preparation
  • Cleans up printed lines correctly after preparation
  • Active transfer tracking added (server now waits for compleating all the downloads before shutdown)
  • Added text preview support (there was a bug, bruh)
  • Fixed CSS word-wrap issues for long filenames
  • Linux clipboard support improved with ā€œxselā€ fallback
  • Fixed filename collision logic in receive mode
  • Wrote the README (with AI help)
  • Created all the executables (I can’t test on MacOS, hope it works, ye)
  • Minor internal fixes and cleanup
  • Tested if everything works (Windows and Linux (Arch))

Next:

  • SHIPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Attachment
0
artur33

Added/Fixed:

  • File preview system implemented (for images and PDFs)
  • Supports sharing entire directories (auto-zip)
  • Flag to share text (transformed into a .txt file)
  • Flag to specify a custom filename for the shared content
  • Version Flag
  • Progress spinner added for longer operations (zipping / preparation)
  • Download flow changes and refactor (for the success page)
  • Web success page added to trigger the download
  • Dark mode added to pages
  • Internal improvements, little changes and refactors

Next:

  • Fix bugs and everything
  • Build for every OS
  • Shippppppppppppppppppppp
0
artur33

Added/Fixed:

  • Online tunnel support implemented (exposes local server to the public internet) (tunnel.go)
  • Clipboard integration (all kind of URL automatically copy to clipboard)
  • Public URL displayed in the TUI and copied to clipboard too
  • Compact QR rendering (+ UI updated to show public QR)
  • Download page: displays filename, file size, and detected MIME type
  • Minor internal refactors related to tunnel stuff and UI updates

Note: I initially wanted to use ngrok for public exposure, but it ended up being more complex than expected (auth setup and other flow complications). Implementing the localhost.run tunnel flow turned out to be cleaner and simpler. I honestly thought this would be much harder to implement tho.

Next:

  • File preview in browser before downloading (images, text, PDF)
  • Folder support (auto-zip)
  • Dark mode for web pages
  • Fix bugs and everything
  • Build for every OS
  • Shippp
0
artur33

Added/Fixed:

  • Optional HTTPS mode implemented (generates self-signed certificate automatically and then uses TLS listener)
  • Command-line Arg: enable TLS
  • Displays certificate fingerprint in UI foe verification
  • File collision handling in receive mode (Prevents overwriting existing files)
  • Silenced default server logs (prevents UI bugs)
  • Minor internal refactors related to TLS setup

Next:

  • Public share (public URL)
Attachment
Attachment
0
artur33

Added/Fixed:

  • Integrated Bubble Tea TUI (ui.go)
  • UI now surfaces progress, status updates, and errors in real time
  • Upload progress streamed into the UI via events
  • Download completion, limits reached, and errors now emit UI messages
  • Moved QR generation to a dedicated function
  • Cleaner separation between server logic and UI (sometimes not, but I tried :/)
  • Added browser ā€œsuccess pageā€ after upload (redirect flow)
  • Minor flow and stability fixes related to event handling
  • Bugs and problem fixes (a lot)

Note: This was honestly really difficult. I lost a lot of time understanding how Bubble Tea works and restructuring everything around events, I’m not fully happy with the result, but it works and it’s fine for now ig

Next:

  • Certificates
  • Public share (public url)?????????????????????? I’m so cooked…
0
artur33

Added/Fixed:

  • Receive mode implemented to accept file uploads
  • Command-line args: flag to enable receive mode and save uploaded files save path
  • Web ā€˜upload’ interface added: ā€œdrag and dropā€ support and progress bar
  • Prints (in console) upload progress (transfer)
  • Same QR code generation func for receive mode webpage

Next:

  • UI
  • Certificates?
  • Public share (public url)?????????????????????? I’m so cooked…
0
artur33

Added/Fixed:

  • Multi file sharing support via, saved in RAM, ZIP archive (automatically creates a ZIP when multiple input paths are provided)
  • Command-line Arg: configurable archive name for generated ZIP
  • Transfer size and file listing feedback
  • Logging improvements: prints client IP and transfer activity, prints waiting/progress messages

Next:

  • Upload mode (receive files from other devices)
  • UI…
0
artur33

Added/Fixed:

  • Token access control for downloads
  • Command-line Arg: password protection layer (POST form (web.go) authentication before download)
  • Command-line args: IP download limiting and timeout auto shutdown
  • Shutdown reason codes (completed, timeout, error)

Next:

  • Allow sharing multiple files
  • Maybe a UI? lol
Attachment
Attachment
Attachment
0
artur33

Added/Fixed:

  • Command-line args: custom port selection, download limit control and option to disable QR code output
  • Server shuts down automatically after reaching the specified download (fixed the behaviour for implementing the new args func)
  • Improved CLI output clarity (colored status messages)
  • Explicit display of the download URL
  • Added cache control headers to prevent unwanted caching (this one fixed the automatic shutdown)

Next:

  • A password for accessing download
  • Allow sharing multiple files
0
artur33

Note: This project started as a quick personal tool to transfer files without external services, and as a way to learn Go, ehe, I’m not really good at this language

Added/Fixed:

  • Temporary HTTP file sharing implemented
  • Automatic host IP detection
  • Terminal QR code generation (trough this package: go-qrcode)
  • Server automatically stops after the file is downloaded once

Next:

  • Add optional flags like port selection for example
  • Some kind of status of the file on host
  • A password for accessing download
  • Allow sharing multiple files
0