# Introduction

# Motivation

Vue (opens new window) is a wonderful web framework. Over the past few years, it has gained immense popularity. People use it every day at tons of projects. That projects are growing and Vue is growing too. The third version of the framework introduced us a new Composition API that allows to use reactivity outside of Vue components. The main problem of Vue, we think, is that it is positioned as a complete framework, but ties every application logic to the usage of its components. This approach works well for small applications, but doesn't for large tasks. In other words, your Vue components is the application that provides no instruments for the scaling. Do you remember the time when all your backend API calls were placed inside Vuex (opens new window) actions? Let's see Angular (opens new window) and Ember (opens new window) - all-in-one frameworks. They provides a prepared project structure and typical approaches, splits the business logic, the transport layer, and the view, but along with it brings some complex conceptions that inceases the threshold of entry. In contrast, React is just a UI library that is used by the application, therefore developers are free to choose between Redux (opens new window), MobX (opens new window), etc. Vue keeps its place in the middle. The modern Composition API gives us a free hand to share the code outside of components, but it doesn't tell us how. If you are agree, welcome under the hood.

# Goals

The main goal of this project is to provide tools and typical approaches for building scalable web applications using Vue.

In the future, maybe, we'll replace a Vue 3/Vue Composition API dependency with @vue/reactivity (opens new window) and it will be possible to use VueEnt with React.

# Non-goals

Although VueEnt offers its own version of the file structure for projects, it is not the goal to enforce any strict structure. The creation of yet another all-in-one framework based on Vue is not the VueEnt's goal too.

# Installation

# Prerequirements

This library has Vue 3 (opens new window) or Vue composition API plugin for Vue 2 (opens new window) and lodash (opens new window) (only for Mix Models) peer dependencies, it means that your have to add this dependencies into your project (package.json) manually.

# Packages

VueEnt consists of three independent parts that can be used separately.

# Reactive

@vueent/reactive is a couple of typescript decorators which allows to use ref and computed properties transparently inside of classes.

# Core

@vueent/core is a small library that integrates controllers and services patterns to the application.

# Mix Models

@vueent/mix-models is a library that provides reactive models classes for nosql models with optionally saving, rollback and live validations.

# Quick start

If you want to try VueEnt and don't want to read all the documentation, see this (opens new window) special project.

git clone https://github.com/vueent/vueent-quick-start.git
cd vueent-quick-start
npm i
npm run dev