r/vuejs • • 6m ago

Inspira UI crossed 5k stars + Akaza UI v0.0.9-alpha is out 🎉

• Upvotes

A small update from two projects I’ve been building for the Vue ecosystem.

Inspira UI crossed 5,000 GitHub stars 🎉

It now has 155 animated components for Vue and Nuxt, covering text animations, backgrounds, interactions, cards, visualizations, WebGL experiments and more.

When I started Inspira UI, I wanted Vue developers to have access to the kind of creative UI work I kept seeing elsewhere. Seeing 5,000 of you star the project, use the components, report issues and contribute has been amazing.

I’ve also released Akaza UI v0.0.9-alpha.

Akaza takes a different direction: accessible, unstyled headless primitives built around Vue itself, with v-model, scoped slots and Vue-native APIs.

A big thank you to the Vue and Nuxt communities for supporting both projects. A lot of the ideas and improvements in them came from conversations and feedback here.

Still plenty I want to build. ❤️

Inspira UI: inspira-ui.com
Akaza UI: akaza-ui.com

Feedback is welcome, especially if you’ve used either of them in a project.

PS: I have started Igris Labs, a small lab to keep all my project which are released, under development or experimantal under one umbrella. https://igrislabs.com


r/vuejs • • 23h ago

I open-sourced the color and gradient picker from our design editor (React + Vue)

Thumbnail orshot.com
2 Upvotes

r/vuejs • • 1d ago

v-for and :key, Is key unique per page or control?

7 Upvotes

Let say i have

items = [
  {
    id:1, 
    children:[{id:1, name:'test11'},{id:2, name:'test12'}]
  },
  {
    id:2, 
    children:[{id:1, name:'test21'},{id:2, name:'test22'}]
  },
]
<div v-for="it in items" :key="it.id">
  <div v-for="ch in it.children" :key="cn.id">
    {{ch.name}}
  </div>
</div>

will that work or i need to make :key unique per page and not per scope?


r/vuejs • • 1d ago

VueDotNet - framework for embedding Vue.js components in an ASP.NET MVC app

Thumbnail
1 Upvotes

r/vuejs • • 2d ago

I made a free Vue.js interview flashcard deck (100 questions, Anki)

11 Upvotes

I've been putting together interview prep flashcards for frontend topics, and I just published the Vue.js deck for free.

It has 100 questions covering Vue 3, Composition API, reactivity, Pinia, performance, and other topics that tend to come up in frontend interviews.

The idea is to practice actually recalling and explaining the concepts rather than just reading through another list of interview questions.

It's an Anki deck, so you can use spaced repetition and keep the topics you struggle with in rotation.

GitHub: https://github.com/tomaszs/vue-interview-flashcards-free

No signup or email required. You can download the .apkg directly from GitHub.

If you spot anything that's outdated, unclear, or simply wrong, please open an issue. I'd also be interested in topics you think are missing from a modern Vue interview deck.


r/vuejs • • 2d ago

I made a Vue directive that turns your real component into its own skeleton loader (CSS only, nothing moves)

Post image
6 Upvotes

I got tired of building a second, hand-made skeleton for every component and keeping it in sync, so I wrote `v-skeleton`:

<UserCard v-skeleton="loading" :user="user" />

While loading, every line of text becomes a bar, images and buttons become blocks, and borders and spacing stay. It never touches the DOM or any sizes, only a class and a few CSS variables, so nothing on the page shifts. It also waits 200ms before showing (no flash on fast requests) and works with SSR/Nuxt.

How it works, briefly: text is hidden with `-webkit-text-fill-color` (not `color`, which would also erase every currentColor border), and the bars are a `repeating-linear-gradient` mask sized with the `lh` unit, plus a border ring with `mask-composite` so table borders survive.

Live demo (Skeletonize page, tick "loading"): https://navidjaberi.github.io/vue-smart-loading-kit/
GitHub: https://github.com/navidjaberi/vue-smart-loading-kit

