Skip to main content

Mini Programs and Apps

Website, Mini Program, or App?

After building their first web product, many people start wondering: should I build an App? Should I launch a WeChat Mini Program?

Hold on — think about this core question first: where are your users?

If you're targeting international markets and users primarily access via browser, then the web is enough. Build a solid website, nail your SEO, implement PWA (Progressive Web App), and the experience is already close to a native app. In 90% of cases, the web is the best bang for your buck.

If you're targeting the domestic Chinese market, then WeChat Mini Programs are worth considering. Chinese users have very different habits from overseas users — they're accustomed to doing everything within the WeChat ecosystem, and scanning a QR code to open a mini program is far more convenient than typing a URL.

Quick Decision Table: Which to Choose

Your SituationRecommended ApproachReason
International users, tool-type productWeb (PWA)Zero install friction, SEO-friendly, fastest iteration
Chinese users, lightweight serviceWeChat Mini ProgramUser habits, WeChat Pay, viral sharing
Complex interactions / high-frequency useAppPush notifications, offline experience, hardware access
Validating an idea quicklyWebLowest development cost, fastest launch
Limited budget, multi-platform coverageCross-platform frameworkOne codebase, multiple platforms
Both domestic and internationalStart with Web, expand laterDon't spread yourself thin — nail one first

Core principle: Build the web version first and do it well. Once you have a stable user base and revenue, then decide whether to build a mini program or app based on user needs. Don't aim for "full platform coverage" from the start — that only leads to doing everything poorly.

The Web's Advantages: Why It's Usually Enough

Before discussing mini programs and apps, seriously consider what the web can already do:

CapabilityWeb Support?Notes
Cross-platformOne URL, accessible on all devices
Push notifications✅ (PWA)Service Worker supports Push API
Offline use✅ (PWA)Service Worker caching strategies
Add to home screen✅ (PWA)Looks like a native app icon
Camera accessWebRTC API
GeolocationGeolocation API
Local storageIndexedDB, up to hundreds of MB
File read/writeFile System Access API
Bluetooth✅ (limited)Web Bluetooth API
Push + background sync✅ (PWA)Background Sync API

What the web can't do:

  • Complex background tasks (apps can run in the background for extended periods)
  • Deep hardware integration (NFC, fingerprint authentication, and other native APIs)
  • App store distribution channels
  • User preference for "downloading an app" in certain countries/regions

So unless your product explicitly needs any of the above capabilities, the web is your best starting point.

WeChat Mini Program Development Guide

Step 1: Register a Mini Program Account

  1. Go to mp.weixin.qq.com and click "Register Now"
  2. Select "Mini Program" as the account type
  3. Enter an email (one not previously registered on the WeChat Official Accounts Platform) and password
  4. Check your email for the verification link and click to activate
  5. Choose your entity type:
    • Individual: Only needs an ID card, but features are limited (no WeChat Pay, no virtual payments)
    • Sole proprietorship: Needs a business license, can use WeChat Pay
    • Enterprise: Needs a corporate business license, full feature access
  6. Complete entity verification (individuals are exempt; enterprises need bank transfer verification or WeChat verification, costing 300 RMB/year)
  7. Enter the Mini Program backend and get your AppID (needed for development)

Step 2: Install the Development Tools

Download the WeChat Developer Tools, log in with your WeChat account, create a new project, and enter your AppID.

Project directory structure:

my-miniapp/
├── pages/
│ ├── index/
│ │ ├── index.wxml ← Page template (similar to HTML)
│ │ ├── index.wxss ← Page styles (similar to CSS)
│ │ ├── index.js ← Page logic
│ │ └── index.json ← Page config
│ └── about/
│ ├── about.wxml
│ ├── about.wxss
│ ├── about.js
│ └── about.json
├── app.js ← Mini program entry point
├── app.json ← Global config
├── app.wxss ← Global styles
└── project.config.json ← Project config

Step 3: Use AI to Write Mini Program Code

Good news — AI is also quite proficient with mini program development. You can have it write code directly in Cursor:

Help me create a WeChat Mini Program page:
- Top: display user avatar and nickname
- Middle: a list showing recent orders (mock data is fine)
- Bottom: tabbar with Home and Profile tabs

The AI will generate complete WXML, WXSS, JS, and JSON config files. Mini program WXML syntax is very similar to HTML (<view> maps to <div>, <text> maps to <span>), and WXSS syntax is essentially the same as CSS, so the learning curve is gentle.

