feat: minversion for services

This commit is contained in:
Andras Bacsai 2024-02-22 11:53:25 +01:00
parent 4ae2087c2e
commit 63487cf3ec
10 changed files with 165 additions and 71 deletions

View File

@ -79,6 +79,12 @@ class ServicesGenerate extends Command
} else { } else {
$logo = 'svgs/unknown.svg'; $logo = 'svgs/unknown.svg';
} }
$minversion = collect(preg_grep('/^# minversion:/', explode("\n", $content)))->values();
if ($minversion->count() > 0) {
$minversion = str($minversion[0])->after('# minversion:')->trim()->value();
} else {
$minversion = '0.0.0';
}
$env_file = collect(preg_grep('/^# env_file:/', explode("\n", $content)))->values(); $env_file = collect(preg_grep('/^# env_file:/', explode("\n", $content)))->values();
if ($env_file->count() > 0) { if ($env_file->count() > 0) {
$env_file = str($env_file[0])->after('# env_file:')->trim()->value(); $env_file = str($env_file[0])->after('# env_file:')->trim()->value();
@ -103,6 +109,7 @@ class ServicesGenerate extends Command
'compose' => $yaml, 'compose' => $yaml,
'tags' => $tags, 'tags' => $tags,
'logo' => $logo, 'logo' => $logo,
'minversion' => $minversion,
]; ];
if ($env_file) { if ($env_file) {
$env_file_content = file_get_contents(base_path("templates/compose/$env_file")); $env_file_content = file_get_contents(base_path("templates/compose/$env_file"));

View File

@ -15,6 +15,7 @@ class ResourceView extends Component
public ?string $wire = null, public ?string $wire = null,
public ?string $logo = null, public ?string $logo = null,
public ?string $documentation = null, public ?string $documentation = null,
public bool $upgrade = false,
) )
{ {

View File

@ -1,14 +1,21 @@
<div class="h-20 transition-all duration-150 cursor-pointer box-without-bg bg-coolgray-100 group hover:border-coollabs" <div @class([
wire:click={{ $wire }}> 'h-20 transition-all duration-150 box-without-bg bg-coolgray-100 group border-l-2 border-transparent',
'hover:border-coollabs cursor-pointer' => !$upgrade,
'hover:border-red-500 cursor-not-allowed ' => $upgrade,
]) @if (!$upgrade) wire:click={{ $wire }} @endif>
<div class="flex items-center"> <div class="flex items-center">
{{ $logo }} {{ $logo }}
<div class="flex flex-col pl-2 "> <div class="flex flex-col pl-2 ">
<div class="text-white text-md"> <div class="text-white text-md">
{{ $title }} {{ $title }}
</div> </div>
<div class="hidden text-xs font-bold text-neutral-500 group-hover:flex"> @if($upgrade)
{{ $description }} <div class="text-neutral-500">{{ $upgrade }}</div>
</div> @else
<div class="hidden text-xs font-bold text-neutral-500 group-hover:flex">
{{ $description }}
</div>
@endif
</div> </div>
</div> </div>
@isset($documentation) @isset($documentation)
@ -20,4 +27,5 @@
</a> </a>
</div> </div>
@endisset @endisset
</div> </div>

View File

@ -175,15 +175,37 @@
<span class="loading loading-xs loading-spinner"></span> <span class="loading loading-xs loading-spinner"></span>
@else @else
@forelse ($services as $serviceName => $service) @forelse ($services as $serviceName => $service)
@if (data_get($service, 'disabled')) @if (data_get($service, 'minversion') && version_compare(config('version'), data_get($service, 'minversion'), '<'))
<button class="text-left cursor-not-allowed bg-coolgray-200/20 box-without-bg" disabled> <x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot>
<x-slot:description>
@if (data_get($service, 'slogan'))
{{ data_get($service, 'slogan') }}
@endif
</x-slot>
<x-slot:logo>
@if (data_get($service, 'logo'))
<img class="w-[4.5rem]
aspect-square h-[4.5rem] p-2 transition-all duration-200 opacity-30 grayscale group-hover:grayscale-0 group-hover:opacity-100"
src="{{ asset(data_get($service, 'logo')) }}">
@endif
</x-slot:logo>
<x-slot:documentation>
{{ data_get($service, 'documentation') }}
</x-slot>
<x-slot:upgrade>
You need to upgrade Coolify to {{ data_get($service, 'minversion') }} to use this service.
</x-slot>
</x-resource-view>
{{-- <button class="text-left cursor-not-allowed bg-coolgray-100 box-without-bg" disabled>
<div class="flex flex-col mx-6"> <div class="flex flex-col mx-6">
<div class="font-bold"> <div class="font-bold">
{{ Str::headline($serviceName) }} {{ Str::headline($serviceName) }}
</div> </div>
You need to upgrade to {{ data_get($service, 'minVersion') }} to use this service. You need to upgrade to {{ data_get($service, 'minversion') }} to use this service.
</div> </div>
</button> </button> --}}
@else @else
<x-resource-view wire="setType('one-click-service-{{ $serviceName }}')"> <x-resource-view wire="setType('one-click-service-{{ $serviceName }}')">
<x-slot:title> {{ Str::headline($serviceName) }}</x-slot> <x-slot:title> {{ Str::headline($serviceName) }}</x-slot>

View File

@ -2,6 +2,7 @@
# slogan: The single platform to analyze, test, observe, and deploy new features # slogan: The single platform to analyze, test, observe, and deploy new features
# tags: analytics, product, open-source, self-hosted, ab-testing, event-tracking # tags: analytics, product, open-source, self-hosted, ab-testing, event-tracking
# logo: svgs/posthog.svg # logo: svgs/posthog.svg
# minversion: 4.0.0-beta.222
services: services:
db: db:

View File

@ -1,5 +1,5 @@
# documentation: https://syncthing.net/ # documentation: https://syncthing.net/
# slogan: Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time. # slogan: Syncthing synchronizes files between two or more computers in real time.
# tags: filestorage, data, synchronization # tags: filestorage, data, synchronization
# logo: svgs/syncthing.svg # logo: svgs/syncthing.svg

View File

@ -1,5 +1,5 @@
# documentation: https://umami.is # documentation: https://umami.is
# slogan: Umami is a lightweight, self-hosted web analytics platform designed to provide website owners with insights into visitor behavior without compromising user privacy. # slogan: Umami is web analytics platform which provides insights into visitor behavior without compromising user privacy.
# tags: analytics, insights, privacy # tags: analytics, insights, privacy
# logo: svgs/umami.svg # logo: svgs/umami.svg

View File

@ -1,5 +1,5 @@
# documentation: https://github.com/louislam/uptime-kuma?tab=readme-ov-file # documentation: https://github.com/louislam/uptime-kuma?tab=readme-ov-file
# slogan: Uptime Kuma is a free, self-hosted monitoring tool for tracking the status and performance of your web services and applications in real-time. # slogan: Uptime Kuma is a monitoring tool for tracking the status and performance of your applications in real-time.
# tags: monitoring, status, performance, web, services, applications, real-time # tags: monitoring, status, performance, web, services, applications, real-time
# logo: svgs/uptime-kuma.svg # logo: svgs/uptime-kuma.svg

View File

@ -1,5 +1,5 @@
# documentation: https://github.com/dani-garcia/vaultwarden # documentation: https://github.com/dani-garcia/vaultwarden
# slogan: Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected. # slogan: Vaultwarden is a password manager that allows you to securely store and manage your passwords.
# tags: password manager, security # tags: password manager, security
# logo: svgs/bitwarden.svg # logo: svgs/bitwarden.svg

View File

@ -10,7 +10,8 @@
"low", "low",
"platform" "platform"
], ],
"logo": "svgs\/appsmith.svg" "logo": "svgs\/appsmith.svg",
"minversion": "0.0.0"
}, },
"appwrite": { "appwrite": {
"documentation": "https:\/\/appwrite.io", "documentation": "https:\/\/appwrite.io",
@ -21,6 +22,7 @@
"platform" "platform"
], ],
"logo": "svgs\/appwrite.svg", "logo": "svgs\/appwrite.svg",
"minversion": "0.0.0",
"envs": "X0FQUF9FTlY9cHJvZHVjdGlvbgpfQVBQX0xPQ0FMRT1lbgpfQVBQX09QVElPTlNfQUJVU0U9ZW5hYmxlZApfQVBQX09QVElPTlNfRk9SQ0VfSFRUUFM9ZGlzYWJsZWQKX0FQUF9PUEVOU1NMX0tFWV9WMT0KX0FQUF9ET01BSU49Cl9BUFBfRE9NQUlOX1RBUkdFVD0KX0FQUF9ET01BSU5fRlVOQ1RJT05TPQpfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1Q9ZW5hYmxlZApfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUz0KX0FQUF9DT05TT0xFX1dISVRFTElTVF9JUFM9Cl9BUFBfU1lTVEVNX0VNQUlMX05BTUU9QXBwd3JpdGUKX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUz10ZWFtQGFwcHdyaXRlLmlvCl9BUFBfU1lTVEVNX1JFU1BPTlNFX0ZPUk1BVD0KX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUz1jZXJ0c0BhcHB3cml0ZS5pbwpfQVBQX1VTQUdFX1NUQVRTPWVuYWJsZWQKX0FQUF9MT0dHSU5HX1BST1ZJREVSPQpfQVBQX0xPR0dJTkdfQ09ORklHPQpfQVBQX1VTQUdFX0FHR1JFR0FUSU9OX0lOVEVSVkFMPTMwCl9BUFBfVVNBR0VfVElNRVNFUklFU19JTlRFUlZBTD0zMApfQVBQX1VTQUdFX0RBVEFCQVNFX0lOVEVSVkFMPTkwMApfQVBQX1dPUktFUl9QRVJfQ09SRT02Cl9BUFBfUkVESVNfSE9TVD1hcHB3cml0ZS1yZWRpcwpfQVBQX1JFRElTX1BPUlQ9NjM3OQpfQVBQX1JFRElTX1VTRVI9Cl9BUFBfUkVESVNfUEFTUz0KX0FQUF9EQl9IT1NUPWFwcHdyaXRlLW1hcmlhZGIKX0FQUF9EQl9QT1JUPTMzMDYKX0FQUF9EQl9TQ0hFTUE9YXBwd3JpdGUKX0FQUF9EQl9VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKX0FQUF9EQl9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCl9BUFBfREJfUk9PVF9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX1JPT1RNWVNRTApfQVBQX0lORkxVWERCX0hPU1Q9YXBwd3JpdGUtaW5mbHV4ZGIKX0FQUF9JTkZMVVhEQl9QT1JUPTgwODYKX0FQUF9TVEFUU0RfSE9TVD1hcHB3cml0ZS10ZWxlZ3JhZgpfQVBQX1NUQVRTRF9QT1JUPTgxMjUKX0FQUF9TTVRQX0hPU1Q9Cl9BUFBfU01UUF9QT1JUPQpfQVBQX1NNVFBfU0VDVVJFPQpfQVBQX1NNVFBfVVNFUk5BTUU9Cl9BUFBfU01UUF9QQVNTV09SRD0KX0FQUF9TTVNfUFJPVklERVI9Cl9BUFBfU01TX0ZST009Cl9BUFBfU1RPUkFHRV9MSU1JVD0zMDAwMDAwMApfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVD0yMDAwMDAwMApfQVBQX1NUT1JBR0VfQU5USVZJUlVTPWRpc2FibGVkCl9BUFBfU1RPUkFHRV9BTlRJVklSVVNfSE9TVD1hcHB3cml0ZS1jbGFtYXYKX0FQUF9TVE9SQUdFX0FOVElWSVJVU19QT1JUPTMzMTAKX0FQUF9TVE9SQUdFX0RFVklDRT1sb2NhbApfQVBQX1NUT1JBR0VfUzNfQUNDRVNTX0tFWT0KX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX1MzX1JFR0lPTj11cy1lYXN0LTEKX0FQUF9TVE9SQUdFX1MzX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049dXMtZWFzdC0xCl9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQlVDS0VUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfU0VDUkVUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTj11cy13ZXN0LTAwNApfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9SRUdJT049ZXUtY2VudHJhbC0xCl9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9XQVNBQklfU0VDUkVUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTj1ldS1jZW50cmFsLTEKX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQ9Cl9BUFBfRlVOQ1RJT05TX1NJWkVfTElNSVQ9MzAwMDAwMDAKX0FQUF9GVU5DVElPTlNfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQlVJTERfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQ09OVEFJTkVSUz0xMApfQVBQX0ZVTkNUSU9OU19DUFVTPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZX1NXQVA9MApfQVBQX0ZVTkNUSU9OU19SVU5USU1FUz1ub2RlLTIwLjAscGhwLTguMixweXRob24tMy4xMSxydWJ5LTMuMgpfQVBQX0VYRUNVVE9SX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF82NF9BUFBXUklURQpfQVBQX0VYRUNVVE9SX0hPU1Q9aHR0cDovL2FwcHdyaXRlLWV4ZWN1dG9yL3YxCl9BUFBfRVhFQ1VUT1JfUlVOVElNRV9ORVRXT1JLPWFwcHdyaXRlX3J1bnRpbWVzCl9BUFBfRlVOQ1RJT05TX0lOQUNUSVZFX1RIUkVTSE9MRD02MApET0NLRVJIVUJfUFVMTF9VU0VSTkFNRT0KRE9DS0VSSFVCX1BVTExfUEFTU1dPUkQ9CkRPQ0tFUkhVQl9QVUxMX0VNQUlMPQpPUEVOX1JVTlRJTUVTX05FVFdPUks9YXBwd3JpdGVfcnVudGltZXMKX0FQUF9GVU5DVElPTlNfUlVOVElNRVNfTkVUV09SSz1ydW50aW1lcwpfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUU9Cl9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRD0KX0FQUF9GVU5DVElPTlNfTUFJTlRFTkFOQ0VfSU5URVJWQUw9MzYwMApfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUU9Cl9BUFBfVkNTX0dJVEhVQl9QUklWQVRFX0tFWT0KX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9TRUNSRVQ9Cl9BUFBfVkNTX0dJVEhVQl9XRUJIT09LX1NFQ1JFVD0KX0FQUF9NQUlOVEVOQU5DRV9JTlRFUlZBTD04NjQwMApfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRT0yNTkyMDAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0VYRUNVVElPTj0xMjA5NjAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FVRElUPTEyMDk2MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQUJVU0U9ODY0MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fVVNBR0VfSE9VUkxZPTg2NDAwMDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fU0NIRURVTEVTPTg2NDAwCl9BUFBfR1JBUEhRTF9NQVhfQkFUQ0hfU0laRT0xMApfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFk9MjUwCl9BUFBfR1JBUEhRTF9NQVhfREVQVEg9MwpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX0lEPQpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX1NFQ1JFVD0KX0FQUF9BU1NJU1RBTlRfT1BFTkFJX0FQSV9LRVk9Cg==" "envs": "X0FQUF9FTlY9cHJvZHVjdGlvbgpfQVBQX0xPQ0FMRT1lbgpfQVBQX09QVElPTlNfQUJVU0U9ZW5hYmxlZApfQVBQX09QVElPTlNfRk9SQ0VfSFRUUFM9ZGlzYWJsZWQKX0FQUF9PUEVOU1NMX0tFWV9WMT0KX0FQUF9ET01BSU49Cl9BUFBfRE9NQUlOX1RBUkdFVD0KX0FQUF9ET01BSU5fRlVOQ1RJT05TPQpfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1Q9ZW5hYmxlZApfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUz0KX0FQUF9DT05TT0xFX1dISVRFTElTVF9JUFM9Cl9BUFBfU1lTVEVNX0VNQUlMX05BTUU9QXBwd3JpdGUKX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUz10ZWFtQGFwcHdyaXRlLmlvCl9BUFBfU1lTVEVNX1JFU1BPTlNFX0ZPUk1BVD0KX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUz1jZXJ0c0BhcHB3cml0ZS5pbwpfQVBQX1VTQUdFX1NUQVRTPWVuYWJsZWQKX0FQUF9MT0dHSU5HX1BST1ZJREVSPQpfQVBQX0xPR0dJTkdfQ09ORklHPQpfQVBQX1VTQUdFX0FHR1JFR0FUSU9OX0lOVEVSVkFMPTMwCl9BUFBfVVNBR0VfVElNRVNFUklFU19JTlRFUlZBTD0zMApfQVBQX1VTQUdFX0RBVEFCQVNFX0lOVEVSVkFMPTkwMApfQVBQX1dPUktFUl9QRVJfQ09SRT02Cl9BUFBfUkVESVNfSE9TVD1hcHB3cml0ZS1yZWRpcwpfQVBQX1JFRElTX1BPUlQ9NjM3OQpfQVBQX1JFRElTX1VTRVI9Cl9BUFBfUkVESVNfUEFTUz0KX0FQUF9EQl9IT1NUPWFwcHdyaXRlLW1hcmlhZGIKX0FQUF9EQl9QT1JUPTMzMDYKX0FQUF9EQl9TQ0hFTUE9YXBwd3JpdGUKX0FQUF9EQl9VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKX0FQUF9EQl9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCl9BUFBfREJfUk9PVF9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX1JPT1RNWVNRTApfQVBQX0lORkxVWERCX0hPU1Q9YXBwd3JpdGUtaW5mbHV4ZGIKX0FQUF9JTkZMVVhEQl9QT1JUPTgwODYKX0FQUF9TVEFUU0RfSE9TVD1hcHB3cml0ZS10ZWxlZ3JhZgpfQVBQX1NUQVRTRF9QT1JUPTgxMjUKX0FQUF9TTVRQX0hPU1Q9Cl9BUFBfU01UUF9QT1JUPQpfQVBQX1NNVFBfU0VDVVJFPQpfQVBQX1NNVFBfVVNFUk5BTUU9Cl9BUFBfU01UUF9QQVNTV09SRD0KX0FQUF9TTVNfUFJPVklERVI9Cl9BUFBfU01TX0ZST009Cl9BUFBfU1RPUkFHRV9MSU1JVD0zMDAwMDAwMApfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVD0yMDAwMDAwMApfQVBQX1NUT1JBR0VfQU5USVZJUlVTPWRpc2FibGVkCl9BUFBfU1RPUkFHRV9BTlRJVklSVVNfSE9TVD1hcHB3cml0ZS1jbGFtYXYKX0FQUF9TVE9SQUdFX0FOVElWSVJVU19QT1JUPTMzMTAKX0FQUF9TVE9SQUdFX0RFVklDRT1sb2NhbApfQVBQX1NUT1JBR0VfUzNfQUNDRVNTX0tFWT0KX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX1MzX1JFR0lPTj11cy1lYXN0LTEKX0FQUF9TVE9SQUdFX1MzX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049dXMtZWFzdC0xCl9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQlVDS0VUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfU0VDUkVUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTj11cy13ZXN0LTAwNApfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9SRUdJT049ZXUtY2VudHJhbC0xCl9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9XQVNBQklfU0VDUkVUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTj1ldS1jZW50cmFsLTEKX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQ9Cl9BUFBfRlVOQ1RJT05TX1NJWkVfTElNSVQ9MzAwMDAwMDAKX0FQUF9GVU5DVElPTlNfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQlVJTERfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQ09OVEFJTkVSUz0xMApfQVBQX0ZVTkNUSU9OU19DUFVTPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZX1NXQVA9MApfQVBQX0ZVTkNUSU9OU19SVU5USU1FUz1ub2RlLTIwLjAscGhwLTguMixweXRob24tMy4xMSxydWJ5LTMuMgpfQVBQX0VYRUNVVE9SX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF82NF9BUFBXUklURQpfQVBQX0VYRUNVVE9SX0hPU1Q9aHR0cDovL2FwcHdyaXRlLWV4ZWN1dG9yL3YxCl9BUFBfRVhFQ1VUT1JfUlVOVElNRV9ORVRXT1JLPWFwcHdyaXRlX3J1bnRpbWVzCl9BUFBfRlVOQ1RJT05TX0lOQUNUSVZFX1RIUkVTSE9MRD02MApET0NLRVJIVUJfUFVMTF9VU0VSTkFNRT0KRE9DS0VSSFVCX1BVTExfUEFTU1dPUkQ9CkRPQ0tFUkhVQl9QVUxMX0VNQUlMPQpPUEVOX1JVTlRJTUVTX05FVFdPUks9YXBwd3JpdGVfcnVudGltZXMKX0FQUF9GVU5DVElPTlNfUlVOVElNRVNfTkVUV09SSz1ydW50aW1lcwpfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUU9Cl9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRD0KX0FQUF9GVU5DVElPTlNfTUFJTlRFTkFOQ0VfSU5URVJWQUw9MzYwMApfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUU9Cl9BUFBfVkNTX0dJVEhVQl9QUklWQVRFX0tFWT0KX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9TRUNSRVQ9Cl9BUFBfVkNTX0dJVEhVQl9XRUJIT09LX1NFQ1JFVD0KX0FQUF9NQUlOVEVOQU5DRV9JTlRFUlZBTD04NjQwMApfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRT0yNTkyMDAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0VYRUNVVElPTj0xMjA5NjAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FVRElUPTEyMDk2MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQUJVU0U9ODY0MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fVVNBR0VfSE9VUkxZPTg2NDAwMDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fU0NIRURVTEVTPTg2NDAwCl9BUFBfR1JBUEhRTF9NQVhfQkFUQ0hfU0laRT0xMApfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFk9MjUwCl9BUFBfR1JBUEhRTF9NQVhfREVQVEg9MwpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX0lEPQpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX1NFQ1JFVD0KX0FQUF9BU1NJU1RBTlRfT1BFTkFJX0FQSV9LRVk9Cg=="
}, },
"babybuddy": { "babybuddy": {
@ -34,7 +36,8 @@
"growth", "growth",
"activities" "activities"
], ],
"logo": "svgs\/babybuddy.png" "logo": "svgs\/babybuddy.png",
"minversion": "0.0.0"
}, },
"budge": { "budge": {
"documentation": "https:\/\/github.com\/linuxserver\/budge", "documentation": "https:\/\/github.com\/linuxserver\/budge",
@ -45,7 +48,8 @@
"budgeting", "budgeting",
"expense tracking" "expense tracking"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"code-server": { "code-server": {
"documentation": "https:\/\/coder.com\/docs\/code-server\/latest", "documentation": "https:\/\/coder.com\/docs\/code-server\/latest",
@ -57,7 +61,8 @@
"remote", "remote",
"collaboration" "collaboration"
], ],
"logo": "svgs\/code-server.svg" "logo": "svgs\/code-server.svg",
"minversion": "0.0.0"
}, },
"dashboard": { "dashboard": {
"documentation": "https:\/\/github.com\/phntxx\/dashboard?tab=readme-ov-file#dashboard", "documentation": "https:\/\/github.com\/phntxx\/dashboard?tab=readme-ov-file#dashboard",
@ -69,7 +74,8 @@
"search", "search",
"bookmarks" "bookmarks"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"directus-with-postgresql": { "directus-with-postgresql": {
"documentation": "https:\/\/directus.io", "documentation": "https:\/\/directus.io",
@ -81,7 +87,8 @@
"database", "database",
"sql" "sql"
], ],
"logo": "svgs\/directus.svg" "logo": "svgs\/directus.svg",
"minversion": "0.0.0"
}, },
"directus": { "directus": {
"documentation": "https:\/\/directus.io", "documentation": "https:\/\/directus.io",
@ -93,7 +100,8 @@
"database", "database",
"sql" "sql"
], ],
"logo": "svgs\/directus.svg" "logo": "svgs\/directus.svg",
"minversion": "0.0.0"
}, },
"docker-registry": { "docker-registry": {
"documentation": "https:\/\/docs.docker.com\/registry\/", "documentation": "https:\/\/docs.docker.com\/registry\/",
@ -104,7 +112,8 @@
"images", "images",
"docker" "docker"
], ],
"logo": "svgs\/docker-registry.png" "logo": "svgs\/docker-registry.png",
"minversion": "0.0.0"
}, },
"dokuwiki": { "dokuwiki": {
"documentation": "https:\/\/www.dokuwiki.org\/", "documentation": "https:\/\/www.dokuwiki.org\/",
@ -116,7 +125,8 @@
"knowledge", "knowledge",
"base" "base"
], ],
"logo": "svgs\/dokuwiki.png" "logo": "svgs\/dokuwiki.png",
"minversion": "0.0.0"
}, },
"duplicati": { "duplicati": {
"documentation": "https:\/\/duplicati.readthedocs.io", "documentation": "https:\/\/duplicati.readthedocs.io",
@ -126,7 +136,8 @@
"backup", "backup",
"encryption" "encryption"
], ],
"logo": "svgs\/duplicati.webp" "logo": "svgs\/duplicati.webp",
"minversion": "0.0.0"
}, },
"emby": { "emby": {
"documentation": "https:\/\/emby.media\/support\/articles\/Home.html", "documentation": "https:\/\/emby.media\/support\/articles\/Home.html",
@ -139,7 +150,8 @@
"tv", "tv",
"music" "music"
], ],
"logo": "svgs\/emby.png" "logo": "svgs\/emby.png",
"minversion": "0.0.0"
}, },
"embystat": { "embystat": {
"documentation": "https:\/\/github.com\/mregni\/EmbyStat", "documentation": "https:\/\/github.com\/mregni\/EmbyStat",
@ -152,7 +164,8 @@
"tv", "tv",
"music" "music"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"fider": { "fider": {
"documentation": "https:\/\/fider.io", "documentation": "https:\/\/fider.io",
@ -162,7 +175,8 @@
"feedback", "feedback",
"user-feedback" "user-feedback"
], ],
"logo": "svgs\/fider.svg" "logo": "svgs\/fider.svg",
"minversion": "0.0.0"
}, },
"filebrowser": { "filebrowser": {
"documentation": "https:\/\/filebrowser.org", "documentation": "https:\/\/filebrowser.org",
@ -175,7 +189,8 @@
"file-utilization", "file-utilization",
"administration-tool" "administration-tool"
], ],
"logo": "svgs\/filebrowser.svg" "logo": "svgs\/filebrowser.svg",
"minversion": "0.0.0"
}, },
"formbricks": { "formbricks": {
"documentation": "https:\/\/formbricks.com", "documentation": "https:\/\/formbricks.com",
@ -191,7 +206,8 @@
"self-hosted", "self-hosted",
"docker" "docker"
], ],
"logo": "svgs\/formbricks.png" "logo": "svgs\/formbricks.png",
"minversion": "0.0.0"
}, },
"ghost": { "ghost": {
"documentation": "https:\/\/ghost.org", "documentation": "https:\/\/ghost.org",
@ -204,7 +220,8 @@
"management", "management",
"system" "system"
], ],
"logo": "svgs\/ghost.svg" "logo": "svgs\/ghost.svg",
"minversion": "0.0.0"
}, },
"gitea-with-mariadb": { "gitea-with-mariadb": {
"documentation": "https:\/\/docs.gitea.com", "documentation": "https:\/\/docs.gitea.com",
@ -218,7 +235,8 @@
"lightweight", "lightweight",
"mariadb" "mariadb"
], ],
"logo": "svgs\/gitea.svg" "logo": "svgs\/gitea.svg",
"minversion": "0.0.0"
}, },
"gitea-with-mysql": { "gitea-with-mysql": {
"documentation": "https:\/\/docs.gitea.com", "documentation": "https:\/\/docs.gitea.com",
@ -232,7 +250,8 @@
"lightweight", "lightweight",
"mysql" "mysql"
], ],
"logo": "svgs\/gitea.svg" "logo": "svgs\/gitea.svg",
"minversion": "0.0.0"
}, },
"gitea-with-postgresql": { "gitea-with-postgresql": {
"documentation": "https:\/\/docs.gitea.com", "documentation": "https:\/\/docs.gitea.com",
@ -246,7 +265,8 @@
"lightweight", "lightweight",
"postgresql" "postgresql"
], ],
"logo": "svgs\/gitea.svg" "logo": "svgs\/gitea.svg",
"minversion": "0.0.0"
}, },
"gitea": { "gitea": {
"documentation": "https:\/\/docs.gitea.com", "documentation": "https:\/\/docs.gitea.com",
@ -259,7 +279,8 @@
"hosting", "hosting",
"lightweight" "lightweight"
], ],
"logo": "svgs\/gitea.svg" "logo": "svgs\/gitea.svg",
"minversion": "0.0.0"
}, },
"glitchtip": { "glitchtip": {
"documentation": "https:\/\/glitchtip.com", "documentation": "https:\/\/glitchtip.com",
@ -272,7 +293,8 @@
"self-hosted", "self-hosted",
"sentry" "sentry"
], ],
"logo": "svgs\/glitchtip.png" "logo": "svgs\/glitchtip.png",
"minversion": "0.0.0"
}, },
"grafana-with-postgresql": { "grafana-with-postgresql": {
"documentation": "https:\/\/grafana.com", "documentation": "https:\/\/grafana.com",
@ -284,7 +306,8 @@
"monitoring", "monitoring",
"dashboard" "dashboard"
], ],
"logo": "svgs\/grafana.svg" "logo": "svgs\/grafana.svg",
"minversion": "0.0.0"
}, },
"grafana": { "grafana": {
"documentation": "https:\/\/grafana.com", "documentation": "https:\/\/grafana.com",
@ -296,7 +319,8 @@
"monitoring", "monitoring",
"dashboard" "dashboard"
], ],
"logo": "svgs\/grafana.svg" "logo": "svgs\/grafana.svg",
"minversion": "0.0.0"
}, },
"grocy": { "grocy": {
"documentation": "https:\/\/github.com\/grocy\/grocy", "documentation": "https:\/\/github.com\/grocy\/grocy",
@ -309,7 +333,8 @@
"grocery", "grocery",
"shopping" "shopping"
], ],
"logo": "svgs\/grocy.svg" "logo": "svgs\/grocy.svg",
"minversion": "0.0.0"
}, },
"heimdall": { "heimdall": {
"documentation": "https:\/\/github.com\/linuxserver\/Heimdall", "documentation": "https:\/\/github.com\/linuxserver\/Heimdall",
@ -321,7 +346,8 @@
"applications", "applications",
"interface" "interface"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"jellyfin": { "jellyfin": {
"documentation": "https:\/\/jellyfin.org", "documentation": "https:\/\/jellyfin.org",
@ -334,7 +360,8 @@
"tv", "tv",
"music" "music"
], ],
"logo": "svgs\/jellyfin.svg" "logo": "svgs\/jellyfin.svg",
"minversion": "0.0.0"
}, },
"kuzzle": { "kuzzle": {
"documentation": "https:\/\/kuzzle.io", "documentation": "https:\/\/kuzzle.io",
@ -352,7 +379,8 @@
"geofencing", "geofencing",
"low-code" "low-code"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"meilisearch": { "meilisearch": {
"documentation": "https:\/\/www.meilisearch.com", "documentation": "https:\/\/www.meilisearch.com",
@ -366,7 +394,8 @@
"text", "text",
"meilisearch" "meilisearch"
], ],
"logo": "svgs\/meilisearch.svg" "logo": "svgs\/meilisearch.svg",
"minversion": "0.0.0"
}, },
"metabase": { "metabase": {
"documentation": "https:\/\/www.metabase.com", "documentation": "https:\/\/www.metabase.com",
@ -378,7 +407,8 @@
"business", "business",
"intelligence" "intelligence"
], ],
"logo": "svgs\/metabase.svg" "logo": "svgs\/metabase.svg",
"minversion": "0.0.0"
}, },
"metube": { "metube": {
"documentation": "https:\/\/github.com\/alexta69\/metube", "documentation": "https:\/\/github.com\/alexta69\/metube",
@ -390,7 +420,8 @@
"videos", "videos",
"playlist" "playlist"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"minio": { "minio": {
"documentation": "https:\/\/min.io\/docs\/minio\/container\/index.html", "documentation": "https:\/\/min.io\/docs\/minio\/container\/index.html",
@ -403,7 +434,8 @@
"s3", "s3",
"api" "api"
], ],
"logo": "svgs\/minio.svg" "logo": "svgs\/minio.svg",
"minversion": "0.0.0"
}, },
"moodle": { "moodle": {
"documentation": "https:\/\/moodle.org", "documentation": "https:\/\/moodle.org",
@ -420,7 +452,8 @@
"low", "low",
"code" "code"
], ],
"logo": "svgs\/moodle.png" "logo": "svgs\/moodle.png",
"minversion": "0.0.0"
}, },
"n8n-with-postgresql": { "n8n-with-postgresql": {
"documentation": "https:\/\/n8n.io", "documentation": "https:\/\/n8n.io",
@ -435,7 +468,8 @@
"low", "low",
"code" "code"
], ],
"logo": "svgs\/n8n.png" "logo": "svgs\/n8n.png",
"minversion": "0.0.0"
}, },
"n8n": { "n8n": {
"documentation": "https:\/\/n8n.io", "documentation": "https:\/\/n8n.io",
@ -450,7 +484,8 @@
"low", "low",
"code" "code"
], ],
"logo": "svgs\/n8n.png" "logo": "svgs\/n8n.png",
"minversion": "0.0.0"
}, },
"nextcloud": { "nextcloud": {
"documentation": "https:\/\/docs.nextcloud.com", "documentation": "https:\/\/docs.nextcloud.com",
@ -463,7 +498,8 @@
"filestorage", "filestorage",
"data" "data"
], ],
"logo": "svgs\/nextcloud.svg" "logo": "svgs\/nextcloud.svg",
"minversion": "0.0.0"
}, },
"nocodb": { "nocodb": {
"documentation": "https:\/\/nocodb.com\/", "documentation": "https:\/\/nocodb.com\/",
@ -478,7 +514,8 @@
"sqlite", "sqlite",
"mariadb" "mariadb"
], ],
"logo": "svgs\/nocodb.svg" "logo": "svgs\/nocodb.svg",
"minversion": "0.0.0"
}, },
"openblocks": { "openblocks": {
"documentation": "https:\/\/openblocks.dev", "documentation": "https:\/\/openblocks.dev",
@ -494,7 +531,8 @@
"low", "low",
"code" "code"
], ],
"logo": "svgs\/openblocks.svg" "logo": "svgs\/openblocks.svg",
"minversion": "0.0.0"
}, },
"pairdrop": { "pairdrop": {
"documentation": "https:\/\/pairdrop.net\/", "documentation": "https:\/\/pairdrop.net\/",
@ -506,7 +544,8 @@
"collaboration", "collaboration",
"teamwork" "teamwork"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"phpmyadmin": { "phpmyadmin": {
"documentation": "https:\/\/phpmyadmin.net", "documentation": "https:\/\/phpmyadmin.net",
@ -515,7 +554,8 @@
"tags": [ "tags": [
"database management" "database management"
], ],
"logo": "svgs\/phpmyadmin.svg" "logo": "svgs\/phpmyadmin.svg",
"minversion": "0.0.0"
}, },
"pocketbase": { "pocketbase": {
"documentation": "https:\/\/pocketbase.io\/docs\/", "documentation": "https:\/\/pocketbase.io\/docs\/",
@ -528,7 +568,8 @@
"mobile", "mobile",
"api" "api"
], ],
"logo": "svgs\/pocketbase.svg" "logo": "svgs\/pocketbase.svg",
"minversion": "0.0.0"
}, },
"posthog": { "posthog": {
"documentation": "https:\/\/posthog.com", "documentation": "https:\/\/posthog.com",
@ -542,7 +583,8 @@
"ab-testing", "ab-testing",
"event-tracking" "event-tracking"
], ],
"logo": "svgs\/posthog.svg" "logo": "svgs\/posthog.svg",
"minversion": "4.0.0-beta.222"
}, },
"snapdrop": { "snapdrop": {
"documentation": "https:\/\/github.com\/RobinLinus\/snapdrop", "documentation": "https:\/\/github.com\/RobinLinus\/snapdrop",
@ -556,7 +598,8 @@
"network", "network",
"internet" "internet"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"stirling-pdf": { "stirling-pdf": {
"documentation": "https:\/\/github.com\/Stirling-Tools\/Stirling-PDF", "documentation": "https:\/\/github.com\/Stirling-Tools\/Stirling-PDF",
@ -568,18 +611,20 @@
"web", "web",
"tool" "tool"
], ],
"logo": "svgs\/stirling.png" "logo": "svgs\/stirling.png",
"minversion": "0.0.0"
}, },
"syncthing": { "syncthing": {
"documentation": "https:\/\/syncthing.net\/", "documentation": "https:\/\/syncthing.net\/",
"slogan": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time.", "slogan": "Syncthing synchronizes files between two or more computers in real time.",
"compose": "c2VydmljZXM6CiAgc3luY3RoaW5nOgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL3N5bmN0aGluZzpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fU1lOQ1RISU5HCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXRjL1VUQwogICAgdm9sdW1lczoKICAgICAgLSAnc3luY3RoaW5nLWNvbmZpZzovY29uZmlnJwogICAgICAtICdzeW5jdGhpbmctZGF0YTE6L2RhdGExJwogICAgICAtICdzeW5jdGhpbmctZGF0YTI6L2RhdGEyJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMDAwOjIyMDAwL3RjcCcKICAgICAgLSAnMjIwMDA6MjIwMDAvdWRwJwogICAgICAtICcyMTAyNzoyMTAyNy91ZHAnCg==", "compose": "c2VydmljZXM6CiAgc3luY3RoaW5nOgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL3N5bmN0aGluZzpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fU1lOQ1RISU5HCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXRjL1VUQwogICAgdm9sdW1lczoKICAgICAgLSAnc3luY3RoaW5nLWNvbmZpZzovY29uZmlnJwogICAgICAtICdzeW5jdGhpbmctZGF0YTE6L2RhdGExJwogICAgICAtICdzeW5jdGhpbmctZGF0YTI6L2RhdGEyJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMDAwOjIyMDAwL3RjcCcKICAgICAgLSAnMjIwMDA6MjIwMDAvdWRwJwogICAgICAtICcyMTAyNzoyMTAyNy91ZHAnCg==",
"tags": [ "tags": [
"filestorage", "filestorage",
"data", "data",
"synchronization" "synchronization"
], ],
"logo": "svgs\/syncthing.svg" "logo": "svgs\/syncthing.svg",
"minversion": "0.0.0"
}, },
"trigger-with-external-database": { "trigger-with-external-database": {
"documentation": "https:\/\/trigger.dev", "documentation": "https:\/\/trigger.dev",
@ -594,7 +639,8 @@
"cron", "cron",
"scheduler" "scheduler"
], ],
"logo": "svgs\/trigger.png" "logo": "svgs\/trigger.png",
"minversion": "0.0.0"
}, },
"trigger": { "trigger": {
"documentation": "https:\/\/trigger.dev", "documentation": "https:\/\/trigger.dev",
@ -609,22 +655,24 @@
"cron", "cron",
"scheduler" "scheduler"
], ],
"logo": "svgs\/trigger.png" "logo": "svgs\/trigger.png",
"minversion": "0.0.0"
}, },
"umami": { "umami": {
"documentation": "https:\/\/umami.is", "documentation": "https:\/\/umami.is",
"slogan": "Umami is a lightweight, self-hosted web analytics platform designed to provide website owners with insights into visitor behavior without compromising user privacy.", "slogan": "Umami is web analytics platform which provides insights into visitor behavior without compromising user privacy.",
"compose": "c2VydmljZXM6CiAgdW1hbWk6CiAgICBpbWFnZTogJ2doY3IuaW8vdW1hbWktc29mdHdhcmUvdW1hbWk6cG9zdGdyZXNxbC1sYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVU1BTUkKICAgICAgLSAnREFUQUJBU0VfVVJMPXBvc3RncmVzOi8vJFNFUlZJQ0VfVVNFUl9QT1NUR1JFUzokU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU0Bwb3N0Z3Jlc3FsOjU0MzIvJFBPU1RHUkVTX0RCJwogICAgICAtIERBVEFCQVNFX1RZUEU9cG9zdGdyZXMKICAgICAgLSBBUFBfU0VDUkVUPSRTRVJWSUNFX1BBU1NXT1JEXzY0X1VNQU1JCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LXVtYW1pfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", "compose": "c2VydmljZXM6CiAgdW1hbWk6CiAgICBpbWFnZTogJ2doY3IuaW8vdW1hbWktc29mdHdhcmUvdW1hbWk6cG9zdGdyZXNxbC1sYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVU1BTUkKICAgICAgLSAnREFUQUJBU0VfVVJMPXBvc3RncmVzOi8vJFNFUlZJQ0VfVVNFUl9QT1NUR1JFUzokU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU0Bwb3N0Z3Jlc3FsOjU0MzIvJFBPU1RHUkVTX0RCJwogICAgICAtIERBVEFCQVNFX1RZUEU9cG9zdGdyZXMKICAgICAgLSBBUFBfU0VDUkVUPSRTRVJWSUNFX1BBU1NXT1JEXzY0X1VNQU1JCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LXVtYW1pfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK",
"tags": [ "tags": [
"analytics", "analytics",
"insights", "insights",
"privacy" "privacy"
], ],
"logo": "svgs\/umami.svg" "logo": "svgs\/umami.svg",
"minversion": "0.0.0"
}, },
"uptime-kuma": { "uptime-kuma": {
"documentation": "https:\/\/github.com\/louislam\/uptime-kuma?tab=readme-ov-file", "documentation": "https:\/\/github.com\/louislam\/uptime-kuma?tab=readme-ov-file",
"slogan": "Uptime Kuma is a free, self-hosted monitoring tool for tracking the status and performance of your web services and applications in real-time.", "slogan": "Uptime Kuma is a monitoring tool for tracking the status and performance of your applications in real-time.",
"compose": "c2VydmljZXM6CiAgdXB0aW1lLWt1bWE6CiAgICBpbWFnZTogJ2xvdWlzbGFtL3VwdGltZS1rdW1hOjEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE4KICAgIHZvbHVtZXM6CiAgICAgIC0gJ3VwdGltZS1rdW1hOi9hcHAvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSBleHRyYS9oZWFsdGhjaGVjawogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "compose": "c2VydmljZXM6CiAgdXB0aW1lLWt1bWE6CiAgICBpbWFnZTogJ2xvdWlzbGFtL3VwdGltZS1rdW1hOjEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE4KICAgIHZvbHVtZXM6CiAgICAgIC0gJ3VwdGltZS1rdW1hOi9hcHAvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSBleHRyYS9oZWFsdGhjaGVjawogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==",
"tags": [ "tags": [
"monitoring", "monitoring",
@ -635,17 +683,19 @@
"applications", "applications",
"real-time" "real-time"
], ],
"logo": "svgs\/uptime-kuma.svg" "logo": "svgs\/uptime-kuma.svg",
"minversion": "0.0.0"
}, },
"vaultwarden": { "vaultwarden": {
"documentation": "https:\/\/github.com\/dani-garcia\/vaultwarden", "documentation": "https:\/\/github.com\/dani-garcia\/vaultwarden",
"slogan": "Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected.", "slogan": "Vaultwarden is a password manager that allows you to securely store and manage your passwords.",
"compose": "c2VydmljZXM6CiAgdmF1bHR3YXJkZW46CiAgICBpbWFnZTogJ3ZhdWx0d2FyZGVuL3NlcnZlcjpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVkFVTFRXQVJERU4KICAgIHZvbHVtZXM6CiAgICAgIC0gJ3ZhdWx0d2FyZGVuLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "compose": "c2VydmljZXM6CiAgdmF1bHR3YXJkZW46CiAgICBpbWFnZTogJ3ZhdWx0d2FyZGVuL3NlcnZlcjpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVkFVTFRXQVJERU4KICAgIHZvbHVtZXM6CiAgICAgIC0gJ3ZhdWx0d2FyZGVuLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK",
"tags": [ "tags": [
"password manager", "password manager",
"security" "security"
], ],
"logo": "svgs\/bitwarden.svg" "logo": "svgs\/bitwarden.svg",
"minversion": "0.0.0"
}, },
"weblate": { "weblate": {
"documentation": "https:\/\/weblate.org", "documentation": "https:\/\/weblate.org",
@ -660,7 +710,8 @@
"libre", "libre",
"software" "software"
], ],
"logo": "svgs\/weblate.webp" "logo": "svgs\/weblate.webp",
"minversion": "0.0.0"
}, },
"whoogle": { "whoogle": {
"documentation": "https:\/\/github.com\/benbusby\/whoogle-search?tab=readme-ov-file", "documentation": "https:\/\/github.com\/benbusby\/whoogle-search?tab=readme-ov-file",
@ -670,7 +721,8 @@
"privacy", "privacy",
"search engine" "search engine"
], ],
"logo": "svgs\/unknown.svg" "logo": "svgs\/unknown.svg",
"minversion": "0.0.0"
}, },
"wordpress-with-mariadb": { "wordpress-with-mariadb": {
"documentation": "https:\/\/wordpress.org", "documentation": "https:\/\/wordpress.org",
@ -683,7 +735,8 @@
"management", "management",
"mariadb" "mariadb"
], ],
"logo": "svgs\/wordpress.svg" "logo": "svgs\/wordpress.svg",
"minversion": "0.0.0"
}, },
"wordpress-with-mysql": { "wordpress-with-mysql": {
"documentation": "https:\/\/wordpress.org", "documentation": "https:\/\/wordpress.org",
@ -696,7 +749,8 @@
"management", "management",
"mysql" "mysql"
], ],
"logo": "svgs\/wordpress.svg" "logo": "svgs\/wordpress.svg",
"minversion": "0.0.0"
}, },
"wordpress-without-database": { "wordpress-without-database": {
"documentation": "https:\/\/wordpress.org", "documentation": "https:\/\/wordpress.org",
@ -708,6 +762,7 @@
"content", "content",
"management" "management"
], ],
"logo": "svgs\/wordpress.svg" "logo": "svgs\/wordpress.svg",
"minversion": "0.0.0"
} }
} }