Primi passi con Lino

Lino è uno strumento a riga di comando per creare, evolvere e standardizzare applicazioni .NET professionali con un'architettura ben definita. Automatizza attività ripetitive di scaffolding, ma il suo scopo va oltre la generazione di file: Lino guida lo sviluppatore attraverso una struttura tecnica coerente, con separazione delle responsabilità, layer espliciti, modellazione del dominio, casi d'uso, API, integrazioni, eventi, persistenza, applicazioni web e funzionalità trasversali. L'obiettivo è accelerare l'avvio e l'evoluzione di sistemi reali senza rinunciare a qualità, tracciabilità e chiarezza architetturale.

Prerequisiti

Prima di installare Lino, verifica che il tuo ambiente sia correttamente preparato:

  • .NET 10.0 SDK o superiore installato. Scarica .NET
  • .NET CLI disponibile nel terminale. Verifica con: dotnet --version
  • Git installato per il controllo versione. Scarica Git
  • Entity Framework Core CLI installata per il supporto alle migrations: dotnet tool install --global dotnet-ef
  • ✅ Ambiente container compatibile con OCI, come Docker Desktop o Podman.

Compatibilità di piattaforma

Lino è multipiattaforma e può essere utilizzato sui principali sistemi operativi:

  • ✅ Windows
  • ✅ macOS
  • ✅ Linux

Installazione

Lino è distribuito come strumento globale .NET. Prima di procedere, assicurati di avere installato il .NET 10 SDK o superiore.

Per installare la versione più recente, esegui:

dotnet tool install --global Tolitech.Lino

Dopo l'installazione, valida il funzionamento di Lino eseguendo:

lino --version

Se l'installazione riesce, la versione installata verrà visualizzata nel terminale.

Autenticazione

Dopo aver installato Lino, è necessario autenticarsi per accedere a tutte le funzionalità.

Se hai già un account, effettua il login con il comando:

lino auth login

Ti verrà richiesto di inserire:

  • Utente: indirizzo e-mail precedentemente registrato.
  • Password: password associata all'account.

Se non hai ancora un account, registrati direttamente dalla CLI usando:

lino user register

Durante la registrazione, inserisci:

  • Nome: nome dell'utente.
  • Cognome: cognome dell'utente.
  • E-mail: indirizzo e-mail che servirà anche come login.
  • Password: password sicura con almeno 6 caratteri.
  • Conferma password: digita nuovamente la password per la validazione.

Al termine della registrazione, l'utente sarà autenticato automaticamente.

Preferenze di lingua

Per impostazione predefinita, la CLI di Lino viene visualizzata in inglese en, ma puoi cambiare la lingua secondo le tue preferenze tra le opzioni disponibili:

en | pt | es | de | fr | it | ja | ko | ru | zh

Per definire una nuova lingua, esegui il comando seguente:

lino preferences culture set --name <culture>

Sostituisci <culture> con una delle culture supportate. Ad esempio, usa pt per portoghese, en per inglese o es per spagnolo.

In alternativa, puoi selezionare la lingua tramite un elenco interattivo con:

lino preferences culture set

Regolazione della codifica UTF-8 (opzionale)

Per una visualizzazione corretta di lingue con caratteri speciali (come giapponese, coreano, russo o cinese), assicurati che il terminale sia configurato per usare la codifica UTF-8.

In Windows PowerShell, regola la codifica eseguendo i seguenti comandi:

[console]::InputEncoding = [System.Text.Encoding]::UTF8
[console]::OutputEncoding = [System.Text.Encoding]::UTF8

Nota: Su Linux, macOS e Windows Terminal, il supporto UTF-8 di solito è nativo. Anche così, si consiglia di validare la configurazione se si verifica qualche problema nella visualizzazione dei caratteri.

Comandi disponibili

Lino organizza la sua automazione in gruppi di comandi. Ogni gruppo rappresenta un'intenzione architetturale: creare la solution, aggiungere servizi, modellare il dominio, esporre API, generare pagine, configurare integrazioni, controllare migrations, versionare artefatti e preparare build.

