{"id":19302483,"url":"https://github.com/bitlytwiser/pufs","last_synced_at":"2025-06-16T19:08:02.165Z","repository":{"id":61626828,"uuid":"532428071","full_name":"BitlyTwiser/pufs","owner":"BitlyTwiser","description":"Decentralized file system using IPFS,gRPC,Protobuf, and Go","archived":false,"fork":false,"pushed_at":"2022-10-23T19:26:33.000Z","size":6770,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-04T20:26:07.818Z","etag":null,"topics":["filesystem","golang","grpc","grpc-client","grpc-go","grpc-server","protobuf","real-time","streaming"],"latest_commit_sha":null,"homepage":"","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/BitlyTwiser.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}},"created_at":"2022-09-04T03:25:39.000Z","updated_at":"2024-09-17T01:49:09.000Z","dependencies_parsed_at":"2023-01-20T13:46:20.418Z","dependency_job_id":null,"html_url":"https://github.com/BitlyTwiser/pufs","commit_stats":null,"previous_names":["bitlytwiser/pufs-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BitlyTwiser/pufs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitlyTwiser%2Fpufs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitlyTwiser%2Fpufs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitlyTwiser%2Fpufs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitlyTwiser%2Fpufs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BitlyTwiser","download_url":"https://codeload.github.com/BitlyTwiser/pufs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitlyTwiser%2Fpufs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260221377,"owners_count":22976863,"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":["filesystem","golang","grpc","grpc-client","grpc-go","grpc-server","protobuf","real-time","streaming"],"created_at":"2024-11-09T23:22:21.989Z","updated_at":"2025-06-16T19:08:02.135Z","avatar_url":"https://github.com/BitlyTwiser.png","language":"Go","readme":"# pufs\n- Pufs is a distributes file system utilizing IPFS, gRPC, and protocol buffers.\n- The goal is to utilize the server as a primary mechanism to store uplodaed files in memory, allowing the user to stream file system changes to listening clients. The files are stored in a distributed fashion, utilizing IPFS as the backbone to accomplish this.\n\n# Example usage:\n\n![Usage](https://pufs-gif-github.s3.us-west-2.amazonaws.com/pufs.gif)\n\n# Usage:\n- One can utilize the dockerized version of the application or run the server on a node.\n- ```make docker``` will use docker compose to build the application using the subsequent dockerfile.\n\n# Cli Usage:\n- You can utilize the client cli to interface with the server.\n- Examples:\n- Upload file:\n```\ngo run ./client/pufs_client.go upload -path \u003cpath_to_file\u003e\n```\n- Stream file changes:\n```\ngo run ./client/pufs_client.go stream\n```\n- List files currently within the file system:\n```\ngo run ./client/pufs_client.go list\n```\n- Download file to local filesystem:\n- Provide to the client the path of where you want the file to be stored when it is downloaded to disk and the name of the file.\n```\ngo run ./client/pufs_client.go download -name \u003cfile_name\u003e -path /tmp\n```\n- Deleting file:\n```\ngo run ./client/pufs_client.go delete -name \u003cfile_name\u003e\n```\n\n# Changes distributes to clients in real time:\n- If you utilize the client in stream mode, you will obtain changes to the file system in real time.\n- When any user uploads a new file, the user will see all file changes reflected in their client.\n- Example:\n\n# Ipfs:\n- This application uses [kubo](https://github.com/ipfs/kubo) for spinning up an IPFS node using a local IPFS installation.\n- One must have IPFS installed in order to properly utlize the application.\n- The dockerized application installs IPFS within the container.\n- You can follow the [install](https://docs.ipfs.io/install/) docs for IPFS to get IPFS setup locally.\n- IPFS files are pinned, allowing your stored files to forgo IPFS garbage collection.\n[Persistence docs](https://docs.ipfs.tech/concepts/persistence/)\n\n\n# gRPC:\n- To enhance server logging for gRPC (in case of error), one can utilize the environment variables:\n```export GRPC_GO_LOG_VERBOSITY_LEVEL=99```\n```export GRPC_GO_LOG_SEVERITY_LEVEL=info```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitlytwiser%2Fpufs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitlytwiser%2Fpufs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitlytwiser%2Fpufs/lists"}