CLI tool
zuiidea/antd-admin avatar
zuiidea/antd-admin

zuiidea/antd-admin: a React 19 admin scaffold you generate with init-antd-admin

AI-friendly enterprise front-end best practices

9,768 stars2,469 forksTypeScriptMIT

At a glance

What is it?
Antd Admin ships two templates (basic and with-lingui) through a scaffolding CLI, with mock-first development, JWT auth and URL-synced tables. It is a starting point for internal dashboards, not a drop-in product.
Who is it for?
Adopt it if you are starting an internal admin dashboard on Ant Design 6 and React 19 and want working auth, permission guards and CRUD patterns on day one. Do not adopt it if you need a maintained upstream you can pull fixes from on a schedule, or if your stack is not React plus Ant Design.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 66 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What zuiidea/antd-admin actually gives you

This repository is not a component library. It is a scaffolding system plus a set of template applications. The README describes it as providing "production-style admin templates with modern frontend tooling, mock-first development, and practical testing coverage", and the two templates it names are `basic` (English-only) and `with-lingui` (bilingual `en` + `zh`).

The audience is narrow and specific: a front-end team that has decided on Ant Design and React and now needs the surrounding scaffolding. Login, route guards, table state, theme switching and mock data are the parts every internal dashboard rebuilds from scratch. Those are the parts this project hands over already wired. The repository description calls it "AI-friendly enterprise front-end best practices", which is a positioning statement rather than a technical claim, and it reads as marketing more than as documentation.

What it is not: a hosted admin product, a backend, or a design system. Everything it ships assumes you will replace the mock layer with your own API.

The mechanism: templates, a CLI, and a mock-first data layer

The repository is a pnpm workspace driven by Turborepo. The top level contains `apps/`, `packages/`, `docs/`, `turbo.json` and `pnpm-workspace.yaml`. The scaffolding CLI lives in `packages/create`, and the README points to `packages/create/README.md` for its detailed behavior. So the flow is: the CLI copies a template out of the repository into a standalone project, applies rewrite transforms, and optionally installs dependencies and initializes git.

The stack the templates target is listed explicitly: React 19, Ant Design 6, TanStack Router and Query, Zustand, and Zod. Data fetching goes through TanStack Query, routing through TanStack Router, and validation through Zod schemas at the API boundary. The README describes "typed API boundaries and reusable CRUD patterns", which is where Zod and Query meet.

Two design decisions stand out. First, mock-first development: the README states local development needs no backend, and the root `package.json` lists `msw` under `onlyBuiltDependencies`, so Mock Service Worker is the interception layer. Second, URL-synced table state: pagination, sorting and search live in the URL, which means a filtered table view is a shareable link and the browser back button behaves. That is a small thing that most hand-rolled admin tables get wrong.

Authentication is a JWT access/refresh flow, and menus plus permission guards are backend-driven. That means the menu tree is data, not code, and the guard logic reads from the server response. It also means the mock layer has to fake that response shape before the real backend exists.

Scaffolding a first app with init-antd-admin

The README's quick start is the scaffolding CLI, not a clone-and-run. Interactive mode asks for the project directory and options:

bash
npx init-antd-admin@latest

The same CLI is available through other runners, and the README lists all four:

bash
pnpm dlx init-antd-admin@latest

For a scripted setup, pass the target folder and the template name. This creates `my-app` from the English-only `basic` template and installs with pnpm:

bash
pnpm dlx init-antd-admin@latest my-app --example basic -m pnpm

If you want to inspect the generated files before any dependency install runs, the README gives this form for the bilingual template:

bash
pnpm dlx init-antd-admin@latest my-app --example with-lingui --skip-install

After scaffolding, the workspace scripts are Turborepo tasks, so the commands you run inside the generated project are the standard ones declared in its own `package.json`: `dev`, `build` and `lint` are all `turbo run` invocations at the repository root. You should see the admin shell load with mock data and no backend process running. The CLI options table in the README covers `--example`, `--example-path`, `-m` for package manager, `--skip-install`, `--skip-transforms` and `--no-git`; the table's description of the `--example` row is truncated in the README itself, which is why the CLI's own README is the better reference.

Where it stops being the right tool

The template's assumptions are the limitation. Mock-first development is excellent until your API does not look like the mock. The mock handlers encode a particular response shape for lists, pagination and the permission payload. If your backend returns a different envelope, you are editing handlers and the Zod schemas that validate them, and the "no backend required" advantage evaporates on day two.

Backend-driven menus and guards are a genuine architectural commitment. If your product's navigation is static, or if permissions are computed client-side from a role string, you are carrying an indirection layer that earns nothing. The same applies to the JWT access/refresh flow: if your organization uses cookie sessions behind an SSO gateway, the auth module in the template is scaffolding you will delete.

