historica

by nhannht
5
4
3
2
1
Score: 44/100

Description

Turn prose into a timeline, automatically. An Obsidian plugin that reads your notes, finds every date with NLP, and renders an interactive timeline inside a code block.

Reviews

No reviews yet.

Stats

41
stars
4,739
downloads
0
forks
26
days
25
days
25
days
1
total PRs
0
open PRs
0
closed PRs
1
merged PRs
10
total issues
4
open issues
6
closed issues
155
commits

Latest Version

25 days ago

Changelog

Historica 0.4.4

This release requires Obsidian 1.13.0. If you are on an older version, Obsidian will keep offering you 0.4.3, which is unaffected and needs only 1.7.2. Nothing is stranded.

Changed

  • Settings are searchable. The settings tab is now declared rather than hand-rendered, which is what lets Obsidian's settings search find "Date display format", "Parsing language" and "Data directory" instead of them being invisible to it. That API arrived in 1.13.0, and supporting both it and the old rendering path would have meant two descriptions of the same three settings kept in step by hand, so the floor moved instead.
  • A blank date format or data directory is now refused with a message under the field. Before, a blank value was quietly swapped for the default, so the field looked empty while dates rendered in a format you had not chosen.

Removed

  • bun run doc:code and TypeDoc. It had been broken for some time - typedoc-plugin-inline-sources requires TypeDoc 0.28.x and the project pinned 0.27.9, so it crashed before writing anything - and it generated API documentation nobody read. The plugin and the marketing site are the two things this project ships.
  • postcss.config.js and tailwind.config.js, both dead. Tailwind v4 does not read either without an @config directive, which this project does not have. Verified by rebuilding with each removed: styles.css came out byte-identical. Worth knowing if you ever read those files and believed them: important: true and the scoped preflight they configured were never in effect.
  • The eight packages that existed only to serve those two files and TypeDoc: postcss, autoprefixer, tailwindcss-scoped-preflight, @tailwindcss/typography, typedoc and its three plugins.
  • Two exported helpers in utils.ts with no callers, GetAllDirInVault and GetAllHistoricaDataFile.

Fixed

  • Dependency advisories are down from 13 to 1. Six had a fix available inside the same major version, so pinning them cost nothing: js-yaml, fast-uri, shell-quote (the one rated critical), markdown-it, linkify-it and postcss. None of these ever shipped to users - they are build and lint tooling - but they were noise hiding anything real.
  • The last one, in brace-expansion, is left deliberately. Its fix only exists in a major version that changed the module's export shape, which breaks every consumer that calls it as a function, including ESLint. Pinning it makes the audit report zero and the toolchain throw. It is a denial of service reachable only by feeding a hostile glob pattern to your own linter.

README file from

Github

Historica timeline rendered from prose inside Obsidian


[!note] These docs cover the redesigned UI shipped in 0.3; the current release is 0.4.x. Desktop only - mobile support was dropped in 0.3.

Quick start

Create a historica block in any note:

```historica
```

That is it. The block reads the prose of the current file (code blocks are ignored), splits it into sentences, and every sentence containing a string that parses as a date or time becomes a timeline entry.

Languages

Historica is English-first, but it also parses several other languages. By default the language setting is auto: it detects the language of each note and picks the matching parser. Besides English it currently handles German, French, Japanese, Chinese, Dutch, and Vietnamese (English has the richest coverage; the others focus on absolute dates, months, centuries, and eras). You can also pin a language explicitly instead of auto.

Parsing is tested against real annotated corpora - WikiWarsDE, WikiWars-NL, French FTiB, and hand-curated Japanese and Chinese sets. The suites live in __tests__/.

Editing

Every entry expands into a card with a significance slider (1-5), a free-text note, and attachments picked from your vault. Right-clicking gives you two menus:

  • On the timeline: sort, expand or fold all entries, re-parse the note, and export (PNG, HTML, Markdown, JSON, plain text).
  • On an expanded card: jump to the source sentence, add an attachment, hide the entry, mark it as an anchor, or dismiss a bad extraction.

To reword an entry or fix its date, edit the source sentence and re-parse - or hand-edit the saved timeline file, which is plain Markdown (see below).

Expanded entry cards with significance sliders and annotations

Per-entry context menu: jump to source, attach, anchor, dismiss

Save your plot

A fresh empty historica block is bound to the hidden blockId -1, and blocks with blockId -1 do not auto-save: re-render the block and your customizations are gone. So save the plot:

  • Click the save button at the right end of the toolbar (the status beside it reads Not saved yet). The data is written to historica-data/xxxx.md and the generated id is stamped into the block. From then on every change auto-saves.
  • Or give the block an id yourself when you create it:
```historica
{
"blockId":"It-is-so-kute-and-I-know-it"
}
```

Now the block auto-saves to historica-data/It-is-so-kute-and-I-know-it.md.

Saved timelines are plain Markdown in the HMD format - YAML frontmatter for settings, one ## heading per entry, inline fields for date and significance. Obsidian can open and even render them directly; you can read, diff, grep, and hand-edit them. The format spec is in docs/hmd-spec.md. Saved blocks are also indexed into the vault-wide Global Timeline view (command palette: Historica: Open Global Timeline).

Install

  • Obsidian: Settings, Community plugins, search for Historica.
  • Manual: grab main.js, manifest.json, and styles.css from the latest release and drop them into .obsidian/plugins/historica/.

License

MIT