{"id":16608165,"url":"https://github.com/ikskuh/ftz","last_synced_at":"2025-10-29T16:32:15.322Z","repository":{"id":68601180,"uuid":"341843319","full_name":"ikskuh/ftz","owner":"ikskuh","description":"A simple cross-platform file transfer utility","archived":false,"fork":false,"pushed_at":"2022-09-18T20:44:56.000Z","size":26,"stargazers_count":16,"open_issues_count":2,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-02T03:21:49.757Z","etag":null,"topics":["file-transfer","network","networking","tool","zig","ziglang"],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ikskuh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-02-24T09:17:13.000Z","updated_at":"2025-01-23T08:42:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"969d51c2-0698-4db1-9eb5-4d9c883e6fbb","html_url":"https://github.com/ikskuh/ftz","commit_stats":null,"previous_names":["ikskuh/ftz"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikskuh%2Fftz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikskuh%2Fftz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikskuh%2Fftz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikskuh%2Fftz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ikskuh","download_url":"https://codeload.github.com/ikskuh/ftz/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238855871,"owners_count":19542096,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-transfer","network","networking","tool","zig","ziglang"],"created_at":"2024-10-12T01:25:17.302Z","updated_at":"2025-10-29T16:32:10.035Z","avatar_url":"https://github.com/ikskuh.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ftz\n\nA small and simple file transfer utility.\n\n**Features:**\n- Upload and download files\n- Server can chose to provide only downloads or uploads\n- Clients are restricted to the subfolders, no way to break out.\n- Native cross platform support (Windows, Linux, MacOS, BSDs)\n- Static, small binary (207K on Linux, 128K on Windows, 123K on MacOS)\n\n**Usage:**\n```\nftz [verb]\n  Quickly transfer files between two systems connected via network.\n\nVerbs:\n  ftz help\n    Prints this help\n  \n  ftz host [path] [--get-dir path] [--put-dir path] [--port num] \n    Hosts the given directories for either upload or download.\n    path            If given, sets both --get-dir and --put-dir to the same directory.\n    --get-dir path  Sets the directory for transfers to a client. No access outside this directory is allowed.\n    --put-dir path  Sets the directory for transfers from a client. No access outside this directory is allowed.\n    --port    num   Sets the port where ftz will serve the data. Default is 17457\n  \n  ftz get [--output file] [uri]\n    Fetches a file from [uri] into the current directory. The file name will be the file name in the URI.\n    uri             The uri to the file that should be downloaded.\n    --output file   Saves the resulting file into [file] instead of the basename of the URI.\n  \n  ftz put [file] [uri]\n    Uploads [file] (a local path) to [uri] (a ftz uri)\n\n  ftz version\n    Prints the ftz version.\n\nExamples:\n  ftz host .\n    Open the current directory for both upload and download.\n  ftz put debug.log ftz://device.local/debug.log\n    Uploads debug.log to the server.\n  ftz get ftz://device.local/debug.log\n    Downloads debug.log from the server.\n```\n\n## Usage / Concept  / Design\n\nFTZ was designed to transfer files between virtual machines and the host system or different machines on the same local network.\n\nIt is not designed to be a constantly running server, especially not on the internet and thus has (by design) no authentication, no session resumption or whatsoever. It has an integrity check though to verify if the transfer was successful.\n\n## Building\n[![Build](https://github.com/MasterQ32/ftz/actions/workflows/cross-build.yml/badge.svg)](https://github.com/MasterQ32/ftz/actions/workflows/cross-build.yml)\n\nTo build `ftz` you need the lastest zig master (\u003e= `0.8.0-dev.1159+d9e46dcee`), then invoke:\n```\nzig build\n```\n\nThen fetch your file from `zig-cache/bin` and use it!\n\n## URI Format\n\nThe URI format for FTZ only allows the scheme (`ftz://`), a hostname and the path. An uri that contains a username, password, query or fragment is invalid and will not be accepted.\n\n**Examples:**\n```\nftz://random-projects.net/ftz.service\nftz://random-projects.net:124/ftz.service\n```\n\n## Protocol\n\nUses TCP, port 17457\n\n**FETCH:**\n```\nC: =\u003e \"GET $(PATH)\\r\\n\"\nS: =\u003e \"$(MD5SUM)\"\nS: =\u003e \"$(DATA)\" | connection drop\n```\n\n**PUT:**\n```\nC: =\u003e \"PUT $(PATH)\\r\\n\"\nC: =\u003e \"$(MD5SUM)\"\nS: =\u003e nothing | connection drop\nC: =\u003e \"$(DATA)\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikskuh%2Fftz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fikskuh%2Fftz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikskuh%2Fftz/lists"}