futility-ui
| Install | |
|---|---|
npm install futility-ui |
|
| Latest Version: | 0.7.2 |
| Vue: | 3 |
| License: | MPL-2.0 |
| Last Updated: | Oct 16, 2026 |
| Links: | GitHub · npm |
Futility UI
Futility UI is a Vue 3 component library inspired by the Flowbite design language. It focuses on practical, ready-to-use UI building blocks with a consistent visual style and straightforward integration.
Why Futility UI
- Vue 3 components with a consistent look and feel
- Storybook documentation with interactive examples
- Multiple style distribution options for different integration strategies
- A pragmatic component set built from real project needs
Installation
Install the library:
pnpm add futility-ui
Styles
Choose how you want to include styles in your project.
Import the stylesheet from JavaScript:
import 'futility-ui/styles.tailwind.css'; // or styles.base.css
Or import it from your main CSS file:
@import 'futility-ui/styles.tailwind.css'; /* or styles.base.css */
Available stylesheets:
styles.base.cssincludes only Futility UI component stylesstyles.tailwind.cssincludes component styles together with Tailwind CSS utilities
Usage
You can register the library globally:
import { createApp } from 'vue';
import FutilityUI from 'futility-ui';
createApp(App)
.use(FutilityUI)
.mount('#app')
;
Or import only the components you need:
import { FButton, FInput } from 'futility-ui';
For more details about stylesheet selection and integration options, see the Usage page in the documentation.
Roadmap
- Icons
- Loader
- Buttons
- Text button
- Switch
- Checkbox
- Input
- Widgets group (A component that visually merges widgets without spacing, such as an input field immediately followed by a button.)
- Radio button
- Input Autocomplete (with loading options)
- Ability to group options when needed
- Select
- Custom dropdown for desktop screen and native for mobile [???]
- Tooltip
- Form row (A component that renders a form row with a label, widget, help text, and error text.)
- Control label (A component that adds a label for widgets such as checkbox, radio button, etc.)
- Generic Form
- utils for make meta from DRF metadata
- Dropdown
- Textarea
- Modal
- Tabs
- Number picker
- Header pannel
<- you are here - MultiSelect
- Tag Select
- Tree Editor
- FileSelect
- FileSelectArea
- Paginator
- Popover
- [FGenericForm] number range (from - to, inputs)
- [FGenericForm] date range
- etc.
Refactor
- Split styles into base styles and theme-specific styles
- Add support for scaling icons inside buttons
- Update button focus styles (especially for the dark theme)
- Sizes for checkbox, radiobutton and switch
Extended
- Integrate Tailwind configuration and theming (seems implemented, but needs verification)
- Tag panel
- Multi-select autocomplete
- Select with custom dropdown (search, loading, etc...)
- Select Autocomplete (likely not needed if Input Autocomplete exists)
- Custom DatePicker [???]
- Custom TimePicker [???]
- Custom MultiSelect with filters
Dev
- Storybook on GitHub Pages
- npm publishing
- Web interface for customizing styles
Oh great, another UI library.
You might be wondering: why the heck do we need yet another UI library? The short answer is: just because.
This library isn`t necessarily better than others. It has a much smaller community, it evolves more slowly, and it doesn`t really have any unique killer feature. It exists simply because none of the existing options fully work for me. Either there aren`t enough components, or they`re incredibly complicated, or not truly native to Vue, or they`re paid, or… they just look ugly. So, I decided to build my own.
This library grew out of components I use at work. And my colleagues are probably asking themselves: why bother extracting the UI into a separate repo? Here are a few reasons:
-
I don`t like monorepos.
-
It`s easier to isolate components, code style, and dependencies.
-
Components are simpler to organize and structure.
-
Writing documentation is easier when you build components outside the context of the main project.
-
A separate repo makes it simpler to set up tests, build processes, and all that stuff. (Yeah, yeah - I know there are no tests yet, but eventually I`ll add some, at least out of curiosity.)
-
You can improve the UI independently from the main project.
-
It helps keep the main project`s codebase cleaner - less clutter unrelated to business logic.
-
Reusability? That`s a cliche argument, and it`s not really the main goal here (But who knows - maybe I`ll use this library in other projects too. I already have a few ideas).
-
An attempt to turn legacy code into a documented library that anyone can use.
Related Packages
The design system behind Hikarinagi: Vue 3 components built on Tailwind CSS v4.
main theme file for manguito components library. Other MCL components will need...
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 0.7.2 | ^3.5.13 | MPL-2.0 | |
| 0.7.1 | ^3.5.13 | MPL-2.0 | |
| 0.7.0 | ^3.5.13 | MPL-2.0 | |
| 0.6.6 | ^3.5.13 | MPL-2.0 | |
| 0.6.5 | ^3.5.13 | MPL-2.0 | |
| 0.6.4 | ^3.5.13 | MPL-2.0 | |
| 0.6.3 | ^3.5.13 | MPL-2.0 | |
| 0.6.2 | ^3.5.13 | MPL-2.0 | |
| 0.6.1 | ^3.5.13 | MPL-2.0 | |
| 0.6.0 | ^3.5.13 | MPL-2.0 | |
| 0.5.1 | ^3.5.13 | MPL-2.0 | |
| 0.5.0 | ^3.5.13 | MPL-2.0 | |
| 0.4.2 | ^3.5.13 | MPL-2.0 | |
| 0.4.1 | ^3.5.13 | MPL-2.0 | |
| 0.4.0 | ^3.5.13 | MPL-2.0 | |
| 0.3.8 | ^3.5.13 | MPL-2.0 | |
| 0.3.7 | ^3.5.13 | MPL-2.0 | |
| 0.3.6 | ^3.5.13 | MPL-2.0 | |
| 0.3.5 | ^3.5.13 | MPL-2.0 | |
| 0.3.4 | ^3.5.13 | MPL-2.0 | |
| 0.3.3 | ^3.5.13 | MPL-2.0 | |
| 0.3.2 | ^3.5.13 | MPL-2.0 | |
| 0.3.1 | ^3.5.13 | MPL-2.0 | |
| 0.3.0 | ^3.5.13 | LGPL-3.0 | |
| 0.2.5 | ^3.5.13 | LGPL-3.0 | |
| 0.2.4 | ^3.5.13 | LGPL-3.0 | |
| 0.2.3 | ^3.5.13 | LGPL-3.0 | |
| 0.2.2 | ^3.5.13 | LGPL-3.0 | |
| 0.2.1 | ^3.5.13 | LGPL-3.0 | |
| 0.2.0 | ^3.5.13 | LGPL-3.0 |
Showing the latest 30 of 34. See every release on npm
Pre-releases (33)
| Version | Released | Vue | License |
|---|---|---|---|
| 0.7.0-next.21 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.20 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.19 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.18 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.17 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.16 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.15 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.14 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.13 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.12 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.11 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.10 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.9 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.8 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.7 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.6 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.5 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.4 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.3 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.2 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.1 | ^3.5.13 | MPL-2.0 | |
| 0.7.0-next.0 | ^3.5.13 | MPL-2.0 | |
| 0.6.7-next.1 | ^3.5.13 | MPL-2.0 | |
| 0.6.7-next.0 | ^3.5.13 | MPL-2.0 | |
| 0.3.0-next.2 | ^3.5.13 | LGPL-3.0 | |
| 0.3.0-next.1 | ^3.5.13 | LGPL-3.0 | |
| 0.3.0-next.0 | ^3.5.13 | LGPL-3.0 | |
| 0.2.1-next.3 | ^3.5.13 | LGPL-3.0 | |
| 0.2.1-next.2 | ^3.5.13 | LGPL-3.0 | |
| 0.2.1-next.1 | ^3.5.13 | LGPL-3.0 |
Showing the latest 30 of 33. See every release on npm