fastro

ci

Fastro is web framework for developers who are obsessed with simplicity & performance. It is inspired by Express & Fastify.

Check these benchmarks to compare its speed with others.

After refactoring, these features will be released in the next version:

  • Dependency injection
  • Command line interface (CLI)
  • Cloud function

Table of contents

Benchmarks

Go to this folder to check detailed methods & results.

Framework Version Requests/s Percentage
Node http 14.3.0 14171.7 100.0%
Deno http 1.1.3 13640.8 96.3%
Fastro 0.13.6 13050.8 92.1%
Fastify 2.15.1 11660.4 82.3%
Oak 5.2.0 9612.9 67.8%
Abc 1.0.0 9049.6 63.9%
PHP 7.3.11 6204.9 43.8%
Express 4.17.1 4700.2 33.2%
Python Flask 1.1.2 475.3 3.4%

How to use

This module uses the git release. If you do not use the version, simply change v0.13.6 to master branch. Breaking changes may be made without warning.

import { Fastro } from "https://raw.githubusercontent.com/fastrodev/fastro/v0.13.6/mod.ts";
const server = new Fastro();
server.get("/", (req) => req.send("root"));
await server.listen();

Run this command to try directly:

deno run --allow-net https://raw.githubusercontent.com/fastrodev/fastro/v0.13.6/examples/hello.ts

Server Options

Server options are used to enable the use of payload, logger, and static files.

Static Files

You can enable the use of static files by defining the server option to {static: true}.

const server = new Fastro({ static: true });
server.static("public")

Payload

You can enable the use of payload by defining the server option to {payload: true}.

const server = new Fastro({ payload: true });
server.post("/hello", (req) => {
  const payload = req.payload;
  req.send(payload);
});

Logger

You can enable the use of logger by defining the server option to {logger: true}.

const server = new Fastro({ logger: true });

You can also enable all server options at once:

const server = new Fastro({ payload: true, static: true, logger: true });

Middleware

You can add new properties or functions for global or specific URL to the default request. This is similar to the express middleware.

const middleware = (req: Request) => {
  req.root = () => req.send("root");
};

server
  .use(middleware)
  .get("/", (req) => req.root());

Plugin

You can add new properties or functions to the fastro instance. You can also use all default instance functions, create routes & middleware. This is similar to the fastify plugin.

const routes = function (fastro: Fastro, done: Function) {
  fastro
    .get("/", (req) => req.send("root"))
    .post("/", (req) => req.send("post"))
    .put("/", (req) => req.send("put"))
    .delete("/", (req) => req.send("delete"));
  done();
};

server.register(routes);

Examples

Run this command to try directly:

deno run -A https://raw.githubusercontent.com/fastrodev/fastro/v0.13.6/examples/hello.ts

You can replace above url with this raw url:

https://raw.githubusercontent.com/fastrodev/fastro/v0.13.6/examples/<FILE>

Simply change <FILE> with one of these:

Title File
Create hello world app hello.ts
Use the basics basic.ts
Get url parameter basic.ts
Get a payload basic.ts
Send results as a file basic.ts
Serve static files static.ts
Create a middleware middleware.ts
Create a plugin plugin.ts