Skip to content

Releases

v1.2.3

Choose a tag to compare

@github-actions github-actions released this 26 Jul 14:55

Full Changelog: v1.2.2...v1.2.3

v1.2.2

Choose a tag to compare

@github-actions github-actions released this 26 Jul 13:48

Full Changelog: v1.2.1...v1.2.2

v1.2.1 — sort: criado para de mentir

Choose a tag to compare

@github-actions github-actions released this 21 Jul 18:39

Correção de uma falha silenciosa no bloco query: sort: criado podia devolver uma ordem errada sem avisar.

Era o único lugar do app em que uma consulta dava resposta errada, em vez de vazia ou com aviso. Todo o resto segue a mesma regra — linha que o parser não lê aparece como aviso acima do resultado, consulta sem filtro devolve nada em vez do vault inteiro. Este escapava.

As duas formas de errar

Não existe data de criação no disco que sobreviva a uma sincronização ou a uma cópia, então ela só pode vir de um campo created: (ou criado:) que você escreve — e era comparada como texto.

Nenhuma nota declara o campo. Todos os valores viram string vazia, todas as comparações empatam, e como a ordenação do JavaScript é estável o resultado sai na ordem de varredura do vault. Não é aleatório nem alfabético: é arbitrário, e parece ordenado.

A data não está em ISO. 03/01/2026 vinha antes de 21/07/2025, porque 0 < 2 no primeiro caractere. Ordena por dia, depois por mês, e o ano nunca chega a pesar. Num vault misto o efeito é pior: as notas sem data se agrupam num extremo e a lista fica parcialmente ordenada, que é a aparência mais convincente possível de um resultado correto.

O que mudou

Os dois casos agora aparecem como aviso acima da lista, na mesma caixa que uma linha ilegível já usava.

Nada foi adivinhado. Considerei converter DD/MM/AAAA para ISO automaticamente e recusei: 03/01/2026 é 3 de janeiro para metade do mundo e 1º de março para a outra metade. Converter trocaria um erro visível — assim que você olha — por um invisível. A regra desta base é a oposta: quem não consegue fazer o trabalho, diz.

Use AAAA-MM-DD. É a forma suportada porque ordem alfabética em ISO 8601 coincide com ordem cronológica — foi para isso que o formato foi desenhado. Isso está fixado em teste, não presumido.

A ajuda (nas 3 locales), o README e o template de exemplo deixavam de mencionar essa exigência. Corrigidos.

Nenhuma outra ordenação é afetada: titulo, modificado e caminho continuam idênticos.

Downloads

Windows OpenObsidian.Setup.1.2.1.exe
macOS (Apple Silicon) OpenObsidian-1.2.1-arm64.dmg
macOS (Intel) OpenObsidian-1.2.1.dmg
Linux .AppImage e .deb

418 testes.

v1.2.0 — Preencher o bloco, não só inserir

Choose a tag to compare

@github-actions github-actions released this 21 Jul 18:03

A 1.1.0 tornou as features visíveis. Esta versão trata do passo seguinte: você encontra o /query, insere, e fica olhando para um tag: em branco sem lembrar como a tag se chamava.

Autocomplete de tag no #

