{"id":17117752,"url":"https://github.com/anderspitman/fibridge-proxy-rs","last_synced_at":"2025-08-26T09:14:42.137Z","repository":{"id":37889000,"uuid":"174771196","full_name":"anderspitman/fibridge-proxy-rs","owner":"anderspitman","description":"Proxy for turning web browsers into web servers. Load a 100GB file in your browser and stream it over the public web with HTTP byte range requests.","archived":false,"fork":false,"pushed_at":"2023-06-21T22:10:59.000Z","size":216,"stargazers_count":99,"open_issues_count":9,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-25T09:17:42.194Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","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/anderspitman.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}},"created_at":"2019-03-10T02:58:48.000Z","updated_at":"2025-04-11T03:33:19.000Z","dependencies_parsed_at":"2024-10-28T07:46:38.944Z","dependency_job_id":null,"html_url":"https://github.com/anderspitman/fibridge-proxy-rs","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/anderspitman/fibridge-proxy-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anderspitman%2Ffibridge-proxy-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anderspitman%2Ffibridge-proxy-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anderspitman%2Ffibridge-proxy-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anderspitman%2Ffibridge-proxy-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anderspitman","download_url":"https://codeload.github.com/anderspitman/fibridge-proxy-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anderspitman%2Ffibridge-proxy-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272201621,"owners_count":24891038,"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","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"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":[],"created_at":"2024-10-14T17:52:36.849Z","updated_at":"2025-08-26T09:14:42.116Z","avatar_url":"https://github.com/anderspitman.png","language":"Rust","funding_links":[],"categories":["File Sharing and Synchronization"],"sub_categories":["E-commerce"],"readme":"Rationale and introduction available in the\n[blog post](http://iobio.io/2019/06/12/introducing-fibridge/).\n\nThe point of this is to allow your browser to \"host\" files which can be\nstreamed over HTTP. This requires a proxy server to handle the HTTP requests\nand forward them to the browser over websockets.\n\nWhy would this be useful? If the user has a very large file (genomic data files\ncan easily be in the 20GB-200GB range), and you want to make\n[ranged requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests)\nto that file (ie only download specific chunks) as though it were hosted on a\nnormal server, this will allow that. In [iobio](http://iobio.io/) we use this\nto allow our backend system to access a user's local files for processing by\nbackend tools such as samtools.\n\n# Example usage\n\nFirst start up the proxy server. We'll assume it's publicly available at\nexample.com. You can either download it from the release page, or see\nbelow for instructions on building.\n\nThen start it up:\n\n```bash\n./fibridge-proxy-rs --port 9001\n```\n\nA few useful options:\n\n```bash\nsudo ./fibridge-proxy-rs --host fbrg.xyz --port 80 --ip-address 172.xxx.x.x --key keyfile.pem --cert certfile.pem --secure-port 443\n```\n\nCreate a hoster object in the browser and host a file (see\n[this page](https://github.com/anderspitman/fibridge-host-js) for information\nabout the `fibridge-host` library):\n\n```javascript\nconst fibridge = require('fibridge-host');\nfibridge.createHoster({ proxyAddress: 'example.com', port: 9001, secure: false }).then((hoster) =\u003e {\n\n  const file = new File([\"Hi there\"], \"file.txt\", {\n    type: \"text/plain\",\n  });\n\n  const path = '/' + file.name;\n\n  hoster.hostFile(path, file);\n\n  // This is necessary because fibridge automatically generates a randomized\n  // hoster id which is included in the path.\n  const fullPath = hoster.getHostedPath(path);\n  const url = `http://example.com:9001${fullPath}`;\n\n  console.log(url);\n});\n```\n\nThat will print out a URL for the hosted file. You can then retrieve the file\nusing any http client:\n\n```bash\ncurl example.com:9001/\u003choster-uuid\u003e/file.txt\nHi there\n```\n\nRanged requests work too:\n```bash\ncurl -H \"Range: bytes=0-2\" example.com:9001/\u003choster-uuid\u003e/file.txt\nHi\n```\n\n# Building\nIn order to build from source, you'll first need rust installed. The proxy currently expects\nthe GUI repo to be available in the same directory, like this:\n\n```\nfibridge/\n  fibridge-proxy-rs/\n  fibridge-gui-js/\n```\n  \nSee [fibridge-gui-js](https://github.com/anderspitman/fibridge-gui-js) for instructions\non building the GUI.\n\nOnce the GUI is built, run:\n\n```bash\ncargo build --release\n```\n\nIf all goes well you should end up with a binary in `fibridge-proxy-rs/target/release`.\n\n# Other implementations\nThere is an API-compatible JavaScript (Node) implementation of the proxy server\navailable\n[here](https://github.com/anderspitman/fibridge-proxy-js).\n\n# API\nI still need to document the API, but it's pretty simple. It uses\n[omni-rpc](https://github.com/omnistreams/omni-rpc-spec), which is\nitself built on top of\n[omnistreams](https://github.com/omnistreams/omnistreams-spec).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanderspitman%2Ffibridge-proxy-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanderspitman%2Ffibridge-proxy-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanderspitman%2Ffibridge-proxy-rs/lists"}