An extensible graph based knowledge store.
- Vim based plain-text file UI.
- Fuzzy search.
- No syntax.
- Multi-parent nodes.
- End-to-end encryption.
- Syncing with Git.
- Realtime sync using Firebase.
- Robust conflict resolution.
- Automated backups.
-
- Uses recommended config for best experience.
- It may take a couple of minutes to load if not used by someone recently.
- After startup click on Terminal in the middle.
-
Install locally
- Add
Plug 'tejasvi/qualia'
to Vim config and then restart. - Do
:PlugInstall|UpdateRemotePlugins
. - Run with
vi .q.md
or:e .q.md
. - Shortcuts use
<Leader>
which is assumed to beSpace
in the readme.
- Add
File name corresponds to a specific node. The node descendants are displayed in form of nested list under the current node's content.
Current node content.
Can contain multiple lines.
* First child content.
[Image](https://i.imgur.com/6O265V5.jpg)
* Second child content
* Further descendants can be displayed.
```
print("Second child's child")
```
What is Vim?
Vim is a text editor with a "normal" mode and an editing mode. Cursor movement and scrolling can be done with mouse.
i to start editing.
Esc to switch back to "normal" mode.
Ctrl+o to go to last location.
yy to copy current line.
p to paste below current line.
<< and >> to indent left and right.
Following shortcuts apply to the node under cursor.
Action | Shortcut |
---|---|
Toggle descendants | Spacej |
Hoist node | Spacek |
Invert links (transpose) | Spacel |
To add a child node, create a list item. To duplicate a node, copy and paste the node content lines. To unlink, delete the lines.
How it works?
Each node line contains a unique identifier concealed using Vim's :h conceal
. To toggle identifier visibility press co.
- Files are used for displaying content instead of storing.
- File names are "pointers" to nodes and file path is irrelevant.
E.g. Node "a" can be opened withvi a.q.md
from anywhere. - Spacep to toggle parsing of buffer changes. Useful during advanced node manipulation.
- Space/ to fuzzy search nodes containing specific term and Space? to fuzzy search all nodes.
- SpaceL to open inverted connection graph and SpaceK to hoist node in a new buffer.
:ListOrphans
to list unaccessible nodes not linked by others.:RemoveOrphans
to delete orphan nodes.- The node connections form directed cyclic graph with ordered vertices.
- See config.py for advanced configuration.
- Qualia is currently sparse on documentation due to planned decentralized community support.
Comparison with existing tools
- Limited markdown syntax.
- Node can not be simultaneously expanded and collapsed at different locations.
- Ancestor node can not be added as a descendant.
- Does not support multi-line content in a node.
- Limited node graph manipulation capabilities.
- No E2E encryption during sync.
- Vim _emulation_ vs Vim.
- Not markdown.
- Not keyboard-centric.
- Paid and closed-source.
- Data loss possible during sync conflict resolution.
- Limited node graph manipulation capabilities.
- Multi-line notes are second-class.
- No E2E encryption during sync.
- Paid and closed-source.
- Not markdown.
- Not key-board centric.
- Limited node graph manipulation capabilities.
- Extremely slow UI.
- No E2E encryption during sync.
- Data loss possible during sync conflict resolution.
- Closed-source.
- Transclusion only in preview mode.
- Not keyboard-centric.
- UX suitable only for multi-line notes.
- Limited node graph manipulation capabilities.