# Vue - "Tech Stack"
## Setup
### Legend
* Must-have = :heavy_check_mark:
* Strongly consider = :thumbsup:
* Still unsure = :thinking_face:
* Probably shouldn't be considered = :thumbsdown:
### Current proposed setup
* Vue 3 :heavy_check_mark:
* Typescript :thumbsup:
* [ESLint](https://eslint.org/) + [AirBnb Config](https://github.com/airbnb/javascript) – JS linter :heavy_check_mark:
* [Vue Router](https://router.vuejs.org/) – (Nested) routed / mapping with SPAs :thumbsup:
* [Jest](https://jestjs.io/) – Unit testing :heavy_check_mark:
* [PrimveVue](https://primefaces.org/primevue/showcase/#/setup) – Amazing UI framework with full Vue 3 and Typescript support :thinking_face:
* [Quasar](https://quasar.dev/) – Great documentation, amazing electron / mobile support, full Vue 3 and TS support but more opinionated than e. g. PrimeVue :thinking_face:
* [Vite](https://github.com/vitejs/vite) – Blazing fast and overall great frontend tooling. "Complicates" the setup a bit and the default Vue CLI is also pretty good by now :thinking_face:
* [Axios](https://github.com/axios/axios) – Eases consuming REST APIs but using the JS native Fetch-API should suffice as well and reduces the amount of third-party tooling :thumbsdown:
* [Vuex](https://vuex.vuejs.org/) – State management library. Amazing with Vue 2 but can be replaced by certain patterns with the new Composition API. Probably not needed anymore :thumbsdown:
## Further thoughts
### Vue 3
* At this point in time most tooling and frameworks are ready for Vue 3 or even only target Vue 3 anymore. Some outliers (e. g. Vuetify) are still lagging behind but several alternatives already exist
* Composition API and better TS support are a game changer and several other improvements over Vue 2 should make the decision clear
### Typescript (TS)
* While TS adds more overhead (both on the technical setup side of things as well as the code itself) it makes the codebase a lot more maintainable.
* Strong typing also decreases the possible pitfalls of weird Vanilla JS behaviour regarding types.
### ESLint
* Strongly enforces as certain type of code syntax (which may take some time to get used to) but has amazing syntax checking in most IDE.
* Makes maintaining code in the long run a lot easier and stops most syntax based errros before being deployed.
### Vue Router
* See above
### Jest
* In my opinion the best JS testing suite out there, a lot more comfortable than Mocha
### PrimeVue
* PrimeVue itself is an amazing UI framework but we have to discuss whether we want to use an UI framework at all or just write our own components from scratch. I strongly sway to using an UI framework but the latter approach also has its advantages.