@charpente-ui/vue

Headless, unstyled Vue 3 components for accessible forms. Logic only, zero CSS.
6,775 1
Install
npm install @charpente-ui/vue
Latest Version:2.12.1
Vue:3
License:MIT
Last Updated:Oct 11, 2026
Links: GitHub  ·  npm
Maintainer: bdamevin

Charpente UI

Version Downloads License

A logic-first, headless UI library for Vue 3. The logic you need, without the CSS you don't.

Charpente UI

Documentation

charpente.frontfactory.dev — guides, API reference and a live demo for every component.

Philosophy: don't reinvent the wheel

Most UI libraries are bloated because they try to impose a visual style. Charpente UI is headless: it provides the "chassis" (HTML structure and complex input logic) and you bring the "paint" (Tailwind, CSS Modules, or Styled Components).

  • Zero Style: No CSS included. Total freedom for your UI.
  • Transparent Wrapper: We don't hide native HTML. Attributes like type, placeholder or required work exactly like standard HTML via attribute inheritance.
  • Smart Logic: Checkbox arrays, shared radio names, for/id wiring and native validation are handled for you.

Requirements

Requirement Constraint
Vue 3.5 or newer — the library builds its ids on Vue's own useId(), added in 3.5
Node 22 or newer — declared in engines, so it is checked when you install
Modules ESM only — a single import entry, no CommonJS build

On an older Vue, npm stops the install with an ERESOLVE conflict while pnpm and yarn only warn — and forcing past that warning surfaces as useId is not a function at mount. See Requirements.

Installing

npm install @charpente-ui/vue

Playground

Try it live on StackBlitz — no installation required:

Open in StackBlitz

Or run it locally:

npm run dev

Usage

<script setup>
    import { ref } from 'vue';
    import { CForm, CField, CLabel, CInput, CSupportingText, CButton } from '@charpente-ui/vue';

    const email = ref('');

    function onSubmit() {
        // Only called once the form passes native validation.
    }
</script>

<template>
    <CForm validate @submit="onSubmit">
        <CField class="form-group">
            <CLabel>Email Address</CLabel>

            <CInput v-model="email" type="email" placeholder="hello@world.com" required
                    class="my-custom-input-style"/>

            <CSupportingText validation>We never share your email.</CSupportingText>
        </CField>

        <CButton type="submit" class="btn-primary">
            Subscribe
        </CButton>
    </CForm>
</template>

No for/id wiring, no validation library: the label, the hint and the browser-localized error messages are linked and accessible automatically — and every class lands on the native element, ready for your CSS.

Getting started →

Components

Name Core Logic Tag Status
Button Polymorphic: Switches tags (a, button, etc...) while keeping logic. CButton Ready
Checkbox Smart Toggle: Handles array state, booleans, and indeterminate natively. CCheckbox Ready
CheckboxGroup Group: Shared v-model and opt-in name across checkboxes inside a fieldset. CCheckboxGroup Ready
Field Wrapper: Auto-links a label and an input via a shared generated id. CField Ready
File File Input: Reactive file selection with v-model support. CFile Ready
Form No Reload: Calls preventDefault for you, with opt-in native validation. CForm Ready
Input Auto-ID: Auto-links to labels via useId() and full attributes inheritance. CInput Ready
Label Context-Aware: Simple, accessible binding for any input. CLabel Ready
Radio Selection: Minimalist wrapper for native radio input. CRadio Ready
RadioGroup Group: Shared v-model and name across radios inside a fieldset. CRadioGroup Ready
Select Native Wrapper: Single and multiple selection support. CSelect Ready
SupportingText Field Text: Hint or error text wired to its input via aria-describedby. CSupportingText Ready
Textarea Flexible Binding: Auto-ID and reactive model management. CTextarea Ready

Component reference →

Guides

Related Packages

@vuetify/v0

Headless, unstyled, accessible Vue 3 primitives and composables — a meta UI fram...

711,847 739
@monolithrobotics/isoline

Headless, unstyled Vue 3 UI primitives. Behaviour and accessibility only — you b...

1,003 0
reka-ui

Vue port for Radix UI Primitives.

55,470,858 6,910
radix-vue

Vue port for Radix UI Primitives.

34,467,231 6,910
akar

Vue UI primitives components

8,813 0

Version History

Version Released Vue License
2.12.1 ^3.5.0 MIT
2.12.0 ^3.5.0 MIT
2.11.0 ^3.5.0 MIT
2.10.1 ^3.5.0 MIT
2.10.0 ^3.5.0 MIT
Pre-releases (3)
Version Released Vue License
1.0.0-beta.4 ^3.5.29
1.0.0-beta.3 ^3.5.29
1.0.0-beta.2 ^3.5.29