A set of components and utilities for rapid UI development https://ui.frappe.io
  • TypeScript 44.3%
  • Vue 25.9%
  • Markdown 22.4%
  • JavaScript 6.5%
  • CSS 0.8%
Find a file
Saqib Ansari 0348e55acb
Merge pull request #1115 from nextchamp-saqib/demo/number-card-target
feat(charts): number card target and delta prefix
2026-09-03 12:24:11 +05:30
.claude/commands chore(barista): make score bands mutually exclusive 2026-08-09 16:42:25 +05:30
.github ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
.husky build: removed prepare step 2024-10-16 19:07:15 +05:30
cypress refactor!: delete frappe/ and the frappe, drive subpath exports 2026-08-09 17:25:47 +05:30
docs Merge pull request #1110 from frappe/forge/pre-tag-surface-trims 2026-09-01 01:03:56 +05:30
espresso-v2-design-tokens refactor(tokens)!: shift chromatic ink scales one level for the updated espresso v2 export (#1022) 2026-08-10 22:59:50 +05:30
experimental fix(FloatingWindow): drop the border on the floating panel 2026-09-02 16:09:33 +05:30
icons Merge remote-tracking branch 'origin/main' into v1/alert 2026-08-09 19:02:10 +05:30
public fix: change logo and theme 2024-04-13 03:17:08 +05:30
scripts feat(scripts): add the shortcuts-v1 codemod for the v1 keyboard shortcut config (#1077) 2026-08-13 18:34:21 +05:30
skills/frappe-ui fix(evals): make the source-blind gate an allowlist 2026-08-31 21:56:03 +05:30
spec fix(Toast): route the inherited creators through the description contract 2026-08-29 03:56:24 +05:30
src test(charts): pin the reference line against what the legend can reach 2026-09-02 16:13:43 +05:30
tailwind refactor(CommandPalette)!: rebuild as a seven-part family in experimental (#1083) 2026-08-13 22:02:21 +05:30
v1-release refactor(ThemeSwitcher): park in frappe-ui/experimental (#1094 item 1) 2026-08-29 02:45:45 +05:30
vite fix(Toast): render ToastProvider before the slot so early toasts land (#1026) 2026-08-10 22:24:13 +05:30
vitepress ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
.coderabbit.yaml docs: move the release changelog onto the docs site (#1031) 2026-08-10 22:48:36 +05:30
.git-blame-ignore-revs chore: update exports 2025-05-26 15:26:11 +05:30
.gitattributes feat: component meta data 2025-12-16 15:54:34 +05:30
.gitignore ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
.nycrc.json fix(coverage): include .vue files in nyc report output 2026-05-20 01:25:59 +05:30
.postcssrc.js chore: convert to esm 2025-05-07 18:05:56 +05:30
.pre-commit-config.yaml chore: Add pre-commit to auto format code before commit 2024-10-16 17:34:21 +05:30
.prettierrc.json feat: Setup vitepress and index page 2022-11-28 13:57:42 +05:30
.semgrep.yml chore: drop dead frappe/ globs from propsgen, tsconfig, semgrep, coderabbit 2026-08-09 17:25:47 +05:30
.tokens-v2-ink-shift refactor(tokens)!: shift chromatic ink scales one level for the updated espresso v2 export (#1022) 2026-08-10 22:59:50 +05:30
404.html fix: 404 redirect and route handling 2024-10-30 16:22:35 +05:30
App.vue feat: Set up storybook 2023-03-08 18:55:33 +05:30
auto-imports.d.ts Revert "refactor: replace lucide-static with @iconify-json/lucide (#366)" 2025-07-24 13:51:44 +05:30
CONTEXT.md refactor(shortcuts)!: one combo string, a dialog instead of a modal, and two documented behaviors (#1078) 2026-08-13 18:20:33 +05:30
cypress.config.ts chore: wire vitest + cypress code coverage with merged report 2026-04-28 03:11:25 +05:30
experimental.ts refactor(ThemeSwitcher): park in frappe-ui/experimental (#1094 item 1) 2026-08-29 02:45:45 +05:30
frappe-ui-square.png fix: change logo and theme 2024-04-13 03:17:08 +05:30
frappe-ui.png fix: change logo and theme 2024-04-13 03:17:08 +05:30
frappe-ui.svg chore(ui): update histoire dark theme colors 2024-10-16 15:57:58 +05:30
index.html feat: Set up storybook 2023-03-08 18:55:33 +05:30
license.md feat: first commit 2022-01-17 20:09:02 +05:30
main.js refactor(icons)!: move the sprite trio to frappe-ui/experimental 2026-08-09 16:17:06 +05:30
package.json chore(release): v1.0.0-beta.56 2026-08-31 19:35:32 +00:00
PHILOSOPHY.md refactor(charts): name the legend emits after the behavior 2026-08-10 12:37:49 +05:30
postcss.config.ts chore: setup histoire 2023-08-28 23:14:31 +05:30
readme.md refactor(CommandPalette)!: rebuild as a seven-part family in experimental (#1083) 2026-08-13 22:02:21 +05:30
tailwind.config.js refactor(tokens)!: drop the black weight variants 2026-08-09 22:44:59 +05:30
tsconfig.app.json ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
tsconfig.base.json fix(build): keep noEmit in tsconfig.base.json 2026-08-08 21:42:53 +05:30
tsconfig.json chore(tsconfig): route .cy.ts files to a Cypress project via solution-style config 2026-06-07 03:08:31 +05:30
tsconfig.node.json ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
vite.config.ts ci: type-check the library on every PR, and fix the config that hid 38 errors (#1095) 2026-08-15 04:29:27 +05:30
vitest.config.ts fix(ci): exclude .github/ from vitest's test discovery 2026-08-04 18:13:37 +05:30
vitest.setup.ts chore(deps): upgrade tiptap and prosemirror 2026-06-11 00:35:23 +05:30
yarn.lock chore(deps): bump lucide-static to 1.31.0 (#1092) 2026-08-17 11:29:45 +05:30

Frappe UI

Rapidly build modern frontends for Frappe apps

NPM Downloads Screenshot 2024-12-12 at 5 27 58 PM

Frappe UI

Frappe UI provides a set of components and utilities for rapid UI development. Components are built using Vue 3 and Tailwind. Along with generic components like Button, Link, Dialog, etc., it also contains utilities for handling server-side data fetching, directives and utilities.

Motivation

In 2019, I began building Frappe Books which had a new design. This led to the creation of small reusable components like Button, Dialog, and Card. Moving on to Frappe Cloud in 2020, I reused and evolved these components in the Frappe Cloud UI. In 2022, while starting a new project, I decided to extract these components into a standalone package to avoid repeating the copy-paste process. This package is now being developed alongside the Gameplan, continually adding generic components and utilities for frontend development.

Under the Hood

  • TailwindCSS: Utility first CSS Framework to build design system based UI.
  • Reka UI: Unstyled and accessible UI primitives.
  • TipTap: ProseMirror based rich-text editor with a Vue API.
  • dayjs: Minimal javascript library for working with dates.

Usage

Requires Node >=20.19.0.

npm install frappe-ui
# or
yarn add frappe-ui

Now, import the FrappeUI plugin and components in your Vue app's main.js:

import { createApp } from 'vue'
import { FrappeUI } from 'frappe-ui'
import App from './App.vue'
import './index.css'

let app = createApp(App)
app.use(FrappeUI)
app.mount('#app')

In your tailwind.config.js file, include the frappe-ui preset:

module.exports = {
  presets: [
    require('frappe-ui/src/utils/tailwind.config')
  ],
  ...
}

Now, you can import needed components and start using it:

<template>
  <button>Click me</button>
</template>
<script>
  import { Button } from 'frappe-ui'
  export default {
    components: {
      Button,
    },
  }
</script>

Claude Code skill

For AI coding agents (Claude Code, Cursor, Codex, etc.), Frappe UI ships an agent skill that teaches the agent the library's conventions — semantic Tailwind tokens, the variant + theme color axes, the useCall data-fetching composable, common UI recipes, and anti-patterns to avoid.

Install with Vercel's skills CLI:

npx skills add https://github.com/frappe/frappe-ui/tree/main/skills/frappe-ui

The skill lives in skills/frappe-ui/ and is updated alongside the library.

Used By

Frappe UI is being used in a lot of products by Frappe.