MaVue: Easier Vue apps inspired by Mavo

Vue.js is a great framework: it's blazing fast, and has a large community around it. However, it requires a fair bit of JS knowledge to use. Even for folks with that, certain things can be cumbersome and repetitive to implement.

MaVue is a modular collection of Vue helpers (directives, Vue components and Web components) designed to make developing Vue.js apps faster and approachable to a wider audience. They can be used all together, or separately.

It is inspired by Mavo, our earlier project for developing entire web apps by writing HTML. We noticed that several of Mavo's individual functionalities were desirable for developers, but Mavo is all-or-nothing and cannot easily be used in conjunction with another framework. Furthermore, Mavo was designed primarily for novices, and its JS API was not as smooth as a JS-first framework. With MaVue, we want to bridge this gap, and offer developers of all skill levels the best of both worlds.

Here be dragons MaVue has not yet been officially released, nor is the list of helpers below complete. It is very much a work in progress. Please try it out, and open issues as you find them!

MaVue helpers

App creation

These helpers import Vue automatically and offer easier ways to create Vue apps. See Installation below for an overview of the different ways to use MaVue.

Current

Future work

Installation

Zero hassle, no control

To import all of MaVue and use it with the <v-app> custom element, all you need is this somewhere in your HTML:

<script src="https://mavue.mavo.io/mavue.js" type="module"></script>

This imports every MaVue helper and adds it to <v-app>.

Minimal hassle, some control

To easily create (Ma)Vue apps in JS, you can import createApp() and use it instead of Vue’s createApp().

It imports Vue for you, adds all the MaVue helpers, and includes some additional conveniences so you can create apps with less code.

<div id="app">
	<input type=number v-model=foo> + 1 = {{ foo + 1 }}
</div>
<script type="module">
import { createApp } from "https://mavue.mavo.io/mavue.js";

let app = createApp({
	data: {
		foo: 1
	}
});
</script>

Some hassle, more control

You can import all of MaVue on Vue apps you create in your JS, as a mixin, so you can use it with your own version of Vue

import { createApp } from "vue";
import { mixin } from "https://mavue.mavo.io/mavue.js";

let app = createApp({
	// ...
}).mount("#app");

More hassle, total control

If you only need a few helpers, you can import them individually, following the instructions on their individual pages.