{"id":20721894,"url":"https://github.com/navanchauhan/swift-gopher","last_synced_at":"2026-03-07T20:01:27.773Z","repository":{"id":210614359,"uuid":"727020689","full_name":"navanchauhan/swift-gopher","owner":"navanchauhan","description":"Gopher server / client implementation written in Swift (RFC 1436 and More)","archived":false,"fork":false,"pushed_at":"2024-07-28T21:11:07.000Z","size":906,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-25T20:31:58.108Z","etag":null,"topics":["gopher","gopher-protocol","server","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/navanchauhan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-04T02:35:06.000Z","updated_at":"2025-04-05T15:19:58.000Z","dependencies_parsed_at":"2024-07-28T07:29:48.378Z","dependency_job_id":"1bb33349-bd52-4cb2-9252-d9870a3a30bc","html_url":"https://github.com/navanchauhan/swift-gopher","commit_stats":null,"previous_names":["navanchauhan/swift-gopher"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/navanchauhan/swift-gopher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navanchauhan%2Fswift-gopher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navanchauhan%2Fswift-gopher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navanchauhan%2Fswift-gopher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navanchauhan%2Fswift-gopher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/navanchauhan","download_url":"https://codeload.github.com/navanchauhan/swift-gopher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/navanchauhan%2Fswift-gopher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30229585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["gopher","gopher-protocol","server","swift"],"created_at":"2024-11-17T03:33:35.192Z","updated_at":"2026-03-07T20:01:27.744Z","avatar_url":"https://github.com/navanchauhan.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n                                                   \n ad88888ba                     88    ad88          \n d8\"     \"8b                    \"\"   d8\"     ,d     \n Y8,                                 88      88     \n `Y8aaaaa,   8b      db      d8 88 MM88MMM MM88MMM  \n   `\"\"\"\"\"8b, `8b    d88b    d8' 88   88      88     \n         `8b  `8b  d8'`8b  d8'  88   88      88     \n Y8a     a8P   `8bd8'  `8bd8'   88   88      88,    \n  \"Y88888P\"      YP      YP     88   88      \"Y888  \n                                                    \n                                                    \n                                                                          \n   ,ad8888ba,                          88                                 \n  d8\"'    `\"8b                         88                                 \n d8'                                   88                                 \n 88             ,adPPYba,  8b,dPPYba,  88,dPPYba,   ,adPPYba, 8b,dPPYba,  \n 88      88888 a8\"     \"8a 88P'    \"8a 88P'    \"8a a8P_____88 88P'   \"Y8  \n Y8,        88 8b       d8 88       d8 88       88 8PP\"\"\"\"\"\"\" 88          \n  Y8a.    .a88 \"8a,   ,a8\" 88b,   ,a8\" 88       88 \"8b,   ,aa 88          \n   `\"Y88888P\"   `\"YbbdP\"'  88`YbbdP\"'  88       88  `\"Ybbd8\"' 88          \n                           88                                             \n                           88 \n```\n\n# Swift-Gopher\n\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fnavanchauhan%2Fswift-gopher%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/navanchauhan/swift-gopher)\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fnavanchauhan%2Fswift-gopher%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/navanchauhan/swift-gopher)\n\n* swift-gopher : Gopher server implementation written in Swift\n* swiftGopherClient: Gopher client library written in Swift ( w/ Support for Network.Framework on Apple platforms)\n\nThis package also provides GopherHelpers which may be useful while building a client. A PoC client for iOS/macOS/iPadOS called `iGopherBrowser` uses both `GopherHelpers` and `swiftGopherClient`\n\nYou can interact with my hosted gopher server at [gopher://gopher.navan.dev](gopher://gopher.navan.dev) or [https://gopher.navan.dev](https://gopher.navan.dev)\n\n```\nUSAGE: swift-gopher [--gopher-host-name \u003cgopher-host-name\u003e] [--host \u003chost\u003e] [--port \u003cport\u003e] [--gopher-data-dir \u003cgopher-data-dir\u003e] [--disable-search] [--disable-gophermap]\n\nOPTIONS:\n  -g, --gopher-host-name \u003cgopher-host-name\u003e\n                          Hostname used for generating selectors (default: localhost)\n  -h, --host \u003chost\u003e       (default: 0.0.0.0)\n  -p, --port \u003cport\u003e       (default: 8080)\n  -d, --gopher-data-dir \u003cgopher-data-dir\u003e\n                          Data directory to map (default: ./example-gopherdata)\n  --disable-search        Disable full-text search feature\n  --disable-gophermap     Disable reading gophermap files to override automatic generation\n  -h, --help\n```\n\n## Get Started\n```\ngit clone https://github.com/navanchauhan\ncd swift-gopher\nswift build -c release \u0026\u0026 swift run swift-gopher\n```\n\nThen, you can either use lynx or curl (or other Gopher clients) to connect to the server.\n\n```\nlynx gopher://localhost:8080\n# Or,\ncurl gopher://localhost:8080\n```\n\n**Note: Depending on user privileges, you may not be able to bind to port 70.**\n\nTo give privilege to the binary on Linux, you can use the following command:\n\n```bash\nsudo setcap CAP_NET_BIND_SERVICE=+eip ./.build/release/swift-gopher\n```\n\nYou can also refer to the systemd file below to grant the binary the same privileges\n\n## Deploying\n\n### Systemd\n\nSample systemd file:\n\n```\n[Unit]\nDescription=Swift-Gopher\n\n[Service]\nExecStart=/home/swift-gopher/swift-gopher/.build/release/swift-gopher --port 70 --gopher-host-name gopher.navan.dev --gopher-data-dir /home/swift-gopher/gopher_data\nUser=swift-gopher\nGroup=swift-gopher\nAmbientCapabilities=CAP_NET_BIND_SERVICE\nNoNewPrivileges=true\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## HTTP Proxy\n\nAlthough, `swift-gopher` does not currently have a native HTTP handler, you can use self host some of the following packages to proxy the Gopher server to HTTP:\n\n* [gophper-proxy](https://github.com/muffinista/gophper-proxy) + Caddy is what I use to host the HTTPS version of my Gopher server at [https://gopher.navan.dev](https://gopher.navan.dev)\n* [gopher-proxy](https://hackage.haskell.org/package/gopher-proxy)\n* [gopherproxy-c](https://git.codemadness.org/gopherproxy-c/)\n\n## TODO:\n\n- [ ] Add Tests\n- [ ] Add CI\n- [x] Add more documentation\n- [ ] Automatic Versioning\n- [ ] Verify Compatibility with other Gopher Clients\n- [ ] Support Gemini Protocol\n- [x] Add a client library\n- [ ] Add native HTTP handler\n- [ ] Guestbook\n\n## Generating Docs\n\n```bash\n./generate_docs.sh swiftGopherClient swift-gopher GopherHelpers\n```\n\n### Reference Documentation\n\nReference Documentation is hosted at [https://web.navan.dev/swift-gopher](https://web.navan.dev/swift-gopher)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavanchauhan%2Fswift-gopher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnavanchauhan%2Fswift-gopher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavanchauhan%2Fswift-gopher/lists"}