| .gitignore | first commit | |
| AGENT.md | Add support for OPTIONS and HEAD requests | |
| go.mod | first commit | |
| go.sum | first commit | |
| gowoof.go | Add support for downloading file | |
| gowoof_test.go | Add support for downloading file | |
| LICENSE | first commit | |
| README.md | Add support for downloading file | |
Simply exchange files with GOWOOF
GoWoof is a Go rewrite of Simon Budig's original woof application. I love woof but wanted a one binary version that does not require other dependencies, such as Python. GoWoof aims to be commandline compatible with woof and also support the same INI structured configuration file.
Just as with woof the goal is to allow simple peer to peer exchange of files without the need to run a daemon process.
GoWoof was mostly vibecoded using Sourcegraph Amp as a attempt to learn how agentic coding works. In total I spend most of the 10ドル provided by Sourcegraph Amp as a part of the trail.
GoWoof assumes that everybody has a web-browser or a commandline web-client installed. GoWoof is a small simple stupid webserver that can easily be invoked on a single file. Your partner can access the file with tools he trusts (e.g. wget). No need to enter passwords on keyboards where you don't know about keyboard sniffers, no need to start a huge lot of infrastructure, just do a
$ gowoof filename
and tell the recipient the URL gowoof spits out. When he got that file, gowoof will quit and everything is done.
And when someone wants to send you a file, gowoof has a switch to offer itself, so he can get gowoof and offer a file to you.
Usage
GoWoof is a single binary with no dependencies.
Usage: gowoof [-i <ip_addr>] [-p <port>] [-c <count>] <file>
gowoof [-i <ip_addr>] [-p <port>] [-c <count>] [-z|-j|-Z|-u] <dir>
gowoof [-i <ip_addr>] [-p <port>] [-c <count>] -s
gowoof [-i <ip_addr>] [-p <port>] [-c <count>] -U
gowoof <url>
Serves a single file <count> times via http on port <port> on IP
address <ip_addr>.
When a directory is specified, an tar archive gets served. By default
it is gzip compressed. You can specify -z for gzip compression,
-j for bzip2 compression, -Z for ZIP compression or -u for no compression.
You can configure your default compression method in the configuration
file described below.
When -s is specified instead of a filename, woof distributes itself.
When -U is specified, woof provides an upload form, allowing file uploads.
defaults: count = 1, port = 8080
Note: OPTIONS and HEAD requests do not count towards the download/upload
limit. Only actual GET requests (for file downloads) and POST requests
(for file uploads) are counted.
If started with an url as an argument, gowoof acts as a client,
downloading the file and saving it in the current directory.
You can specify different defaults in two locations: /etc/woofrc
and ~/.woofrc can be INI-style config files containing the default
port and the default count. The file in the home directory takes
precedence. The compression methods are "off", "gz", "bz2" or "zip".
Sample file:
[main]
port = 8008
count = 2
ip = 127.0.0.1
compressed = gz