Una guía completa y práctica para crear archivos README.md excepcionales que hagan brillar tus proyectos. Aprende todos los componentes, técnicas y mejores prácticas para documentar profesionalmente.
Ver Ejemplos • Documentación • Contribuir • Recursos
- ¿Por qué este repositorio?
- Componentes esenciales
- Alertas y avisos especiales
- Badges y escudos
- Tablas
- Listas de tareas
- Ejemplos por tipo de proyecto
- Herramientas útiles
- Checklist del README perfecto
- Cómo contribuir
- Licencia
Un buen README es la primera impresión de tu proyecto. Es la diferencia entre que alguien use tu código o lo ignore por completo.
- Los proyectos con README completos reciben 30% más estrellas en GitHub
- El 90% de los usuarios abandonan un proyecto sin documentación clara
- Un README bien estructurado reduce las preguntas frecuentes en un 60%
- Todos los componentes de un README profesional con ejemplos visuales
- Comparación lado a lado de "código vs resultado"
- Mejores prácticas usadas por proyectos populares
- Herramientas para automatizar y mejorar tu documentación
- Plantillas listas para usar según tu tipo de proyecto
# Nombre del Proyecto
[](https://opensource.org/licenses/MIT)
[]()
Una descripción concisa de una línea que explica qué hace tu proyecto.
Una descripción más detallada (2-3 párrafos) que expanda sobre el problema
que resuelve, para quién está diseñado, y qué lo hace único o diferente
de alternativas existentes.Una descripción concisa de una línea que explica qué hace tu proyecto.
Una descripción más detallada (2-3 párrafos) que expanda sobre el problema que resuelve, para quién está diseñado, y qué lo hace único o diferente de alternativas existentes.




Genera tus badges en: shields.io
Categorías comunes:
- Estado de construcción y tests
- Cobertura de código
- Versión y descargas
- Licencia
- Dependencias actualizadas
- Calidad de código
[Documentación](https://docs.example.com) •
[Demo en vivo](https://demo.example.com) •
[Reportar Bug](https://github.com/hugooae/Awesome-README-Guide/issues) •
[Solicitar Feature](https://github.com/hugooae/Awesome-README-Guide/issues)Documentación • Demo en vivo • Reportar Bug • Solicitar Feature
## Tabla de Contenidos
- [Instalación](#instalación)
- [Uso](#uso)
- [API](#api)
- [Ejemplos](#ejemplos)
- [Contribuir](#contribuir)
- [Licencia](#licencia)## Características
- **Rendimiento optimizado** - Arquitectura diseñada para máxima eficiencia
- **Ligero** - Solo 5kb minificado y gzipped
- **Altamente personalizable** - Sistema de configuración flexible
- **Seguro** - Implementa las mejores prácticas de seguridad
- **Bien documentado** - Documentación completa con ejemplos
- **Probado exhaustivamente** - Cobertura de tests superior al 90%- Rendimiento optimizado - Arquitectura diseñada para máxima eficiencia
- Ligero - Solo 5kb minificado y gzipped
- Altamente personalizable - Sistema de configuración flexible
- Seguro - Implementa las mejores prácticas de seguridad
- Bien documentado - Documentación completa con ejemplos
- Probado exhaustivamente - Cobertura de tests superior al 90%
## Instalación
### Requisitos previos
- Node.js >= 16.0.0
- npm >= 8.0.0
### Instalación vía npm
```bash
npm install nombre-paquete
```
### Instalación desde el código fuente
```bash
git clone https://github.com/hugooae/Awesome-README-Guide.git
cd Awesome-README-Guide
npm install
npm run build
```- Node.js >= 16.0.0
- npm >= 8.0.0
npm install nombre-paquetegit clone https://github.com/hugooae/Awesome-README-Guide.git
cd Awesome-README-Guide
npm install
npm run build## Uso
### Ejemplo básico
```javascript
const { Libreria } = require('nombre-paquete');
const instancia = new Libreria({
apiKey: 'tu_clave_aqui',
timeout: 3000
});
const resultado = await instancia.metodo();
console.log(resultado);
```const { Libreria } = require('nombre-paquete');
const instancia = new Libreria({
apiKey: 'tu_clave_aqui',
timeout: 3000
});
const resultado = await instancia.metodo();
console.log(resultado);## API
### `metodo(parametro)`
Descripción detallada del método.
**Parámetros:**
- `parametro` (string): Descripción del parámetro
**Retorna:** Promise<Object> - Objeto con la respuesta
**Ejemplo:**
```javascript
const resultado = await lib.metodo('valor');
```Descripción detallada del método.
Parámetros:
parametro(string): Descripción del parámetro
Retorna: Promise - Objeto con la respuesta
Ejemplo:
const resultado = await lib.metodo('valor');GitHub y GitLab soportan alertas especiales con formato destacado.
> [!NOTE]
> Información útil que los usuarios deben conocer, incluso al ojear el contenido.
> [!TIP]
> Consejos útiles para hacer las cosas mejor o más fácilmente.
> [!IMPORTANT]
> Información clave que los usuarios necesitan conocer para alcanzar su objetivo.
> [!WARNING]
> Información urgente que necesita atención inmediata del usuario para evitar problemas.
> [!CAUTION]
> Advierte sobre riesgos o resultados negativos de ciertas acciones.[!NOTE] Información útil que los usuarios deben conocer, incluso al ojear el contenido.
[!TIP] Consejos útiles para hacer las cosas mejor o más fácilmente.
[!IMPORTANT] Información clave que los usuarios necesitan conocer para alcanzar su objetivo.
[!WARNING] Información urgente que necesita atención inmediata del usuario para evitar problemas.
[!CAUTION] Advierte sobre riesgos o resultados negativos de ciertas acciones.
> [!WARNING]
> Este software no ha recibido revisión de seguridad externa y puede contener
> vulnerabilidades. No lo uses para casos sensibles hasta que haya sido auditado.
> [!IMPORTANT]
> La versión 2.0 introduce cambios incompatibles. Lee la [guía de migración](MIGRATION.md)
> antes de actualizar.
> [!TIP]
> Puedes acelerar el proceso usando el flag `--fast` en el comando de instalación.[!WARNING] Este software no ha recibido revisión de seguridad externa y puede contener vulnerabilidades. No lo uses para casos sensibles hasta que haya sido auditado.
[!IMPORTANT] La versión 2.0 introduce cambios incompatibles. Lee la guía de migración antes de actualizar.
[!TIP] Puedes acelerar el proceso usando el flag
--fasten el comando de instalación.
Las tablas son útiles para mostrar configuraciones, opciones o comparaciones.
| Opción | Tipo | Por defecto | Descripción |
|--------|------|-------------|-------------|
| `apiKey` | string | - | Clave de API requerida |
| `port` | number | 3000 | Puerto del servidor |
| `debug` | boolean | false | Activar modo debug |
| `timeout` | number | 5000 | Timeout en milisegundos || Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
apiKey |
string | - | Clave de API requerida |
port |
number | 3000 | Puerto del servidor |
debug |
boolean | false | Activar modo debug |
timeout |
number | 5000 | Timeout en milisegundos |
| Izquierda | Centro | Derecha |
|:----------|:------:|--------:|
| Texto | Texto | Texto |
| Más texto | Más | Más || Izquierda | Centro | Derecha |
|---|---|---|
| Texto | Texto | Texto |
| Más texto | Más | Más |
Útiles para roadmaps y checklists.
## Roadmap
### Completado
- [x] Funcionalidad básica
- [x] Documentación completa
- [x] Tests unitarios
### En progreso
- [ ] Mejoras de rendimiento
- [ ] Plugin system
### Planeado
- [ ] Soporte para TypeScript
- [ ] CLI mejorado- Funcionalidad básica
- Documentación completa
- Tests unitarios
- Mejoras de rendimiento
- Plugin system
- Soporte para TypeScript
- CLI mejorado
```javascript
function ejemplo() {
console.log("Hola mundo");
return true;
}
```
```python
def ejemplo():
print("Hola mundo")
return True
```
```bash
npm install
npm test
```function ejemplo() {
console.log("Hola mundo");
return true;
}def ejemplo():
print("Hola mundo")
return Truenpm install
npm testEjecuta el comando `npm install` para instalar las dependencias.
La función `obtenerDatos()` retorna un objeto con los resultados.Ejecuta el comando npm install para instalar las dependencias.
La función obtenerDatos() retorna un objeto con los resultados.
> Esta es una cita normal que puede usarse para destacar información.
> Puedes usar citas para incluir testimonios de usuarios o
> fragmentos importantes de documentación externa.Esta es una cita normal que puede usarse para destacar información.
Puedes usar citas para incluir testimonios de usuarios o fragmentos importantes de documentación externa.
[Texto del enlace](https://ejemplo.com)
[Documentación oficial](https://docs.ejemplo.com)
[Ver en GitHub](https://github.com/hugooae/Awesome-README-Guide)Texto del enlace Documentación oficial Ver en GitHub
Este es un [enlace con referencia][1] y este es [otro enlace][2].
[1]: https://ejemplo.com
[2]: https://docs.ejemplo.comEste es un enlace con referencia y este es otro enlace.

Imagen con enlace:
[](https://ejemplo.com)<p align="center">
<img src="https://via.placeholder.com/400x200?text=Centered+Image" alt="Imagen centrada">
</p>**Texto en negrita**
*Texto en cursiva*
***Texto en negrita y cursiva***
~~Texto tachado~~
`Código inline`
Puedes combinar **negrita con *cursiva* dentro**.Texto en negrita
Texto en cursiva
Texto en negrita y cursiva
Texto tachado
Código inline
Puedes combinar negrita con cursiva dentro.
- Primer elemento
- Segundo elemento
- Tercer elemento
- Sub-elemento 1
- Sub-elemento 2
- Sub-sub-elemento- Primer elemento
- Segundo elemento
- Tercer elemento
- Sub-elemento 1
- Sub-elemento 2
- Sub-sub-elemento
1. Primer paso
2. Segundo paso
3. Tercer paso
1. Sub-paso A
2. Sub-paso B
4. Cuarto paso- Primer paso
- Segundo paso
- Tercer paso
- Sub-paso A
- Sub-paso B
- Cuarto paso
Texto antes de la línea
---
Texto después de la línea
***
Otra forma de hacer líneas
___
Y una másTexto antes de la línea
Texto después de la línea
Otra forma de hacer líneas
Y una más
Útil para ocultar información extensa.
<details>
<summary>Click para expandir</summary>
### Contenido oculto
Este contenido estará oculto hasta que el usuario haga click.
Puedes incluir:
- Listas
- Código
- Imágenes
- Cualquier contenido Markdown
```javascript
console.log("Código dentro del desplegable");Click para expandir
Este contenido estará oculto hasta que el usuario haga click.
Puedes incluir:
- Listas
- Código
- Imágenes
- Cualquier contenido Markdown
console.log("Código dentro del desplegable");## Tests
### Ejecutar tests
```bash
# Todos los tests
npm test
# Con cobertura
npm run test:coverage
# Modo watch
npm run test:watch
```
### Cobertura de código
El proyecto mantiene una cobertura mínima del 80%:
- Statements: 85%
- Branches: 82%
- Functions: 88%
- Lines: 85%# Todos los tests
npm test
# Con cobertura
npm run test:coverage
# Modo watch
npm run test:watchEl proyecto mantiene una cobertura mínima del 80%:
- Statements: 85%
- Branches: 82%
- Functions: 88%
- Lines: 85%
## Solución de Problemas
### Error: "Module not found"
**Causa:** Las dependencias no están instaladas.
**Solución:**
```bash
rm -rf node_modules
npm installCausa: Falta de permisos.
Solución:
sudo npm install -g nombre-paquete
#### Cómo se ve:
## Solución de Problemas
### Error: "Module not found"
**Causa:** Las dependencias no están instaladas.
**Solución:**
```bash
rm -rf node_modules
npm install
Causa: Falta de permisos.
Solución:
sudo npm install -g nombre-paquete## Contribuir
Las contribuciones son bienvenidas. Por favor:
1. Fork el proyecto
2. Crea tu rama de feature (`git checkout -b feature/AmazingFeature`)
3. Commit tus cambios (`git commit -m 'Add: nueva característica'`)
4. Push a la rama (`git push origin feature/AmazingFeature`)
5. Abre un Pull Request
### Guías de estilo
- Usa commits semánticos: `feat:`, `fix:`, `docs:`
- Escribe tests para nuevas funcionalidades
- Actualiza la documentación
Lee [CONTRIBUTING.md](CONTRIBUTING.md) para más detalles.Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea tu rama de feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add: nueva característica') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Usa commits semánticos:
feat:,fix:,docs: - Escribe tests para nuevas funcionalidades
- Actualiza la documentación
Lee CONTRIBUTING.md para más detalles.
## Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo [LICENSE](LICENSE) para más detalles.
Copyright (c) 2025 HugoEste proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Copyright (c) 2025 Hugo
## Autores
**Hugo** - *Creador y mantenedor* - [@hugooae](https://github.com/hugooae)
### Contribuidores
Gracias a todos los [contribuidores](https://github.com/hugooae/Awesome-README-Guide/contributors)
que han participado en este proyecto.
## Reconocimientos
- Inspirado por [proyecto-similar](https://github.com/user/proyecto)
- Agradecimientos a la comunidad open sourceHugo - Creador y mantenedor - @hugooae
Gracias a todos los contribuidores que han participado en este proyecto.
- Inspirado por proyecto-similar
- Agradecimientos a la comunidad open source
Las notas al pie te permiten agregar referencias sin interrumpir el flujo del texto.
Este es un texto con una nota al pie[^1] y esta es otra nota[^2].
También puedes usar notas con nombres más descriptivos[^nota-larga].
[^1]: Esta es la primera nota al pie.
[^2]: Esta es la segunda nota al pie.
[^nota-larga]: Esta es una nota al pie con un nombre descriptivo.
Puedes incluir múltiples párrafos en una nota al pie.
Simplemente indenta los párrafos adicionales.Este es un texto con una nota al pie1 y esta es otra nota2.
También puedes usar notas con nombres más descriptivos3.
Gracias a @hugooae por la contribución.
Este bug fue reportado por @usuario123.Gracias a @hugooae por la contribución. Este bug fue reportado por @usuario123.
Esto soluciona el issue #123
Ver pull request #456
Relacionado con hugooae/otro-repo#789Esto soluciona el issue #123 Ver pull request #456 Relacionado con hugooae/otro-repo#789
Ver commit 16c999e8c71134401a78d4d46435517b2271d6ac
O la versión corta: 16c999eVer commit 16c999e8c71134401a78d4d46435517b2271d6ac O la versión corta: 16c999e
GitHub soporta diagramas Mermaid directamente en Markdown.
```mermaid
graph TD;
A[Inicio] --> B{Decisión};
B -->|Sí| C[Acción 1];
B -->|No| D[Acción 2];
C --> E[Fin];
D --> E;
```graph TD;
A[Inicio] --> B{Decisión};
B -->|Sí| C[Acción 1];
B -->|No| D[Acción 2];
C --> E[Fin];
D --> E;
```mermaid
sequenceDiagram
participant Usuario
participant Servidor
participant BaseDatos
Usuario->>Servidor: Petición HTTP
Servidor->>BaseDatos: Consulta SQL
BaseDatos-->>Servidor: Resultados
Servidor-->>Usuario: Respuesta JSON
```sequenceDiagram
participant Usuario
participant Servidor
participant BaseDatos
Usuario->>Servidor: Petición HTTP
Servidor->>BaseDatos: Consulta SQL
BaseDatos-->>Servidor: Resultados
Servidor-->>Usuario: Respuesta JSON
```mermaid
gantt
title Roadmap del Proyecto
dateFormat YYYY-MM-DD
section Fase 1
Diseño :a1, 2025-01-01, 30d
Desarrollo :a2, after a1, 45d
section Fase 2
Testing :a3, after a2, 20d
Despliegue :a4, after a3, 10d
```gantt
title Roadmap del Proyecto
dateFormat YYYY-MM-DD
section Fase 1
Diseño :a1, 2025-01-01, 30d
Desarrollo :a2, after a1, 45d
section Fase 2
Testing :a3, after a2, 20d
Despliegue :a4, after a3, 10d
```mermaid
classDiagram
class Animal {
+String nombre
+int edad
+hacerSonido()
}
class Perro {
+String raza
+ladrar()
}
class Gato {
+maullar()
}
Animal <|-- Perro
Animal <|-- Gato
```classDiagram
class Animal {
+String nombre
+int edad
+hacerSonido()
}
class Perro {
+String raza
+ladrar()
}
class Gato {
+maullar()
}
Animal <|-- Perro
Animal <|-- Gato
| Feature | Descripción |
|---------|-------------|
| Feature 1 | Esta es una descripción larga<br>que ocupa múltiples líneas<br>usando `<br>` |
| Feature 2 | Otra descripción<br>en varias líneas || Feature | Descripción |
|---|---|
| Feature 1 | Esta es una descripción larga que ocupa múltiples líneas usando <br> |
| Feature 2 | Otra descripción en varias líneas |
| Método | Descripción | Documentación |
|--------|-------------|---------------|
| `GET /api/users` | Obtener todos los usuarios | [Docs](https://docs.api.com) |
| `POST /api/users` | Crear nuevo usuario | [Docs](https://docs.api.com) |
| `DELETE /api/users/:id` | Eliminar usuario | [Docs](https://docs.api.com) || Método | Descripción | Documentación |
|---|---|---|
GET /api/users |
Obtener todos los usuarios | Docs |
POST /api/users |
Crear nuevo usuario | Docs |
DELETE /api/users/:id |
Eliminar usuario | Docs |














Puedes usar HTML cuando necesites más control sobre el formato.
<div align="center">
# Título Centrado
**Texto en negrita centrado**

</div><img src="https://via.placeholder.com/600x200" alt="Imagen grande" width="600">
<img src="https://via.placeholder.com/300x100" alt="Imagen mediana" width="300">
<img src="https://via.placeholder.com/150x50" alt="Imagen pequeña" width="150"><img align="left" width="100" height="100" src="https://via.placeholder.com/100">
Este texto aparece al lado de la imagen. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua.
<br clear="left"/>
Texto después de limpiar el float.Este texto aparece al lado de la imagen. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Texto después de limpiar el float.
<details>
<summary><strong>📚 Ver más información</strong></summary>
<br>
Contenido con **formato Markdown** completo.
- Lista 1
- Lista 2
- Lista 3
```javascript
const codigo = "también funciona";📚 Ver más información
Contenido con formato Markdown completo.
- Lista 1
- Lista 2
- Lista 3
const codigo = "también funciona";Para mostrar combinaciones de teclas de forma visual.
Presiona <kbd>Ctrl</kbd> + <kbd>C</kbd> para copiar.
Usa <kbd>Cmd</kbd> + <kbd>V</kbd> para pegar en Mac.
Para guardar: <kbd>Ctrl</kbd> + <kbd>S</kbd>
Atajo rápido: <kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>F</kbd>Presiona Ctrl + C para copiar.
Usa Cmd + V para pegar en Mac.
Para guardar: Ctrl + S
Atajo rápido: Alt + Shift + F
GitHub soporta emojis usando códigos o directamente.
:tada: :rocket: :sparkles: :star: :heart: :fire: :zap: :boom:
:white_check_mark: :x: :warning: :bulb: :lock: :key: :mag:
:computer: :iphone: :books: :pencil2: :mailbox: :package:
También puedes usar emojis directamente: 🎉 🚀 ✨ ⭐ ❤️ 🔥🎉 🚀 ✨ ⭐ ❤️ 🔥 ⚡ 💥
✅ ❌
💻 📱 📚 ✏️ 📫 📦
También puedes usar emojis directamente: 🎉 🚀 ✨ ⭐ ❤️ 🔥
Lista completa: GitHub Emoji Cheat Sheet
Para mostrar cambios en código.
```diff
function ejemplo() {
- return "versión antigua";
+ return "versión nueva";
}
- código eliminado
+ código añadido
! código modificado
# comentario
```function ejemplo() {
- return "versión antigua";
+ return "versión nueva";
}
- código eliminado
+ código añadido
! código modificado
# comentarioComentarios que no se muestran en el README renderizado.
<!-- Este es un comentario que no se verá -->
Este texto sí se ve.
<!--
Este es un comentario
de múltiples líneas
que tampoco se verá
-->Este texto sí se ve.
Cuando necesitas mostrar caracteres especiales literalmente.
\* No es una lista
\# No es un título
\[No es un enlace](url)
\`No es código\`
Para mostrar una barra invertida: \\* No es una lista # No es un título [No es un enlace](url) `No es código`
Para mostrar una barra invertida: \
<dl>
<dt>Término 1</dt>
<dd>Definición del término 1</dd>
<dt>Término 2</dt>
<dd>Definición del término 2</dd>
<dt>API</dt>
<dd>Application Programming Interface - Interfaz de programación de aplicaciones</dd>
</dl>- Término 1
- Definición del término 1
- Término 2
- Definición del término 2
- API
- Application Programming Interface - Interfaz de programación de aplicaciones
## Mi Sección {#mi-ancla-personalizada}
Ahora puedes enlazar a esta sección con: [Ir a Mi Sección](#mi-ancla-personalizada)
O en HTML:
<h2 id="seccion-html">Sección con HTML</h2>
Enlace: [Ir a Sección HTML](#seccion-html)Ahora puedes enlazar a esta sección con: Ir a Mi Sección
Enlace: Ir a Sección HTML
<table>
<tr>
<td>
**⚠️ ADVERTENCIA**
Este es un mensaje de advertencia personalizado con más control sobre el estilo.
</td>
</tr>
</table>
<table>
<tr>
<td bgcolor="#d1ecf1">
**ℹ️ INFORMACIÓN**
Cuadro de información con fondo de color.
</td>
</tr>
</table>|
Este es un mensaje de advertencia personalizado con más control sobre el estilo. |
|
ℹ️ INFORMACIÓN Cuadro de información con fondo de color. |
Este repositorio incluye plantillas específicas en la carpeta templates/:
- Librerías JavaScript/TypeScript - javascript-library.md
- Librerías Python - python-library.md
- Aplicaciones Web - web-app.md
- APIs REST - rest-api.md
- Herramientas CLI - cli-app.md
- Plugins y Extensiones - plugin.md
- Proyectos de Machine Learning - ml-project.md
- Aplicaciones Móviles - mobile-app.md
- readme.so - Editor visual de README
- readme-md-generator - Generador CLI
- Make a README - Guía interactiva
- shields.io - Generador de badges personalizado
- badgen.net - Alternativa rápida
- forthebadge.com - Badges creativos
- asciinema - Grabar terminal
- ScreenToGif - Crear GIFs
- Carbon - Screenshots de código elegantes
- markdownlint - Linter para Markdown
- remark - Procesador de Markdown
Usa esta lista para verificar que tu README incluye todo lo esencial:
- Título claro y descriptivo
- Descripción concisa del proyecto
- Badges relevantes (build, version, license)
- Demo visual (screenshot, GIF o video)
- Tabla de contenidos
- Requisitos del sistema
- Instrucciones de instalación
- Guía de configuración
- Ejemplos de uso básico
- Documentación de API (si aplica)
- Guía de contribución
- Información sobre tests
- Roadmap o planes futuros
- Sección de solución de problemas
- Licencia claramente indicada
- Información de contacto
- Política de seguridad (si aplica)
- Art of README - Filosofía del README
- Awesome README - Colección de buenos READMEs
- Make a README - Guía interactiva
¿Encontraste algo que falta o que se puede mejorar? Las contribuciones son bienvenidas.
- Fork este repositorio
- Crea una rama (
git checkout -b feature/mejora) - Haz commit de tus cambios (
git commit -m 'Add: nueva sección sobre X') - Push a la rama (
git push origin feature/mejora) - Abre un Pull Request
Por favor, asegúrate de:
- Incluir ejemplos tanto del código como del resultado visual
- Mantener el formato consistente con el resto del documento
- Probar que el Markdown se renderiza correctamente
Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Creado y mantenido por Hugo - @hugooae
Si esta guía te resulta útil, considera darle una estrella en GitHub.