After the first release of TypeMD, the next thing we wanted to tackle was: “what property types are actually supported?” In v0.1.0, the type field existed on properties — but was never formally defined. You could write type: number and things would mostly work, but there was no real contract behind it.
0.2.0 changes that. The core of this release is making TypeMD’s type system something you can actually rely on.
Nine property types, formally defined
Type schemas now support 9 explicit property types:
| Type | Description |
|---|---|
string | Short text |
number | Numeric values |
date | Calendar dates |
datetime | Date and time |
url | Web links |
checkbox | Boolean (yes/no) |
select | Single choice |
multi_select | Multiple choices |
relation | Link to objects of another type |
Here’s what a book type looks like:
name: book
emoji: 📚
properties:
- name: status
type: select
options:
- value: to-read
- value: reading
- value: done
- name: rating
type: number
- name: published
type: date
- name: author
type: relation
target: person
bidirectional: true
inverse: books
With explicit types, validation, migration, and display all get smarter.
Stop repeating yourself: shared properties
If multiple types share the same properties — say, every resource needs tags and favorite — you used to have to define them in each type schema separately. Not anymore.
Define them once in properties/properties.yaml:
properties:
- name: tags
type: multi_select
emoji: 🔖
options:
- value: programming
- value: design
- name: favorite
type: checkbox
emoji: ❤️
Then reference them in any type via use:
properties:
- name: rating
type: number
- use: tags
- use: favorite
Change it in one place, and it applies everywhere.
A TUI that looks like your vault
Emoji (if you want it)
Both types and properties now support an emoji field:
name: book
emoji: 📚
properties:
- name: rating
type: number
emoji: ⭐
Type emoji show up in object list group headers; property emoji appear in the detail panel. Your vault starts to feel like your vault.
A dedicated title bar
When viewing an object, the TUI now shows a title bar at the top with the type emoji and object name. A small change, but it makes a big difference in orientation.
Pin your most important properties
Mark a property with a pin value and it floats to the top of the detail panel in that order. No more scrolling past a wall of fields to find the one you care about:
- name: status
type: select
pin: 1
- name: rating
type: number
pin: 2
Pick up where you left off
Close the TUI and reopen it — cursor position, selected object, and panel state are all restored. The TUI starts feeling less like a viewer and more like a workspace.
Other improvements
nameis now a system property — automatically populated from the object slug. You don’t need to (and can’t) define it manually in type schemas anymore.--readonlyflag — launch the TUI without editing enabled. Handy when you just want to browse without accidentally changing things.--reindexflag — replaces the oldtmd reindexsubcommand. Pass it at startup to force a full index rebuild.- Prefix matching — when referencing objects by ID, a short prefix of the ULID is enough. No need for the full ID.
- Homebrew —
brew install typemd/tap/typemd-cli. The easiest way to install on macOS.
Upgrade
brew upgrade typemd/tap/typemd-cli
Or grab a pre-built binary from GitHub Releases.
What’s next
0.3.0 will focus on the Web UI — a browser-based way to browse your vault without the terminal. Same local-first, file-based foundation, with a graphical interface on top.
If you have any questions or ideas, open an issue — we read them all.