Skip to content
henrikogaardPublic

About

A quiet, native Markdown workspace in Rust — plain files, linked graph, frontmatter databases, reviewable AI edits.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Rísta app icon

Rísta

A quiet place for your notes.

A native Markdown workspace for writing, organising, and thinking with your own files.

Download for macOS · Documentation · Design system · MIT license


Rísta with a project brief in split view, its local graph, and an agent proposing a reviewable change

Write in Markdown, see how notes connect, and review every change an agent proposes before it lands.

Rísta turns a folder of Markdown files into a calm, fast workspace. Folders become pages, notes link into a graph, frontmatter becomes databases, and an agent can help with your writing — without your notes ever leaving ordinary files on disk.

It is a native app written in Rust, not a web page in a window, and it follows the look and feel of the Mac.

Why Rísta

  • Your files, always. Notes are plain .md files, properties are YAML frontmatter, images sit next to your notes. No database, no lock-in, no account.
  • Native and quiet. Compact controls, paired light and dark palettes, and no visual noise between you and the page.
  • Organised by folders, not by rules. Every folder is a living page that shows what is inside it — subfolders, pinned notes, tasks, and databases.
  • Reviewable agent edits. Writes requested through ACP are shown as diffs for you to accept or reject. Agent tools may also modify files directly.
  • Private by default. No cloud sync, no telemetry, no sign-in.

Features

