Likho is a lightweight, fast, and simple static site generator written in Go.
It's designed to convert markdown files into a fully functional static website with minimal configuration.
A demo site (my personal blog) built with Likho can be found at https://intothevoid.github.io/
- Markdown to HTML conversion
- YAML-based configuration
- Custom metadata for each post and page
- Automatic sitemap and RSS feed generation
- Command-line interface for easy management
- Support for creating both posts and pages
-
Ensure you have Go 1.23 or later installed on your system.
-
Clone the repository:
git clone https://github.com/intothevoid/likho.git cd likho
-
Build the application:
go build -o likho cmd/likho/main.go
-
(Optional) Add the
likho
binary to your PATH for easier access.
Likho provides several commands to manage your static site:
./likho create post "My New Post" [flags]
Available flags:
-t, --tags string
: Comma-separated list of tags for the post-i, --image string
: URL of the featured image for the post-d, --description string
: Short description of the post
Example:
./likho create post "My New Post" -t "technology,golang" -i "https://example.com/image.jpg"
./likho create page "Page Title" [flags]
Available flags:
-i, --image string
: URL of the featured image for the page-d, --description string
: Short description of the page
Example:
./likho create page "About Me" -i "https://example.com/about.jpg" -d "Learn more about the author"
./likho generate
This command will:
- Parse all posts and pages
- Generate HTML files for each post and page
- Create an index page with recent posts
- Generate a sitemap and RSS feed
- Copy the CSS file to the output directory
./likho serve
This command starts a local web server to preview your generated site.
./likho help
Use this command to see all available commands and their descriptions.
Use the following command to build a Docker image:
docker build -t likho .
To run the Docker container and generate the static site, use:
docker run --rm -v "$(pwd)/content:/app/content:ro" -v "$(pwd)/public:/app/public" likho:latest generate
Note: The following directories are required:
- content - Contains the markdown files for the site. This is the input directory.
- public - Will contain the generated static site. This is the output directory.
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t yourdockerhubusername/likho:latest --push .
Likho uses a config.yaml
file in the root directory for site-wide configuration. Here's an example:
site:
title: "My Awesome Blog"
description: "A blog about awesome things"
baseURL: "https://example.com"
content:
sourceDir: "content"
postsDir: "posts"
output:
publicDir: "public"
templates:
dir: "templates"
static:
dir: "static"
-
site
:title
: The title of your blogdescription
: A brief description of your blogbaseURL
: The base URL where your site will be hosted
-
content
:sourceDir
: The directory containing your content filespostsDir
: The subdirectory withinsourceDir
where posts are stored
-
output
:publicDir
: The directory where generated HTML files will be placed
-
templates
:dir
: The directory containing your HTML templates
-
assets
:dir
: The directory containing static assets (CSS, images, etc.)
Ensure that your config.yaml
file is in the root directory of your Likho project.
After setting up your Likho project, your directory structure should look like this:
my-likho-site/
├── config.yaml
├── assets/
│ └── logo.jpg
| └── main.css
├── content/
│ ├── posts/
│ │ └── YYYY-MM-DD/
│ │ └── post-slug.md
│ ├── pages/
│ │ └── page-slug.md
├── templates/
│ ├── base.html
│ ├── index.html
│ ├── post.html
│ ├── pages.html
│ ├── header.html
│ └── footer.html
└── public/
└── (generated files)
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.