A no-frills, offline app for note-taking and databases.
Design principles:
- Offline
- Local files
- Plain text oriented
- Nothing fancy
- Not a feature-for-feature recreation of Notion
To build from source:
- Node.js
- Rust
Commands:
npm start
: build for developmentnpm run build
: build for productionnpm test
: run unit testsnpm run typecheck
: run TypeScript compiler (no emit)
To use the database features of the app, you also need GNU Recutils installed. Specifically, the commands recsel
, recins
and recdel
must be in your PATH.
.rec
files can be displayed as databases. Records can be added, edited, or deleted.
Field metadata is defined with special fields prefixed with a percent sign, like %rec
and %type
. To make databases more robust, Ganymede supports some custom directives. (The recutils parsers will ignore them, even though they aren't technically valid.)
The %body
field defines a field as the content of a page. The field will appear as a multi-line text field in the editor.
%body: Body
The %formula
field defines a field that computes a result based on other fields.
%allowed: Name Cost Is_Annual Monthly_Cost
%type: Cost int
%type: Is_Annual bool
%formula: Monthly_Cost if([Is_Annual], [Cost] / 12, [Cost])
Formulae are parsed with the fparser library, with these additions:
if(cond, ifTrue, ifFalse)
: a conditional functionyear(date)
: return the year of a date
Formulae only operate on numbers, so some field values are converted when accessed:
- A non-empty string is
1
- True is
1
- False is
0
- A Date is its Unix timestamp
MIT © Geoff Kimball