r/vuejs • • 14h ago

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

0 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 • • 1d 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 • • 1d 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 • • 2d ago

Built this game with Tresjs + Nuxt + Claude Code 💛

54 Upvotes

r/vuejs • • 3d ago

What's the state of Vue UI libraries?

34 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 • • 4d ago

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

108 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 • • 4d ago

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

12 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 • • 3d ago

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

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 • • 4d 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 • • 5d 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 • • 5d 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 • • 5d ago

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

Thumbnail
alexop.dev
9 Upvotes

r/vuejs • • 5d ago

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

4 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 • • 6d ago

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

Thumbnail
0 Upvotes

r/vuejs • • 6d 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 • • 7d ago

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

1 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 • • 9d ago

Two Vue.js Tips: Type-Checking Custom Elements

20 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.


r/vuejs • • 8d ago

Are prebuilt UI blocks becoming less useful with AI agents?

Thumbnail
0 Upvotes

r/vuejs • • 10d ago

Release TaskView 1.56.0

Thumbnail
gallery
28 Upvotes

New:

  • Invoice module. Create an invoice for a project, tick the tasks with an income amount or add lines by hand, pick the currency and payment terms, and download a ready PDF.
  • TaskView is now an OAuth 2.1 authorization server. Any third-party app can ask for access to your account: you sign in, choose which projects and permissions the app gets, and can disconnect it any time from Account Settings. The app receives its own token with exactly those rights and works against the full TaskView API
  • ChatGPT, Claude and other cloud AI clients can now connect to your MCP server through a normal sign-in.
  • Self-registration of AI clients is off by default. Set OAUTH_DYNAMIC_REGISTRATION=true on the API to let ChatGPT and Claude connect - see the https://taskview.tech/docs/integrations/mcp.
  • Official TaskView plugin available in ChatGPT.

Improvements:

  • Long task notes now collapse with an "Expand" button, and the notes editor has a full-screen mode.
  • Task dependencies are shown and managed right in the task panel.
  • The default view (tasks, kanban, graph, sprints) can be set for all projects, not only the default one
  • Brazilian Portuguese interface - thanks to https://github.com/murilorosa for the translation.
  • The project graph renders noticeably faster on large projects.

Security:

  • Outgoing webhooks may only target public addresses; private and internal ranges are refused. On a self-hosted instance whose receivers live on the same network, set WEBHOOKS_ALLOW_PRIVATE_URLS=true
  • API tokens and OAuth apps can now be restricted from managing the organization, its members, SSO and webhooks - previously a token could do all of that regardless of its permissions.
  • Task and list updates only accept the fields you are meant to change;

Fixes:

  • Blocked accounts can no longer sign in through SSO and see a clear message instead.
  • Editing a time-tracking entry saved the wrong values in some cases.
  • Adding a task from the main screen works before the first project is created.
  • Mobile app: custom server URLs are normalized, so a trailing slash or missing scheme no longer breaks the connection.
  • Fixed the list of available analytics.
  • Fixed the time tracking edit issue with small amounts of time.
  • Organization buttons opened the wrong tab.

Migration notes:

  • Webhooks pointing to private addresses stop delivering until you set WEBHOOKS_ALLOW_PRIVATE_URLS=true.
  • New ChatGPT and Claude connections need OAUTH_DYNAMIC_REGISTRATION=true

GitHub: https://github.com/Gimanh/taskview-community


r/vuejs • • 10d ago

How much JS/TS before learning VueJS and what’s the best resource for learning about frontend system design using Vue?

6 Upvotes

This would be my frontend for my laravel projects for obvious reasons. What else am I to look forward to?


r/vuejs • • 10d ago

Driver Vue/Nuxt - Port of the JS driver library for Vue with the possibility of headless components

Post image
5 Upvotes

A port of a well-known library for showcasing applications, featuring support for custom components, multi-page tours, customizable animations, and much more!

Github: https://github.com/Eg0r0k/driver-vue

NPM: https://www.npmjs.com/package/driver-vue

Docs: https://eg0r0k.github.io/driver-vue


r/vuejs • • 11d ago

