uT7@SIf#>GQ)am-H&JdMj(=fgh5UJ4*7e4
z5H3dXF@?UV_eNw#eI8gNTvJ5pYynmq{vi^c7te{rDTO!OU$8MCl-?vDod3}4<@f+2
zo*(nZej$OGM*<^UgX0fa+>eRbjDNdarBfKl)}yb8c%sg*#qU8W1q>AZUTBo)28@bPc*%hGne3mcyK}iP-ZQq}t76NOh3q-Ug&N_{;CI|?|?_eb~Lj2!^
zMqmJcp(!YJu0F4|8EfUkuq=7@sv3zLXzBKzVGOG$ft~vsmiKtD2;TzG2n`9si?ne&
zyd)&cw${q!RW8Fn`b98u{)j`%PWqjNu~B>+$6HviOcevC|4~X9gcj$tGEUFzY#p7J
zU@|ARFtD0BnSaD1x6r{rKl2Kmpii(;nCUATKTGP-$+EH2c_A0aMH^TuQ7L|X5nZ3}
zpz9qf6-D?M^ceU0(?KXOfVa>fFUvBfQ8*{etT57x!g-wCKHZc$tWQM0@k62|IE|g}
zErfHb`T`!1!0e?>XTwbBl-y%gbt3a9(_^)x(XjKjuNPp|Mh2+ik@9SXz+hpHqS_uFYg$Fa1K-emLz-T
z^IUw6xoy=KX$>S4@_DHy&0;btPodYPWyrg;x7f#{^+>xQ$pBH_^-w5zf8j%GI`W(k?8EuJ|0l{NF2+0r6rC*BMHOA
zgbXq=m>nGymLUG}(4}qw2?YM{rM&j_1PF!C#|fx>4UXYIjZv1z(;Gp+-wGm#|0e#B
z&Pf81Kt2vWlr6j;{GasxCs|>c6R~dH)oeio@n?sAoUj=%XXc)=IT##!A-?^|24R7P
z!6Kv}f(SwZz6b)r5Tzy$egzRk5J3bHL=ZvzFM+ZD2W@a2>P1@%KmY&$07*qoM6N<$
Eg0dmvRR910
literal 0
HcmV?d00001
diff --git a/blueprints/lubelogger/template.toml b/blueprints/lubelogger/template.toml
new file mode 100644
index 00000000..4ff28963
--- /dev/null
+++ b/blueprints/lubelogger/template.toml
@@ -0,0 +1,18 @@
+[variables]
+main_domain = "${domain}"
+lubelogger_locale = "en_US.UTF-8"
+lubelogger_enable_auth = "false"
+lubelogger_domain = "https://${main_domain}"
+
+[config]
+mounts = []
+
+[[config.domains]]
+serviceName = "lubelogger"
+port = 8080
+host = "${main_domain}"
+
+[config.env]
+LUBELOGGER_LOCALE = "${lubelogger_locale}"
+LUBELOGGER_ENABLE_AUTH = "${lubelogger_enable_auth}"
+LUBELOGGER_DOMAIN = "${lubelogger_domain}"
diff --git a/meta.json b/meta.json
index 5dae84df..86705cb4 100644
--- a/meta.json
+++ b/meta.json
@@ -4053,6 +4053,24 @@
"development"
]
},
+ {
+ "id": "lubelogger",
+ "name": "LubeLogger",
+ "version": "v1.6.5",
+ "description": "LubeLogger is a self-hosted vehicle maintenance and fuel mileage tracker for managing service records, reminders, fuel logs, and vehicle expenses.",
+ "logo": "lubelogger.png",
+ "links": {
+ "github": "https://github.com/hargata/lubelog",
+ "website": "https://lubelogger.com/",
+ "docs": "https://docs.lubelogger.com/"
+ },
+ "tags": [
+ "vehicle",
+ "maintenance",
+ "fleet",
+ "self-hosted"
+ ]
+ },
{
"id": "macos",
"name": "MacOS (dockerized)",
From c70cd23b7edee4edebefe5ef68389dcbd3a71de6 Mon Sep 17 00:00:00 2001
From: Rohit Mulani
Date: Wed, 8 Jul 2026 00:01:01 +0400
Subject: [PATCH 06/54] feat: add Paperclip template (#943)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
---
blueprints/paperclip/README.md | 15 +++++++++
blueprints/paperclip/docker-compose.yml | 44 +++++++++++++++++++++++++
blueprints/paperclip/logo.svg | 5 +++
blueprints/paperclip/template.toml | 20 +++++++++++
meta.json | 18 ++++++++++
5 files changed, 102 insertions(+)
create mode 100644 blueprints/paperclip/README.md
create mode 100644 blueprints/paperclip/docker-compose.yml
create mode 100644 blueprints/paperclip/logo.svg
create mode 100644 blueprints/paperclip/template.toml
diff --git a/blueprints/paperclip/README.md b/blueprints/paperclip/README.md
new file mode 100644
index 00000000..2ccae853
--- /dev/null
+++ b/blueprints/paperclip/README.md
@@ -0,0 +1,15 @@
+# Paperclip
+
+Paperclip is an open-source control plane for managing teams of AI agents, goals, budgets, tickets, and recurring work.
+
+This Dokploy template includes:
+
+- Paperclip web/API service using the official GHCR image
+- PostgreSQL 17 database with health check
+- Generated `BETTER_AUTH_SECRET`
+- Generated database password
+- Persistent `/paperclip` storage for instance data
+- Public URL configured from the Dokploy domain
+- Dokploy domain routing to Paperclip on port 3100
+
+After deployment, check the Paperclip container logs for first-run setup or invite information.
\ No newline at end of file
diff --git a/blueprints/paperclip/docker-compose.yml b/blueprints/paperclip/docker-compose.yml
new file mode 100644
index 00000000..5c1ce7bf
--- /dev/null
+++ b/blueprints/paperclip/docker-compose.yml
@@ -0,0 +1,44 @@
+version: "3.8"
+
+services:
+ postgres:
+ image: postgres:17-alpine
+ restart: unless-stopped
+ environment:
+ POSTGRES_USER: paperclip
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
+ POSTGRES_DB: paperclip
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U paperclip -d paperclip"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
+
+ paperclip:
+ image: ghcr.io/paperclipai/paperclip:latest
+ restart: unless-stopped
+ depends_on:
+ postgres:
+ condition: service_healthy
+ environment:
+ HOST: 0.0.0.0
+ PORT: "3100"
+ SERVE_UI: "true"
+ DATABASE_URL: ${DATABASE_URL}
+ BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
+ PAPERCLIP_HOME: /paperclip
+ PAPERCLIP_INSTANCE_ID: default
+ PAPERCLIP_CONFIG: /paperclip/instances/default/config.json
+ PAPERCLIP_DEPLOYMENT_MODE: ${PAPERCLIP_DEPLOYMENT_MODE}
+ PAPERCLIP_DEPLOYMENT_EXPOSURE: ${PAPERCLIP_DEPLOYMENT_EXPOSURE}
+ PAPERCLIP_PUBLIC_URL: ${PAPERCLIP_PUBLIC_URL}
+ expose:
+ - "3100"
+ volumes:
+ - paperclip-data:/paperclip
+
+volumes:
+ postgres-data: {}
+ paperclip-data: {}
\ No newline at end of file
diff --git a/blueprints/paperclip/logo.svg b/blueprints/paperclip/logo.svg
new file mode 100644
index 00000000..44a8f649
--- /dev/null
+++ b/blueprints/paperclip/logo.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/blueprints/paperclip/template.toml b/blueprints/paperclip/template.toml
new file mode 100644
index 00000000..6a79e07c
--- /dev/null
+++ b/blueprints/paperclip/template.toml
@@ -0,0 +1,20 @@
+[variables]
+main_domain = "${domain}"
+postgres_password = "${password:32}"
+better_auth_secret = "${password:64}"
+
+[config]
+env = [
+ "POSTGRES_PASSWORD=${postgres_password}",
+ "DATABASE_URL=postgres://paperclip:${postgres_password}@postgres:5432/paperclip",
+ "BETTER_AUTH_SECRET=${better_auth_secret}",
+ "PAPERCLIP_DEPLOYMENT_MODE=authenticated",
+ "PAPERCLIP_DEPLOYMENT_EXPOSURE=private",
+ "PAPERCLIP_PUBLIC_URL=https://${main_domain}"
+]
+mounts = []
+
+[[config.domains]]
+serviceName = "paperclip"
+port = 3100
+host = "${main_domain}"
\ No newline at end of file
diff --git a/meta.json b/meta.json
index 86705cb4..a3fdfc39 100644
--- a/meta.json
+++ b/meta.json
@@ -5129,6 +5129,24 @@
"open-source"
]
},
+ {
+ "id": "paperclip",
+ "name": "Paperclip",
+ "version": "latest",
+ "description": "Paperclip is an open-source control plane for managing teams of AI agents, goals, budgets, tickets, and recurring work.",
+ "logo": "logo.svg",
+ "links": {
+ "github": "https://github.com/paperclipai/paperclip",
+ "website": "https://paperclip.ing/",
+ "docs": "https://docs.paperclip.ing/"
+ },
+ "tags": [
+ "ai",
+ "agents",
+ "automation",
+ "self-hosted"
+ ]
+ },
{
"id": "parseable",
"name": "Parseable",
From f14cc64043f84d7bc3e440267ad311336d17d692 Mon Sep 17 00:00:00 2001
From: Rohit Mulani
Date: Wed, 8 Jul 2026 00:03:54 +0400
Subject: [PATCH 07/54] feat: add PrivateBin template (#947)
* feat: add PrivateBin template
* chore: pin privatebin template version
---------
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
---
blueprints/privatebin/docker-compose.yml | 11 +++++++++++
blueprints/privatebin/privatebin.svg | 5 +++++
blueprints/privatebin/template.toml | 11 +++++++++++
meta.json | 17 +++++++++++++++++
4 files changed, 44 insertions(+)
create mode 100644 blueprints/privatebin/docker-compose.yml
create mode 100644 blueprints/privatebin/privatebin.svg
create mode 100644 blueprints/privatebin/template.toml
diff --git a/blueprints/privatebin/docker-compose.yml b/blueprints/privatebin/docker-compose.yml
new file mode 100644
index 00000000..dc621ca0
--- /dev/null
+++ b/blueprints/privatebin/docker-compose.yml
@@ -0,0 +1,11 @@
+services:
+ privatebin:
+ image: privatebin/nginx-fpm-alpine:2.0.4
+ restart: unless-stopped
+ volumes:
+ - privatebin_data:/srv/data
+ ports:
+ - "8080"
+
+volumes:
+ privatebin_data:
diff --git a/blueprints/privatebin/privatebin.svg b/blueprints/privatebin/privatebin.svg
new file mode 100644
index 00000000..0391799d
--- /dev/null
+++ b/blueprints/privatebin/privatebin.svg
@@ -0,0 +1,5 @@
+
diff --git a/blueprints/privatebin/template.toml b/blueprints/privatebin/template.toml
new file mode 100644
index 00000000..747c3bc7
--- /dev/null
+++ b/blueprints/privatebin/template.toml
@@ -0,0 +1,11 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+env = {}
+mounts = []
+
+[[config.domains]]
+serviceName = "privatebin"
+port = 8080
+host = "${main_domain}"
diff --git a/meta.json b/meta.json
index a3fdfc39..6dd27215 100644
--- a/meta.json
+++ b/meta.json
@@ -5585,6 +5585,23 @@
],
"dokploy_version": "<0.22.5"
},
+ {
+ "id": "privatebin",
+ "name": "PrivateBin",
+ "version": "2.0.4",
+ "description": "PrivateBin is a minimalist, open-source online pastebin where the server has zero knowledge of pasted data.",
+ "logo": "privatebin.svg",
+ "links": {
+ "github": "https://github.com/PrivateBin/PrivateBin",
+ "website": "https://privatebin.info/",
+ "docs": "https://github.com/PrivateBin/docker-nginx-fpm-alpine"
+ },
+ "tags": [
+ "pastebin",
+ "privacy",
+ "self-hosted"
+ ]
+ },
{
"id": "prometheus",
"name": "Prometheus",
From b0429d94b9d2df2812388a5e3196a6698e8b784a Mon Sep 17 00:00:00 2001
From: Rohit Mulani
Date: Wed, 8 Jul 2026 00:04:12 +0400
Subject: [PATCH 08/54] fix: keep Valkey internal (#937)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
---
blueprints/valkey/docker-compose.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/blueprints/valkey/docker-compose.yml b/blueprints/valkey/docker-compose.yml
index bcabc622..f52cfafd 100644
--- a/blueprints/valkey/docker-compose.yml
+++ b/blueprints/valkey/docker-compose.yml
@@ -4,8 +4,6 @@ services:
valkey:
image: valkey/valkey:8.1.4
restart: unless-stopped
- ports:
- - 6379
volumes:
- ../files/valkey.conf:/etc/valkey/valkey.conf
- valkey-data:/data
From ac716a337f3ce1162e048b165fa27d4c97f0c354 Mon Sep 17 00:00:00 2001
From: Rohit Mulani
Date: Wed, 8 Jul 2026 00:04:26 +0400
Subject: [PATCH 09/54] feat: add Rallly template (#933)
Co-authored-by: Rohit Mulani <289630555+rohitmulani63-ops@users.noreply.github.com>
---
blueprints/rallly/docker-compose.yml | 66 ++++++++++++++++++++++++++++
blueprints/rallly/rallly.svg | 8 ++++
blueprints/rallly/template.toml | 40 +++++++++++++++++
meta.json | 17 +++++++
4 files changed, 131 insertions(+)
create mode 100644 blueprints/rallly/docker-compose.yml
create mode 100644 blueprints/rallly/rallly.svg
create mode 100644 blueprints/rallly/template.toml
diff --git a/blueprints/rallly/docker-compose.yml b/blueprints/rallly/docker-compose.yml
new file mode 100644
index 00000000..ac6badae
--- /dev/null
+++ b/blueprints/rallly/docker-compose.yml
@@ -0,0 +1,66 @@
+version: "3.8"
+
+services:
+ rallly:
+ image: lukevella/rallly:4.11.1
+ restart: unless-stopped
+ depends_on:
+ - db
+ - minio
+ - minio-init
+ environment:
+ NEXT_PUBLIC_BASE_URL: ${NEXT_PUBLIC_BASE_URL}
+ DATABASE_URL: ${DATABASE_URL}
+ SECRET_PASSWORD: ${SECRET_PASSWORD}
+ SUPPORT_EMAIL: ${SUPPORT_EMAIL}
+ NOREPLY_EMAIL: ${NOREPLY_EMAIL}
+ SMTP_HOST: ${SMTP_HOST}
+ SMTP_PORT: ${SMTP_PORT}
+ SMTP_USER: ${SMTP_USER}
+ SMTP_PWD: ${SMTP_PWD}
+ SMTP_SECURE: ${SMTP_SECURE}
+ S3_ENDPOINT: ${S3_ENDPOINT}
+ S3_BUCKET_NAME: ${S3_BUCKET_NAME}
+ S3_REGION: ${S3_REGION}
+ S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID}
+ S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY}
+ INITIAL_ADMIN_EMAIL: ${INITIAL_ADMIN_EMAIL}
+
+ db:
+ image: postgres:14-alpine
+ restart: unless-stopped
+ environment:
+ POSTGRES_DB: rallly
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
+ volumes:
+ - rallly-db:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres -d rallly"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ minio:
+ image: minio/minio:latest
+ restart: unless-stopped
+ command: server /data
+ environment:
+ MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID}
+ MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY}
+ volumes:
+ - rallly-minio:/data
+
+ minio-init:
+ image: minio/mc:latest
+ depends_on:
+ - minio
+ restart: "no"
+ entrypoint: >
+ /bin/sh -c "
+ until mc alias set local http://minio:9000 ${S3_ACCESS_KEY_ID} ${S3_SECRET_ACCESS_KEY}; do sleep 2; done;
+ mc mb --ignore-existing local/rallly;
+ "
+
+volumes:
+ rallly-db:
+ rallly-minio:
\ No newline at end of file
diff --git a/blueprints/rallly/rallly.svg b/blueprints/rallly/rallly.svg
new file mode 100644
index 00000000..b4e44b30
--- /dev/null
+++ b/blueprints/rallly/rallly.svg
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/blueprints/rallly/template.toml b/blueprints/rallly/template.toml
new file mode 100644
index 00000000..902a72f8
--- /dev/null
+++ b/blueprints/rallly/template.toml
@@ -0,0 +1,40 @@
+[variables]
+main_domain = "${domain}"
+support_email = "${email}"
+noreply_email = "${email}"
+initial_admin_email = "${email}"
+postgres_password = "${password:32}"
+secret_password = "${password:32}"
+s3_access_key_id = "rallly"
+s3_secret_access_key = "${password:32}"
+smtp_host = "smtp.example.com"
+smtp_port = "587"
+smtp_user = "change-me"
+smtp_password = "${password:32}"
+smtp_secure = "false"
+
+[config]
+env = [
+ "NEXT_PUBLIC_BASE_URL=https://${main_domain}",
+ "DATABASE_URL=postgres://postgres:${postgres_password}@db:5432/rallly",
+ "SECRET_PASSWORD=${secret_password}",
+ "SUPPORT_EMAIL=${support_email}",
+ "NOREPLY_EMAIL=${noreply_email}",
+ "SMTP_HOST=${smtp_host}",
+ "SMTP_PORT=${smtp_port}",
+ "SMTP_USER=${smtp_user}",
+ "SMTP_PWD=${smtp_password}",
+ "SMTP_SECURE=${smtp_secure}",
+ "S3_ENDPOINT=http://minio:9000",
+ "S3_BUCKET_NAME=rallly",
+ "S3_REGION=us-east-1",
+ "S3_ACCESS_KEY_ID=${s3_access_key_id}",
+ "S3_SECRET_ACCESS_KEY=${s3_secret_access_key}",
+ "INITIAL_ADMIN_EMAIL=${initial_admin_email}",
+ "POSTGRES_PASSWORD=${postgres_password}",
+]
+
+[[config.domains]]
+serviceName = "rallly"
+port = 3000
+host = "${main_domain}"
\ No newline at end of file
diff --git a/meta.json b/meta.json
index 6dd27215..7b91c0d2 100644
--- a/meta.json
+++ b/meta.json
@@ -5759,6 +5759,23 @@
"rabbitmq"
]
},
+ {
+ "id": "rallly",
+ "name": "Rallly",
+ "version": "4.11.1",
+ "description": "Rallly is an open-source scheduling and collaboration tool for organizing events and meetings.",
+ "logo": "rallly.svg",
+ "links": {
+ "website": "https://rallly.co/",
+ "docs": "https://support.rallly.co/self-hosting/introduction",
+ "github": "https://github.com/lukevella/rallly"
+ },
+ "tags": [
+ "scheduling",
+ "polls",
+ "collaboration"
+ ]
+ },
{
"id": "reactive-resume",
"name": "Reactive Resume",
From c9dc13aab86f8a772239619adf297bc83465eb29 Mon Sep 17 00:00:00 2001
From: Luke Dunsmore
Date: Tue, 7 Jul 2026 21:09:30 +0100
Subject: [PATCH 10/54] feat: update MediaFetch template version to 1.3.5
(#879)
* feat: add MediaFetch template
* Corrected .toml
* .toml
* Updated template to version 1.3.5
* Codex issues raised now fixed
* Codex issues addressed
* TOML Update
---
blueprints/mediafetch/docker-compose.yml | 9 ++++++---
blueprints/mediafetch/template.toml | 14 +++++++++++---
meta.json | 2 +-
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/blueprints/mediafetch/docker-compose.yml b/blueprints/mediafetch/docker-compose.yml
index f0c690cd..17ba6176 100644
--- a/blueprints/mediafetch/docker-compose.yml
+++ b/blueprints/mediafetch/docker-compose.yml
@@ -1,7 +1,7 @@
version: "3.8"
services:
mediafetch:
- image: lukedunsmoto/mediafetch:latest
+ image: lukedunsmoto/mediafetch:1.3.5
restart: unless-stopped
expose:
- "3002"
@@ -11,8 +11,11 @@ services:
- PORT=3002
- BASIC_AUTH_USER=${BASIC_AUTH_USER}
- BASIC_AUTH_PASS=${BASIC_AUTH_PASS}
- - PUBLIC_BASE_URL=https://${DOMAIN}
- - OUTPUT_DIR=/data/downloads
+ - PUBLIC_BASE_URL=${PUBLIC_BASE_URL}
+ - OUTPUT_DIR=${OUTPUT_DIR}
+ - MAX_CONCURRENT_JOBS=${MAX_CONCURRENT_JOBS}
+ - JOB_TIMEOUT_MS=${JOB_TIMEOUT_MS}
+ - VERSION_CHECK_TTL_MS=${VERSION_CHECK_TTL_MS}
volumes:
mediafetch_data:
\ No newline at end of file
diff --git a/blueprints/mediafetch/template.toml b/blueprints/mediafetch/template.toml
index 07672d4e..791bd07f 100644
--- a/blueprints/mediafetch/template.toml
+++ b/blueprints/mediafetch/template.toml
@@ -1,13 +1,21 @@
[variables]
+main_domain = "${domain}"
+PORT="3002"
+PUBLIC_BASE_URL="https://${main_domain}"
+OUTPUT_DIR="/data/downloads"
BASIC_AUTH_USER = "admin"
-BASIC_AUTH_PASS = "${password:12}"
+BASIC_AUTH_PASS = "changeme"
+MAX_CONCURRENT_JOBS="2"
+JOB_TIMEOUT_MS="600000"
+VERSION_CHECK_TTL_MS="21600000"
[config]
+
[[config.domains]]
name = "Domain"
-variable = "DOMAIN"
serviceName = "mediafetch"
-port = 3002
+port = "3002"
+host = "${main_domain}"
[[config.mounts]]
name = "Downloads"
diff --git a/meta.json b/meta.json
index 7b91c0d2..55a16f71 100644
--- a/meta.json
+++ b/meta.json
@@ -4248,7 +4248,7 @@
{
"id": "mediafetch",
"name": "MediaFetch",
- "version": "1.1.1",
+ "version": "1.3.5",
"description": "A tiny, self-hosted web wrapper for yt-dlp to download video and audio. Optional basic auth.",
"logo": "mediafetch.svg",
"links": {
From 0074651a45c20ee7f60fac203e12417cafa8285d Mon Sep 17 00:00:00 2001
From: Artemis-ignis
Date: Wed, 8 Jul 2026 05:10:00 +0900
Subject: [PATCH 11/54] feat: add Miniflux template (#881)
* feat: add Miniflux template
* fix: guard GitHub star count fallback
---------
Co-authored-by: Artemis-ignis
---
app/src/components/Navigation.tsx | 4 ++-
blueprints/miniflux/docker-compose.yml | 45 ++++++++++++++++++++++++++
blueprints/miniflux/miniflux.svg | 1 +
blueprints/miniflux/template.toml | 17 ++++++++++
meta.json | 17 ++++++++++
5 files changed, 83 insertions(+), 1 deletion(-)
create mode 100644 blueprints/miniflux/docker-compose.yml
create mode 100644 blueprints/miniflux/miniflux.svg
create mode 100644 blueprints/miniflux/template.toml
diff --git a/app/src/components/Navigation.tsx b/app/src/components/Navigation.tsx
index 47639224..adba7dd7 100644
--- a/app/src/components/Navigation.tsx
+++ b/app/src/components/Navigation.tsx
@@ -13,7 +13,9 @@ const Navigation = () => {
"https://api.github.com/repos/dokploy/dokploy"
);
const data = await response.json();
- setGithubStars(data.stargazers_count);
+ setGithubStars(
+ Number.isFinite(data.stargazers_count) ? data.stargazers_count : 0
+ );
} catch (error) {
console.error("Error fetching GitHub stars:", error);
}
diff --git a/blueprints/miniflux/docker-compose.yml b/blueprints/miniflux/docker-compose.yml
new file mode 100644
index 00000000..874021ac
--- /dev/null
+++ b/blueprints/miniflux/docker-compose.yml
@@ -0,0 +1,45 @@
+version: "3.8"
+
+services:
+ miniflux:
+ image: miniflux/miniflux:2.2.19
+ restart: unless-stopped
+ depends_on:
+ db:
+ condition: service_healthy
+ environment:
+ DATABASE_URL: user=miniflux password=${POSTGRES_PASSWORD} dbname=miniflux host=db sslmode=disable
+ RUN_MIGRATIONS: "1"
+ CREATE_ADMIN: "1"
+ ADMIN_USERNAME: ${ADMIN_USERNAME}
+ ADMIN_PASSWORD: ${ADMIN_PASSWORD}
+ BASE_URL: https://${MINIFLUX_DOMAIN}
+ expose:
+ - "8080"
+ healthcheck:
+ test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+ start_period: 30s
+
+ db:
+ image: postgres:18-alpine
+ restart: unless-stopped
+ environment:
+ POSTGRES_USER: miniflux
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
+ POSTGRES_DB: miniflux
+ expose:
+ - "5432"
+ volumes:
+ - miniflux-db:/var/lib/postgresql
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U miniflux -d miniflux"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ start_period: 30s
+
+volumes:
+ miniflux-db:
diff --git a/blueprints/miniflux/miniflux.svg b/blueprints/miniflux/miniflux.svg
new file mode 100644
index 00000000..3537ce7e
--- /dev/null
+++ b/blueprints/miniflux/miniflux.svg
@@ -0,0 +1 @@
+
diff --git a/blueprints/miniflux/template.toml b/blueprints/miniflux/template.toml
new file mode 100644
index 00000000..d6f553f7
--- /dev/null
+++ b/blueprints/miniflux/template.toml
@@ -0,0 +1,17 @@
+[variables]
+main_domain = "${domain}"
+postgres_password = "${password:32}"
+admin_username = "admin"
+admin_password = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "miniflux"
+port = 8080
+host = "${main_domain}"
+
+[config.env]
+MINIFLUX_DOMAIN = "${main_domain}"
+POSTGRES_PASSWORD = "${postgres_password}"
+ADMIN_USERNAME = "${admin_username}"
+ADMIN_PASSWORD = "${admin_password}"
diff --git a/meta.json b/meta.json
index 55a16f71..6584865f 100644
--- a/meta.json
+++ b/meta.json
@@ -4345,6 +4345,23 @@
"docker"
]
},
+ {
+ "id": "miniflux",
+ "name": "Miniflux",
+ "version": "2.2.19",
+ "description": "Miniflux is a minimalist and opinionated feed reader for self-hosted RSS and Atom subscriptions.",
+ "logo": "miniflux.svg",
+ "links": {
+ "github": "https://github.com/miniflux/v2",
+ "website": "https://miniflux.app/",
+ "docs": "https://miniflux.app/docs/"
+ },
+ "tags": [
+ "rss",
+ "feed-reader",
+ "news"
+ ]
+ },
{
"id": "minio",
"name": "Minio",
From 201fcd1ed8acd99b68374e7b620bfcca3630a26f Mon Sep 17 00:00:00 2001
From: Robert Da Silva
Date: Tue, 7 Jul 2026 22:11:16 +0200
Subject: [PATCH 12/54] feat(blueprint): add LimeSurvey template (#878)
---
blueprints/limesurvey/docker-compose.yml | 40 ++++++++++++++++++++++++
blueprints/limesurvey/limesurvey.svg | 38 ++++++++++++++++++++++
blueprints/limesurvey/template.toml | 19 +++++++++++
meta.json | 17 ++++++++++
4 files changed, 114 insertions(+)
create mode 100644 blueprints/limesurvey/docker-compose.yml
create mode 100644 blueprints/limesurvey/limesurvey.svg
create mode 100644 blueprints/limesurvey/template.toml
diff --git a/blueprints/limesurvey/docker-compose.yml b/blueprints/limesurvey/docker-compose.yml
new file mode 100644
index 00000000..936e5199
--- /dev/null
+++ b/blueprints/limesurvey/docker-compose.yml
@@ -0,0 +1,40 @@
+version: "3.8"
+
+services:
+ db:
+ image: mariadb:10.11
+ restart: always
+ volumes:
+ - db_data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+ - MYSQL_DATABASE=limesurvey
+ - MYSQL_USER=limesurvey
+ - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+
+ limesurvey:
+ image: martialblog/limesurvey:latest
+ restart: always
+ volumes:
+ - limesurvey_upload:/var/www/html/upload
+ environment:
+ - ADMIN_EMAIL=${ADMIN_EMAIL}
+ - ADMIN_NAME=Admin
+ - ADMIN_USER=admin
+ - ADMIN_PASSWORD=${ADMIN_PASSWORD}
+ - DB_HOST=db
+ - DB_MYSQL_ENGINE=InnoDB
+ - DB_NAME=limesurvey
+ - DB_PASSWORD=${MYSQL_PASSWORD}
+ - DB_USERNAME=limesurvey
+ - DEBUG=0
+ - DEBUG_SQL=0
+ - PUBLIC_URL=${PUBLIC_URL}
+ - SHOW_SCRIPT_NAME=false
+ - URL_FORMAT=path
+ depends_on:
+ - db
+
+volumes:
+ db_data:
+ limesurvey_upload:
diff --git a/blueprints/limesurvey/limesurvey.svg b/blueprints/limesurvey/limesurvey.svg
new file mode 100644
index 00000000..9ee4c0c6
--- /dev/null
+++ b/blueprints/limesurvey/limesurvey.svg
@@ -0,0 +1,38 @@
+
+
+
diff --git a/blueprints/limesurvey/template.toml b/blueprints/limesurvey/template.toml
new file mode 100644
index 00000000..07623f50
--- /dev/null
+++ b/blueprints/limesurvey/template.toml
@@ -0,0 +1,19 @@
+[variables]
+main_domain = "${domain}"
+mysql_root_password = "${password:32}"
+mysql_user_password = "${password:32}"
+admin_email = "${email}"
+admin_password = "${password:32}"
+
+[config]
+[[config.domains]]
+serviceName = "limesurvey"
+port = 8080
+host = "${main_domain}"
+
+[config.env]
+PUBLIC_URL = "http://${main_domain}"
+ADMIN_EMAIL = "${admin_email}"
+ADMIN_PASSWORD = "${admin_password}"
+MYSQL_PASSWORD = "${mysql_user_password}"
+MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
diff --git a/meta.json b/meta.json
index 6584865f..65dde0c7 100644
--- a/meta.json
+++ b/meta.json
@@ -3882,6 +3882,23 @@
"language"
]
},
+ {
+ "id": "limesurvey",
+ "name": "LimeSurvey",
+ "version": "6.17.2+260507",
+ "description": "LimeSurvey is a powerful, open-source survey platform, making it simple to create online surveys and forms with unmatched flexibility.",
+ "logo": "limesurvey.svg",
+ "links": {
+ "github": "https://github.com/LimeSurvey/LimeSurvey",
+ "website": "https://www.limesurvey.org",
+ "docs": "https://www.limesurvey.org/manual/"
+ },
+ "tags": [
+ "forms",
+ "questionnaire",
+ "survey"
+ ]
+ },
{
"id": "linkding",
"name": "Linkding",
From cc99a025d3bb998720e44aa5b12b57d7327f5670 Mon Sep 17 00:00:00 2001
From: atlasclaw369
Date: Wed, 8 Jul 2026 00:12:07 +0400
Subject: [PATCH 13/54] feat: add Homepage template (#871)
Co-authored-by: atlasclaw369 <268303653+atlasclaw369@users.noreply.github.com>
---
blueprints/homepage/docker-compose.yml | 9 +++++++++
blueprints/homepage/homepage.png | Bin 0 -> 1407 bytes
blueprints/homepage/template.toml | 13 +++++++++++++
meta.json | 18 ++++++++++++++++++
4 files changed, 40 insertions(+)
create mode 100644 blueprints/homepage/docker-compose.yml
create mode 100644 blueprints/homepage/homepage.png
create mode 100644 blueprints/homepage/template.toml
diff --git a/blueprints/homepage/docker-compose.yml b/blueprints/homepage/docker-compose.yml
new file mode 100644
index 00000000..2a6d48b9
--- /dev/null
+++ b/blueprints/homepage/docker-compose.yml
@@ -0,0 +1,9 @@
+version: "3.8"
+services:
+ homepage:
+ image: ghcr.io/gethomepage/homepage:v1.13.1
+ restart: unless-stopped
+ expose:
+ - 3000
+ volumes:
+ - ../files/homepage-config:/app/config
diff --git a/blueprints/homepage/homepage.png b/blueprints/homepage/homepage.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a11f3dc8a690fe9fb31f6cd695f27e7bf53e5e6
GIT binary patch
literal 1407
zcmZ8hX;4!K5RS$c5rk2&j6fM$w1PlT6VW`5gd4&kgcKnhiXt%r29scjlzS?oawr7k
zcrk^fwNB+Iks%yG3j!8=!V^aWm{ceU!3G(@4PVHVeAdp#JAOE)VtwYl*+pK%^-aiiuXZ`QX_ts7Csh%_~9sz!uyZU5_Ij|Vj
zuDA!U+=Vm+k5yq06p7-ub>r`b-{{b}gObHG8j!1G7
z(K^Q|Xm!&vo;dYp&%=2ih^^%7PlYHa8v4dbEq(&$>n;BkT>3v+hEet*DK+^6PWbcT
zqSa;Hv;8t`JGYH1(^9pf`H*Mrw+#lv-TjJiX`Kb~SZSU1oS%**e_!ICOc02o8RkHti?
zm7-!ujDz>qNmY_18MLr@r}ipP6{gPP>rO3Cgb$8!3T}$CX;fRaaXVcLb>Loby}uGQ
zKvopnWp93jXG4_`Nmx5lP&3#9ynu*}AVOe9Mk%(<|DY4+twc22y9unxUtL=Fo
zdm2)lK-Y{o+odFYEBr{hYf4m}kM`L4m)*l7uI^F>t_Ysj8LxeUJMikp=N|b1s^2o(
z*uKuAG3F%2B;ImsY?3d-zT7E(h6z=aYWnjk2|c;;^W@Q8$uld>ULP|mp#>$!lCBdD
zo>Lr$f~~t?D6={ASm7+o*b@Rsx*35zVz1{?yqm-Z*|uTBCjx)
z2y8jN2A2CgsrOYSxrgNO0|v2fnmH36b-|@gQTi0{yaIbrBk%K38|QDB$ceMa?%wy`
zQs|f6ys^*w#reU#kwEA`pJ376BaE&};M`*}gR}%DbY9_v$Q)wd*a|)yhz@gIQ
z^mbhd?=ocMmSv=woXvQ5TJ*-?k}Q0;xMVR}!dsIk=G?~Aw-W5cVqHN;6I)_`qB(|c
z@W~8OKXS{bk!SK0AV*48dUe5Tx{4L}<>^Eyo4&C=qU5)`hT2qOU9vcsmA-h1y*n)$
znW`f1XqUJd8v*bdR0~Y+<6R;HxN)RV+UU^y6y6;^DVb-g%t`GA&`iR3d^ns63>f%u
zI_N{BzLrocd&JYb*(OcAm8|mj@!>J_r~8*IJe`xHPkJ_s|99&x&L3S1w{W+bQqfdA
zfPA!*S19ppaw^9$o5@J0XP$FpbFOuMYy3fv{M(was2i4*zm-#{jkY+QK*1~K`q
Date: Wed, 8 Jul 2026 04:23:01 +0800
Subject: [PATCH 14/54] Add qui A fast, modern web interface for qBittorrent.
Manage multiple qBittorrent instances from a single, lightweight application
built by autobrr (#825)
* feat: add qui template
qui is a fast, modern web interface for qBittorrent by autobrr,
allowing management of multiple qBittorrent instances from a single,
lightweight self-hosted application.
- docker-compose.yml: pinned ghcr.io/autobrr/qui:1.17.0, exposes 7476
internally (no host port; Dokploy's Traefik handles routing),
persistent named volume for /config.
- template.toml: maps the qui service port 7476 to the user-supplied
domain so Dokploy's Traefik can proxy it.
- meta.json: register the template with logo and tags.
* fix(qui): use latest image tag
ghcr.io/autobrr/qui has no v1.17.0 tag published; only 'latest' and
PR/dev tags are available. Switch the image and meta.json version to
'latest' so the template actually deploys.
* revert: restore duplicate strapi entry removed by dedupe script
The previous commit accidentally removed a pre-existing duplicate
strapi entry as a side effect of running process-meta. That entry
exists upstream and is unrelated to the qui template; restore it
verbatim.
* fix: deduplicate meta.json to pass CI validation
The upstream meta.json had a pre-existing duplicate strapi entry.
Remove it so dedupe-and-sort produces identical output to the committed
file, satisfying the validate-meta CI check.
* fix(qui): replace logo with autobrr org avatar (128x128)
---
blueprints/qui/docker-compose.yml | 13 +++++++++++++
blueprints/qui/qui.png | Bin 0 -> 12411 bytes
blueprints/qui/template.toml | 9 +++++++++
meta.json | 19 +++++++++++++++++++
4 files changed, 41 insertions(+)
create mode 100644 blueprints/qui/docker-compose.yml
create mode 100644 blueprints/qui/qui.png
create mode 100644 blueprints/qui/template.toml
diff --git a/blueprints/qui/docker-compose.yml b/blueprints/qui/docker-compose.yml
new file mode 100644
index 00000000..0158d9cd
--- /dev/null
+++ b/blueprints/qui/docker-compose.yml
@@ -0,0 +1,13 @@
+version: "3.8"
+
+services:
+ qui:
+ image: ghcr.io/autobrr/qui:latest
+ restart: unless-stopped
+ expose:
+ - "7476"
+ volumes:
+ - qui-config:/config
+
+volumes:
+ qui-config:
diff --git a/blueprints/qui/qui.png b/blueprints/qui/qui.png
new file mode 100644
index 0000000000000000000000000000000000000000..64897dc4516cca619f265498c6305030b00806bf
GIT binary patch
literal 12411
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
literal 0
HcmV?d00001
diff --git a/blueprints/qui/template.toml b/blueprints/qui/template.toml
new file mode 100644
index 00000000..3858b997
--- /dev/null
+++ b/blueprints/qui/template.toml
@@ -0,0 +1,9 @@
+[variables]
+main_domain = "${domain}"
+
+[config]
+[[config.domains]]
+serviceName = "qui"
+port = 7476
+host = "${main_domain}"
+path = "/"
diff --git a/meta.json b/meta.json
index b63a3177..af267b5d 100644
--- a/meta.json
+++ b/meta.json
@@ -5794,6 +5794,25 @@
"analytics"
]
},
+ {
+ "id": "qui",
+ "name": "qui",
+ "version": "latest",
+ "description": "A fast, modern web interface for qBittorrent. Manage multiple qBittorrent instances from a single, lightweight application built by autobrr.",
+ "logo": "qui.png",
+ "links": {
+ "github": "https://github.com/autobrr/qui",
+ "website": "https://getqui.com",
+ "docs": "https://getqui.com"
+ },
+ "tags": [
+ "torrent",
+ "qbittorrent",
+ "download",
+ "media",
+ "self-hosted"
+ ]
+ },
{
"id": "rabbitmq",
"name": "RabbitMQ",
From f1210e6ac4feda626eab3cf45097e00c35c44741 Mon Sep 17 00:00:00 2001
From: Ennio Marke
Date: Tue, 7 Jul 2026 22:34:26 +0200
Subject: [PATCH 15/54] feat: Add Seanime and remove strapai duplicate entry
(#808)
* v1.0.0
* v1.0.1
* Update blueprints/seanime/docker-compose.yml
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Update blueprints/seanime/docker-compose.yml
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Update blueprints/seanime/docker-compose.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* v1.0.2
* Update blueprints/seanime/docker-compose.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* v1.0.4
* v1.0.5
* v1.0.6
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
blueprints/seanime/docker-compose.yml | 26 ++++++++++++++++++++++++++
blueprints/seanime/seanime.png | Bin 0 -> 20568 bytes
blueprints/seanime/template.toml | 7 +++++++
meta.json | 17 +++++++++++++++++
4 files changed, 50 insertions(+)
create mode 100644 blueprints/seanime/docker-compose.yml
create mode 100644 blueprints/seanime/seanime.png
create mode 100644 blueprints/seanime/template.toml
diff --git a/blueprints/seanime/docker-compose.yml b/blueprints/seanime/docker-compose.yml
new file mode 100644
index 00000000..9f6992a0
--- /dev/null
+++ b/blueprints/seanime/docker-compose.yml
@@ -0,0 +1,26 @@
+version: "3.8"
+services:
+ seanime-init:
+ image: busybox:1.37.0
+ user: "0:0"
+ volumes:
+ - ./seanime-config:/mnt/config
+ - ./anime:/mnt/anime
+ - ./downloads:/mnt/downloads
+ command:
+ [ "sh", "-c", "chown -R 1000:1000 /mnt/config && find /mnt/config -type d -exec chmod 755 {} + && find /mnt/config -type f -exec chmod 644 {} +",]
+
+ seanime:
+ image: umagistr/seanime:v3.6.1-rootless
+ depends_on:
+ seanime-init:
+ condition: service_completed_successfully
+ environment:
+ - SEANIME_SERVER_HOST=0.0.0.0
+ expose:
+ - "43211"
+ volumes:
+ - ./seanime-config:/home/seanime/.config/Seanime
+ - ./anime:/anime
+ - ./downloads:/downloads
+ restart: unless-stopped
\ No newline at end of file
diff --git a/blueprints/seanime/seanime.png b/blueprints/seanime/seanime.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e2459d918bba4eba1df66bc25e69af30581dc67
GIT binary patch
literal 20568
zcmXtgby$_n^YF$*7h66|mDxo0VEe!`jq(fSyLAp!2yX#%P&+q-?
zzPPUY>^(a>J3H~2S-z;L$YP?Apg|xIOnEtJ4G09T?&(260&n<}Nq4~?R988D4+sPu
z@9BYqq-798AZlpx(yz7NW$Z8bWRPh$^Brww82F~94p?%beh7AS%#;|VLd2y)dwpSQ
znW+8d`RD2u_}uy1j%MZ`pZf^9tdGO%slPc&PD|5EpcqPQLFB7!BylU1E|i8x7qky4
z7erH=OOtnC2fi)Ys$!NeCnm%z2e>!K1zTyA#t;Q*$-;RMQWEZ8;j~deWX^9_5dNY_
zz^lQH3#&2XzzM_ULx>@@a9i*dB}>sY5CgdHh!tFf(av7^8XryTXE?~hzru0S-dgxx
zwE9uw8Axk2)xuppZ{vcvtUr)O$W93xBqDRp_py?N+d?`ZSi=t~p9VgE{mf{?7SsiK
zJMi$i>)%Lz75xNZsNt86oE}Dq?8VKi{+aO4#R|06{%H5JWCT4WF6!V*NJ
zJB0cA)qLo4tT!?=+=K71g18~JLpsvZh!8pWcaXN`9wifJw|WX)^ZIi=dKJ3tbg(jnxb7+T<8w`QkXg;$zT08 |