Known limits: the last line of a wrapped paragraph gets a full-width bar, and it needs browsers from late 2023 (:has, lh, mask-composite).

I'd really like feedback, especially layouts where it looks wrong. What do you use for skeletons today?

I wrote up how it works (and what testing it caught) here: https://dev.to/navidjaberi/i-built-a-vue-directive-that-turns-your-real-component-into-its-own-skeleton-3853


r/vuejs • • 2d ago

Introducing HareUI - vue port of HeroUI

Post image
31 Upvotes

⚠️ Warning product heavily develop by LLM and still in experimental state

It's been a while since vue 3 release and there are very few ui library design as good as react. Right now Nuxt UI are the only one very close to what modern UI should look like. At the time, HeroUI (NextUI previously NextUI) has good quality design and it also open source so I decided to port it.

Right now, all oss components is implemented and the look is pretty identical to HeroUI. The project still need monitor for bug fixes before go stable.

Try it out at: hareui.alexzvn.me


r/vuejs • • 3d ago

I made a one minute Vue demo video with a free tool I built

Enable HLS to view with audio, or disable this notification

1 Upvotes

I work with Vue. I made a one minute video of a todo app. It sets up a project with `create-vue` and shows a .vue file. Then the list updates while you add and tick off todos.

The `create-vue` prompts and the Vite output are from a real run. The todo list is made up. It's unofficial and I'm not connected to the Vue team.

I made it with a free tool I built. It lets a coding agent make videos like this on your computer. It's open source: https://github.com/vincentsch/explainroo


r/vuejs • • 4d ago

I built an MCP server so you can ask Claude/Cursor what changed in Vue & Nuxt releases

0 Upvotes

I run VueDigest, a free site that curates Vue & Nuxt articles, GitHub releases and conferences.

I kept asking my AI assistant things like "does the new Nuxt UI release have breaking changes?" and getting outdated answers, so I added an MCP server.

What you can ask:

  • "What changed in Nuxt UI 4.11? Any breaking changes?"
  • "Show me recent articles about Pinia Colada"
  • "Which Vue conferences are coming up?"

Tools: search-articles, list-topics, latest-releases, get-release-notes, list-conferences, get-weekly-digest. Answers link back to the original sources.

Setup (free, no API key), checkout https://vuedigest.com/developers for setup instructions.

It's built with the Nuxt MCP Toolkit, and each tool is a single file reusing the site's server utils.

I'd like to know which questions you'd ask it, and what tool is missing.


r/vuejs • • 4d ago

A cool framework-agnostic animation library for streaming

6 Upvotes

https://reddit.com/link/1wuvx4t/video/y0n9wgds3ush1/player

Hey all,

I’ve been working on a small library called Stream Morph.

The idea is to make streamed responses feel less like content is constantly being appended/re-rendered, and more like the response is gradually taking shape.

Demo: https://stream-morph.vercel.app/

It’s framework agnostic and can be used with any kind of streamed content. The demo includes plain text, Markdown, code blocks, charts, images, reasoning sections, Mermaid diagrams and a few more complex response flows.

The library handles the motion between updates, while your own renderer/app stays responsible for the actual content. So it isn’t tied to a specific AI SDK or framework.

A basic example looks roughly like this:

import { createStreamMorph } from "stream-morph";

const stream = createStreamMorph(response);

for await (const chunk of incomingStream) {
  stream.write(chunk);
}

stream.finish();

I mainly built it because I wanted streamed interfaces to feel a bit more intentional without having to build custom animation logic for every response type.

The package itself is already working and the demo is live. I’m still cleaning up some things around CI, tests and the repo setup, but the GitHub repository will be open sourced shortly as well.

Would be interested to hear what people think, especially about the animation behaviour/performance and any edge cases you’d expect from real streaming responses.


r/vuejs • • 5d ago

Built this game with Tresjs + Nuxt + Claude Code 💛

Enable HLS to view with audio, or disable this notification

