With Docker, from my-site/:
mkdir -p public
docker run --rm -u "$(id -u):$(id -g)" \
-v "$PWD:/site" -v "$PWD/public:/out" \
ghcr.io/thosted/tilder:1.4.1 \
python3 -B /tilder/build.py --root /site --out /out
-u makes you the owner of what the build writes; creating public/ first keeps Docker from creating it as root.
With Python, from my-site/, next to the tilder/ checkout:
python3 ../tilder/build.py
tilder builds the current folder when it has a content/ folder, into its public/. From anywhere else, name both: --root is the project to build, --out where the site goes.
python3 tilder/build.py --root my-site --out my-site/public
The build prints what it found, then every file it wrote:
$ python3 ../tilder/build.py
languages: en (default), fr
types: event, member, page, post
collections: blog (post, 1 item), events (event, no folder), ...
[10:42:07] built /home/me/my-site/public: 404.html, ...
A second build writes only what changed, and deletes from the output folder every file the build no longer produces: the folder belongs to tilder, keep nothing else in it.
A problem in the content stops the build with a message that names the file and says what to do; the exit code is then 1. A warning, such as an image without alt text or a description too long for search engines, does not stop it. Every message is listed in the command-line reference.