npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@chronicle.app/obsidian

v0.5.0

Published

Chronicle plugin for Obsidian Markdown documents and note links

Readme

@chronicle.app/obsidian

Import an Obsidian vault as Markdown documents, without requiring a particular folder structure, tagging convention, person note, or custom properties.

Usage

chronicle extract obsidian --input /path/to/vault
chronicle extract obsidian --input /path/to/vault/Books --limit 1

--input accepts a vault or a folder within it. The nearest ancestor containing .obsidian supplies the vault name and relative paths, so a subfolder import uses the same document identities as a full import. Without .obsidian, the input directory is treated as the vault. --limit limits emitted notes (0 means unlimited); all vault note paths remain available for link resolution.

Imported data

Every .md file is imported as a DocumentObject, including untagged notes. Hidden files/directories, symlinks, and non-Markdown attachments are skipped.

  • Identity: (source, handle, inRealm.handle), where handle is the complete vault-relative filename and the realm handle is the vault folder name.
  • Name: filename without its extension.
  • Body: Markdown with leading YAML frontmatter omitted; other content, including Dataview syntax and whitespace, is preserved.
  • Tags: the standard frontmatter tags property, preserving case and nested tags.
  • References: resolved wikilinks and inline Markdown links to other notes; external HTTP(S) Markdown links reference URL entities.
  • Modification: one UpdateAction at the file's modification time, attributed to the Chronicle owner through @me. No owner note is needed.

Wikilinks and note embeds support folder paths, display labels, headings and block anchors. Relative Markdown note links are resolved against the source note's directory. Repeated links are deduplicated. Unresolved or ambiguous targets stay in the body without inventing a document. Code examples and comments are ignored when recognizing links. This v1 does not parse the entire Markdown grammar: reference style links, inline hashtags, and attachment contents remain in the body only.

Custom properties such as type, birthday, goodreads_id, or letterboxd_url remain in the raw extraction metadata, outside the document body. They do not create people, books, sameAs edges, or real-world actions. Aliases, including @me, do not change a document's identity. There is no mapping configuration.

Filesystem birth time, when available, is retained in the raw record as birthtime. It is not treated as an authored CreateAction: copying/restoring a file can change it. Modification time records the current file state, not a reconstructed history of every edit. Unchanged files have a deterministic snapshot time based on the newest imported file modification time.

Notes are extracted newest-modified first, reading each body only when it is emitted. Reruns scan every note: an already-imported path may still contain edits, so the key-only ETL frontier cannot safely stop the scan. Complete, unlimited scans also allow deleted notes to be detected.

The plugin provides obsidian://open?vault=…&file=… deep links from document identities. Renaming a file changes its path identity; this v1 does not track renames. Vaults with the same folder name share the same realm namespace.

Development

npm test [email protected]/obsidian
npm run build [email protected]/obsidian

Tests build a small synthetic vault in a temporary directory and run it through the extractor and transformer, so they never read a real vault or other host data.