Complete website rewrite
This PR replaces the current CMS website with a static version of it built using Jekyll. - Everything should be working 1 to 1 with the same permalinks except for the `/news` page (not articles) which was renamed as `/blog` (old links will redirect to new ones). - The showcase entries on the home page now redirect to their showcase page in our site so that the user can choose which store front or page to visit next. - I also changed the first link from the nav bar to go to the showcase page since the features one is still pretty outdated. Co-authored-by: Yuri Sizov <yuris@humnom.net>
@@ -1,16 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{htm,css,js,json}]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
70
.github/workflows/ci.yml
vendored
@@ -1,70 +0,0 @@
|
||||
name: Continuous integration
|
||||
on:
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Validate formatting and setup
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Lint and format CSS
|
||||
run: |
|
||||
npm ci
|
||||
npm run lint
|
||||
|
||||
- name: Install PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: "7.3"
|
||||
tools: composer:v2
|
||||
extensions: curl, fileinfo, gd, mbstring, openssl, pdo, pdo_mysql, xml, zip
|
||||
# Disable Xdebug to improve performance.
|
||||
coverage: none
|
||||
|
||||
- name: Set up MySQL and install OctoberCMS
|
||||
run: |
|
||||
sudo systemctl start mysql
|
||||
echo -e '[client]\nuser="root"\npassword="root"' > "$HOME/.my.cnf"
|
||||
|
||||
mysql -e "CREATE DATABASE IF NOT EXISTS october;"
|
||||
# https://stackoverflow.com/questions/52364415/php-with-mysql-8-0-error-the-server-requested-authentication-method-unknown-to
|
||||
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';"
|
||||
|
||||
# Explicitly allow all plugins to run scripts during installation.
|
||||
composer config -g allow-plugins true
|
||||
|
||||
mkdir -p october
|
||||
composer create-project october/october ./october "v1.0.474" --no-dev
|
||||
pushd october
|
||||
|
||||
php artisan key:generate
|
||||
|
||||
# Copy project files.
|
||||
cp -r ../themes/* themes
|
||||
cp -r ../docker/php/config/* config
|
||||
# Fix up the config for CI.
|
||||
sed -i "s/'host' => 'mariadb'/'host' => 'localhost'/g" config/database.php
|
||||
sed -i "s/'username' => 'godot'/'username' => 'root'/g" config/database.php
|
||||
sed -i "s/'password' => 'godot'/'password' => 'root'/g" config/database.php
|
||||
|
||||
php artisan october:up
|
||||
php artisan october:fresh
|
||||
|
||||
php artisan plugin:install paulvonzimmerman.patreon
|
||||
php artisan plugin:install pikanji.agent
|
||||
php artisan plugin:install rainlab.blog
|
||||
php artisan plugin:install rainlab.translate
|
||||
php artisan plugin:install sobored.rss
|
||||
|
||||
cp -r ../plugins/* plugins
|
||||
composer update -d ./plugins/godotengine/i18n
|
||||
php artisan october:up
|
||||
|
||||
- name: Run Lighthouse CI
|
||||
run: |
|
||||
npm install @lhci/cli@0.6.x
|
||||
npx lhci autorun
|
||||
19
.github/workflows/reminder.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Yearly update security.txt
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 1 11 *"
|
||||
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
jobs:
|
||||
create-issue:
|
||||
name: Create issue
|
||||
runs-on: ubuntu-latest
|
||||
permissions: write-all
|
||||
steps:
|
||||
- name: Create issue
|
||||
run: |
|
||||
gh issue create --repo '${{ github.repository }}' --title 'Update `security.txt` expiration date' --body 'This is the yearly reminder to update `.well-known/security.txt`'
|
||||
51
.gitignore
vendored
@@ -1,47 +1,6 @@
|
||||
# Exclude everything by default (this is a CMS!), and whitelist the safe stuff
|
||||
/*
|
||||
!/README.md
|
||||
!/DEVELOPMENT_SETUP.md
|
||||
!/ISSUE_TEMPLATE.md
|
||||
!/LICENSE.txt
|
||||
!.well-known/
|
||||
# Build artifacts and cache
|
||||
.jekyll-cache
|
||||
_site
|
||||
|
||||
# Vim
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Git stuff
|
||||
!.gitattributes
|
||||
!.gitmodules
|
||||
!.gitignore
|
||||
|
||||
# Local development tools
|
||||
node_modules
|
||||
|
||||
# Winter CMS files
|
||||
# Themes
|
||||
!/themes
|
||||
# Custom plugins
|
||||
!/plugins
|
||||
|
||||
# Docker
|
||||
/docker/mariadb/init/*.sql
|
||||
/docker/mariadb/storage
|
||||
!/docker
|
||||
!/docker/mariadb/init/000-setup.sql
|
||||
|
||||
# Continuous integration
|
||||
!.github/
|
||||
!lighthouserc.js
|
||||
|
||||
# Editor config
|
||||
!.editorconfig
|
||||
|
||||
# Linting/formatting setup
|
||||
!.prettierignore
|
||||
!package-lock.json
|
||||
!package.json
|
||||
|
||||
# OS specific
|
||||
.DS_Store
|
||||
docker/.DS_Store
|
||||
# Code editors
|
||||
.vscode/
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
# Ignore everything by default.
|
||||
/*
|
||||
|
||||
# Ignore October templates which Prettier can't format.
|
||||
*.htm
|
||||
|
||||
# Only format the files specified below.
|
||||
!/.github/
|
||||
!/docker/
|
||||
!/themes/
|
||||
!/plugins/
|
||||
!/ISSUE_TEMPLATE.md
|
||||
!/README.md
|
||||
!/lighthouserc.js
|
||||
!/package.json
|
||||
|
||||
# Ignore third-party CSS and JavaScript.
|
||||
/themes/godotengine/assets/css/highlight.obsidian.min.css
|
||||
/themes/godotengine/assets/css/normalize.min.css
|
||||
/themes/godotengine/assets/css/tobii.min.css
|
||||
/themes/godotengine/assets/leaflet/
|
||||
/themes/godotengine/assets/js/
|
||||
@@ -1,93 +0,0 @@
|
||||
# Local development setup
|
||||
|
||||
The provided Docker setup takes care of installing all the necessary
|
||||
dependencies so you don't have to.
|
||||
|
||||
## Automatic Docker setup
|
||||
|
||||
Clone this repository, and then follow the steps described below:
|
||||
|
||||
### 0. Prepare the database dump.
|
||||
|
||||
**You don't need a database dump to contribute, just skip to step 1.**
|
||||
|
||||
If you have a database dump, put it into the `./docker/mariadb/init` folder.
|
||||
|
||||
- Make sure that your script starts with the line `USE october;` and that the
|
||||
file extension is `.sql`.
|
||||
- Every `.sql` and `.sh` file from the `./docker/mariadb/init` folder will be
|
||||
automatically executed when building the container.
|
||||
|
||||
### 1. Open the `./docker` folder.
|
||||
|
||||
Using a terminal, or another command-line environment, navigate to the `./docker`
|
||||
folder.
|
||||
|
||||
```sh
|
||||
# Assuming you're in the project root.
|
||||
cd ./docker
|
||||
```
|
||||
|
||||
### 2. Run the Docker compose command.
|
||||
|
||||
Execute the following command:
|
||||
|
||||
```sh
|
||||
docker-compose -p "godot-website" up --build -d --force-recreate
|
||||
```
|
||||
|
||||
- You can replace `"godot-website"` with anything else to help you identify this
|
||||
project in your Docker manager.
|
||||
- In the future, you can use the `./docker/restart.sh` script to rebuild containers
|
||||
(Linux and macOS only).
|
||||
|
||||
The script will take **a couple of minutes** to run the first time. After the
|
||||
build is done, the containers will automatically start and perform their first
|
||||
time setup. Check the logs of the `godotengine-org--php` container, as it takes
|
||||
more time to finish. You will see the following line in the logs when it's done:
|
||||
|
||||
> Godot Website is READY to use!
|
||||
|
||||
### 3. Open the website in a browser!
|
||||
|
||||
You can see the website at [http://localhost:8080](http://localhost:8080).
|
||||
|
||||
- The control panel is located at [http://localhost:8080/backend](http://localhost:8080/backend).
|
||||
- The default admin account is `admin/admin`.
|
||||
|
||||
You can now start contributing and changing files in `./themes/godotengine`.
|
||||
Changes should be visible in real time, without a need to restart the web server.
|
||||
|
||||
## Interfacing with Docker containers
|
||||
|
||||
You can use the standard syntax to either execute a shell command or connect
|
||||
to the running container:
|
||||
|
||||
```sh
|
||||
# Execute shell command.
|
||||
docker exec -it godotengine-org--[php|mariadb] [command]
|
||||
# Connect to a remote shell.
|
||||
docker exec -it godotengine-org--[php|mariadb] /bin/bash
|
||||
```
|
||||
|
||||
There are several shell scripts that come with the project, that may be useful
|
||||
when developing (assuming you're running Linux or macOS).
|
||||
|
||||
- For the web server:
|
||||
- `./docker/php/bash.sh` starts a bash session with the PHP container.
|
||||
- `./docker/php/install-plugin.sh` is used to install additional CMS plugins with `artisan`.
|
||||
- `./docker/php/log.sh` is used to access logs of the PHP container.
|
||||
- For the database server:
|
||||
- `./docker/mariadb/bash.sh` starts a bash session with the MariaDB container.
|
||||
- `./docker/mariadb/log.sh` is used to access logs of the MariaDB container.
|
||||
- `./docker/mariadb/mysql.sh` starts a MySQL shell session in the MariaDB container.
|
||||
|
||||
## Manual setup
|
||||
|
||||
If you would rather configure your own development environment, you
|
||||
can investigate the follow files to replicate the required steps:
|
||||
|
||||
- `./docker/docker-compose.yml`
|
||||
- `./docker/mariadb/init/000-setup.sql`
|
||||
- `./docker/php/Dockerfile`
|
||||
- `./docker/php/init/init.sh`
|
||||
6
Gemfile
Normal file
@@ -0,0 +1,6 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'jekyll', '4.2.2'
|
||||
gem 'jekyll-paginate-v2'
|
||||
gem 'jekyll-multiple-languages-plugin'
|
||||
gem 'jekyll-redirect-from'
|
||||
80
Gemfile.lock
Normal file
@@ -0,0 +1,80 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.10)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
eventmachine (1.2.7)
|
||||
ffi (1.15.5)
|
||||
ffi (1.15.5-x64-mingw-ucrt)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.8.0)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.2.2)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 1.0)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 2.3)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.4.0)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 3.0)
|
||||
safe_yaml (~> 1.0)
|
||||
terminal-table (~> 2.0)
|
||||
jekyll-multiple-languages-plugin (1.8.0)
|
||||
jekyll (>= 2.0, < 5.0)
|
||||
jekyll-paginate-v2 (3.0.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-redirect-from (0.16.0)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-sass-converter (2.2.0)
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
kramdown (2.4.0)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.7.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.4.0)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (5.0.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.5)
|
||||
rouge (3.30.0)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
terminal-table (2.0.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
unicode-display_width (1.8.0)
|
||||
|
||||
PLATFORMS
|
||||
arm64-darwin-22
|
||||
x64-mingw-ucrt
|
||||
x64-unknown
|
||||
x86_64-linux-musl
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (= 4.2.2)
|
||||
jekyll-multiple-languages-plugin
|
||||
jekyll-paginate-v2
|
||||
jekyll-redirect-from
|
||||
|
||||
BUNDLED WITH
|
||||
2.4.2
|
||||
@@ -1,5 +1,5 @@
|
||||
Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.
|
||||
Copyright (c) 2014-2022 Godot Engine contributors (cf. https://github.com/godotengine/godot/blob/master/AUTHORS.md).
|
||||
Copyright (c) 2014 - present Godot Engine contributors (cf. https://github.com/godotengine/godot/blob/master/AUTHORS.md).
|
||||
Copyright (c) 2007 Juan Linietsky, Ariel Manzur.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
172
README.md
@@ -1,35 +1,21 @@
|
||||
# Godot Website
|
||||
# Godot Engine Website
|
||||
|
||||
This repository contains the theme used by the Godot Engine's OctoberCMS/WinterCMS
|
||||
instance. The theme describes both the styling of the website and the components
|
||||
of its layouts, as well as some of its content.
|
||||
|
||||
- [OctoberCMS](https://github.com/octobercms/october) is the original CMS platform
|
||||
of choice.
|
||||
- [WinterCMS](https://github.com/wintercms/winter) is the current CMS platform, a fork
|
||||
of October with more active development.
|
||||
|
||||
_WinterCMS_ is compatible with _OctoberCMS_, and uses the same plugin system. This is
|
||||
at least true for the version of the project that we use.
|
||||
|
||||
This repository also contains a Docker setup to be used by contributors. It
|
||||
is not used for production.
|
||||
Welcome to the source code for the Godot Engine website. This is a static website, generated offline using
|
||||
[Jekyll](https://jekyllrb.com/).
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are always welcome! Godot website, just like Godot engine, is open source.
|
||||
|
||||
However, when contributing to the website, it is important to keep in mind that it
|
||||
acts as a public face of Godot organization and community. Thus, substantial
|
||||
changes must be discussed ahead of time. You don't necessarily need to open a formal
|
||||
Godot improvement proposal like you do with engine features, but starting an issue
|
||||
on this repository or joining the discussion on the
|
||||
[Godot Contributors Chat](https://chat.godotengine.org/channel/website) is a good idea.
|
||||
However, when contributing to the website, it is important to keep in mind that it acts as a public face of Godot
|
||||
organization and community. Thus, substantial changes must be discussed ahead of time. You don't necessarily need to
|
||||
open a formal Godot improvement proposal like you do with engine features, but starting an issue on this repository
|
||||
or joining the discussion on the [Godot Contributors Chat](https://chat.godotengine.org/channel/website) is a good
|
||||
idea.
|
||||
|
||||
### Browser support
|
||||
## Browser support
|
||||
|
||||
When working on new features, keep in mind this website only supports
|
||||
_evergreen browsers_:
|
||||
When working on new features, keep in mind this website only supports _evergreen browsers_:
|
||||
|
||||
- Chrome (latest version and N-1 version)
|
||||
- Edge (latest version and N-1 version)
|
||||
@@ -39,37 +25,131 @@ _evergreen browsers_:
|
||||
|
||||
**Internet Explorer isn't supported.**
|
||||
|
||||
### Dependencies
|
||||
## Development
|
||||
|
||||
This project requires the following stack:
|
||||
### Building
|
||||
|
||||
- PHP 7.2+ & Composer 2
|
||||
- MySQL/MariaDB
|
||||
- OctoberCMS/WinterCMS v1.0.xxx
|
||||
To build the website locally, follow these steps:
|
||||
|
||||
There are also some linting tools that can be run locally that require Node.js.
|
||||
1. Install [Jekyll](https://jekyllrb.com/docs/installation/); make sure `bundle` is available from the command line.
|
||||
2. Clone this repository.
|
||||
3. Install the necessary dependencies: `bundle install`.
|
||||
4. Build the site: `bundle exec jekyll build`.
|
||||
|
||||
### Local development setup
|
||||
For simplicity, these two commands are also available as a `build.sh` script in this repository.
|
||||
|
||||
This project comes with a [Docker](https://docker.com) setup that can be used to quickly
|
||||
create a network of compatible ready-to-use containers.
|
||||
Alternatively, you can also use the official Docker container for Jekyll. This container is designed to be run once
|
||||
to perform the build, so you don't need to compose and permanently store it in your Docker setup. If you're on Linux,
|
||||
execute the following command:
|
||||
|
||||
Using this setup, you can have a local copy of the project, without the production database.
|
||||
For development purposes, you don't need that database, as the only thing that is specific
|
||||
to production is blog posts, which can be easily recreated if required. Everything else
|
||||
is located in the `./themes/godotengine` folder, including all static pages and their content.
|
||||
```shell
|
||||
docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh
|
||||
```
|
||||
|
||||
To start contributing, please follow this [Local development setup](DEVELOPMENT_SETUP.md) guide.
|
||||
On Windows (from `CMD.exe`):
|
||||
|
||||
### Syntax highlighting
|
||||
```shell
|
||||
docker run --rm --volume="%CD%:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh
|
||||
```
|
||||
|
||||
If you use Visual Studio Code, you can install the
|
||||
[OctoberCMS Template Language](https://marketplace.visualstudio.com/items?itemName=dqsully.octobercms-template-language)
|
||||
extension to benefit from syntax highlighting in `.htm` templates.
|
||||
Building may take several minutes to finish.
|
||||
|
||||
### Local server
|
||||
|
||||
As this is a static website, it can be served locally using any server stack you want.
|
||||
|
||||
- It is possible to use Jekyll and `bundle` to immediately serve the pages upon building it. To do this, replace the final build
|
||||
step with `bundle exec jekyll serve`. With Docker you can use `build-and-serve.sh`.
|
||||
- You can also use Python, which is likely pre-installed on your system. To serve the pages with its local server, run
|
||||
`python -m http.server 4000 -d ./_site`.
|
||||
|
||||
After following either one of these steps the site will be available at `http://localhost:4000`.
|
||||
|
||||
## Project structure
|
||||
|
||||
### Content data and metadata
|
||||
|
||||
The following folders contain data files, used for generating more dynamic parts of the website, such as the blog,
|
||||
the showcase, the downloads page. These pages are written in Markdown and contain a metadata header used by the
|
||||
generator. Markdown files form Jekyll collections with the same name as their containing folder. To create a new
|
||||
Markdown document, you can start by copying an existing one and then change its content.
|
||||
|
||||
- `collections/_article` contains articles for the blog. Each article is written in Markdown with a metadata header located at
|
||||
the top of the file. The following metadata fields are required for the article to be correctly displayed throughout
|
||||
the website: `title`, `excerpt`, `categories`, `author`, `image`, and `date`. The name of the file acts as a slug in
|
||||
the generated URL.
|
||||
|
||||
- `collections/_download` contains the download instructions for Godot builds per platform. Each document is written in Markdown
|
||||
with a metadata header located at the top of the file. Download links are generated from the `downloads` field in the
|
||||
metadata. When adding a new platform, make sure to create a new tab for it in the `/_layouts/download.html` template.
|
||||
|
||||
- `collections/_showcase` contains entries for the showcase. Each article is written in Markdown with a metadata header located at
|
||||
the top of the file. Showcase entries can be featured on the home page by setting the `featured_in_home` field to
|
||||
`true`. The image used is the one from the `image` field.
|
||||
|
||||
Some information is also stored in YAML files, acting as a file-based database for several meta properties.
|
||||
|
||||
- `_data` contains various metadata files for the website:
|
||||
- `authors.yml` contains a list of authors used for the blog articles;
|
||||
- `categories.yml` contains a list of categories for the blog articles;
|
||||
- `communities.yml` contains a list of user communities for the `/community/user-groups` page.
|
||||
|
||||
### Content pages and templates
|
||||
|
||||
The following folders contain entry points for almost every website page, as well as shared templates and assets. The
|
||||
templating language used in Jekyll is [liquid](https://jekyllrb.com/docs/liquid/).
|
||||
|
||||
- `_i18n` contains translations for the website. The default language is English. Only static information is
|
||||
translated, with the blog and the showcase being displayed in English. **Currently disabled and a work in progress.**
|
||||
|
||||
- `_includes` contains navigation and footer elements used by most pages. If you want to create an element to reuse
|
||||
in multiple pages, you can create a new include file here.
|
||||
|
||||
- `_layouts` contains the wrapping content for the pages. Each layout inherits from `_layouts/default.html` which
|
||||
contains the main structure of the page, including the head and meta tags. Other layouts are used for specific pages,
|
||||
like the blog, download, and showcase pages.
|
||||
|
||||
- `assets` contains static assets for the website. This includes the CSS, JS, and images used in the theme and layout.
|
||||
For media content used in articles and other pages check the `storage` folder. **Some files may be obsolete and
|
||||
unused.**
|
||||
|
||||
- `pages` contains most of the pages for the website. The final URL for each page is specified in the metadata header
|
||||
using the `permalink` field. Generally, it should map to the file's path inside `pages`. Dynamic content pages are
|
||||
generated using Markdown collections and layouts.
|
||||
|
||||
### File storage
|
||||
|
||||
- `storage` contains media and other files uploaded for use in dynamic content pages, such as the blog, the showcase,
|
||||
the events. **Some files may be obsolete and unused.**
|
||||
|
||||
### Buildsystem and service files
|
||||
|
||||
This project is build with Jekyll, with most of the build instructions located in `Gemfile` and `_config.yml`.
|
||||
The following folders contain extra files and scripts on top of that.
|
||||
|
||||
- `_migration` contains files used when migrating from the previous version of the website. Namely, there is a
|
||||
database of posts extracted from the old website. It was used to generate the new Markdown articles. We are keeping
|
||||
it for now in case there are some issues with the migration.
|
||||
|
||||
## Content update guidelines
|
||||
|
||||
### Updating Godot download version
|
||||
|
||||
When a new stable build of the engine is released, you need to update the number and date in the `/_config.yml` file.
|
||||
This looks like this:
|
||||
|
||||
```
|
||||
# Godot download version
|
||||
stable_version: "3.5.1"
|
||||
stable_version_date: "28 September 2022"
|
||||
```
|
||||
|
||||
After this change is merged and the website is built, everything referencing the engine version should be updated
|
||||
automatically, including download links for every platform.
|
||||
|
||||
## Resources
|
||||
|
||||
- Join the discussion on Godot Contributors Chat in the
|
||||
[#website](https://chat.godotengine.org/channel/website) channel.
|
||||
- When working on the theme, please take note of the
|
||||
[website stats](https://stats.tuxfamily.org/godotengine.org).
|
||||
- Join the discussion on Godot Contributors Chat in the [#website](https://chat.godotengine.org/channel/website)
|
||||
channel.
|
||||
- Please, consider the [website usage stats](https://stats.tuxfamily.org/godotengine.org) when relying on modern
|
||||
web technologies (web standards support, file type support, etc).
|
||||
|
||||
96
_config.yml
Normal file
@@ -0,0 +1,96 @@
|
||||
# Settings
|
||||
exclude: [".github", "Gemfile", "Gemfile.lock", "build.sh", "build-and-serve.sh", "README.md"]
|
||||
permalink: pretty
|
||||
|
||||
collections_dir: collections
|
||||
collections:
|
||||
article:
|
||||
output: true
|
||||
showcase:
|
||||
output: true
|
||||
download:
|
||||
output: true
|
||||
|
||||
defaults:
|
||||
- scope:
|
||||
path: ""
|
||||
type: "article"
|
||||
values:
|
||||
layout: "article"
|
||||
og_type: "article"
|
||||
- scope:
|
||||
path: ""
|
||||
type: "download"
|
||||
values:
|
||||
layout: "download"
|
||||
|
||||
# Plugins
|
||||
plugins:
|
||||
- jekyll-paginate-v2
|
||||
- jekyll-redirect-from
|
||||
# - jekyll-multiple-languages-plugin
|
||||
|
||||
# Internationalization
|
||||
languages: ["en", "es"]
|
||||
exclude_from_localizations: ["assets", "storage"]
|
||||
default_lang: "en"
|
||||
|
||||
# Godot download version
|
||||
stable_version: "3.5.1"
|
||||
stable_version_date: "28 September 2022"
|
||||
|
||||
# Pagination (used by the blog)
|
||||
pagination:
|
||||
# Site-wide kill switch, disabled here it doesn't run at all
|
||||
enabled: true
|
||||
|
||||
# Set to 'true' to enable pagination debugging. This can be enabled in the site config or only for individual pagination pages
|
||||
debug: false
|
||||
|
||||
# The default document collection to paginate if nothing is specified ('posts' is default)
|
||||
collection: "article"
|
||||
|
||||
# How many objects per paginated page, used to be `paginate` (default: 0, means all)
|
||||
per_page: 24
|
||||
|
||||
# The permalink structure for the paginated pages (this can be any level deep)
|
||||
permalink: "/:num/" # Pages are index.html inside this folder (default)
|
||||
#permalink: '/page/:num.html' # Pages are simple html files
|
||||
#permalink: '/page/:num' # Pages are html files, linked jekyll extensionless permalink style.
|
||||
|
||||
# Optional the title format for the paginated pages (supports :title for original page title, :num for pagination page number, :max for total number of pages)
|
||||
title: ":title - Page :num"
|
||||
|
||||
# Limit how many pagenated pages to create (default: 0, means all)
|
||||
limit: 0
|
||||
|
||||
# Optional, defines the field that the posts should be sorted on (omit to default to 'date')
|
||||
sort_field: "date"
|
||||
|
||||
# Optional, sorts the posts in reverse order (omit to default decending or sort_reverse: true)
|
||||
sort_reverse: true
|
||||
|
||||
# Optional, the default category to use, omit or just leave this as 'posts' to get a backwards-compatible behavior (all posts)
|
||||
category: "posts"
|
||||
|
||||
# Optional, the default tag to use, omit to disable
|
||||
tag: ""
|
||||
|
||||
# Optional, the default locale to use, omit to disable (depends on a field 'locale' to be specified in the posts,
|
||||
# in reality this can be any value, suggested are the Microsoft locale-codes (e.g. en_US, en_GB) or simply the ISO-639 language code )
|
||||
locale: ""
|
||||
|
||||
# Optional,omit or set both before and after to zero to disable.
|
||||
# Controls how the pagination trail for the paginated pages look like.
|
||||
trail:
|
||||
before: 2
|
||||
after: 2
|
||||
|
||||
# Optional, the default file extension for generated pages (e.g html, json, xml).
|
||||
# Internally this is set to html by default
|
||||
extension: html
|
||||
|
||||
# Optional, the default name of the index file for generated pages (e.g. 'index.html')
|
||||
# Without file extension
|
||||
indexpage: "index"
|
||||
############################################################
|
||||
62
_data/authors.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
- name: Andrea Catania
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Ariel Manzur
|
||||
image: /assets/images/authors/punto.png
|
||||
- name: Bartleby Lawnjelly
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Bastiaan Olij
|
||||
image: /assets/images/authors/bastiaan.jpg
|
||||
- name: Camille Mohr-Daurat
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Clay John
|
||||
image: /assets/images/authors/clayjohn.jpg
|
||||
- name: Emi
|
||||
image: /assets/images/authors/emi.png
|
||||
- name: Ernest Lee
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Fabio Alessandrelli
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Fredia Huya-Kouadio
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: George Marques
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Gilles Roudiere
|
||||
image: /assets/images/authors/groud.png
|
||||
- name: Gordon MacPherson
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Hein-Pieter van Braam
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Hugo Locurcio
|
||||
image: /assets/images/authors/calinou.png
|
||||
- name: Ignacio Roldán Etcheverry
|
||||
image: /assets/images/authors/ignacio.png
|
||||
- name: Ilaria Cislaghi
|
||||
image: /assets/images/authors/ilaria.jpg
|
||||
- name: Joan Fons
|
||||
image: /assets/images/authors/joan.png
|
||||
- name: Juan Linietsky
|
||||
image: /assets/images/authors/reduzio.jpg
|
||||
- name: Julian Murgia
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: karroffel
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Nathan GDQuest
|
||||
image: /assets/images/authors/nathan.png
|
||||
- name: Matias Goldberg
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Max Hilbrunner
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Pāvels Nadtočajevs
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Pedro J. Estébanez
|
||||
image: /assets/images/authors/pedro.png
|
||||
- name: Rémi Verschelde
|
||||
image: /assets/images/authors/akien.jpg
|
||||
- name: Silc Renew
|
||||
image: /assets/images/authors/tokage.png
|
||||
- name: Yuri Roubinsky
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
- name: Yuri Sizov
|
||||
image: /assets/images/authors/yuri.jpeg
|
||||
- name: default
|
||||
image: /assets/images/authors/default_avatar.svg
|
||||
24
_data/categories.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
news:
|
||||
- name: News
|
||||
slug: news
|
||||
description: General news that don't fit in other categories.
|
||||
progress-report:
|
||||
- name: Progress Report
|
||||
slug: progress-report
|
||||
description: Progress report about a specific engine subsystem in Godot.
|
||||
events:
|
||||
- name: Events
|
||||
slug: events
|
||||
description: Physical and online Godot-related event announcements.
|
||||
release:
|
||||
- name: Release
|
||||
slug: release
|
||||
description: Godot stable release announcements. See Pre-release category for alphas, betas and release candidates.
|
||||
pre-release:
|
||||
- name: Pre-release
|
||||
slug: pre-release
|
||||
description: Godot pre-release announcement (alpha, beta or release candidate).
|
||||
showcase:
|
||||
- name: Showcase
|
||||
slug: showcase
|
||||
description: Showreel video postings and showcase interviews. Showreel-related announcements are in the News category.
|
||||
325
_data/communities.yml
Normal file
@@ -0,0 +1,325 @@
|
||||
Algeria:
|
||||
- name: Arab Gamedev
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://facebook.com/groups/arabgamedev
|
||||
Argentina:
|
||||
- name: Godot en Español
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/2BtycSPdkk
|
||||
Brazil:
|
||||
- name: Godot Brazil
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/gWmQKBv
|
||||
- name: Godot Brasil
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/godotBrasil
|
||||
- name: São Paulo
|
||||
coordinates:
|
||||
- -23.5505
|
||||
- -46.6333
|
||||
links:
|
||||
- title: MeetUp
|
||||
url: https://www.meetup.com/GodotSP/
|
||||
- name: Campinas
|
||||
coordinates:
|
||||
- -22.8136
|
||||
- -47.0641
|
||||
links:
|
||||
- title: Gamux
|
||||
url: https://gamuxunicamp.github.io/website/
|
||||
Belgium:
|
||||
- name: Godot Club
|
||||
coordinates:
|
||||
- 50.848916943044415
|
||||
- 4.349575282209013
|
||||
links:
|
||||
- title: Website
|
||||
url: https://polymorph.cool/godot-club/
|
||||
Bulgaria:
|
||||
- name: BGodot
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/j3KRdV3b4P
|
||||
Canada:
|
||||
- name: Godot Toronto
|
||||
links:
|
||||
- title: MeetUp
|
||||
url: https://www.meetup.com/Godot-Toronto/
|
||||
China:
|
||||
- name: Godot China
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/R23VUTXwvz
|
||||
- title: QQ Group
|
||||
url: https://qm.qq.com/cgi-bin/qm/qr?k=EneMKrKt96ttI4ZFmQ8omTtpF0Sd0iL_&jump_from=webapi
|
||||
- name: GodoterCN
|
||||
links:
|
||||
- title: Website
|
||||
url: https://godoter.cn
|
||||
- name: Godoter Planet (Godoter 星球)
|
||||
links:
|
||||
- title: QQ Group
|
||||
url: https://qm.qq.com/cgi-bin/qm/qr?k=jKCCDvS6uTXHLrVBRuGk67iCvA5bshPY&jump_from=webapi
|
||||
- name: Godot Tieba
|
||||
links:
|
||||
- title: Forum
|
||||
url: https://tieba.baidu.com/f?kw=godot
|
||||
- name: GodotCN (Godot中文社区)
|
||||
links:
|
||||
- title: Website
|
||||
url: http://godott.com
|
||||
- title: QQ Group
|
||||
url: https://qm.qq.com/cgi-bin/qm/qr?k=hEscGFbQTiOX0bhsTT2myxM3PifsAmIp&jump_from=webapi
|
||||
Croatia:
|
||||
- name: Croatia
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/6gjwfSG
|
||||
- title: Facebook
|
||||
url: https://web.facebook.com/groups/godotenginecroatia/
|
||||
Czech Republic and Slovakia:
|
||||
- name: Godot CZ/SK
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.com/invite/g4XVFjXwfu
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/godotczsk
|
||||
Ecuador:
|
||||
- name: Godot Ecuador
|
||||
coordinates:
|
||||
- -1.8312
|
||||
- -78.1834
|
||||
links:
|
||||
- title: Reddit
|
||||
url: https://www.reddit.com/r/GodotEcuador/
|
||||
- title: Discord
|
||||
url: https://discord.gg/nZecyhN
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/godotengineecuador/
|
||||
Egypt:
|
||||
- name: Godot Egypt (Ain Shams University)
|
||||
coordinates:
|
||||
- 30.077605
|
||||
- 31.2858
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/QCxAgAAtYg
|
||||
Finland:
|
||||
- name: Godot Suomi
|
||||
coordinates:
|
||||
- 60.16952
|
||||
- 24.93545
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/5QF5du3
|
||||
France or French-speaking:
|
||||
- name: Godot Francophone
|
||||
links:
|
||||
- title: Website
|
||||
url: https://www.godot-francophone.org/
|
||||
- title: Discord
|
||||
url: https://discordapp.com/invite/NQVd34V
|
||||
- title: GitHub
|
||||
url: https://github.com/Godot-Engine-Francophone
|
||||
- name: Godot est arrivé!
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/9FJAZaC
|
||||
- name: SoloCode France
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/gZ3QJ5T
|
||||
Germany:
|
||||
- name: Godot Germany
|
||||
links:
|
||||
- title: Website
|
||||
url: https://godot-community.de/
|
||||
- title: Discord
|
||||
url: https://discord.gg/Tr7Ma6E
|
||||
- title: Reddit
|
||||
url: https://www.reddit.com/r/GodotCommunityDE/
|
||||
- name: Godot Engine German Developers
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/359812631518879
|
||||
India:
|
||||
- name: Godot India
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/cRvFbRg
|
||||
- title: Telegram
|
||||
url: https://t.me/godotindia
|
||||
Indonesia:
|
||||
- name: Godot Indonesia
|
||||
links:
|
||||
- title: Website
|
||||
url: https://godot.id
|
||||
- title: Telegram
|
||||
url: https://t.me/godot_indonesia
|
||||
Italy:
|
||||
- name: Godot Engine Italia
|
||||
links:
|
||||
- title: Website
|
||||
url: https://godotengineitalia.com/
|
||||
- title: Telegram
|
||||
url: https://t.me/joinchat/Ga4KigwWn53t2RRfoaPSKg
|
||||
- title: Discord
|
||||
url: https://discord.gg/7YuUqJB
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/1926189904375792/
|
||||
Iran:
|
||||
- name: Godot Iran (گودو ایران)
|
||||
links:
|
||||
- title: Website
|
||||
url: https://TahsinRafiey.org/godot-iran
|
||||
- title: Telegram
|
||||
url: https://t.me/GodotIran
|
||||
- title: Matrix
|
||||
url: https://matrix.to/#/#godotiran:matrix.org
|
||||
- name: GDworld
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/n3BX6ujU5f
|
||||
- title: Telegram
|
||||
url: https://t.me/world_of_godot
|
||||
Israel:
|
||||
- name: Godot Israel
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/k5HN6SQqnv
|
||||
Japan:
|
||||
- name: Godot Japan
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/DyFvSJZ
|
||||
Latvia:
|
||||
- name: Godot Engine Latvia
|
||||
coordinates:
|
||||
- 56.9496
|
||||
- 24.1052
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/844651272628474/
|
||||
- title: Discord
|
||||
url: https://discord.gg/r6ewZGv
|
||||
- title: Twitter
|
||||
url: https://twitter.com/GodotLatvia
|
||||
Pakistan:
|
||||
- name: Godot Engine Pakistan
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/YYjxgdn47P
|
||||
Philippines:
|
||||
- name: Godot Engine Philippines
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/godotph
|
||||
Poland:
|
||||
- name: Godocik
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/HBuuuPa
|
||||
- title: YouTube
|
||||
url: https://www.youtube.com/channel/UCLYdPKE5eviBMZV5WLG43rA
|
||||
Portugal:
|
||||
- name: Godot Portugal
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/nWMbpsFf
|
||||
- title: Twitter
|
||||
url: https://twitter.com/godot_pt
|
||||
Russia:
|
||||
- name: Godot Engine Russia
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/MK9aWFX
|
||||
- name: Godot Russia
|
||||
links:
|
||||
- title: VKontakte
|
||||
url: https://vk.com/godot_engine
|
||||
- title: Telegram
|
||||
url: https://t.me/godot_engine
|
||||
- name: Game Constructors
|
||||
links:
|
||||
- title: VKontakte
|
||||
url: https://vk.com/game_constructors
|
||||
- title: Discord
|
||||
url: https://discord.gg/VjZ2ZZH93c
|
||||
- title: ZEN
|
||||
url: https://zen.me/1WHp7X
|
||||
Saudi Arabia:
|
||||
- name: Godot Engine Arabic
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/sGukE2UDJ6
|
||||
- name: Godot Engine Arabic 2
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/fvNyxDQAJy
|
||||
South Korea:
|
||||
- name: Godot Engine Korea
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/XK8Emsf
|
||||
Spain:
|
||||
- name: Godot Engine in Spanish
|
||||
links:
|
||||
- title: Website
|
||||
url: http://godotengineenespanol.surge.sh
|
||||
- title: Discord
|
||||
url: https://discord.com/invite/fp4Z7QmZGu
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/GodotEngineEnEspanol
|
||||
- name: Zenvoid (Medialab Prado)
|
||||
coordinates:
|
||||
- 40.4105013
|
||||
- -3.6958529
|
||||
links:
|
||||
- title: Website
|
||||
url: https://www.medialab-prado.es/actividades/zenvoid-studio-desarrollo-de-videojuegos
|
||||
Sweden:
|
||||
- name: Godot Sweden
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/6ZsgWmH
|
||||
Taiwan:
|
||||
- name: Godot Engine Taiwan
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/fuTtQMaxZ2
|
||||
- name: Godot Taiwan (Godot 台灣使用者小聚)
|
||||
links:
|
||||
- title: Facebook
|
||||
url: https://www.facebook.com/groups/godot.taiwan
|
||||
Turkey:
|
||||
- name: Godot Engine Türkiye
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/3zuaj9EsYv
|
||||
- title: Telegram
|
||||
url: https://t.me/joinchat/GsAFJn7i-1fk0YUW
|
||||
- name: Godot in Turkey
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/AtHr842H7b
|
||||
- name: Godot Türk Topluluğu
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/B48HBJM
|
||||
United States:
|
||||
- name: Godot Southwest US
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/qx7Ec49yDg
|
||||
- name: Godot Wisconsin
|
||||
links:
|
||||
- title: Meetup
|
||||
url: https://www.meetup.com/wi-godot-game-app-developer-meetup/
|
||||
- name: Chickensoft
|
||||
links:
|
||||
- title: Discord
|
||||
url: https://discord.gg/MjA6HUzzAE
|
||||
3
_i18n/en.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
home:
|
||||
h1: "The game engine you've been waiting for."
|
||||
subtitle: "A simple, responsive Jekyll theme for your blog or site."
|
||||
3
_i18n/es.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
home:
|
||||
h1: "Español"
|
||||
subtitle: "Un tema Jekyll simple y adaptable para tu blog o sitio."
|
||||
112
_includes/footer.html
Normal file
@@ -0,0 +1,112 @@
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container flex">
|
||||
<div id="copyright">
|
||||
<p>
|
||||
© 2007-{{ site.time | date: '%Y' }} Juan Linietsky, Ariel Manzur and <a
|
||||
href="https://github.com/godotengine/godot/blob/master/AUTHORS.md" target="_blank"
|
||||
rel="noopener">contributors</a><br>
|
||||
Godot is a member of the <a href="https://sfconservancy.org/" target_="_blank" rel="noopener">Software Freedom
|
||||
Conservancy</a>.<br>
|
||||
Kindly hosted by <a href="https://tuxfamily.org" target="_blank" rel="noopener">TuxFamily.org</a>.<br>
|
||||
<a href="https://github.com/godotengine/godot-website" target="_blank" rel="noopener">Website source code on
|
||||
GitHub</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div id="sitemap">
|
||||
<ul class="sitemap-group">
|
||||
<li><strong>Get Godot</strong></li>
|
||||
<li><a href="/download/windows" class="set-os-download-url">Download</a></li>
|
||||
<li><a href="https://editor.godotengine.org/releases/latest/">Web Editor</a></li>
|
||||
<li> </li>
|
||||
<li><strong>Public Relations</strong></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/community">Communities and Events</a></li>
|
||||
<li><a href="/press">Press Kit</a></li>
|
||||
</ul>
|
||||
<ul class="sitemap-group">
|
||||
<li><strong>About Godot</strong></li>
|
||||
<li><a href="/features">Features</a></li>
|
||||
<li><a href="/showcase">Showcase</a></li>
|
||||
<li><a href="/education">Education</a></li>
|
||||
<li><a href="/license">License</a></li>
|
||||
<li><a href="/code-of-conduct">Code of Conduct</a></li>
|
||||
<li><a href="/privacy-policy">Privacy Policy</a></li>
|
||||
<li><a href="/donate">Donate</a></li>
|
||||
</ul>
|
||||
<ul class="sitemap-group">
|
||||
<li><strong>Project Team</strong></li>
|
||||
<li><a href="/governance">Governance</a></li>
|
||||
<li><a href="/teams">Teams</a></li>
|
||||
<li> </li>
|
||||
<li><strong>Extra Resources</strong></li>
|
||||
<li><a href="/asset-library/asset">Asset Library</a></li>
|
||||
<li><a href="https://docs.godotengine.org">Documentation</a></li>
|
||||
<li><a href="https://github.com/godotengine">Code Repository</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social" class="dark-desaturate">
|
||||
<h4 class="text-right"><a href="/contact">Contact us</a></h4>
|
||||
<div class="flex justify-space-between">
|
||||
<a href="https://github.com/godotengine" target="_blank" rel="noopener">
|
||||
<img src="/assets/footer/github_logo.svg" width="32" height="32" alt="GitHub">
|
||||
</a>
|
||||
<a href="https://twitter.com/godotengine" target="_blank" rel="noopener">
|
||||
<img src="/assets/footer/twitter_logo.svg" width="32" height="32" alt="Twitter">
|
||||
</a>
|
||||
<a href="https://www.facebook.com/groups/godotengine/" target="_blank" rel="noopener">
|
||||
<img src="/assets/footer/facebook_logo.svg" width="32" height="32" alt="Facebook">
|
||||
</a>
|
||||
<a href="https://www.reddit.com/r/godot" target="_blank" rel="noopener">
|
||||
<!-- Zero-width space in the `alt` text to prevent content blockers from blocking the icon -->
|
||||
<img src="/assets/footer/reddit_logo.svg" width="32" height="32" alt="Reddit">
|
||||
</a>
|
||||
<a href="/rss.xml" target="_blank" rel="noopener">
|
||||
<!-- Icon is called `feed` instead of `rss` to prevent content blockers from blocking the icon -->
|
||||
<img src="/assets/footer/feed_logo.svg" width="32" height="32" alt="RSS feed">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script defer src="/assets/js/tobii.min.js"></script>
|
||||
<script defer src="/assets/js/highlight.min.js?1"></script>
|
||||
<script defer src="/assets/js/highlight.gdscript.min.js?1"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// This needs to be done on page load but also after page changes,
|
||||
// in case a code block appears in an article.
|
||||
document.querySelectorAll('pre code').forEach((block) => {
|
||||
hljs.highlightBlock(block);
|
||||
});
|
||||
|
||||
document.querySelectorAll('.content-article img').forEach((articleImg) => {
|
||||
// Add lightbox elements in blog articles for Tobii.
|
||||
const lightbox = document.createElement('a');
|
||||
lightbox.href = articleImg.src;
|
||||
lightbox.classList.add('lightbox');
|
||||
lightbox.dataset.group = 'article';
|
||||
articleImg.parentNode.appendChild(lightbox);
|
||||
lightbox.appendChild(articleImg);
|
||||
});
|
||||
|
||||
// Initialize lightbox.
|
||||
new Tobii({
|
||||
zoom: false,
|
||||
});
|
||||
});
|
||||
|
||||
// Update any download link to point to identified user's OS.
|
||||
const links = document.querySelectorAll('.set-os-download-url');
|
||||
for (let i = 0; i < links.length; i++) {
|
||||
const link = links[i];
|
||||
link.href = "/download/windows";
|
||||
if (navigator.platform.indexOf('Mac') !== -1) {
|
||||
link.href = "/download/macos";
|
||||
} else if (navigator.platform.indexOf('Linux') !== -1) {
|
||||
link.href = "/download/linux";
|
||||
}
|
||||
}
|
||||
</script>
|
||||
39
_includes/header.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<input type="checkbox" id="nav_toggle_cb">
|
||||
<header>
|
||||
<div class="container flex align-center">
|
||||
<div id="nav_head">
|
||||
<a href="/" id="logo-link">
|
||||
<img class="nav-logo" src="/assets/logo.svg" width="136" height="48" alt="Godot Engine">
|
||||
<img class="nav-logo dark-logo" src="/assets/logo_dark.svg" width="136" height="48" alt="Godot Engine">
|
||||
</a>
|
||||
<label for="nav_toggle_cb" id="nav_toggle_btn">
|
||||
<img src="/assets/hamburger.svg" width="24" height="24" alt="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<nav id="nav">
|
||||
<ul class="left">
|
||||
<li><a href="/showcase">Showcase</a></li>
|
||||
<div class="only-on-mobile" style="width: 100%">
|
||||
<li><a href="/features">Features</a></li>
|
||||
</div>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/community">Community</a></li>
|
||||
<li><a href="/contact">About</a></li>
|
||||
<li><a href="https://godotengine.org/asset-library/asset">Assets</a></li>
|
||||
</ul>
|
||||
|
||||
<ul class="right">
|
||||
<li><a href="/download/windows" class="set-os-download-url">Download</a></li>
|
||||
<li><a href="https://docs.godotengine.org">Learn</a></li>
|
||||
<li><a href="https://docs.godotengine.org/en/stable/community/contributing/index.html">Contribute</a></li>
|
||||
{% comment %}
|
||||
We add the control character at the end to force the heart to render as text and not as an emoji.
|
||||
{% endcomment %}
|
||||
<li class="fund"><a href="/donate">❤︎ Donate</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
146
_layouts/article.html
Normal file
@@ -0,0 +1,146 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: var(--background-color);
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-bottom: 8px;
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
:not(pre)>code {
|
||||
background: var(--code-background-color);
|
||||
padding: 1px 4px;
|
||||
font-size: 0.95em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: var(--codeblock-background-color);
|
||||
color: var(--codeblock-color);
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
padding: .5em;
|
||||
}
|
||||
|
||||
.date-big {
|
||||
line-height: 2;
|
||||
margin-left: 32px;
|
||||
}
|
||||
|
||||
article {
|
||||
background-color: var(--base-color);
|
||||
box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
figure img {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
article img,
|
||||
article video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
margin: auto;
|
||||
margin-top: 16px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
article h1 {
|
||||
margin-top: 64px;
|
||||
}
|
||||
|
||||
article h2,
|
||||
article h3,
|
||||
article h4 {
|
||||
margin-top: 42px;
|
||||
}
|
||||
|
||||
.author {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
|
||||
.tag.active {
|
||||
filter: saturate(0.75);
|
||||
}
|
||||
|
||||
@media screen and (min-width: 900px) {
|
||||
article .content {
|
||||
width: 70%;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
body {
|
||||
background-color: var(--base-color);
|
||||
}
|
||||
|
||||
article {
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
article img:first-child,
|
||||
article video:first-child {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/highlight.obsidian.min.css">
|
||||
|
||||
<div class="container">
|
||||
<article class="flex padded">
|
||||
<div class="content content-article">
|
||||
<figure>
|
||||
<img src="{{ page.image }}" title="{{ page.image_caption_title }}"
|
||||
alt="{{ page.image_caption_title }} {{ page.image_caption_description }}" class="rounded-lg"
|
||||
style="width: 100%; height: auto" />
|
||||
<figcaption style="opacity: 0.8; line-height: 1.5">
|
||||
<strong>{{ page.image_caption_title }}</strong>
|
||||
<span style="margin-left: 0.75rem; font-size: 90%">{{ page.image_caption_description }}</span>
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
<div class="info">
|
||||
<h1>
|
||||
{{ page.title }}
|
||||
</h1>
|
||||
<h4 class="author">
|
||||
By: {{ page.author }}
|
||||
<span class="date"> {{ page.date | date: "%e %B %Y" }}</span>
|
||||
</h4>
|
||||
|
||||
<div class="tags">
|
||||
{% for category in page.categories %}
|
||||
<a href="/blog/{{ category }}">
|
||||
<div class="tag active">{{ site.data.categories[category][0].name }}</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ content }}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% include footer.html %}
|
||||
131
_layouts/blog.html
Normal file
@@ -0,0 +1,131 @@
|
||||
---
|
||||
title: "Godot Engine - Blog"
|
||||
description: "Keep up-to-date with the latest Godot Engine development news."
|
||||
layout: default
|
||||
pagination:
|
||||
enabled: true
|
||||
collection: article
|
||||
---
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<style>
|
||||
.posts {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.posts {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.posts {
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="head">
|
||||
<div class="container flex eqsize responsive">
|
||||
<div class="main">
|
||||
<h1 class="intro-title">Blog</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<!-- Search -->
|
||||
<form class="search-bar" method="get" action="https://duckduckgo.com/">
|
||||
<input type="hidden" name="sites" value="godotengine.org/article" />
|
||||
<input type="text" name="q" maxlength="300" placeholder="Search articles" />
|
||||
<button class="btn search-bar-btn" type="submit">
|
||||
<img width="24" height="24" src="/assets/icons/search.svg" alt="search" title="search" />
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<!-- Categories -->
|
||||
|
||||
<h3 style="margin-top: 1rem; margin-bottom: 4rem">Categories</h3>
|
||||
|
||||
<div class="tags">
|
||||
<a href="/blog" title="Show all categories">
|
||||
<div class="tag tag--default {% if page.category == 'all' %}active{% endif %}">All</div>
|
||||
</a>
|
||||
|
||||
{% for category in site.data.categories %}
|
||||
{% for tag in category[1] %}
|
||||
<a href="/blog/{{ tag.slug }}" title="{{ tag.description }}">
|
||||
<div class="tag tag--{{ category.slug }} {% if tag.slug == page.category %} active {% endif %}">
|
||||
{{ tag.name }}</div>
|
||||
</a>
|
||||
{% endfor%}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if page.category != 'all' %}
|
||||
<h3 style="margin-top: 1rem;">Filtered by: {{ site.data.categories[page.category][0].name }}</h3>
|
||||
{% endif %}
|
||||
|
||||
<!-- Posts -->
|
||||
<div class="flex pagination">
|
||||
{% if paginator.previous_page %}
|
||||
<a class="pagination-previous"
|
||||
href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">← Previous</a>
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.page_trail %}
|
||||
{% for trail in paginator.page_trail %}
|
||||
<a {% if page.url==trail.path %}class="active" {% endif %} title="{{trail.title}}"
|
||||
href="{{ trail.path | prepend: site.baseurl | replace: 'index.html', '' }}">{{ trail.num }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.next_page %}
|
||||
<a class="pagination-next"
|
||||
href="{{ paginator.next_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">Next →</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="posts">
|
||||
{% for post in paginator.posts %}
|
||||
<a href="{{ post.url }}" style="text-decoration: none">
|
||||
<article class="article-card">
|
||||
<div class="thumbnail" style="background-image: url('{{ post.image }}');" href="{{ post.url }}"></div>
|
||||
<div class="content">
|
||||
<div class="info">
|
||||
<img class="avatar" width="25" height="25" src="{% for author in site.data.authors %}{% if author.name == post.author %}{{ author.image }}{% endif %}{%
|
||||
endfor %}" alt="" loading="lazy">
|
||||
<span class="by">{{ post.author }} </span>
|
||||
<span class="date"> - {{ post.date | date: "%e %B %Y" }}</span>
|
||||
</div>
|
||||
<h3>{{ post.title }}</h3>
|
||||
<p class="excerpt">{{ post.excerpt }}</p>
|
||||
</div>
|
||||
</article>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="flex pagination">
|
||||
{% if paginator.previous_page %}
|
||||
<a class="pagination-previous"
|
||||
href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">← Previous</a>
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.page_trail %}
|
||||
{% for trail in paginator.page_trail %}
|
||||
<a {% if page.url==trail.path %}class="active" {% endif %} title="{{trail.title}}"
|
||||
href="{{ trail.path | prepend: site.baseurl | replace: 'index.html', '' }}">{{ trail.num }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.next_page %}
|
||||
<a class="pagination-next"
|
||||
href="{{ paginator.next_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">Next →</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% include footer.html %}
|
||||
36
_layouts/default.html
Normal file
@@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ site.lang }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="author" content="Godot Engine">
|
||||
<meta name="description" content="{{ page.description | default: 'Free and open source 2D and 3D game engine' }}">
|
||||
<meta name="theme-color" content="#3d8fcc">
|
||||
<meta property="og:site_name" content="Godot Engine">
|
||||
<meta property="og:url" content="https://godotengine.org">
|
||||
<meta name="twitter:site" content="@godotengine">
|
||||
|
||||
<meta property="og:title" content="{{ page.title | default: 'Godot Engine' }}">
|
||||
<meta property="og:description"
|
||||
content="{{ page.description | default: 'Free and open source 2D and 3D game engine' }}">
|
||||
<meta property="og:image" content="{{ page.image | default: '/assets/og_image.png' }}">
|
||||
<meta property="og:type" content="{{ page.og_type | default: 'website' }}">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<title>{{ page.title | default: "Godot Engine" }}</title>
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="Godot News" href="/rss.xml">
|
||||
<link rel="icon" href="/assets/favicon.png" sizes="any">
|
||||
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml">
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="stylesheet" href="/assets/css/tobii.min.css">
|
||||
<link rel="preload" as="font" href="/assets/fonts/Montserrat-Bold.woff2" crossorigin>
|
||||
<link rel="preload" as="font" href="/assets/fonts/Montserrat-ExtraBold.woff2" crossorigin>
|
||||
<link rel="me" href="https://mastodon.gamedev.place/@godotengine">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{ content }}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
317
_layouts/download.html
Normal file
@@ -0,0 +1,317 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
{% assign platform = page.platform %}
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<style>
|
||||
.btn.btn-version-download {
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
display: inline-flex;
|
||||
flex-basis: content;
|
||||
padding: 0px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.btn.btn-version-download a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
padding: 10px 20px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.digital-stores {
|
||||
width: 85%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
gap: 12px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.digital-stores-download {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 16px;
|
||||
color: var(--dark-color-text-hl);
|
||||
font-size: 16px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.digital-stores-logo {
|
||||
background-color: var(--digital-store-background-color);
|
||||
padding: 8px 8px;
|
||||
}
|
||||
|
||||
.digital-stores-logo img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.digital-stores-name {
|
||||
color: var(--base-color-text-hl);
|
||||
font-family: "Montserrat", sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
.version-overview {
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.version-overview h2 {
|
||||
margin-top: 16px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.version-overview .version-link {
|
||||
color: var(--primary-color);
|
||||
font-style: normal;
|
||||
margin-left: 16px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.version-overview .date {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.version-overview img {
|
||||
filter: drop-shadow(var(--base-shadow));
|
||||
}
|
||||
|
||||
.platform-details hr {
|
||||
border-top-color: rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.platform-details pre {
|
||||
background-color: var(--platform-code-background-color);
|
||||
}
|
||||
|
||||
.extras .card {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.extras .card p {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.subheader {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
/* hide tab icons by default */
|
||||
.tab img {
|
||||
display: none;
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
@media (max-width: 1060px) {
|
||||
|
||||
/* hide tab text only show icons */
|
||||
.tab img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* hide tab text, except for active tabs */
|
||||
.tab:not(.active) span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="head">
|
||||
<div class="container flex responsive justify-space-between">
|
||||
<div class="main">
|
||||
<h1 class="intro-title">Download</h1>
|
||||
</div>
|
||||
<div class="tabs snap-tabs">
|
||||
<a href="/download/linux" class="tab title-font {% if page.platform == 'linux' %} active {% endif %}">
|
||||
<img width="24" height="24" src="/assets/icons/linux.svg" title="Linux" alt="Linux" />
|
||||
<span>Linux</span>
|
||||
</a>
|
||||
<a href="/download/macos" class="tab title-font {% if page.platform == 'macos' %} active {% endif %}">
|
||||
<img width="24" height="24" src="/assets/icons/macos.svg" title="macOS" alt="macOS" />
|
||||
<span>macOS</span>
|
||||
</a>
|
||||
<a href="/download/windows" class="tab title-font {% if page.platform == 'windows' %} active {% endif %}">
|
||||
<img width="24" height="24" src="/assets/icons/windows.svg" title="Windows" alt="Windows" />
|
||||
<span>Windows</span>
|
||||
</a>
|
||||
<a href="/download/server" class="tab title-font {% if page.platform == 'server' %} active {% endif %}">
|
||||
<img width="24" height="24" src="/assets/icons/server.svg" title="Linux Server" alt="Linux Server" />
|
||||
<span>Linux Server</span>
|
||||
</a>
|
||||
<a href="/download/android" class="tab title-font {% if page.platform == 'android' %} active {% endif %}">
|
||||
<img width="24" height="24" src="/assets/icons/android.svg" title="Android" alt="Android" />
|
||||
<span>Android</span>
|
||||
</a>
|
||||
<a href="https://editor.godotengine.org/releases/latest/" class="tab title-font">
|
||||
<img width="24" height="24" src="/assets/icons/html5.svg" title="Web Editor" alt="Web Editor" />
|
||||
<span>Web Editor</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="flex responsive eqsize">
|
||||
<div class="version-overview">
|
||||
<img src="/assets/download/godot_logo.svg" width="200" height="200" alt="logo">
|
||||
<h2>Godot <a class="version-link" href="#links">{{ site.stable_version }}</a></h2>
|
||||
<i class="date">released {{ site.stable_version_date }}</i>
|
||||
|
||||
<div style="margin-top:32px; line-height: 1.6; font-size: 85%">
|
||||
You can find previous releases on the
|
||||
<a href="https://downloads.tuxfamily.org/godotengine">download repository</a>.<br>
|
||||
Slow download? Try the mirror on <a href="https://github.com/godotengine/godot/releases">GitHub
|
||||
Releases</a>.<br>
|
||||
<br>
|
||||
Also available on digital distribution platforms:
|
||||
</div>
|
||||
<div class="digital-stores">
|
||||
<a class="digital-stores-download card" href="https://godotengine.itch.io/godot"
|
||||
title="Godot Engine on itch.io">
|
||||
<div class="digital-stores-logo">
|
||||
<img src="/assets/download/itch_logo.svg" width="28" height="28" alt="itch logo">
|
||||
</div>
|
||||
<div class="digital-stores-name">itch.io</div>
|
||||
</a>
|
||||
<a class="digital-stores-download card" href="https://store.steampowered.com/app/404790"
|
||||
title="Godot Engine on Steam">
|
||||
<div class="digital-stores-logo">
|
||||
<img src="/assets/download/steam_logo.svg" width="28" height="28" alt="Steam logo">
|
||||
</div>
|
||||
<div class="digital-stores-name">Steam</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="links" class="platform-details">
|
||||
<div class="card">
|
||||
<div class="base-padding">
|
||||
<h4>Standard version</h4>
|
||||
{% for download in page.downloads %}
|
||||
<div class="btn btn-version-download">
|
||||
<a
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/Godot_v{{site.stable_version}}-stable_{{ download.url }}">{{ download.caption }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<h4 style="margin-top: 2rem">Mono version (C# support)</h4>
|
||||
{% for download in page.downloads_mono %}
|
||||
<div class="btn btn-version-download">
|
||||
<a
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/Godot_v{{site.stable_version}}-stable_{{ download.url }}">{{
|
||||
download.caption }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{{ page.mono_note }}
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="base-padding">
|
||||
<h4>Requirements</h4>
|
||||
<ul>
|
||||
<li>OpenGL 2.1 / OpenGL ES 2.0 compatible hardware</li>
|
||||
{% if platform != 'android' %}
|
||||
<li>
|
||||
<strong>For the Mono version:</strong> <a href="https://dotnet.microsoft.com/download">.NET SDK</a> or the
|
||||
<a href="https://www.mono-project.com/download/stable/">Mono SDK</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="base-padding">
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
<div class="footer base-padding" style="line-height: 1.6; font-size: 90%">
|
||||
Learn how to use Godot with the <a
|
||||
href="https://docs.godotengine.org/en/stable/getting_started/step_by_step/">Step by Step tutorial</a>.<br>
|
||||
Give a try to <a href="https://godotengine.org/asset-library/asset?category=10&support[official]=1">demo
|
||||
projects</a> showcasing some of the engine features.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex responsive eqsize padded">
|
||||
<div class="extras">
|
||||
|
||||
<a class="card"
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/Godot_v{{site.stable_version}}-stable_export_templates.tpz">
|
||||
<div class="base-padding">
|
||||
<h3>Export templates (standard)</h3>
|
||||
<p>Used to export your games to all supported platforms.</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="card"
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/Godot_v{{site.stable_version}}-stable_mono_export_templates.tpz">
|
||||
<div class="base-padding">
|
||||
<h3>Export templates (Mono / C#)</h3>
|
||||
<p>
|
||||
Used to export your C# games to the supported platforms.<br>
|
||||
Currently, the C# version can export to desktop platforms (Linux, macOS and Windows), Android, iOS, and
|
||||
HTML5/WebAssembly.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="card"
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/godot-lib.{{site.stable_version}}.stable.release.aar">
|
||||
<div class="base-padding">
|
||||
<h3>AAR library for Android plugins (standard)</h3>
|
||||
<p>Use it to develop Android plugins in Java or Kotlin using the Godot API.</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="card"
|
||||
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/godot-lib.{{site.stable_version}}.stable.mono.release.aar">
|
||||
<div class="base-padding">
|
||||
<h3>AAR library for Android plugins (Mono / C#)</h3>
|
||||
<p>Use it to develop Android plugins in Java or Kotlin using the Godot API.</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/godotengine/godot-blender-exporter" class="base-padding card">
|
||||
<div>
|
||||
<h3>Blender ESCN exporter</h3>
|
||||
<p>
|
||||
Blender add-on to export scenes to Godot's scene format directly.<br>
|
||||
Godot also supports glTF 2.0 and OBJ.
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="text-center base-padding">
|
||||
<img class="flex-center dark-invert" src="/assets/download/dl_icon_github.png" width="200" height="200" alt="">
|
||||
<p>
|
||||
Godot's development is <strong>open</strong>. This means that you can
|
||||
fix or improve any part of the engine yourself and choose
|
||||
whether to contribute it back or keep it private.
|
||||
</p>
|
||||
<p>
|
||||
New features are always available to use and test, without the need of
|
||||
having to wait for the next major release. Compiling Godot from source
|
||||
is <em>very easy</em> and the process is well-documented for each platform.
|
||||
To obtain the source code, please visit the
|
||||
<a href="https://github.com/godotengine/godot">GitHub project page</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
43
_layouts/more.html
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
layout: default
|
||||
header_text: ''
|
||||
current_tab: ''
|
||||
---
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<div class="head">
|
||||
<div class="container flex eqsize" style="flex-direction: column">
|
||||
<div class="main">
|
||||
<h1 class="intro-title">{{ page.header_text }}</h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabs">
|
||||
<a href="/contact" class="title-font {% if page.current_tab == 'contact' %} active {% endif %}">
|
||||
Contact
|
||||
</a>
|
||||
<a href="/code-of-conduct" class="title-font {% if page.current_tab == 'code-of-conduct' %} active {% endif %}">
|
||||
Code of Conduct
|
||||
</a>
|
||||
<a href="/privacy-policy" class="title-font {% if page.current_tab == 'privacy-policy' %} active {% endif %}">
|
||||
Privacy
|
||||
</a>
|
||||
<a href="/governance" class="title-font {% if page.current_tab == 'governance' %} active {% endif %}">
|
||||
Governance
|
||||
</a>
|
||||
<a href="/teams" class="title-font {% if page.current_tab == 'teams' %} active {% endif %}">
|
||||
Teams
|
||||
</a>
|
||||
<a href="/license" class="title-font {% if page.current_tab == 'license' %} active {% endif %}">
|
||||
License
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
194
_layouts/showcase-item.html
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
<style>
|
||||
.showcase-video-image {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.showcase-developer-quote {
|
||||
font-style: italic;
|
||||
color: var(--base-color-text-title);
|
||||
|
||||
}
|
||||
|
||||
.showcase-developer-quote p:first-child::before {
|
||||
content: '“';
|
||||
font-size: 150%;
|
||||
margin-right: -0.1rem;
|
||||
}
|
||||
|
||||
.showcase-developer-quote p:last-child::after {
|
||||
content: '”';
|
||||
font-size: 150%;
|
||||
margin-left: -0.1rem;
|
||||
}
|
||||
|
||||
@media (min-width: 900px) {
|
||||
.showcase-video-image {
|
||||
margin-left: 1rem;
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="head">
|
||||
<div class="container flex eqsize responsive">
|
||||
<div class="main">
|
||||
|
||||
<div style="margin: 1.25rem 0">
|
||||
<a href="/showcase"><strong><</strong> Back to showcase</a>
|
||||
</div>
|
||||
|
||||
<h1 class="intro-title">{{ page.title }}</h1>
|
||||
<h3 style="opacity: 0.75; margin-top: 0.5rem">
|
||||
by <a href="{{ page.website }}" target="_blank"
|
||||
style="text-decoration: underline; text-decoration-thickness: 0.125rem; text-decoration-color: hsla(0, 0%, 100%, 0.5)">{{
|
||||
page.author }}</a>
|
||||
| {% if page.release_date == "TBD" %}Release date: <abbr title="To Be Determined">TBD</abbr>{% else %}{{
|
||||
page.release_date }}{% endif %}
|
||||
</h3>
|
||||
<div style="filter: invert(100%); opacity: 0.75; margin-top: 1rem">
|
||||
|
||||
|
||||
{% if page.windows %}
|
||||
<img src="/assets/icons/windows.svg" alt="Windows" title="Windows" style="margin: 0 0.125rem" width="24"
|
||||
height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.macos %}
|
||||
<img src="/assets/icons/macos.svg" alt="Mac" title="Mac" style="margin: 0 0.125rem" width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.linux %}
|
||||
<img src="/assets/icons/linux.svg" alt="Linux" title="Linux" style="margin: 0 0.125rem" width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.switch %}
|
||||
<img src="/assets/icons/switch.svg" alt="Nintendo Switch" title="Switch" style="margin: 0 0.125rem" width="24"
|
||||
height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.html5 %}
|
||||
<img src="/assets/icons/html5.svg" alt="HTML5" title="HTML5" style="margin: 0 0.125rem" width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.android %}
|
||||
<img src="/assets/icons/android.svg" alt="Android" title="Android" style="margin: 0 0.125rem" width="24"
|
||||
height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.ios %}
|
||||
<img src="/assets/icons/ios.svg" alt="iOS" title="iOS" style="margin: 0 0.125rem" width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.playstation %}
|
||||
<img src="/assets/icons/playstation.svg" alt="PlayStation" title="PlayStation" style="margin: 0 0.125rem"
|
||||
width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
{% if page.xbox %}
|
||||
<img src="/assets/icons/xbox.svg" alt="Xbox" title="Xbox" style="margin: 0 0.125rem" width="24" height="24">
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<section class="flex eqsize responsive">
|
||||
<article>
|
||||
{{ content }}
|
||||
|
||||
<div class="flex responsive" style="justify-content: center; margin-top: 2rem">
|
||||
{% if page.steam %}
|
||||
<a href="{{ page.steam }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Steam
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.itch %}
|
||||
<a href="{{ page.itch }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Itch.io
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.humble %}
|
||||
<a href="{{ page.humble }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Humble Store
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.gog %}
|
||||
<a href="{{ page.gog }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Humble GOG
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.nintendo %}
|
||||
<a href="{{ page.nintendo }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Switch
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.xbox %}
|
||||
<a href="{{ page.xbox }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on Xbox
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.github %}
|
||||
<a href="{{ page.github }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
View on GitHub
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if page.custom %}
|
||||
<a href="{{ page.custom }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||
Learn More
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
<article class="showcase-video-image">
|
||||
{% if page.youtube_id %}
|
||||
<div class="card youtube" style="padding-bottom: 56.25%">
|
||||
<iframe src="https://www.youtube-nocookie.com/embed/{{ page.youtube_id }}"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen="" frameborder="0">
|
||||
</iframe>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for image in page.gallery %}
|
||||
<a href="{{ image }}" class="lightbox" data-group="showcase">
|
||||
<img class="rounded-lg" src="{{ image }}" alt="Screenshot of {{ page.title }} by {{ page.author }}"
|
||||
style="width: 100%; height: auto; margin-top: 1rem; background: linear-gradient(90deg, #947451 12%, #a8885f 29%, #8c8977 65%, #d2ba9f 98%) "
|
||||
width="16" height="9">
|
||||
</a>
|
||||
{% endfor %}
|
||||
</article>
|
||||
</section>
|
||||
{% if page.developer_interview %}
|
||||
<section style="margin-top: 3rem">
|
||||
<h3>{{ page.developer_interview.title }}</h3>
|
||||
|
||||
<blockquote class="showcase-developer-quote">
|
||||
{{ page.developer_interview.text }}
|
||||
</blockquote>
|
||||
|
||||
{% if page.developer_interview.url %}
|
||||
<a href="{{ page.developer_interview.url }}">{{ page.developer_interview.context }}</a>
|
||||
{% else %}
|
||||
<p>{{ page.developer_interview.context }}</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
@@ -1158,11 +1158,8 @@ pre > code {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
/* The teams page */
|
||||
|
||||
.teams-team-section {
|
||||
background-color: var(--teams-odd-color);
|
||||
box-shadow: var(--base-shadow);
|
||||
padding: 20px 16px;
|
||||
margin: 40px 0;
|
||||
}
|
||||
@@ -1175,113 +1172,55 @@ pre > code {
|
||||
}
|
||||
|
||||
.teams-team-section > h4 {
|
||||
font-size: 24px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.teams-team-section em {
|
||||
font-size: 94%;
|
||||
}
|
||||
|
||||
.teams-team-section > p {
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.teams-team-leader:before {
|
||||
content: "⭐\00a0"; /* This is a non-breakable space. */
|
||||
}
|
||||
|
||||
.teams-team-leader {
|
||||
color: var(--base-color-text-hl);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.teams-subteams {
|
||||
background-color: var(--teams-subteams-color);
|
||||
border-left: 6px solid var(--accent-color);
|
||||
border-radius: 2px;
|
||||
padding: 4px 10px;
|
||||
margin-top: 30px;
|
||||
display: grid;
|
||||
grid-template-columns: 25% 75%;
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
.teams-subteam-name {
|
||||
font-family: "Montserrat", sans-serif;
|
||||
font-weight: 600;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
padding: 16px 16px 16px 10px;
|
||||
vertical-align: top;
|
||||
.teams-subteams th {
|
||||
padding: 16px;
|
||||
border-right: 1px dashed var(--table-divider-color);
|
||||
}
|
||||
|
||||
.teams-subteam-members {
|
||||
.teams-subteams td {
|
||||
padding: 16px 0 16px 12px;
|
||||
}
|
||||
|
||||
.teams-subteam-name,
|
||||
.teams-subteam-members {
|
||||
border-bottom: 2px dashed var(--table-divider-color);
|
||||
.teams-subteams th,
|
||||
.teams-subteams td {
|
||||
border-bottom: 1px dashed var(--table-divider-color);
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.teams-subteam-name:last-of-type,
|
||||
.teams-subteam-members:last-of-type {
|
||||
|
||||
.teams-subteams tr:last-of-type td,
|
||||
.teams-subteams tr:last-of-type th {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.teams-subteams .teams-team-leader,
|
||||
.teams-subteam-members {
|
||||
font-size: 16px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.teams-team-members > span:after,
|
||||
.teams-subteam-members > span:after {
|
||||
content: ", ";
|
||||
}
|
||||
|
||||
.teams-team-members > span:last-child:after,
|
||||
.teams-subteam-members > span:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.teams-team-section {
|
||||
margin-left: -18px;
|
||||
margin-right: -18px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.teams-subteams {
|
||||
padding: 4px;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.teams-subteam-name {
|
||||
border-bottom: 0;
|
||||
text-align: left;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.teams-team-members,
|
||||
.teams-subteam-members {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
.teams-subteam-leader:before {
|
||||
content: "⭐ ";
|
||||
}
|
||||
|
||||
.teams-team-members > span:after,
|
||||
.teams-subteam-members > span:after {
|
||||
content: "";
|
||||
}
|
||||
.teams-team-members > span:not(.teams-team-leader):before,
|
||||
.teams-subteam-members > span:not(.teams-team-leader):before {
|
||||
content: "· ";
|
||||
font-size: 18px;
|
||||
.teams-subteam-leader {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.teams-team-leader {
|
||||
margin-left: -6px;
|
||||
}
|
||||
.teams-subteam-leader,
|
||||
.teams-subteam-members {
|
||||
font-size: 16px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.rounded {
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 271 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 975 B After Width: | Height: | Size: 975 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 932 B After Width: | Height: | Size: 932 B |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 669 KiB After Width: | Height: | Size: 669 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |
|
Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 430 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 546 B After Width: | Height: | Size: 546 B |
|
Before Width: | Height: | Size: 363 B After Width: | Height: | Size: 363 B |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
BIN
assets/images/authors/akien.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/images/authors/bastiaan.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |