{"id":13503124,"url":"https://github.com/harababurel/gcsf","last_synced_at":"2025-12-24T19:17:46.566Z","repository":{"id":37945885,"uuid":"128426109","full_name":"harababurel/gcsf","owner":"harababurel","description":"a FUSE file system based on Google Drive","archived":false,"fork":false,"pushed_at":"2024-06-10T15:00:07.000Z","size":2027,"stargazers_count":2378,"open_issues_count":46,"forks_count":91,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-05-11T06:20:06.275Z","etag":null,"topics":["drive","filesystem","fuse","google","google-drive","google-drive-api","google-drive-wrapper","rust"],"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/harababurel.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":"2018-04-06T17:35:31.000Z","updated_at":"2025-05-07T02:42:45.000Z","dependencies_parsed_at":"2022-07-14T22:00:33.539Z","dependency_job_id":"80c23fdd-afa8-4b44-9faa-d121ab9c897a","html_url":"https://github.com/harababurel/gcsf","commit_stats":{"total_commits":232,"total_committers":15,"mean_commits":"15.466666666666667","dds":"0.11637931034482762","last_synced_commit":"1260b66e2d3d21a024bb6097271c94de405295fb"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harababurel%2Fgcsf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harababurel%2Fgcsf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harababurel%2Fgcsf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harababurel%2Fgcsf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harababurel","download_url":"https://codeload.github.com/harababurel/gcsf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092655,"owners_count":22013290,"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":["drive","filesystem","fuse","google","google-drive","google-drive-api","google-drive-wrapper","rust"],"created_at":"2024-07-31T22:02:38.034Z","updated_at":"2025-12-24T19:17:46.561Z","avatar_url":"https://github.com/harababurel.png","language":"Rust","readme":"\u003cimg align=\"right\" width=\"300px\" height=\"300px\"\n     title=\"Size Limit logo\" src=\"https://i.imgur.com/9xdFwQq.png\"\u003e\n\n\n[![Crates.io](https://img.shields.io/crates/v/gcsf.svg)](https://crates.io/crates/gcsf)\n[![Docs](https://docs.rs/gcsf/badge.svg)](https://docs.rs/gcsf/latest/gcsf/)\u003cbr\u003e\n[![GitHub Issues](https://img.shields.io/github/issues/harababurel/gcsf.svg)](https://github.com/harababurel/gcsf/issues)\n[![Downloads](https://img.shields.io/crates/d/gcsf.svg)](https://crates.io/crates/gcsf)\n[![MIT License](https://img.shields.io/crates/l/gcsf.svg)](https://github.com/harababurel/gcsf/blob/master/LICENSE)\n\nGCSF is a virtual filesystem that allows users to mount their Google Drive account locally and interact with it as a regular disk partition. You can find out more in this [paper](https://harababurel.com/thesis.pdf)\n\n### Requirements\n\nGCSF requires the stable branch of the Rust programming language, which can be installed following the instructions on [rustup.rs](https://rustup.rs). If you already have Rust installed, make sure that it is updated to the latest version:\n\n```bash\n$ rustup update stable\n```\n\n#### OSX\n\nOn Mac OSX, GCSF requires [osxfuse](https://osxfuse.github.io/) and [pkg-config](http://macappstore.org/pkg-config/):\n\n```bash\n$ brew update; brew install pkg-config; brew tap homebrew/cask; brew install --cask osxfuse\n```\n\n#### Ubuntu / Debian\n\nOn Ubuntu / Debian, GCSF requires [libfuse-dev](https://packages.ubuntu.com/disco/libfuse-dev), [libssl-dev](https://packages.ubuntu.com/disco/libssl-dev) and [pkg-config](https://packages.ubuntu.com/disco/pkg-config):\n\n```bash\nsudo apt-get install -y fuse3 libfuse-dev libssl-dev pkg-config\n```\n\n#### Fedora\n\nOn Fedora, GCSF requires gcc, fuse3-devel, and pkg-config:\n\n```bash\nsudo dnf install -y gcc fuse3-devel pkg-config\n```\n\n#### Arch Linux\n\nAn AUR package is maintained by [axionl](https://github.com/axionl): [gcsf-git](https://aur.archlinux.org/packages/gcsf-git/).\n\n#### SUSE\n\n```bash\nsudo zypper install -y fuse-devel fuse rust pkgconf-pkg-config\n```\n\n#### Other linux distros\n\nMake sure you have `pkg-config` and the `fuse` library installed. These are usually found in the package repositories of major distributions.\n\n#### FreeBSD\n\nRust can be installed via the `lang/rust` port. You will need to install `sysutils/fusefs-libs` for the `cairo install` command to succeed.\n\n#### Windows\n\nUnfortunately, Windows is not supported at the time being. See issue [#19](https://github.com/harababurel/gcsf/issues/19).\n\n### Installation\n\nAfter all requirements are met, GCSF can be installed using `cargo`:\n\n\n```bash\n$ cargo install gcsf\n```\n\nThis will generate the `gcsf` binary in `$HOME/.cargo/bin`. Make sure that this directory is in your `PATH` variable: `export PATH=$PATH:$HOME/.cargo/bin`\n\nAlternatively, you can download a [release binary](https://github.com/harababurel/gcsf/releases) for your platform.\n\n### Configuration\n\nGCSF will attempt to create a configuration file in `$XDG_CONFIG_HOME/gcsf/gcsf.toml`, which is usually defined as `$HOME/.config/gcsf/gcsf.toml`. Credentials are stored in the same directory.\n\n#### GCP\n\n1. Visit [console.developers.google.com](https://console.developers.google.com) and create a new project\n2. Add the Google Drive API to the project\n3. Configure an OAuth consent screen. Verification should not be required. Should be external unless this project is something internal to your GSuite\n4. Configure an OAuth2.0 credential. Do not use WEB as the token type if adding `gcsf` to a headless server - you want to be using the `urn:*` URI (note: if using WEB, you'll need to set the accepted domains to include `http://localhost:8081`)\n5. Configure GCSF to use the new `client_id`, `client_secret`, and `project_id`. You should have all these values after creating the credential.\n6. Configure GCSF `authorize_using_code=True` if configuring for headless servers. If you do this, completing the OAuth flow in a different browser will provide you a code that you can give to GCSF.\n\nRunning `gcsf login some_session_name` at this point should show a URL with your `client_id` query parameter.\n\n#### Publishing to GCP app to Production Mode (Optional, important for long-running services)\n\nIf you plan to run GCSF as a system service or for extended periods, it is recommended that your Google Cloud project be **in Production mode**, not Testing mode.\n\nAccess tokens for apps in Testing mode expire more frequently, which usually triggers a prompt on GCSF to re-authenticate. This can be inconvenient especially when running GCSF as a system service. Publishing the app to Production mode resolves this issue.\n\n**To publish your app:**\n1. Go to [Google Cloud Console](https://console.cloud.google.com)\n2. Navigate to \"APIs \u0026 Services\" → \"OAuth consent screen\" -\u003e \"Audience\"\n3. Check the \"Publishing status\" at the top\n4. If it says \"Testing\", click **\"Publish App\"**\n5. Publishing to Production might require app verification. Follow the process in the \"Verification centre\" section.\n6. After publishing, you must re-authenticate:\n   ```bash\n   gcsf logout your_session_name\n   gcsf login your_session_name\n   ```\n\n**Note:** Publishing to Production does NOT require Google verification for personal use. Verification is only needed if you're distributing your app to many external users.\n\nYou can verify your authentication is working at any time:\n```bash\n$ gcsf verify your_session_name\nVerifying authentication for session 'your_session_name'...\nAuthentication is valid.\n```\n\n### Usage\n\nThe first step is to log in to Drive and authorize the application. A name must be provided for the session:\n\n```bash\n$ gcsf login some_session_name\nPlease direct your browser to https://accounts.google.com/o/oauth2/[...] and follow the instructions displayed there.\nSuccessfully logged in. Saved credentials to \"$HOME/.config/gcsf/some_session_name\"\n```\n\nYou can also list all existing sessions:\n\n```bash\n$ gcsf list\nSessions:\n        - personal\n        - some_session_name\n        - work\n```\n\nAnd then mount one (or more) of them:\n\n```bash\n$ gcsf mount /mnt/gcsf -s some_session_name\nINFO  gcsf \u003e Creating and populating file system...\nINFO  gcsf \u003e File system created.\nINFO  gcsf \u003e Mounting to /mnt/gcsf\nINFO  gcsf \u003e Mounted to /mnt/gcsf\n```\n\nYou can now find the contents of your Drive account in `/mnt/gcsf`:\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://i.imgur.com/jdFIu5Y.png\" alt=\"GCSF ls\"\n       width=\"530px\" height=\"165px\"\u003e\n\u003c/p\u003e\n\nUsing Ranger:\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://i.imgur.com/BuS9BDD.png\" alt=\"GCSF in Ranger\"\n       width=\"616px\" height=\"351px\"\u003e\n\u003c/p\u003e\n\n\nOr Thunar:\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://i.imgur.com/9JSDqez.jpg\" alt=\"GCSF in Thunar\"\n       width=\"746px\" height=\"176px\"\u003e\n\u003c/p\u003e\n\n### Why GCSF?\nGCSF stands for \"Google Conduce Sistem de Fișiere\" which translated from Romanian is \"Google Drive Filesystem\". However [GDFS](https://github.com/robin-thomas/GDFS) already exists so it remains GCSF.\n\n### Troubleshooting\n\n#### Could not mount to `$mountpoint`: Operation not permitted (os error 1)\n\nThis error occurs when `user_allow_other` is not set in `/etc/fuse.conf` or the file has improper permissions. Fix by running (as root):\n\n```bash\n# echo 'user_allow_other' \u003e\u003e /etc/fuse.conf\n# chmod 644 /etc/fuse.conf\n# sudo chown root:root /etc/fuse.conf\n```\n\n#### `libssl.so.1.0.0`\n\nYou installed the prebuilt binaries but couldn't run it. Fix by installing rust and building from source.\n\n### Contributing\n\nContributions are welcome. Documentation available on [docs.rs/gcsf](https://docs.rs/gcsf). You can also help by reporting or fixing [issues](https://github.com/harababurel/gcsf/issues).\n\n[![Star History Chart](https://api.star-history.com/svg?repos=harababurel/gcsf\u0026type=Date)](https://star-history.com/#harababurel/gcsf\u0026Date)\n","funding_links":[],"categories":["Rust","rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharababurel%2Fgcsf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharababurel%2Fgcsf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharababurel%2Fgcsf/lists"}