Il riferimento più affidabile per la tua macchina è l'help della CLI installata. Usa lino --help per vedere l'albero completo dei comandi e usa --help in qualsiasi gruppo per consultare opzioni, aliases, parametri obbligatori ed esempi.

Poiché Lino evolve continuamente, tra una versione e l’altra possono comparire nuovi comandi e opzioni. Considera questa documentazione come una guida d’uso e conferma la sintassi esatta nel terminale ogni volta che automatizzi un flusso o formi qualcuno del team.

Per mostrare l’elenco dei comandi disponibili, puoi eseguire il comando radice o richiedere esplicitamente l’aiuto:

lino
lino --help
lino --help
lino project --help
lino database migrations --help
lino integration operation --help

Per visualizzare sottocomandi e opzioni di qualsiasi gruppo, usa il nome del comando da solo o combinalo con --help:

lino <command>
lino <command> --help

Per esempio, quando consulti il gruppo project, la CLI mostra la descrizione del gruppo, esempi comuni e i sottocomandi disponibili:

lino project --help
DESCRIZIONE:
    Gestisce i progetti Lino.

ESEMPI:
    lino project new --name MyProject
    lino project list

COMANDI:
    new     Crea un nuovo progetto.
    list    Elenca i progetti creati.
    delete  Rimuove un progetto esistente.

Negli esempi, i valori tra <...> indicano argomenti da sostituire con il valore reale del tuo progetto. Ad esempio, <ProjectName> deve essere sostituito con il nome della solution, <ServiceName> con il nome del servizio e <culture> con una cultura supportata, come pt o en.

Principali gruppi di comandi:

GruppoComandi principaliUso
project new, list, delete Crea, elenca e rimuove progetti Lino.
service new, list, delete Aggiunge, elenca e rimuove servizi backend.
module new, list, delete Aggiunge, elenca e rimuove moduli all'interno di servizi modulari.
entity new, edit, list, delete Crea, modifica, elenca e rimuove entità di dominio.
shadow-entity (shadow) new Crea copie locali controllate di dati da un altro modulo o servizio.
enumeration (enum) new, edit, list, delete Crea, modifica, elenca e rimuove enumerazioni di dominio.
value-object (vo) new, edit, list, delete Crea, modifica, elenca e rimuove Value Objects.
property (prop) delete Rimuove proprietà dalle entità di dominio.
command new, list Genera casi d'uso di scrittura, solitamente legati a cambiamenti di stato, regole transazionali e validazioni dell'intenzione.
query new, list Genera casi d'uso di lettura, solitamente focalizzati su query, proiezione e restituzione dei dati senza modificare lo stato.
api new, list Genera ed elenca endpoint API per i casi d'uso.
web-app (webapp) new Aggiunge applicazioni web.
page new, edit, list Genera, modifica ed elenca pagine Blazor.
event new, edit, list Crea e mantiene eventi di dominio o di integrazione.
event-handler (handler) new, list Crea ed elenca handler di eventi.
error-definition (error) new, list Crea definizioni di errore standardizzate.
integration new, list, resource (new/list), operation (new/list), consume Modella integrazioni, resources, operazioni e consumer.
feature background-job add, auth add, tenant add Aggiunge funzionalità trasversali, incluse attività in background, autenticazione e tenancy.
database migrations add, remove, list, apply, revert Gestisce migrations di Entity Framework Core.
secret list, set, remove, clear Gestisce secrets locali del progetto.
plan add Registra un piano di esecuzione assistito dall'IA.
version show, list, bump Consulta e incrementa le versioni di servizi e web apps.
build - Genera artefatti e immagini container.
user register Registra un utente per accedere alle funzionalità autenticate di Lino.
auth login, logout Gestisce la sessione locale della CLI, inclusi autenticazione e logout.
preferences culture set Configura le preferenze locali della CLI, come la lingua mostrata nei comandi interattivi.

Alcuni comandi mostrano un alias breve tra parentesi per comodità. I nomi originali rimangono il riferimento principale per lettura, documentazione, formazione, automazioni e supporto.

Avvio rapido

