uView Pro Crosses 1,000 Stars and Lands Gitee GVP After a Year of Grinding on uni-app Compatibility
[August 2026] uView Pro Reaches 1,000 Stars and Earns GVP Status
On August 6, 2025, the first version of uView Pro's code was open-sourced. Today marks exactly one year.
I posted about it on Juejin back then:
This is a TypeScript Vue3 component library for uni-app, featuring 80+ high-quality components, a rich utility library, and out-of-the-box templates. It includes built-in multi-theme support, dark mode, and internationalization, and can adapt to H5/APP/HarmonyOS/Mini Programs with a single click.
A year has passed, and I've noticed it has surpassed one thousand stars: currently 506 stars on Gitee and 537 stars on GitHub, and it has also received Gitee's GVP certification.
Looking back, I spent most of my spare time this year quietly coding, responding to issues, and iterating on new features. Today, I want to lay out these achievements and what's behind them.
Achievements Accumulated Over the Year
Let's start with the numbers. As of now, uView Pro has accumulated over a thousand stars across Gitee and GitHub, with monthly npm downloads ranging from 3k to over 8k.
What is GVP? It stands for Gitee's Most Valuable Open Source Project, judged by the official team and a community expert panel. uView Pro is honored to receive this certification, which I see as a form of industry endorsement for the project. (I'm absolutely thrilled about it, anyway.)
In terms of component count, I've rebuilt 80+ components using Vue3 + TS, covering the vast majority of everyday development scenarios, from basic elements like buttons and forms to complex ones like calendars, uploads, and waterfall layouts.
Regarding compatibility, it runs smoothly on mainstream platforms including Android, iOS, HarmonyOS, WeChat Mini Programs, Toutiao Mini Programs, and Alipay Mini Programs. "One codebase, multiple platforms" is not just a slogan; it's actively maintained and continuously optimized.
One thing I'm particularly proud of from last year: the HarmonyOS version of the uView Pro application has been listed on the Huawei AppGallery. This means the component library was verified on a real device, which is far more convincing than just writing "HarmonyOS compatible" in the documentation. I even received a HarmonyOS app incentive bonus for this.
Reference Juejin article: After Listing a HarmonyOS App Developed with uni-app, I Actually Earned Over 4000 a Month
Search for uViewPro on the HarmonyOS AppGallery to see it!
Core Component Features
Component count alone isn't scarce in the market. What makes uView Pro memorable is its rapid problem-solving, continuous maintenance, and feature completeness. For example, the component library fully supports internationalization, multi-theme, and dark mode.
Internationalization (i18n) isn't just about swapping text; the entire language system of the component library is integrated. When you switch languages, built-in text in buttons, calendar titles, paginators, and more changes accordingly, without needing to modify each component individually.
Multi-theme customization works similarly. Through u-config-provider, configurations are passed down layer by layer. If you want to change to your company's brand color, you just modify one configuration, without digging through the source code of dozens of components.
Dark mode is also a one-click toggle. Switching between day and night modes, the component library automatically follows suit, and even the theme state is saved, so it remains in dark mode the next time you open it. Each of these three capabilities might not be difficult on its own, but achieving consistency across a library of 80+ components is where the real effort lies.
To make theme customization easier and more convenient for developers, a theme customization tool was also developed, capable of generating 5 themes in 3 minutes, with built-in dark mode:
Reference: Generate 5 Themes in 3 Minutes, Plus One-Click Dark Mode Switching!
Tool: Official Theme Generation Tool
A Virtual Root Component That Solved an Old Pain Point
Anyone who has used uni-app has likely encountered a pitfall: wanting to inject something globally often requires integrating third-party plugins yourself, which may not always be compatible.
This is where the global root component comes in. uView Pro includes a built-in vite-plugin-uni-root that automatically injects a global root component. If you want to mount global state or lifecycle hooks, you can just write them directly, without wrestling with extra plugins.
Simply put, I transformed the "root component" from something you "had to build yourself" into something "the component library provides out of the box." This capability has been built-in since version 0.6.11, and subsequent optimizations were made for the HBuilderX environment and WeChat Mini Program side, finally polishing it to stability through small, rapid iterations. You're welcome to use it, and it only takes two steps.
Step 1: Configure vite.config.ts
import { defineConfig } from 'vite';
import Uni from '@dcloudio/vite-plugin-uni';
import { UniRoot } from 'uview-pro/plugins';
export default defineConfig({
plugins: [
UniRoot(), // Place before other plugins
Uni(),
],
});
Step 2: Create App.root.vue
<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app';
import { onMounted } from 'vue';
onLoad(() => {
console.log('App.root onLoad');
});
onMounted(() => {
console.log('App.root mounted');
});
</script>
<template>
<u-config-provider>
<slot />
<u-toast global></u-toast>
<u-modal global></u-modal>
</u-config-provider>
</template>
No page code needs to be modified; all pages are automatically wrapped by <u-config-provider>, and the content in App.root.vue takes effect globally.
See details: Virtual Root Component
AI-Oriented Development
AI is developing rapidly, with an unstoppable momentum and new changes every day. While many are still debating whether AI will replace programmers, my attitude is: since it can't be stopped, it's better to fully embrace it. uView Pro has equipped the developer community with LLMS.txt, Skills, and MCP (Model Context Protocol) support.
uView Pro provides comprehensive context support for Large Language Models (LLMs), helping AI better understand and use the component library.
Skills are a set of workflows for AI, allowing it to write components and look up documentation directly according to uView Pro's specifications, without guessing.
MCP exposes the component library's capabilities through a standard protocol, making it usable with mainstream AI programming tools.
These tools help AI avoid many detours when writing uni-app code, at least ensuring it knows how to write uView Pro components correctly.
The Pitfalls Encountered
Over this year of open-sourcing, the deepest lesson has been the weight of the word "compatibility." uView Pro needs to run on Mini Programs, H5, iOS Apps, and Android Apps, and each platform can behave differently.
Especially with Mini Program platforms, the sheer variety—WeChat, Alipay, Douyin, Toutiao—means each has a different compilation implementation, making it the easiest place to stumble.
Here's a real example: provide/inject couldn't pass values in Douyin/Toutiao Mini Programs.
provide/inject is a Vue3 feature I use quite a bit in the component library for cross-level value passing. For instance, communication between deeply nested components like u-form -> u-form-item -> u-input is most conveniently done with provide/inject. Not just this, but many components' parent-child value passing also relies on this mechanism.
But when I ran it on the Douyin Mini Program, I was stunned: the configuration was passed down, but the child component's inject always received null. I initially suspected my code was wrong, so I switched to H5 and reran it—it worked fine. It also worked fine on WeChat Mini Programs. Only Douyin and Toutiao, the two ByteDance-affiliated Mini Programs, had this issue.
After troubleshooting, I confirmed that the compilation implementations of these two platforms did not fully support cross-level passing with provide/inject. This was a big problem, because provide/inject is like the "foundation" for the component library; it couldn't be patched up by fixing just one or two components. As long as the component library used provide and inject, it required extra handling for Douyin/Toutiao, meaning all the parent-child value-passing logic that depended on it had to be redone, essentially replacing the entire value-passing method on these two platforms. I remember spending over a week refactoring just this feature alone.
I've documented some common issues into a knowledge base:
Where to Go Next
uView Pro won't stand still. The next focus is to stabilize the uni-app component library while gradually developing a uni-app x version, using UTS strong typing to compile the component library into Kotlin and Swift, allowing it to run under the new native rendering system.
The steam mode version for uni-app x is under development and expected to be available soon. The overall direction is clear: the uView Pro component library will move forward in step with uni-app's official progress.
In open source, if you persist and work seriously for a year, someone will always notice.
Top 1 of 2 from juejin.cn, machine-translated. The original thread is authoritative.
[Thumbs up][Thumbs up][Thumbs up][Thumbs up] The project is already finished, and I never even noticed there was a 'Virtual Root Component' chapter. It must be newly added. I was wondering how to use toast in global.
A lot of people have been asking about this, so it was built directly into the recent version. The documentation previously mentioned that a vite plugin was needed, but now it's no longer necessary.