Skip to main content

First app walkthrough

This page goes from an empty install to a working app — a sidebar entry that opens a grid on a table, with an edit dialog. Everything is done from Settings (superuser), nothing is edited by hand.

Four elements, in order — pool → connector → screen → menu — each saved and applied at once.


At a glance​

From empty install to a usable sidebar entry — four steps1 · POOLdatabase connection2 · CONNECTORnamed SQL queries3 · SCREENgrid + edit dialog4 · MENUsidebar entry

The example uses the default pool and a small tasks table.


Step 1 — The pool​

Open Liberty Next → Administer → Pools. The installation created the default pool: on a Docker install it points at the bundled PostgreSQL database, on a Python install without PostgreSQL at a local SQLite file. It is enough for this walkthrough. To work on another database, add a pool with its URL — see Connectors.

Create the example table with any SQL client connected to that database:

CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
title VARCHAR(200) NOT NULL,
status VARCHAR(10) NOT NULL DEFAULT 'open',
due_date DATE
);
INSERT INTO tasks (id, title, status, due_date) VALUES
(1, 'Draft sprint plan', 'open', '2026-06-10'),
(2, 'Review pull request 42', 'done', '2026-06-05'),
(3, 'Customer follow-up', 'open', '2026-06-12');

Step 2 — The connector and its queries​

  1. Liberty Next → Build → Connectors → + Connector: name tasks, type SQL, pool default. Save.
  2. With tasks selected, choose Tables in the mode bar, then + Add queries → Generate from DB.
  3. In the CRUD wizard, pick the tasks table, keep every column, tick key on ID, and keep the four statements (SELECT, UPDATE, INSERT, DELETE).
  4. Save. The connector now holds tasks_get, tasks_put, tasks_post and tasks_delete:
SELECT ID, TITLE, STATUS, DUE_DATE FROM tasks
UPDATE tasks SET TITLE = :TITLE, STATUS = :STATUS, DUE_DATE = :DUE_DATE WHERE ID = :ID_ORIGINAL

The columns are read from the database when the query runs; nothing else needs declaring. See Create from a database table.


Step 3 — The screen​

  1. Liberty Next → Build → Screens → + Add scope, pick tasks: the tasks chip appears.
  2. + Add screen, id tasks. Click the new card to open the screen editor.
  3. General tab: label Tasks; check Editable for in-grid editing.
  4. Queries tab: read tasks_get, update tasks_put, insert tasks_post, delete tasks_delete.
  5. Dialog tab: drag the columns onto the form.
  6. Save.

The grid columns come from the read query; their labels and formats from the dictionary when entries exist (its Scan a table button proposes them). The Screen Creation Assistant does steps 2 and 3 in one pass for a table.


  1. Liberty Next → Build → Menus → + Add scope, pick tasks: the empty tree of the app appears.
  2. + Item, then in the inspector: label Tasks, type screen, target tasks_get (the screen built on it), icon table.
  3. Save.

Since tasks now has a menu, it is an app: it appears in the app picker, and its sidebar shows Tasks. A click opens the grid: a row opens the edit dialog, + Add an empty one. See Build the tree and Make a connector an app.


What you have now​

  • A pool — the database connection.
  • A connector — the four queries on the table.
  • A screen — the grid and the dialog on these queries.
  • A menu — the entry that opens the screen, which makes the connector an app.

Every save was applied without a restart. The pool and the connector are stored in connectors.toml, the screen in screens.toml, the menu in menus.toml.


What's next​