Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions content/guides/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ llmsTxtOptional: true
{{< card link="/developers/guides/node-js-mongo-db" title="Node.js + MongoDB starter" subtitle= "Starter tutorial to deploy a Node.js + MongoDB application on Clever Cloud" icon="node" >}}
{{< card link="/developers/guides/node-statsd-nodejs-metrics" title="node-statsd" subtitle= "Configure node-statsd package on your Node.js application to push custom metrics" icon="node" >}}
{{< card link="/developers/guides/nuxt" title="Nuxt" subtitle= "Build and deploy a Nuxt application on Clever Cloud" icon="nuxt" >}}
{{< card link="/developers/guides/outline" title="Outline" subtitle= "Outline install and configuration guide" icon="outline" >}}
{{< card link="/developers/guides/pgpool" title="Pgpool-II" subtitle= "How to configure and use Pgpool-II for PostgreSQL add-ons" icon="pg" >}}
{{< card link="/developers/guides/proxysql" title="ProxySQL" subtitle= "Configure and use ProxySQL for MySQL add-ons" icon="mysql" >}}
{{< card link="/developers/guides/ruby-on-rails" title="Ruby On Rails" subtitle= "How to deploy Ruby on Rails framework" icon="ruby" >}}
Expand Down
223 changes: 223 additions & 0 deletions content/guides/outline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
---
type: docs
linkTitle: Outline
title: Outline Knowledge Base on Clever Cloud
Comment on lines +3 to +4
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The page front matter still uses "Moodle" for both linkTitle and title, so this guide will be listed/rendered as Moodle instead of Outline. Update these fields to "Outline" (and ensure they match the file’s purpose).

Copilot uses AI. Check for mistakes.
description: Deploy Outline team knowledge base and wiki on Clever Cloud with detailed tutorials and best practices
keywords:
- outline
- knowledge base
- wiki
- collaborative
- Node.js
- postgresql
aliases:
- /outline
---

