Skip to content

posva/pinia-colada

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9c46a44 Β· May 23, 2025
May 21, 2025
Mar 3, 2025
May 12, 2025
May 23, 2025
May 22, 2025
May 21, 2025
Apr 15, 2025
May 23, 2025
May 21, 2025
May 23, 2025
May 22, 2025
May 14, 2025
Sep 11, 2024
Sep 27, 2024
Jan 29, 2024
Feb 3, 2024
Oct 30, 2024
May 22, 2025
Dec 20, 2023
Oct 30, 2024
May 8, 2025
Mar 3, 2025
May 22, 2025
May 21, 2025
Apr 8, 2025
Mar 3, 2025
Mar 18, 2025
Mar 3, 2025
Oct 31, 2024
Mar 3, 2025
Mar 3, 2025
Oct 30, 2024
Mar 3, 2025

Repository files navigation

Pinia Colada logo


npm package build status


Pinia Colada

The missing data fetching library for Pinia

Pinia Colada makes data fetching in Vue applications a breeze. It's built on top of Pinia and takes away all of the complexity and boilerplate that comes with fetching data. It's fully typed and tree-shakeable, and it's built with the same principles as Pinia and Vue: It's approachable, flexible, powerful and can be progressively adopted.

Tip

This is a feature-complete version of the exercises from Mastering Pinia. If you would like to learn how it started and become an expert in Vue state management, check it out!

Mastering Pinia banner

Features

  • ⚑️ Automatic caching: Smart client-side caching with request deduplication
  • πŸ—„οΈ Async State: Handle any async state
  • πŸ”Œ Plugins: Powerful plugin system
  • ✨ Optimistic Updates: Optimistic updates with ease
  • πŸ’‘ Sensible defaults: Sane defaults with full customization
  • 🧩 Out-of-the box plugins: A set of composable functions to handle data fetching
  • πŸ“š Typescript Support: Fully typed with Typescript
  • πŸ’¨ Small Bundle Size: A baseline of ~2kb and fully tree-shakeable
  • πŸ“¦ Zero Dependencies: No dependencies other than Pinia
  • βš™οΈ SSR: Out of the box server-side rendering support

Note

Pinia Colada is always trying to improve and evolve. Feedback regarding new and existing options and features is very welcome! Contribution to documentation, issues, and pull requests are highly appreciated.

Installation

npm install pinia @pinia/colada

Install the plugins for the features you need:

import { createPinia } from 'pinia'
import { PiniaColada } from '@pinia/colada'

app.use(createPinia())
// install after pinia
app.use(PiniaColada, {
  // optional options
})

Usage

The core of Pinia Colada is the useQuery and useMutation functions. They are used to read data and write it respectively. Here's a simple example:

<script lang="ts" setup>
import { useRoute } from 'vue-router'
import { useMutation, useQuery, useQueryCache } from '@pinia/colada'
import { patchContact, getContactById } from '~/api/contacts'

const route = useRoute()
const queryCache = useQueryCache()

const { data: contact, isPending } = useQuery({
  // unique key for the query in the cache
  key: () => ['contacts', route.params.id],
  query: () => getContactById(route.params.id),
})

const { mutate: updateContact, isLoading } = useMutation({
  mutation: patchContact,
  async onSettled({ id }) {
    // invalidate the query to refetch the data of the query above
    await queryCache.invalidateQueries({ key: ['contacts', id], exact: true })
  },
})
</script>

<template>
  <section>
    <p v-if="isPending">
      Loading...
    </p>
    <ContactCard
      v-else
      :key="contact.id"
      :contact="contact"
      :is-updating="isLoading"
      @update:contact="updateContact"
    />
  </section>
</template>

Learn more about the core concepts and how to use them in the documentation.

License

MIT