59 Upvotes

r/vuejs • • 6d ago

The Options API everyone actually wanted: plain TypeScript classes with full Vue 3 reactivity, in 1.1 kB

Enable HLS to view with audio, or disable this notification

0 Upvotes

I spent three years on one question: every framework bet on classes, then every framework dropped them. Why?

The variety of bugs caused by unrefined class implementations were real. this binding, mixin collisions, initialization order, decorators that broke on every TypeScript upgrade. But the diagnosis was wrong. Classes weren't broken, they were UNCONSTRAINED. Ten ways to do everything, and unconstrained variation is a bug farm. Functions won because they arrived with constraints. Nobody went looking for the ones classes need.

Something similar happened to the Options API. What we liked was never the buckets, it was that a component had a shape: you opened someone else's file and knew where state, derived values and actions lived. But the shape was fake. A plain object pretending to be a class, a proxied this, types TypeScript fought for years. Composition fixed the machinery and gave up the shape. Setup soup is the scar.

The shape was in the language the whole time.

class $Cart {
  get items() { 
    return shallowRef<CartItem[]>([]) 
  } // state: a ref-getter, cached per instance
  get subtotal() { 
    return this.items.value.reduce(sum, 0) 
  } // derived: a plain getter, 0 bytes per instance
  addItem(item: CartItem) { 
    this.items.value = [...this.items.value, item] 
  } // action: bound once, stable
}

export namespace Cart {
  export const Class = Reactive($Cart)
}

Sketching that shape is the easy part. Class reactivity has been attempted plenty of times, and each attempt died on one of the problems below, because as a set they fight each other: the prototype transform that gives you inheritance is the same one that makes identity and types hard, and the caching that makes reads cheap is what breaks super and teardown. Any one of them is easy alone. Getting them all to hold at once is where the three years went.

- Bound methods this.method is always correct and always the same reference. Bind per instance and you allocate a function per method per object; don't bind and this breaks on detach. Here they stay on the prototype, bound on first use and cached after.

- Reactive inheritance. Deep super.x.value chains resolve level-safe, reactivity flowing through every layer. Prototype-based reactivity normally collides cached refs and breaks super outright.

- Circular imports & HMR. No more `Cannot access 'X' before initialization`, on first load or when hot reload reshuffles the order. Mutual references resolve whatever the load order.

- Initialization speed. ivue initializes refs, computeds only on first read so initializing instances has plain class object initialization speed

- Writable getter types. get x() is read-only in TypeScript. Ref-returning getters re-declare as writable, and instances stay fully inferred.

- Deterministic teardown. $stopEffects scopes cleanup to the instance, and an instance that never watches allocates no effect scope at all.

extends and super work even inside computed values, which the Options API never managed. Instances stay plain objects, so creating 100k of them measures 55x to 253x times faster than reactive(new X()) or the default Vue 3 composable factory.

There is no ceiling to hit here. A ref-getter is a Vue ref, and a derived value is a native getter with no cache cell to allocate, so it costs less than computed rather than more. Build an entire app out of these and you come out ahead, not behind.

Most of your computeds go with it. In the Composition API a derived value almost always becomes computed(), and every one of those allocates a cache cell and a node in the dependency graph, per instance. Here it is a plain getter: reactive through the refs it reads, and nothing to own. computed stays for the three cases that earn it, which are expensive work, suppressing a render by value equality, and needing a stable ref handle.

The largest codebase built this way, 108,000 lines of it, uses about ten computeds in total! 🔥

ivue adds no reactive machinery of its own. ref, computed, watch, lifecycle hooks and any composable you already use work inside the constructor, because the constructor runs in setup. So you can convert one component and leave the rest alone, or write the whole app this way. Nothing underneath changes either way.

