Skip to main content

Made for developers who are obsessed with simplicity and maximum 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
Deno http 1.2.0 16932.8 100.0%
Node http 14.3.0 16100.4 95.1%
Fastro 0.13.14 14745.8 87.1%
Fastify 3.0.2 14012.2 82.8%
Oak 6.0.0 12744.2 75.3%
Express 4.17.1 6759.5 39.9%
PHP 7.3.11 3992.3 23.6%
Python Flask 1.1.2 425.5 2.5%

How to use

This module uses the git release. The latest version url is:

https://raw.githubusercontent.com/fastrodev/fastro/v0.13.14/mod.ts

If you don’t use the version, just follow the sample code. This uses the master branch.

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

Breaking changes may be made without warning. So, run this command to reload the latest code and try directly.

deno run --reload --allow-net https://fastro.dev/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);
});

Since v0.13.8, it has supported multipart/form-data & application/x-www-form-urlencoded. So you can directly get payload from posting files. Check this file to see the example of usage.

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);