# GSY GitHub App moved from Weex to uni-app without changing the UI

> GSYGithubAppWeex is a GitHub client that now builds for H5, WeChat mini programs, Android and iOS from a single uni-app codebase, keeping the old Weex UI pixel for pixel. The trade is a hard 15 day cooldown on every pinned dependency, which will make a fresh clone fail more than once.

**CarGuo/GSYGithubAppWeex** — Weex  超完整的开源项目，功能丰富，适合学习和日常使用。GSYGithubApp 系列的优势：我们目前已经拥有 Flutter、Weex、ReactNative、Kotlin View、Kotlin Jetpack Compose ，Compose MultiPlatform，Harmony ArkUI 七个版本，功能齐全，项目框架内技术涉及面广，完成度高，持续维护，配套文章，适合全面学习，对比参考。

- Repository: https://github.com/CarGuo/GSYGithubAppWeex
- Website: https://juejin.im/user/582aca2ba22b9d006b59ae68/posts
- Stars: 747 · Forks: 148
- Language: JavaScript
- License: Apache-2.0
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/carguo-gsygithubappweex

## The repository name still says Weex, the code no longer is

The first thing to understand is that the name is historical. The README says the repository was formerly named GSYGithubAppWeex, originally based on the now archived Apache Weex implementation, and that from v2.0.0-uniapp the whole thing migrated to uni-app. The Weex era code is still traceable in the git history, and the migration background and decisions live in a MIGRATION.md file at the root. The project is one of a family, and the README shows the others in a table: this uni-app version, a React Native version, a Flutter version, an Android Kotlin version using View, an Android Kotlin Compose version, a Compose Multiplatform version and a HarmonyOS ArkUI version. The stated advantage of the family is that the frameworks covered are wide and the code inside each project touches many technologies, which is why the description frames these as learning and reference material as much as applications.

## One uni-app codebase, four targets, and a dependency on Vue 3 and Vite

The implementation is uni-app, which the README describes as built on Vue 3, Vite, TypeScript and Pinia, producing a cross platform GitHub client in one build that covers H5, WeChat mini programs, Android and iOS. The stack table lists each layer with a pinned version, and the package.json confirms them: uni-app at 3.0.0-5000720260410001, Vue at 3.5.33, Vite at 5.2.8, Pinia at 3.0.4, axios at 1.16.0, vue-i18n at 9.14.5, @dcloudio/uni-ui at 1.5.12 and TypeScript at 6.0.3. The source tree follows the uni-app conventions, with pages/, stores/, components/, api/, config/ and styles/ directories, an App.vue, a main.ts, a manifest.json, a pages.json and a uni.scss. The pages directory holds fifteen pages, from welcome and login through main, trend, person, search, setting, the repository, user, code and issue detail views, edit-issue, common-list, web and dynamic.

## A 15 day dependency cooldown runs before every install

This is the feature that will surprise you first, and it is deliberate. The project requires that all pinned direct dependencies have been published for at least 15 days, as a defence against npm typosquatting and supply chain attacks. The implementation lives in scripts/check-deps-cooldown.mjs and runs from a preinstall hook, so it fires before npm install does anything, and in CI the same check is invoked as npm run verify:cooldown. The window can be widened for local work by setting DEPS_COOLDOWN_DAYS=30 before an install, and the README is explicit that production and releases must keep it at 15 or more. The practical consequence is that a version published this morning cannot be used today, and a developer who bumps a pin will hit the check on their own machine, not only on CI.

## Cloning and running the three dev targets

The quickstart is short. The environment requirements are Node 18.20 or newer, with 20.18.1 verified as working, and npm is recommended with an explicit warning not to mix in pnpm or yarn. The install sequence is a clone, a directory change and an install, and the preinstall hook runs the cooldown check as part of that install:```bash
git clone git@github.com:CarGuo/GSYGithubAppWeex.git
cd GSYGithubAppWeex
npm install
```There are three dev targets, one per output family, and the README says what each produces. The H5 target serves in the browser on port 8080, the WeChat mini program target writes into dist/dev/mp-weixin for the WeChat developer tool to open, and the app target writes offline packaging resources into dist/dev/app-plus. The three build commands are:```bash
npm run build:h5
npm run build:mp-weixin
npm run build:app
``` The build commands mirror them one for one, with build:h5, build:mp-weixin and build:app. The type checking script is separate and runs vue-tsc with no emit, and the README states it reports zero errors.

## A Personal Access Token replaces the dead Basic Auth flow

Authentication is a single GitHub Personal Access Token, and the README explains why: GitHub has deprecated Basic Auth. The login steps are three, and they are specific about scope. You open the token settings page, choose Generate new token (classic), tick at least the repo, user and notifications scopes, then paste the token into the app's login page. There is no OAuth flow in the app and no callback server, which keeps the setup to a copy and paste, and it also means the token carries broad access to whatever the user grants it. For an app that aggregates events, repositories, files and issues, that scope is the whole point of the app rather than an over-reach, but it is worth reading as a security decision rather than a setup step.

## Trending data has a three level fallback, including a local mock