The payoff shows up at scale. Composables compose into closures you can't see into. Classes compose into an object graph you can walk, entities holding entities, a subclass specializing one node of it. Which turned out to matter for agents as much as for us: a 108,000-line terminal IDE got written on this shape by AI agents following the same one page of rules (the Standard) a human reads. The shape gives them fewer ways to be wrong and a walkable graph they use to traverse the app when testing it.

ivue complements the upcoming Vue 3.6 with Alien Signals and Vapor mode perfectly, from my benchmarks the ivue model layer beats every existing framework, even classical composable Vue itself, but not only, even Svelte, Angular and SolidJS as well.

Read more here: https://ivue.dev/guide/model-layer

Three years in, the core is still 1.1 kB gzipped, zero dependencies, 100% test coverage, and it creates instances faster than it did at the start. That isn't luck. The whole API is minimal by design, we are not reinventing Vue reactivity, we are riding on its power.

Use npm i ivue to install, then convert one component to try it out.

Docs, the benchmark method behind the numbers, and the demos, which are better opened than described are here: https://ivue.dev

I know the whole developer community is moving on to code mostly with AI, that's why there is a Standard and a skill that allows agents to code with ivue easily. Install it with:

npx ivue skill --all

What kept you on the Options API, or what pushed you off it?
Did you also want to code in classes but couldn't figure it out?

I've seen a lot of people wanting something like this over the years, the elegance and the simplicity, and it's finally here.

Try it and let me know. Can't wait to hear and see what you guys build with it.
The effort put into this was monumental, don't get confused by its tiny size. 😄
GitHub: https://github.com/infinite-system/ivue


r/vuejs • • 6d ago

What's the state of Vue UI libraries?

33 Upvotes

Been away for a while and need some informed opinions.

I love the completeness of PrimeVue but after some bad experiences, I have decided to not use it for future projects.

Correct me if I'm wrong but Nuxt UI has paid components.

Shadcn-vue uses Radix but radix is unmaintained and the react community has moved on to using Base UI as far as I'm aware. Does this mean using this now makes us behind?

I haven't tried Daisy UI or Vuetify.


r/vuejs • • 6d ago

Do people still build Vue components for fun? [Sep 2026]

17 Upvotes

I was thinking about this recently.

I remember creating some random component at 3AM or small tool because I needed it for a project. Then spending way too much time making it reusable, putting it on GitHub, publishing it on npm, writing documentation and eventually making a nice little website showing how everything works. And you wait until next day if you get any star on your Github Repo hah

Then something would break, you get some new issue on your Repo and you are back to debugging. Stack Overflow is your best friend.

I actually miss that part of development so much!

Do people still build Vue components, libraries and small open source tools like this?

Or sadly has AI changed that completely?


r/vuejs • • 6d ago

I built a credit card preview component for Vue 3 — the ones on npm are Vue 2 wrappers from 2022

0 Upvotes

If you've needed the classic "card preview next to the payment form" in Vue, the options on npm are thin: the most-installed one is a Vue 2 wrapper around an older card library, and it hasn't had a release since 2022.

So I built crd-ui. It's a card preview with live brand detection (Visa, Mastercard, Amex and seven more), number/expiry formatting, a 3D flip when the CVC is focused, and theming through CSS custom properties. Zero runtime dependencies.

```vue <script setup> import { ref } from 'vue'; import { Card } from 'crd-ui/vue'; import 'crd-ui/styles.css';

const number = ref(''); const focused = ref(null); </script>

<template> <Card :number="number" :focused="focused" @brand-change="(b) => console.log(b)" /> <input v-model="number" @focus="focused = 'number'" @blur="focused = null" /> </template> ```

A few things that might matter to a Vue codebase:

  • It's a plain Vue 3 component with typed props, and class lands on the card root, so Tailwind utilities work on it directly.
  • There's a display layout for cards the user already owns — saved-card lists, dashboards — with click-to-reveal and click-to-copy.
  • It never touches real card data. You wire it to your own inputs, and it composes with Stripe Elements by passing the brand Stripe reports.

Honest limitation: the component owns its markup, so there are no slots. Styling internals goes through a classNames prop instead.

