Live at https://wurstlang.org/
This folder contains the complete source of the WurstScript website, configured as jekyll project and deployed via github-pages.
-
Check whether you have Ruby 3.2+ installed:
ruby --versionThis project currently uses Bundler 4.x (see
Gemfile.lock), which requires Ruby >= 3.2. -
Install Bundler:
gem install bundler -
Execute
bundler install -
Generate the API reference from a sibling checkout of
WurstStdlib2(requires Deno 2.x):cd tools/docgen deno task gen cd ../..
See the doc generator guide for custom source paths.
-
Run the server with:
bundler exec jekyll serve
We use Sass as stylesheet language and you can find the files inside the _sass folder.
Bootstrap, Font Awesome, and Prism are managed through package.json. After
updating them, refresh the checked-in browser assets with:
npm install
npm run vendor:frontendDo not edit files under assets/plugins/bootstrap, assets/plugins/font-awesome,
or assets/plugins/prism by hand.
Tutorials are included as part of the documentation in their own section.
To create a new tutorial:
- Create a new markdown file in the
_tutorials/folder, for examplecp saveload.md new_tutorial.md. - Adjust the frontmatter such as title, excerpt, date
- The tutorial will be automatically added to the documentation page, the sidebar is generated from markdown headings
Adding a standard library doc page works almost the same as tutorials.
- Create a guide in
_doc/stdlib/with thestdlibdoclayout. Use an existing guide as a starting point. - Put supporting section pages in a subfolder and list their document IDs in the guide's
sectionsfrontmatter. - Link the guide from the relevant category in
_doc/stdlib/intro.md. - Add its package-to-guide mapping to
_data/stdlib_curated.ymlto link it from the generated API reference.
API pages under _doc/stdlib/ref/ are generated from standard-library source comments.
See the doc generator guide before updating them.
The site uses pagefind for fully local static search. No external API key is required.
The index is generated automatically by CI on every deploy. See
.github/workflows/pages.yml. It builds the
site, runs Pagefind against the built _site, and deploys the result to
GitHub Pages. Because the index is rebuilt from the actual content on every
deploy, it can never drift out of sync.
Do not commit a
pagefind/folder. It is.gitignored on purpose. A hand-committed index drifts from the content and breaks search (you get "SEARCH INDEX NOT FOUND" on the live site). Let CI generate it.
In repo Settings → Pages → Build and deployment, set Source to
"GitHub Actions". The workflow then publishes the site (custom domain
wurstlang.org is preserved via the CNAME file).
jekyll serve does not generate a search index. To preview search locally:
- Build the site:
bundle exec jekyll build - Generate the index into
_site/pagefind:npx -y pagefind@1.5.2 --site _site - Serve
_site(e.g.npx -y serve _site). Search loads from/pagefind/pagefind.js.
Repeat steps 1-2 after content changes you want reflected in local search.
Prerequisite: Node.js (for npx pagefind).
This repo now includes a root-level Jenkinsfile that automatically:
- Installs Ruby gems (
bundler install) - Builds the site (
bundler exec jekyll build) - Generates Pagefind index (
npx -y pagefind --site _site) - Archives
_site/**as build artifacts
To use it:
- Create a Jenkins Pipeline (or Multibranch Pipeline) job for this repository.
- Keep script source as
Jenkinsfilein SCM. - Ensure the Jenkins agent has Ruby/Bundler and Node.js/npm available.