The trend feature is where the architecture gets interesting, because it does not depend on a single service being up. The README says the app connects to the GSY official trend API at guoshuyu.cn, supports daily, weekly and monthly periods with a chip switcher for ten languages, and has a three level fallback, from GSY to GitHub Search to a local mock, to guarantee availability. The api/ directory in the source tree is described as holding the axios layer, the endpoint table and this trending fallback. That fallback chain is the pattern worth stealing if you are reading the project as a reference: the primary source is used when it works, a second is tried when it does not, and a local stand-in keeps the screen from being empty. The vite config also carries a proxy for the GSY trend API, so the fallback is partly a build-time arrangement as well as a runtime one.

## Parity with the old Weex build is the acceptance criterion

The testing story is about parity rather than coverage, and the repository makes that explicit. The type check runs through npm run type-check with vue-tsc and the README says it reports zero errors. End to end tests use Playwright 1.59.x directly against the H5 build, and the test scripts are deliberately kept outside the repository, in a separate directory under the temporary folder, so that they do not pollute the dependency cooldown. The current end to end matrix is described as 14 of 14 passing, covering login into the main events list, the repository detail view with its four tabs and a click, README not refetching on tab change, logging out from settings, and the trend filter, language switching and list with real data plus a reissued request on switch. The detailed matrix is in docs/parity-checklist.md, and docs/legacy-spec.md holds the complete page, route and store documentation of the original Weex project.

## Design tokens carried over, and a roadmap that admits what is missing

The visual layer is a port rather than a redesign, and the README says so. The original GSY iconfont, wxcIconFont, was ported over from the previous project, the theme colour tokens are listed as #3c3f41, #267aff and #ececec, and there is a 700 and 710 rpx card system, with the claim that the UI is aligned to the original pixel for pixel. The contributing guide asks that UI changes align to the original GSY design tokens and not introduce a new visual language, which is a reasonable rule for a project whose purpose is comparison and reference. The roadmap is honest about the gaps. Fifteen page migration, the trend API with its three level fallback, Playwright end to end tests and the 15 day cooldown are all ticked. Still open are vue-i18n entry wiring and extracting hardcoded strings, Vitest unit test coverage for the stores and utilities, iOS device verification on a Mac, and end to end tests for the mini program side using @dcloudio/uni-automator.

## Conclusion

GSYGithubAppWeex suits a developer who wants to read a complete cross-platform client or to reuse the GSY design tokens and the pattern of pinned, cooled-down dependencies in their own project, and it suits anyone learning uni-app. It does not suit a team that needs a maintained dependency graph, because the 15 day cooldown rule will block installs for freshly published versions, and it does not suit a team wanting an app with unit test coverage, since Vitest coverage for the stores and utilities is still an open roadmap item. Before adopting, read MIGRATION.md for the reasoning behind the rewrite, run npm run type-check and the H5 dev server to see the app, and note that the last push to the repository was on 2026-10-18 with the newest release v2.0.0-uniapp.10 dated 2026-05-22.

## FAQ

### How do I install and run GSYGithubAppWeex?

Clone the repository, change into the directory and run `npm install`, which triggers the preinstall cooldown check. Then `npm run dev:h5` serves the browser build on http://localhost:8080, `npm run dev:mp-weixin` writes the WeChat mini program output and `npm run dev:app` writes the app packaging resources.

### What is the 15 day dependency cooldown in GSYGithubAppWeex?

It is a supply chain defence that requires every pinned direct dependency to have been published for at least 15 days. The check runs from a preinstall hook in scripts/check-deps-cooldown.mjs, and in CI it is invoked as `npm run verify:cooldown`. The window can be widened locally with DEPS_COOLDOWN_DAYS=30, but production and releases must keep it at 15 or more.

### How do I log in to the GSY GitHub app?

With a GitHub Personal Access Token, because GitHub has deprecated Basic Auth. Open the token settings page, choose Generate new token (classic), tick at least the repo, user and notifications scopes, and paste the token into the app's login page.

### Does GSYGithubAppWeex still use Weex?

No. The README says the repository was originally based on the archived Apache Weex implementation and migrated wholesale to uni-app from v2.0.0-uniapp, with the old Weex code still traceable in the git history. The migration background and decisions are documented in MIGRATION.md.

### What licence is GSYGithubAppWeex under?

The README states MIT and links the LICENSE file, and the package.json in the repository lists the license field as MIT as well. The licence field in the repository metadata says Apache-2.0, so check the LICENSE file in the repository itself for the terms that apply.

## Sources

- [CarGuo/GSYGithubAppWeex on GitHub](https://github.com/CarGuo/GSYGithubAppWeex)
- [License: Apache-2.0](https://github.com/CarGuo/GSYGithubAppWeex/blob/master/LICENSE)
- [Project website](https://juejin.im/user/582aca2ba22b9d006b59ae68/posts)
- [README](https://github.com/CarGuo/GSYGithubAppWeex/blob/master/README.md)
- [Releases](https://github.com/CarGuo/GSYGithubAppWeex/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/carguo-gsygithubappweex
