Develop Web Applications The Way You Like!
Cargo focuses on best in class development experience. The right abstraction of helpful features and freedom for flexibility, are the core principles of Cargo. — Together with Deno as a runtime and Typescript, you get the right toolbox to deliver fast and secure applications, right from the beginning.
Heads up! Cargo is currently in development.
It's not ready for production use yet. There are still some things to do, until version 1 is released. Public APIs need to be fixed and all features need to be tested.
But you can help, take a test ride and give feedback.
Expandable For Your Needs
Cargo Core
Flexible and adaptable core framework for web applications and services.
Preview
Cargo Inspect
Schema definition and validation with meaningful error infomation.
Beta
Cargo Auth
Auth framework based on strategies inspired by Passport
Beta
Cargo Parcel
Server side rendering and dynamic frontend components with JSX.
Beta
Cargo Load
Command Line Interface for managing Cargo applications.
Beta
Cargo Pick
Transform and handle Promise results.
In development
Cargo Assemble
Dependency injection and management for your Cargo application
Coming soon
Cargo Depot
ORM integration for your Cargo application based on Prisma.
Coming soon
From Zero to Hello world!
The following example assumes that a current Deno version is installed on the system. The complete example can be viewed and downloaded from the Examples.
Register Route and Request Handler
Routes can be easily created and registered, in the application, with the route creation functions: Get()
, Post()
, Put()
, Patch()
and Delete()
These functions accept a path segment and a route handler function as parameters. The handler function receives the current request context as an input.
Return Response
As soon all tasks in the request handler are finished a Response()
should be returned to the client.
Cargo uses the official Web APIs where possible. The Response()
object is one example. More detailed information can be found in the Web API documentation
Apply middleware functions
Optionally multiple middleware can be applied. Middleware allows to do tasks before and after the route handler is executed.
Bootstrap and Run the Application
Last but not least, the application is ready for bootstrapping and can be started with the run()
function.
In the terminal start the application with deno run --allow-net --allow-read hello-world.ts
import { bootstrap } from "https://deno.land/x/cargo/mod.ts";
import { Get } from "https://deno.land/x/cargo/http/mod.ts";
import { logTimeToResponse } from "https://deno.land/x/cargo/middleware/mod.ts";
interface MessageParams {
message: string;
}
/*
* 1. Register Route and Request Handler
*/
Get("/:message", ({ params }) => {
/*
* 2. Return Response
*/
return new Response((<MessageParams>params).message);
})
/*
* 3. Apply middleware functions (optional)
*/
.middleware(logTimeToResponse);
/*
* 4. Bootstrap and Run the Application
*/
(await bootstrap()).run();
Included in the gift box
Flexible Route Handling
Routes can easily be registered in code with the route creation functions or auto-loaded from the /routes
directory.
Organise Routes with Groups
Routes can be organised with Group()
. This allows to prepend routes with path segment and apply middleware functions.
Transform with Middleware
Transform requests with middleware and apply tasks before or after route handling. Ideal for Auth, Validation and more.
Authentication with a Breeze
Secure endpoints and apply existing or custom strategies such as JWT, OAuth2, Password and more.
Secure Input Validation
Create schemas to automatically validate incoming request data, with meaningful error messages.
Automated Body Parsing
Cargo takes care of converting and parsing incoming request body data into the right type.
Dependency Injection Container
Simplify application dependency management with inversion of control and a configurable DI container. (Coming soon)
And more Feature to Come
- Dynamic frontend components with JSX
- Reliable config service
- Realtime web-streams out of the box
- ORM with support for migrations