pikax
vue-composable
TypeScript

Vue composition-api composable components. i18n, validation, pagination, fetch, etc. +50 different composables

Last updated Jul 8, 2026
1.2k
Stars
64
Forks
24
Issues
0
Stars/day
Attention Score
33
Language breakdown
TypeScript 94.0%
JavaScript 6.0%
โ–ธ Files click to expand
README

vue-composable

vue-composable logo

CircleCI Coverage Status npm version bundle size

Out-of-the-box ready to use composables

  • ๐ŸŒด TreeShakable
  • ๐Ÿง™โ€โ™‚๏ธ Fully Typescript
  • ๐Ÿ’š Vue 3 and 2 support
  • ๐Ÿ”จ Vue Devtools support

Introduction

This library aim is to be one stop shop for many real-world composable functions, with aggressive tree-shaking to keep it light on your end code.

Installing

# @vue/composition-api

install with yarn

yarn add @vue/composition-api vue-composable

install with npm

npm install @vue/composition-api vue-composable

vue 3

install with yarn

yarn add vue-composable

install with npm

npm install vue-composable

Documentation

Check our documentation

Composable

Event

  • Event - Attach event listener to a DOM element
  • Mouse Move - Attach mousemove listener to a DOM element
  • Resize - Attach resize listener to a DOM element
  • Scroll - Attach scroll listener to a DOM element
  • onOutsidePress - Execute callback when click is outside of element

Dom

Date

  • useNow : Return reactive custom timer with specified refresh rate
  • useDateNow : Returns reactive Date.now() with custom refresh rate
  • usePerformanceNow : Returns reactive performance.now() with custom refresh rate

Format

  • format - Reactive string format
  • path - Retrieve object value based on string path

Breakpoint

MISC

Storage

  • WebStorage - Reactive access to Storage API, useLocalStorage and useSessionStorage use this
  • storage - uses localStorage or on safari private it uses sessionStorage
  • localStorage - Reactive access to a localStorage
  • sessionStorage - Reactive access to a sessionStorage

Pagination

Validation

i18n

  • i18n - Simple i18n implementation with API inspired by vue-i18n

Intl

Promise

Meta

  • Title - reactive document.title

State

  • Timeline - Tracks variable history
  • Undo - Tracks variable history, to allow undo and redo
  • valueSync - syncs variables value, across multiple refs

Web

External

New packages needed

Information

This is a monorepo project, please check packages

Devtools

There's some experimental devtools support starting from 1.0.0-beta.6, only available for vue-next and devtools beta 6.

Install plugin

To use devtools you need to install the plugin first:

import { createApp } from "vue";
import { VueComposableDevtools } from "vue-composable";
import App from "./App.vue";

const app = createApp(App); app.use(VueComposableDevtools); // or app.use(VueComposableDevtools, { id: "vue-composable", label: "devtool composables" });

app.mount("#app");

Component State

To add properties to the component inspector tab ComponentState

const bar = "bar";
useDevtoolsComponentState(
  {
    bar
  },
  {
    type: "custom composable" // change group
  }
);

const baz = () => "baz"; useDevtoolsComponentState({ baz }); // no duplicates added by default useDevtoolsComponentState({ baz });

const the = 42; useDevtoolsComponentState({ the }); // to allow multiple same key useDevtoolsComponentState({ the }, { duplicate: true });

// use a devtools api list directly interface StateBase { key: string; value: any; editable: boolean; objectType?: "ref" | "reactive" | "computed" | "other"; raw?: string; type?: string; } useDevtoolsComponentState([ { key: "_bar", type: "direct", value: "bar", editable: true }, { key: "_baz", type: "direct", value: "baz", editable: false } ]);

// raw change useDevtoolsComponentState((payload, ctx) => { payload.state.push( ...[ { key: "_bar", type: "raw", value: "bar", editable: true }, { key: "_baz", type: "raw", value: "baz", editable: false } ] ); });

Timeline events

To add timeline events:

const id = "vue-composable";
const label = "Test events";
const color = 0x92a2bf;

const { addEvent, pushEvent } = useDevtoolsTimelineLayer( id, description, color );

// adds event to a specific point in the timeline addEvent({ time: Date.now(), data: { // data object }, meta: { // meta object } });

// adds event with time: Date.now() pushEvent({ data: { // data object }, meta: { // meta object } });

Inspector

Allows to create a new inspector for your data.

I'm still experimenting on how to expose this API on a composable, this will likely to change in the future, suggestions are welcome.
useDevtoolsInspector(
  {
    id: "vue-composable",
    label: "test vue-composable"
  },
  // list of nodes, this can be reactive
  [
    {
      id: "test",
      label: "test - vue-composable",
      depth: 0,
      state: {
        composable: [
          {
            editable: false,
            key: "count",
            objectType: "Ref",
            type: "setup",
            value: myRefValue
          }
        ]
      }
    }
  ]
);

Typescript

Typescript@3.x is not supported, the supported version can be checked on package.json, usually is the latest version or the same major as vue-3

Contributing

You can contribute raising issues and by helping out with code.

Tests and Documentation are the most important things for me, because good documentation is really useful!

I really appreciate some tweaks or changes on how the documentation is displayed and how to make it easier to read.

Twitter: @pikax_dev

Build

# install packages
yarn

build and test for v2

yarn build --version=2 yarn test:vue2

build and test for v3

yarn build yarn test

New composable

  • Fork it!
  • Create your feature branch: git checkout -b feat/new-composable
  • Commit your changes: git commit -am 'feat(composable): add a new composable'
  • Push to the branch: git push origin feat/new-composable
  • Submit a pull request

License

MIT

[now]: https://pikax.me/vue-composable/composable/date/now [date-now]: https://pikax.me/vue-composable/composable/date/dateNow [performance-now]: https://pikax.me/vue-composable/composable/date/performanceNow [pagination]: https://pikax.me/vue-composable/composable/pagination/pagination [array-pagination]: https://pikax.me/vue-composable/composable/pagination/arrayPagination [promise]: https://pikax.me/vue-composable/composable/promise/promise [retry]: https://pikax.me/vue-composable/composable/promise/retry [cancellable-promise]: https://pikax.me/vue-composable/composable/promise/cancellablePromise [debounce]: https://github.com/pikax/vue-composable

ยฉ 2026 GitRepoTrend ยท pikax/vue-composable ยท Updated daily from GitHub