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:
mkdir hello-qino
cd hello-qino
deno add jsr:@qino/qino@^0.7
2. Create one file
Create server.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
deno run --allow-all server.ts
Leave that terminal open. In your browser, visit localhost:8080/api/hello. You should see:
{"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.apiTreesays which URL does what.app.init()prepares the app;sys.serve()starts the server.
Pick your next step
- Add another API action if you are building an API.
- Start an editable website if you want Qino's CMS.
- Create your first module when you want to keep a feature separate.
The code follows the Qino README.