Skip to main content

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 Router?
Deno http 1.1.3 15522.4 100.0%
Node http 14.3.0 15218.6 98.0%
Fastro 0.13.3 14356.8 92.5%
Fastify 2.15.1 12346.7 79.5%
Oak 5.2.0 10504.6 67.7%
Abc 1.0.0 10137.5 65.3%
Express 4.17.1 6852.1 44.1%
PHP 7.3.11 5979.4 38.5%
Python Flask 1.1.2 544.2 3.5%

How to use

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

import { Fastro } from "https://raw.githubusercontent.com/fastrodev/fastro/v0.13.3/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.3/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 specific URL to the default request. This is similar to the express middleware.

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

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.3/examples/hello.ts

You can replace above url with these raw urls below.

Simply change RAW_FILE_URL with:

https://raw.githubusercontent.com/fastrodev/fastro/v0.13.3/examples
Title Raw URL
Create hello world app RAW_FILE_URL/hello.ts
Use the basics RAW_FILE_URL/basic.ts
Get url parameter RAW_FILE_URL/basic.ts
Get a payload RAW_FILE_URL/basic.ts
Send results as a file RAW_FILE_URL/basic.ts
Serve static files RAW_FILE_URL/static.ts
Create a middleware RAW_FILE_URL/middleware.ts
Create a plugin RAW_FILE_URL/plugin.ts