press

command module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2026 License: MIT Imports: 15 Imported by: 0

README

press

GitHub release CI Go version Go Report Card

A fast, single-binary static-site generator built for developers and AI agents alike.

press turns structured Markdown content into a clean static website — no config files, no plugin ecosystem, no magic. One binary. Zero runtime dependencies.


Installation

One-liner (Linux & macOS)
curl -fsSL https://raw.githubusercontent.com/ChristianKreuzberger/press/main/install.sh | bash

The script automatically detects your OS and CPU architecture, downloads the correct binary from the latest GitHub Release, and installs it to /usr/local/bin (or ~/.local/bin when you don't have root access).

Manual download

Pre-built binaries for Linux, macOS, and Windows (amd64 & arm64) are attached to every release.

Build from source
go install github.com/ChristianKreuzberger/press@latest

Quick start

# 1. Scaffold a new site in the current directory
press init

# 2. Create your first page (optionally inside a section)
press create page about
press create page blog/my-first-post

# 3. Run it locally
press serve

# 4. Edit things and observe changes
All commands
Command Description
press init [dir] [--theme name] Scaffold a new site (template.html + pages/); choose a built-in theme
press list page List all pages
press create page <name> [--file f.md] Create a new page; name may include sections (e.g. blog/my-post, blog/2026/my-post)
press update page <name> --file f.md Replace a page's content
press delete page <name> Delete a page
press list section List all sections
press create section <name> [--file f.md] Create a new section (folder + index.md)
press update section <name> --file f.md Replace a section's index content
press delete section <name> Delete a section and all its pages
press build [-output dir] Build the site into dist/ (default)
press serve [-port N] [-output dir] Build and serve the site locally; rebuilds on file changes
press tree Show a tree of all pages and sections
press --version Print the installed version

Run any command with --help for detailed usage.


Why press?

Most static-site generators come with a steep learning curve: elaborate directory conventions, dozens of config knobs, and a plugin ecosystem you need to understand before you can publish a single page. press takes the opposite approach:

  • One binary, nothing else. Drop it on any machine and it works.
  • Predictable layout. pages/ holds your content, template.html is your theme, dist/ is the output. That's the whole mental model.
  • Agent friendly. Every action is a CLI flag or subcommand. No hidden state. Easy to script, pipeline, or drive from an AI agent.
  • Your output is yours. No telemetry, no analytics, no phoning home — ever.

Perfect for personal websites, project landing pages, technical blogs, portfolios, and documentation sites.


Themes

press ships three built-in themes. Choose one when scaffolding a new site:

press init --theme dark      # default — GitHub-inspired dark mode
press init --theme light     # clean editorial style with serif headings
press init --theme terminal  # retro green-on-black, all monospace

The selected theme is written to template.html. You can edit it freely afterwards or replace it entirely with your own design.

See docs/themes.md to learn how templates work and how to create a custom theme.


Project layout

my-site/
├── template.html        # Your HTML theme ({{.Title}} and {{.Content}} are injected)
├── pages/
│   ├── index.md         # Becomes dist/index.html
│   ├── about.md         # Becomes dist/about.html
│   └── blog/            # A section (group of related pages)
│       ├── index.md     # Becomes dist/blog/index.html (section landing page)
│       └── my-post.md   # Becomes dist/blog/my-post.html
└── dist/                # Generated output (created by `press build`)
Pages and sections
  • Pages live directly under pages/ and become top-level HTML files (e.g. dist/about.html).
  • Sections are subdirectories under pages/. Each section must contain an index.md that acts as its landing page. Other .md files in the directory become pages within the section.
  • Navigation generated by the default template links top-level pages by name and sections by their index page.

Frontmatter

Every .md file starts with a YAML frontmatter block created automatically by press create page and press create section:

---
title: "My Page"
alias: ""
tags: []
weight: 0
created_at: "2026-04-22T10:00:00Z"
updated_at: "2026-04-22T10:00:00Z"
---
Field Type Description
title string Display name used in navigation and the page <title>
alias string Alternative URL slug (reserved for future use)
tags list Content tags (reserved for future use)
weight integer Controls the order of pages and sections in navigation. Lower values appear first. A value of 0 (default) means the item is sorted after all weighted items, in filesystem order.
created_at RFC 3339 Creation timestamp
updated_at RFC 3339 Last-updated timestamp
Navigation ordering with weight

Set weight on any page or section to control where it appears in the generated navigation:

---
title: "About"
weight: 1
---
---
title: "Blog"
weight: 2
---

Pages without a weight (or weight: 0) are listed after all weighted items in their natural filesystem order.


Markdown extensions

press supports a small set of shortcodes on top of standard GitHub-Flavored Markdown.

YouTube embed

Place a !youtube[VIDEO_ID] shortcode on its own line to embed a responsive YouTube player:

!youtube[dQw4w9WgXcQ]

The VIDEO_ID is the 11-character identifier from the YouTube URL (e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ).

The shortcode renders as a privacy-enhanced iframe (youtube-nocookie.com) that fills 100% of the column width and maintains a 16:9 aspect ratio:

<iframe style="width:100%;aspect-ratio:16/9;"
  src="https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ"
  title="YouTube video player"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  allowfullscreen></iframe>

The shortcode is only expanded when it appears on a standalone line. It is left as-is inside fenced code blocks (```) and inline code spans (`), so you can document it safely.


AI Agent Skill

press ships a GitHub Copilot skill that lets AI agents install and use the tool without any extra prompting. Once installed, the agent automatically knows how to scaffold sites, manage pages and sections, build, and serve.

Install the skill

Download the skill into your project's .github/skills/ directory:

mkdir -p .github/skills/press
curl -fsSL https://raw.githubusercontent.com/ChristianKreuzberger/press/main/.github/skills/press/SKILL.md \
  -o .github/skills/press/SKILL.md

Or install it user-wide so it is available across all projects:

mkdir -p ~/.copilot/skills/press
curl -fsSL https://raw.githubusercontent.com/ChristianKreuzberger/press/main/.github/skills/press/SKILL.md \
  -o ~/.copilot/skills/press/SKILL.md

Once in place, GitHub Copilot will discover it automatically. You can also invoke it explicitly in chat by typing /press.


Contributing

Contributions are welcome. Please read AGENTS.md before opening a pull request — it explains the project conventions and how AI agents can contribute safely.

go build ./...   # build
go test ./...    # run tests
go vet ./...     # static analysis

License

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
builder
Package builder converts press pages to HTML using a template.
Package builder converts press pages to HTML using a template.
markdown
Package markdown provides a Markdown to HTML converter backed by goldmark with GitHub-Flavored Markdown (GFM) extensions.
Package markdown provides a Markdown to HTML converter backed by goldmark with GitHub-Flavored Markdown (GFM) extensions.
page
Package page provides operations for managing press pages.
Package page provides operations for managing press pages.
section
Package section provides operations for managing press sections.
Package section provides operations for managing press sections.
themes
Package themes provides built-in HTML themes for press sites.
Package themes provides built-in HTML themes for press sites.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL