Arc is a lightweight static site generator written in Java that converts Markdown files to HTML. It's designed to be simple, fast, and easy to use for generating static websites from Markdown content.
To read about building Arc, go here.
Warning: this was built in about 5 hours with an AI buddy because I wanted to rebuild my personal site and learn Cursor.
- Converts Markdown files to HTML using CommonMark
- Supports YAML frontmatter for metadata
- Simple template system
- Variables:
{{variable }} - Loops:
{for post in posts}...{% endfor %} - Conditionals:
{% if variable %}...{% endif %} - Includes:
{% include "header.html" %} - RSS feed generation with configurable site metadata
- Has a built-in hot reload mode for development
- Uses
jpackageto build a native executable
- Java 24 or later
- Faith
Clone the repository:
git clone https://github.com/yourusername/arc.git cd arcBuild the project with Maven:
mvn clean package
This will also run jpackage to create a local app (currently supported platform: macos arm64)
- create an executable script in your path somewhere and point it to the arc file like so:
#!/bin/bash /path-to-this-project/target/jpackage/arc.app/Contents/MacOS/arcCopy all the contents from /src/main/resources/examples/arc-site to a separate folder
Run
arc --watchin that folder which runs in hot-reload mode.cd to /site directory and type
jwebserverOpen http://localhost:8000 in your browser.
Arc expects the following directory structure:
project/ ├── app/ │ ├── posts/ # Blog posts in Markdown │ ├── pages/ # Static pages in Markdown │ ├── templates/ # HTML templates │ ├── assets/ # Static assets (CSS, JS, images) │ └── site.config # Site configuration (optional) └── site/ # Generated site (created by Arc) Arc supports an optional app/site.config file for global site settings:
--- title: My Arc Sitedescription: A beautiful website built with Arcurl: https://example.comauthor: Your Namelanguage: en-usrss_max_items: 10 ---These settings are used for RSS feed generation and are available as template variables.
Arc uses a simple template system with the following features:
{{variable }}for variable substitution{% if condition %}...{% endif %}for conditionals{% for item in collection %}...{% endfor %}for loops{% include "file.html" %}for including partials
--- title: My Awesome Postdate: 2025-05-26template: post.htmldescription: A brief description of the post --- # My Awesome PostThis is the content of my post...