[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1073":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},1073,"GHFS","indragiek\u002FGHFS","indragiek","Mount GitHub repositories as a virtual read-only macOS filesystem",null,"Swift",389,9,375,3,0,7,43.7,"MIT License",false,"main",true,[],"2026-06-12 04:00:07","# GHFS\n\nGHFS is a macOS application that mounts your GitHub repositories as a read-only virtual filesystem using [FSKit](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Ffskit). Browse repository contents as if they were local directories — repositories are cloned on demand, and file reads are served from the GitHub API while the clone completes in the background.\n\n\u003Cp align=\"center\">\n  \u003Cimg width=\"365\" height=\"213\" src=\".\u002Fimages\u002Fmenubar.png\" alt=\"GHFS Menubar UI\">\n\u003C\u002Fp>\n\n**Key features:**\n\n- Self-contained, no external dependencies required (macFUSE, git, gh, etc.)\n- Mount-time repository discovery from your GitHub account, plus opt-in public repository search\n- On-demand repository cloning with automatic background refresh of cloned repositories\n\n## System Requirements\n\n- macOS 26.4 or later\n- Xcode (for building from source)\n\n## Installation\n\nThe easiest way to use GHFS is to download a prebuilt binary from the [latest release](https:\u002F\u002Fgithub.com\u002Findragiek\u002FGHFS\u002Freleases\u002Flatest) on GitHub. Open the downloaded `.dmg` and drag `GHFS.app` into your Applications folder. Releases are signed with a Developer ID certificate and notarized by Apple.\n\nIf you'd rather build from source, see [Building](#building) below.\n\n## Building\n\n### Credentials setup\n\nA source build needs a `Credentials.xcconfig` file containing your GitHub OAuth app credentials (so GHFS can authenticate users) and your Apple Developer Team ID (so Xcode can sign the app and the FSKit extension). Prebuilt binaries ship with all of these baked in, so this step only applies when building from source.\n\nStart by copying the template:\n\n```sh\ncp Credentials.xcconfig.template Credentials.xcconfig\n```\n\n`Credentials.xcconfig` is gitignored. The OAuth values are consumed at build time by a Run Script phase that generates `GeneratedSecrets.swift` — the app will fatal-error on launch if any OAuth value is missing or still set to the placeholder. The Team ID flows into `DEVELOPMENT_TEAM` via the project's base configuration, so a missing or wrong value will cause code-signing to fail at build time.\n\nThen fill in the three values as described below.\n\n#### `GHFS_OAUTH_CLIENT_ID` and `GHFS_OAUTH_CLIENT_SECRET`\n\n1. Go to \u003Chttps:\u002F\u002Fgithub.com\u002Fsettings\u002Fdevelopers> → **OAuth Apps** → **New OAuth App**.\n2. Fill in the form:\n   - **Application name**: anything you like, e.g. `GHFS (local build)`\n   - **Homepage URL**: any valid URL\n   - **Authorization callback URL**: `ghfs:\u002F\u002Foauth-callback` — must match exactly. This is the custom URL scheme the app listens on for the OAuth redirect.\n   - Leave **Enable Device Flow** unchecked.\n3. Click **Register application**. On the next page, note the **Client ID**, then click **Generate a new client secret** to create a client secret. Copy the secret immediately — GitHub will only show it once.\n4. Paste the two values into `Credentials.xcconfig`:\n\n   ```\n   GHFS_OAUTH_CLIENT_ID = \u003Cyour client id>\n   GHFS_OAUTH_CLIENT_SECRET = \u003Cyour client secret>\n   ```\n\n#### `GHFS_DEVELOPMENT_TEAM`\n\nThis is your 10-character Apple Developer Team ID. You need an Apple Developer account (free or paid) signed into Xcode; the free tier is sufficient for local development.\n\nTo find your Team ID, either:\n\n- Sign in at \u003Chttps:\u002F\u002Fdeveloper.apple.com\u002Faccount> → **Membership details**. The **Team ID** is listed there.\n- Or, from the terminal with an active signing identity in your keychain:\n\n  ```sh\n  security find-identity -v -p codesigning\n  ```\n\n  The parenthesized suffix on each `Apple Development: …` \u002F `Developer ID Application: …` line is your Team ID.\n\nPaste it into `Credentials.xcconfig`:\n\n```\nGHFS_DEVELOPMENT_TEAM = \u003Cyour 10-character team id>\n```\n\n### Build\n\nBuild the app using the provided build script:\n\n```sh\nScripts\u002Fbuild.sh\n```\n\nThe built app is placed in `out\u002FGHFS.app`. The script also handles code signing validation and FSKit extension registration.\n\n### Options\n\n| Flag | Description |\n|---|---|\n| `--debug` | Build with Debug configuration (default) |\n| `--release` | Build with Release configuration |\n| `--run` | Launch the app after building and tail logs |\n| `--log-level LEVEL` | Set log level for log stream: `default`, `info`, `debug` |\n\nOn the first build, libgit2 is compiled from source automatically (one-time setup).\n\n## Running Tests\n\nRun the integration test suite:\n\n```sh\nScripts\u002Ftest.sh\n```\n\nTests exercise the live GHFS mount against the GitHub API and verify behavior via post-run log analysis. The test runner builds the app, launches it, waits for the filesystem to mount, and runs `swift test` against it.\n\n### Options\n\n| Flag | Description |\n|---|---|\n| `--skip-build` | Skip the build step (use if the app is already built and mounted) |\n| `--clone-trigger MODE` | Run only with the given initial clone trigger mode (`onFileRead` or `onDirectoryListing`). If omitted, both modes run sequentially. |\n\n### Prerequisites\n\nBefore running tests, ensure:\n\n1. The FSKit extension is enabled in **System Settings > Login Items & Extensions > By Category > File System Extensions** (enable \"GHFS”).\n2. You have completed onboarding (signed in with GitHub).\n\n![Extension Settings](.\u002Fimages\u002Fextension_settings.png)\n\n## Settings\n\nGHFS provides the following settings and repository-selection controls in the app's Settings window:\n\n| Setting | Description | Default |\n|---|---|---|\n| **Mount on Startup** | Automatically mount the filesystem when GHFS launches | On |\n| **Launch on Login** | Start GHFS automatically when you log in | Off |\n| **Hide Dock Icon** | Hide the GHFS icon from the Dock | On |\n| **Mount Path** | Directory where the filesystem is mounted | `~\u002Fghfs` |\n| **Initial Clone Trigger** | When to start cloning a repo — on first file read, or when the repo folder is listed | On file read |\n| **Refresh Interval** | How often to re-fetch each cloned repository's working tree from the remote | 24 hours |\n| **Refresh Trigger** | When a cloned-repository refresh runs after the interval elapses — immediately, on directory listing, or on file read | On file read |\n| **Repository Selection** | User repositories are enabled by default and can be disabled individually or in bulk; public repositories can be searched and enabled individually | User repos enabled, public repos disabled |\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE.md](LICENSE.md) for details.\n\n## Developer\n\nCreated by [Indragie Karunaratne](mailto:i@indragie.com)\n","GHFS 是一个 macOS 应用程序，它使用 FSKit 将 GitHub 仓库挂载为只读的虚拟文件系统。用户可以像浏览本地目录一样浏览仓库内容，仓库按需克隆，并且在后台通过 GitHub API 完成克隆时提供文件读取服务。其核心功能包括自包含性（无需外部依赖如 macFUSE、git 等）、挂载时从 GitHub 账户发现仓库并可选地搜索公共仓库、以及按需克隆仓库并在后台自动刷新已克隆的仓库。该工具特别适合需要频繁访问 GitHub 上代码库但又希望保持本地环境整洁的开发者或团队使用。",2,"2026-06-11 02:41:29","CREATED_QUERY"]