O editor tinha duas formas de completar, [[ para notas e / para comandos. Faltava a terceira, e era a que mais importava: o vault sabe exatamente quais tags existem e quantas notas cada uma tem — essa informação alimenta a faixa de tags da barra lateral desde sempre, e nunca era oferecida na hora de escrever.

Digite # e as primeiras letras. As tags aparecem ordenadas por uso, com a contagem de notas ao lado.

Isso importa mais do que parece: uma tag digitada errado não dá erro. Ela cria em silêncio uma tag nova com uma nota só dentro, e a nota some do índice que deveria listá-la. A contagem ao lado de cada sugestão também denuncia isso — uma tag com 1 nota ao lado de uma com 40 é quase sempre um dedo trocado.

Funciona em qualquer lugar: na linha de tags sob o título, dentro de um callout, e dentro do bloco query — tag: #cardio é lido igual a tag: cardio.

/indice

Insere o esqueleto de um índice: duas seções com cabeçalho e bloco, o cursor já na primeira tag. A linha de dica dentro do bloco lista os campos aceitos e não atrapalha, porque uma linha começando com # já era comentário para o parser.

## Seção

```query
# campos: tag, path, has, sort, limit — linha começando com # é comentário
tag: 
sort: titulo
```

Exemplo pronto no repositório

Tem um template completo em examples/templates/Index.md, com uma seção explicando cada campo, o caso de duas condições que se somam, ordenação por data e filtro por campo de frontmatter. Salve como _templates/Index.md no seu vault e o Ctrl+N passa a oferecê-lo.

Esse arquivo é lido por um teste que passa cada bloco pelo parser de verdade. Exemplo em README que não compila mais é o defeito clássico deste tipo de documentação; aqui ele quebra o CI.

Correção — três comandos com o cursor errado

/card, /query e /queryfield colocavam o cursor no lugar errado, e dois destruíam o próprio trecho que tinham acabado de inserir:

  • /card abria em Questi|on — digitar a pergunta produzia Questi<sua pergunta>on
  • /queryfield abria dentro de s|ort — digitar o campo produzia spatologiaort: modificado desc

O teste que existia verificava só que o cursor não saía do trecho, e passava verde nos três. A regra que os encontrou é geral e ficou no lugar: cursor entre dois caracteres de palavra é sempre erro de contagem, porque toda lacuna real fica ao lado de pontuação ou de quebra de linha. Foi ela que achou o /card, que eu não estava procurando.

Se você usou /card na 1.1.0, vale conferir os cartões criados naquela versão.

Downloads

Windows OpenObsidian.Setup.1.2.0.exe
macOS (Apple Silicon) OpenObsidian-1.2.0-arm64.dmg
macOS (Intel) OpenObsidian-1.2.0.dmg
Linux .AppImage e .deb

Nada é assinado. No Windows, o SmartScreen diz "editor desconhecido": Mais informações → Executar assim mesmo. No macOS, botão direito no app → Abrir.

409 testes.

v1.1.0 — Tudo que dá pra inserir, num lugar só

Choose a tag to compare

@github-actions github-actions released this 21 Jul 16:35

O app já sabia fazer flashcards, diagramas do Mermaid, fórmulas, callouts, embeds e blocos query. Nada na interface dizia isso.

O menu + Inserir oferecia 16 coisas — cabeçalho, tabela, negrito, seta para a direita. O autocomplete do / tinha a própria lista, também escrita à mão, também de 16 itens, e as duas já tinham divergido uma da outra. Nenhuma das duas mencionava as features que levaram meses para existir. Na prática, dava para usar um flashcard só se você já soubesse que ele existia e lembrasse da sintaxe.

Esta versão não adiciona nenhuma capacidade nova. Ela mostra as que já estavam lá.

O que mudou

O menu + Inserir agora tem 59 itens, agrupados e com busca. Ele abre com o campo de busca já focado — com 59 entradas, rolar até achar não é uma opção de verdade. Digite flash, mermaid, fórmula, callout; o Enter pega o primeiro resultado. Cada linha traz o ícone, o nome, uma descrição do que a coisa faz e o comando de barra correspondente.

O / no editor lê exatamente a mesma lista. Não existe mais uma segunda lista para divergir.

A ajuda (F1) ganhou uma aba "Inserir". É a referência completa: cada uma das 59 entradas com o trecho exato que ela insere — dá para ler a sintaxe de um flashcard ou de um fluxograma sem inserir nada. No fim da aba, quais formatos o app abre (.md, .pdf, .docx, .odt, .epub, imagens), importa (.apkg, .txt/.tsv/.csv do Anki) e exporta (.html, .pdf, .txt do Anki).

Alguns exemplos do que estava escondido

Flashcard, que entra na revisão espaçada automaticamente:

> [!card]- Qual é a pergunta?
> Esta é a resposta.

Cartão com lacunas — cada ==destaque== vira um cartão:

> [!card] Ciclo de Krebs
> Ocorre na ==matriz mitocondrial== e gera ==2 ATP== por volta.

Fluxograma:

```mermaid
flowchart TD
  A[Início] --> B{Decisão}
  B -->|sim| C[Resultado]
  B -->|não| A
```

Lista viva de notas por tag:

```query
tag: cardiologia
sort: modificado desc
limit: 20
```

Tudo isso já funcionava na 1.0. Agora está a um / de distância.

Detalhes

  • /date e /time são calculados no momento da inserção. Antes vinham de uma constante de módulo, o que dava a data em que o app tinha sido aberto — um app deixado aberto a semana inteira inseria segunda-feira na sexta.
  • Os trechos dos cartões são testados contra o que o extrator de flashcards realmente lê, então o menu não pode oferecer um cartão que o app depois ignora.
  • Traduzido nas três locales (português, inglês, espanhol).
  • 377 testes verdes.

Downloads

Windows OpenObsidian.Setup.1.1.0.exe
macOS (Apple Silicon) OpenObsidian-1.1.0-arm64.dmg
macOS (Intel) OpenObsidian-1.1.0.dmg
Linux .AppImage e .deb

Nada é assinado. No Windows, o SmartScreen diz "editor desconhecido": Mais informações → Executar assim mesmo. No macOS, botão direito no app → Abrir.

v1.0.1 — Agora com macOS

Choose a tag to compare

@github-actions github-actions released this 21 Jul 16:03

A mesma 1.0.0, agora com os instaladores de macOS que estavam faltando.

O build para macOS entrou no CI depois de a 1.0.0 já estar publicada, então aquela release saiu só com Windows e Linux — enquanto o README já anunciava .dmg para Apple Silicon e Intel. Esta versão cumpre o que estava escrito.

Sem nenhuma mudança de código. Se você já está na 1.0.0 no Windows ou no Linux, não há motivo para atualizar.

Downloads

Windows OpenObsidian.Setup.1.0.1.exe
macOS (Apple Silicon) OpenObsidian-1.0.1-arm64.dmg
macOS (Intel) OpenObsidian-1.0.1.dmg
Linux .AppImage e .deb

Sobre o macOS

Os .dmg não são assinados nem notarizados, então o Gatekeeper vai bloquear na primeira abertura — e a mensagem dele é mais assustadora do que o problema, chegando a dizer que o app "está danificado" quando é só falta de assinatura.

Para abrir: clique com o botão direito no app → Abrir. Ou, no Terminal:

xattr -dr com.apple.quarantine /Applications/OpenObsidian.app

Estes builds nunca foram executados num Mac — o CI os gera, mas ninguém abriu. Se falharem, abra uma issue.

v1.0.0 — Notas que não se perdem

Choose a tag to compare

@github-actions github-actions released this 21 Jul 12:05

A knowledge base for Markdown vaults that works offline, keeps your notes as plain files, and does not lose them.

1.0 is not a feature release. Everything visible was already in 0.11.0. What changed is that the last three holes in the write path are closed — and in a notes app, 1.0 is mostly a promise about not losing what you wrote.

What made this 1.0

Notes are never written in place. fs.writeFile empties the target file before the new bytes go in, and auto-save opened that window every 800 ms of typing: a crash or a power cut in it left the note truncated or blank. Content now goes to a hidden staging file and a rename replaces the target, which is atomic on NTFS and ext4. The same applies to the flashcard schedule and to the bulk rewrite a rename performs across dozens of notes at once — the riskiest write in the app.

A failed save is said out loud. It used to be swallowed: you kept typing into something that was not reaching the disk. Now it names the note, says the file on disk is still the previous version, and keeps the unsaved mark on.

A crash leaves a trail. Errors in the main process, unhandled rejections and a dead renderer are appended to crash.log in the app's data folder and reported in a dialog. An error the app survived deliberately does not close the window — that would throw away unsaved text over something recoverable.

What is in 1.0

  • Writing — CodeMirror 6, split/edit/reading views, auto-save, slash commands, paste an image straight into a note
  • Rendering — GFM, Obsidian callouts (nested ones included), Mermaid, KaTeX, ==highlights==, %%private comments%%, YAML frontmatter as a properties strip
  • Linking — [[WikiLinks]] with sections, paths, aliases and ![[embeds]]; renaming a note rewrites the links that point at it, after telling you how many; dead links are visibly dead and listed in a diagnostics panel
  • Finding — search with tag:, path:, file:, exact phrases, exclusions and regex, and nothing truncated in silence; nested tags with accents; Ctrl+F inside the reading view
  • Studying — flashcards written as callouts inside your notes, SM-2 spaced repetition, statistics, and direct .apkg import (media included) with no Anki Desktop
  • The rest — daily notes with a calendar, query blocks, your own templates, .pdf / .docx / .epub / .odt, local or remote AI, community plugins, export to HTML and PDF, and an interface in English, Portuguese and Spanish

Your vault is a folder of .md files. Every feature above degrades into ordinary text in any other editor, and the scheduling data stays out of the notes.

Licence

GNU GPL v3 or later.

Downloads

Windows installer, Linux AppImage and .deb below. Nothing is downloaded on first run — the installer carries everything, including the WASM used by the Anki import and the local-AI native modules.

The Windows installer is not code-signed, so SmartScreen will call the publisher unknown: More info → Run anyway.

v0.11.0 — Índices que não perdem nota em silêncio

Choose a tag to compare

@github-actions github-actions released this 21 Jul 11:39

Mostly repair. One of these had been quietly emptying the vault's indexes for anyone whose notes live in a synced folder.

A note that failed to load disappeared from everything

The content cache feeds backlinks, tags and search. When a file changed outside the app, the watcher dropped its cache entry and re-read it 400 ms later — and if that read failed, the entry was deleted for good. On OneDrive, Google Drive or Dropbox, a read failing now and then is normal, not exceptional. The note simply vanished from backlinks, tags and search, with no error and nothing to notice.

Worse, the on-disk index then stored empty text with a valid timestamp, so the next launch considered it up to date. The loss survived restarts.

In one real vault this showed as a note with 50 incoming links reporting 1, and a tag sidebar showing 7 tags out of 147.

  • A failed read now keeps the previous text. Stale text is visibly wrong and fixes itself; a missing note is invisible.
  • Nothing is dropped before the re-read lands.
  • The index no longer caches empty text for a note it could not read.
  • Opening a vault says how many notes could not be read, instead of saying nothing.

If you use a synced vault, reopen it once after updating — the indexes rebuild themselves.

Flashcards inside a callout

A card written inside another callout was silently discarded — no card, no error:

> [!warning] Anaphylaxis
> > [!card]- Adrenaline dose?
> > 0.5 mg IM

Callouts now nest properly at any depth, and a nested card is a card. This also fixes a plain > quote inside a callout, which used to produce unbalanced HTML.

Anki import brings the media

An .apkg is a ZIP, so the images and audio were always in there. The files a deck actually references are now copied into _attachments/, with a suffix when the name is taken, and the card text points at them. A plain text export still has no media — it never did — and the import dialog now says which of the two you are looking at.

Smaller

  • Collapsible tag strip in the sidebar; folded, it still shows the active filter
  • sort: modificado desc in a query block did nothing at all — the modification time never reached the sorter
  • Auto-save no longer rebuilds the indexes from a stale file list, and no longer clears the "unsaved" mark of a note you have already left
  • Startup bundle cut from 4.5 MB to 2.2 MB: Mermaid, KaTeX, the graph (d3) and the EPUB reader load the first time you need them

Licence

The project now carries GNU GPL v3 or later. Until now it had no licence file, which legally meant nobody could use or fork it.

Downloads

Windows installer, Linux AppImage and .deb below.

v0.10.0 — Flashcards, calendar and query blocks

Choose a tag to compare

@github-actions github-actions released this 21 Jul 10:32

Studying features, built on top of a ~470-note vault in real use. Everything is additive: your notes stay plain Markdown, and this release adds nothing to them that another editor cannot read.

Flashcards with spaced repetition

A card is a callout, so it renders anywhere and reads as prose without the app:

> [!card]- What is the qSOFA triad?
> RR >= 22 · SBP <= 100 · GCS < 15.

> [!card] Krebs cycle
> ==Citrate synthase== condenses ==acetyl-CoA==.

Every ==highlight== becomes its own gap-fill card.

  • SM-2, the Anki algorithm, with 50+ tests — a scheduling bug ruins months of study silently
  • Review panel with a keyboard-only flow; decks by note or by tag; suspend a card
  • Statistics: retention, 14-day forecast, which notes hold the most cards
  • End of a session: replay the same cards as practice, which writes nothing, or pull the next 7 days
  • Scheduling lives in .openobsidian/srs.json, never inside a note — it changes on every review and would dirty the diff of every file
  • Editing an answer keeps the schedule; editing the question makes a new card

Anki import, without Anki

Point it at an .apkg and it reads the package directly — no Anki Desktop, no export step.

  • Cloze notes become gap-fill cards, A::B tags become #A/B, [$]x[/$] becomes $x$
  • A deck lands as a folder, 100 cards per note: one note of 2000 cards takes ~900 ms to render, at 100 it is ~45 ms
  • Confirmation before anything is written, showing the deck name and where it will land

Query blocks

An index derived from the notes instead of typed by hand:

```query
tag: cardio
tipo: patologia
sort: modificado desc
limit: 20
```

Filters by tag, by path and by any frontmatter field. A line it cannot read is shown above the results rather than ignored, and a spec with no filter returns nothing instead of the whole vault.

Everything else

  • Calendar over the daily notes: days that have one are marked, any day opens or creates
  • Aliases: declare aliases: in the frontmatter and the note answers to every name — a real file name always wins over an alias
  • Vault diagnostics: broken links, orphan notes, duplicate names
  • Your own templates in _templates/, with {{title}}, {{date}}, {{time}}
  • AI prompts: copies a ready-made prompt to the clipboard for whichever chat you use. Nothing is sent anywhere
  • Search ranking: exact title 100, exact alias 80, headings, then body with diminishing returns — counting every mention linearly let a long note beat a note actually about the subject

Downloads

Windows installer, Linux AppImage and .deb below.

v0.9.0 — Vault integrity and search

Choose a tag to compare

@github-actions github-actions released this 21 Jul 07:55

Vault integrity and search, driven by real friction building a ~470-note vault. Several of these used to lose data or break navigation without saying anything — the release is mostly about removing silence.

Things that used to fail quietly

Before Now
Rename Only renamed the file — every [[link]] pointing at it broke Scans the vault, asks "N links in M notes — update?", then rewrites them, keeping |alias, #anchor and folder prefix, and never touching code fences
Wikilinks Exact-name match only; [[Note#Section]] and [[Folder/Note]] did nothing on click Anchors scroll to the heading, paths resolve, and a duplicate name prefers the note closest to the one linking
Dead links Invisible Rendered dashed red, plus a Broken links panel
Frontmatter A leading --- block rendered as a visible heading Parsed into a properties strip and indexed; tags: from the frontmatter join the tag index
Embeds ![[Note]] left a stray ! Whole note or #Section, with a cycle guard and a visible box when the target is missing

Search and navigation

  • Operators: tag:, path:, file:, "exact phrase", -exclusion, regex. tag: also matches child tags
  • Nothing is truncated in silence — five lines per note plus a +N occurrences button
  • Search reads from the in-memory cache instead of one disk read per note per keystroke
  • Tags keep accents and nest: #pré-natal, #sistema/cardio, and the parent tag finds its children. Tags inside code fences, purely numeric tags and hex colours are ignored
  • Sidebar filter matches names, tags and aliases
  • Ctrl+F in the reading view highlights inside the note itself, using the CSS Custom Highlight API — it cannot match sidebar text the way a browser find would
  • Reads .odt, and tables survive .docx/.odt conversion to Markdown
  • The backlinks panel is capped at 38% of the sidebar, so it can never hide the file tree

Under it

The content cache the whole app reads from is now kept honest: the watcher re-reads what changed outside the app, and the open note with unsaved edits is never overwritten. 171 tests.

Downloads

Windows installer, Linux AppImage and .deb below.