Mini Program Limitations

  • Package size: 2MB per package, 20MB max with subpackages. Large codebases require subpackage loading
  • Review cycle: Submission review typically takes 1-7 days, longer during holidays
  • Platform rules: Many restrictions — virtual payments must go through WeChat Pay (similar to Apple's tax)
  • AI-generated content review: If your mini program involves AI conversations or generated content, additional qualifications and review are required
  • Domain requirements: Backend APIs must use HTTPS with a registered (ICP-filing) domain

Cross-Platform Solutions: Taro vs uni-app

If you want a mini program, an H5 web app, and an App all at once, consider a cross-platform framework.

Taro

Taro is built by JD.com and uses React syntax. One codebase compiles to:

  • WeChat/Alipay/Baidu/ByteDance/QQ Mini Programs
  • H5 (mobile web)
  • React Native App

Best for: Developers who already know React. Learning cost is practically zero.

// Taro code example — identical to React
import { View, Text, Button } from '@tarojs/components'
import { useState } from 'react'

export default function Counter() {
const [count, setCount] = useState(0)
return (
<View>
<Text>Clicked {count} times</Text>
<Button onClick={() => setCount(count + 1)}>+1</Button>
</View>
)
}

uni-app

uni-app is built by DCloud and uses Vue syntax. It supports even more platforms:

  • WeChat/Alipay/Baidu/ByteDance/QQ/JD/Kuaishou/Feishu Mini Programs
  • H5
  • iOS App (via uni-app native rendering or WebView)
  • Android App

Best for: Developers familiar with Vue, or projects that need to cover as many platforms as possible.

<!-- uni-app code example -->
<template>
<view>
<text>Clicked {{ count }} times</text>
<button @click="count++">+1</button>
</view>
</template>

<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>

Taro vs uni-app Comparison

DimensionTarouni-app
SyntaxReactVue
CreatorJD.comDCloud
Supported platformsMajor mini programs + H5 + RNMore mini programs + H5 + native App
App experienceReact Native, good qualityWebView or Weex, average quality
Community ecosystemActive, backed by React ecosystemVery active, largest user base in China
Learning resourcesAbundantVery abundant, large plugin marketplace
Best suited forReact teams, App experience focusVue teams, broad platform coverage
AI familiarityHigh (React ecosystem)Medium

My advice: If you're already on a React tech stack, go with Taro. If you're on Vue or need to cover a wide range of mini program platforms, go with uni-app. Both are mature enough that you won't run into major issues.

Building Apps with React Native

If you genuinely need a native app but don't know Swift or Kotlin, React Native is your best bet.

Why React Native

  • Written in JavaScript/TypeScript — AI is extremely familiar with it
  • Massive community — easy to find solutions when you hit problems
  • Expo toolchain provides an excellent development experience
  • Compiled apps feel close to native (much better than WebView wrappers)

Quick Start (with Expo)

# Create project
npx create-expo-app my-app --template blank-typescript

# Navigate to directory
cd my-app

# Start dev server
npx expo start

Scan the QR code with the Expo Go app to preview on your phone. Edit code, save, and see changes instantly on your device.

A Simple RN Page

import { View, Text, StyleSheet, TouchableOpacity, FlatList } from 'react-native'
import { useState } from 'react'

interface Todo {
id: string
text: string
done: boolean
}

export default function App() {
const [todos, setTodos] = useState<Todo[]>([
{ id: '1', text: 'Learn React Native', done: false },
{ id: '2', text: 'Build an app', done: false },
])

const toggleTodo = (id: string) => {
setTodos(todos.map(t => t.id === id ? { ...t, done: !t.done } : t))
}

return (
<View style={styles.container}>
<Text style={styles.title}>Todo List</Text>
<FlatList
data={todos}
keyExtractor={item => item.id}
renderItem={({ item }) => (
<TouchableOpacity onPress={() => toggleTodo(item.id)}>
<Text style={item.done ? styles.done : styles.todo}>
{item.done ? '✅' : '⬜'} {item.text}
</Text>
</TouchableOpacity>
)}
/>
</View>
)
}

const styles = StyleSheet.create({
container: { flex: 1, padding: 20, paddingTop: 60 },
title: { fontSize: 24, fontWeight: 'bold', marginBottom: 20 },
todo: { fontSize: 18, paddingVertical: 10 },
done: { fontSize: 18, paddingVertical: 10, textDecorationLine: 'line-through', color: '#999' },
})

Using AI to write React Native code is incredibly efficient. Tell it what you want, and the generated code usually runs directly. Expo wraps most of the complex native development work, so you rarely need to touch Xcode or Android Studio.

Flutter Comparison

Flutter (Dart language) is also an option. Its UI expressiveness is strong and the apps look great. However, AI's familiarity with Flutter/Dart isn't as deep as with React Native/TypeScript, so AI's ability to help troubleshoot issues is slightly weaker. If you have no strong preference, go with React Native first.

WebView Wrapper Approach

There's an even easier path: wrap your web app in an app shell.

Using Capacitor (from the Ionic team) or Cordova, you can package your web project into an app. It's essentially still a web page, but it can be published to the App Store and Google Play.

# Turn an existing Next.js project into an app
npm install @capacitor/core @capacitor/cli
npx cap init my-app com.example.myapp

# Add platforms
npx cap add ios
npx cap add android

# Build web then sync to native projects
npm run build
npx cap sync

# Open Xcode or Android Studio
npx cap open ios
npx cap open android

This approach works well for utility and content apps. It's not suitable for apps requiring complex native interactions (maps, video editing, AR, etc.).

Publishing to App Stores

Once your app is built, here's what you need to know about getting it into app stores.

Apple App Store

  • Developer account: $99/year
  • Review time: Typically 1-3 days, possibly longer for first submission
  • Review strictness: Very high. They check privacy policy, feature completeness, UI guidelines, whether payments go through IAP, etc.
  • Rejection is normal: Don't panic — just fix the issues and resubmit. Common rejection reasons:
    • Missing privacy policy link
    • App is too simple ("Apple doesn't accept demo-level apps")
    • Using non-IAP payment methods
    • UI doesn't comply with Human Interface Guidelines

Google Play

  • Developer account: One-time $25
  • Review time: Typically 1-3 days
  • Review strictness: More lenient than Apple, but tightening. Note that Google Play also has policy requirements for AI-generated content
  • New account restrictions: Newly registered developer accounts may have their first few apps enter "closed testing," requiring a certain number of testers before publishing publicly

Domestic Chinese Android App Stores

China doesn't have a unified Google Play — you need to submit to each store individually:

StoreRequired MaterialsSpecial Requirements
Huawei AppGallerySoftware copyright + business qualificationStricter review
Xiaomi App StoreSoftware copyright + business qualificationDecent review speed
OPPO App StoreSoftware copyright + business qualification
vivo App StoreSoftware copyright + business qualification
Yingyongbao (Tencent)Software copyright + business qualificationHigh traffic, recommended priority

Software copyright (软件著作权) is a must-have for publishing on Chinese Android stores. The application process typically takes 1-2 months. You can use an agency to speed it up (costs a few hundred to a couple thousand RMB). Plan ahead.

App Store Submission Checklist

Pre-launch checklist:

  • Privacy policy page (must exist and be accessible)
  • App icon (1024x1024px, no rounded corners, no transparency)
  • Screenshots (various sizes: 6.7", 6.5", 5.5" iPhone; 12.9" iPad)
  • App description and keywords
  • Category selection
  • Age rating questionnaire completed
  • Payment configuration (if applicable — Apple requires IAP)
  • Push notification permission description (if applicable)
  • Data collection declaration (App Privacy section)
  • Test account (if the app requires login)
  • Version number and build number are correct

Cost Comparison

Starting from scratch, what does each approach cost?

ApproachDev CostAnnual MaintenanceTime to LaunchBest Stage
Web (Next.js + Vercel)$0 (AI writes it)$0-20 (domain)1-2 daysAny stage
WeChat Mini Program (individual)$0$01 week (incl. review)Validating ideas
WeChat Mini Program (enterprise)$0 + 300 RMB certification300 RMB/year2 weeks (incl. certification)Official operation
Taro / uni-app cross-platform$0$0-3001-2 weeksMulti-platform coverage
React Native (Expo)$0$99 (Apple) + $25 (Google)2-4 weeksApp needed
Capacitor wrapper$0$99 + $251-2 weeksFast app store launch
Native iOS + Android$5000+$99 + $251-3 monthsPost-funding / high requirements

The indie developer's optimal path:

  1. Week 1-2: Build a web version with Next.js + Vercel, launch quickly
  2. Week 3-4: Iterate based on user feedback, validate product direction
  3. Month 2: If domestic market is needed, build a mini program version with Taro/uni-app
  4. Month 3+: If user base is large enough and there's app demand, build with React Native

Don't skip steps. The biggest mistake indie developers make is wanting to build an app from day one — spending two months without launching anything, not even a web version, and ultimately validating nothing.

Chapter Summary

  • In 90% of cases, the web is the best choice. Zero cost, zero friction, fastest iteration
  • For the domestic Chinese market, WeChat Mini Programs are worth building. But register your account and get the required qualifications first
  • Cross-platform frameworks (Taro/uni-app) are great for rapid multi-platform coverage, but "jack of all trades, master of none"
  • React Native is the best choice for building apps. Expo makes the development experience excellent
  • WebView wrappers (Capacitor) are the fastest way to get an app in the store. Best for content/utility apps
  • Publishing to app stores has barriers. Prepare your privacy policy, screenshots, and qualifications in advance

Focus on one platform, do it exceptionally well, then consider expanding. This principle applies to nearly every indie developer.