# ImgLink plugin for Discourse (hosted image workflows + admin diagnostics)

**URL:** <https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077>\
**Category:** Plugin\
**Created:** [March 23, 2026, 5:58pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077 "2026-03-23T17:58:41Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![A\_Richards](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/a_richards/32/487494_2.png) [@A\_Richards](https://meta.discourse.org/u/A_Richards)\
**Post date:** [March 23, 2026, 5:58pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/1 "2026-03-23T17:58:41Z")

</div>

## **Summary**

ImgLink media upload integration for Discourse with scoped API keys, retry handling, and admin diagnostics.

* * *

## **Repository Link**

[https://github.com/imglink12x/discourse-plugin](https://github.com/imglink12x/discourse-plugin)

* * *

## **Install Guide**

1. **SSH into your Discourse container:**

2. **Add the plugin to your app.yml:**

3. **Rebuild the container:**

4. **Configure your ImgLink API key** in Admin Settings (see Configuration below)

For detailed setup: https://imglink.cc/tools/forum-plugins

* * *

## **Features**

- **Direct Upload from Composer** — Upload images directly from Discourse post editor

- **Scoped API Keys** — Uses limited-scope credentials; no full account access

- **Direct & Viewer Links** — Returns both direct CDN links and image viewer URLs

- **Retry + Idempotency** — Automatic retry logic for unstable connections; prevents duplicate uploads

- **Admin Diagnostics** — Built-in health checks to validate API auth, connectivity, and upload permissions

- **BBCode Output** — Automatic BBCode formatting for embedded posting

- **Error Logging** — Detailed logs for troubleshooting upload failures

* * *

## **Configuration**

### **Step 1: Create an ImgLink API Key**

1. Log in to ImgLink (https://imglink.cc)

2. Navigate to **Settings → API Keys**

3. Create a new key with these scopes:

4. Copy the API key

### **Step 2: Add to Discourse Admin Settings**

1. Go to **Admin → Settings → Plugins**

2. Scroll to **ImgLink Settings**

3. Paste your API key in the `imglink_api_key` field

4. (Optional) Set `imglink_api_endpoint` if using a custom ImgLink instance

5. Save

### **Step 3: Run Diagnostics**

1. Go to **Admin → Plugins → ImgLink Settings**

2. Click **“Test Connection”** to validate your configuration

3. You should see **“✓ Connection successful”**

* * *

## **Settings**

| Setting Name | Type | Default | Description |
| --- | --- | --- | --- |
| `imglink_api_key` | String | (empty) | Your ImgLink API key with `upload:create` scope |
| `imglink_api_endpoint` | String | `https://imglink.cc/api/v1` | ImgLink API base URL (leave default unless self-hosted) |
| `imglink_max_retries` | Integer | `3` | Number of retry attempts for failed uploads |
| `imglink_retry_delay` | Integer | `1000` | Milliseconds to wait between retry attempts |
| `imglink_timeout_ms` | Integer | `30000` | Upload request timeout (30 seconds) |
| `imglink_enable_diagnostics` | Boolean | `true` | Enable admin diagnostic tools and logs |
| `imglink_enable_direct_links` | Boolean | `true` | Return direct CDN links vs. viewer-wrapped links |

* * *

**Version Compatibility:** Discourse 2.8+ | **Last Updated:** March 2026 | **Support:** https://imglink.cc/tools/forum-plugins

---

<div class="post-metadata">

**Author:** ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)\
**Post date:** [March 23, 2026, 6:26pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/2 "2026-03-23T18:26:52Z")

</div>

Why did you select these tags on this topic? The selection of random tags doesn’t help your plugin appear particularly trustworthy.

Also, most of the links don’t work:

> [@A\_Richards](#):
>
> ```plaintext
> For detailed setup: [https://imglink.cc/tools/forum-plugins](vscode-file://vscode-app/c:/Users/andre/AppData/Local/Programs/Microsoft%20VS%20Code/07ff9d6178/resources/app/out/vs/code/electron-browser/workbench/workbench.html)
> 
> ...
> 
> 1. Log in to ImgLink ([https://imglink.cc](vscode-file://vscode-app/c:/Users/andre/AppData/Local/Programs/Microsoft%20VS%20Code/07ff9d6178/resources/app/out/vs/code/electron-browser/workbench/workbench.html))
> 
> ...
> 
> **Version Compatibility:** Discourse 2.8+ | **Last Updated:** March 2026 | **Support:** [https://imglink.cc/tools/forum-plugins](vscode-file://vscode-app/c:/Users/andre/AppData/Local/Programs/Microsoft%20VS%20Code/07ff9d6178/resources/app/out/vs/code/electron-browser/workbench/workbench.html)
> 
> ```

  

> [@A\_Richards](#):
>
> Settings

Where are the settings? Usually, I can see them in a settings file in the config folder, like for example:

> <https://github.com/discourse/discourse-doc-categories/blob/main/config/settings.yml>

---

<div class="post-metadata">

**Author:** ![spam\_scanner\_bot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spam_scanner_bot/32/472607_2.png) [@spam\_scanner\_bot](https://meta.discourse.org/u/spam_scanner_bot)\
**Post date:** [March 23, 2026, 7:34pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/3 "2026-03-23T19:34:13Z")

</div>



---

<div class="post-metadata">

**Author:** ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)\
**Post date:** [March 23, 2026, 7:34pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/4 "2026-03-23T19:34:35Z")

</div>



---

<div class="post-metadata">

**Author:** ![darkpixlz](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/darkpixlz/32/549896_2.png) [@darkpixlz](https://meta.discourse.org/u/darkpixlz)\
**Post date:** [March 23, 2026, 7:39pm UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/5 "2026-03-23T19:39:30Z")

</div>

Hi @A_Richards, I removed the tags on your post because they were spammy and unrelated. I also had a look in the code and the plugin is not properly set up to have configurable settings as stated above.

I’d recommend you start here to edit your plugin to be better:

[https://github.com/discourse/discourse-plugin-skeleton](https://github.com/discourse/discourse-plugin-skeleton)

---

<div class="post-metadata">

**Author:** ![nat](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nat/32/235063_2.png) [@nat](https://meta.discourse.org/u/nat)\
**Post date:** [March 26, 2026, 7:02am UTC](https://meta.discourse.org/t/imglink-plugin-for-discourse-hosted-image-workflows-admin-diagnostics/399077/6 "2026-03-26T07:02:14Z")

</div>

This user overrides links pointing to their own local

```plaintext
1. Log in to ImgLink ([https://imglink.cc](vscode-file://vscode-app/c:/Users/andre/AppData/Local/Programs/Microsoft%20VS%20Code/07ff9d6178/resources/app/out/vs/code/electron-browser/workbench/workbench.html))

```

At this point I am happy to just call them malicious.