[Outline](https://getoutline.com) is an open source team knowledge base and wiki that helps teams organize, share, and collaborate on documentation. It offers a clean, fast interface with powerful features for creating and maintaining company knowledge. This guide explains how to configure Outline from source, using the Clever Cloud Console. For an alternative using [Clever Tools](/doc/cli) there is a complete example in [this repository](https://github.com/CleverCloud/outline-example).

## How to Configure and Deploy Outline on Clever Cloud

{{% steps %}}

### Initialize repository and download Outline

Create a new `outline` folder for Outline and, inside it, initialize a Git repository with `git init`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just git clone ?


Download the latest release of Outline from [https://github.com/outline/outline/releases](GitHub) and expand it in `outline` folder.

### Create a Node application

On Clever Cloud Console, click **Create** > **An application** and choose a [Node.js](/developers/doc/applications/nodejs) application with Git deployment.

Select at least an `S` plan. Smaller instances can make the build to fail.

### Create a PostgreSQL add-on
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Markdown link is reversed: the visible text is the URL and the link target is "GitHub". Swap them so the link text is "GitHub" (or "Outline releases") and the href is https://github.com/outline/outline/releases.

Copilot uses AI. Check for mistakes.

On Clever Cloud Console, click **Create** > **An add-on** and choose a [PostgreSQL](/developers/doc/addons/postgresql/) add-on.

Select at least an `XSS` plan.

Link the add-on to the application previously created.

### Create a Redis add-on

On Clever Cloud Console, click **Create** > **An add-on** and choose a [Redis](/developers/doc/addons/redis/) add-on.

Link the add-on to the application previously created.

### Create a Cellar S3 Object Storage add-on

On Clever Cloud Console, click **Create** > **An add-on** and choose a [Cellar S3 Object Storage](/developers/doc/addons/cellar/) add-on.

Link the add-on to the application previously created.

### Set Up Domain

Outline needs an URL declared in variables to work properly. You can set it up in **Domains names**, from your application menu. If you don't have a domain name yet, you can use a `cleverapp.io` subdomain provided by Clever Cloud for test purposes.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Outline needs an URL declared in variables to work properly. You can set it up in **Domains names**, from your application menu. If you don't have a domain name yet, you can use a `cleverapp.io` subdomain provided by Clever Cloud for test purposes.
Outline needs its public URL to be declared in an environment variables to work properly. You can set it up in **Domains names**, from your application menu. If you don't have a domain name yet, you can use a `cleverapps.io` subdomain provided by Clever Cloud for test purposes.


### Generate a <secret_key> and an <utils_secret>

Using for example [OpenSSL](https://openssl-library.org/).

In a Linux/Mac shell:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In a Linux/Mac shell:
In a Linux/macOS shell:


```bash
SECRET_KEY=$( openssl rand -hex 32 )
UTILS_SECRET=$( openssl rand -hex 32 )
echo "<secret_key>: $SECRET_KEY \n<utils_secret>: $UTILS_SECRET"
```

Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grammar: use "a URL" (not "an URL").

Copilot uses AI. Check for mistakes.
### Choose a S3 bucket name

Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In Markdown headings, <secret_key> / <utils_secret> can be interpreted as HTML tags and may not render as intended. Use backticks (e.g. SECRET_KEY / UTILS_SECRET) or plain text instead of angle brackets.

Copilot uses AI. Check for mistakes.
As explained in the [Cellar S3 doc](https://www.clever.cloud/developers/doc/addons/cellar/), Buckets' names are global for every region. You can’t give the same name to two different buckets in the same region, because the URL already exists in the Cellar cluster on this region.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
As explained in the [Cellar S3 doc](https://www.clever.cloud/developers/doc/addons/cellar/), Buckets' names are global for every region. You can’t give the same name to two different buckets in the same region, because the URL already exists in the Cellar cluster on this region.
As explained in the [Cellar Object Storage documentation](https://www.clever.cloud/developers/doc/addons/cellar/), Buckets' names are global for every region. You can’t give the same name to two different buckets in the same region, because the URL already exists in the Cellar cluster on this region.

Maybe too much "region" and we can make this sentence simpler/less repetitive


Unless you have a better option, use the Outline domain as bucket name.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this needs more explanations


### Configure environment variables

In the Clever Cloud Console, go to the Outline Node.js application you've created and, in the **Environment variables** section, inject the following environment variables into the application:

```env
URL="<outline_domain>"
NODE_ENV="production"
PORT="8080"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unnecessary (all apps have this env var by default)

CC_NODE_DEV_DEPENDENCIES="install"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really needed for production?

CC_POST_BUILD_HOOK="NODE_ENV=production && yarn build"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NODE_ENV="production" is already set?

Suggested change
CC_POST_BUILD_HOOK="NODE_ENV=production && yarn build"
CC_POST_BUILD_HOOK="yarn build"

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You use yarn build, but not yarn berry to install dependencies ? (see https://www.clever.cloud/developers/doc/applications/nodejs/#supported-package-managers)

WEB_CONCURRENCY="2"
DEFAULT_LANGUAGE="en_US"
SECRET_KEY="<secret_key>
UTILS_SECRET="<utils_secret>"
```

Now inject the add-ons credentials:

```env
DATABASE_URL "<POSTGRESQL_ADDON_URI value>"
REDIS_URL "<REDIS_URL value>"
FILE_STORAGE="s3"
AWS_S3_UPLOAD_BUCKET_URL="https://<CELLAR_ADDON_HOST value>"
AWS_S3_UPLOAD_BUCKET_NAME=<bucket_name>
AWS_ACCESS_KEY_ID="<CELLAR_ADDON_KEY_ID value>"
AWS_SECRET_ACCESS_KEY="<CELLAR_ADDON_KEY_SECRET value>"
AWS_S3_FORCE_PATH_STYLE="true"
AWS_S3_ACL="private"
Comment on lines +101 to +104
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The environment variable examples for SECRET_KEY / UTILS_SECRET have broken quoting/placeholders (missing closing >/"). As written, this will cause copy/paste errors and a broken Outline config. Fix the placeholder formatting and quotes to be valid KEY="value" lines.

Copilot uses AI. Check for mistakes.
AWS_REGION="us"
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to link add-ons and to have a pre-run binding script for that (see oTree guide example). If credentials change, there is nothing to do. With fixed env var, you need to update them.

Maybe add comments to last three AWS_ env vars to explain why these values.


### Setting the S3 policies

For Outline to use Cellar S3 as storage for its content files, you need to configure specific S3 bucket policies. These policies ensure that Outline can properly read, write, and manage files in your Cellar bucket.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Policy allows only read, not write?


Unless you have a better option, use [s3cmd](https://s3tools.org/s3cmd) to apply these policies to your bucket. Here are the required policies:

Comment on lines +108 to +113
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The add-on credential env block uses invalid syntax (missing = for DATABASE_URL / REDIS_URL, and inconsistent quoting for values like AWS_S3_UPLOAD_BUCKET_NAME). Update these lines to valid KEY="value" assignments so users can copy/paste them into the Clever Cloud console.

Copilot uses AI. Check for mistakes.
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::$BUCKET/*"]
}
]
Comment on lines +121 to +125
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide instructs a public-read bucket policy (Principal": "*" + s3:GetObject) without any warning, while later config sets AWS_S3_ACL="private". This is a security-sensitive step; either add a clear warning (like content/doc/addons/cellar.md:396-399) and explain why public access is required, or provide a private/least-privilege policy consistent with private ACL usage.

Copilot uses AI. Check for mistakes.
}
```

First, configure s3cmd with your Cellar credentials:

```bash
s3cmd --configure
```

When prompted, use the following values:
- Access Key: Your `CELLAR_ADDON_KEY_ID`
Comment on lines +132 to +136
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Configuring the S3 bucket policy with Principal: "*", Effect: "Allow", and Action: ["s3:GetObject"] on arn:aws:s3:::$BUCKET/* makes every object in the Outline storage bucket world-readable. For a private team knowledge base, this bypasses application-level access controls and allows anyone who learns or intercepts an object URL to retrieve potentially sensitive documents without authentication. Instead, keep the bucket private and grant access only to the Outline service identity (or use pre-signed URLs) so that S3 enforces the same access boundaries as the application.

Copilot uses AI. Check for mistakes.
- Secret Key: Your `CELLAR_ADDON_KEY_SECRET`
Comment on lines +133 to +137
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bucket policy example uses $BUCKET in the ARN but the guide never defines it, while other placeholders use <bucket_name>. Use the same placeholder style as the rest of the docs (e.g. arn:aws:s3:::<bucket-name>/*) and clearly state what users should replace.

Copilot uses AI. Check for mistakes.
- Default Region: `us-east-1`
- S3 Endpoint: Your `CELLAR_ADDON_HOST`
- DNS-style bucket: Yes

Then apply the policy using s3cmd:

```bash
s3cmd setpolicy policy.json s3://<bucket_name>
```

You also need to configure CORS (Cross-Origin Resource Sharing) for your bucket. Create a `cors.xml` file with the following configuration:

```xml
<CORSConfiguration>
<CORSRule>
Comment on lines +149 to +152
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The S3 region guidance is inconsistent: this section suggests us-east-1, but earlier the env example sets AWS_REGION="us". Align the region values (and the wording) so users don’t end up with mismatched configuration.

Copilot uses AI. Check for mistakes.
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<ExposeHeader>ETag</ExposeHeader>
Comment on lines +157 to +159
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The s3cmd setpolicy command is missing the closing > in s3://<bucket_name>, which makes the placeholder unclear/incorrect. Fix to a consistent placeholder form (e.g. s3://<bucket-name>).

Copilot uses AI. Check for mistakes.
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
```

Apply the CORS configuration using s3cmd:

```bash
s3cmd setcors cors.xml s3://<bucket_name>
```

Comment on lines +166 to +170
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CORS example allows PUT/POST/DELETE from any origin (<AllowedOrigin>*</AllowedOrigin>). This is much more permissive than the Cellar docs example and can enable unwanted cross-origin writes. Restrict AllowedOrigin for write methods to the Outline domain (and keep * only if you intentionally want public cross-origin access).

Copilot uses AI. Check for mistakes.
### Configure Authentication

<!-- vale off -->
At least **one of either** Google, Slack, Discord, or Microsoft is required for a working installation or you'll have no sign-in options.
<!-- vale on -->

Choose one or more of the following authentication providers and add the corresponding environment variables to your Clever Cloud application:

#### Google OAuth

```env
GOOGLE_CLIENT_ID="<your_google_client_id>"
Comment on lines +180 to +182
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The s3cmd setcors command is missing the closing > in s3://<bucket_name>. Fix the placeholder so the command can be copied reliably (e.g. s3://<bucket-name>).

Copilot uses AI. Check for mistakes.
GOOGLE_CLIENT_SECRET="<your_google_client_secret>"
```

#### Slack OAuth

```env
SLACK_CLIENT_ID="<your_slack_client_id>"
SLACK_CLIENT_SECRET="<your_slack_client_secret>"
```

#### Discord OAuth

```env
DISCORD_CLIENT_ID="<your_discord_client_id>"
DISCORD_CLIENT_SECRET="<your_discord_client_secret>"
```

#### Microsoft OAuth

```env
AZURE_CLIENT_ID="<your_azure_client_id>"
AZURE_CLIENT_SECRET="<your_azure_client_secret>"
```

### Deploy

Get the remote in your application menu > **Information** > **Deployment URL** and add it to Git with `git remote add clever <clever-remote-url>`. Then, push your code with `git push clever -u master`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe clever deploy is a better option here and it will work great with git clone. We can also talk about GitHub fork if GitHub account is linked to Clever Cloud account. A push on the fork and its deployed.


💡 If you get a reference error when pushing, try this: `git push clever main:master`.

{{% /steps %}}


## 🎓 Further Help

{{< cards >}}
{{< card link="/developers/doc/applications/nodejs" title="Node.js" subtitle="Deploy a Node.js application on Clever Cloud" icon="node" >}}
{{< card link="/developers/doc/addons/cellar" title="Cellar S3 Object Storage" subtitle="Object Storage for your apps" icon="fsbucket" >}}
{{< card link="/developers/doc/addons/postgresql" title="PostgreSQL" icon="mysql" subtitle="Your self-hosted managed relational database" >}}
{{< card link="https://docs.getoutline.com/s/hosting/doc/from-source-BlBxrNzMIP" title="Installing Outline from source" subtitle="Check Outline installation guide" icon="outline" >}}
{{< /cards >}}
1 change: 1 addition & 0 deletions data/icons.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ metabase: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox
meteor: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="m2.8 3l16.87 15.82s.33.45-.09.89c-.41.44-.95.06-.95.06L2.8 3m5.01 1.59l13.1 12.05s.32.44-.09.86c-.42.47-.96.09-.96.09l-12.05-13M4.29 8l13.1 12.03s.32.44-.09.88c-.42.45-.96.09-.96.09L4.29 8m7.76-2.04l9.15 8.41s.22.31-.07.63c-.28.3-.66.03-.66.03l-8.42-9.07m-6.6 5.95l9.15 8.42s.22.31-.06.62c-.29.31-.67.05-.67.05l-8.42-9.09m10.93-3.99l4.17 3.82s.11.14-.05.29c-.12.14-.31.02-.31.02l-3.81-4.13M7.56 16.1l4.18 3.81s.11.15-.04.29c-.14.15-.33.02-.33.02L7.56 16.1Z"/></svg>
maven: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M4.237.001c-.312-.013-.665.072-.828.457c-.158.374-.283 1.188-.34 2.276l1.223.591c-.02-.737.007-1.43.076-2.066c-.026.299-.056.96.006 2.039c.019.342.049.725.088 1.15c.002.024.002.047.007.069a45.485 45.485 0 0 0 .309 2.412c.057.368.126.752.195 1.16l-.01.01c.014.01.015.018.014.023l.03.16c.03.162.06.328.093.494l.108.553l.056.289a61.72 61.72 0 0 0 .457 2.068c.09.382.186.78.287 1.186c.098.386.199.783.309 1.193c.096.362.199.735.303 1.117c.003.018.012.036.015.055a145.826 145.826 0 0 0 .34 1.185l.049.174c.078.261.158.533.242.805a4.2 4.2 0 0 1-.293-.135l-.19-.654c-.02-.077-.042-.148-.062-.225l-.002-.004l-.004-.002c-.087-.3-.17-.607-.257-.916c-.023-.087-.044-.173-.069-.263l-.314-1.178c-.1-.381-.194-.765-.29-1.154c-.094-.39-.185-.78-.277-1.172c-.093-.401-.181-.8-.265-1.203c-.085-.396-.161-.798-.24-1.193a50.315 50.315 0 0 1-.211-1.17c-.004-.013-.006-.03-.01-.041l.004-.002c-.057-.386-.116-.77-.174-1.15a60.905 60.905 0 0 1-.154-1.204a27.447 27.447 0 0 1-.172-2.41l-1.22-.59c-.004.074-.01.15-.013.23c-.012.294-.02.605-.023.93a45.3 45.3 0 0 0 .006 1.157c.009.37.025.755.045 1.148c.02.336.042.675.07 1.022l.002.039l.006.004c.003.023.007.05.006.076c.033.368.064.739.107 1.115a34.493 34.493 0 0 0 .303 2.125c.01.064.024.131.035.195a23.418 23.418 0 0 0 .547 2.32c.07.237.14.464.21.68c.063.182.13.365.194.545c.155.422.327.832.512 1.232l.006.004a.318.318 0 0 0 .02.05c.225.485.475.95.755 1.395c.01.013.02.033.03.047c-.455-.183-1.259-.098-1.253-.097c.83.288 1.557.64 2.016 1.175c-.183.2-.523.352-.953.477c.594.064.924-.039 1.045-.092c-.31.26-.483.732-.635 1.24c.35-.57.696-.949 1.033-1.094c.078.258.162.524.244.788A147.532 147.532 0 0 0 5.157 24a.56.56 0 0 0 .43-.312c.13-.282.83-1.775 1.908-3.875c.413 1.303.88 2.679 1.386 4.109a.494.494 0 0 0 .076-.465a103.735 103.735 0 0 1-1.308-3.945c.154-.299.316-.612.484-.932c.125.04.255.094.389.155c.203.186.352.491.482.84a1.515 1.515 0 0 0-.334-1.098c1.335.258 2.547.09 3.287-.81a3.97 3.97 0 0 0 .192-.258c-.325.304-.682.404-1.313.273c.996-.281 1.523-.617 2.035-1.22c.12-.145.244-.303.371-.48c-.943.722-1.927.822-2.9.493l-.045-.018c.914.02 2.203-.474 3.092-1.189c.41-.33.796-.73 1.17-1.21c.28-.359.55-.76.82-1.216c.234-.393.468-.824.7-1.293a2.83 2.83 0 0 1-.74.137l-.144.008c-.048.002-.093 0-.146.002c.885-.198 1.5-.74 1.994-1.447c-.24.117-.628.262-1.07.297c-.058.006-.12.006-.182.006c-.013-.002-.028 0-.047-.002c.306-.078.574-.178.81-.309a3.363 3.363 0 0 0 .358-.236c.044-.037.088-.07.13-.106c.099-.086.193-.18.28-.287c.028-.034.056-.063.08-.098c.036-.05.073-.098.104-.146a8.388 8.388 0 0 0 .51-.828c.015-.031.032-.057.046-.088c.04-.084.08-.16.11-.227c.042-.099.074-.179.092-.238a.515.515 0 0 1-.108.051c-.273.112-.727.187-1.086.201c-.004 0-.008 0-.013.004h-.067c.72-.214 1.067-.45 1.422-.818a13.883 13.883 0 0 0 1.154-1.428c.264-.37.505-.738.692-1.072a6.5 6.5 0 0 0 .298-.592c.066-.157.122-.305.172-.45c-.466.01-.986.011-1.48 0c.495.01 1.015.007 1.484-.005c.5-1.485.063-2.262.063-2.262s-.526-1.212-1.4-.851c-.426.175-1.172.73-2.083 1.56l.514 1.45a17.561 17.561 0 0 1 1.703-1.602c-.257.22-.807.726-1.615 1.644c-.256.29-.537.624-.844.997c-.017.02-.035.038-.047.06a51.435 51.435 0 0 0-1.666 2.187c-.248.34-.498.704-.765 1.088h-.016c.002.02-.004.028-.01.032l-.101.152c-.104.155-.213.31-.318.47l-.352.534c-.061.09-.124.181-.186.277c-.184.282-.367.573-.558.873a97.351 97.351 0 0 0-1.428 2.338a96.866 96.866 0 0 0-1.341 2.343c-.012.017-.02.04-.034.057a197.256 197.256 0 0 0-.668 1.223l-.097.181c-.17.318-.346.642-.52.979c0 .004-.005.008-.006.013c-.026.048-.05.093-.072.141c-.117.222-.218.424-.45.87a1.352 1.352 0 0 0-.233-.182l.345-.65c.047-.089.096-.177.143-.27l.04-.077l.546-1.001l.13-.233v-.006l-.001-.006c.169-.31.345-.62.52-.94c.051-.087.102-.173.153-.265c.224-.395.454-.794.684-1.197a91.685 91.685 0 0 1 2.135-3.504c.247-.386.503-.77.754-1.152c.092-.138.182-.272.279-.41a72.9 72.9 0 0 1 .48-.701c.007-.012.019-.024.026-.037h.006c.26-.356.517-.713.773-1.065c.278-.373.554-.735.83-1.09a31.075 31.075 0 0 1 1.777-2.075l-.515-1.446c-.06.057-.126.116-.192.178a32.37 32.37 0 0 0-.758.729c-.295.294-.597.606-.912.935a46.032 46.032 0 0 0-1.632 1.838l-.03.033l.002.008c-.017.02-.033.044-.054.064c-.266.323-.538.649-.801.985a39.105 39.105 0 0 0-1.445 1.95c-.043.06-.085.126-.127.186a26.458 26.458 0 0 0-1.403 2.303c-.13.247-.256.485-.37.715c-.096.195-.187.395-.278.591c-.21.463-.398.93-.566 1.399l.002.006a.36.36 0 0 0-.026.058c-.108.303-.203.608-.29.914c-.14.174-.302.325-.483.46a3.505 3.505 0 0 0-.131-.153a5.148 5.148 0 0 0 .824-2.211a6.4 6.4 0 0 0-.016-1.488c-.046-.4-.126-.82-.238-1.274c-.097-.393-.217-.81-.363-1.248c-.091.185-.22.367-.379.545l-.086.094c-.029.032-.06.06-.092.094c.434-.674.486-1.397.358-2.148a2.722 2.722 0 0 1-.49.85c-.033.038-.072.077-.11.116c-.01.007-.019.018-.033.028c.144-.24.25-.467.318-.698a1.29 1.29 0 0 0 .04-.146a2.85 2.85 0 0 0 .038-.225l.018-.146a2.11 2.11 0 0 0-.002-.354c-.003-.04-.004-.076-.01-.113c-.01-.055-.016-.105-.027-.154a7.416 7.416 0 0 0-.193-.84c-.01-.028-.015-.056-.026-.084c-.027-.079-.048-.149-.072-.209a2.1 2.1 0 0 0-.09-.209a.455.455 0 0 1-.035.1c-.102.24-.34.57-.557.8c-.003.003-.007.005-.007.01l-.04.043c.318-.58.39-.946.385-1.398a12.274 12.274 0 0 0-.16-1.615a10.68 10.68 0 0 0-.232-1.104a5.853 5.853 0 0 0-.18-.558a6.337 6.337 0 0 0-.172-.391a26.18 26.18 0 0 0 .002-.004C5.576.341 4.82.124 4.82.124s-.27-.11-.582-.123zm3.38 15.783l.032.082v.002c-.06.033-.116.067-.178.097c-.012.004-.024.012-.039.018a2.41 2.41 0 0 0 .186-.2zm-.603 1.626c.13.136.25.242.354.32l.07.227a1.866 1.866 0 0 0-.246.053l-.03-.098c-.024-.084-.048-.17-.076-.257l-.021-.073zm.26.875a2.34 2.34 0 0 1 .271.01l.07.229a.778.778 0 0 1 .247-.004l-.326.627a127.643 127.643 0 0 1-.262-.862z"/></svg>
moodle: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 512 512"><path fill="currentColor" d="M337.179 86.713C195.049 104.138 130.417 116.483 8 187.447l1.136 3.223l9.729.099c-.892 9.798-2.447 34.016-.461 70.433c-13.583 39.31-.345 66.015 12.087 95.065c1.97-30.216 1.768-63.31-7.512-96.246c-1.943-36.172-.347-59.956.53-69.207l81.152.775a371.222 371.222 0 0 0 2.403 47.57l.006.002c-1.134 6.657-1.703 13.71-1.703 21.161v164.964h79.367V269.517c-.013-8.703.945-16.233 2.858-22.611c20.455-3.355 39.75-10.883 56.958-22.184c13.423 6.674 20.14 21.6 20.14 44.795v155.77h79.353v-155.77c.058-32.575 13.514-48.857 40.373-48.847c26.858.01 40.287 16.291 40.287 48.847v155.77H504V260.322c-.01-33.995-11.815-59.715-35.412-77.164c-20.758-15.587-48.833-23.38-84.229-23.38c-38.714 0-65.392 9.202-80.03 27.61c-3.877-4.202-8.25-7.917-13.113-11.16c-10.753-12.04-31.792-28.45-31.792-28.45l78.763-57.555z"/></svg>
outline: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path fill="currentColor" d="M32 57.6v1.56a4 4 0 0 1-5.961 3.487l-24-13.5A4 4 0 0 1 0 45.66V18.339a4 4 0 0 1 2.039-3.486l24-13.5A4 4 0 0 1 32 4.84V6.4l2.85-.855A4 4 0 0 1 40 9.376V11l3.504-.438A4 4 0 0 1 48 14.532v34.937a4 4 0 0 1-4.496 3.969L40 53v1.624a4 4 0 0 1-5.15 3.831L32 57.6Zm0-4.176 4 1.2V9.376l-4 1.2v42.848Zm8-38.393V48.97l4 .5V14.53l-4 .5ZM0 44.47V19.53 44.47Zm4-26.13v27.322l24 13.5V4.839L4 18.34ZM8 21l4-2v26l-4-2V21Z"/></svg>
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new outline icon SVG path doesn’t set fill="currentColor" (unlike neighbouring icons such as meteor/moodle), so it may render with a default fill and not follow theme colours. Add fill="currentColor" (or equivalent) to keep icon rendering consistent.

Copilot uses AI. Check for mistakes.
docs-suite: <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 33" aria-label="Logo Docs" width="32"><path fill="currentColor" d="M21.63 29.581c1.168-.327 2.287-.925 3.02-1.98.725-1.035.929-2.346.929-3.608V5.5q0-.492-.057-.98.87.344 1.34 1.131.556.898.556 2.362v18.782q0 1.983-.972 2.969-.973.984-2.93.985H16.42l.505-.091a54 54 0 0 0 4.693-1.074z"></path><path fill="currentColor" fill-rule="evenodd" d="M4.582 26.405V7.598q0-1.718.922-2.602.934-.885 2.476-.973a77 77 0 0 0 4.307-.379 77 77 0 0 0 7.528-1.313q1.819-.43 2.791.43.973.858.973 2.74v18.492q0 1.654-.569 2.463-.569.82-1.92 1.2-2.4.656-4.521 1.035a51 51 0 0 1-4.143.594q-2.021.202-4.143.316-1.755.1-2.728-.733-.973-.82-.973-2.463m4.627-15.393q2.781-.177 5.099-.544a84 84 0 0 0 1.121-.19.816.816 0 0 0 .672-.805.826.826 0 0 0-.966-.811q-.434.074-.871.144a54 54 0 0 1-5.069.542c-.277.018-.497.104-.639.276a.9.9 0 0 0-.2.581q0 .342.23.587l.002.002a.76.76 0 0 0 .62.218m-.001 4.194q2.783-.178 5.1-.544a82 82 0 0 0 4.603-.885c.308-.069.539-.177.654-.344a.93.93 0 0 0 .17-.55q-.001-.347-.259-.59c-.184-.174-.441-.215-.746-.152h-.002a70 70 0 0 1-4.465.858 54 54 0 0 1-5.068.542c-.277.018-.497.104-.639.277a.87.87 0 0 0-.2.568q0 .353.23.6l.004.004a.82.82 0 0 0 .616.216zm0 4.193a58 58 0 0 0 5.1-.556 75 75 0 0 0 4.603-.873c.309-.069.54-.18.655-.357a.9.9 0 0 0 .169-.536c0-.23-.088-.43-.259-.59-.184-.175-.441-.215-.746-.152h-.001q-2.17.48-4.465.845a57 57 0 0 1-5.069.555c-.277.018-.497.104-.639.276a.87.87 0 0 0-.2.569q0 .353.23.599l.004.004a.82.82 0 0 0 .616.217zm5.1 3.608a55 55 0 0 1-5.1.544.76.76 0 0 1-.62-.218l-.002-.002a.83.83 0 0 1-.23-.587q0-.336.2-.581c.142-.172.362-.259.64-.277a54 54 0 0 0 5.939-.685c.503-.086.966.3.966.811a.816.816 0 0 1-.672.804q-.56.1-1.122.191" clip-rule="evenodd"></path></svg>

drupal: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="-3 -2 24 24"><path fill="currentColor" d="M13.134 3.711c-1.022-.635-1.989-.884-2.953-1.52C9.583 1.788 8.754.827 8.058 0c-.134 1.327-.54 1.866-1.003 2.251c-.982.768-1.6.998-2.45 1.46c-.714.366-4.592 2.673-4.592 7.634S4.201 19.96 8.85 19.96c4.65 0 8.683-3.365 8.683-8.46c0-5.096-3.782-7.403-4.4-7.788zm.078 14.308c-.097.096-.984.711-2.026.808c-1.042.096-2.45.153-3.299-.616c-.135-.135-.097-.326 0-.402c.096-.079.173-.136.29-.136c.116 0 .095 0 .154.038c.386.308.964.557 2.198.557c1.236 0 2.105-.344 2.49-.634c.174-.134.25-.019.27.058c.02.077.058.193-.077.327zm-3.344-1.618c.213-.193.56-.501.89-.635c.327-.135.499-.116.809-.116c.308 0 .637.02.868.174c.231.154.367.5.442.69c.078.194 0 .309-.153.386c-.134.076-.154.038-.289-.211c-.134-.25-.25-.5-.926-.5c-.675 0-.887.23-1.215.5c-.328.269-.444.365-.56.211c-.116-.153-.077-.308.134-.5zm6.964-3.666c0 .596-.192 1.672-.656 2.345c-.462.674-.75.925-1.293.886c-.695-.059-2.084-2.212-2.971-2.252c-1.118-.037-3.55 2.33-5.46 2.33c-1.159 0-1.505-.174-1.89-.425c-.58-.404-.87-1.019-.85-1.865c.02-1.5 1.427-2.903 3.203-2.922c2.256-.02 3.821 2.229 4.958 2.21c.965-.017 2.818-1.903 3.725-1.903c.964 0 1.234.998 1.234 1.596z"/></svg>
Expand Down
Loading