JitHub is a packaged WinAppSDK / WinUI 3 app for GitHub lovers. It lets you browse repositories, issues, pull requests, and code from a Windows-native shell that stays smooth, touch-friendly, and fast.
- Browse GitHub repositories by topics, languages, or keywords
- View repository details, files, commits, issues, pull requests, and actions
- Star, fork, watch, or clone repositories
- Create, edit, or close issues and pull requests
- Comment on issues and pull requests with Markdown support
- Manage your notifications and profile
- Browse code in an embedded VS Code-based surface
JitHub.WinUI: the desktop appJitHub.Web: the server-rendered public website and GitHub OAuth callback bridgeartifacts/EditorAssets/dist: generated editor assets copied fromjithub-vs-codeduring development and CI
global.json pins the repo to .NET SDK 10.0.202.
Use the latest Visual Studio 2022 with these workloads:
- .NET desktop development
- Windows application development
You also need:
- .NET 10 SDK
- Node.js
- Yarn
Optional Windows CLI tools are documented in docs/windows-cli-workflow.md:
winappfor packaged app launch, debug identity, UI automation, and screenshot smoke checksmsstorefor Microsoft Store Partner Center publishing, drafts, flights, rollout, and future metadata automationstorefor user-facing Store listing, search, install, and update smoke checks
Check or install the tools with:
.\eng\Ensure-WindowsCliTools.ps1
.\eng\Ensure-WindowsCliTools.ps1 -InstallMissingCreate JitHub.WinUI/appsettings.json with your GitHub OAuth client ID. This file is gitignored and must never be committed.
{
"Credential": {
"ClientId": "<your client ID>"
}
}Set these environment variables for the web callback token exchange:
JitHubClientIdor legacy fallbackJithubClientIdJithubAppSecret
Build the editor assets from jithub-vs-code by running ./sync-vscode-assets.ps1 in PowerShell.
The script looks for a local jithub-vs-code clone, runs yarn --frozen-lockfile and yarn build, then copies the generated dist output into artifacts/EditorAssets/dist. Those generated files are intentionally gitignored.
JitHub.WinUI fails build, publish, and packaging if artifacts/EditorAssets/dist/index.html is missing, and the app loads the copied files directly from Assets/dist.
The public website is now an ASP.NET Core server app. It serves the landing page, /authorize, and /api/GithubCodeToToken from one host.
Run it locally with:
dotnet run --project .\JitHub.Web\JitHub.Web.csprojThe website does not require wasm-tools. The landing page is static SSR, and the authorize flow uses a tiny JavaScript bridge instead of Blazor WebAssembly.
After editor assets are present, open JitHub.slnx in Visual Studio and run the packaged JitHub.WinUI project.
To build Debug, apply a debug package identity with the Windows App CLI, and launch the app from the terminal, run:
.\eng\Start-JitHubWinUIDebug.ps1This builds JitHub.WinUI as Debug|x64, runs winapp create-debug-identity against the built executable, and launches JitHub.WinUI.exe.
To launch a different platform or pass app arguments:
.\eng\Start-JitHubWinUIDebug.ps1 -Platform ARM64
.\eng\Start-JitHubWinUIDebug.ps1 -AppArguments '--page=design-lab', '--theme=dark'The desktop app now includes a dev-only DesignLabPage plus a small UI automation harness for screenshot proof.
Generate the current light/dark screenshot matrix with:
.\capture-winui-design.ps1Artifacts are written to:
artifacts/screenshots/winui/index.htmlartifacts/screenshots/winui/*.png
The capture script builds JitHub.WinUI, launches scenario-specific pages with launch arguments such as --page=design-lab, --scenario=buttons, and --theme=dark, and then uses the JitHub.WinUI.Automation project to capture deterministic UI states through FlaUI.
winapp ui is also available as a lightweight command-line proof path. Use .\eng\Invoke-WinAppCliSmoke.ps1 for quick launch/wait/screenshot validation; keep the FlaUI design-lab harness for the full deterministic matrix.
JitHub.Web deploys as a normal ASP.NET Core App Service Web App. The old production jithubauth.azurewebsites.net host was an Azure Function App, so the unified website needs a real Web App provisioned before the first production deployment.
The workflow is:
.github/workflows/main_jithubweb.yml
It builds JitHub.Web in Release mode and deploys the published output to the Web App named by the JITHUB_WEBAPP_NAME repository variable. If the variable is not set, the workflow defaults to jithub-web-prod.
Before enabling deployment:
- Provision a regular Windows App Service Web App with .NET 10. Use
.\eng\Provision-JitHubWebApp.ps1for the safe setup path. - If
jithubauth.azurewebsites.netmust remain the compatibility callback host, retire the old Function App first so the new Web App can reuse thejithubauthname. - Configure the Web App settings
JitHubClientIdandJithubAppSecretfrom the GitHub OAuth app used by the existing callback host. - Download the Web App publish profile and save it as the GitHub secret
JITHUB_WEBAPP_PUBLISH_PROFILE. - Save the target app name as the GitHub variable
JITHUB_WEBAPP_NAME. - Move
jithub.zhuowencui.comfrom the old Static Web App to the new Web App after the new host passes a smoke test.
The repository includes a manual GitHub Actions workflow at .github/workflows/jithub-store-release.yml for building a Store upload package and publishing it to Partner Center in one run.
Set up a protected GitHub environment named microsoft-store and configure these secrets there:
STORE_PRODUCT_IDSTORE_SELLER_IDSTORE_TENANT_IDSTORE_CLIENT_IDSTORE_CLIENT_SECRETSTORE_PACKAGE_IDENTITY_NAMESTORE_PACKAGE_PUBLISHER
Optional secrets:
STORE_PHONE_PRODUCT_IDSTORE_PHONE_PUBLISHER_IDSTORE_PACKAGE_CERTIFICATE_BASE64STORE_PACKAGE_CERTIFICATE_PASSWORDSTORE_PACKAGE_CERTIFICATE_THUMBPRINT
Optional environment variables:
STORE_APP_DISPLAY_NAMESTORE_PUBLISHER_DISPLAY_NAMEJITHUB_STORE_BUNDLE_PLATFORMS(defaults tox64|ARM64)
The WinUI Store workflow now targets x64|ARM64 by default. The script builds each architecture as a separate Store package and then creates one .msixupload containing both architecture packages, which keeps the submission on the documented Microsoft Store CLI --inputFile path without asking MSBuild to resource-index the raw editor asset tree as a multi-platform bundle. x86 is intentionally not included.
Run the Publish JitHub to Microsoft Store workflow manually and provide a four-part release_version such as 1.6.5.0. The workflow checks out nerocui/jithub-vs-code, builds the editor assets into artifacts/EditorAssets/dist, patches JitHub.WinUI/Package.appxmanifest at runtime from the configured environment values, builds a Store upload package, uploads the build artifacts, and then publishes the generated .appxupload or .msixupload to the Microsoft Store.
The workflow uses the Microsoft Store Developer CLI (msstore) as the Store control plane. The store_submission_mode input controls the submission target:
draft: upload the package but keep the Partner Center submission uncommittedflight: publish to the configuredstore_flight_idpublic: submit the package publicly
Use package_rollout_percentage for staged rollout when Partner Center should release the package gradually.
After a release, verify the public Store listing from a Windows machine with:
.\eng\Test-StoreListing.ps1For the detailed CLI policy and command reference, see docs/windows-cli-workflow.md.
- Fork this repository and clone it locally.
- Create a branch for your feature or bug fix.
- Make your changes and commit them with a descriptive message.
- Push your branch to your fork.
- Open a pull request against
main.
Please follow CODE_OF_CONDUCT.md and CODING_STYLE.md.
JitHub is licensed under the MIT License. See LICENSE for details.



