All notable changes to @guanzhu.me/arco-cli are documented here.
Format loosely follows Keep a Changelog;
versions follow SemVer. The npm registry is the
source of truth: https://www.npmjs.com/package/@guanzhu.me/arco-cli.
- Feat
arco doctor— static diagnostic command for scaffolded arco-pro-recommend projects. Runs four checks and exits non-zero on any failure (CI-friendly):- Project shape — probes for the standard layout markers (
src/api/client.ts,src/auth/access.tsx,src/mock/handlers.ts,src/routes.ts,package.json). - Mock handlers — every file under
src/mock/*.tsorsrc/pages/**/mock/index.tsthat exportshandlersmust be imported + spread insrc/mock/handlers.ts. Helper modules (noexport const handlers) are skipped, somock/random.tsetc. don't produce false positives. - Access flags — every
access.fooreference acrosssrc/**/*.{ts,tsx}must be defined indefineAccess()'s return shape. Uses a\baccess\.\w+\bregex (not\ba\.\w+\b) so sort-callback shorthands like(a, b) => a.x - b.xdon't trigger false positives. - Route → page mapping — every leaf
key: 'foo/bar'insrc/routes.tsmust have a matchingsrc/pages/foo/bar/index.tsx.
- Project shape — probes for the standard layout markers (
- Feat (template) Logout now goes through
Modal.confirminstead of firing immediately on click — the warning and OK/cancel labels are localised (navbar.logout.confirm.{title,content,ok,cancel}keys inen-US.ts+zh-CN.ts), and the OK button usesstatus: 'danger'for a visual safety cue.
0.13.1 — 2026-05-21
- Docs Added
docs/auth-backend.{md,zh-CN.md}— end-to-end guide for wiring the new<Access>system to a real backend. Covers theUserInfocontract, three permission models (pure RBAC / pure ACL / hybrid) with SQL schemas, middleware examples in Node/Express, Spring Boot, Python/FastAPI, and Go, session vs JWT trade-offs with refresh-token rotation, data-level filtering (Postgres RLS), permission cache invalidation, best practices, and a migration checklist from existing auth backends. - Docs Both READMEs now have a "Wiring a real backend" section linking to the new guide.
0.13.0 — 2026-05-21
- Feat (breaking, template) Modern
<Access>permission system. Replaces the previous<PermissionWrapper>+requiredPermissionsarray convention with a hybrid RBAC + fine-grained model that mirrors ant-design-pro's<Access>API:src/auth/access.tsx—defineAccess(userInfo)factory +useAccess()hook +<Access accessible fallback>component. All boolean flags consumed by the UI live in one place; backend shape changes are a one-file edit.- Backend shape:
userInfonow exposes bothroles: string[](coarse RBAC) andpermissions?: Record<string, string[]>(optional fine-grained overlay). The frontenddefineAccessuses both — most flags resolve from roles alone, occasionalcan(resource, action)checks cover "give this user one extra capability outside their role" cases. src/routes.ts: route nodes carry anaccess?: (a: AccessMap) => booleanpredicate instead ofrequiredPermissions: [{ resource, actions }]. Cleaner type-checked references to central flags.src/auth/ProtectedRoute.tsxgains arequireAccessprop for route-level gating with redirect to/exception/403(override viadenyRedirect).- Migrated 3 call sites in
pages/list/{search-table,card}to use<Access accessible={access.canX}>. - Removed
src/components/PermissionWrapper/andsrc/utils/authentication.ts— no backward-compat shim.
0.12.1 — 2026-05-21
- Security
pages/login/form.tsxno longer JSON.stringifies the password into localStorage when "Remember me" is checked. Only the username is persisted, and is rehydrated into the form on next visit (password field stays blank). The locale key + label changed from "Remember password" → "Remember me" / "记住账号". - Fix
/loginno longer force-setsarco-theme=lighton mount, so dark-mode users bounced to the login page (e.g. after a 401) don't see a theme flash. - Fix Successful login now
navigate('/')(with redirect-target restoration fromlocation.state.from) instead ofwindow.location.href = '/'. The page-reload was throwing away the TanStack Query cache that the login itself just warmed. - Fix The axios 401 interceptor now calls a router-aware navigate when one's been bound by the layout (
bindNavigatorinapi/client.ts); falls back tolocation.hrefonly when the interceptor fires before React mounts. - Cleanup Deleted
utils/is.ts—isArray/isObject/isStringhad zero references, andisSSRwas theatre in a Vite SPA.useStorage.tsandgetUrlParams.tslost theirisSSRguards;useStoragealso picked up a cross-tabstorageevent listener so two windows sharing the samearco-lang/arco-themestay in sync. - Cleanup Stripped
import React from 'react'from 32.tsxfiles where the namespace wasn't actually referenced — Vite 7's automatic JSX runtime makes the default import dead weight. - UX
Footerandpages/login/index.tsxnow renderenv.appTitleinstead of the hardcoded literal "Arco Design Pro". Thelogin.form.titlelocale key is also localisation-neutral ("Sign in" / "登录") rather than baking the brand name into every translation. - Types Typed
pages/profile/basic/{item,index}.tsxonBasicProfile(no moredata: any/{} as any),pages/user/setting/header.tsxonUserInfo,pages/list/card/index.tsxonCardListBundle.
0.12.0 — 2026-05-21
- Feat
arco add table <name>— single-command full CRUD module scaffold. Generates a page (index.tsx+columns.tsx+ drawerform.tsx+locale/), four API hooks (list / create / update / delete with zod schemas + cache invalidation), and MSW handlers that actually mutate an in-memory list (POST/PUT/DELETE persist for the session). Auto-editssrc/routes.ts,src/locale/{en-US,zh-CN}.ts(or legacyindex.ts), andsrc/mock/handlers.tsto register everything. Falls back to printing the snippet when any of the three files doesn't match the expected upstream shape — same pattern asadd page/add api. Reuses the existingaddPage/routesEdit,addPage/localeEdit, andaddApi/handlersEditengines.
0.11.2 — 2026-05-21
- Perf Global locale split per language (
src/locale/{en-US,zh-CN}.ts); only the active language ships in the entry chunk. Switching languages dynamic-imports the other bundle and adds it to i18next on the fly. NewinitI18n()fromsrc/i18n/index.tsis awaited inmain.tsxbefore React mounts. - Feat
MutationCache.onSuccessnow reads a typedmeta.successMessageand fires the global Arco toast — same pattern the error toast already used. AddedAppMetatype +declare module '@tanstack/react-query'block so the field is autocompleted at call sites.useSubmitGroupFormMutationaccepts the meta as a parameter; the form page passes its localised success string in once at construction instead of re-implementing the toast inline. - UX
pages/dashboard/monitor/chat-panel.tsxswapped<Spin>for<Skeleton>shaped like a chat row (avatar + 3 text lines), matching the Skeleton pattern used by the workplace overview cards. Chart loaders still useSpin— Skeleton doesn't match a chart's visual footprint.
0.11.1 — 2026-05-21
- Fix
pages/user/setting/info.tsx:Message.success('userSetting.saveSuccess')was passing the literal locale key instead of the translated string — users saw the raw key in the toast. - Fix
pages/login/banner.tsx: all three carousel slides referenced the same image URL. Replaced the three ByteDance CDN URLs with three distinct local SVG illustrations underpages/login/assets/. - Fix i18n holes:
NavBarmenu-item placeholder toast was hardcoded English;welcome/code-blockhad hardcoded zh-CN copy/copied strings. Both now read locale keys. - Security
http://p1-arco.byteimg.com/...refs indashboard/monitor/{data-statistic-list,studio}.tsxupgraded tohttps://to avoid mixed-content blocks under HTTPS deploys. - Perf All
useQueryhooks acrosssrc/api/*.tsnow forwardsignalfromQueryFunctionContextinto the axios call. TanStack Query aborts the underlying request when the component unmounts or the queryKey changes — previously the response was downloaded and silently dropped.useSearchTableQuerygained an explicitPromise<SearchTableResponse>annotation to keep type inference clean alongsideplaceholderData: keepPreviousData.
0.11.0 — 2026-05-21
- Feat
arco add api <name>— scaffold a TanStack Query hook + zod schema + MSW handler in one shot, and auto-register the handler insrc/mock/handlers.ts.--method get(default) generatesuseXxxQuery+ list response schema;--method post|put|deletegeneratesuseXxxMutation+ input schema + cache invalidation.--skip-mockskips the mock generation when the consumer brings their own backend.
0.10.21 — 2026-05-21
- Chore Dropped the unused
.github/workflows/deploy-pages.yml; collapsed the Cloudflare section in both deploy docs to a 10-line "same as Vercel with these diffs" note (the hosted demo runs on Vercel).
0.10.20 — 2026-05-21
- Docs
CHANGELOG.mdbackfilled from git tag history (v0.1.0 → v0.10.19). - Feat Public-demo banner (
<Alert>) in the layout, gated onVITE_DEMO_BANNER=1. - Cleanup Replaced byted-CDN favicon with a local SVG (260 bytes).
- Feat Added OG / Twitter Card meta tags +
og-image.pngextracted from the demo GIF; deployed demo now renders rich previews when shared.
0.10.19 — 2026-05-21
- Docs Animated demo hero (
docs/assets/demo.gif) added to both READMEs — login → dashboard → theme cycle → search-table mock data. Commits the Playwrightscripts/record-demo.mjsfor re-generating.
0.10.18 — 2026-05-21
- Docs Demo badge +
Live demo ↗link in both READMEs; deploy guide rewritten to lead with Vercel (matches what powers the live demo) and demote Cloudflare to the second slot.
0.10.17 — 2026-05-21
- Docs Bilingual
README.zh-CN.md+docs/deploy.{md,zh-CN.md}with auto-deploy + manual paths. - CI New
.github/workflows/deploy-pages.ymlfor auto-deploying the template to Cloudflare Pages via Wrangler.
0.10.16 — 2026-05-21
- Meta npm
descriptionrewritten,keywordsexpanded 3 → 20 for search discoverability. GitHub repo description + 18 topics mirrored. Addsbugs.urland explicithomepage.
0.10.15 — 2026-05-21
- Docs README rewritten with hero / comparison table / scripts table / roadmap.
- CLI
pro-recommendmoved to position 3 in template menu; label changedArco Pro (Recommend)→Arco Pro (Unofficial); hint corrected to React 18. - Fix Studio-status panel — restored paired
column={2}layout; right side widened 280 → 320 px so zh-CN labels don't wrap vertically.
0.10.14 — 2026-05-21
- Perf MSW lazy-imported in
main.tsx— production entry chunk drops from ~1.15 MB to ~289 KB (75% smaller) whenVITE_API_BASEis set. - Test Playwright smoke E2E (T2-15):
e2e/smoke.spec.tscovers login redirect, search-table mock rows, theme cycle, 404 route. New scriptsnpm run e2e+npm run e2e:install.
0.10.13 — 2026-05-21
- Fix Swap abandoned
react-color@2.19(last release 2020-10) forreact-colorful@^5.7(2 KB vs ~50 KB). Removes one React 19 blocker. - Feat Settings drawer now mirrors the NavBar's theme cycle as a 3-option Radio.Group (System / Light / Dark), reading/writing the same
GlobalContext.theme.
0.10.12 — 2026-05-21
- Fix Layout's
*catch-all route was lazy-loadingpages/exception/403(Forbidden) instead of 404. - Cleanup Dropped ~30 lines of dead
.bizcharts-tooltipCSS (bizcharts swapped for VChart in v0.10.0). Removedquery-stringdep (replaced withURLSearchParams); de-duped clipboard (keptcopy-to-clipboardpkg, droppedutils/clipboard.ts); removedconsole.logfrom search-table.
0.10.11 — 2026-05-21
- Feat Theme defaults to
system; NavBar icon now cyclessystem → light → dark → system; main.tsx listens for live OS dark-mode toggles when in system mode. - Cleanup Dropped NProgress + NavBar avatar
IconLoading(both flashed concurrently during nav). Preload-before-navigate keeps the Suspense fallback from flashing. - Fix Studio-status: switched zh-CN paired metrics to
column={1}to dodge a character-wrap (later reverted in v0.10.15 with proper widening). - Style Reset
.arco-typography { margin-top }to 0 inside.arco-layout-content.
0.10.10 — 2026-05-21
- Fix
/api/listmock returned 0 rows on the initial unfiltered request.URLSearchParams.getAll()returns[]when the key is missing, and[]is truthy — soif (contentType)always ran[].includes(...)and rejected every row. Gate every multi-select filter on.length.
0.10.9 — 2026-05-21
- Feat Template
tsconfig.jsonflips tostrict: true+noImplicitOverride(T2-12). Pays down 76 errors across ~30 files (callback annotations, util helpers, VChart datum types, route helpers). - Fix Removed dead
multi-dimension/utils/map.ts(last user removed when bizcharts → VChart). Dropped@turf/turfdep that lived only in that file. - Types Local shims for
react-colorand@arco-design/color(they ship no .d.ts).
0.10.8 — 2026-05-21
- Perf Vite
manualChunkspins react / arco / vchart / tanstack to their own chunks for parallel loading + long-term cache (T2-9). - Test
npm run test:coveragescript with v8 provider (T2-10). - DX
npm run analyze(rollup-plugin-visualizer) opens a sunburst report (T2-11). Gated onvite build --mode analyzefor Windows-cmd compatibility.
0.10.7 — 2026-05-20
- Feat Global API error handling via TanStack Query's
QueryCache.onError/MutationCache.onError→ Arco Message (T2-6). - Feat Centralised auth surface:
useAuth()hook +<ProtectedRoute>for declarative route gating (T2-7). Removes imperativecheckLogin()boot redirect. - Feat Per-route document title via
react-helmet-async, driven by breadcrumb (T2-8). Fixed a long-standing breadcrumb-empty bug.
0.10.6 — 2026-05-20
- Feat Wire up
react-i18nextwithi18next-browser-languagedetector(T2-5). Existing 48useLocale()call sites kept working via a backward-compat shim.
0.10.5 — 2026-05-20
- Cleanup Dropped
@arco-themes/react-arco-pro(T2-4). It was a stale 2022 copy of Arco's default tokens. Replaced with LessmodifyVarsdirect override for the only knob we use (brand colour).
0.10.4 — 2026-05-20
- Refactor Split monolithic
layout/index.tsxintolayout/,layout/icons.ts,layout/flattenRoutes.ts(T2-1). - Refactor Swap
@loadable/componentfor nativeReact.lazy(T2-2). - Cleanup Drop
mockjsentirely —mock/random.tsis a tiny@faker-js/faker-backed shim of the helpers we actually used (T2-3).
0.10.3 — 2026-05-20
- Feat Migrate form pages to
react-hook-form+zodvia a thincomponents/Form/Field.tsxbridge to Arco's<Form.Item>.
0.10.2 — 2026-05-20
- Feat Replace Redux with Zustand v5 for client settings state. Persisted to localStorage with merge callback.
0.10.1 — 2026-05-20
- Feat Server state migrated to TanStack Query v5 with
queryClientsingleton + per-resource hooks (useUserInfoQuery, etc.).
0.10.0 — 2026-05-20
- Feat Mock layer swapped from
mockjsHTTP interception to MSW v2 service-worker. - Feat Migrate from
react-routerv5 to v7 (declarativeRoutes+BrowserRouter). - Feat
react-error-boundarywraps the routedContentso a single throwing chart doesn't whiteout the page. - Feat Vitest sample test setup; new
npm testscript.
0.9.3 — 2026-05-20
- Feat
arco upgradecommand — bumps@arco-design/*deps in the consumer'spackage.json. - DX Passive
update-notifierbanner so users learn about newer CLI releases without us touching their project.
0.9.2 — 2026-05-14
- Fix Template react/react-dom downgraded from
^19.1→^18.3.0. Arco'scloneElementreadschild.ref(React-16-era), which React 19 removed → noisy console warnings; we don't use React 19 features. - CI ESLint flat config (
eslint.config.js) +tsc --noEmitgates the template build. Replaces legacy.eslintrc/.eslintignore.
0.9.1 — 2026-05-11
- Fix Breadcrumb restored to the 3-segment "icon · section · leaf" shape that matches official Arco Pro.
0.9.0 — 2026-05-11
- Feat Charts migrated from BizCharts to VChart with
@visactor/vchart-arco-theme. BizCharts was unmaintained; VChart is Visactor's actively-developed successor. - Fix SVGR v4 + Vite 7 broke
import Logo from './logo.svg'(now returns URL not component). Plugin config forces back default-export ReactComponent.
0.8.x — 2026-05-11
- A burst of fidelity work bringing the bundled
pro-recommend-fulltemplate to parity with the officialarco-design-proVite/Full output: chart palette polish, table column tweaks, layout sider/footer alignment, locale wording, mock data shapes.
0.7.0 — 2026-05-11
- Feat Started shipping a maintained bundled template under
templates/arco-pro-recommend-*— the headline feature of this fork.
0.6.0 — 2026-05-11
- Refactor Reorganised
src/by command (init/,addPage/,commands/,utils/). Dropped jest + ts-jest in favour of node's built-innode:test+tsx. Addedarco devpassthrough.
0.5.0 — 2026-05-11
- Feat
arco add pagegets an interactive menu-placement picker that editssrc/routes.ts+src/locale/index.tsin place.
0.4.0 — 2026-05-11
- Feat
arco add page <name> [--type blank|table]scaffolds new pages following arco-design-pro's conventions.
0.3.0 — 2026-05-11
- Refactor Init flow split + interactive UI migrated to
@clack/prompts.
0.2.0 — 2026-05-11
- Feat Toolchain modernised (Node 22, TypeScript 5, ESLint 9). Adds the Windows
child_processcompatibility shim required byarco-design-pro'sspawnSync('npm.cmd', …)after the BatBadBut (CVE-2024-27980) Node fix.
0.1.0 — 2026-05
- Initial fork of the abandoned
arco-cliunder@guanzhu.me/arco-cli. Preserves the original interactive template selection andinitflow; modernises packaging, types, and engines.