# Primeros pasos con Total.js 5

> Instala Total.js 5, crea el script de inicio y tus primeras rutas, acciones y vistas, y ejecuta la aplicación.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: es
Content-SHA256: 27e8411fc34281d0878cbe0ae93396b0afc16a590d0d7256a65f1a936b9f42f3
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js 5 es el paquete npm `total5`. Necesitas Node.js (los ejemplos de este sitio funcionan con Node.js 24) y una carpeta vacía. Crea el proyecto e instala el paquete:

```bash
mkdir hello && cd hello
npm init -y
npm install total5
```

El script de inicio es un archivo llamado `index.js` en la raíz del proyecto. Carga el framework e inicia el servidor:

```js
require('total5');

Total.run({ port: 8000 });
```

Este es todo el código que escribes para arrancar. Los archivos de las carpetas del proyecto (consulta la página de estructura del proyecto) se cargan automáticamente. Crea estos tres archivos.

Un **controlador** declara las rutas. `ROUTE('GET /')` sin manejador mostraría la vista con el mismo nombre; aquí el manejador renderiza `views/index.html` con un modelo:

```js controllers/index.js
exports.install = function() {
	ROUTE('GET /', home);
	ROUTE('POST /greet/ --> *Greet/say');
};

function home($) {
	$.view('index', { title: 'Hello Total.js' });
}
```

Una **acción** tiene su propia validación. La ruta anterior ejecuta `Greet/say` con el cuerpo JSON de la petición, y el framework rechaza un cuerpo que no coincide con `input`:

```js definitions/greet.js
NEWACTION('Greet/say', {
	name: 'Say hello',
	input: '*name:String',
	action: function($, model) {
		$.callback({ message: 'Hello, ' + model.name + '!' });
	}
});
```

Una **vista** es HTML con bloques `@{...}`. `views/layout.html` envuelve todas las vistas y `@{body}` es el lugar de la vista:

```html views/layout.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title>Hello</title></head>
<body>@{body}</body>
</html>
```

```html views/index.html
<h1>@{model.title}</h1>
```

Inicia la aplicación con `node index.js`. En modo `debug` (el predeterminado), la aplicación se reinicia cuando modificas un archivo y muestra su dirección en el terminal. Para ejecutarla en modo `release`, utiliza `node index.js --release`. Consulta la guía de modos de ejecución para conocer las diferencias.
