Neorg processor for Vite - Transform .norg files into HTML, React, or Svelte with full TypeScript support.
npm install -D vite-plugin-norg
import { defineConfig } from 'vite';
import { norgPlugin } from 'vite-plugin-norg';
export default defineConfig({
plugins: [
norgPlugin({
mode: 'html',
}),
],
});
Add a type reference to app.d.ts based on your output target:
// For Svelte
/// <reference types="vite-plugin-norg/svelte" />
// For React
/// <reference types="vite-plugin-norg/react" />
// For HTML
/// <reference types="vite-plugin-norg/html" />
This provides type checking for .norg modules
import { metadata, html } from './document.norg';
console.log(metadata.title); // "My Document"
document.body.innerHTML = html;
import { metadata, Component } from './document.norg';
export default function App() {
return (
<div>
<h1>{metadata.title}</h1>
<Component />
</div>
);
}
<script>
import Document, { metadata } from './document.norg';
</script>
<h1>{metadata.title}</h1>
<Document />
graph LR
A(📝 .norg files) ==> B(⚡ Rust Parser)
B ==> C(🔧 NAPI Module)
C ==> D(🚀 Vite Plugin)
D ==> E{🎨 Generator}
E ==> F(📄 HTML)
E ==> G(⚛️ React)
E ==> H(🔥 Svelte)
F ==> I(💎 TypeScript Module)
G ==> I
H ==> I
linkStyle default stroke-width:3px
import type { FilterPattern } from 'vite';
interface NorgPluginOptions {
mode: 'html' | 'react' | 'svelte';
include?: FilterPattern;
exclude?: FilterPattern;
// See https://shiki.style/guide for all options
shikiOptions?: {
themes?: {
// optional: defaults to 'github-light'
light: string;
// optional: defaults to 'github-dark'
dark: string;
};
};
}
Requirements:
mode: 'react')mode: 'svelte')This project uses Nix flakes and direnv for reproducible development environments.
# Enable direnv
direnv allow
npm install
# Run tests
npm test
cargo test
# Lint and format
nix fmt
MIT © Drake Bott