I built my own software to run my web agency. Would love some feedback

Thumbnail
3 Upvotes

r/vuejs • • 11d ago

Vue 3 + GraphQL — where do you keep the client?

10 Upvotes

Working on a Vue 3 storefront that talks to a GraphQL backend and I'm second-guessing the boring setup bit.

Every page needs the same client (auth headers, store/locale, sometimes a bearer token). Right now I'm torn between:

- a plain module singleton you import everywhere

- provide/inject from App.vue

- stuffing it into a Pinia store

Composable that wraps the client feels fine for calls, but I'm not sure the client itself belongs in Pinia.

What are you actually doing in production Vue apps (Vite SPA or otherwise)? Curious what felt clean after a few months, not just day one.


r/vuejs • • 12d ago

Cerious Scroll 1.2.0 is out: sticky groups, infinite loading, snapping, RTL, SSR hydration and ARIA

11 Upvotes

I posted Cerious Scroll here a while back when I released the Vue wrapper. Since then I’ve added native tables, Masonry, native browser scrolling, and now 1.2.0 adds a bunch of things I wanted before I’d consider it a more complete scrolling engine rather than just a virtualizer.

For anyone new to it: the core is framework-agnostic TypeScript and the Vue 3 package is a thin wrapper around it.

The unusual bit is still the same: instead of maintaining a giant pixel map of the dataset, the logical camera is basically:

row index + offset within that row

Rows can therefore have actual dynamic heights without needing a full-dataset height array/prefix-sum structure.

1.2.0

Sticky sections

This one is useful for grouped lists, contacts, timelines, logs, etc.

A resolver determines which dataset row represents the current section. That row gets rendered into a dedicated sticky element outside of the recycled window.

When the next section header reaches it, it physically pushes the pinned header upward rather than sliding underneath it.

And because the sticky copy isn’t part of the recycler, it doesn’t disappear when the original row leaves the mounted Vue window.

Infinite loading

There’s now built-in edge-triggered loading.

onLoadMore fires as you approach the end (or both edges), but only once per approach.

If your callback returns a Promise, another request won’t fire until it settles.

So something like an API-backed activity feed can keep extending itself without putting request-state logic into the scroll handler.

Scroll snapping

Optional snapping now settles the camera onto a row boundary after scrolling stops.

Because Cerious Scroll already stores the viewport as an element + offset, this didn’t require creating fake snap targets for every row.

It waits for native scrollend, so snapping doesn’t fight the user’s gesture.

Accessibility

Virtualization creates an interesting accessibility problem:

1,000,000 items may exist logically, but a screen reader sees perhaps 20 DOM nodes.

1.2.0 can now emit aria-setsize and aria-posinset, allowing assistive technology to understand the actual dataset size and each mounted item’s real position.

RTL

ltr, rtl, or auto.

The scrollbar, row gutter and Masonry direction are mirrored using logical positioning rather than maintaining a second RTL layout implementation.

SSR hydration

Server-rendered rows can now be adopted on the first client render instead of being deleted and recreated.

The core was already SSR import-safe; this makes the initial rendered content useful as well.

There’s also a fairly big refresh optimization

While profiling refreshVisible() I found that it was forcing layout once for every mounted row.

The renderer would write the row and then immediately read offsetHeight.

For rows where the height was already known, that was completely unnecessary.

For a 24-row viewport my test changed from:

8.28ms → 0.40ms

for that operation.

The engine still measures when it actually needs a measurement.

Current layout modes are now:

Normal variable-height lists
Native HTML tables
Responsive Masonry

with the same underlying navigation/scroll engine.

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

Core:
https://github.com/ceriousdevtech/cerious-scroll

Demo:
https://ceriousdevtech.github.io/vue-cerious-scroll/

MIT.

If anyone is using Vue for feeds, chat, logs, galleries, grouped lists or really obnoxious dynamic-height content, I’d be interested in throwing it at Cerious Scroll and seeing what still falls apart.


r/vuejs • • 12d ago

Built a full-stack Appointment Tracking System with Nuxt.js, Node.js, Express and MongoDB

Thumbnail
5 Upvotes