MoreInfo

reference

Glossary of Terms

Glossary of terms

Datastore

The root of MI's data structure. By default, this is ~/Documents/MoreInfo on all platforms. The datastore has a journal folder storing daily journals, and a wiki folder containing more generic pages, and a templates folder containing template pages. The datastore contains scratchpad.md, a file that is not a true 'page' but exists in the ScratchPad Widget and is automatically saved and retrieved like other pages. Also in this datastore is moreinfo.sqlite, an SQLite database built from the content within 'journal' and 'pages' for quicker searching and linking, as well as other pieces of data and metadata that would be cheaper to cache than build from the filesystem. Finally, a preferences.json file contains user preferences, including color/font/theme choices, basic editor configuration like tab stops and spaces vs tabs, export preferences, etc.

Page

A plaintext file within the datastore. All pages are assumed to use Markdown formatting and carry the ".md" extension. Pages are the source of truth for MoreInfo. Pages can be linked within each other to form a wiki-like structure.

Wiki

The 'generic' page that exists within the 'wiki' folder of the datastore. These pages are given a filename upon creation, either from their title or a user-supplied filename. The title (and therefore the filename) is derived based on how the page is created. If the page is created as the result of clicking on a wiki link, that will be the title of the page. A page can also be created by File->New page from the menu, at which point the user is prompted for the title of the page.

Journal

A special type of page that exists within the 'journal' folder of the datastore. These files are named YYYY-MM-DD.md, after a day on the calendar. Up to one journal page can exist for each day. The default startup view of MI is today's journal page. The Calendar widget allows navigation by day, as well as a date picker in the menu under View → Journal.

Template

A special type of page that exists within the 'templates' folder of the datastore. Template pages can be used to quickly create other pages via "File->New from template" in the menu system. A page can be saved as a template via "File->Save as template" in the menu system. Templates retain all metadata and their values, with the exception of 'title,' which the user is prompted for on page creation. Content (non-metadata) within the template page is also retained when creating a page based on the template. Templates are helpful when creating 'categories' of pages; they define common content and metadata for future pages. The 'templates' folder is walked when updating the database only to enumerate the templates available; they are not indexed for search or links, as they don't represent any content themselves.

Metadata

A series of key/value pairs that describe the document in a structured way. Some metadata variables are based on filesystem data by default and can be read-only. Most variables can be set in one of two places: a front block at the very beginning of the file, or a sig block at the very end.

Front block

an optional ------ pair that must begin on the very first line of the file (true front matter, compatible with Obsidian, Jekyll, Hugo, etc.). Any --- line appearing after the front block is treated as a Markdown thematic break (<hr>) and is not parsed as metadata. The variable name and its value are delimited by zero or more spaces, a colon (:), and zero or more spaces (regex \s*:\s*).

Sig block

A final metadata section at the end of a file, introduced by the "email .sig" delimiter — two dashes, followed by a single space, alone on a line — and continuing to the end of the file. The sig block is where MI writes all app-generated metadata (title, favorite flag, etc.).

When the same key appears in both blocks, the sig block wins (it is always last). Variable names are case-insensitive and normalised to lowercase, and both singular and plural forms of a key are accepted and stored under the singular — so tag: and tags: are identical, as are room: and rooms:. Values are case sensitive, though some reserved variables override this (e.g., tag values are case insensitive).

Metadata variables are weakly typed, with four recognized types: string, date (or datetime), boolean, and array.

Metadata string

A variable is defined as a string based on the data after the delimiter (regex \s*:\\s*). If strings are surrounded by single or double quotes, the quotes themselves are not considered part of the string (so string would match 'string' or "string"). If the string can be successfully parsed by "chrono_node," a pulled-in JS library, it is considered a metadata date rather than a string. If the string can be successfully parsed as an array delimited by commas, it is considered a metadata array rather than a string, unless the string is surrounded in quotes. If the string matches one of the metadata boolean values (defined below), it is considered a metadata boolean rather than a string. String values are case sensitive.

Metadata date

A variable is defined as a date based on the data after the delimiter (regex: \s*:\\s*). If the data can be successfully parsed by the JS library "chrono-node," it is considered a Metadata date. This allows not only for date patterns (eg., "YYYY-MM-DD") but also human-parsable relative dates like "tomorrow," "last may," or "1st Tuesday each month."

Metadata boolean

A variable is consider a boolean when its value is one and only one of the following pairs (case insensitive): True/False, T/F, 1/0, Yes/No, Y/N, On/Off. In each case, the former value results to a "TRUE" value and the latter to "FALSE."

Metadata array

A variable is defined as an array based on the data after the delimiter (regex: \s*:\\s*). If the data can be parsed into an array delimited by commas, it is considered a metadata array. While spaces around the commas are considered part of the delimiter, spaces not around the commas are considered significant to the element of the array. For example, the metadata tags: tag one, two, three is exploded into the array named tags consisting of three elements: ['tag one', 'two', 'three'].

Three syntaxes produce identical results: tags: one, two, three, tags: [one, two, three], and tags: ["one", "two", "three"]. The bracket form (with or without quotes) is accepted for readability. To store a value as a string rather than an array despite containing a comma, wrap it in quotes: note: "one, two, three".

Wiki link

Pages are linked across other pages through their titles or aliases. When a word or phrase is surrounded in double-square brackets ("[[]]"), that is treated as a link to a page with that title. When clicking on a wiki link, the user is either taken to the page with that title, or a new active document is created with that title. Also supported is using "CamelCase" to create a link to a page titled "Camel Case," but CamelCase cannot create new pages. UI in the active document area allows for breadcrumb navigation back through previous links. Explicit wiki links to journal pages can also be created, using [[YYYY-MM-DD]] format. As with wiki pages, journal pages can be created if they do not previously exist.

Backlink

Pages that have links to them will show those links in the ReferencesWidget. There are two types of backlinks: "Linked References" include any explicit link (ie., bracketed wiki links) link to the page. "Unlinked References" include any time the title of the page exists in a full-text search of all wiki pages or journal pages (but not templates). Each reference found is enumerated in the appropriate section as bottom-matter on the page.

Linked Reference

An explicit link to a page, by including the title of the page within double-square brackets. Linked References create a 'two-way' link between pages: A click on the reference to get to the page, and a click on the "Linked References" in the ReferencesWidget to go to the previous page.

Unlinked Reference

Any instance of the title or any alias of a page included in a full-text search of all content. Unlinked References create a 'one-way' link between pages. The unlinked reference will show in the References Widget, but because there was no explicit link given in the text, there is no link back to the implicitly referenced page.

Task

Pages can be littered with tasks, which are a newline started by either [], or - [], with an optional space between the single-square brackets. Tasks adhere loosely to the todotxt and TaskPaper formats, with allowances for Markdown, and some additional reserved parameters. Task management is a major feature of MI and is documented in its own "TASK MANAGEMENT.md" file.

Annotation

Text can be annotated by typing an allowed annotated marker in all caps then continuing the annotation to the end of the line. Annotations are simple markers for remembering, documenting, planning, etc., where a "task" is too heavy and specific. Annotations allow you to save something for later. Annotation keywords are TODO, FIXME, NOTE, and IDEA. Users can add their own annotation keywords, and annotations can be discovered through the AnnotationsWidget, and can be a filter in SearchWidget.