Write in Markdown, beautifully

  • Source, live preview, or both side by side (⌘1 / ⌘2 / ⌘3), with the preview following your place as you write.
  • Cover images, image embeds, callouts, tables, task lists, and note icons such as :LiInbox: — all from standard Markdown.
  • An outline for every note, link and image completion with [[ and ![[, and gentle warnings for links that point nowhere.
  • Tabs that behave like a code editor's: single-click to preview, double-click or start typing to keep it open.
  • Autosave, session restore, local page history, and a zen mode for focused writing.

Folders that feel like pages

A folder dashboard with pinned notes, project folders, filters, and open tasks

Every folder is a page: pinned notes, subfolders, filters, and open tasks, all read from plain files.

  • Click a folder to open its dashboard: an introduction written in Markdown, pinned notes, subfolder cards, notes, databases, and open tasks.
  • Switch between List, Cards, and Gallery, search inside the folder, filter by tag or status, and sort by name or recent edits.
  • Prefer a plain view? Files shows a compact Name / Type / Modified / Size table.
  • Turn on Show non-Markdown files to browse images, PDFs, and other files alongside your notes, with previews and Open in default app.
  • Layout and pins are stored in the folder's own Markdown frontmatter, so they travel with your vault.

Notes that connect

  • Wikilinks, aliases, note embeds, backlinks, outgoing links, and tags.
  • A local graph docked beside your note that follows you from page to page, plus a full vault graph (⌘G) with search, zoom, and drag.
  • A right-hand inspector for properties, outline, links, tasks, and calendar.

Databases from your own files

  • A .base file turns notes and their frontmatter into a table, cards, a board, or a calendar.
  • Filters, formulas, relations, and rollups — with every value still living in the notes themselves.

An agent that works with you

  • Open the Agent panel next to your note. The active note is attached as context automatically; add more files or folders when you need them.
  • Responses stream in as they are written, with clear steps for each action.
  • ACP-requested file writes arrive as a diff you Accept or Reject. Accepted edits to open notes go through the editor, so autosave and conflict checks still apply. This review does not cover changes made directly by an agent or its tools.
  • Five presets launch ACP adapters: Vibe (vibe-acp), Codex (codex-acp), Claude (claude-agent-acp), OpenCode (opencode acp), and Grok via OpenCode. Install tools separately: Vibe uses uv tool install mistral-vibe; Codex uses npm install -g @agentclientprotocol/codex-acp; Claude uses npm install -g @agentclientprotocol/claude-agent-acp (Node.js 22+); OpenCode and Grok use npm install -g opencode-ai. Complete sign-in in each tool (codex login for Codex; opencode auth login for OpenCode). For Grok, configure xAI access in OpenCode and choose an advertised xai/ model.
  • Adapters and providers are not bundled. Rísta does not install or authenticate them; credentials remain with each tool. On macOS, agent processes receive the app PATH plus existing common install directories, not shell startup configuration. NVM and other custom shell paths may require an absolute executable path in a custom manifest.
  • Works with agents that speak the open Agent Client Protocol. Add custom agents in a small JSON file. See extensions and agents.

A real terminal, inside your vault

  • A native terminal with independent tabs that look just like your page tabs.
  • Right-click any folder → Open terminal here.
  • Uses your own shell, prompt, and configuration — nothing is rewritten.
  • Add your own commands and tool launchers with reloadable JSON extensions, then run them on any file or folder from Tools here….

Make it yours

  • Independent light and dark palettes — Graphite (default), Slate, Fjord, Rose, Mono, Gruvbox, Nord, Solarized, and Catppuccin — each with its own accent colour.
  • Create theme… exports the active palette as JSON; edit it, reload, done. See custom palettes.
  • Adjustable fonts and sizes for the editor, interface, and terminal.
  • Navigation available in English and Norwegian.

Get Rísta

Download the latest release for macOS 13+ on Apple Silicon. Releases are signed with Developer ID, notarized by Apple, and include signed automatic updates.

macOS is the primary, tested platform. Linux and Windows are planned but not yet verified. See the roadmap and limitations.

On Linux, Rísta draws with Vulkan. Without a Vulkan driver it starts but never opens a window. Most desktops have one; on Debian and Ubuntu, mesa-vulkan-drivers provides it (including a software renderer for machines without a GPU).

A desktop entry lets GNOME and other desktops show Rísta's name and icon. With rista on your PATH (desktops read PATH at login), install it for your user:

install -Dm644 linux/no.ogard.rista.desktop ~/.local/share/applications/no.ogard.rista.desktop
install -Dm644 public/icon.svg ~/.local/share/icons/hicolor/scalable/apps/no.ogard.rista.svg

Updating from v0.1.0–v0.1.2: quit Rísta and rename the app to Rista.app in Finder before updating, or install the latest DMG and remove the old copy. Later versions do not need this step.

Your first page

Choose Open File (⌘O) for a standalone document, or Open Folder (⌘⇧O) for a vault: a normal folder of notes and attachments.

Folder names open live dashboards; the disclosure chevrons expand or collapse the sidebar independently. Each dashboard lists its immediate folders, notes, and databases. Enable Show non-Markdown files in Settings to include images and other files, with file-type sorting, read-only text/image previews, and default-app opening. macOS also offers Quick Look for supported formats such as PDF. See other-file previews. Use Home, breadcrumbs, or Back/Forward to navigate. An optional <folder>/<folder>.md introduction (or README.md fallback) supports Markdown and local images, including frontmatter covers. Edit introduction opens the ordinary Markdown file; no separate dashboard format is created.

The titlebar inspector button shows or hides properties, outline, links, tasks, calendar, and tags on the right. Settings preserve the inspector and active folder. New navigation labels support English and Norwegian through Navigation language in Settings; translation of older app-wide controls is not yet complete.

Single-click a file in the tree to browse in a reusable italic preview tab. Double-click the file or tab to keep it; editing keeps it automatically. Cmd-click opens a separate tab. Unsaved, conflicted, and pinned notes are never replaced by browsing.

Personalise notes and colours

  • Use :LiInbox: or :lucide-inbox: in headings and prose for bundled note icons. Unknown icons stay readable as text; Markdown source stays unchanged.
  • Settings → Properties controls whether frontmatter starts expanded, collapsed, or hidden. The inspector still provides editing when hidden.
  • Choose independent light and dark palettes: Graphite (default), Slate, Fjord, Rose, Mono, Gruvbox, Nord, Solarized, or Catppuccin.
  • Create theme… copies the active palette to an editable JSON file. Edit the colours, choose Reload themes, then select your palette. See custom palette documentation. Finder’s Open With → Rísta also opens .md and .markdown files.

Use Split (⌘2) to see how a note renders. With cover.jpg next to your note, try:

---
title: Field notes
cover: cover.jpg
banner_y: 50
status: Draft
---

# A little room to think

Ideas become clearer when you write them down.

> [!note] Keep it simple
> Start with one page, then connect it to [[Tomorrow]].

![A detail worth remembering](cover.jpg)

For a small database, create Notes.base inside your vault:

filters:
  and:
    - 'file.ext == "md"'
views:
  - type: table
    name: Notes
    order:
      - file.name
      - status

Open it from the file tree. Rows come from your notes; properties remain in their frontmatter. .base implements a supported expression/view subset, not a promise of complete compatibility with other tools.

Keyboard essentials

Action macOS
New note / Open file / Open folder ⌘N / ⌘O / ⌘⇧O
Save / Save as ⌘S / ⌘⇧S
Source / Split / Preview ⌘1 / ⌘2 / ⌘3
Find / Search vault ⌘F / ⌘⇧F
Command palette ⌘K
Quick open file/folder ⌘P
Toggle sidebar / Zen mode ⌘B / ⌘⇧Enter
Daily note / Graph ⌘⇧D / ⌘G
Settings ⌘,

Build from source

On macOS, install a stable Rust toolchain and Xcode Command Line Tools (xcode-select --install), then:

git clone https://github.com/henrikogaard/rista.git
cd rista
cargo run
# Or open a file/folder at launch:
cargo run -- /absolute/path/to/notes

cargo build --release produces a binary, not an installable app bundle. See the release checklist for macOS packaging and Sparkle signing. A normal cargo run does not need Sparkle.

Before submitting a change:

cargo fmt --check
cargo clippy
cargo test

Read AGENTS.md for code conventions and the architecture guide for the module map. Use the manual QA checklist for user-facing changes.

Storage and safety

Notes, attachments, and .base definitions live in your own folder. Vault history and trash live under .rista/. Settings and session state live in ~/Library/Application Support/no.ogard.rista/settings.json on macOS.

Rísta checks for external changes before saving and stops on conflicts rather than silently overwriting them. History is not a backup: keep independent backups, especially while using an early release.

License

MIT · Copyright (c) 2026 Henrik Øgård. Dependencies retain their respective licenses.

About

A quiet, native Markdown workspace in Rust — plain files, linked graph, frontmatter databases, reviewable AI edits.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages