Vue reactivity in Blade templates using a familiar script setup syntax

Maintainers

Package info

github.com/brunoabpinto/vector

pkg:composer/brunoabpinto/vector

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

0.0.3 2026-02-04 10:27 UTC

This package is auto-updated.

Last update: 2026-03-04 10:43:52 UTC


README

logo

Vector

Vue reactivity in Blade templates using a simple <script setup> tag.

Installation

composer require brunoabpinto/vector

Frontend Setup

Install Vue:

npm install vue

Add Vector to your Vite entry points in vite.config.js:

export default defineConfig({
  plugins: [
    laravel({
      input: [
        "resources/css/app.css",
        "resources/js/app.js",
        "resources/js/vendor/vector.js",
      ],
      refresh: true,
    }),
  ],
  resolve: {
    alias: {
      vue: "vue/dist/vue.esm-bundler.js",
    },
  },
});

Add @vectorJs before your closing </body> tag in your layout:

<body>
    {{ $slot }}

    @vectorJs
</body>

Usage

Use the <script setup> tag to add Vue reactivity to your Blade templates:

<script setup>
    const i = ref(0);
</script>

<div>
    <button @click="i++">Click Me</button>
    <div>
        Count: @{{ i }}
    </div>
    <div v-if="i > 5">Success!</div>
</div>

How it works

  1. The <script setup> tag is transformed at compile time
  2. It extracts variable declarations and auto-returns them to the template
  3. Vue mounts on the next sibling element after the script—anything outside that element is not parsed by Vector
  4. All Vue Composition API functions are available: ref, reactive, computed, watch, onMounted, etc.

Escaping Blade Syntax

Since Blade also uses {{ }}, prefix Vue's mustache syntax with @ to prevent Blade from processing it:

{{-- Blade --}}
{{ $phpVariable }}

{{-- Vue (note the @) --}}
@{{ vueVariable }}

Or use Vue directives like v-text:

<span v-text="count"></span>

License

MIT