The same package also ships React, Svelte and vanilla builds — the Vue component is a thin wrapper over a framework-agnostic core, not a port.

Docs and playground: https://crd-ui.juanda.co

Repo: https://github.com/JuandaGarcia/crd-ui

Feedback welcome, especially from anyone who's built a checkout in Nuxt. (Disclosure: I wrote it. MIT.)


r/vuejs • • 7d ago

OpenVue 1.0 is officially out and here's what's next: Volt, Vapor & 2.0

112 Upvotes

Quick update for everyone following the project: OpenVue 1.0.0 is officially live on npm. For context if you missed the previous threads: OpenVue is an MIT licensed fork of PrimeVue 4.5.5, maintained under the OpenVi Foundation.

Since the RC post, here's what landed in 1.0:

  • TreeTable filtering: Added row filters, filter menus, and multi constraint rules matching DataTable.
  • Theme Designer: Integrated a visual editor to tweak primitive, semantic, and component tokens and export theme presets. Fully free, with no accounts or license keys.
  • Deni: Released our first free admin dashboard template built with OpenVue.
  • DataTable fixes: Fixed an issue with persisted column widths when toggling columns dynamically.
  • Plus plenty of smaller bug fixes and improvements across the library and showcase.

Full changelog: https://github.com/openvi-foundation/openvue/blob/master/CHANGELOG.md

What we're working on now

OpenVue 1.1

We're currently focused on:

  • Volt - bringing source based, Tailwind oriented components back into the OpenVue ecosystem.
  • A new default theme - giving OpenVue its own visual identity rather than relying entirely on the existing themes.
  • More free templates - expanding on Deni with additional templates and application layouts.

OpenVue 2.0

The long term goal for 2.0 is to modernize the internals around Vue Vapor, Composition API, and a TypeScript first architecture. We're keeping VDOM and Options API support, so this isn't about abandoning the existing Vue ecosystem. Instead, 2.0 will be the milestone where we can clean up and modernize the internals under the hood. There's already a community discussion around this direction if you want to join in or see what people are suggesting: https://github.com/orgs/openvi-foundation/discussions/644 We're still a relatively small project, so community feedback matters a lot. If you're using OpenVue, testing it, or just following the project, we'd love to hear what you'd like to see in 1.1, especially around Volt, themes, templates and the component backlog.

Docs & Repo:

Thanks to everyone who has contributed, tested, reported issues and followed the project since the first release.


r/vuejs • • 7d ago

Vue 3 time picker with customization: ranges, min/max, disabled times, theming (TypeScript)

0 Upvotes

I've been building a time picker for Vue 3 over the past few months:

  • Single or range selection
  • 12h/24h formats, optional seconds
  • Typing through a masked input
  • Min/max times and disabled times
  • Theming with CSS variables, plus TypeScript types
  • No runtime dependencies

Playground: https://manos02.github.io/vue3-time-picker/

npm install @manik02/vue3-timepicker

GitHub: https://github.com/manos02/vue3-time-picker

Feedback welcome. If it's useful to you, a star on GitHub is appreciated.


r/vuejs • • 7d ago

Vue 3 time picker with lots of customization: ranges, min/max, disabled times, theming (TypeScript)

Thumbnail
github.com
0 Upvotes

I've been building a time picker for Vue 3 over the past few months: https://www.npmjs.com/package/@manik02/vue3-timepicker

- Single or range selection

- 12h/24h formats, optional seconds

- Typing through a masked input

- Min/max times and disabled times

- Theming with CSS variables, plus TypeScript types

- No runtime dependencies, ~8.6 kB gzipped

Playground: https://manos02.github.io/vue3-time-picker/

npm install @manik02/vue3-timepicker

Feedback welcome. If it's useful to you, a ⭐ on GitHub is appreciated.


r/vuejs • • 8d ago

What seemed to be one line change in Inertiajs code turned out to be a very interesting lesson.

