Getting started

Your first Qino app

Let's make one small thing work: a URL that replies with JSON. You only need Deno and one file. No account, CMS setup or separate database server is required.

This guide uses Deno. If you prefer Bun or Node, see Choose a runtime.

1. Install Qino

In a new folder, run:

sh
mkdir hello-qino
cd hello-qino
deno add jsr:@qino/qino@^0.7

2. Create one file

Create server.ts:

ts
import { Access, App, sys } from "@qino/qino";

const app = new App();

app.apiTree = {
  hello: {
    get: {
      description: "Say hello",
      access: Access.PUBLIC,
      execute: () => ({ message: "Hello from Qino" }),
    },
  },
};

await app.init();
sys.serve({ port: 8080 }, app.fetch);

You can copy the entire example. hello names the URL, get handles a browser request, and Access.PUBLIC lets you try it without signing in.

3. Start the server

sh
deno run --allow-all server.ts

Leave that terminal open. In your browser, visit localhost:8080/api/hello. You should see:

json
{"message":"Hello from Qino"}

That's your first Qino endpoint. The local example uses --allow-all to give the server the permissions it needs; you can narrow permissions for a deployed app.

What happened?

  • new App() creates the application. SQLite works without a separate database setup.
  • app.apiTree says which URL does what.
  • app.init() prepares the app; sys.serve() starts the server.

Pick your next step

The code follows the Qino README.