{"id":50172603,"url":"https://github.com/tisgoud/obsidian-omd2typst","last_synced_at":"2026-05-31T00:01:28.180Z","repository":{"id":360082432,"uuid":"1246768269","full_name":"tIsGoud/Obsidian-Omd2Typst","owner":"tIsGoud","description":"Obsidian plugin for Omd2Typst","archived":false,"fork":false,"pushed_at":"2026-05-24T22:52:08.000Z","size":83,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T00:13:19.709Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tIsGoud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-22T14:31:47.000Z","updated_at":"2026-05-24T22:52:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tIsGoud/Obsidian-Omd2Typst","commit_stats":null,"previous_names":["tisgoud/obsidian-omd2typst"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/tIsGoud/Obsidian-Omd2Typst","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tIsGoud%2FObsidian-Omd2Typst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tIsGoud%2FObsidian-Omd2Typst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tIsGoud%2FObsidian-Omd2Typst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tIsGoud%2FObsidian-Omd2Typst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tIsGoud","download_url":"https://codeload.github.com/tIsGoud/Obsidian-Omd2Typst/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tIsGoud%2FObsidian-Omd2Typst/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33714033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-25T00:07:49.143Z","updated_at":"2026-05-31T00:01:28.172Z","avatar_url":"https://github.com/tIsGoud.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Omd2Typst\n\nExport your Obsidian notes to professionally typeset PDFs — with a structured cover page, auto-numbered table of contents, callout blocks, tables, images, and support for five languages — using [Typst](https://typst.app), a modern document compiler.\n\n\u003e **Desktop only** — macOS, Windows, Linux. Not available on mobile.\n\n---\n\n## Screenshots\n\n### Command palette\n\nCommand palette showing the four Omd2Typst commands:\n\n![Command palette showing the four Omd2Typst commands](images/command-palette.png)\n\n### Settings\n\n**Default settings**\n\nDefault settings, without [Typst](https://typst.app) installed. No export to PDF, only export to .typ.\n\n![Default Omd2Typst settings](images/default-settings.png)\n\n**Configured settings**\n\nConfigured settings with, sample template, installed Typst version and template for the frontmatter.\n\n![Configured Omd2Typst settings — template, Typst compiler status, and output options](images/configured-settings.png)\n\n## Context menu\n\nThe right-click context menu with the two options \"Export as PDF\" and \"Export as Typst\".\n\n![Right-click context menu with Export as PDF and Export as Typst source](images/context-menu.png)\n\n## Frontmatter\n\nFrontmatter from the sample input file. with the\n**Sample input file with frontmatter**\n![Sample input file — cover page and table of contents](images/frontmatter.png)\n\n## PDF output\n\nThe sample PDF output, shows the Typst generated output from the input file. Download the [example input files and templates](https://github.com/tIsGoud/Obsidian-Omd2Typst/releases/latest/download/omd2typst-examples.zip) to get started.\n\nThis partial PDF output shows the added front page, the added revision and approval page and the table-of-contents. The optional figure-list is not shown here.\n\n![Sample PDF output — cover page and table of contents](images/pdf-output.png)\n\n---\n\n## Requirements\n\n- **Obsidian** 1.4.0 or later\n- **Typst** — required for PDF export\n  - Install: `brew install typst` (macOS) · `winget install --id Typst.Typst` (Windows) · or download from [typst.app](https://typst.app)\n  - The plugin searches common locations automatically; no path configuration needed in most cases\n  - Without Typst, `.typ` source export still works — PDF export shows an install notice\n\n---\n\n## Installation\n\n### Via the Community Plugin browser *(recommended)*\n\n1. In Obsidian: **Settings → Community plugins → Browse**\n2. Search for **Omd2Typst**\n3. Click **Install**, then **Enable**\n\n### Manual install\n\n1. Download `main.js` and `manifest.json` from the [latest release](https://github.com/tIsGoud/Obsidian-Omd2Typst/releases/latest)\n2. Create a folder `.obsidian/plugins/obsidian-omd2typst/` inside your vault\n3. Copy both files into that folder\n4. In Obsidian: **Settings → Community plugins → enable Omd2Typst**\n\n---\n\n## Features\n\n- Export the active note as **PDF** or **Typst source (`.typ`)** from the command palette or the right-click file menu\n- **Cover page** — populated from YAML frontmatter (`title`, `subtitle`, `author`, `date`, `version`, `status`, `summary`)\n- **Table of contents** with numbered headings\n- **Revision and approval tables** — extracted from named sections and placed before the TOC\n- **13 callout types** with Lucide SVG icons (`note`, `tip`, `warning`, `danger`, `bug`, `quote`, …)\n- **10 checkbox variants** (`- [ ]` to `- [*]`)\n- **Custom templates** — register any `.typ` file in your vault; supported languages are detected automatically\n- **Five languages** — `nl` · `en` · `de` · `es` · `fr`; the default language dropdown updates automatically when you switch templates\n- **Frontmatter insertion** — insert a configurable YAML frontmatter block; existing keys are never overwritten\n- **Output location** — same folder as note, fixed folder (with vault autocomplete), or ask every time\n\n---\n\n## Commands\n\n| Command | Palette | Right-click menu |\n|---|---|---|\n| Export as PDF | ✓ | ✓ |\n| Export as Typst source (.typ) | ✓ | ✓ |\n| Insert omd2typst frontmatter | ✓ | — |\n| Export built-in template | ✓ | — |\n\n---\n\n## Settings\n\n### Typst templates\n\n| Setting | Description |\n|---|---|\n| **Template list** | Each registered template shows its name, vault-relative path, and the languages detected from its `_lang_strings` dictionary. |\n| **Add template** | Select a `.typ` file from the vault using the autocomplete picker. The name is auto-filled from the filename and can be edited before adding. |\n| **Default template** | Used for right-click exports and as the pre-selected option in palette exports. Changing this also updates the available *Default language* options. |\n\n### Export\n\nThe top of the Export section shows the detected Typst version and path, or *\"Typst not found\"* with an install hint. This is a status indicator — not a configurable option.\n\n| Setting | Description |\n|---|---|\n| **Default output format** | `PDF` or `Typst source (.typ)`. |\n| **Output location** | *Same folder as note* / *Fixed folder* (vault folder autocomplete) / *Ask every time*. |\n\n### Document defaults\n\n| Setting | Description |\n|---|---|\n| **Default language** | Applied when the note has no `language:` frontmatter key. Options are limited to the languages supported by the selected default template. |\n| **Frontmatter template source** | Controls how the *Insert omd2typst frontmatter* command works — see below. |\n\n#### Frontmatter template source modes\n\n| Mode | Behaviour |\n|---|---|\n| **Inline editor** | Edit `key: value` lines directly in settings. Running the command inserts any missing keys (with their default values) into the active note's frontmatter. Existing keys are never overwritten. |\n| **Template file** | Select a `.md` file in the vault. The command reads that file's frontmatter and inserts missing keys (with their values) into the active note. |\n| **User defined** | The built-in insert command is disabled. Use Templater, the Templates core plugin, or any other frontmatter tool of your choice. |\n\n---\n\n## Supported Markdown features\n\nFull coverage of standard Markdown plus the most-used Obsidian extensions:\n\n| Feature | Notes |\n|---|---|\n| Headings `# H1` … `###### H6` | Level offset applied automatically when document has a title |\n| Bold, italic, strikethrough, highlight | `**`, `*`, `~~`, `==` |\n| Inline and display math | Typst math syntax — `$…$` and `$$…$$` |\n| Code blocks with language tag | Language label preserved |\n| Tables | Left / center / right alignment |\n| Images — standard `![alt](path)` and wikilink `![[path\\|width]]` | Width in points |\n| Callouts `\u003e [!type] Title` | 13 built-in types with Lucide SVG icons |\n| Block quotes `\u003e text` | Left accent bar |\n| Checkbox lists | 10 variants: `[ ]` `[x]` `[/]` `[-]` `[\u003e]` `[!]` `[?]` `[i]` `[I]` `[*]` |\n| Footnotes `[^1]` | Rendered at page bottom |\n| Superscript `\u003csup\u003e` / subscript `\u003csub\u003e` | HTML inline tags |\n| Obsidian wikilink images `![[…]]` | Converted automatically |\n| Thematic breaks `---` | Full-width rule |\n\nFor the complete feature reference including YAML frontmatter keys, callout icon colours, and checkbox meanings, see the [omd2typst README](https://github.com/tIsGoud/Omd2Typst#readme).\n\n---\n\n## Template authoring\n\nTemplates are standard Typst files that export a `template` function (document wrapper) and a `callout` function.\n\n**Declare supported languages** by defining a `_lang_strings` dictionary:\n\n```typst\n#let _lang_strings = (\n  \"nl\": ( toc: \"Inhoudsopgave\", ... ),\n  \"en\": ( toc: \"Table of Contents\", ... ),\n)\n```\n\nThe plugin detects language support automatically — no annotation needed. Language codes appear as badges in the template list and limit the *Default language* dropdown.\n\nTo start from the built-in template, run **Export built-in template** — it writes `omd2typst-template.typ` to the vault root.\n\n---\n\n## Privacy\n\nThe plugin makes **no network requests** and collects **no data**. All processing is local:\n\n- Markdown-to-Typst conversion runs inside a WASM module bundled inside `main.js`\n- PDF compilation runs the locally installed `typst` binary via `child_process`\n- No analytics, no telemetry, no external services\n\n---\n\n## Contributing\n\n\u003cdetails\u003e\n\u003csummary\u003eProject structure and build instructions\u003c/summary\u003e\n\n### Project structure\n\n```\nsrc/\n  main.ts           — plugin lifecycle, commands, context menus\n  settings.ts       — settings types, defaults, and settings tab UI\n  exporter.ts       — export pipeline: read note → WASM → write output / compile PDF\n  frontmatter.ts    — frontmatter parse, merge, and insert logic\n  template.ts       — template language detection and resolution\n  output.ts         — output path resolution for all three output modes\n  typst-cli.ts      — findTypstBinary, detectSystemTypst, compileToPdfViaCli\n  wasm/\n    omd2typst.ts    — lazy-init wrapper around omd2typst WASM\n    omd2typst-pkg/  — generated by wasm-pack (gitignored; WASM bundled into main.js at build)\nlibs/\n  omd2typst/        — git submodule: omd2typst Rust repo (pinned commit)\nscripts/\n  build-wasm.sh     — runs wasm-pack inside the submodule\n```\n\n### Build\n\n```bash\ngit submodule update --init       # pull omd2typst Rust source\n./scripts/build-wasm.sh           # wasm-pack build → src/wasm/omd2typst-pkg/\nnpm install                        # dev dependencies\nnpm run build                      # esbuild → main.js (omd2typst WASM bundled in)\nnpm test                           # Jest unit tests\n```\n\n### Install into a vault (development)\n\n```bash\nVAULT=~/path/to/your/vault\nmkdir -p \"$VAULT/.obsidian/plugins/obsidian-omd2typst\"\ncp main.js manifest.json \"$VAULT/.obsidian/plugins/obsidian-omd2typst/\"\n```\n\nThen enable the plugin in Obsidian → Settings → Community Plugins.\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftisgoud%2Fobsidian-omd2typst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftisgoud%2Fobsidian-omd2typst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftisgoud%2Fobsidian-omd2typst/lists"}