ssgo
The minimalistic but flexible static site generator.
ssgo
is built with Deno and relies on it.
Documentation
Read the documentation at https://ssgo.netlify.app/docs.
Quickstart
To install ssgo
using Deno:
deno install --unstable --allow-read --allow-write --allow-net --allow-run -q https://deno.land/x/ssgo/ssgo.ts
To create a ssgo
project just run:
mkdir my-ssgo-project && cd my-ssgo-project
ssgo init
Here’s what a ssgo
project looks like:
├── creators/ <- here go the scripts creating your pages
├── templates/ <- here go the templates of your pages
├── components/ <- here go your custom components
└── static/ <- here go your static files
To launch a build: just run:
ssgo
Your site will be built inside of the dist/
directory.
To start development mode with file watching, and a hot reloaded dev server:
ssgo dev
The dist/
directory will be served over http://localhost:5580
.
Overview
ssgo
basically relies on two types of files: templates, and creators.
Templates are the skeleton of your pages and are simply HTML files living inside the templates/
directory (and its subdirectories):
<!-- templates/my-template.html -->
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ title }}</title>
<link rel="stylesheet" href="index.css" />
</head>
<body>
<h1>Hello, ssgo !</h1>
<p>Just run <code>ssgo dev</code> to get started !</p>
</body>
</html>
Creators are like page factories. Using a buildPage
function given by ssgo
, they use templates and datas to build pages. Creators live in the creators/
directory (and its subdirectories):
// creators/my-creator.ts
import type { BuildPage } from "https://deno.land/x/ssgo/mod.ts"
import { fetchTitle } from "../src/api.ts"
export default async function (buildPage: BuildPage) {
const title = await fetchTitle()
buildPage(
"my-template.html" // template to use to build the page,
{ title: title } // data to use to build the page,
{ filename: "index.html", dir: "" } // build options
)
}
ssgo
also provides much more cool stuffs like components, automatic static files management, or just-in-time page build in dev mode. You can learn more about all this things by reading the documentation.
Roadmap
- Pass undefined if variable doesn’t exist when passing props
- Use CWD’s
.tsconfig.json
for typescript compilation if exists - Add a support for a config file (.ssgorc, ssgo.config.js)
- Provide a way to opt out of static ressources resolution on a per-file basis