You can now import Anki decks into gnosis.

The entire Anki ecosystem, thousands of community-maintained decks across every subject, is accessible from Emacs. I can finally keep track of the AnKing deck changes.

If you can’t beat them, import them.

Anki import

gnosis-anki-import reads .apkg files and converts them into gnosis themata. It resolves Anki’s note type templates to extract question/answer pairs, normalizes tags, and strips Anki system tags like marked and leech.

Re-importing the same deck is safe. Each imported note keeps its Anki GUID, so gnosis detects duplicates and skips them. When AnKing pushes an update, I just re-import and only the new notes come in.

Tens of thousands of notes & themata, managed from a text editor. As it should be.

One package, one database

org-gnosis was merged into gnosis. Maintaining two packages with two databases for what is fundamentally one system was, in retrospect, an act of bureaucratic self-harm. Nodes, journal, and themata now share a single gnosis.db. The migration imports existing org-gnosis data automatically.

Export and import

The old org-file export format is gone. Exports are now .gnosis SQLite databases. Importing shows a diff buffer with NEW and CHANGED entries before applying, so you see exactly what will change before committing.

Combined with GUID tracking, this makes gnosis collections maintainable over time rather than one-shot imports. Share a deck with a friend, they modify it, you re-import. No data lost, no duplicates.

Other

  • Decks were removed. They were a restriction, not a feature. Existing deck names were converted into tags.
  • N+1 queries eliminated throughout the codebase.
  • Dashboard rendering is 3-4x faster via a custom gnosis-tl module.
  • Review dates stored as integers; due/overdue queries run in SQL.
  • Git operations are fully async.
  • Saving .org.gpg files no longer triggers redundant decryption.
  • Post-failure interval capped at 7 days.
  • Interval fuzz prevents review clustering.
  • Tag bulk operations: rename, regex rename, merge case duplicates.
  • Dropped emacsql for built-in sqlite.