Version coupling is the sharper edge. The stack is pinned to React 19 and Ant Design 6. Ant Design 6 is a major version, and the related search terms show people still asking about `Antd v3`, so a large amount of Ant Design material in circulation describes an older API. Copying an Ant Design 3 or 4 snippet into this template will not work. Treat any external Ant Design example as needing a version check first.

Finally, the i18n story is a template choice, not a runtime toggle. The README presents `with-lingui` as a bilingual setup with Lingui. If you scaffold `basic` and later need a second locale, you are adding Lingui and restructuring message extraction yourself.

How it differs from hand-rolling on a component library

The obvious alternative is to start from Ant Design directly and assemble the rest: a router, a query client, a store, a mock server, an auth flow. That is the honest comparison, because Ant Design supplies components and this project supplies the application skeleton around them. The difference in approach is that Antd Admin makes opinionated choices for you: TanStack Router over React Router, TanStack Query for server state, Zustand for client state, Zod for validation, MSW for mocks, Playwright for end-to-end tests. Assembling those yourself gives you control over each pick and costs you the integration work.

A second alternative is a full-stack admin framework, where the backend and the admin UI ship together. That inverts the trade-off. You get less wiring, but you accept the framework's data layer and deployment model. Antd Admin assumes you already have or will build a separate API, which is why the typed API boundary matters so much here.

A third path, staying on an older Ant Design major, is what a lot of existing internal tools do. It is defensible if your codebase is large and stable. It is a poor starting point for new work, because you begin already behind on the component library.

Maintenance, licence and upgrade cost

The repository is not archived. The last push was on 2026-07-27, and the most recent release listed is 6.0.1 on 2026-05-26, following 6.0.0 on 2026-03-14 and 5.5.0 on 2026-02-19. That is a real release cadence over the first half of 2026, and the gap between the last push and the latest release is small. The licence is MIT, stated in the README and in the root `package.json`, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. That is a summary of the licence text, not legal advice; read the `LICENSE` file for the operative terms.

The upgrade cost is concentrated in one place: the template you scaffolded is yours, and upstream changes do not flow into it automatically. The CLI copies files and applies transforms at scaffold time. There is no documented path in the README for pulling a later template revision into an existing generated project, so a 6.0.1 to a future 6.x or 7.x is a manual diff against the template. That is the standard trade-off for scaffolding CLIs, and it is worth pricing in before you treat the template as a dependency.

There is one more concrete cost visible in the root `package.json`: pnpm overrides replace `vite` with `npm:@voidzero-dev/vite-plus-core@latest` and `vitest` with `npm:@voidzero-dev/vite-plus-test@latest`. Those resolve to `latest` at install time rather than to a pinned version, so two installs months apart can produce different build tooling. If you need reproducible builds, pin those overrides in your generated project.

Editorial conclusion

Adopt it if you are starting an internal admin dashboard on Ant Design 6 and React 19 and want working auth, permission guards and CRUD patterns on day one. Do not adopt it if you need a maintained upstream you can pull fixes from on a schedule, or if your stack is not React plus Ant Design. Before committing, run the scaffold, check that the mock handlers cover your own API shapes, and read packages/create/README.md for the transform and git flags the top-level README only lists in a table.

Frequently asked questions

How do I install zuiidea/antd-admin?

You scaffold it rather than clone it. The README's quick start runs `npx init-antd-admin@latest` interactively, or you can pass a directory and template non-interactively, for example `pnpm dlx init-antd-admin@latest my-app --example basic -m pnpm`.

What is the difference between the basic and with-lingui templates in Antd Admin?

The README describes `basic` as an English-only setup and `with-lingui` as a bilingual setup covering `en` and `zh` using Lingui. The choice is made at scaffold time through the `--example` flag.

Does Antd Admin need a backend to run locally?

The README lists mock-first local development as a key feature and states no backend is required. The root package.json includes `msw` in `onlyBuiltDependencies`, which points to Mock Service Worker as the interception layer.

What React and Ant Design versions does Antd Admin use?

The README lists React 19 and Ant Design 6, alongside TanStack Router and Query, Zustand and Zod. That matters because Ant Design 6 is a major version and older Ant Design examples will not drop in unchanged.

What licence does zuiidea/antd-admin use?

MIT, stated in the README and in the root package.json. The licence permits commercial use and modification provided the copyright and permission notices are retained.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. zuiidea/antd-admin on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zuiidea-antd-admin.svg)](https://hysenlabs.com/projects/zuiidea-antd-admin)