(S)ophie's (S)tatic (S)ite (G)enerator
| .forgejo/workflows | ||
| src | ||
| .gitignore | ||
| bun.lockb | ||
| metadata.md | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
(S)ophie's (S)tatic (S)ite (G)enerator
Sophie's Static Site Generator (aka. SSSG) is a infnintely expandable SSG based on plugins. It ships with some plugins already included, such as:
- A compile time JS runner
sssg/src/plugins/compile-time-js
Example:{& 1+3 &}will give you4in the generated code - Development plugin
sssg/src/plugins/dev
Creates a websocket server for instant updates and a HTTP server for serving up data at (by default)localhost:8080. - Image optimizations
sssg/src/plugins/image-optimization
Optimizes all of your images sometimes losslessly. Uses thesharpNPM module to re-encode all image files. - Markdown compiler
sssg/src/plugins/markdown-compiler
Compiles all.mdfiles into.htmlfiles, while taking out the metadata. - Markdown metadata extractor
sssg/src/plugins/markdown-metadata
Extracts metadata into a .json file with the same name as the .MD file. Metadata format follows this format. - PostCSS
sssg/src/plugins/postcss
PostCSS plugin, allows you to use PostCSS in your app. - Typescript compiler
sssg/src/plugins/postcss
Allows you to compile typescript into .js files. Supports TSX with Preact. - Variables
ssg/src/plugins/variables
Define variables in the build script to later use in the code.__SOME_VARIABLE__.
You can easily create more plugins.
All plugins are tested induvidually and in different ways. You can run all of the tests with bun test, however every commit they're already tested on both Windows and Linux.
Usage
bun add sssg
Example
import SSSG from "sssg";
import Dev from "sssg/src/plugins/dev";
import TSCompiler from "sssg/src/plugins/ts-compiler";
import * as path from "path";
const sssg = new SSSG({
outputFolder: path.join(__dirname, "dist"),
inputFolder: path.join(__dirname, "website"),
});
await sssg.run({
plugins: [
new TSCompiler(),
new Dev(sssg),
],
});
await sssg.build();
design goals:
- rewrite and generate custom HTML/TS/JS/whatever..
- allow for variables and other important features in buildsystem->html
- plugins, this ties together the top two
- HMR and HTML/CSS reloading (in the Dev plugin)
- Rewriteable file renaming
- Every plugin runs on the same set of files, and can rename and reinject multiple times