yasui
Version:
Lightweight multi-runtime framework for REST and web APIs
108 lines (76 loc) • 5.2 kB
Markdown
<p align="center">
<a href="https://yasui.app">
<img src="https://raw.githubusercontent.com/thomasbarkats/assets/refs/heads/main/yasui/yasui-logo-mascot.png" alt="Logo" height=160 />
</a>
<h1 align="center">YasuiJS</h1>
</p>
<div align="center">
[](https://nodejs.org/)
[](https://www.npmjs.com/package/yasui)
[](https://www.npmjs.com/package/yasui)
</div>
<div align="center">
<span>Ship production-ready REST APIs in minutes 🐿️</span>
<span> • </span>
**[Documentation](https://yasui.app/guide/getting-started.html)** 📖
</div>
<br />
## What is YasuiJS?
Yasui (meaning "easy" in Japanese) is a lightweight multi-runtime framework built on Web Standards and pushed with [SRVX](https://srvx.h3.dev), that brings the developer experience of modern frameworks without the complexity. It runs on Node.js, Deno, and Bun, providing the structure you need with just the features you'll actually use.
## Features Summary
- **Multi-Runtime**: Runs on Node.js, Deno, and Bun via SRVX and Web Standards
- **Lightweight & Fast**: Minimal dependencies with focus on essentials without the bloat
- **Complete Error Handling**: Everything can throw without try/catch - automatic error handling everywhere
- **Automatic Type-Casting**: Query params automatically converted to proper types. Even in middlewares
- **Flexible DI System**: Constructor and method-level injection with configurable scopes for better control
- **Simple Middlewares**: Apply at global, controller, or route level. Use the same decorators as controllers
- **Rich Swagger Generation**: Flexible decorators for enums, arrays, classes, OpenAPI schemas
- **HTTPS/HTTP2 Support**: Built-in TLS configuration with automatic HTTP/2 on Node.js
- **Type-safe**: Full TypeScript support with proper typing
## Quick Start
```sh
npm install yasui
```
```ts
import yasui, { Controller, Get } from 'yasui';
@Controller('/')
export class AppController {
@Get('/')
hello() {
return { message: 'Hello World!' };
}
}
yasui.createServer({
controllers: [AppController]
});
```
## 📖 **[Documentation](https://yasui.app/guide/getting-started.html)**
- [Configuration](https://yasui.app/guide/config.html) - Server setup and global options
- [Controllers](https://yasui.app/guide/controllers.html) - Define routes with decorators and automatic type casting
- [Dependency Injection](https://yasui.app/guide/dependency-injection.html) - Constructor and method-level injection with flexible scopes
- [Error Handling](https://yasui.app/guide/error-handling.html) - Automatic error catching without try/catch blocks
- [Logging](https://yasui.app/guide/logging.html) - Built-in timing and color-coded logging service
- [Middlewares](https://yasui.app/guide/middlewares.html) - Apply at multiple levels with same decorators as controllers
- [Pipes](https://yasui.app/guide/pipes.html) - Transform and validate request data automatically
- [Swagger Doc.](https://yasui.app/guide/swagger.html) - Generate OpenAPI docs with flexible decorators
## Why YasuiJS?
YasuiJS adopts a **class-based, object-oriented approach** with decorators, bringing significant architectural advantages:
### Better Code Organization
Classes and decorators provide better organization, encapsulation, and maintainability. This approach naturally supports established architectural patterns like onion architecture, hexagonal architecture, and clean architecture.
### Dependency Injection
Built-in dependency injection enables loose coupling, better testability, and cleaner separation of concerns. Dependencies are explicitly declared and automatically resolved.
### Declarative Over Imperative
Instead of manually registering routes and extracting parameters, you declare what you want using decorators. The framework handles the implementation details.
### Multi-Runtime Support
Built on web standards, YasuiJS provides a portable, standard codebase for JavaScript runtimes, capable of running on Node.js, Deno, and Bun with [SRVX](https://srvx.h3.dev), a universal server abstraction based on the Fetch API. Future-proof your applications with standard web APIs.
## Migration from 3.x (Express)
Version 4.x migrated from Express to Web Standards. **Key breaking changes:**
- **Express middlewares are not compatible** - Use Web Standards-based alternatives or write native Yasui middlewares
- Request/Response objects now follow Web Standards (immutable)
- Most features remain unchanged - decorators, DI, routing all work the same way
See the [migration guide](https://yasui.app/guide/migration.html) for more details.
## Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Please use `npm run commit` to standardize commits nomenclature.
## License
This project is licensed under the [GNU Affero General Public License v3.0 or later](https://www.gnu.org/licenses/agpl-3.0.html). See the [LICENSE](./LICENSE) file for details.