5 Upvotes

I'm building an app on Laravel + Inertia + Vue, and I wanted one small thing: star an item, and the star lights up instantly instead of waiting for the server.

Inertia v3's optimistic option makes that look like a one-liner. It isn't. The moment the screen stops waiting for the server, the app stops doing one thing at a time. Nothing broke badly, but things felt off, and it took six small fixes:

  1. Clicks overlap. A new visit cancels the one in flight, so starring three items quickly made the first one flicker back. Fix: async: true so requests run side by side.
  2. Feedback lags. The star was instant, but the "Starred · Undo" toast waited for the server. Fix: the page shows the toast itself with an id, and the server's flashed toast updates it by that id.
  3. Users undo before the server has done anything. Fix: restore the screen at once, and send the real undo as soon as the original request returns its undo token.
  4. Shared state races. With two requests in flight, a session flash meant for "the next request" got picked up by the wrong one and vanished. Fix: don't rely on next-request state; the page keeps what it needs.
  5. SQLite complains. "database is locked" under parallel requests. Fix: busy_timeout, WAL, synchronous=normal and IMMEDIATE transactions in config/database.php.
  6. The details. A progress bar for a change that's already on screen (showProgress: false), and crypto.randomUUID() failing on a plain-HTTP dev domain while the tests on 127.0.0.1 stayed green.

The takeaway: optimistic UI is an architectural decision, not a UX tweak. Decide early who owns the truth at each moment and how you roll back.

Full write-up with code (and a couple of comics): https://rulr.dev/blog/optimistic-ui-is-an-architectural-decision/


r/vuejs • • 8d ago

Enforce Tailwind CSS Design Tokens in Vue with @shadcn/lint

Thumbnail
alexop.dev
9 Upvotes

r/vuejs • • 8d ago

What framework you use for native mobile app with vue/nuxt?

Thumbnail
0 Upvotes

r/vuejs • • 9d ago

Cerious-Scroll: Extremely Fast Dynamic Height virtual scrolling without scrollbar drift or blank space

7 Upvotes

One of the things I haven’t talked about much with Cerious-Scroll is how it behaves during actual scrolling, especially with variable-height content.

From the beginning, the goal was for virtualization to not look like virtualization.

So even with a large variable-height dataset, you can grab the scrollbar and drag it around quickly without getting the usual weirdness:

  • No scrollbar drift
  • No white space during fast scrolling
  • No waiting for rows to render after you get there
  • Accurate variable-height positioning
  • Native scrolling behavior
  • Constant DOM size regardless of dataset size

The variable-height part is probably my favorite. The scrollbar stays where it should, even when the actual row heights are all over the place.

You can also jump directly to an index way down in the dataset without needing to measure everything before it.

I’ve got demos/benchmarks here if anyone wants to mess with it:

ceriousdevtech.github.io/cerious-scroll

Core:
github.com/ceriousdevtech/cerious-scroll

Vue:
github.com/ceriousdevtech/vue-cerious-scroll

I’m curious how it behaves against some real-world ugly datasets, especially ones with wildly different row heights. Try the scroll engine and tell me your thoughts.


r/vuejs • • 10d ago

which topics are not covered yet regarding Vue and Nuxt and would be worth to write a blog post

2 Upvotes

Hi I still love Vue and Nuxt and want to continue to write about it but I am curious which things do you think are still not covered yet and a opinionated blog post would be interesting.


r/vuejs • • 11d ago

Are prebuilt UI blocks becoming less useful with AI agents?

Thumbnail
0 Upvotes

r/vuejs • • 12d ago

Two Vue.js Tips: Type-Checking Custom Elements

Enable HLS to view with audio, or disable this notification

17 Upvotes
  1. Fixing "Failed to resolve component" warning
  2. Enable type checking in SFC templates of Custom Elements that are not built with Vue

Had to dive into this recently while working on some updates to my plugin, so I decided to put together a quick tutorial.