{"id":50658844,"url":"https://github.com/wanetty/upgopher","last_synced_at":"2026-06-08T01:06:29.370Z","repository":{"id":158476581,"uuid":"614457099","full_name":"wanetty/upgopher","owner":"wanetty","description":"This is a simple Go web server that allows users to upload files and view a list of the uploaded files. The server can be run locally or deployed to a remote server. (Linux / Windows / Mac)","archived":false,"fork":false,"pushed_at":"2026-04-15T13:30:26.000Z","size":1450,"stargazers_count":59,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-15T15:30:48.877Z","etag":null,"topics":["file-server","file-sharing","file-upload","go","http-server","linux","macos","multiplatform","redteam","redteam-tools","simplehttpserver","windows"],"latest_commit_sha":null,"homepage":"https://blog.wanetty.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wanetty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security_test.go","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"wanetty","custom":null}},"created_at":"2023-03-15T16:10:31.000Z","updated_at":"2026-04-15T13:30:36.000Z","dependencies_parsed_at":"2024-05-03T16:58:15.749Z","dependency_job_id":"2da94b5b-a4a0-4480-b2d1-966c3592f884","html_url":"https://github.com/wanetty/upgopher","commit_stats":null,"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/wanetty/upgopher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanetty%2Fupgopher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanetty%2Fupgopher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanetty%2Fupgopher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanetty%2Fupgopher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wanetty","download_url":"https://codeload.github.com/wanetty/upgopher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wanetty%2Fupgopher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34043826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file-server","file-sharing","file-upload","go","http-server","linux","macos","multiplatform","redteam","redteam-tools","simplehttpserver","windows"],"created_at":"2026-06-08T01:06:26.118Z","updated_at":"2026-06-08T01:06:29.365Z","avatar_url":"https://github.com/wanetty.png","language":"Go","funding_links":["https://buymeacoffee.com/wanetty"],"categories":[],"sub_categories":[],"readme":"# Upgopher\n\n\u003cp align=\"center\"\u003e\u003cimg width=250 alt=\"Logo\" src=\"https://github.com/wanetty/upgopher/blob/main/static/logopher.webp\"\u003e\u003c/p\u003e\n\n[![Go](https://github.com/wanetty/upgopher/actions/workflows/go.yml/badge.svg)](https://github.com/wanetty/upgopher/actions/workflows/go.yml)\n\nUpgopher is a zero-dependency Go web server for file sharing. It provides a browser-based interface for uploading, downloading, and managing files, with optional HTTPS, basic authentication, and read-only mode. Distributed as a single self-contained binary with no external runtime dependencies.\n\n![Example Photo](./static/example.png)\n![Example Photo 2](./static/example2.png)\n![Directory Tree](./static/directorytree_exmaple.png)\n\n## Features\n* Users can upload files by selecting a file and clicking the \"Upload\" button\n* Uploaded files are stored in the \"uploads\" directory by default, but the directory can be changed using the -dir flag\n* Users can view a list of the uploaded files by visiting the root URL\n* Basic authentication is available to restrict access to the server. To use it, set the -user and -pass flags with the desired username and password.\n* Traffic via HTTPS with self-signed certificate generation or custom certificates\n* Browse through folders and upload files with drag-and-drop support\n* Directory tree sidebar with expand/collapse controls\n* Breadcrumb navigation with clickable path segments\n* Copy file URLs to clipboard with one click for easy sharing\n* Search within text files directly from the web interface\n* Create custom path aliases for easy file access\n* Shared clipboard for cross-device text sharing\n* Zip folder download functionality\n* Option to hide hidden files with the -disable-hidden-files flag\n* Readonly mode to disable uploads and deletions while allowing downloads\n\n\n\n## Installation\n\n\n### Automatically\n\nJust run this command in your terminal with go installed.\n```bash\ngo install github.com/wanetty/upgopher@latest\n```\n\n### Releases\n\nGo to the [releases](https://github.com/wanetty/upgopher/releases) section and get the one you need.\n\n### Manual\n\nJust build it yourself\n\n```bash\ngit clone https://github.com/wanetty/upgopher.git\ncd upgopher\ngo build \n```\n### Docker\n\n```bash\ndocker build . -t upgopher\ndocker run --name upgopher -p 9090:9090  upgopher\n```\n\n## Usage\n\n### Help Output:\n\n```bash\n./upgopher -h\nUsage of ./upgopher:\n  -cert string\n        HTTPS certificate\n  -dir string\n        directory path (default \"./uploads\")\n  -disable-hidden-files\n        disable showing hidden files\n  -key string\n        private key for HTTPS\n  -max-upload-size int\n        maximum upload size in GB (0 means unlimited)\n  -max-tabs int\n        maximum number of shared clipboard tabs\n  -pass string\n        password for authentication\n  -port int\n        port number (default 9090)\n  -q    quiet mode\n  -read-timeout duration\n        server read timeout (0 means unlimited)\n  -read-header-timeout duration\n        server read header timeout\n  -write-timeout duration\n        server write timeout (0 means unlimited)\n  -readonly\n        readonly mode (disable upload and delete operations)\n  -ssl\n        use HTTPS on port 443 by default. (If you don't put cert and key, it will generate a self-signed certificate)\n  -user string\n```\n\n### Examples\n\n**Basic usage:**\n```bash\n./upgopher\n```\nThis will start the server on the default port (9090) and store uploaded files in the ./uploads directory.\n\n**Custom port and directory:**\n```bash\n./upgopher -port 8080 -dir \"/path/to/files\"\n```\n\n**With basic authentication:**\n```bash\n./upgopher -user admin -pass secretpassword\n```\n\n**With HTTPS (self-signed certificate):**\n```bash\n./upgopher -ssl\n```\n\n**With HTTPS (custom certificate):**\n```bash\n./upgopher -ssl -cert /path/to/cert.pem -key /path/to/key.pem\n```\n\n**Hide hidden files:**\n```bash\n./upgopher -disable-hidden-files\n```\n\n**Readonly mode (disable uploads and deletions):**\n```bash\n./upgopher -readonly\n```\n\n**Limit upload size to 1 GB:**\n```bash\n./upgopher -max-upload-size 1\n```\n\n**Limit shared clipboard tabs to 5:**\n```bash\n./upgopher -max-tabs 5\n```\n\n**Set a custom read timeout (for large uploads on slower links):**\n```bash\n./upgopher -read-timeout 30m\n```\n\n**Recommended for large uploads:**\n```bash\n./upgopher -read-timeout 0 -write-timeout 0\n```\n\nNote: Cloudflare Quick Tunnels are intended for testing and can impose limits. For reliable large uploads, prefer a full Cloudflare Tunnel.\n\n\n## Security\n\n### Reporting Vulnerabilities\n\nIf you discover a security vulnerability, please contact [@gm_eduard](https://twitter.com/gm_eduard/) directly. Please do not open a public issue.\n\n\n## License\nThis project is licensed under the MIT License. See the LICENSE file for details.\n\n## Development\n\n### Building from Source\n\n```bash\ngit clone https://github.com/wanetty/upgopher.git\ncd upgopher\ngo build -o upgopher\n```\n\n### Running Tests\n\n```bash\n# All tests\ngo test -v ./...\n\n# Only fast tests (skip time-based tests)\ngo test -v -short ./...\n\n# With coverage\ngo test -cover ./...\n```\n\n### Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Run tests (`go test -v ./...`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwanetty%2Fupgopher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwanetty%2Fupgopher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwanetty%2Fupgopher/lists"}