Isabelle is a Rust-based framework for building safe and performant servers for the variety of use cases.
- Unified item storage with addition, editing and deletion support.
- Collection hooks allowing plugins to do additional checks or synchronization.
- Security checks.
- E-Mail sending support.
- Google Calendar integration.
- Login/logout functionality.
- One-time password support.
- Self-describing HTTP API: an OpenAPI 3.1 document generated from the running deployment, plugin routes included.
The full HTTP surface of a running deployment is described by an OpenAPI 3.1 document the server generates on request:
GET /openapi.json— the document itself.GET /docs— the same thing rendered as a static page (no scripts, no external assets, works offline).
Both are public. A description is not a credential: every endpoint it names
still authenticates its own callers, so publishing it opens nothing. It does
say which plugin routes exist and which collections the store holds — a
deployment that would rather not publish that starts core with
--openapi-private, which serves both to administrators only.
It is generated rather than committed because half of the surface only exists
at runtime: each extra_route / extra_unprotected_route /
extra_rest_route in internals.js becomes a real path at startup, and the
collection parameter is constrained to the collections the store actually
holds. The short list below covers the endpoints core itself always has.
- GET /is_logged_in: check the login status.
Result:
{
"username": "<username>",
"id": <user id>,
"role": [ "role_is_admin" ],
"site_name": "Test",
"site_logo": "Test Logo"
"licensed_to": "Test Company"
}- POST /login (username, password inside the post request):
{
"succeeded": true/false,
"error": "detailed error",
}-
POST /logout:
-
GET /itm/list (collection, [id], [id_min], [id_max], [skip], [limit], [sort_key], [filter]): read the item from the collection
{
"map": [ <id>: {} ],
"total_count": <value>
}- POST /itm/edit ("item" inside the post request and inside the query string, "collection" and "merge" = false/true in query): edit the item in collection.
{
"succeeded": true/false,
"error": "detailed error",
}- POST /itm/del (collection, id): delete the item from the collection
{
"succeeded": true/false,
"error": "detailed error",
}- Python 3 is needed for Google Calendar integration
Building Isabelle is as easy as Cargo invocation:
cargo buildUse run.sh script:
./run.shMIT