brunoabpinto / vector
Vue reactivity in Blade templates using a familiar script setup syntax
0.0.3
2026-02-04 10:27 UTC
Requires
- php: ^8.2
- illuminate/support: ^11.0|^12.0
README
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
- The
<script setup>tag is transformed at compile time - It extracts variable declarations and auto-returns them to the template
- Vue mounts on the next sibling element after the script—anything outside that element is not parsed by Vector
- 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
