LazyDraft is a powerful tool designed to streamline the management of markdown blog projects within your Obsidian workflow. It enables you to transfer projects to static site generators (like Hugo or Jekyll) seamlessly, making blogging effortless for developers and content creators alike.
- Multi-Project Management: Organize and switch between multiple blog projects with ease.
- Efficient Blog Management: Organize your markdown files and blog projects in a structured way.
- Static Site Integration: Automatically transfer and format content for popular static site generators.
- CLI-Based Workflow: Perform all tasks via simple commands in the terminal.
- Cross-Platform Support: Available on macOS, Linux, and Windows.
- Legacy Migration: Automatically migrates existing configurations to the new project system.
I usually write my content in Obsidian. Keeping everything in there makes sense for me, but when I want to move something out of Obsidian to my website, I need to:
- Modify the content of the writing if I have any images or assets.
- Find the related asset files and copy them as well.
Doing this once is manageable, but if I don't like something and change it, I now need to update it in multiple places.
LazyDraft simplifies this process, automating the steps and reducing manual intervention. With the new multi-project support, you can manage multiple blogs, documentation sites, or content projects simultaneously.
brew install yigitozgumus/formulae/lazydraftVisit the Releases page
- Go to https://github.com/yigitozgumus/lazydraft/releases
- Download the binary for your operating system:
- lazydraft-linux-amd64.tar.gz
- lazydraft-macos-amd64.tar.gz
- lazydraft-windows-amd64.zip Extract the binary and add it to your PATH: Example for Linux/macOS:
tar -xzf lazydraft-linux-amd64.tar.gz
mv lazydraft /usr/local/bin/# Clone the repository:
git clone https://github.com/yigitozgumus/lazydraft.git
cd lazydraft
# Build the binary:
cargo build --release
# Move the binary to your PATH:
mv target/release/lazydraft /usr/local/bin/LazyDraft provides commands for both project management and content operations:
# Create a new project
lazydraft project create my-blog "Personal blog content"
# List all projects (shows active project with ●)
lazydraft project list
# Switch to a different project
lazydraft project switch my-blog
# Get information about current or specific project
lazydraft project info
lazydraft project info my-blog
# Rename a project
lazydraft project rename old-name new-name
# Delete a project (cannot delete active project)
lazydraft project delete old-projectChecks the current status of your notes and identifies which ones are ready for publishing.
# Check status of active project
lazydraft status
# Check status of specific project
lazydraft status --project my-blogPrepares and transfers notes and assets to the target directory for publishing.
# Stage content from active project
lazydraft stage
# Stage content from specific project
lazydraft stage --project my-blog
# Continuous monitoring (watches for changes)
lazydraft stage --continuous
lazydraft stage --continuous --project my-blogCreates or validates the configuration file for projects.
# Edit active project configuration
lazydraft config --edit
# Edit specific project configuration
lazydraft config --edit --project my-blog
# Show configuration help
lazydraft config --infoLazyDraft uses TOML configuration files to define project-specific settings. Each project has its own configuration file stored in ~/.config/lazydraft/projects/.
~/.config/lazydraft/
├── active_project.toml # Tracks current active project
└── projects/
├── my-blog.toml # Individual project configs
├── work-docs.toml
└── portfolio.toml
name = "my-blog"
description = "Personal blog content"
created_at = "2025-06-04T09:37:50.031739+00:00"
last_used = "2025-06-04T09:37:50.031739+00:00"
# Content processing settings
source_dir = "/Users/username/obsidian/blog"
source_asset_dir = "/Users/username/obsidian/blog/assets"
target_dir = "/Users/username/sites/my-blog/content"
target_asset_dir = "/Users/username/sites/my-blog/static/assets"
target_asset_prefix = "./assets"
yaml_asset_prefix = "assetPrefix"
# Processing options
sanitize_frontmatter = true
auto_add_cover_img = true
auto_add_hero_img = false
remove_draft_on_stage = true
add_date_prefix = false
remove_wikilinks = true
trim_tags = false
use_mdx_format = falsesource_dir: Directory where source files are locatedsource_asset_dir: Directory where assets for the source are storedtarget_dir: Directory where output files are generatedtarget_asset_dir: Directory where output assets are storedtarget_asset_prefix: Prefix for asset links in the generated filestarget_hero_image_prefix: Prefix for hero image links in the outputyaml_asset_prefix: Prefix for assets referenced in YAML frontmattersanitize_frontmatter: If true, removes empty fields from the frontmatterauto_add_cover_img: Automatically adds a cover image to the frontmatterauto_add_hero_img: Automatically adds a hero image to the frontmatterremove_draft_on_stage: Sets the 'draft' flag to false when stagingadd_date_prefix: Adds a date prefix to the file nameremove_wikilinks: Converts wiki-style links to plain markdown linkstrim_tags: Strips a specified prefix from tags in frontmattertag_prefix: The prefix to strip from tags when 'trim_tags' is enableduse_mdx_format: If true, saves output files with the.mdxextension instead of.md
If you have an existing lazydraft.toml or lazydraft.json file, LazyDraft will automatically migrate it to a new project called "default" when you first run any command. Your existing workflow will continue to work without any changes.
# Set up multiple projects
lazydraft project create personal-blog "My personal writing"
lazydraft project create work-docs "Technical documentation"
lazydraft project create portfolio "Portfolio content"
# Configure each project
lazydraft config --edit --project personal-blog
lazydraft config --edit --project work-docs
# Work with different projects
lazydraft project switch personal-blog
lazydraft status
lazydraft stage
lazydraft project switch work-docs
lazydraft stage --continuous
# Check project status
lazydraft project listIf you're upgrading from an older version:
# Your existing config is automatically migrated
lazydraft project list
# Shows: ● default (Migrated from legacy configuration)
# Rename if desired
lazydraft project rename default my-blog
# Continue working as before
lazydraft status
lazydraft stageThis project is licensed under the MIT License. See the LICENSE file for details.
If you encounter issues or have feature requests, please open an issue.
Contributions are welcome! Refer to the CONTRIBUTING.md file for guidelines.