Crea rapidamente un'applicazione .NET moderna, scalabile e pronta per l'evoluzione continua con il seguente comando:

lino project new --name <ProjectName>

Sostituisci <ProjectName> con il nome reale della tua solution. Ad esempio, per creare un progetto chiamato MyApp, esegui lino project new --name MyApp.

Questo comando genera una solution .NET strutturata con separazione chiara tra dominio, applicazione, infrastruttura, persistenza, API, orchestrazione e test. La struttura iniziale aiuta a mantenere visibili le decisioni architetturali fin dal primo commit, evitando che regole di business, accesso ai dati, endpoint e dettagli operativi vengano mescolati nello stesso punto.

Visivamente, una solution iniziale chiamata MyApp può essere compresa così:

MyApp/
├── MyApp.slnx
├── src/
│   ├── Aspire/
│   │   ├── AppHost/
│   │   │   └── MyApp.AppHost.csproj
│   │   └── ServiceDefaults/
│   │       └── MyApp.ServiceDefaults.csproj
│   └── Services/
│       └── Shared/
│           ├── Api/
│           │   └── MyApp.Shared.Api.csproj
│           ├── Application/
│           │   └── MyApp.Shared.Application.csproj
│           ├── Domain/
│           │   └── MyApp.Shared.Domain.csproj
│           ├── Infrastructure/
│           │   └── MyApp.Shared.Infrastructure.csproj
│           └── Infrastructure.Persistence/
│               └── MyApp.Shared.Infrastructure.Persistence.csproj
└── tests/

Questo albero è un esempio didattico della struttura generata per il progetto dell'utente. Mostra come la solution separa esecuzione locale, servizi, layer tecnici e test fin dall'inizio.

Cosa offre il progetto iniziale

La solution iniziale creata da Lino nasce già organizzata per responsabilità tecniche. Invece di consegnare solo un progetto vuoto, la CLI prepara una base con layer e componenti adatti ad applicazioni enterprise.

AreaResponsabilità
DomainConcentra entità, Value Objects, enumerations, eventi di dominio, contratti di repository e regole che appartengono al business.
ApplicationOrchestra casi d'uso, commands, queries, validazioni, handlers e contratti di input e output dell'applicazione.
InfrastructureIsola dettagli esterni, come servizi ausiliari, integrazioni, provider, autenticazione, messaggistica e funzionalità trasversali.
PersistenceCentralizza mapping, contesto di database, migrations, repository concreti e unit of work.
ApiEspone endpoint, contratti HTTP, filtri, autenticazione, autorizzazione e documentazione di input per consumer esterni.
OrchestrazionePrepara l'esecuzione locale dei componenti, l'osservabilità di base e l'integrazione tra servizi durante lo sviluppo.
TestsOrganizza i test per responsabilità, permettendo di validare dominio, applicazione, API e integrazioni in modo progressivo.

Il nome indicato in <ProjectName> diventa parte dell'identità tecnica della solution. Scegli un nome breve, stabile e rappresentativo, perché sarà usato in namespaces, assemblies, artefatti, configurazioni e riferimenti tra componenti.

Principali vantaggi:

  • Architettura esplicita: separazione tra regole di business, casi d'uso, infrastruttura, persistenza e contratti di input.
  • Evoluzione modulare: base preparata per servizi tradizionali, monoliti modulari, microservizi e applicazioni SaaS quando il contesto lo richiede.
  • Pattern tecnici coerenti: supporto a DDD, Clean Architecture, CQRS, eventi, integrazioni, migrations, test e osservabilità.
  • Meno lavoro meccanico: generazione di strutture ripetitive affinché lo sviluppatore concentri energia su dominio, regole, contratti e decisioni di prodotto.
  • Codice più prevedibile: convenzioni di naming, organizzazione delle cartelle e responsabilità riducono l'ambiguità tra i membri del team.

Con Lino, lo sviluppatore non parte da una cartella vuota né da un template generico. Parte da una base opinionated, pensata per sistemi enterprise, in cui ogni artefatto generato ha una funzione tecnica chiara e può evolvere in modo incrementale.

Si è verificato un errore non gestito. Ricarica 🗙