Motia è un framework back-end che permette di unificare API, job asincroni, eventi e agenti AI in un unico runtime. L'obiettivo del progetto è quello di eliminare la complessità associata alla gestione separata di microservizi, code e sistemi di workflow, in modo da garantire sessioni di sviluppo integrate e osservabili.
Come funziona Motia e cosa sono gli "Step"
Il nucleo di Motia ruota attorno al concetto di Step. Si tratta di un'unità autonoma che incapsula la logica di business. Ogni Step può essere scritto in JavaScript, TypeScript, Python e prossimamente in altri linguaggi. Può gestire inoltre qualsiasi logica, dalle query ai database alle interazioni con i modelli di AI. Le principali tipologie di Step sono:
api
: risponde a richieste HTTP;event
: reagisce ad eventi interni o esterni;cron
: gestisce task pianificati;noop
: placeholder manuale.
Gli Step comunicano tra loro tramite eventi e condividono uno state store chiave-valore con tracciamento automatico di tutte le operazioni. Motia offre poi un logging strutturato in formato JSON, supporto allo streaming multidirezionale in real-time e tracciamento end-to-end di ogni flusso.
Il framework permette di creare workflow composti da Step collegati da API, eventi e task pianificati. Sostituisce così alcuni stack complessi, come per esempio Nest.js, con un approccio più semplice e integrato. Ogni interazione è visibile nel Workbench, un'UI locale che fornisce:
- visualizzazione dei flussi;
- test API;
- tracce di esecuzione;
- log strutturati;
- controllo dello stato;
- streaming live.
Installazione ed esecuzione
I requisiti di Motia prevedono un ambiente basato su Node.js 18 o versione successiva e npm 8 o superiore ma si possono utilizzare in alternativa pnpm o yarn. Per lanciare un nuovo progetto è poi sufficiente il comando:
npx motia@latest create -i
Fatto questo si può avviare Workbench con:
npx motia dev
È accedere al servizio attivato tramite l'indirizzo localhost:3000
Oltre a JavaScript, TypeScript e Python viene supportato anche Ruby (in beta) e presto dovrebbe essere possibile operare anche con Go e Rust.