A native macOS writing app built with Tauri + React that lets you draft in a Notion‑style editor and publish directly to a Git‑backed blog.
- Write with a Lexical‑based rich text editor
- Store drafts locally (SQLite)
- Publish Markdown + images to a git repo
- Sync drafts to a
draftsbranch - Preview with styling aligned to your site (here it is aligned to my personal site @ pranavhari.com)
Nibandh converts editor content to Markdown and writes it into your blog repo:
{repo}/content/articles/{slug}.md
{repo}/content/images/{image}.{ext}
It commits and pushes to main for publish, and to drafts for sync.
- Install dependencies
npm install
- Start the app
npm run tauri dev
- Configure your repo
- Open Settings in the app
- Set Repository Path to the root of your blog repo
- Confirm “Valid git repository” shows
- Open Nibandh and create or select a draft.
- Add title, tags, and description (required for publish).
- Add a cover image if desired (upload or link, then reposition).
- Write your content. You can paste images inline.
- Click Preview to verify styling.
- Click Publish to Main in the status bar.
- Review the summary and commit message, then confirm.
- Nibandh writes Markdown + images and pushes to
main.
Nibandh assumes a simple Markdown‑based blog repo. You can adapt it, but these defaults must exist (or be created on publish):
content/articles/— Markdown filescontent/images/— image assetsdrafts/— draft branch content
Nibandh writes YAML frontmatter at the top of each Markdown file:
---
title: "Article Title"
date: "2026-01-15"
tags: ["AI", "Tech"]
description: "Short summary"
cover: "/images/cover-image.webp"
cover_position: 50
---If your blog uses different paths or frontmatter fields, update these areas:
- Publish paths & frontmatter
src-tauri/src/lib.rs(publish_draftandsync_to_drafts)
- Markdown conversion
src/lib/markdown.ts
- Preview styling
src/components/PreviewDialog.tsxsrc/index.css
- Pasted images are embedded in the editor and saved as WebP on publish.
- Cover images can be uploaded or linked, and repositioned.
- Frontend: React + TypeScript + Tailwind + Lexical
- Backend: Rust + Tauri 2
- State: Zustand
- DB: SQLite in app data directory
npm run tauri build
- Publish fails: verify
repoPathpoints to a git repo andgit statusis clean. - Sync fails: the app auto‑stashes local changes to switch branches.
MIT