---
# System prepended metadata

title: Multijet V2 Changelog

---

# Multijet v2.0.0

![cover](https://hackmd.io/_uploads/SJQaK595p.png)

## Panoramica novità

- Supporto completo a **Bun** (runtime + package manager)
- Nuova variante `multijet minimal`
- Refactor completo CLI (performance, stability, QoL)
- Nuovi comandi CLI per self-upgrade e codegen
- Nuove configurazioni default per linting più aggressivo e formatting
- Rimosso codice e moduli opzionali legacy
- Testing locale servizi migliorato (docker-compose + NGNIX)
- Nuovo sistema di logging strutturato
- Refactor core/utils 
- Risolti errori di build con AWS SAM
- Risolti problemi di sicurezza e code smells
- Upgrade completo di tutte le dipendenze core

## Bun

Multijet v2 supporta nativamente [Bun](https://bun.sh/), il runtime e package manager JavaScript **più veloce** in assoluto.

Creando un progetto con la CLI è possibile selezionare `bun` come opzione di runtime. In questo modo, **tutte le dipendenze verranno installate con bun**,  sia durante la creazione e sia utilizzando la CLI per generare libs o microservizi (multijet capisce automaticamente quale package manager utilizzare a seconda del progetto in cui viene eseguito).

Viene inoltre incluso nello script di build Docker l'opzione di immagine ufficiale `oven/bun:alpine` per utilizzare Bun come **runtime** invece di Node.js.

## Nuova CLI

![cli](https://hackmd.io/_uploads/Hku7w9cqT.png)

> ⚠️ a partire da v2.0.0, è consigliabile installare la CLI globalmente con `npm i -g multijet@latest` per una esperienza migliore. E' comunque possibile utilizzarla tramite `npx` o `bunx`.

La nuova CLI di multijet è ispirata in parte a `@angular/cli` e presenta un comando nuovo e cambiamenti radicali a quelli già esistenti. Inoltre è stato fatto un refactoring completo per rendere molto più semplice aggiungere funzionalità future.

Cambiamenti principali:


- Il comando base è stato modificato da `multijet` a `mjet`
- Nuovo comando `mjet upgrade`: ispirato a `bun upgrade`, consente di aggiornare la versione di mjet CLI all'ultima versione.
- `mjet create`: refactor completo e nuove scelte di scaffolding progetto
     - Variant: `Core`/`Minimal`
    - Runtime: `Bun`/`Node.js`
- `mjet new`: modificato il comportamento aggiungendo opzioni di generazione: `lib`, `ms` (microservice) e `pkg` (package)

> ℹ️ La CLI v1.x è sempre utilizzabile con il comando `npx multijet@1`. Questo rende possibile il mantenimento di progetti vecchi che utilizzano multijet v1.

## Variante minimal

La variante minimal **non** include i moduli e file relativi a sviluppo di REST API, incluso sistema di build e deploy specifico e generazione OpenAPI. Questo rende possibile creare un progetto più generico senza rinunciare alla comodità e velocità di multijet⚡

Il template minimal contiene solo gli elementi essenziali di Multijet per gestire una monorepo Node.js:

- Turborepo
- npm workspaces
- ESBuild bundler
- ESLint, Prettier

A differenza della variante `Core`, minimal include solo un workspace `packages`. E' possibile generare ulteriori package tramite la CLI con `mjet new pkg <name>`.


## Modifiche minori

- Cambiato nome libreria core da `fastify-utils` a `http` in ottica di astrarre l'utilizzo di Fastify per una eventuale *nuova variante* 👀
- Aggiunto [eslint-plugin-sonarjs](https://github.com/SonarSource/eslint-plugin-sonarjs) per linting più aggressivo
- Aggiunto di default `docker-compose` e NGNIX nella root di un progetto Core, facilitando di molto il testing in locale di microservizi. A partire da v2 è altamente **sconsigliato** l'utilizzo di `aws sam` per testing in locale (è estremamente lento). Gli script non sono stati rimossi quindi è comunque possibile utilizzarlo

## Anteprima nuove versioni

> ⚠️ Queste feature sono ancora sperimentali o in fase iniziale, è possibile che cambino in futuro. Non saranno presenti in multijet v2.0.0

Le seguenti sono in ordine di priorità (dalla più alta alla più bassa):


- Nuovo modulo per facilitare lavoro con database SQL
    - interazioni typesafe con database SQL **senza** utilizzo di ORM come [Prisma](https://www.prisma.io/) o [Drizzle](https://orm.drizzle.team/)
    - [sqlc](https://sqlc.dev/) (*ancora in beta per TypeScript*) per generare modelli e funzioni typesafe a partire da query raw (file `.sql`)
    - scala facilmente progetti grandi che usano database relazionali
    - Integrazione `kysley` (query builder) per database SQL non supportati da `sqlc` e coma alternativa da file raw `.sql`
    - ![image](https://github.com/kysely-org/kysely/blob/master/assets/demo.gif?raw=true)

- Nuova variante `fast`
    - sperimentazione framework web [Hono](https://hono.dev/) (al posto di Fastify)
    - nuovo core web minimale
    - ottimale per progetti più piccoli
    - eseguibile ovunque nativamente (Node, Bun, Deno, Lambda, WASM & Cloudflare Workers)
    - performance migliori rispetto a variante standard, meno features
- `mjet takeoff` (altamente sperimentale)
    - nuovo comando CLI `mjet takeoff`
    - generazione automatica microservizi e storage basandosi su OpenAPI
    - generazione automatica di ogni route a OpenAPI con relativi handler
    - risparmia tempo, il boilerplate è automatico