astro-loader-obsidian
v0.0.7
Published
Use your Obsidian Vault in Astro projects
Downloads
323
Maintainers
Readme
astro-loader-obsidian
Use your Obsidian vault in Astro projects.
Usage
Use the loader in your Astro Content Config file.
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
import { ObsidianMdLoader } from "astro-loader-obsidian";
const articles = defineCollection({
loader: ObsidianMdLoader({
// Base Obsidian Folder
base: "src/content/articles",
}),
});
export const collections = {
articles,
};
Schema
You can write your own schema or use the already provided one which covers all "standard" Obsidian and Obsidian Publish fields, plus some extra autogenerated ones.
const ObsidianDocumentSchema = z.object({
// Obsidian Frontmatter Fields
tags: z.array(z.string()).optional(),
aliases: z.array(z.string()).optional(),
cssclasses: z.array(z.string()).optional(),
publish: z.boolean().optional(),
permalink: z.string(),
description: z.string().optional(),
image: z.string().optional(),
cover: z.string().optional(),
// Astro Blogging Fields
title: z.string(), // Defaults to File Name
author: z.string(), // Defaults to LoaderOptions -> author
created: z.date(), // Defaults to Stats -> ctime
updated: z.date(), // Defaults to Stats -> mtime
});
Features
Obsidian Links
Obsidian Links are automatically replaced with standard markdown links. By default, they will use collection
name as base url, but you can override it with the url
setting from the options.
Image/Covers
You can reference your images in the frontmatter image
or cover
fields by writing them in the same way it's done with Obsidian Publish
To enable images loading, you need to extend them schema with the Astro helper as can be seen in the following example:
const articles = defineCollection({
loader: ObsidianMdLoader({
...
}),
schema: ({ image }) =>
ObsidianDocumentSchema.extend({
image: image(),
// or
cover: image(),
}),
});
Authoring
If you want all your notes to have a default author
in case they don't have one, use the author
property on the config.
I18n
If you want your notes to support i18n, place them in separated language folders (en, es, pt, fr, it...) and enable the i18n
property in the config. Remember to enable the i18n Astro settings as well.
TO DO
- [ ] Replace Obsidian Links in Frontmatter
- [ ] Expose Links and Backlinks interface
- [ ] Render Inline Images
License
MIT