diff --git a/apps/__tests__/apps.test.ts b/apps/__tests__/apps.test.ts index bf9c6d6e..64f4e633 100644 --- a/apps/__tests__/apps.test.ts +++ b/apps/__tests__/apps.test.ts @@ -1,8 +1,8 @@ -import fs from "fs"; -import jsyaml from "js-yaml"; +import fs from 'fs'; +import jsyaml from 'js-yaml'; type FormField = { - type: "random"; + type: 'random'; required: boolean; }; @@ -24,25 +24,28 @@ interface AppConfig { form_fields?: FormField[]; supported_architectures: string[]; dynamic_config: boolean; + created_at: number; + updated_at: number; } const networkExceptions = [ - "matter-server", - "mdns-repeater", - "pihole", - "tailscale", - "homeassistant", - "plex", - "zerotier", - "gladys", - "scrypted", - "homebridge", - "cloudflared", + 'matter-server', + 'mdns-repeater', + 'pihole', + 'tailscale', + 'homeassistant', + 'plex', + 'zerotier', + 'gladys', + 'scrypted', + 'homebridge', + 'cloudflared', + 'beszel-agent', ]; const getAppConfigs = (): AppConfig[] => { const apps: AppConfig[] = []; - const appsDir = fs.readdirSync("./apps"); + const appsDir = fs.readdirSync('./apps'); appsDir.forEach((app: string) => { const path = `./apps/${app}/config.json`; @@ -56,7 +59,7 @@ const getAppConfigs = (): AppConfig[] => { apps.push(config); } } catch (e) { - console.error("Error parsing config file", app); + console.error('Error parsing config file', app); } } }); @@ -64,14 +67,14 @@ const getAppConfigs = (): AppConfig[] => { return apps; }; -describe("App configs", () => { - it("Get app config should return at least one app", () => { +describe('App configs', () => { + it('Get app config should return at least one app', () => { const apps = getAppConfigs(); expect(apps.length).toBeGreaterThan(0); }); - describe("Each app should have an id", () => { + describe('Each app should have an id', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -81,7 +84,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a md description", () => { + describe('Each app should have a md description', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -98,7 +101,7 @@ describe("App configs", () => { }); }); - describe("Each app should have categories defined as an array", () => { + describe('Each app should have categories defined as an array', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -109,7 +112,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a name", () => { + describe('Each app should have a name', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -119,7 +122,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a description", () => { + describe('Each app should have a description', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -129,7 +132,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a port", () => { + describe('Each app should have a port', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -141,7 +144,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a supported architecture", () => { + describe('Each app should have a supported architecture', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -152,19 +155,19 @@ describe("App configs", () => { }); }); - test("Each app should have a different port", () => { + test('Each app should have a different port', () => { const appConfigs = getAppConfigs(); const ports = appConfigs.map((app) => app.port); expect(new Set(ports).size).toBe(appConfigs.length); }); - test("Each app should have a unique id", () => { + test('Each app should have a unique id', () => { const appConfigs = getAppConfigs(); const ids = appConfigs.map((app) => app.id); expect(new Set(ids).size).toBe(appConfigs.length); }); - describe("Each app should have a version", () => { + describe('Each app should have a version', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -176,7 +179,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a docker-compose file beside it", () => { + describe('Each app should have a docker-compose file beside it', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -186,7 +189,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a metadata folder beside it", () => { + describe('Each app should have a metadata folder beside it', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -196,7 +199,7 @@ describe("App configs", () => { }); }); - describe("Each app should have a file named logo.jpg in the metadata folder", () => { + describe('Each app should have a file named logo.jpg in the metadata folder', () => { const apps = getAppConfigs(); apps.forEach((app) => { @@ -206,14 +209,12 @@ describe("App configs", () => { }); }); - describe("Each app should have a container name equals to its id", () => { + describe('Each app should have a container name equals to its id', () => { const apps = getAppConfigs(); apps.forEach((app) => { test(app.id, () => { - const dockerComposeFile = fs - .readFileSync(`./apps/${app.id}/docker-compose.yml`) - .toString(); + const dockerComposeFile = fs.readFileSync(`./apps/${app.id}/docker-compose.yml`).toString(); const dockerCompose: any = jsyaml.load(dockerComposeFile); @@ -223,15 +224,13 @@ describe("App configs", () => { }); }); - describe("Each app should have the same version in config.json and docker-compose.yml", () => { - const exceptions = ["revolt"]; + describe('Each app should have the same version in config.json and docker-compose.yml', () => { + const exceptions = ['revolt']; const apps = getAppConfigs().filter((app) => !exceptions.includes(app.id)); apps.forEach((app) => { test(app.id, () => { - const dockerComposeFile = fs - .readFileSync(`./apps/${app.id}/docker-compose.yml`) - .toString(); + const dockerComposeFile = fs.readFileSync(`./apps/${app.id}/docker-compose.yml`).toString(); const dockerCompose: any = jsyaml.load(dockerComposeFile); @@ -240,31 +239,27 @@ describe("App configs", () => { const dockerImage = dockerCompose.services[app.id].image; - const version = dockerImage.split(":")[1]; + const version = dockerImage.split(':')[1]; expect(version).toContain(app.version); }); }); }); - describe("Each app should have network tipi_main_network", () => { + describe('Each app should have network tipi_main_network', () => { const apps = getAppConfigs(); apps.forEach((app) => { test(app.id, () => { if (!networkExceptions.includes(app.id)) { - const dockerComposeFile = fs - .readFileSync(`./apps/${app.id}/docker-compose.yml`) - .toString(); + const dockerComposeFile = fs.readFileSync(`./apps/${app.id}/docker-compose.yml`).toString(); const dockerCompose: any = jsyaml.load(dockerComposeFile); expect(dockerCompose.services[app.id]).toBeDefined(); expect(dockerCompose.services[app.id].networks).toBeDefined(); - expect(dockerCompose.services[app.id].networks).toContain( - "tipi_main_network", - ); + expect(dockerCompose.services[app.id].networks).toContain('tipi_main_network'); } }); }); @@ -282,7 +277,7 @@ describe("App configs", () => { const labelDoesNotExist = Object.keys(services).some((service) => { const labels = services[service].labels || {}; if (labels) { - return !labels["runtipi.managed"]; + return !labels['runtipi.managed']; } return true; }); @@ -292,13 +287,13 @@ describe("App configs", () => { }); }); - describe("All form fields with type random should not be marked as required", () => { + describe('All form fields with type random should not be marked as required', () => { const configs = getAppConfigs(); configs.forEach((config) => { const formFields = config.form_fields; if (formFields) { formFields.forEach((field) => { - if (field.type === "random") { + if (field.type === 'random') { test(config.id, () => { expect(Boolean(field.required)).toBe(false); }); @@ -307,4 +302,28 @@ describe("App configs", () => { } }); }); + + describe('All apps should have a createdAt field', () => { + const apps = getAppConfigs(); + apps.forEach((app) => { + test(app.id, () => { + expect(app.created_at).toBeDefined(); + expect(app.created_at).toBeGreaterThan(0); + expect(app.created_at).toBeLessThan(Date.now()); + expect(new Date(app.created_at).getFullYear()).toBeGreaterThanOrEqual(2023); + }); + }); + }); + + describe('All apps should have an updatedAt field', () => { + const apps = getAppConfigs(); + apps.forEach((app) => { + test(app.id, () => { + expect(app.updated_at).toBeDefined(); + expect(app.updated_at).toBeGreaterThan(0); + expect(app.updated_at).toBeLessThan(Date.now()); + expect(new Date(app.updated_at).getFullYear()).toBeGreaterThanOrEqual(2023); + }); + }); + }); }); diff --git a/apps/activepieces/config.json b/apps/activepieces/config.json index eaad350c..32fb1c02 100644 --- a/apps/activepieces/config.json +++ b/apps/activepieces/config.json @@ -3,10 +3,11 @@ "available": true, "port": 8605, "exposable": true, + "dynamic_config": true, "id": "activepieces", "description": "Your friendliest open source all-in-one automation tool.", - "tipi_version": 28, - "version": "0.29.1", + "tipi_version": 32, + "version": "0.32.0", "categories": ["automation"], "short_desc": "True zapier alternative.", "author": "Activepieces", @@ -38,5 +39,7 @@ "env_variable": "AP_JWT_SECRET" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726366297000 } diff --git a/apps/activepieces/docker-compose.json b/apps/activepieces/docker-compose.json new file mode 100644 index 00000000..2d4077b7 --- /dev/null +++ b/apps/activepieces/docker-compose.json @@ -0,0 +1,76 @@ +{ + "services": [ + { + "image": "activepieces/activepieces:0.32.0", + "name": "activepieces", + "internalPort": 80, + "isMain": true, + "dependsOn": { + "activepieces-postgres": { + "condition": "service_healthy" + }, + "activepieces-redis": { + "condition": "service_healthy" + } + }, + "environment": { + "AP_ENGINE_EXECUTABLE_PATH": "dist/packages/engine/main.js", + "AP_API_KEY": "${AP_API_KEY}", + "AP_ENCRYPTION_KEY": "${AP_ENCRYPTION_KEY}", + "AP_JWT_SECRET": "${AP_JWT_SECRET}", + "AP_ENVIRONMENT": "prod", + "AP_FRONTEND_URL": "${APP_PROTOCOL:-http}://${APP_DOMAIN}", + "AP_WEBHOOK_TIMEOUT_SECONDS": "30", + "AP_TRIGGER_DEFAULT_POLL_INTERVAL": "5", + "AP_POSTGRES_DATABASE": "activepieces", + "AP_POSTGRES_HOST": "activepieces-postgres", + "AP_POSTGRES_PORT": "5432", + "AP_POSTGRES_USERNAME": "tipi", + "AP_POSTGRES_PASSWORD": "${AP_POSTGRES_PASSWORD}", + "AP_EXECUTION_MODE": "UNSANDBOXED", + "AP_REDIS_HOST": "activepieces-redis", + "AP_REDIS_PORT": "6379", + "AP_SANDBOX_RUN_TIME_SECONDS": "600", + "AP_TELEMETRY_ENABLED": "true", + "AP_TEMPLATES_SOURCE_URL": "https://cloud.activepieces.com/api/v1/flow-templates" + } + }, + { + "image": "postgres:14", + "name": "activepieces-postgres", + "environment": { + "POSTGRES_DB": "activepieces", + "POSTGRES_PASSWORD": "${AP_POSTGRES_PASSWORD}", + "POSTGRES_USER": "tipi" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/postgres", + "containerPath": "/var/lib/postgresql/data" + } + ], + "healthCheck": { + "test": "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB", + "interval": "30s", + "timeout": "30s", + "retries": 3 + } + }, + { + "image": "redis:7", + "name": "activepieces-redis", + "healthCheck": { + "test": "redis-cli ping", + "interval": "30s", + "timeout": "30s", + "retries": 3 + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/redis/", + "containerPath": "/data" + } + ] + } + ] +} diff --git a/apps/activepieces/docker-compose.yml b/apps/activepieces/docker-compose.yml index 368f390a..74e44275 100644 --- a/apps/activepieces/docker-compose.yml +++ b/apps/activepieces/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: activepieces: - image: activepieces/activepieces:0.29.1 + image: activepieces/activepieces:0.32.0 container_name: activepieces restart: unless-stopped ports: diff --git a/apps/actual-budget/config.json b/apps/actual-budget/config.json index e68e3539..e3d400ee 100644 --- a/apps/actual-budget/config.json +++ b/apps/actual-budget/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8011, "id": "actual-budget", - "tipi_version": 21, - "version": "24.7.0", + "tipi_version": 23, + "version": "24.9.0", "categories": ["finance"], "description": "Actual is a local-first personal finance tool. It is 100% free and open-source, written in NodeJS, it has a synchronization element so that all your changes can move between devices without any heavy lifting.", "short_desc": "Local-first OpenSource Budget tool", "author": "Shift Reset LLC", "source": "https://github.com/actualbudget/actual-server", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725421182000 } diff --git a/apps/actual-budget/docker-compose.yml b/apps/actual-budget/docker-compose.yml index 2356d212..74b5e26a 100644 --- a/apps/actual-budget/docker-compose.yml +++ b/apps/actual-budget/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: actual-budget: container_name: actual-budget - image: actualbudget/actual-server:24.7.0 + image: actualbudget/actual-server:24.9.0 restart: unless-stopped ports: - ${APP_PORT}:5006 diff --git a/apps/adguard/config.json b/apps/adguard/config.json index a3d61125..394f11a0 100644 --- a/apps/adguard/config.json +++ b/apps/adguard/config.json @@ -23,5 +23,7 @@ "env_variable": "NETWORK_INTERFACE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/affine/config.json b/apps/affine/config.json index e3847cce..41fb0f6b 100644 --- a/apps/affine/config.json +++ b/apps/affine/config.json @@ -1,53 +1,50 @@ { - "name": "AFFiNE", - "id": "affine", - "available": true, - "short_desc": "AFFiNE is a workspace with fully merged docs, whiteboards and databases.", - "author": "https://github.com/toeverything", - "port": 3010, - "categories": [ - "utilities" - ], - "description": "AFFiNE is a workspace with fully merged docs, whiteboards and databases. A privacy-focused, local-first, open-source, and ready-to-use alternative for Notion & Miro. Docs, canvas and tables are hyper-merged with AFFiNE - just like the word affine", - "tipi_version": 1, - "version": "stable", - "source": "https://github.com/toeverything/affine", - "website": "https://affine.pro", - "exposable": true, - "form_fields": [ - { - "env_variable": "AFFINE_ADMIN_EMAIL", - "label": "Admin Email", - "pattern_error": "Invalid email", - "regex": "^[\\w\\-\\.]+@([\\w-]+\\.)+[\\w-]{2,}$", - "required": true, - "type": "text" - }, - { - "env_variable": "AFFINE_ADMIN_PASSWORD", - "label": "Admin Password", - "pattern_error": "Invalid password: Must have 1 lowercase, 1 uppercase, 1 special character, 1 digit and no $.", - "regex": "^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[^\\w\\d\\s:])([^\\s$]){8,128}$", - "required": true, - "type": "password", - "min": 8, - "max": 128 - }, - { - "env_variable": "AFFINE_TELEMETRY_ENABLE", - "label": "Enable affine telemetry?", - "required": false, - "type": "boolean" - }, - { - "env_variable": "AFFINE_POSTGRES_PASSWORD", - "label": "Affine postgres password", - "type": "random", - "min": 32 - } - ], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "name": "AFFiNE", + "id": "affine", + "available": true, + "short_desc": "AFFiNE is a workspace with fully merged docs, whiteboards and databases.", + "author": "https://github.com/toeverything", + "port": 3010, + "categories": ["utilities"], + "description": "AFFiNE is a workspace with fully merged docs, whiteboards and databases. A privacy-focused, local-first, open-source, and ready-to-use alternative for Notion & Miro. Docs, canvas and tables are hyper-merged with AFFiNE - just like the word affine", + "tipi_version": 1, + "version": "stable", + "source": "https://github.com/toeverything/affine", + "website": "https://affine.pro", + "exposable": true, + "form_fields": [ + { + "env_variable": "AFFINE_ADMIN_EMAIL", + "label": "Admin Email", + "pattern_error": "Invalid email", + "regex": "^[\\w\\-\\.]+@([\\w-]+\\.)+[\\w-]{2,}$", + "required": true, + "type": "text" + }, + { + "env_variable": "AFFINE_ADMIN_PASSWORD", + "label": "Admin Password", + "pattern_error": "Invalid password: Must have 1 lowercase, 1 uppercase, 1 special character, 1 digit and no $.", + "regex": "^(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[^\\w\\d\\s:])([^\\s$]){8,128}$", + "required": true, + "type": "password", + "min": 8, + "max": 128 + }, + { + "env_variable": "AFFINE_TELEMETRY_ENABLE", + "label": "Enable affine telemetry?", + "required": false, + "type": "boolean" + }, + { + "env_variable": "AFFINE_POSTGRES_PASSWORD", + "label": "Affine postgres password", + "type": "random", + "min": 32 + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 +} diff --git a/apps/anse/config.json b/apps/anse/config.json old mode 100755 new mode 100644 index 3ca9a8e6..f4cdb25d --- a/apps/anse/config.json +++ b/apps/anse/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/anse-app/anse", "website": "https://anse.app", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/archivebox/config.json b/apps/archivebox/config.json old mode 100755 new mode 100644 index 29112310..71d54200 --- a/apps/archivebox/config.json +++ b/apps/archivebox/config.json @@ -31,5 +31,7 @@ "env_variable": "ARCHIVEBOX_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/atuin/config.json b/apps/atuin/config.json old mode 100755 new mode 100644 index 33b7149c..b3624800 --- a/apps/atuin/config.json +++ b/apps/atuin/config.json @@ -30,5 +30,7 @@ "env_variable": "ATUIN_ALLOW_REGISTRATION" } ], - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/audiobookshelf/config.json b/apps/audiobookshelf/config.json index da05709e..b4fcd6e2 100644 --- a/apps/audiobookshelf/config.json +++ b/apps/audiobookshelf/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 13378, "id": "audiobookshelf", - "tipi_version": 16, - "version": "2.11.0", + "tipi_version": 25, + "version": "2.13.4", "categories": ["books", "media"], "description": "Audiobookshelf is a self-hosted audiobook server for managing and playing your audiobooks. Audiobookshelf has a clean, accessible design that's loaded with features but not overly complicated.", "short_desc": "Audiobookshelf is a self-hosted audiobook and podcast server.", "author": "advplyr", "source": "https://github.com/advplyr/audiobookshelf", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725928196000 } diff --git a/apps/audiobookshelf/docker-compose.yml b/apps/audiobookshelf/docker-compose.yml index fb61333b..31d2d20a 100644 --- a/apps/audiobookshelf/docker-compose.yml +++ b/apps/audiobookshelf/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: audiobookshelf: container_name: audiobookshelf - image: ghcr.io/advplyr/audiobookshelf:2.11.0 + image: ghcr.io/advplyr/audiobookshelf:2.13.4 restart: unless-stopped ports: - ${APP_PORT}:80 diff --git a/apps/authentik/config.json b/apps/authentik/config.json index 878fc2f2..cb402e5b 100644 --- a/apps/authentik/config.json +++ b/apps/authentik/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "authentik", - "tipi_version": 18, - "version": "2024.6.1", + "tipi_version": 24, + "version": "2024.8.2", "https": true, "categories": ["development"], "description": "The authentication glue you need.", @@ -27,5 +27,7 @@ "env_variable": "AUTHENTIK_SECRET_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726494449000 } diff --git a/apps/authentik/docker-compose.yml b/apps/authentik/docker-compose.yml index 4a45681f..a84665fd 100644 --- a/apps/authentik/docker-compose.yml +++ b/apps/authentik/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: authentik: - image: ghcr.io/goauthentik/server:2024.6.1 + image: ghcr.io/goauthentik/server:2024.8.2 restart: unless-stopped command: server container_name: authentik @@ -50,7 +50,7 @@ services: traefik.http.routers.authentik-local.tls: true runtipi.managed: true authentik-worker: - image: ghcr.io/goauthentik/server:2024.6.1 + image: ghcr.io/goauthentik/server:2024.8.2 restart: unless-stopped command: worker container_name: authentik-worker diff --git a/apps/autobrr/config.json b/apps/autobrr/config.json index ded9382f..6f0d2f32 100644 --- a/apps/autobrr/config.json +++ b/apps/autobrr/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "autobrr", - "tipi_version": 29, - "version": "1.44.0", + "tipi_version": 32, + "version": "1.46.1", "categories": ["media"], "description": "autobrr is the modern download automation tool for torrents. With inspiration and ideas from tools like trackarr, autodl-irssi and flexget we built one tool that can do it all, and then some.", "short_desc": "Automation for downloads.", @@ -14,5 +14,7 @@ "source": "https://github.com/autobrr/autobrr", "website": "https://autobrr.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726164252000 } diff --git a/apps/autobrr/docker-compose.yml b/apps/autobrr/docker-compose.yml index e816f148..abe278a4 100644 --- a/apps/autobrr/docker-compose.yml +++ b/apps/autobrr/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: autobrr: container_name: autobrr - image: ghcr.io/autobrr/autobrr:v1.44.0 + image: ghcr.io/autobrr/autobrr:v1.46.1 restart: unless-stopped ports: - ${APP_PORT}:7474 diff --git a/apps/autobrr/metadata/description.md b/apps/autobrr/metadata/description.md index 051c0e06..01830d06 100644 --- a/apps/autobrr/metadata/description.md +++ b/apps/autobrr/metadata/description.md @@ -1,6 +1,6 @@ autobrr is the modern download automation tool for torrents. With inspiration and ideas from tools like trackarr, autodl-irssi and flexget we built one tool that can do it all, and then some. -[![autobrr ui](https://github.com/autobrr/autobrr/raw/develop/.github/images/autobrr-front.png)](https://github.com/autobrr/autobrr/blob/develop/.github/images/autobrr-front.png) +[![autobrr ui](https://github.com/autobrr/autobrr/raw/develop/.github/images/front-dark.png)](https://github.com/autobrr/autobrr/blob/develop/.github/images/front-dark.png) ## [](https://github.com/autobrr/autobrr#documentation)Documentation diff --git a/apps/baikal/config.json b/apps/baikal/config.json index 55db6ec8..97c65409 100644 --- a/apps/baikal/config.json +++ b/apps/baikal/config.json @@ -7,17 +7,13 @@ "id": "baikal", "tipi_version": 3, "version": "0.9.5-nginx", - "categories": [ - "data", - "utilities" - ], + "categories": ["data", "utilities"], "description": "", "short_desc": "Baïkal is a Calendar+Contacts server", "author": "ckulka", "source": "https://github.com/ckulka/baikal-docker", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/barrage/config.json b/apps/barrage/config.json index 121e9949..0175ea31 100644 --- a/apps/barrage/config.json +++ b/apps/barrage/config.json @@ -41,5 +41,7 @@ "env_variable": "BARRAGE_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/bazarr/config.json b/apps/bazarr/config.json index ec479ff1..e89da0ff 100644 --- a/apps/bazarr/config.json +++ b/apps/bazarr/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 6767, "id": "bazarr", - "tipi_version": 15, - "version": "1.4.3", + "tipi_version": 16, + "version": "1.4.4", "categories": ["media", "utilities"], "description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.", "short_desc": "A companion application to Sonarr and Radarr that manages and downloads subtitles", "author": "morpheus65535", "source": "https://github.com/morpheus65535/bazarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726435255000 } diff --git a/apps/bazarr/docker-compose.yml b/apps/bazarr/docker-compose.yml index 8eb28e75..6b4f32a0 100644 --- a/apps/bazarr/docker-compose.yml +++ b/apps/bazarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: bazarr: - image: lscr.io/linuxserver/bazarr:1.4.3 + image: lscr.io/linuxserver/bazarr:1.4.4 container_name: bazarr environment: - PUID=1000 diff --git a/apps/beszel-agent/config.json b/apps/beszel-agent/config.json new file mode 100644 index 00000000..2cc7561d --- /dev/null +++ b/apps/beszel-agent/config.json @@ -0,0 +1,37 @@ +{ + "$schema": "../schema.json", + "name": "Beszel Agent", + "id": "beszel-agent", + "available": true, + "short_desc": "Agent software for Beszel.", + "author": "henrygd", + "port": 45876, + "categories": ["utilities"], + "description": "This is the agent software for the Beszel app.", + "tipi_version": 3, + "version": "0.4.0", + "source": "https://github.com/henrygd/beszel", + "exposable": false, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [ + { + "type": "text", + "label": "Beszel key", + "hint": "The key beszel provides when you add a new server.", + "min": 80, + "max": 80, + "required": true, + "env_variable": "BESZEL_AGENT_KEY" + }, + { + "type": "text", + "label": "Filesystem", + "hint": "You can specify a filesystem like /dev/sda1 for accurate disk usage.", + "required": false, + "env_variable": "BESZEL_AGENT_FILESYSTEM" + } + ], + "no_gui": true, + "created_at": 1724537201221, + "updated_at": 1726515127000 +} diff --git a/apps/beszel-agent/docker-compose.yml b/apps/beszel-agent/docker-compose.yml new file mode 100644 index 00000000..0ff7811c --- /dev/null +++ b/apps/beszel-agent/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.9' +services: + beszel-agent: + image: henrygd/beszel-agent:0.4.0 + container_name: beszel-agent + restart: unless-stopped + network_mode: host + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + PORT: 45876 + KEY: ${BESZEL_AGENT_KEY} + FILESYSTEM: ${BESZEL_AGENT_FILESYSTEM} + labels: + # Disable traefik + traefik.enable: false + # Runtipi managed + runtipi.managed: true diff --git a/apps/beszel-agent/metadata/description.md b/apps/beszel-agent/metadata/description.md new file mode 100644 index 00000000..dd70f616 --- /dev/null +++ b/apps/beszel-agent/metadata/description.md @@ -0,0 +1,3 @@ +## Beszel Agent + +The agent software for the Beszel app. diff --git a/apps/beszel-agent/metadata/logo.jpg b/apps/beszel-agent/metadata/logo.jpg new file mode 100644 index 00000000..700aa3a5 Binary files /dev/null and b/apps/beszel-agent/metadata/logo.jpg differ diff --git a/apps/beszel/config.json b/apps/beszel/config.json new file mode 100644 index 00000000..798e3ffc --- /dev/null +++ b/apps/beszel/config.json @@ -0,0 +1,19 @@ +{ + "$schema": "../schema.json", + "name": "Beszel", + "id": "beszel", + "available": true, + "short_desc": "Lightweight server monitoring.", + "author": "henrygd", + "port": 8999, + "categories": ["utilities"], + "description": "A lightweight server monitoring hub with historical data, docker stats, and alerts.", + "tipi_version": 3, + "version": "0.3.0", + "source": "https://github.com/henrygd/beszel", + "exposable": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [], + "created_at": 1724537201221, + "updated_at": 1725464620000 +} diff --git a/apps/beszel/docker-compose.yml b/apps/beszel/docker-compose.yml new file mode 100644 index 00000000..3b2b64f2 --- /dev/null +++ b/apps/beszel/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.9' +services: + beszel: + image: henrygd/beszel:0.3.0 + container_name: beszel + restart: unless-stopped + ports: + - ${APP_PORT}:8090 + volumes: + - ${APP_DATA_DIR}/data:/beszel_data + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.beszel-web-redirect.redirectscheme.scheme: https + traefik.http.services.beszel.loadbalancer.server.port: 8090 + # Web + traefik.http.routers.beszel-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.beszel-insecure.entrypoints: web + traefik.http.routers.beszel-insecure.service: beszel + traefik.http.routers.beszel-insecure.middlewares: beszel-web-redirect + # Websecure + traefik.http.routers.beszel.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.beszel.entrypoints: websecure + traefik.http.routers.beszel.service: beszel + traefik.http.routers.beszel.tls.certresolver: myresolver + # Local domain + traefik.http.routers.beszel-local-insecure.rule: Host(`beszel.${LOCAL_DOMAIN}`) + traefik.http.routers.beszel-local-insecure.entrypoints: web + traefik.http.routers.beszel-local-insecure.service: beszel + traefik.http.routers.beszel-local-insecure.middlewares: beszel-web-redirect + # Local domain secure + traefik.http.routers.beszel-local.rule: Host(`beszel.${LOCAL_DOMAIN}`) + traefik.http.routers.beszel-local.entrypoints: websecure + traefik.http.routers.beszel-local.service: beszel + traefik.http.routers.beszel-local.tls: true + # Runtipi managed + runtipi.managed: true diff --git a/apps/beszel/metadata/description.md b/apps/beszel/metadata/description.md new file mode 100644 index 00000000..7c1e1029 --- /dev/null +++ b/apps/beszel/metadata/description.md @@ -0,0 +1,24 @@ +## Beszel + +A lightweight server resource monitoring hub with historical data, docker stats, and alerts. + +![Screenshot of the hub](https://henrygd-assets.b-cdn.net/beszel/screenshot.png) + +### Features + +- **Lightweight**: Much smaller and less demanding than leading solutions. +- **Docker stats**: CPU and memory usage history for each container. +- **Alerts**: Configurable alerts for CPU, memory, and disk usage, and system status. +- **Multi-user**: Each user has their own systems. Admins can share systems across users. +- **Simple**: Easy setup and doesn't require anything to be publicly available online. +- **OAuth / OIDC**: Supports many OAuth2 providers. Password auth can be disabled. +- **Automatic backups**: Save and restore your data to / from disk or S3-compatible storage. +- **REST API**: Use your metrics in your own scripts and applications. + +### Introduction + +Beszel has two components: the hub and the agent. + +The hub is a web application that provides a dashboard to view and manage your connected systems. It's built on top of [PocketBase](https://pocketbase.io/). + +The agent runs on each system you want to monitor. It creates a minimal SSH server through which it communicates system metrics to the hub. diff --git a/apps/beszel/metadata/logo.jpg b/apps/beszel/metadata/logo.jpg new file mode 100644 index 00000000..fc09f6a5 Binary files /dev/null and b/apps/beszel/metadata/logo.jpg differ diff --git a/apps/bitcoind/config.json b/apps/bitcoind/config.json index 111bcc83..64969baa 100644 --- a/apps/bitcoind/config.json +++ b/apps/bitcoind/config.json @@ -9,9 +9,7 @@ "description": "Bitcoin core node", "tipi_version": 5, "version": "27.0", - "categories": [ - "finance" - ], + "categories": ["finance"], "short_desc": "Bitcoin core node", "author": "Bitcoin developers", "source": "https://github.com/lncm/docker-bitcoind", @@ -130,8 +128,7 @@ ] } ], - "supported_architectures": [ - "amd64", - "arm64" - ] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/bitmagnet/config.json b/apps/bitmagnet/config.json index 3e3ee870..4a7d6e51 100644 --- a/apps/bitmagnet/config.json +++ b/apps/bitmagnet/config.json @@ -20,5 +20,7 @@ "env_variable": "BITMAGNENT_DB_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/booksonic/config.json b/apps/booksonic/config.json index 93936bef..5fd7da64 100644 --- a/apps/booksonic/config.json +++ b/apps/booksonic/config.json @@ -13,5 +13,7 @@ "author": "https://github.com/popeen", "source": "https://github.com/popeen/Booksonic-Air", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/bookstack/config.json b/apps/bookstack/config.json index 20bd7191..f6399eed 100644 --- a/apps/bookstack/config.json +++ b/apps/bookstack/config.json @@ -23,5 +23,7 @@ "env_variable": "BOOKSTACK_DB_PASS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/budibase/config.json b/apps/budibase/config.json index 23a726bc..6c46afb7 100644 --- a/apps/budibase/config.json +++ b/apps/budibase/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "budibase", - "tipi_version": 163, - "version": "2.29.25", + "tipi_version": 188, + "version": "2.32.4", "categories": ["development"], "description": "Low code platform for creating internal tools, workflows, and admin panels in minutes. Supports PostgreSQL, MySQL, MSSQL, MongoDB, Rest API, Docker, K8s, and more 🚀. Budibase, the low code platform you'll enjoy using ⚡", "short_desc": "Internal tools made easy.", @@ -14,5 +14,7 @@ "source": "https://github.com/Budibase/budibase", "website": "https://budibase.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726257216000 } diff --git a/apps/budibase/docker-compose.yml b/apps/budibase/docker-compose.yml index 927c6e21..b364b1cd 100644 --- a/apps/budibase/docker-compose.yml +++ b/apps/budibase/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: budibase: - image: budibase/budibase:2.29.25 + image: budibase/budibase:2.32.4 restart: unless-stopped container_name: budibase ports: diff --git a/apps/calcom/config.json b/apps/calcom/config.json index 7f5c4b73..61df6f93 100644 --- a/apps/calcom/config.json +++ b/apps/calcom/config.json @@ -105,7 +105,9 @@ "short_desc": "Scheduling infrastructure for absolutely everyone.", "source": "https://github.com/calcom/cal.com", "supported_architectures": ["amd64"], - "tipi_version": 22, - "version": "4.3.3", - "website": "https://cal.com/" + "tipi_version": 34, + "version": "4.5.0", + "website": "https://cal.com/", + "created_at": 1691943801422, + "updated_at": 1726415209000 } diff --git a/apps/calcom/docker-compose.yml b/apps/calcom/docker-compose.yml index 8e226a02..854e83bf 100644 --- a/apps/calcom/docker-compose.yml +++ b/apps/calcom/docker-compose.yml @@ -4,7 +4,7 @@ services: calcom: container_name: calcom - image: calcom/cal.com:v4.3.3 + image: calcom/cal.com:v4.5.0 restart: unless-stopped ports: - ${APP_PORT}:3000 diff --git a/apps/calcom/metadata/logo.jpg b/apps/calcom/metadata/logo.jpg index dbaff5c7..c93a3967 100644 Binary files a/apps/calcom/metadata/logo.jpg and b/apps/calcom/metadata/logo.jpg differ diff --git a/apps/calibre-web/config.json b/apps/calibre-web/config.json index b0f1ec8c..df4fec2c 100644 --- a/apps/calibre-web/config.json +++ b/apps/calibre-web/config.json @@ -4,8 +4,8 @@ "available": true, "exposable": true, "port": 8100, - "tipi_version": 8, - "version": "0.6.22", + "tipi_version": 10, + "version": "0.6.23", "id": "calibre-web", "categories": ["books"], "description": "On the initial setup screen, enter /books as your calibre library location. \n Default admin login: Username: admin Password: admin123", @@ -13,5 +13,7 @@ "author": "https://github.com/janeczku/", "source": "https://github.com/janeczku/calibre-web", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/calibre-web/docker-compose.yml b/apps/calibre-web/docker-compose.yml index 5de50bc0..761e437c 100644 --- a/apps/calibre-web/docker-compose.yml +++ b/apps/calibre-web/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: calibre-web: - image: lscr.io/linuxserver/calibre-web:0.6.22 + image: lscr.io/linuxserver/calibre-web:0.6.23 container_name: calibre-web environment: - PUID=1000 @@ -9,7 +9,7 @@ services: - TZ=${TZ} volumes: - ${APP_DATA_DIR}/data/config:/config - - ${APP_DATA_DIR}/data/books:/books + - ${ROOT_FOLDER_HOST}/media/data/books:/books ports: - ${APP_PORT}:8083 restart: unless-stopped diff --git a/apps/changedetection/config.json b/apps/changedetection/config.json index c68fb1b0..8e785230 100644 --- a/apps/changedetection/config.json +++ b/apps/changedetection/config.json @@ -5,13 +5,15 @@ "exposable": true, "id": "changedetection", "description": "The best and simplest free open source website change detection, restock monitor and notification service.", - "tipi_version": 27, - "version": "0.46.02", + "tipi_version": 29, + "version": "0.46.04", "categories": ["utilities"], "short_desc": "Website change detection.", "author": "dgtlmoon", "source": "https://github.com/dgtlmoon/changedetection.io", "website": "https://changedetection.io/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725456676000 } diff --git a/apps/changedetection/docker-compose.yml b/apps/changedetection/docker-compose.yml index d0cd9642..2fb7d781 100644 --- a/apps/changedetection/docker-compose.yml +++ b/apps/changedetection/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: changedetection: - image: ghcr.io/dgtlmoon/changedetection.io:0.46.02 + image: ghcr.io/dgtlmoon/changedetection.io:0.46.04 container_name: changedetection hostname: changedetection volumes: diff --git a/apps/chatgpt-ui/config.json b/apps/chatgpt-ui/config.json index 51e326eb..592f9e10 100644 --- a/apps/chatgpt-ui/config.json +++ b/apps/chatgpt-ui/config.json @@ -7,9 +7,7 @@ "id": "chatgpt-ui", "tipi_version": 13, "version": "2.5.9", - "categories": [ - "ai" - ], + "categories": ["ai"], "description": "A ChatGPT web client that supports multiple users, multiple languages, and multiple database connections for persistent data storage", "short_desc": "A ChatGPT web client that supports multiple users, multiple languages, and multiple database connections for persistent data storage", "author": "https://github.com/WongSaang", @@ -44,5 +42,7 @@ "required": true, "env_variable": "CHATGPT_UI_SUPERUSER_EMAIL" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/chatpad/config.json b/apps/chatpad/config.json index d86c3d02..07109236 100644 --- a/apps/chatpad/config.json +++ b/apps/chatpad/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/deiucanta/chatpad", "website": "https://chatpad.ai/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/cheshire-cat-ai/config.json b/apps/cheshire-cat-ai/config.json index 91dbe219..e2adb86a 100644 --- a/apps/cheshire-cat-ai/config.json +++ b/apps/cheshire-cat-ai/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "cheshire-cat-ai", "description": "The Cheshire Cat is an open-source, hackable and production-ready framework that allows developing intelligent personal AI assistant agents on top of Large Language Models (LLM).", - "tipi_version": 5, - "version": "1.7.0", + "tipi_version": 6, + "version": "1.7.1", "categories": ["ai"], "short_desc": "A production-ready AI framework to develop AI agents.", "author": "pieroit", @@ -14,5 +14,7 @@ "website": "https://cheshirecat.ai", "form_fields": [], "url_suffix": "/admin", - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/cheshire-cat-ai/docker-compose.yml b/apps/cheshire-cat-ai/docker-compose.yml index a6770bdc..71c39600 100644 --- a/apps/cheshire-cat-ai/docker-compose.yml +++ b/apps/cheshire-cat-ai/docker-compose.yml @@ -4,7 +4,7 @@ services: cheshire-cat-ai: networks: - tipi_main_network - image: ghcr.io/cheshire-cat-ai/core:1.7.0 + image: ghcr.io/cheshire-cat-ai/core:1.7.1 container_name: cheshire-cat-ai ports: - ${APP_PORT}:80 diff --git a/apps/cloudflare-ddns/config.json b/apps/cloudflare-ddns/config.json index 395c3ec4..5e37553e 100644 --- a/apps/cloudflare-ddns/config.json +++ b/apps/cloudflare-ddns/config.json @@ -6,11 +6,9 @@ "port": 22222, "no_gui": true, "id": "cloudflare-ddns", - "tipi_version": 1, + "tipi_version": 3, "version": "3.3.0", - "categories": [ - "network" - ], + "categories": ["network"], "description": "Cloudflare DDNS is a Docker image that update DNS records on Cloudflare on schedule.", "short_desc": "Update DNS records on Cloudflare.", "author": "Joshua Avalon", @@ -33,8 +31,8 @@ "env_variable": "CF_DNS__AUTH__SCOPED_TOKEN" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724189756000, + "deprecated": false +} diff --git a/apps/cloudflare-ddns/metadata/description.md b/apps/cloudflare-ddns/metadata/description.md index 9e04e34b..cd424909 100644 --- a/apps/cloudflare-ddns/metadata/description.md +++ b/apps/cloudflare-ddns/metadata/description.md @@ -3,3 +3,5 @@ Cloudflare DDNS is a Docker image that update DNS records on Cloudflare on schedule. + +> Warning ⚠️: This app is no longer maintained, you can keep using it but you may face issues. If you want a maintained alternative you can try the `DDNS Updater` app. diff --git a/apps/cloudflared/config.json b/apps/cloudflared/config.json index 00949c46..93b635c6 100644 --- a/apps/cloudflared/config.json +++ b/apps/cloudflared/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": false, "id": "cloudflared", - "tipi_version": 13, - "version": "2024.6.1", + "tipi_version": 16, + "version": "2024.9.1", "categories": ["utilities"], "description": "Cloudflared-web is a docker image that packages both cloudflared cli and a no-frills Web UI for easy starting/stopping of cloudflare tunnel.", "short_desc": "Cloudflare Tunnels in a Web UI", "author": "WisdomSky", "source": "https://github.com/WisdomSky/Cloudflared-web", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726244078000 } diff --git a/apps/cloudflared/docker-compose.yml b/apps/cloudflared/docker-compose.yml index 731b6a36..3ea21472 100644 --- a/apps/cloudflared/docker-compose.yml +++ b/apps/cloudflared/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: cloudflared: - image: wisdomsky/cloudflared-web:2024.6.1 + image: wisdomsky/cloudflared-web:2024.9.1 container_name: cloudflared restart: unless-stopped network_mode: host diff --git a/apps/code-server/config.json b/apps/code-server/config.json index 7dfe62f7..0ac812a5 100644 --- a/apps/code-server/config.json +++ b/apps/code-server/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8138, "id": "code-server", - "tipi_version": 38, - "version": "4.91.1", + "tipi_version": 39, + "version": "4.92.2", "categories": ["development"], "description": "Code-server is VS Code running on a remote server, accessible through the browser.", "short_desc": "VS Code in the browser", @@ -30,5 +30,7 @@ "env_variable": "CODESERVER_SUDO_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724120570000 } diff --git a/apps/code-server/docker-compose.yml b/apps/code-server/docker-compose.yml index daea2d5e..9a489566 100644 --- a/apps/code-server/docker-compose.yml +++ b/apps/code-server/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: code-server: - image: lscr.io/linuxserver/code-server:4.91.1 + image: lscr.io/linuxserver/code-server:4.92.2 container_name: code-server environment: - PUID=1000 diff --git a/apps/codex-docs/config.json b/apps/codex-docs/config.json index 37a7c847..057898db 100644 --- a/apps/codex-docs/config.json +++ b/apps/codex-docs/config.json @@ -7,9 +7,7 @@ "id": "codex-docs", "tipi_version": 3, "version": "2.2", - "categories": [ - "media" - ], + "categories": ["media"], "description": "CodeX Docs is a free docs application. It's based on Editor.js ecosystem which gives all modern opportunities for working with content. You can use it for product documentation, for internal team docs, for personal notes or any other need. ", "short_desc": "Free Docs app powered by Editor.js ecosystem.", "author": "https://docs.codex.so/", @@ -36,7 +34,7 @@ "env_variable": "CODEX_AUTH_SECRET" } ], - "supported_architectures": [ - "amd64" - ] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/compose-schema.json b/apps/compose-schema.json new file mode 100644 index 00000000..e96945c6 --- /dev/null +++ b/apps/compose-schema.json @@ -0,0 +1,122 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "image": { "type": "string" }, + "name": { "type": "string" }, + "internalPort": { "type": "number" }, + "isMain": { "type": "boolean" }, + "networkMode": { "type": "string" }, + "extraHosts": { + "type": "array", + "items": { "type": "string" } + }, + "ulimits": { + "type": "object", + "properties": { + "nproc": { + "oneOf": [ + { "type": "number" }, + { + "type": "object", + "properties": { + "soft": { "type": "number" }, + "hard": { "type": "number" } + }, + "required": ["soft", "hard"] + } + ] + }, + "nofile": { + "oneOf": [ + { "type": "number" }, + { + "type": "object", + "properties": { + "soft": { "type": "number" }, + "hard": { "type": "number" } + }, + "required": ["soft", "hard"] + } + ] + } + }, + "required": ["nproc", "nofile"] + }, + "addPorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "containerPort": { "type": "number" }, + "hostPort": { "type": "number" }, + "udp": { "type": "boolean" }, + "tcp": { "type": "boolean" } + }, + "required": ["containerPort", "hostPort"] + } + }, + "command": { "type": "string" }, + "volumes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "hostPath": { "type": "string" }, + "containerPath": { "type": "string" }, + "readOnly": { "type": "boolean" } + }, + "required": ["hostPath", "containerPath"] + } + }, + "environment": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "healthCheck": { + "type": "object", + "properties": { + "test": { "type": "string" }, + "interval": { "type": "string" }, + "timeout": { "type": "string" }, + "retries": { "type": "number" } + }, + "required": ["test", "interval", "timeout", "retries"] + }, + "dependsOn": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" } + }, + { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "condition": { + "type": "string", + "enum": [ + "service_healthy", + "service_started", + "service_completed_successfully" + ] + } + }, + "required": ["condition"] + } + } + ] + } + }, + "required": ["image", "name"] + } + } + }, + "required": ["services"] + } \ No newline at end of file diff --git a/apps/crafty/config.json b/apps/crafty/config.json index 69004b52..92c22eb6 100644 --- a/apps/crafty/config.json +++ b/apps/crafty/config.json @@ -6,8 +6,8 @@ "port": 8456, "id": "crafty", "https": true, - "tipi_version": 6, - "version": "4.4.0", + "tipi_version": 9, + "version": "4.4.3", "categories": ["gaming"], "description": "Crafty 4 is the next iteration of our Minecraft Server Wrapper / Controller / Launcher.", "short_desc": "Python based Control Panel for your Minecraft Server", @@ -15,5 +15,7 @@ "source": "https://gitlab.com/crafty-controller/crafty-4", "website": "https://craftycontrol.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/crafty/docker-compose.yml b/apps/crafty/docker-compose.yml index 0dc7d1b7..62a173db 100644 --- a/apps/crafty/docker-compose.yml +++ b/apps/crafty/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: crafty: container_name: crafty - image: registry.gitlab.com/crafty-controller/crafty-4:4.4.0 + image: registry.gitlab.com/crafty-controller/crafty-4:4.4.3 restart: unless-stopped environment: - TZ=${TZ} diff --git a/apps/cross-seed/config.json b/apps/cross-seed/config.json index 2c046fc0..0b3938e5 100644 --- a/apps/cross-seed/config.json +++ b/apps/cross-seed/config.json @@ -8,20 +8,16 @@ "uid": 1000, "gid": 1000, "id": "cross-seed", - "tipi_version": 12, + "tipi_version": 13, "version": "5.9.2", - "categories": [ - "media", - "utilities" - ], + "categories": ["media", "utilities"], "description": "An app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.", "short_desc": "Fully-automatic cross-seeding with Torznab.", "author": "Cross-Seed Team", "source": "https://github.com/cross-seed/cross-seed", "website": "https://www.cross-seed.org", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/cross-seed/metadata/logo.jpg b/apps/cross-seed/metadata/logo.jpg index 93341348..57daa56d 100644 Binary files a/apps/cross-seed/metadata/logo.jpg and b/apps/cross-seed/metadata/logo.jpg differ diff --git a/apps/crowdsec/config.json b/apps/crowdsec/config.json index 864afddc..3ee16d48 100644 --- a/apps/crowdsec/config.json +++ b/apps/crowdsec/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "crowdsec", - "tipi_version": 1, - "version": "v1.6.1-2", + "tipi_version": 4, + "version": "1.6.3", "categories": ["security", "utilities"], "description": "CrowdSec is a free, modern & collaborative behavior detection engine, coupled with a global IP reputation network. It stacks on fail2ban's philosophy but is IPV6 compatible and 60x faster (Go vs Python), it uses Grok patterns to parse logs and YAML scenarios to identify behaviors. CrowdSec is engineered for modern Cloud / Containers / VM-based infrastructures (by decoupling detection and remediation). Once detected you can remedy threats with various bouncers (firewall block, nginx http 403, Captchas, etc.) while the aggressive IP can be sent to CrowdSec for curation before being shared among all users to further improve everyone's security. See FAQ or read below for more.", "short_desc": "Participative security solution offering crowdsourced protection against malicious IPs and access to the most advanced real-world CTI.", @@ -22,5 +22,7 @@ "env_variable": "CROWDSEC_BOUNCER_API_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726143353000 } diff --git a/apps/crowdsec/docker-compose.yml b/apps/crowdsec/docker-compose.yml index 6708ff7b..b5d1ec76 100644 --- a/apps/crowdsec/docker-compose.yml +++ b/apps/crowdsec/docker-compose.yml @@ -1,7 +1,7 @@ services: crowdsec: container_name: crowdsec - image: crowdsecurity/crowdsec:v1.6.1-2 + image: crowdsecurity/crowdsec:v1.6.3 restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro diff --git a/apps/crowdsec/metadata/logo.jpg b/apps/crowdsec/metadata/logo.jpg index 37752a42..bd5c3618 100644 Binary files a/apps/crowdsec/metadata/logo.jpg and b/apps/crowdsec/metadata/logo.jpg differ diff --git a/apps/ctfd/config.json b/apps/ctfd/config.json index 7d124b5b..c531b868 100644 --- a/apps/ctfd/config.json +++ b/apps/ctfd/config.json @@ -33,5 +33,7 @@ "env_variable": "CTFD_MYSQL_ROOT_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/cup/config.json b/apps/cup/config.json index 4c3a0ab3..14bd1d4a 100644 --- a/apps/cup/config.json +++ b/apps/cup/config.json @@ -8,10 +8,12 @@ "port": 8465, "categories": ["utilities"], "description": "Cup is the easiest way to check for container image updates.", - "tipi_version": 3, - "version": "2.0.0", + "tipi_version": 9, + "version": "2.3.0", "source": "https://github.com/sergi0g/cup", "exposable": true, "supported_architectures": ["arm64", "amd64"], - "form_fields": [] + "form_fields": [], + "created_at": 1691943801422, + "updated_at": 1726428741000 } diff --git a/apps/cup/docker-compose.yml b/apps/cup/docker-compose.yml index bde09bb8..916d2e80 100644 --- a/apps/cup/docker-compose.yml +++ b/apps/cup/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: cup: container_name: cup - image: ghcr.io/sergi0g/cup:v2.0.0 + image: ghcr.io/sergi0g/cup:v2.3.0 restart: unless-stopped command: serve volumes: diff --git a/apps/cyberchef/config.json b/apps/cyberchef/config.json index eb877703..b7016a07 100644 --- a/apps/cyberchef/config.json +++ b/apps/cyberchef/config.json @@ -8,8 +8,10 @@ "port": 9080, "categories": ["utilities", "security"], "description": "CyberChef is a web app for encryption, encoding, compression, and data analysis.", - "tipi_version": 2, - "version": "10.19.0", + "tipi_version": 4, + "version": "10.19.2", "source": "https://github.com/gchq/CyberChef", - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/cyberchef/docker-compose.yml b/apps/cyberchef/docker-compose.yml index 92b9bd67..07d25749 100644 --- a/apps/cyberchef/docker-compose.yml +++ b/apps/cyberchef/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: cyberchef: container_name: cyberchef - image: ghcr.io/gchq/cyberchef:10.19.0 + image: ghcr.io/gchq/cyberchef:10.19.2 restart: unless-stopped environment: - TZ=${TZ} diff --git a/apps/cyberchef/metadata/logo.jpg b/apps/cyberchef/metadata/logo.jpg index 59f7acdb..731fe6d2 100644 Binary files a/apps/cyberchef/metadata/logo.jpg and b/apps/cyberchef/metadata/logo.jpg differ diff --git a/apps/dailytxt/config.json b/apps/dailytxt/config.json index 26a4cb59..b327efd5 100644 --- a/apps/dailytxt/config.json +++ b/apps/dailytxt/config.json @@ -28,5 +28,7 @@ "env_variable": "DAILYTXT_ALLOW_REGISTRATION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/dashdot/config.json b/apps/dashdot/config.json index be4c2037..2f22b8c4 100644 --- a/apps/dashdot/config.json +++ b/apps/dashdot/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "dashdot", - "tipi_version": 17, - "version": "5.8.5", + "tipi_version": 18, + "version": "5.8.6", "categories": ["utilities"], "description": "dash. (or dashdot) is a modern server dashboard, running on the latest tech, designed with glassmorphism in mind. It is intended to be used for smaller VPS and private servers.", "short_desc": "A simple, modern server dashboard, primarily used by smaller private server", @@ -14,5 +14,7 @@ "source": "https://github.com/MauriceNino/dashdot", "website": "https://getdashdot.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/dashdot/docker-compose.yml b/apps/dashdot/docker-compose.yml index d15c7f5d..5a3d0439 100644 --- a/apps/dashdot/docker-compose.yml +++ b/apps/dashdot/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" services: dashdot: - image: mauricenino/dashdot:5.8.5 + image: mauricenino/dashdot:5.8.6 restart: unless-stopped container_name: dashdot privileged: true diff --git a/apps/dashy/config.json b/apps/dashy/config.json index b1b030d6..bc826323 100644 --- a/apps/dashy/config.json +++ b/apps/dashy/config.json @@ -13,5 +13,7 @@ "author": "lissy93", "source": "https://github.com/lissy93/dashy", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/databag/config.json b/apps/databag/config.json index c9958f16..d8adbc3a 100644 --- a/apps/databag/config.json +++ b/apps/databag/config.json @@ -7,13 +7,13 @@ "id": "databag", "tipi_version": 2, "version": "latest", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Databag is a federated chat app for self-hosting that focuses on user privacy and security; the service includes clients for iOS, Android, and browser.", "short_desc": "Messenger for the Decentralized Web", "author": "balzack", "source": "https://github.com/balzack/databag", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/ddns-updater/config.json b/apps/ddns-updater/config.json new file mode 100644 index 00000000..aef220f4 --- /dev/null +++ b/apps/ddns-updater/config.json @@ -0,0 +1,19 @@ +{ + "$schema": "../schema.json", + "name": "DDNS Updater", + "id": "ddns-updater", + "available": true, + "short_desc": "Program to keep DNS A and/or AAAA records updated for multiple DNS providers.", + "author": "qdm12", + "port": 8356, + "categories": ["utilities"], + "description": "Container to update DNS records periodically with WebUI for many DNS providers,", + "tipi_version": 2, + "version": "v2.7.0", + "source": "https://github.com/qdm12/ddns-updater", + "exposable": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [], + "created_at": 1724190921000, + "updated_at": 1724190921000 +} diff --git a/apps/ddns-updater/data/config/config.json b/apps/ddns-updater/data/config/config.json new file mode 100644 index 00000000..e69de29b diff --git a/apps/ddns-updater/docker-compose.yml b/apps/ddns-updater/docker-compose.yml new file mode 100644 index 00000000..74bd2b96 --- /dev/null +++ b/apps/ddns-updater/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.9' +services: + ddns-updater: + container_name: ddns-updater + image: qmcgaw/ddns-updater:v2.7.0 + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/config:/updater/data + ports: + - ${APP_PORT}:8000 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ddns-updater-web-redirect.redirectscheme.scheme: https + traefik.http.services.ddns-updater.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.ddns-updater-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ddns-updater-insecure.entrypoints: web + traefik.http.routers.ddns-updater-insecure.service: ddns-updater + traefik.http.routers.ddns-updater-insecure.middlewares: ddns-updater-web-redirect + # Websecure + traefik.http.routers.ddns-updater.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ddns-updater.entrypoints: websecure + traefik.http.routers.ddns-updater.service: ddns-updater + traefik.http.routers.ddns-updater.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ddns-updater-local-insecure.rule: Host(`ddns-updater.${LOCAL_DOMAIN}`) + traefik.http.routers.ddns-updater-local-insecure.entrypoints: web + traefik.http.routers.ddns-updater-local-insecure.service: ddns-updater + traefik.http.routers.ddns-updater-local-insecure.middlewares: ddns-updater-web-redirect + # Local domain secure + traefik.http.routers.ddns-updater-local.rule: Host(`ddns-updater.${LOCAL_DOMAIN}`) + traefik.http.routers.ddns-updater-local.entrypoints: websecure + traefik.http.routers.ddns-updater-local.service: ddns-updater + traefik.http.routers.ddns-updater-local.tls: true + # Runtipi managed + runtipi.managed: true diff --git a/apps/ddns-updater/metadata/description.md b/apps/ddns-updater/metadata/description.md new file mode 100644 index 00000000..a1e0939e --- /dev/null +++ b/apps/ddns-updater/metadata/description.md @@ -0,0 +1,81 @@ +# Lightweight universal DDNS Updater program + +Program to keep DNS A and/or AAAA records updated for multiple DNS providers + +DDNS Updater logo + +## Versioned documentation + +This readme and the [docs/](docs/) directory are **versioned** to match the program version: + +| Version | Readme link | Docs link | +| -------- | --------------------------------------------------------------------- | --------------------------------------------------------------- | +| Latest | [README](https://github.com/qdm12/ddns-updater/blob/master/README.md) | [docs/](https://github.com/qdm12/ddns-updater/tree/master/docs) | +| `v2.7.0` | [README](https://github.com/qdm12/ddns-updater/blob/v2.7.0/README.md) | [docs/](https://github.com/qdm12/ddns-updater/blob/v2.7.0/docs) | +| `v2.6.1` | [README](https://github.com/qdm12/ddns-updater/blob/v2.6.1/README.md) | [docs/](https://github.com/qdm12/ddns-updater/blob/v2.6.1/docs) | +| `v2.5.0` | [README](https://github.com/qdm12/ddns-updater/blob/v2.5.0/README.md) | [docs/](https://github.com/qdm12/ddns-updater/blob/v2.5.0/docs) | + +## Features + +- Available as a Docker image [`qmcgaw/ddns-updater`](https://hub.docker.com/r/qmcgaw/ddns-updater) and [`ghcr.io/qdm12/ddns-updater`](<(https://github.com/qdm12/ddns-updater/pkgs/container/ddns-updater)>) +- 🆕 Available as [zero-dependency binaries for Linux, Windows and MacOS](https://github.com/qdm12/ddns-updater/releases) +- Updates periodically A records for different DNS providers: + - Aliyun + - AllInkl + - Changeip + - Cloudflare + - DD24 + - DDNSS.de + - deSEC + - DigitalOcean + - DonDominio + - DNSOMatic + - DNSPod + - Dreamhost + - DuckDNS + - DynDNS + - Dynu + - EasyDNS + - FreeDNS + - Gandi + - GCP + - GoDaddy + - GoIP.de + - He.net + - Hetzner + - Infomaniak + - INWX + - Ionos + - Linode + - LuaDNS + - Name.com + - Namecheap + - Netcup + - NoIP + - Now-DNS + - Njalla + - OpenDNS + - OVH + - Porkbun + - Route53 + - Selfhost.de + - Servercow.de + - Spdyn + - Strato.de + - Variomedia.de + - Zoneedit + - **Want more?** [Create an issue for it](https://github.com/qdm12/ddns-updater/issues/new/choose)! +- Web user interface (Desktop) + + ![Web UI](https://github.com/qdm12/ddns-updater/raw/master/readme/webui-desktop.gif) + +- Web user interface (Mobile) + + ![Mobile Web UI](https://github.com/qdm12/ddns-updater/raw/master/readme/webui-mobile.png) + +- Send notifications with [**Shoutrrr**](https://containrrr.dev/shoutrrr/v0.8/services/overview/) using `SHOUTRRR_ADDRESSES` _you will need user-config for this_ +- Container (Docker/K8s) specific features: + - Lightweight 12MB Docker image based on the Scratch Docker image + - Docker healthcheck verifying the DNS resolution of your domains + - Images compatible with `amd64`, `386`, `arm64`, `armv7`, `armv6`, `s390x`, `ppc64le`, `riscv64` CPU architectures +- Persistence with a JSON file _updates.json_ to store old IP addresses with change times for each record diff --git a/apps/ddns-updater/metadata/logo.jpg b/apps/ddns-updater/metadata/logo.jpg new file mode 100644 index 00000000..10d79ee0 Binary files /dev/null and b/apps/ddns-updater/metadata/logo.jpg differ diff --git a/apps/deemix/config.json b/apps/deemix/config.json index af347cf0..46fc8d42 100644 --- a/apps/deemix/config.json +++ b/apps/deemix/config.json @@ -14,5 +14,7 @@ "source": "https://gitlab.com/Bockiii/deemix-docker", "website": "https://deemix.app/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/deluge/config.json b/apps/deluge/config.json index 90d6cc10..d4f06191 100644 --- a/apps/deluge/config.json +++ b/apps/deluge/config.json @@ -13,5 +13,7 @@ "author": "https://github.com/deluge-torrent", "source": "https://github.com/linuxserver/docker-deluge", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/dockge/config.json b/apps/dockge/config.json index 1f9a39b2..adc61638 100644 --- a/apps/dockge/config.json +++ b/apps/dockge/config.json @@ -7,16 +7,13 @@ "id": "dockge", "tipi_version": 10, "version": "1.4.2", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager.", "short_desc": "Docker compose.yaml stack-oriented manager.", "author": "Louis Lam", "source": "https://github.com/louislam/dockge", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/docmost/config.json b/apps/docmost/config.json index b35c7267..bef01107 100644 --- a/apps/docmost/config.json +++ b/apps/docmost/config.json @@ -7,8 +7,8 @@ "port": 9713, "categories": ["data", "utilities"], "description": "Docmost is an open-source alternative to the likes of Notion and Confluence. Whether you're managing a wiki, a knowledge base, or extensive project documentation, Docmost provides the tools you need to create, collaborate, and share knowledge effortlessly.", - "tipi_version": 4, - "version": "0.2.9", + "tipi_version": 7, + "version": "0.3.1", "source": "https://github.com/docmost/docmost", "website": "https://docmost.com/", "exposable": true, @@ -27,5 +27,7 @@ "env_variable": "DOCMOST_PG_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725387902000 } diff --git a/apps/docmost/docker-compose.yml b/apps/docmost/docker-compose.yml index 50d72ea3..47326a13 100644 --- a/apps/docmost/docker-compose.yml +++ b/apps/docmost/docker-compose.yml @@ -1,7 +1,7 @@ services: docmost: container_name: docmost - image: docmost/docmost:0.2.9 + image: docmost/docmost:0.3.1 depends_on: - docmost-db - docmost-redis diff --git a/apps/dokuwiki/config.json b/apps/dokuwiki/config.json index a6b444d5..aaee9df3 100644 --- a/apps/dokuwiki/config.json +++ b/apps/dokuwiki/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/dokuwiki/dokuwiki", "website": "https://www.dokuwiki.org/dokuwiki", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/dozzle/config.json b/apps/dozzle/config.json index 8d872b6f..7ee9cbc5 100644 --- a/apps/dozzle/config.json +++ b/apps/dozzle/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8013, "id": "dozzle", - "tipi_version": 35, - "version": "8.1.1", + "tipi_version": 46, + "version": "8.4.3", "categories": ["development"], "description": "Dozzle is a small web based app to monitor Docker logs.", "short_desc": "Dozzle is a small web based app to monitor Docker logs", @@ -14,30 +14,40 @@ "source": "https://github.com/amir20/dozzle", "form_fields": [ { - "env_variable": "DOZZLE_USERNAME", - "label": "Username", + "type": "text", + "label": "Auth Provider", + "hint": "'Use none' for no authentication or 'simple' for username 'admin' and password 'password'. To change credentials, consult the instructions on the app description.", + "default": "none", "required": true, - "min": 1, - "max": 128, - "type": "text" + "env_variable": "DOZZLE_AUTH_PROVIDER", + "options": [ + { + "label": "none", + "value": "none" + }, + { + "label": "simple", + "value": "simple" + } + ] }, { - "env_variable": "DOZZLE_PASSWORD_HASH", - "label": "Password Hash (SHA-256)", - "hint": "Tutorial: https://gist.github.com/Hunam6/45ddf6f29e88af2d137efdded899cb25", - "pattern_error": "Invalid hash, make sure to follow this tutorial: https://gist.github.com/Hunam6/45ddf6f29e88af2d137efdded899cb25", - "regex": "^[a-fA-F0-9]{64}$", - "type": "password", - "required": true, - "min": 64, - "max": 64 + "type": "boolean", + "label": "Enable Actions", + "hint": "Dozzle now supports Container Actions, which allows you to start, stop and restart container from within the UI in the dropdown menu.", + "default": true, + "required": false, + "env_variable": "DOZZLE_ENABLE_ACTIONS" }, { "type": "boolean", "label": "Disable Google Analytics", + "default": true, "required": false, "env_variable": "DOZZLE_NO_ANALYTICS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725916748000 } diff --git a/apps/dozzle/data/users.yml.template b/apps/dozzle/data/users.yml.template index 949b9199..af6f32d6 100644 --- a/apps/dozzle/data/users.yml.template +++ b/apps/dozzle/data/users.yml.template @@ -1,4 +1,4 @@ users: - {{DOZZLE_USERNAME}}: - name: {{DOZZLE_USERNAME}} - password: "{{DOZZLE_PASSWORD_HASH}}" \ No newline at end of file + admin: + name: admin + password: "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8" \ No newline at end of file diff --git a/apps/dozzle/docker-compose.yml b/apps/dozzle/docker-compose.yml index 28326c91..3e93feb3 100644 --- a/apps/dozzle/docker-compose.yml +++ b/apps/dozzle/docker-compose.yml @@ -1,7 +1,7 @@ services: dozzle: container_name: dozzle - image: amir20/dozzle:v8.1.1 + image: amir20/dozzle:v8.4.3 restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock @@ -11,8 +11,9 @@ services: networks: - tipi_main_network environment: - - DOZZLE_NO_ANALYTICS=${DOZZLE_NO_ANALYTICS-true} - - DOZZLE_AUTH_PROVIDER=simple + - DOZZLE_NO_ANALYTICS=${DOZZLE_NO_ANALYTICS:-true} + - DOZZLE_AUTH_PROVIDER=${DOZZLE_AUTH_PROVIDER:-none} + - DOZZLE_ENABLE_ACTIONS=${DOZZLE_ENABLE_ACTIONS:-true} labels: # Main traefik.enable: true diff --git a/apps/dozzle/metadata/description.md b/apps/dozzle/metadata/description.md index 744fb7ae..567ac63c 100644 --- a/apps/dozzle/metadata/description.md +++ b/apps/dozzle/metadata/description.md @@ -8,10 +8,56 @@ Dozzle is a small lightweight application with a web based interface to monitor - Intelligent fuzzy search for container names 🤖 - Search logs using regex 🔦 +- Start, stop and restart containers - Small memory footprint 🏎 - Split screen for viewing multiple logs - Download logs easy - Live stats with memory and CPU usage - Authentication with username and password 🚨 -https://github.com/amir20/dozzle \ No newline at end of file +https://github.com/amir20/dozzle + +## Credentials + +If you choose `simple` as the `Auth provider` the default credentials for the app will be Username `admin` with Password `password`. + +To change those credentials, stop the app and change the default settings in `runtipi/app-data/dozzle/data/users.yml`. + +```bash +users: + admin: + name: admin + password: "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8" +``` + +The password is created as follows: + +### Windows + +Open *Command Prompt*. + +Paste this command and replace `your-password` with your password. + +```bash +echo|set /p="your-password" > %TMP%/hash.txt | certutil -hashfile %TMP%/hash.txt SHA256 | findstr /v "hash" +``` + +### MacOS + +Open *Terminal*. + +Paste this command and replace `your-password` with your password. + +```bash +echo -n 'your-password' | shasum -a 256 +``` + +### Linux + +Open your terminal. + +Paste this command and replace `your-password` with your password. + +```bash +echo -n 'your-password' | sha256sum +``` \ No newline at end of file diff --git a/apps/dozzle/metadata/logo.jpg b/apps/dozzle/metadata/logo.jpg index e168f5cf..3afee0a5 100644 Binary files a/apps/dozzle/metadata/logo.jpg and b/apps/dozzle/metadata/logo.jpg differ diff --git a/apps/drawio/config.json b/apps/drawio/config.json index b385342a..1c6494a9 100644 --- a/apps/drawio/config.json +++ b/apps/drawio/config.json @@ -6,13 +6,15 @@ "url_suffix": "?offline=1", "id": "drawio", "description": "draw.io is a JavaScript, client-side editor for general diagramming and whiteboarding.", - "tipi_version": 58, - "version": "24.7.5", + "tipi_version": 59, + "version": "24.7.8", "categories": ["utilities"], "short_desc": "Diagramming and whiteboarding app.", "author": "JGraph", "source": "https://github.com/jgraph/drawio", "website": "https://www.drawio.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724867492000 } diff --git a/apps/drawio/docker-compose.yml b/apps/drawio/docker-compose.yml index 5fcd9607..af4359f0 100644 --- a/apps/drawio/docker-compose.yml +++ b/apps/drawio/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: drawio: - image: jgraph/drawio:24.7.5 + image: jgraph/drawio:24.7.8 ports: - ${APP_PORT}:8080 container_name: drawio diff --git a/apps/duckdns/config.json b/apps/duckdns/config.json index ccf6f9ff..5c8a0232 100644 --- a/apps/duckdns/config.json +++ b/apps/duckdns/config.json @@ -43,5 +43,7 @@ "required": false, "env_variable": "DUCKDNS_ENABLE_LOG_FILE" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/duplicati/config.json b/apps/duplicati/config.json index fe1572a7..00159b74 100644 --- a/apps/duplicati/config.json +++ b/apps/duplicati/config.json @@ -7,16 +7,13 @@ "id": "duplicati", "tipi_version": 4, "version": "2.0.8", - "categories": [ - "data" - ], + "categories": ["data"], "description": "Duplicati is a free, open source, backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers.", "short_desc": "Store securely encrypted backups in the cloud!", "author": "https://github.com/duplicati", "source": "https://github.com/linuxserver/docker-duplicati", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/eclipse-mosquitto/config.json b/apps/eclipse-mosquitto/config.json old mode 100755 new mode 100644 index a4aa4e42..63aedfd2 --- a/apps/eclipse-mosquitto/config.json +++ b/apps/eclipse-mosquitto/config.json @@ -1,42 +1,37 @@ -{ - "$schema": "../schema.json", - "name": "Eclipse Mosquitto", - "port": 8288, - "available": true, - "exposable": true, - "id": "eclipse-mosquitto", - "tipi_version": 1, - "version": "2.0.18", - "categories": [ - "utilities", - "automation" - ], - "description": "Eclipse Mosquitto is an open source message broker that implements the MQTT protocol.", - "short_desc": "The MQTT protocol provides a lightweight method of carrying out messaging using a publish/subscribe model.", - "author": "Eclipse Foundation", - "source": "https://github.com/eclipse/mosquitto/", - "website": "https://mosquitto.org/", - "form_fields": [ - { - "type": "password", - "label": "MQTT Broker Admin Password", - "max": 50, - "min": 6, - "required": true, - "env_variable": "MQTT_ADMIN_PASSWORD" - }, - { - "type": "password", - "label": "Cedalo Management Center Password", - "max": 50, - "min": 6, - "required": true, - "env_variable": "CEDALO_MC_PASSWORD" - } - ], - "supported_architectures": [ - "arm64", - "amd64" - ] -} - +{ + "$schema": "../schema.json", + "name": "Eclipse Mosquitto", + "port": 8288, + "available": true, + "exposable": true, + "id": "eclipse-mosquitto", + "tipi_version": 2, + "version": "2.0.18", + "categories": ["utilities", "automation"], + "description": "Eclipse Mosquitto is an open source message broker that implements the MQTT protocol.", + "short_desc": "The MQTT protocol provides a lightweight method of carrying out messaging using a publish/subscribe model.", + "author": "Eclipse Foundation", + "source": "https://github.com/eclipse/mosquitto/", + "website": "https://mosquitto.org/", + "form_fields": [ + { + "type": "password", + "label": "MQTT Broker Admin Password", + "max": 50, + "min": 6, + "required": true, + "env_variable": "MQTT_ADMIN_PASSWORD" + }, + { + "type": "password", + "label": "Cedalo Management Center Password", + "max": 50, + "min": 6, + "required": true, + "env_variable": "CEDALO_MC_PASSWORD" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 +} diff --git a/apps/eclipse-mosquitto/metadata/logo.jpg b/apps/eclipse-mosquitto/metadata/logo.jpg index 58df547f..2bf8be7e 100644 Binary files a/apps/eclipse-mosquitto/metadata/logo.jpg and b/apps/eclipse-mosquitto/metadata/logo.jpg differ diff --git a/apps/electrs/config.json b/apps/electrs/config.json index 4a666c2a..c33c7830 100644 --- a/apps/electrs/config.json +++ b/apps/electrs/config.json @@ -1,38 +1,35 @@ { - "$schema": "../schema.json", - "name": "Electrs", - "available": true, - "exposable": false, - "no_gui": false, - "port": 3006, - "id": "electrs", - "description": "Electrum server", - "tipi_version": 1, - "version": "0.10.2", - "categories": [ - "finance" - ], - "short_desc": "Electrum server", - "author": "romanz", - "source": "https://github.com/romanz/electrs", - "supported_architectures": [ - "amd64", - "arm64" - ], - "form_fields": [ - { - "type": "text", - "label": "Bitcoin data folder location (for .cookie file)", - "hint": "Default, tipi bitcoin folder", - "required": false, - "env_variable": "BITCOIND_DIR" - }, - { - "type": "text", - "label": "Bitcoin node host address", - "hint": "Default, tipi bitcoin host", - "required": false, - "env_variable": "BITCOIND_HOST" - } - ] -} \ No newline at end of file + "$schema": "../schema.json", + "name": "Electrs", + "available": true, + "exposable": false, + "no_gui": false, + "port": 3006, + "id": "electrs", + "description": "Electrum server", + "tipi_version": 1, + "version": "0.10.2", + "categories": ["finance"], + "short_desc": "Electrum server", + "author": "romanz", + "source": "https://github.com/romanz/electrs", + "supported_architectures": ["amd64", "arm64"], + "form_fields": [ + { + "type": "text", + "label": "Bitcoin data folder location (for .cookie file)", + "hint": "Default, tipi bitcoin folder", + "required": false, + "env_variable": "BITCOIND_DIR" + }, + { + "type": "text", + "label": "Bitcoin node host address", + "hint": "Default, tipi bitcoin host", + "required": false, + "env_variable": "BITCOIND_HOST" + } + ], + "created_at": 1691943801422, + "updated_at": 1723566283000 +} diff --git a/apps/email-oauth2-proxy/config.json b/apps/email-oauth2-proxy/config.json index 05e27a51..92c8c3a2 100644 --- a/apps/email-oauth2-proxy/config.json +++ b/apps/email-oauth2-proxy/config.json @@ -14,5 +14,7 @@ "author": "simonrob", "source": "https://github.com/simonrob/email-oauth2-proxy", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/emby/config.json b/apps/emby/config.json new file mode 100644 index 00000000..0e12e025 --- /dev/null +++ b/apps/emby/config.json @@ -0,0 +1,20 @@ +{ + "$schema": "../schema.json", + "name": "Emby", + "available": true, + "exposable": true, + "port": 8325, + "id": "emby", + "tipi_version": 1, + "version": "4.8.8", + "categories": ["media"], + "description": "Emby is a media server designed to organize, play, and stream audio and video to a variety of devices", + "short_desc": "A media server for your home collection", + "author": "emby.media", + "source": "https://emby.media", + "website": "https://emby.media", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1691943801422 +} diff --git a/apps/emby/docker-compose.yml b/apps/emby/docker-compose.yml new file mode 100644 index 00000000..e06a4ba7 --- /dev/null +++ b/apps/emby/docker-compose.yml @@ -0,0 +1,44 @@ +version: "3.7" +services: + emby: + image: lscr.io/linuxserver/emby:4.8.8 + container_name: emby + volumes: + - ${APP_DATA_DIR}/data/config:/config + - ${ROOT_FOLDER_HOST}/media/data:/media/data + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + restart: unless-stopped + ports: + - ${APP_PORT}:8096 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.emby-web-redirect.redirectscheme.scheme: https + traefik.http.services.emby.loadbalancer.server.port: 8096 + # Web + traefik.http.routers.emby-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.emby-insecure.entrypoints: web + traefik.http.routers.emby-insecure.service: emby + traefik.http.routers.emby-insecure.middlewares: emby-web-redirect + # Websecure + traefik.http.routers.emby.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.emby.entrypoints: websecure + traefik.http.routers.emby.service: emby + traefik.http.routers.emby.tls.certresolver: myresolver + # Local domain + traefik.http.routers.emby-local-insecure.rule: Host(`emby.${LOCAL_DOMAIN}`) + traefik.http.routers.emby-local-insecure.entrypoints: web + traefik.http.routers.emby-local-insecure.service: emby + traefik.http.routers.emby-local-insecure.middlewares: emby-web-redirect + # Local domain secure + traefik.http.routers.emby-local.rule: Host(`emby.${LOCAL_DOMAIN}`) + traefik.http.routers.emby-local.entrypoints: websecure + traefik.http.routers.emby-local.service: emby + traefik.http.routers.emby-local.tls: true + # Runtipi managed + runtipi.managed: true diff --git a/apps/emby/metadata/description.md b/apps/emby/metadata/description.md new file mode 100644 index 00000000..4fe02541 --- /dev/null +++ b/apps/emby/metadata/description.md @@ -0,0 +1,12 @@ +## Emby + +Bringing all of your home videos, music, and photos together into one place has never been easier. Your personal Emby Server automatically converts and streams your media on-the-fly to play on any device. + +![Emby](https://emby.media/resources/Screenshot_2015-09-28-22-42-491.png) + +### Folder Info + +| Root Folder | Container Folder | +|----------------------------------------|------------------| +| /runtipi/app-data/emby/data/config | /config | +| /runtipi/media/data | /media/data | diff --git a/apps/emby/metadata/logo.jpg b/apps/emby/metadata/logo.jpg new file mode 100644 index 00000000..de254f14 Binary files /dev/null and b/apps/emby/metadata/logo.jpg differ diff --git a/apps/emulatorjs/config.json b/apps/emulatorjs/config.json index 37976ff6..727de509 100644 --- a/apps/emulatorjs/config.json +++ b/apps/emulatorjs/config.json @@ -5,18 +5,15 @@ "available": true, "exposable": true, "id": "emulatorjs", - "tipi_version": 14, - "version": "1.9.0", - "categories": [ - "gaming" - ], + "tipi_version": 15, + "version": "1.9.2", + "categories": ["gaming"], "description": "Self-hosted Javascript emulation for various system.", "short_desc": "Self-hosted Javascript emulation for various system.", "author": "EmulatorJS", "source": "https://github.com/EmulatorJS/EmulatorJS", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726202402000 } diff --git a/apps/emulatorjs/docker-compose.yml b/apps/emulatorjs/docker-compose.yml index eacdb8fa..43ff48ad 100644 --- a/apps/emulatorjs/docker-compose.yml +++ b/apps/emulatorjs/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: emulatorjs: container_name: emulatorjs - image: lscr.io/linuxserver/emulatorjs:1.9.0 + image: lscr.io/linuxserver/emulatorjs:1.9.2 ports: - ${APP_PORT}:80 - 8165:3000 diff --git a/apps/esphome/config.json b/apps/esphome/config.json new file mode 100644 index 00000000..d203031f --- /dev/null +++ b/apps/esphome/config.json @@ -0,0 +1,46 @@ +{ + "$schema": "../schema.json", + "name": "ESP Home", + "port": 6052, + "available": true, + "exposable": true, + "id": "esphome", + "tipi_version": 6, + "version": "2024.8.3", + "categories": ["automation"], + "description": "ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.", + "short_desc": "Control your ESP8266/ESP32.", + "author": "ESP Home", + "source": "https://github.com/esphome/esphome", + "form_fields": [ + { + "type": "text", + "label": "Username", + "env_variable": "ESPHOME_USERNAME", + "default": "", + "min": 14, + "max": 25, + "required": false, + "hint": "Username of your ESP Home account" + }, + { + "type": "Password", + "label": "Password", + "env_variable": "ESPHOME_PASSWORD", + "default": "", + "min": 14, + "max": 25, + "required": false, + "hint": "Password of your ESP Home account" + }, + { + "type": "boolean", + "label": "Use ping for devices availability ? (default to mDNS)", + "env_variable": "ESPHOME_PING", + "hint": "mDNS doesn't work across VLANs, use static IP for devices when disabling mDNS" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1723905687000, + "updated_at": 1725387907000 +} diff --git a/apps/esphome/docker-compose.yml b/apps/esphome/docker-compose.yml new file mode 100644 index 00000000..223dc144 --- /dev/null +++ b/apps/esphome/docker-compose.yml @@ -0,0 +1,45 @@ +services: + esphome: + image: ghcr.io/esphome/esphome:2024.8.3 + container_name: esphome + environment: + - TZ=${TZ} + - USERNAME=${ESPHOME_USERNAME:-''} + - PASSWORD=${ESPHOME_PASSWORD:-''} + - ESPHOME_DASHBOARD_USE_PING=${ESPHOME_PING:-'false'} + restart: unless-stopped + ports: + - ${APP_PORT}:6052 + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/data/config:/config + networks: + - tipi_main_network + # privileged: true + # network_mode: host + labels: + # Main + traefik.enable: true + traefik.http.middlewares.esphome-web-redirect.redirectscheme.scheme: https + traefik.http.services.esphome.loadbalancer.server.port: 6052 + # Web + traefik.http.routers.esphome-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.esphome-insecure.entrypoints: web + traefik.http.routers.esphome-insecure.service: esphome + traefik.http.routers.esphome-insecure.middlewares: esphome-web-redirect + # Websecure + traefik.http.routers.esphome.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.esphome.entrypoints: websecure + traefik.http.routers.esphome.service: esphome + traefik.http.routers.esphome.tls.certresolver: myresolver + # Local domain + traefik.http.routers.esphome-local-insecure.rule: Host(`esphome.${LOCAL_DOMAIN}`) + traefik.http.routers.esphome-local-insecure.entrypoints: web + traefik.http.routers.esphome-local-insecure.service: esphome + traefik.http.routers.esphome-local-insecure.middlewares: esphome-web-redirect + # Local domain secure + traefik.http.routers.esphome-local.rule: Host(`esphome.${LOCAL_DOMAIN}`) + traefik.http.routers.esphome-local.entrypoints: websecure + traefik.http.routers.esphome-local.service: esphome + traefik.http.routers.esphome-local.tls: true + runtipi.managed: true \ No newline at end of file diff --git a/apps/esphome/metadata/description.md b/apps/esphome/metadata/description.md new file mode 100644 index 00000000..f0c96b0f --- /dev/null +++ b/apps/esphome/metadata/description.md @@ -0,0 +1,3 @@ +# ESP Home + +ESPHome is a system to control your microcontrollers by simple yet powerful configuration files and control them remotely through Home Automation systems. \ No newline at end of file diff --git a/apps/esphome/metadata/logo.jpg b/apps/esphome/metadata/logo.jpg new file mode 100644 index 00000000..9265090a Binary files /dev/null and b/apps/esphome/metadata/logo.jpg differ diff --git a/apps/excalidraw/config.json b/apps/excalidraw/config.json index 787fcf06..87a2c0e7 100644 --- a/apps/excalidraw/config.json +++ b/apps/excalidraw/config.json @@ -13,5 +13,7 @@ "author": "Excalidraw", "source": "https://github.com/excalidraw/excalidraw", "form_fields": [], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/filebrowser/config.json b/apps/filebrowser/config.json index 48609bd6..946e8048 100644 --- a/apps/filebrowser/config.json +++ b/apps/filebrowser/config.json @@ -7,17 +7,14 @@ "id": "filebrowser", "tipi_version": 4, "version": "s6", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Reliable and Performant File Management Desktop Sync and File Sharing\n Default credentials: admin / admin", "short_desc": "Access your homeserver files from your browser", "author": "filebrowser.org", "website": "https://filebrowser.org/", "source": "https://github.com/filebrowser/filebrowser", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/filestash/config.json b/apps/filestash/config.json index ba869575..69940009 100644 --- a/apps/filestash/config.json +++ b/apps/filestash/config.json @@ -32,5 +32,7 @@ "env_variable": "FILESTASH_DROPBOX_CLIENT_ID" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/firefly-iii-data-importer/config.json b/apps/firefly-iii-data-importer/config.json index cb5427f8..62d12696 100644 --- a/apps/firefly-iii-data-importer/config.json +++ b/apps/firefly-iii-data-importer/config.json @@ -33,5 +33,7 @@ "env_variable": "FIREFLY_III_ACCESS_TOKEN" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/firefly-iii/config.json b/apps/firefly-iii/config.json index 06b5bfea..2939e2d5 100644 --- a/apps/firefly-iii/config.json +++ b/apps/firefly-iii/config.json @@ -42,5 +42,7 @@ "env_variable": "STATIC_CRON_TOKEN" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/fireshare/config.json b/apps/fireshare/config.json index 2198b928..80a53379 100644 --- a/apps/fireshare/config.json +++ b/apps/fireshare/config.json @@ -7,9 +7,7 @@ "id": "fireshare", "tipi_version": 13, "version": "1.2.20", - "categories": [ - "development" - ], + "categories": ["development"], "description": "Self host your media and share with unique links. Share your game clips, videos, or other media via unique links.", "short_desc": "Self host your media and share with unique links", "author": "https://github.com/ShaneIsrael", @@ -38,8 +36,7 @@ "env_variable": "FIRESHARE_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/flaresolverr/config.json b/apps/flaresolverr/config.json index 15bcf4b4..7ff0ff97 100644 --- a/apps/flaresolverr/config.json +++ b/apps/flaresolverr/config.json @@ -4,9 +4,11 @@ "port": 8666, "available": true, "exposable": false, + "dynamic_config": true, "no_gui": true, "id": "flaresolverr", - "tipi_version": 18, + "tipi_version": 21, + "min_tipi_version": "3.6.0", "version": "3.3.21", "categories": ["media", "security", "utilities"], "description": "FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.", @@ -15,5 +17,7 @@ "source": "https://github.com/FlareSolverr/FlareSolverr", "website": "https://github.com/FlareSolverr/FlareSolverr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/flaresolverr/docker-compose.json b/apps/flaresolverr/docker-compose.json new file mode 100644 index 00000000..bfa792b2 --- /dev/null +++ b/apps/flaresolverr/docker-compose.json @@ -0,0 +1,14 @@ +{ + "services": [ + { + "name": "flaresolverr", + "image": "ghcr.io/flaresolverr/flaresolverr:v3.3.21", + "internalPort": 8191, + "isMain": true, + "environment": { + "LOG_LEVEL": "${FLARESOLVERR_LOG_LEVEL-info}", + "TZ": "${TZ}" + } + } + ] +} diff --git a/apps/flatnotes/config.json b/apps/flatnotes/config.json index 709b2a17..a1eaa9a7 100644 --- a/apps/flatnotes/config.json +++ b/apps/flatnotes/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "flatnotes", "port": 8137, - "tipi_version": 26, - "version": "5.2.2", + "tipi_version": 28, + "version": "5.2.3", "categories": ["utilities"], "description": "A self-hosted, database-less note taking web app that utilises a flat folder of markdown files for storage.", "short_desc": "A self-hosted, database-less note taking web app", @@ -49,5 +49,7 @@ "env_variable": "FLATNOTES_TOTP_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725436336000 } diff --git a/apps/flatnotes/docker-compose.yml b/apps/flatnotes/docker-compose.yml index bbc89229..8cf5572a 100644 --- a/apps/flatnotes/docker-compose.yml +++ b/apps/flatnotes/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: flatnotes: container_name: flatnotes - image: dullage/flatnotes:v5.2.2 + image: dullage/flatnotes:v5.2.3 environment: FLATNOTES_AUTH_TYPE: ${FLATNOTES_AUTH_TYPE} FLATNOTES_USERNAME: ${FLATNOTES_USERNAME} diff --git a/apps/flatnotes/metadata/logo.jpg b/apps/flatnotes/metadata/logo.jpg index 3ffc5f99..17738333 100644 Binary files a/apps/flatnotes/metadata/logo.jpg and b/apps/flatnotes/metadata/logo.jpg differ diff --git a/apps/flightlog/config.json b/apps/flightlog/config.json index 277a3fa4..0924664d 100644 --- a/apps/flightlog/config.json +++ b/apps/flightlog/config.json @@ -5,19 +5,15 @@ "exposable": true, "port": 8934, "id": "flightlog", - "tipi_version": 1, - "version": "2.0.1", - "categories": [ - "utilities", - "data" - ], + "tipi_version": 3, + "version": "2.1.1", + "categories": ["utilities", "data"], "description": "Easily keep track of your flight history", "short_desc": "Flightlog, a web application that keeps track of your personal flight history", "author": "perdian", "source": "https://github.com/perdian/flightlog/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725836550000 } diff --git a/apps/flightlog/docker-compose.yml b/apps/flightlog/docker-compose.yml index 08636f80..48a0cad7 100644 --- a/apps/flightlog/docker-compose.yml +++ b/apps/flightlog/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.7' services: flightlog: container_name: flightlog - image: perdian/flightlog:v2.0.1 + image: perdian/flightlog:v2.1.1 environment: - FLIGHTLOG_SERVER_CONTEXT_PATH=/ volumes: diff --git a/apps/flowise/config.json b/apps/flowise/config.json index 59d3406e..9a4debcc 100644 --- a/apps/flowise/config.json +++ b/apps/flowise/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8009, "id": "flowise", - "tipi_version": 22, - "version": "2.0.1", + "tipi_version": 28, + "version": "2.0.7", "categories": ["ai", "automation"], "description": "Flowise AI is an Open source UI visual tool to build your customized LLM ochestration flow & AI agents. Developing LLM apps takes countless iterations. With low code approach, Flowise AI enable quick iterations to go from testing to production.", "short_desc": "Build LLM Apps Easily", @@ -72,5 +72,7 @@ "env_variable": "DISABLE_FLOWISE_TELEMETRY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724886425000 } diff --git a/apps/flowise/docker-compose.yml b/apps/flowise/docker-compose.yml index 72a945c9..43e07ec5 100644 --- a/apps/flowise/docker-compose.yml +++ b/apps/flowise/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: flowise: - image: flowiseai/flowise:2.0.1 + image: flowiseai/flowise:2.0.7 restart: unless-stopped entrypoint: /bin/sh -c "sleep 3; flowise start" container_name: flowise diff --git a/apps/forgejo/config.json b/apps/forgejo/config.json index ad8a3324..07084de5 100644 --- a/apps/forgejo/config.json +++ b/apps/forgejo/config.json @@ -7,9 +7,7 @@ "id": "forgejo", "tipi_version": 18, "version": "1.21.11-0", - "categories": [ - "development" - ], + "categories": ["development"], "description": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", "short_desc": "Beyond coding. We forge. · Lightweight and performant · Guaranteed 100% Free Software", "author": "forgejo", @@ -22,8 +20,7 @@ "env_variable": "FORGEJO_DB_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/freshrss/config.json b/apps/freshrss/config.json index 9c2ae363..05007efe 100644 --- a/apps/freshrss/config.json +++ b/apps/freshrss/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8086, "id": "freshrss", - "tipi_version": 11, - "version": "1.24.1", + "tipi_version": 13, + "version": "1.24.3", "categories": ["utilities"], "description": "FreshRSS is a self-hosted RSS feed aggregator like Leed or Kriss Feed.\nIt is lightweight, easy to work with, powerful, and customizable.\n\nIt is a multi-user application with an anonymous reading mode. It supports custom tags. There is an API for (mobile) clients, and a Command-Line Interface.\n\nThanks to the WebSub standard (formerly PubSubHubbub), FreshRSS is able to receive instant push notifications from compatible sources, such as Mastodon, Friendica, WordPress, Blogger, FeedBurner, etc.\n\nFreshRSS natively supports basic Web scraping, based on XPath, for Web sites not providing any RSS / Atom feed.\n\nFinally, it supports extensions for further tuning.", "short_desc": "A free, self-hostable aggregator… ", "author": "https://freshrss.org/", "source": "https://github.com/FreshRSS/FreshRSS", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725613370000 } diff --git a/apps/freshrss/docker-compose.yml b/apps/freshrss/docker-compose.yml index 713c604a..415552f8 100644 --- a/apps/freshrss/docker-compose.yml +++ b/apps/freshrss/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: freshrss: - image: lscr.io/linuxserver/freshrss:1.24.1 + image: lscr.io/linuxserver/freshrss:1.24.3 container_name: freshrss environment: - PUID=1000 diff --git a/apps/gandi-livedns/config.json b/apps/gandi-livedns/config.json index e581c09b..490633fb 100644 --- a/apps/gandi-livedns/config.json +++ b/apps/gandi-livedns/config.json @@ -81,5 +81,7 @@ "env_variable": "GANDI_LIVEDNS_FORCE_IPV6" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/getashell/config.json b/apps/getashell/config.json index 8aa9d35f..98b18be3 100644 --- a/apps/getashell/config.json +++ b/apps/getashell/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8281, "id": "getashell", - "tipi_version": 10, - "version": "1.1.1", + "tipi_version": 12, + "version": "1.1.3", "categories": ["utilities"], "description": "Simple web ui to create ssh shells for testing.", "short_desc": "SSH shells from a Web UI", @@ -32,5 +32,7 @@ "env_variable": "GETASHELL_SECRET_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725904870000 } diff --git a/apps/getashell/docker-compose.yml b/apps/getashell/docker-compose.yml index 50f4f2ee..7137ab38 100644 --- a/apps/getashell/docker-compose.yml +++ b/apps/getashell/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: getashell: - image: ghcr.io/steveiliop56/getashell:v1.1.1 + image: ghcr.io/steveiliop56/getashell:v1.1.3 container_name: getashell restart: unless-stopped volumes: diff --git a/apps/ghost-dev/config.json b/apps/ghost-dev/config.json index 795bb446..354b9e24 100644 --- a/apps/ghost-dev/config.json +++ b/apps/ghost-dev/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghost-dev", - "tipi_version": 10, - "version": "5.88.1", + "tipi_version": 22, + "version": "5.94.1", "categories": ["social", "media"], "description": "Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.", "short_desc": "Ghost - Turn your audience into a business.", @@ -14,5 +14,7 @@ "source": "https://github.com/TryGhost/Ghost", "website": "https://ghost.org", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726279393000 } diff --git a/apps/ghost-dev/docker-compose.yml b/apps/ghost-dev/docker-compose.yml index 97f2ba44..963d2a6a 100644 --- a/apps/ghost-dev/docker-compose.yml +++ b/apps/ghost-dev/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: ghost-dev: container_name: ghost-dev - image: ghost:5.88.1 + image: ghost:5.94.1 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data:/var/lib/ghost/content diff --git a/apps/ghost/config.json b/apps/ghost/config.json index def6b5cd..abfc21ff 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 103, - "version": "5.88.1", + "tipi_version": 115, + "version": "5.94.1", "categories": ["social", "media"], "description": "Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.", "short_desc": "Ghost - Turn your audience into a business.", @@ -55,5 +55,7 @@ "env_variable": "GHOST_MAIL_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726279396000 } diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index e2412c8b..b5ffce1a 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: ghost: - image: ghost:5.88.1 + image: ghost:5.94.1 container_name: ghost depends_on: - ghostdb diff --git a/apps/ghostfolio/config.json b/apps/ghostfolio/config.json index ec060378..3aca2f55 100644 --- a/apps/ghostfolio/config.json +++ b/apps/ghostfolio/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghostfolio", - "tipi_version": 99, - "version": "2.98.0", + "tipi_version": 109, + "version": "2.107.1", "categories": ["finance"], "description": "Ghostfolio is a privacy-first, open source dashboard for your personal finances.", "short_desc": "Open Source Wealth Management Software.", @@ -42,5 +42,7 @@ "env_variable": "GHOSTFOLIO_REDIS_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726186719000 } diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 54382f3a..c1c68a0c 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: ghostfolio: container_name: ghostfolio - image: ghostfolio/ghostfolio:2.98.0 + image: ghostfolio/ghostfolio:2.107.1 restart: unless-stopped ports: - ${APP_PORT}:3333 diff --git a/apps/gitea/config.json b/apps/gitea/config.json index 12b7a769..ea5e6959 100644 --- a/apps/gitea/config.json +++ b/apps/gitea/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "gitea", - "tipi_version": 29, - "version": "1.22.1", + "tipi_version": 30, + "version": "1.22.2", "categories": ["development"], "description": "Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, and GitLab. Gitea is a fork of Gogs. See the Gitea Announcement blog post to read about the justification for a fork.", "short_desc": "Gitea - Git with a cup of tea · A painless self-hosted Git service. · Cross-platform · Easy to install · Lightweight · Open Source.", "author": "go-gitea", "source": "https://github.com/go-gitea/gitea", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725572954000 } diff --git a/apps/gitea/docker-compose.yml b/apps/gitea/docker-compose.yml index 2259fc58..0d854f98 100644 --- a/apps/gitea/docker-compose.yml +++ b/apps/gitea/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: gitea: - image: gitea/gitea:1.22.1 + image: gitea/gitea:1.22.2 container_name: gitea environment: - USER_UID=1000 diff --git a/apps/gladys/config.json b/apps/gladys/config.json index eea370c1..b5f333fc 100644 --- a/apps/gladys/config.json +++ b/apps/gladys/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": false, "id": "gladys", - "tipi_version": 39, - "version": "4.44.0", + "tipi_version": 41, + "version": "4.45.1", "categories": ["automation"], "description": "A privacy-first, open-source home assistant", "short_desc": "A privacy-first, open-source home assistant", @@ -14,5 +14,7 @@ "source": "https://github.com/gladysassistant/gladys", "website": "https://gladysassistant.com/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726257220000 } diff --git a/apps/gladys/docker-compose.yml b/apps/gladys/docker-compose.yml index 50344123..f8065c45 100644 --- a/apps/gladys/docker-compose.yml +++ b/apps/gladys/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: gladys: container_name: gladys - image: gladysassistant/gladys:v4.44.0 + image: gladysassistant/gladys:v4.45.1 privileged: true restart: on-failure stop_grace_period: 1m diff --git a/apps/glance/config.json b/apps/glance/config.json index 83de4316..bf5ce8ee 100644 --- a/apps/glance/config.json +++ b/apps/glance/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "glance", - "tipi_version": 3, - "version": "0.5.0", + "tipi_version": 6, + "version": "0.6.1", "categories": ["utilities"], "description": "A self-hosted dashboard that puts all your feeds in one place", "short_desc": "Super configurable dashboard", @@ -14,5 +14,7 @@ "source": "https://github.com/glanceapp/glance", "form_fields": [], "supported_architectures": ["arm64", "amd64"], - "dynamic_config": true + "dynamic_config": true, + "created_at": 1691943801422, + "updated_at": 1725953217000 } diff --git a/apps/glance/docker-compose.json b/apps/glance/docker-compose.json index 9ebb5c17..165ac48c 100644 --- a/apps/glance/docker-compose.json +++ b/apps/glance/docker-compose.json @@ -1,7 +1,7 @@ { "services": [ { - "image": "glanceapp/glance:v0.5.0", + "image": "glanceapp/glance:v0.6.1", "name": "glance", "internalPort": 8080, "isMain": true, diff --git a/apps/glance/docker-compose.yml b/apps/glance/docker-compose.yml index c80bba51..48dc03cf 100644 --- a/apps/glance/docker-compose.yml +++ b/apps/glance/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: glance: - image: glanceapp/glance:v0.5.0 + image: glanceapp/glance:v0.6.1 restart: unless-stopped container_name: glance ports: diff --git a/apps/glances/config.json b/apps/glances/config.json index 072fef8b..36c2ce8a 100644 --- a/apps/glances/config.json +++ b/apps/glances/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/nicolargo/glances", "website": "https://nicolargo.github.io/glances/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/gotify/config.json b/apps/gotify/config.json index 3599b661..b642dc8b 100644 --- a/apps/gotify/config.json +++ b/apps/gotify/config.json @@ -31,5 +31,7 @@ "env_variable": "GOTIFY_DEFAULTUSER_PASS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/gotosocial/config.json b/apps/gotosocial/config.json index b78ced86..b8d45342 100644 --- a/apps/gotosocial/config.json +++ b/apps/gotosocial/config.json @@ -74,5 +74,7 @@ "env_variable": "GTS_SMTP_FROM" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/grafana/config.json b/apps/grafana/config.json index 12e7a4b8..1750d6f4 100644 --- a/apps/grafana/config.json +++ b/apps/grafana/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "grafana", - "tipi_version": 32, - "version": "11.1.3", + "tipi_version": 34, + "version": "11.2.0", "categories": ["data"], "description": "The open and composable observability and data visualization platform", "short_desc": "The open and composable observability and data visualization platform", "author": "Grafana Labs", "source": "https://github.com/grafana/grafana", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724787413000 } diff --git a/apps/grafana/docker-compose.yml b/apps/grafana/docker-compose.yml index 838dece6..342b5f9d 100644 --- a/apps/grafana/docker-compose.yml +++ b/apps/grafana/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: grafana: container_name: grafana - image: grafana/grafana-oss:11.1.3 + image: grafana/grafana-oss:11.2.0 ports: - ${APP_PORT}:3000 volumes: diff --git a/apps/grampsweb/config.json b/apps/grampsweb/config.json index 692270de..d977fba9 100644 --- a/apps/grampsweb/config.json +++ b/apps/grampsweb/config.json @@ -5,12 +5,9 @@ "exposable": true, "port": 5000, "id": "grampsweb", - "tipi_version": 3, - "version": "24.7.0", - "categories": [ - "data", - "social" - ], + "tipi_version": 6, + "version": "24.8.0", + "categories": ["data", "social"], "description": "Gramps Web is a web app for collaborative genealogy. It is based on and interoperable with Gramps, the leading open source genealogy desktop application. Gramps Web is free & open source software and puts your privacy and your control of your research data first.", "short_desc": "Web app for collaborative genealogy.", "author": "gramps-project", @@ -25,8 +22,7 @@ "env_variable": "GRAMPSWEB_TREE" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724502754000 +} diff --git a/apps/grampsweb/docker-compose.yml b/apps/grampsweb/docker-compose.yml index 1b6f1943..af5db65a 100644 --- a/apps/grampsweb/docker-compose.yml +++ b/apps/grampsweb/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: grampsweb: - image: ghcr.io/gramps-project/grampsweb:v24.7.0 + image: ghcr.io/gramps-project/grampsweb:v24.8.0 container_name: grampsweb restart: unless-stopped ports: diff --git a/apps/grampsweb/metadata/logo.jpg b/apps/grampsweb/metadata/logo.jpg index 2d9be0c6..3fcf32f4 100644 Binary files a/apps/grampsweb/metadata/logo.jpg and b/apps/grampsweb/metadata/logo.jpg differ diff --git a/apps/grav/config.json b/apps/grav/config.json index 1b82e835..262bb153 100644 --- a/apps/grav/config.json +++ b/apps/grav/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "grav", - "tipi_version": 2, - "version": "1.7.39.4-ls97", + "tipi_version": 3, + "version": "1.7.46", "categories": ["social", "media"], "description": "Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful Package Management System to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.", "short_desc": "Grav is a Fast, Simple, and Flexible, file-based Web-platform. ", "author": "Grav", "source": "https://github.com/getgrav/grav", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/grav/docker-compose.yml b/apps/grav/docker-compose.yml index 3da9a70f..3b134537 100644 --- a/apps/grav/docker-compose.yml +++ b/apps/grav/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: grav: container_name: grav - image: lscr.io/linuxserver/grav:1.7.39.4-ls97 + image: lscr.io/linuxserver/grav:1.7.46 ports: - ${APP_PORT}:80 volumes: diff --git a/apps/grist/config.json b/apps/grist/config.json index c8a070ef..e1861809 100644 --- a/apps/grist/config.json +++ b/apps/grist/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "grist", "description": "Grist is a modern relational spreadsheet. It combines the flexibility of a spreadsheet with the robustness of a database to organize your data and make you more productive.", - "tipi_version": 15, - "version": "1.1.16", + "tipi_version": 18, + "version": "1.1.18", "categories": ["utilities"], "short_desc": "Grist is the evolution of spreadsheets.", "author": "https://github.com/gristlabs", @@ -30,5 +30,7 @@ "env_variable": "GRIST_SANDBOX_FLAVOR" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725479660000 } diff --git a/apps/grist/docker-compose.yml b/apps/grist/docker-compose.yml index 8f4670e9..bb362147 100644 --- a/apps/grist/docker-compose.yml +++ b/apps/grist/docker-compose.yml @@ -6,7 +6,7 @@ services: environment: - APP_HOME_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - GRIST_SANDBOX_FLAVOR=${GRIST_SANDBOX_FLAVOR} - image: "gristlabs/grist:1.1.16" + image: "gristlabs/grist:1.1.18" ports: - "${APP_PORT}:8484" restart: always diff --git a/apps/grist/metadata/logo.jpg b/apps/grist/metadata/logo.jpg index 36a49afa..44861f7f 100644 Binary files a/apps/grist/metadata/logo.jpg and b/apps/grist/metadata/logo.jpg differ diff --git a/apps/grocy/config.json b/apps/grocy/config.json index 75ad6e68..9050758b 100644 --- a/apps/grocy/config.json +++ b/apps/grocy/config.json @@ -3,7 +3,7 @@ "name": "Grocy", "available": true, "exposable": true, - "tipi_version": 4, + "tipi_version": 5, "version": "4.0.3", "port": 8136, "id": "grocy", @@ -13,5 +13,7 @@ "author": "berrnd", "source": "https://github.com/grocy/grocy", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/grocy/metadata/logo.jpg b/apps/grocy/metadata/logo.jpg index e338dd5a..bdf4bdea 100644 Binary files a/apps/grocy/metadata/logo.jpg and b/apps/grocy/metadata/logo.jpg differ diff --git a/apps/guacamole/config.json b/apps/guacamole/config.json index 6c0647ff..e7f8a0aa 100644 --- a/apps/guacamole/config.json +++ b/apps/guacamole/config.json @@ -1,26 +1,28 @@ { - "$schema": "../schema.json", - "name": "Guacamole", - "id": "guacamole", - "available": true, - "short_desc": "Clientless remote desktop gateway", - "author": "apache", - "port": 8854, - "url_suffix": "/guacamole", - "categories": ["utilities"], - "description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH", - "tipi_version": 1, - "version": "1.5.5", - "source": "https://github.com/apache/guacamole-server", - "website": "https://guacamole.apache.org", - "exposable": true, - "supported_architectures": ["amd64"], - "form_fields": [ - { - "type": "random", - "min": 32, - "label": "Guacamole postgres password", - "env_variable": "GUACAMOLE_DB_PASSWORD" - } - ] - } + "$schema": "../schema.json", + "name": "Guacamole", + "id": "guacamole", + "available": true, + "short_desc": "Clientless remote desktop gateway", + "author": "apache", + "port": 8854, + "url_suffix": "/guacamole", + "categories": ["utilities"], + "description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH", + "tipi_version": 1, + "version": "1.5.5", + "source": "https://github.com/apache/guacamole-server", + "website": "https://guacamole.apache.org", + "exposable": true, + "supported_architectures": ["amd64"], + "form_fields": [ + { + "type": "random", + "min": 32, + "label": "Guacamole postgres password", + "env_variable": "GUACAMOLE_DB_PASSWORD" + } + ], + "created_at": 1691943801422, + "updated_at": 1723566283000 +} diff --git a/apps/halo/config.json b/apps/halo/config.json index 1af3930e..0927eba3 100644 --- a/apps/halo/config.json +++ b/apps/halo/config.json @@ -5,14 +5,11 @@ "exposable": true, "port": 8092, "id": "halo", - "tipi_version": 26, - "version": "2.15.0", + "tipi_version": 31, + "version": "2.19.3", "description": "Halo is a powerful and easy-to-use open source website building tool.", "short_desc": "Halo - Open source website building tool.", - "categories": [ - "social", - "media" - ], + "categories": ["social", "media"], "author": "halo-dev", "source": "https://github.com/halo-dev/halo", "website": "https://halo.run", @@ -29,8 +26,7 @@ "env_variable": "HALO_EXTERNAL_URL" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725977398000 } diff --git a/apps/halo/docker-compose.yml b/apps/halo/docker-compose.yml index 94b71d62..b59ab547 100644 --- a/apps/halo/docker-compose.yml +++ b/apps/halo/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: halo: - image: halohub/halo:2.15.0 + image: halohub/halo:2.19.3 container_name: halo restart: unless-stopped depends_on: diff --git a/apps/hammond/config.json b/apps/hammond/config.json index cabab106..c6321333 100644 --- a/apps/hammond/config.json +++ b/apps/hammond/config.json @@ -7,9 +7,7 @@ "id": "hammond", "tipi_version": 6, "version": "0.0.24", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Self hosted vehicle and expense management system. Like Clarkson, but better", "short_desc": "Self hosted vehicle and expense management system. Like Clarkson, but better", "author": "Akhilrex, alfhou", @@ -22,8 +20,7 @@ "env_variable": "HAMMOND_TZ" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/haven/config.json b/apps/haven/config.json index 52c58b37..85e2dbdf 100644 --- a/apps/haven/config.json +++ b/apps/haven/config.json @@ -5,34 +5,35 @@ "exposable": true, "port": 8130, "id": "haven", - "tipi_version": 2, - "version": "a0280ce", + "tipi_version": 3, + "version": "latest", "categories": ["social"], - "description": "Self-hostable private blogging", - "short_desc": "Self-hostable private blogging", + "description": "Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.", + "short_desc": "Self-hostable private blogging.", "author": "mawise", "source": "https://github.com/havenweb/haven", - "website": "https://havenweb.org/index.html", + "website": "https://havenweb.org", "form_fields": [ { "type": "text", - "label": "Email", + "label": "Haven Email", "required": true, "env_variable": "HAVEN_USER_EMAIL" }, { "type": "password", - "label": "Haven password", - "max": 50, - "min": 8, + "label": "Haven Password", "required": true, "env_variable": "HAVEN_USER_PASSWORD" }, { "type": "random", - "label": "DB password", + "label": "Haven DB password", + "min": 32, "env_variable": "HAVEN_DB_PASSWORD" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/haven/docker-compose.yml b/apps/haven/docker-compose.yml index c9ad5804..8fb12423 100644 --- a/apps/haven/docker-compose.yml +++ b/apps/haven/docker-compose.yml @@ -1,7 +1,7 @@ -version: "3.7" +version: "3.9" services: haven: - image: ghcr.io/havenweb/haven:a0280ce + image: ghcr.io/havenweb/haven:latest container_name: haven depends_on: - haven-db diff --git a/apps/hedgedoc/config.json b/apps/hedgedoc/config.json index 64156331..0f5749ab 100644 --- a/apps/hedgedoc/config.json +++ b/apps/hedgedoc/config.json @@ -5,11 +5,9 @@ "available": true, "exposable": true, "id": "hedgedoc", - "tipi_version": 4, - "version": "1.9.9", - "categories": [ - "media" - ], + "tipi_version": 5, + "version": "1.10.0", + "categories": ["media"], "description": "HedgeDoc (formerly known as CodiMD) is an open-source, web-based, self-hosted, collaborative markdown editor. You can use it to easily collaborate on notes, graphs and even presentations in real-time. All you need to do is to share your note-link to your co-workers and they’re ready to go.", "short_desc": "A Collaborative Markdown and Note Taking App", "website": "https://hedgedoc.org/", @@ -31,5 +29,7 @@ "required": true, "env_variable": "HEDGEDOC_ADDPORT" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1725294593000 } diff --git a/apps/hedgedoc/docker-compose.yml b/apps/hedgedoc/docker-compose.yml index 89dd81a1..903bd975 100644 --- a/apps/hedgedoc/docker-compose.yml +++ b/apps/hedgedoc/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: hedgedoc: container_name: hedgedoc - image: quay.io/hedgedoc/hedgedoc:1.9.9 + image: quay.io/hedgedoc/hedgedoc:1.10.0 environment: - CMD_DB_URL=postgres://hedgedoc:${HEDGEDOC_DB_PASSWORD}@hedgedoc-db:5432/hedgedoc - CMD_DOMAIN=${APP_DOMAIN} diff --git a/apps/heimdall/config.json b/apps/heimdall/config.json index 7d485052..1a25e151 100644 --- a/apps/heimdall/config.json +++ b/apps/heimdall/config.json @@ -4,19 +4,16 @@ "exposable": true, "port": 8783, "id": "heimdall", - "tipi_version": 2, + "tipi_version": 3, "version": "2.6.1", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way", "short_desc": "Application Dashboard", "author": "linuxserver", "source": "https://github.com/linuxserver/Heimdall", "website": "https://heimdall.site/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/heimdall/docker-compose.yml b/apps/heimdall/docker-compose.yml index 80df00d7..67c620b6 100644 --- a/apps/heimdall/docker-compose.yml +++ b/apps/heimdall/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.9' - services: heimdall: image: lscr.io/linuxserver/heimdall:2.6.1 @@ -19,7 +17,7 @@ services: # Main traefik.enable: true traefik.http.middlewares.heimdall-web-redirect.redirectscheme.scheme: https - traefik.http.services.heimdall.loadbalancer.server.port: 3000 + traefik.http.services.heimdall.loadbalancer.server.port: 80 # Web traefik.http.routers.heimdall-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.heimdall-insecure.entrypoints: web diff --git a/apps/hello-world/config.json b/apps/hello-world/config.json index bc262920..05385b8c 100644 --- a/apps/hello-world/config.json +++ b/apps/hello-world/config.json @@ -7,13 +7,13 @@ "id": "hello-world", "tipi_version": 2, "version": "latest", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Hello World web server in under 2 MB", "short_desc": "Hello World web server in under 2 MB", "author": "crccheck", "source": "https://github.com/crccheck/docker-hello-world", "form_fields": [], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/hoarder/config.json b/apps/hoarder/config.json new file mode 100644 index 00000000..360069ad --- /dev/null +++ b/apps/hoarder/config.json @@ -0,0 +1,39 @@ +{ + "$schema": "../schema.json", + "name": "Hoarder", + "id": "hoarder", + "available": true, + "short_desc": "Self-hostable bookmark-everything app", + "author": "hoarder-app", + "port": 8685, + "categories": ["utilities", "ai"], + "description": "A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search", + "tipi_version": 1, + "version": "0.16.0", + "source": "https://github.com/hoarder-app/hoarder", + "website": "https://hoarder.app", + "form_fields": [ + { + "type": "random", + "label": "Nextauth Secret", + "min": 32, + "env_variable": "NEXTAUTH_SECRET" + }, + { + "type": "random", + "label": "Meili master key", + "min": 32, + "env_variable": "MEILI_MASTER_KEY" + }, + { + "type": "text", + "label": "OpenAI API Key", + "required": false, + "env_variable": "OPENAI_API_KEY" + } + ], + "exposable": true, + "supported_architectures": ["amd64", "arm64"], + "created_at": 1726064280917, + "updated_at": 1726064280917 + } diff --git a/apps/hoarder/docker-compose.yml b/apps/hoarder/docker-compose.yml new file mode 100644 index 00000000..91051bd6 --- /dev/null +++ b/apps/hoarder/docker-compose.yml @@ -0,0 +1,79 @@ +services: + hoarder: + image: ghcr.io/hoarder-app/hoarder:0.16.0 + container_name: hoarder + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/app:/data + ports: + - ${APP_PORT}:3000 + environment: + - MEILI_ADDR=http://hoarder-meilisearch:7700 + - BROWSER_WEB_URL=http://hoarder-chrome:9222 + - DATA_DIR=/data + - HOARDER_VERSION=0.16.0 + - OPENAI_API_KEY=${OPENAI_API_KEY} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + - NEXTAUTH_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.hoarder-web-redirect.redirectscheme.scheme: https + traefik.http.services.hoarder.loadbalancer.server.port: 3000 + # Web + traefik.http.routers.hoarder-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.hoarder-insecure.entrypoints: web + traefik.http.routers.hoarder-insecure.service: hoarder + traefik.http.routers.hoarder-insecure.middlewares: hoarder-web-redirect + # Websecure + traefik.http.routers.hoarder.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.hoarder.entrypoints: websecure + traefik.http.routers.hoarder.service: hoarder + traefik.http.routers.hoarder.tls.certresolver: myresolver + # Local domain + traefik.http.routers.hoarder-local-insecure.rule: Host(`hoarder.${LOCAL_DOMAIN}`) + traefik.http.routers.hoarder-local-insecure.entrypoints: web + traefik.http.routers.hoarder-local-insecure.service: hoarder + traefik.http.routers.hoarder-local-insecure.middlewares: hoarder-web-redirect + # Local domain secure + traefik.http.routers.hoarder-local.rule: Host(`hoarder.${LOCAL_DOMAIN}`) + traefik.http.routers.hoarder-local.entrypoints: websecure + traefik.http.routers.hoarder-local.service: hoarder + traefik.http.routers.hoarder-local.tls: true + # Runtipi managed + runtipi.managed: true + + hoarder-chrome: + image: gcr.io/zenika-hub/alpine-chrome:124 + container_name: hoarder-chrome + restart: unless-stopped + command: + - --no-sandbox + - --disable-gpu + - --disable-dev-shm-usage + - --remote-debugging-address=0.0.0.0 + - --remote-debugging-port=9222 + - --hide-scrollbars + networks: + - tipi_main_network + labels: + # Runtipi managed + runtipi.managed: true + + hoarder-meilisearch: + image: getmeili/meilisearch:v1.10 + container_name: hoarder-meilisearch + restart: unless-stopped + environment: + - MEILI_NO_ANALYTICS=true + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + volumes: + - ${APP_DATA_DIR}/data/melli_data:/meili_data + networks: + - tipi_main_network + labels: + # Runtipi managed + runtipi.managed: true diff --git a/apps/hoarder/metadata/description.md b/apps/hoarder/metadata/description.md new file mode 100644 index 00000000..e977067f --- /dev/null +++ b/apps/hoarder/metadata/description.md @@ -0,0 +1,30 @@ +### Hoarder + +A self-hostable bookmark-everything app with a touch of AI for the data hoarders out there. + +![homepage screenshot](https://github.com/hoarder-app/hoarder/blob/main/screenshots/homepage.png?raw=true) + +## Features + +- 🔗 Bookmark links, take simple notes and store images and pdfs. +- ⬇️ Automatic fetching for link titles, descriptions and images. +- 📋 Sort your bookmarks into lists. +- 🔎 Full text search of all the content stored. +- ✨ AI-based (aka chatgpt) automatic tagging. With supports for local models using ollama! +- 🔖 [Chrome plugin](https://chromewebstore.google.com/detail/hoarder/kgcjekpmcjjogibpjebkhaanilehneje) and [Firefox addon](https://addons.mozilla.org/en-US/firefox/addon/hoarder/) for quick bookmarking. +- 📱 An [iOS app](https://apps.apple.com/us/app/hoarder-app/id6479258022), and an [Android app](https://play.google.com/store/apps/details?id=app.hoarder.hoardermobile&pcampaignid=web_share). +- 🗄️ Full page archival (using [monolith](https://github.com/Y2Z/monolith)) to protect against link rot. +- ☑️ Bulk actions support. +- 🌙 Dark mode support. +- 💾 Self-hosting first. +- [Planned] Downloading the content for offline reading. + +**⚠️ This app is under heavy development and it's far from stable.** + +## Documentation + +- [Installation](https://docs.hoarder.app/installation/docker) +- [Configuration](https://docs.hoarder.app/configuration) +- [Screenshots](https://docs.hoarder.app/screenshots) +- [Security Considerations](https://docs.hoarder.app/security-considerations) +- [Development](https://docs.hoarder.app/Development/setup) diff --git a/apps/hoarder/metadata/logo.jpg b/apps/hoarder/metadata/logo.jpg new file mode 100644 index 00000000..0477833a Binary files /dev/null and b/apps/hoarder/metadata/logo.jpg differ diff --git a/apps/homarr/config.json b/apps/homarr/config.json index f3e4354e..e0635a57 100644 --- a/apps/homarr/config.json +++ b/apps/homarr/config.json @@ -5,11 +5,9 @@ "exposable": true, "port": 8102, "id": "homarr", - "tipi_version": 29, - "version": "0.15.3", - "categories": [ - "utilities" - ], + "tipi_version": 30, + "version": "0.15.4", + "categories": ["utilities"], "description": "A homepage for your server.", "short_desc": "Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place.", "author": "ajnart", @@ -25,8 +23,7 @@ "env_variable": "HOMARR_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725219552000 } diff --git a/apps/homarr/docker-compose.yml b/apps/homarr/docker-compose.yml index fe090b43..371a9d9b 100644 --- a/apps/homarr/docker-compose.yml +++ b/apps/homarr/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: homarr: container_name: homarr - image: ghcr.io/ajnart/homarr:0.15.3 + image: ghcr.io/ajnart/homarr:0.15.4 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/config:/app/data/configs diff --git a/apps/homeassistant-1/config.json b/apps/homeassistant-1/config.json index beac64a2..bdce67b6 100644 --- a/apps/homeassistant-1/config.json +++ b/apps/homeassistant-1/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "homeassistant-1", - "tipi_version": 23, - "version": "2024.7.3", + "tipi_version": 31, + "version": "2024.9.2", "categories": ["automation"], "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.", "short_desc": "Open source home automation that puts local control and privacy first", "author": "Home Assistant", "source": "https://github.com/home-assistant/core", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726515119000 } diff --git a/apps/homeassistant-1/docker-compose.yml b/apps/homeassistant-1/docker-compose.yml index 1f0e88d3..3c86f7f6 100644 --- a/apps/homeassistant-1/docker-compose.yml +++ b/apps/homeassistant-1/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: homeassistant-1: - image: ghcr.io/home-assistant/home-assistant:2024.7.3 + image: ghcr.io/home-assistant/home-assistant:2024.9.2 container_name: homeassistant-1 environment: - TZ=${TZ} diff --git a/apps/homeassistant/config.json b/apps/homeassistant/config.json index 0364386b..47e2fea7 100644 --- a/apps/homeassistant/config.json +++ b/apps/homeassistant/config.json @@ -7,16 +7,13 @@ "tipi_version": 3, "version": "stable", "id": "homeassistant", - "categories": [ - "automation" - ], + "categories": ["automation"], "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.", "short_desc": "Open source home automation that puts local control and privacy first", "author": "ArneNaessens", "source": "https://github.com/home-assistant/core", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 +} diff --git a/apps/homebox/config.json b/apps/homebox/config.json index b0e77605..2637198f 100644 --- a/apps/homebox/config.json +++ b/apps/homebox/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "homebox", - "tipi_version": 14, - "version": "0.13.0-rootless", + "tipi_version": 17, + "version": "0.14.2-rootless", "uid": 1000, "gid": 1000, "categories": ["utilities"], @@ -25,5 +25,7 @@ "env_variable": "HBOX_OPTIONS_ALLOW_REGISTRATION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726336976000 } diff --git a/apps/homebox/docker-compose.yml b/apps/homebox/docker-compose.yml index cd876283..59716ef0 100644 --- a/apps/homebox/docker-compose.yml +++ b/apps/homebox/docker-compose.yml @@ -1,6 +1,6 @@ services: homebox: - image: ghcr.io/sysadminsmedia/homebox:0.13.0-rootless + image: ghcr.io/sysadminsmedia/homebox:0.14.2-rootless container_name: homebox restart: unless-stopped environment: diff --git a/apps/homebridge/config.json b/apps/homebridge/config.json index 7664b8cb..7a922adc 100644 --- a/apps/homebridge/config.json +++ b/apps/homebridge/config.json @@ -12,5 +12,7 @@ "author": "ArneNaessens", "source": "https://github.com/homebridge/homebridge", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/homepage/config.json b/apps/homepage/config.json index 3649b13e..ca6f7fea 100644 --- a/apps/homepage/config.json +++ b/apps/homepage/config.json @@ -4,8 +4,8 @@ "available": true, "exposable": true, "port": 8756, - "tipi_version": 17, - "version": "0.9.5", + "tipi_version": 21, + "version": "0.9.9", "id": "homepage", "categories": ["utilities"], "description": "A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages.", @@ -13,5 +13,7 @@ "author": "gethomepage", "source": "https://github.com/gethomepage/homepage", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725988570000 } diff --git a/apps/homepage/docker-compose.yml b/apps/homepage/docker-compose.yml index 6f60147e..a6a21833 100644 --- a/apps/homepage/docker-compose.yml +++ b/apps/homepage/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: homepage: - image: ghcr.io/gethomepage/homepage:v0.9.5 + image: ghcr.io/gethomepage/homepage:v0.9.9 container_name: homepage restart: unless-stopped ports: diff --git a/apps/immich/config.json b/apps/immich/config.json index 8d4b77ed..3551ce11 100644 --- a/apps/immich/config.json +++ b/apps/immich/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8128, "id": "immich", - "tipi_version": 98, - "version": "1.110.0", + "tipi_version": 104, + "version": "1.115.0", "categories": ["data", "photography"], "description": "Photo and video backup solution directly from your mobile phone.", "short_desc": "Photo and video backup solution directly from your mobile phone.", @@ -33,5 +33,7 @@ "env_variable": "IMMICH_TYPESENSE_API_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726211612000 } diff --git a/apps/immich/docker-compose.yml b/apps/immich/docker-compose.yml index 9c3518e2..d72c6fc2 100644 --- a/apps/immich/docker-compose.yml +++ b/apps/immich/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: immich: container_name: immich - image: ghcr.io/immich-app/immich-server:v1.110.0 + image: ghcr.io/immich-app/immich-server:v1.115.0 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload environment: @@ -51,7 +51,7 @@ services: runtipi.managed: true immich-machine-learning: container_name: immich-machine-learning - image: ghcr.io/immich-app/immich-machine-learning:v1.110.0 + image: ghcr.io/immich-app/immich-machine-learning:v1.115.0 volumes: - ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload - ${APP_DATA_DIR}/data/immich-ml-cache:/cache diff --git a/apps/inspircd/config.json b/apps/inspircd/config.json index e95704f5..4adcb04b 100644 --- a/apps/inspircd/config.json +++ b/apps/inspircd/config.json @@ -15,5 +15,7 @@ "website": "https://www.inspircd.org", "exposable": true, "supported_architectures": ["arm64", "amd64"], - "form_fields": [] + "form_fields": [], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/invidious/config.json b/apps/invidious/config.json index 7d455574..44958fe7 100644 --- a/apps/invidious/config.json +++ b/apps/invidious/config.json @@ -6,7 +6,7 @@ "port": 8095, "id": "invidious", "version": "latest", - "tipi_version": 10, + "tipi_version": 11, "categories": ["media", "social"], "description": "Invidious is an open source alternative front-end to YouTube.", "short_desc": "An alternative front-end to YouTube", @@ -21,20 +21,32 @@ "env_variable": "INVIDIOUS_HMAC_KEY" }, { - "type": "text", + "type": "fqdnip", + "label": "Domain", + "hint": "The domain or IP you use to access the instance", + "required": false, + "env_variable": "INVIDIOUS_DOMAIN" + }, + { + "type": "number", "label": "External port", - "hint": "External port for access from proxy", - "placeholder": "80,443", + "hint": "External port for access from proxy (default 8095)", "required": false, + "min": 1, + "max": 65535, + "placeholder": "8095", "env_variable": "INVIDIOUS_EXTERNAL_PORT" }, { "type": "boolean", "label": "https only", - "hint": "Force for access from https only", + "hint": "Force access from HTTPS only", "required": false, + "default": false, "env_variable": "INVIDIOUS_HTTPS_ONLY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/invidious/docker-compose.arm64.yml b/apps/invidious/docker-compose.arm64.yml index 2ea2517a..fa57b077 100644 --- a/apps/invidious/docker-compose.arm64.yml +++ b/apps/invidious/docker-compose.arm64.yml @@ -19,8 +19,8 @@ services: check_tables: true hmac_key: ${INVIDIOUS_HMAC_KEY} use_innertube_for_captions: true - domain: ${APP_DOMAIN} - external_port: ${INVIDIOUS_EXTERNAL_PORT} + domain: ${INVIDIOUS_DOMAIN} + external_port: ${INVIDIOUS_EXTERNAL_PORT:-${APP_PORT}} https_only: ${INVIDIOUS_HTTPS_ONLY} healthcheck: test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1 diff --git a/apps/invidious/docker-compose.yml b/apps/invidious/docker-compose.yml index 820a85ed..493ae0f9 100644 --- a/apps/invidious/docker-compose.yml +++ b/apps/invidious/docker-compose.yml @@ -20,8 +20,8 @@ services: check_tables: true hmac_key: ${INVIDIOUS_HMAC_KEY} use_innertube_for_captions: true - domain: ${APP_DOMAIN} - external_port: ${INVIDIOUS_EXTERNAL_PORT} + domain: ${INVIDIOUS_DOMAIN} + external_port: ${INVIDIOUS_EXTERNAL_PORT:-${APP_PORT}} https_only: ${INVIDIOUS_HTTPS_ONLY} healthcheck: test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1 diff --git a/apps/invoice-ninja/config.json b/apps/invoice-ninja/config.json index 68c93740..d24ce009 100644 --- a/apps/invoice-ninja/config.json +++ b/apps/invoice-ninja/config.json @@ -5,13 +5,14 @@ "available": true, "exposable": true, "id": "invoice-ninja", - "tipi_version": 23, - "version": "5.10.13", + "tipi_version": 34, + "version": "5.10.27", "categories": ["finance"], "description": "Invoice Ninja is an invoicing application which makes sending invoices and receiving payments simple and easy. Our latest version is a clean slate rewrite of our popular invoicing application which builds on the existing feature set and adds a wide range of features and enhancements the community has asked for.", "short_desc": "Invoices, Expenses and Tasks built with Laravel, Flutter and React.", "author": "https://www.invoiceninja.org/", "source": "https://github.com/invoiceninja/invoiceninja", + "website": "https://invoiceninja.com/", "form_fields": [ { "type": "email", @@ -32,11 +33,18 @@ "env_variable": "INVOICE_NINJA_BDD_PASSWORD" }, { - "type": "text", - "label": "Invoice Ninja Application Key (cf. Installation Notice in Readme)", + "type": "password", + "label": "Encryption key - used for encryption / decryption of some datapoints within the application. Backup this key in a secure location. (cf. Installation Notice in Readme)", "required": true, - "env_variable": "INVOICE_NINJA_APP_KEY" + "env_variable": "INVOICE_NINJA_APP_KEY", + "placeholder": "base64:your_encryption_key", + "regex": "base64:[a-zA-Z0-9+/=]+", + "pattern_error": "The encryption key must be a base64 encoded string.", + "min": 51, + "max": 51 } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725243159000 } diff --git a/apps/invoice-ninja/data/nginx/invoice-ninja.conf b/apps/invoice-ninja/data/nginx/invoice-ninja.conf index e2808145..5c14e984 100644 --- a/apps/invoice-ninja/data/nginx/invoice-ninja.conf +++ b/apps/invoice-ninja/data/nginx/invoice-ninja.conf @@ -1,5 +1,6 @@ server { listen 80 default_server; + server_name _; server_tokens off; diff --git a/apps/invoice-ninja/docker-compose.yml b/apps/invoice-ninja/docker-compose.yml index 3586ae56..5c786c18 100644 --- a/apps/invoice-ninja/docker-compose.yml +++ b/apps/invoice-ninja/docker-compose.yml @@ -1,6 +1,6 @@ services: invoice-ninja: - image: invoiceninja/invoiceninja:5.10.13 + image: invoiceninja/invoiceninja:5.10.27 container_name: invoice-ninja restart: unless-stopped user: 1500:1500 @@ -8,6 +8,8 @@ services: - IN_USER_EMAIL=${INVOICE_NINJA_USER_MAIL} - IN_PASSWORD=${INVOICE_NINJA_USER_PASSWORD} - APP_URL=http://invoice-ninja-web + - APP_NAME="Invoice Ninja" + - APP_ENV=production - APP_KEY=${INVOICE_NINJA_APP_KEY} - APP_CIPHER=AES-256-CBC - DB_HOST=invoice-ninja-db @@ -30,7 +32,7 @@ services: labels: runtipi.managed: true invoice-ninja-web: - image: nginx:1.25 + image: nginx:1.27 container_name: invoice-ninja-web restart: unless-stopped volumes: @@ -49,28 +51,28 @@ services: traefik.http.middlewares.invoice-ninja-web-redirect.redirectscheme.scheme: https traefik.http.services.invoice-ninja.loadbalancer.server.port: 80 # Web - traefik.http.routers.invoice-ninja-web-insecure.rule: Host(`${APP_DOMAIN}`) - traefik.http.routers.invoice-ninja-web-insecure.entrypoints: web - traefik.http.routers.invoice-ninja-web-insecure.service: invoice-ninja-web - traefik.http.routers.invoice-ninja-web-insecure.middlewares: invoice-ninja-web-redirect + traefik.http.routers.invoice-ninja-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.invoice-ninja-insecure.entrypoints: web + traefik.http.routers.invoice-ninja-insecure.service: invoice-ninja + traefik.http.routers.invoice-ninja-insecure.middlewares: invoice-ninja-web-redirect # Websecure - traefik.http.routers.invoice-ninja-web.rule: Host(`${APP_DOMAIN}`) - traefik.http.routers.invoice-ninja-web.entrypoints: websecure - traefik.http.routers.invoice-ninja-web.service: invoice-ninja-web - traefik.http.routers.invoice-ninja-web.tls.certresolver: myresolver + traefik.http.routers.invoice-ninja.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.invoice-ninja.entrypoints: websecure + traefik.http.routers.invoice-ninja.service: invoice-ninja + traefik.http.routers.invoice-ninja.tls.certresolver: myresolver # Local domain - traefik.http.routers.invoice-ninja-web-local-insecure.rule: Host(`invoice-ninja.${LOCAL_DOMAIN}`) - traefik.http.routers.invoice-ninja-web-local-insecure.entrypoints: web - traefik.http.routers.invoice-ninja-web-local-insecure.service: invoice-ninja-web - traefik.http.routers.invoice-ninja-web-local-insecure.middlewares: invoice-ninja-web-redirect + traefik.http.routers.invoice-ninja-local-insecure.rule: Host(`invoice-ninja.${LOCAL_DOMAIN}`) + traefik.http.routers.invoice-ninja-local-insecure.entrypoints: web + traefik.http.routers.invoice-ninja-local-insecure.service: invoice-ninja + traefik.http.routers.invoice-ninja-local-insecure.middlewares: invoice-ninja-web-redirect # Local domain secure - traefik.http.routers.invoice-ninja-web-local.rule: Host(`invoice-ninja.${LOCAL_DOMAIN}`) - traefik.http.routers.invoice-ninja-web-local.entrypoints: websecure - traefik.http.routers.invoice-ninja-web-local.service: invoice-ninja-web - traefik.http.routers.invoice-ninja-web-local.tls: true + traefik.http.routers.invoice-ninja-local.rule: Host(`invoice-ninja.${LOCAL_DOMAIN}`) + traefik.http.routers.invoice-ninja-local.entrypoints: websecure + traefik.http.routers.invoice-ninja-local.service: invoice-ninja + traefik.http.routers.invoice-ninja-local.tls: true runtipi.managed: true invoice-ninja-db: - image: mariadb:10.4 + image: mariadb:10.7 container_name: invoice-ninja-db restart: unless-stopped environment: @@ -90,7 +92,7 @@ services: labels: runtipi.managed: true invoice-ninja-init: - image: bash:5.2.26 + image: bash:5.2.32 container_name: invoice-ninja-init volumes: - ${APP_DATA_DIR}/data:/tmp/data diff --git a/apps/it-tools/config.json b/apps/it-tools/config.json index 61f7b1d2..b2032e8a 100644 --- a/apps/it-tools/config.json +++ b/apps/it-tools/config.json @@ -13,5 +13,7 @@ "author": "CorentinTh", "source": "https://github.com/CorentinTh/it-tools", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/jackett/config.json b/apps/jackett/config.json index 6da61e6c..feb13854 100644 --- a/apps/jackett/config.json +++ b/apps/jackett/config.json @@ -9,12 +9,11 @@ "version": "latest", "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr, SickRage, CouchPotato, Mylar3, Lidarr, DuckieTV, qBittorrent, Nefarious etc.) into tracker-site-specific http queries, parses the html or json response, and then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches.", "short_desc": "API Support for your favorite torrent trackers ", - "categories": [ - "media", - "utilities" - ], + "categories": ["media", "utilities"], "author": "", "source": "https://github.com/Jackett/Jackett", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/jellyfin-vue/config.json b/apps/jellyfin-vue/config.json index ca497226..dd21666a 100644 --- a/apps/jellyfin-vue/config.json +++ b/apps/jellyfin-vue/config.json @@ -13,5 +13,7 @@ "author": "Jellyfin", "source": "https://github.com/jellyfin/jellyfin-vue", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 +} diff --git a/apps/jellyfin/config.json b/apps/jellyfin/config.json index 8039b350..5069a648 100644 --- a/apps/jellyfin/config.json +++ b/apps/jellyfin/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8091, "id": "jellyfin", - "tipi_version": 16, - "version": "10.9.8", + "tipi_version": 19, + "version": "10.9.11", "categories": ["media"], "description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it. We welcome anyone who is interested in joining us in our quest!", "short_desc": "A media server for your home collection", "author": "jellyfin.org", "source": "https://github.com/jellyfin/jellyfin", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725759509000 } diff --git a/apps/jellyfin/docker-compose.yml b/apps/jellyfin/docker-compose.yml index c946e523..aebb380d 100644 --- a/apps/jellyfin/docker-compose.yml +++ b/apps/jellyfin/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: jellyfin: - image: lscr.io/linuxserver/jellyfin:10.9.8 + image: lscr.io/linuxserver/jellyfin:10.9.11 container_name: jellyfin volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/jellyseerr/config.json b/apps/jellyseerr/config.json index 9cf463bb..72ee7061 100644 --- a/apps/jellyseerr/config.json +++ b/apps/jellyseerr/config.json @@ -13,5 +13,7 @@ "author": "Fallenbagel", "source": "https://github.com/Fallenbagel/jellyseerr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/joplin/config.json b/apps/joplin/config.json index e6320cc0..7450684b 100644 --- a/apps/joplin/config.json +++ b/apps/joplin/config.json @@ -5,11 +5,9 @@ "exposable": true, "port": 8099, "id": "joplin", - "tipi_version": 13, - "version": "2.14.2", - "categories": [ - "utilities" - ], + "tipi_version": 14, + "version": "3.0.1", + "categories": ["utilities"], "description": "Default credentials: admin@localhost / admin", "short_desc": "Note taking and to-do application with synchronisation", "author": "https://github.com/laurent22", @@ -24,8 +22,7 @@ "env_variable": "JOPLIN_DB_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724015121000 } diff --git a/apps/joplin/docker-compose.yml b/apps/joplin/docker-compose.yml index bfe47b42..93bbf136 100644 --- a/apps/joplin/docker-compose.yml +++ b/apps/joplin/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: joplin: container_name: joplin - image: florider89/joplin-server:2.14.2 + image: florider89/joplin-server:3.0.1 restart: unless-stopped depends_on: - db-joplin diff --git a/apps/kanboard/config.json b/apps/kanboard/config.json index 4c4f8d39..0329a247 100644 --- a/apps/kanboard/config.json +++ b/apps/kanboard/config.json @@ -5,8 +5,8 @@ "port": 8010, "id": "kanboard", "description": "Kanboard is a free and open source Kanban project management software.", - "tipi_version": 12, - "version": "1.2.38", + "tipi_version": 13, + "version": "1.2.39", "categories": ["development"], "short_desc": "Open Source Kanban Board", "author": "Frédéric Guillot", @@ -20,5 +20,7 @@ "env_variable": "PLUGIN_INSTALLER" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724024764000 } diff --git a/apps/kanboard/docker-compose.yml b/apps/kanboard/docker-compose.yml index 6607bb9c..dfc27c67 100644 --- a/apps/kanboard/docker-compose.yml +++ b/apps/kanboard/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: kanboard: container_name: kanboard - image: kanboard/kanboard:v1.2.38 + image: kanboard/kanboard:v1.2.39 environment: - PLUGIN_INSTALLER=${PLUGIN_INSTALLER} ports: diff --git a/apps/kapowarr/config.json b/apps/kapowarr/config.json index 136d3dd2..3c97fee8 100644 --- a/apps/kapowarr/config.json +++ b/apps/kapowarr/config.json @@ -13,5 +13,7 @@ "author": "Casvt", "source": "https://github.com/Casvt/Kapowarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/kasm-workspaces/config.json b/apps/kasm-workspaces/config.json index 64051985..9ae7d38e 100644 --- a/apps/kasm-workspaces/config.json +++ b/apps/kasm-workspaces/config.json @@ -7,14 +7,14 @@ "description": "Kasm Workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services.", "tipi_version": 3, "version": "1.120.20221218", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "short_desc": "Container streaming platform.", "author": "Kasm", "source": "https://github.com/kasmtech", "website": "https://www.kasmweb.com/", "form_fields": [], "supported_architectures": ["arm64", "amd64"], - "https": true + "https": true, + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/kavita/config.json b/apps/kavita/config.json index 3f01138a..870e7a37 100644 --- a/apps/kavita/config.json +++ b/apps/kavita/config.json @@ -13,5 +13,7 @@ "author": "Kareadita", "source": "https://github.com/Kareadita/Kavita", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/kimai/config.json b/apps/kimai/config.json index 22a74fe3..4b2e40b5 100644 --- a/apps/kimai/config.json +++ b/apps/kimai/config.json @@ -5,7 +5,7 @@ "exposable": true, "id": "kimai", "description": "Kimai is a professional grade time-tracking application, free and open-source. It handles use-cases of freelancers as well as companies with dozens or hundreds of users.", - "tipi_version": 1, + "tipi_version": 2, "version": "fpm-2.1.0-prod", "categories": ["utilities"], "short_desc": "Open source time-tracker", @@ -42,5 +42,7 @@ "env_variable": "KIMAI_ADMINPASS" } ], - "supported_architectures": ["amd64"] -} \ No newline at end of file + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 +} diff --git a/apps/kimai/metadata/logo.jpg b/apps/kimai/metadata/logo.jpg index a560e020..faf31955 100644 Binary files a/apps/kimai/metadata/logo.jpg and b/apps/kimai/metadata/logo.jpg differ diff --git a/apps/kiwix-serve/config.json b/apps/kiwix-serve/config.json index 4b2fc826..ef349d7d 100644 --- a/apps/kiwix-serve/config.json +++ b/apps/kiwix-serve/config.json @@ -7,17 +7,14 @@ "id": "kiwix-serve", "tipi_version": 2, "version": "3.7.0-2", - "categories": [ - "media" - ], + "categories": ["media"], "description": "Kiwix Server is a web server for hosting .zim files", "short_desc": "Kiwix Server is a web server for hosting .zim files", "author": "Kiwix", "source": "https://github.com/kiwix/kiwix-tools/", "website": "https://kiwix.org/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/koillection/config.json b/apps/koillection/config.json index 355a4c26..d3023025 100644 --- a/apps/koillection/config.json +++ b/apps/koillection/config.json @@ -6,8 +6,8 @@ "exposable": true, "id": "koillection", "description": "Koillection is a self-hosted service allowing users to manage any kind of collections.", - "tipi_version": 14, - "version": "1.5.12", + "tipi_version": 15, + "version": "1.5.13", "categories": ["utilities"], "short_desc": "Koillection allow you to manage any kind of collections.", "author": "https://github.com/benjaminjonard", @@ -29,5 +29,7 @@ "max": 30, "env_variable": "KOILLECTION_DB_PASSWORD" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1726160577000 } diff --git a/apps/koillection/docker-compose.yml b/apps/koillection/docker-compose.yml index 0c31c181..5072fea1 100644 --- a/apps/koillection/docker-compose.yml +++ b/apps/koillection/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: koillection: - image: koillection/koillection:1.5.12 + image: koillection/koillection:1.5.13 container_name: koillection restart: unless-stopped ports: diff --git a/apps/kometa/config.json b/apps/kometa/config.json index 21ce6a68..ff12d784 100644 --- a/apps/kometa/config.json +++ b/apps/kometa/config.json @@ -8,17 +8,13 @@ "id": "kometa", "tipi_version": 1, "version": "2.0.2", - "categories": [ - "utilities", - "media" - ], + "categories": ["utilities", "media"], "author": "Kometa-Team", "description": "Update metadata information for items in plex as well as automatically build collections and playlists.", "short_desc": "Overlays, Collections & Playlists for Plex.", "source": "https://github.com/Kometa-Team/Kometa", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 +} diff --git a/apps/komga/config.json b/apps/komga/config.json index f31236fb..60b439cb 100644 --- a/apps/komga/config.json +++ b/apps/komga/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "komga", - "tipi_version": 4, - "version": "1.11.2", + "tipi_version": 8, + "version": "1.13.0", "categories": ["media"], "description": "A media server for your comics, mangas, BDs, magazines and eBooks.", "short_desc": "A media server for your comics, mangas, BDs, magazines and eBooks.", @@ -14,5 +14,7 @@ "source": "https://github.com/gotson/komga", "website": "https://komga.org/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726038221000 } diff --git a/apps/komga/docker-compose.yml b/apps/komga/docker-compose.yml index 23446070..764bf55c 100644 --- a/apps/komga/docker-compose.yml +++ b/apps/komga/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: komga: - image: ghcr.io/gotson/komga:1.11.2 + image: ghcr.io/gotson/komga:1.13.0 container_name: komga volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/libreddit/config.json b/apps/libreddit/config.json index af85ddaf..b3a6220f 100644 --- a/apps/libreddit/config.json +++ b/apps/libreddit/config.json @@ -13,5 +13,7 @@ "author": "spikecodes", "source": "https://github.com/spikecodes/libreddit", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/librephotos/config.json b/apps/librephotos/config.json index 38cf46b1..b812e3c1 100644 --- a/apps/librephotos/config.json +++ b/apps/librephotos/config.json @@ -7,9 +7,7 @@ "id": "librephotos", "tipi_version": 14, "version": "2023w48", - "categories": [ - "photography" - ], + "categories": ["photography"], "description": "Complete photo management service", "short_desc": "Complete photo management service", "author": "Niaz Faridani-Rad", @@ -48,8 +46,7 @@ "env_variable": "LIBREPHOTOS_SECRET_KEY" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/libretranslate/config.json b/apps/libretranslate/config.json index f4165c6a..7453e271 100644 --- a/apps/libretranslate/config.json +++ b/apps/libretranslate/config.json @@ -13,5 +13,7 @@ "author": "LibreTranslate", "source": "https://github.com/LibreTranslate/LibreTranslate", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/lidarr-deemix/config.json b/apps/lidarr-deemix/config.json index 7ad48de0..16112393 100644 --- a/apps/lidarr-deemix/config.json +++ b/apps/lidarr-deemix/config.json @@ -5,15 +5,15 @@ "available": true, "exposable": true, "id": "lidarr-deemix", - "tipi_version": 7, - "version": "1.5.1", - "categories": [ - "media" - ], + "tipi_version": 8, + "version": "1.5.2", + "categories": ["media"], "description": "Lidarr with some muscles thanks to deemix", "short_desc": "Lidarr with some muscles thanks to deemix", "author": "Youegraillot", "source": "https://github.com/youegraillot/lidarr-on-steroids", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724027516000 } diff --git a/apps/lidarr-deemix/docker-compose.yml b/apps/lidarr-deemix/docker-compose.yml index 61df8dd4..9198b385 100644 --- a/apps/lidarr-deemix/docker-compose.yml +++ b/apps/lidarr-deemix/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: lidarr-deemix: - image: youegraillot/lidarr-on-steroids:1.5.1 + image: youegraillot/lidarr-on-steroids:1.5.2 container_name: lidarr-deemix volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/lidarr/config.json b/apps/lidarr/config.json index 46732895..29fdc84b 100644 --- a/apps/lidarr/config.json +++ b/apps/lidarr/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8131, "id": "lidarr", - "tipi_version": 10, - "version": "2.4.3", + "tipi_version": 11, + "version": "2.5.3", "categories": ["media", "music"], "description": "Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", "short_desc": " Looks and smells like Sonarr but made for music.", "author": "lidarr.audio", "source": "https://github.com/Lidarr/Lidarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725294586000 } diff --git a/apps/lidarr/docker-compose.yml b/apps/lidarr/docker-compose.yml index efc1e8ad..22ad9253 100644 --- a/apps/lidarr/docker-compose.yml +++ b/apps/lidarr/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: lidarr: - image: ghcr.io/linuxserver/lidarr:2.4.3 + image: ghcr.io/linuxserver/lidarr:2.5.3 container_name: lidarr environment: - PUID=1000 diff --git a/apps/linkstack/config.json b/apps/linkstack/config.json index 4eaa23c4..216226ee 100644 --- a/apps/linkstack/config.json +++ b/apps/linkstack/config.json @@ -22,5 +22,7 @@ "env_variable": "LINKSTACK_CUSTOM_EMAIL" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/linkwarden/config.json b/apps/linkwarden/config.json index 0f392502..0b937b86 100644 --- a/apps/linkwarden/config.json +++ b/apps/linkwarden/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "linkwarden", - "tipi_version": 21, - "version": "2.6.2", + "tipi_version": 22, + "version": "2.7.1", "categories": ["data"], "description": "A self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.", "short_desc": "A self-hosted, open-source collaborative bookmark manager", @@ -34,5 +34,7 @@ "env_variable": "LINKWARDEN_NEXT_PUBLIC_DISABLE_REGISTRATION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723905334000 } diff --git a/apps/linkwarden/docker-compose.yml b/apps/linkwarden/docker-compose.yml index cb725853..3f7fdfa4 100644 --- a/apps/linkwarden/docker-compose.yml +++ b/apps/linkwarden/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: linkwarden: - image: ghcr.io/linkwarden/linkwarden:v2.6.2 + image: ghcr.io/linkwarden/linkwarden:v2.7.1 container_name: linkwarden environment: - DATABASE_URL=postgresql://tipi:${LINKWARDEN_DB_PASSWORD}@linkwarden-db:5432/linkwarden diff --git a/apps/lobe-chat/config.json b/apps/lobe-chat/config.json index 414d1f86..706df200 100644 --- a/apps/lobe-chat/config.json +++ b/apps/lobe-chat/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "lobe-chat", "description": "LobeChat is an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible (Function Call) plugin system.", - "tipi_version": 212, - "version": "1.7.3", + "tipi_version": 289, + "version": "1.17.7", "categories": ["ai"], "short_desc": "LLM chatbot framework", "author": "https://github.com/lobehub", @@ -39,5 +39,7 @@ "env_variable": "ACCESS_CODE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726507328000 } diff --git a/apps/lobe-chat/docker-compose.yml b/apps/lobe-chat/docker-compose.yml index ef3e0f8a..f33d898d 100644 --- a/apps/lobe-chat/docker-compose.yml +++ b/apps/lobe-chat/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: lobe-chat: container_name: lobe-chat - image: lobehub/lobe-chat:v1.7.3 + image: lobehub/lobe-chat:v1.17.7 environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_PROXY_URL=${OPEANAI_PROXY_URL} diff --git a/apps/lodestone-core/config.json b/apps/lodestone-core/config.json index feabb364..acd88d1c 100644 --- a/apps/lodestone-core/config.json +++ b/apps/lodestone-core/config.json @@ -15,5 +15,7 @@ "source": "https://github.com/Lodestone-Team/lodestone_core", "website": "https://lodestone.cc", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/logto/config.json b/apps/logto/config.json index 2132584e..937e3a12 100644 --- a/apps/logto/config.json +++ b/apps/logto/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "logto", - "tipi_version": 20, - "version": "1.18.0", + "tipi_version": 22, + "version": "1.20.0", "force_expose": true, "categories": ["security"], "description": "Logto is a cost-effective open-source alternative to Auth0.", @@ -28,5 +28,7 @@ "env_variable": "LOGTO_ADMIN_URL" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726285130000 } diff --git a/apps/logto/docker-compose.yml b/apps/logto/docker-compose.yml index 8e5c4434..fa4ad590 100644 --- a/apps/logto/docker-compose.yml +++ b/apps/logto/docker-compose.yml @@ -4,7 +4,7 @@ services: depends_on: logto-db: condition: service_healthy - image: svhd/logto:1.18.0 + image: svhd/logto:1.20.0 container_name: logto entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"] ports: diff --git a/apps/lubelogger/config.json b/apps/lubelogger/config.json new file mode 100644 index 00000000..53e31246 --- /dev/null +++ b/apps/lubelogger/config.json @@ -0,0 +1,175 @@ +{ + "$schema": "../schema.json", + "name": "LubeLogger", + "port": 8054, + "available": true, + "exposable": true, + "id": "lubelogger", + "tipi_version": 5, + "version": "1.3.6", + "dynamic_config": true, + "categories": ["utilities"], + "description": "Self-hosted, open-source, collaborative Vehicle Maintenance and Fuel Mileage Tracker.", + "short_desc": "Vehicle Maintenance and Fuel Mileage Tracker.", + "author": "hargata", + "source": "https://github.com/hargata/lubelog", + "form_fields": [ + { + "type": "text", + "label": "Locale and Language Settings", + "env_variable": "LUBELOGGER_LOCALE", + "default": "en_US.UTF-8", + "required": false, + "hint": "Affect how numbers, currencies, and dates are formatted." + }, + { + "type": "text", + "label": "Allowed File Extensions", + "env_variable": "LUBELOGGER_ALLOWED_FILE_EXTENSIONS", + "default": "pdf", + "required": false, + "hint": "Allowed file extensions for document uploads, use '*' to allow all file types." + }, + { + "type": "text", + "label": "Custom Logo URL", + "env_variable": "LUBELOGGER_CUSTOM_LOGO_URL", + "required": false, + "hint": "Custom Logo URL." + }, + { + "type": "text", + "label": "Message of the Day", + "env_variable": "LUBELOGGER_MOTD", + "required": false, + "hint": "Message of The Day displayed in Login page if configured." + }, + { + "type": "text", + "label": "WebHook URL", + "env_variable": "LUBELOGGER_WEBHOOK_URL", + "required": false, + "hint": "WebHook URL" + }, + { + "type": "text", + "label": "Email > Server", + "env_variable": "LUBELOGGER_EMAIL_SERVER", + "required": false, + "hint": "Email SMTP settings used only for configuring multiple users(to send their registration token and forgot password tokens)." + }, + { + "type": "text", + "label": "Email > From", + "env_variable": "LUBELOGGER_EMAIL_FROM", + "required": false + }, + { + "type": "boolean", + "label": "Email > Use SSL ?", + "env_variable": "LUBELOGGER_EMAIL_USE_SSL", + "required": false + }, + { + "type": "text", + "label": "Email > Port", + "env_variable": "LUBELOGGER_EMAIL_PORT", + "default": "587", + "required": false + }, + { + "type": "text", + "label": "Email > Username", + "env_variable": "LUBELOGGER_EMAIL_USERNAME", + "required": false + }, + { + "type": "text", + "label": "Email > Password", + "env_variable": "LUBELOGGER_EMAIL_PASSWORD", + "required": false + }, + { + "type": "boolean", + "label": "Auth > Enable ?", + "env_variable": "LUBELOGGER_ENABLE_AUTH", + "default": "false", + "required": false, + "hint": "Allows users to configure whether if authentication is enabled via environment variable." + }, + { + "type": "text", + "label": "Auth > Username Hash", + "env_variable": "LUBELOGGER_USERNAME_HASH", + "required": false, + "hint": "SHA256 Hash of the root username." + }, + { + "type": "text", + "label": "Auth > Password Hash", + "env_variable": "LUBELOGGER_PASSWORD_HASH", + "required": false, + "hint": "SHA256 Hash of the root password." + }, + { + "type": "text", + "label": "Auth > OpenID > Name", + "env_variable": "LUBELOGGER_OPENID_NAME", + "required": false, + "hint": "Name of the OpenID Connect Provider" + }, + { + "type": "text", + "label": "Auth > OpenID > Client ID", + "env_variable": "LUBELOGGER_OPENID_CLIENT_ID", + "required": false, + "hint": "Client Id to Authenticate with the Provider" + }, + { + "type": "text", + "label": "Auth > OpenID > Client Secret", + "env_variable": "LUBELOGGER_OPENID_CLIENT_SECRET", + "required": false, + "hint": "Client Secret to Authenticate with the Provider" + }, + { + "type": "text", + "label": "Auth > OpenID > Authorization URL", + "env_variable": "LUBELOGGER_OPENID_AUTH_URL", + "required": false, + "hint": "Authorization URL to the Provider's Login Page" + }, + { + "type": "text", + "label": "Auth > OpenID > Token URL", + "env_variable": "LUBELOGGER_OPENID_TOKEN_URL", + "required": false, + "hint": "URL to retrieve user JWT from the Provider" + }, + { + "type": "text", + "label": "Auth > OpenID > Redirect URL", + "env_variable": "LUBELOGGER_OPENID_REDIRECT_URL", + "required": false, + "hint": "https:///Login/RemoteAuth(must be HTTPS)" + }, + { + "type": "text", + "label": "Auth > OpenID > Scope", + "env_variable": "LUBELOGGER_OPENID_SCOPE", + "required": false, + "hint": "The scope for retrieving the user's email claim(usually it's just 'email')" + }, + { + "type": "boolean", + "label": "Auth > OpenID > Validate State", + "env_variable": "LUBELOGGER_OPENID_VALIDATE_STATE", + "default": "false", + "required": false, + "hint": "true/false(default: false) - whether LubeLogger should validate state." + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1724244178000, + "updated_at": 1724708169000 +} diff --git a/apps/lubelogger/data/config/.gitkeep b/apps/lubelogger/data/config/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/data/.gitkeep b/apps/lubelogger/data/data/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/documents/.gitkeep b/apps/lubelogger/data/documents/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/images/.gitkeep b/apps/lubelogger/data/images/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/init/init-db.sh b/apps/lubelogger/data/init/init-db.sh new file mode 100644 index 00000000..da3bc2a6 --- /dev/null +++ b/apps/lubelogger/data/init/init-db.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE SCHEMA IF NOT EXISTS app AUTHORIZATION ${POSTGRES_USER}; +EOSQL diff --git a/apps/lubelogger/data/keys/.gitkeep b/apps/lubelogger/data/keys/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/log/.gitkeep b/apps/lubelogger/data/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/data/temp/.gitkeep b/apps/lubelogger/data/temp/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/lubelogger/docker-compose.json b/apps/lubelogger/docker-compose.json new file mode 100644 index 00000000..9f307d01 --- /dev/null +++ b/apps/lubelogger/docker-compose.json @@ -0,0 +1,100 @@ +{ + "services": [ + { + "name": "lubelogger", + "image": "ghcr.io/hargata/lubelogger:v1.3.6", + "internalPort": 8080, + "isMain": true, + "volumes": [ + { + "hostPath": "/etc/localtime", + "containerPath": "/etc/localtime", + "readonly": true + }, + { + "hostPath": "${APP_DATA_DIR}/data/config", + "containerPath": "/App/config" + }, + { + "hostPath": "${APP_DATA_DIR}/data/data", + "containerPath": "/App/data" + }, + { + "hostPath": "${APP_DATA_DIR}/data/documents", + "containerPath": "/App/wwwroot/documents" + }, + { + "hostPath": "${APP_DATA_DIR}/data/images", + "containerPath": "/App/wwwroot/images" + }, + { + "hostPath": "${APP_DATA_DIR}/data/log", + "containerPath": "/App/log" + }, + { + "hostPath": "${APP_DATA_DIR}/data/keys", + "containerPath": "/root/.aspnet/DataProtection-Keys" + }, + { + "hostPath": "${APP_DATA_DIR}/data/temp", + "containerPath": "/App/wwwroot/temp" + } + ], + "environment": { + "TZ": "${TZ}", + "LOGGING__LOGLEVEL__DEFAULT": "Error", + "LC_ALL": "${LUBELOGGER_LOCALE:-en_US.UTF-8}", + "LANG": "${LUBELOGGER_LOCALE:-en_US.UTF-8}", + "POSTGRES_CONNECTION": "Host='lubelogger-db:5432;Username=tipi;Password=tipi;Database=lubelogger;", + "EnableAuth": "${LUBELOGGER_ENABLE_AUTH:-false}", + "UserNameHash": "${LUBELOGGER_USERNAME_HASH}", + "UserPasswordHash": "${LUBELOGGER_PASSWORD_HASH}", + "LUBELOGGER_ALLOWED_FILE_EXTENSIONS": "${LUBELOGGER_ALLOWED_FILE_EXTENSIONS:-*}", + "LUBELOGGER_LOGO_URL": "${LUBELOGGER_CUSTOM_LOGO_URL}", + "LUBELOGGER_MOTD": "${LUBELOGGER_MOTD}", + "LUBELOGGER_WEBHOOK": "${LUBELOGGER_WEBHOOK_URL}", + "MailConfig__EmailServer": "${LUBELOGGER_EMAIL_SERVER}", + "MailConfig__EmailFrom": "${LUBELOGGER_EMAIL_FROM}", + "MailConfig__UseSSL": "${LUBELOGGER_EMAIL_USE_SSL:-false}", + "MailConfig__Port": "${LUBELOGGER_EMAIL_PORT:-587}", + "MailConfig__Username": "${LUBELOGGER_EMAIL_USERNAME}", + "MailConfig__Password": "${LUBELOGGER_EMAIL_PASSWORD}", + "OpenIDConfig__Name": "${LUBELOGGER_OPENID_NAME}", + "OpenIDConfig__ClientId": "${LUBELOGGER_OPENID_CLIENT_ID}", + "OpenIDConfig__ClientSecret": "${LUBELOGGER_OPENID_CLIENT_SECRET}", + "OpenIDConfig__AuthURL": "${LUBELOGGER_OPENID_AUTH_URL}", + "OpenIDConfig__TokenURL": "${LUBELOGGER_OPENID_TOKEN_URL}", + "OpenIDConfig__RedirectURL": "${LUBELOGGER_OPENID_REDIRECT_URL}", + "OpenIDConfig__Scope": "${LUBELOGGER_OPENID_SCOPE}", + "OpenIDConfig__ValidateState": "${LUBELOGGER_OPENID_VALIDATE_STATE:-false}" + } + }, + { + "name": "lubelogger-db", + "image": "postgres:16.4-alpine", + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/init/init-db.sh", + "containerPath": "/docker-entrypoint-initdb.d/init-db.sh", + "readonly": true + }, + { + "hostPath": "${APP_DATA_DIR}/data/postgres", + "containerPath": "/var/lib/postgresql/data" + } + ], + "environment": { + "TZ": "${TZ}", + "POSTGRES_DB": "lubelogger", + "POSTGRES_USER": "tipi", + "POSTGRES_PASSWORD": "tipi" + }, + "healthCheck": { + "test": ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"], + "retries": 3, + "interval": "30s", + "timeout": "10s" + } + } + ] +} diff --git a/apps/lubelogger/docker-compose.yml b/apps/lubelogger/docker-compose.yml new file mode 100644 index 00000000..9c2b2bdc --- /dev/null +++ b/apps/lubelogger/docker-compose.yml @@ -0,0 +1,89 @@ +services: + lubelogger: + image: ghcr.io/hargata/lubelogger:v1.3.6 + container_name: lubelogger + environment: + - TZ=${TZ} + - LOGGING__LOGLEVEL__DEFAULT=Error + - LC_ALL=${LUBELOGGER_LOCALE:-en_US.UTF-8} + - LANG=${LUBELOGGER_LOCALE:-en_US.UTF-8} + - POSTGRES_CONNECTION=Host=lubelogger-db:5432;Username=tipi;Password=tipi;Database=lubelogger; + - EnableAuth=${LUBELOGGER_ENABLE_AUTH:-false} + - UserNameHash=${LUBELOGGER_USERNAME_HASH} + - UserPasswordHash=${LUBELOGGER_PASSWORD_HASH} + - LUBELOGGER_ALLOWED_FILE_EXTENSIONS=${LUBELOGGER_ALLOWED_FILE_EXTENSIONS:-*} + - LUBELOGGER_LOGO_URL=${LUBELOGGER_CUSTOM_LOGO_URL} + - LUBELOGGER_MOTD=${LUBELOGGER_MOTD} + - LUBELOGGER_WEBHOOK=${LUBELOGGER_WEBHOOK_URL} + - MailConfig__EmailServer=${LUBELOGGER_EMAIL_SERVER} + - MailConfig__EmailFrom=${LUBELOGGER_EMAIL_FROM} + - MailConfig__UseSSL=${LUBELOGGER_EMAIL_USE_SSL:-false} + - MailConfig__Port=${LUBELOGGER_EMAIL_PORT:-587} + - MailConfig__Username=${LUBELOGGER_EMAIL_USERNAME} + - MailConfig__Password=${LUBELOGGER_EMAIL_PASSWORD} + - OpenIDConfig__Name=${LUBELOGGER_OPENID_NAME} + - OpenIDConfig__ClientId=${LUBELOGGER_OPENID_CLIENT_ID} + - OpenIDConfig__ClientSecret=${LUBELOGGER_OPENID_CLIENT_SECRET} + - OpenIDConfig__AuthURL=${LUBELOGGER_OPENID_AUTH_URL} + - OpenIDConfig__TokenURL=${LUBELOGGER_OPENID_TOKEN_URL} + - OpenIDConfig__RedirectURL=${LUBELOGGER_OPENID_REDIRECT_URL} + - OpenIDConfig__Scope=${LUBELOGGER_OPENID_SCOPE} + - OpenIDConfig__ValidateState=${LUBELOGGER_OPENID_VALIDATE_STATE:-false} + restart: unless-stopped + ports: + - ${APP_PORT}:8080 + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/data/config:/App/config + - ${APP_DATA_DIR}/data/data:/App/data + - ${APP_DATA_DIR}/data/documents:/App/wwwroot/documents + - ${APP_DATA_DIR}/data/images:/App/wwwroot/images + - ${APP_DATA_DIR}/data/log:/App/log + - ${APP_DATA_DIR}/data/keys:/root/.aspnet/DataProtection-Keys + - ${APP_DATA_DIR}/data/temp:/App/wwwroot/temp + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.lubelogger-web-redirect.redirectscheme.scheme: https + traefik.http.services.lubelogger.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.lubelogger-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.lubelogger-insecure.entrypoints: web + traefik.http.routers.lubelogger-insecure.service: lubelogger + traefik.http.routers.lubelogger-insecure.middlewares: lubelogger-web-redirect + # Websecure + traefik.http.routers.lubelogger.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.lubelogger.entrypoints: websecure + traefik.http.routers.lubelogger.service: lubelogger + traefik.http.routers.lubelogger.tls.certresolver: myresolver + # Local domain + traefik.http.routers.lubelogger-local-insecure.rule: Host(`lubelogger.${LOCAL_DOMAIN}`) + traefik.http.routers.lubelogger-local-insecure.entrypoints: web + traefik.http.routers.lubelogger-local-insecure.service: lubelogger + traefik.http.routers.lubelogger-local-insecure.middlewares: lubelogger-web-redirect + # Local domain secure + traefik.http.routers.lubelogger-local.rule: Host(`lubelogger.${LOCAL_DOMAIN}`) + traefik.http.routers.lubelogger-local.entrypoints: websecure + traefik.http.routers.lubelogger-local.service: lubelogger + traefik.http.routers.lubelogger-local.tls: true + runtipi.managed: true + lubelogger-db: + container_name: lubelogger-db + image: postgres:16.4-alpine + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/init/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + environment: + TZ: ${TZ} + POSTGRES_DB: lubelogger + POSTGRES_USER: tipi + POSTGRES_PASSWORD: tipi + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] + networks: + - tipi_main_network + labels: + runtipi.managed: true \ No newline at end of file diff --git a/apps/lubelogger/metadata/description.md b/apps/lubelogger/metadata/description.md new file mode 100644 index 00000000..78409a97 --- /dev/null +++ b/apps/lubelogger/metadata/description.md @@ -0,0 +1,42 @@ +![image](https://github.com/hargata/lubelog/assets/155338622/545debcd-d80a-44da-b892-4c652ab0384a) + +Self-Hosted, Open-Source, Web-Based Vehicle Maintenance and Fuel Mileage Tracker + +Website: https://lubelogger.com + +## Why +Because nobody should have to deal with a homemade spreadsheet or a shoebox full of receipts when it comes to vehicle maintenance. + +## Showcase +[Promotional Brochure](https://lubelogger.com/brochure.pdf) + +[Screenshots](/docs/screenshots.md) + +## Demo +Try it out before you download it! The live demo resets every 20 minutes. + +[Live Demo](https://demo.lubelogger.com) Login using username "test" and password "1234" + +### Need Help? +[Documentation](https://docs.lubelogger.com/) + +[Troubleshooting Guide](https://docs.lubelogger.com/Troubleshooting) + +[Search Existing Issues](https://github.com/hargata/lubelog/issues) + +## Dependencies +- [Bootstrap](https://github.com/twbs/bootstrap) +- [LiteDB](https://github.com/mbdavid/litedb) +- [Npgsql](https://github.com/npgsql/npgsql) +- [Bootstrap-DatePicker](https://github.com/uxsolutions/bootstrap-datepicker) +- [SweetAlert2](https://github.com/sweetalert2/sweetalert2) +- [CsvHelper](https://github.com/JoshClose/CsvHelper) +- [Chart.js](https://github.com/chartjs/Chart.js) +- [Drawdown](https://github.com/adamvleggett/drawdown) +- [MailKit](https://github.com/jstedfast/MailKit) + +## License +MIT + +## Support +Support this project by [Subscribing on Patreon](https://patreon.com/LubeLogger) or [Making a Donation](https://buy.stripe.com/aEU9Egc8DdMc9bO144) \ No newline at end of file diff --git a/apps/lubelogger/metadata/logo.jpg b/apps/lubelogger/metadata/logo.jpg new file mode 100644 index 00000000..6e9bf78f Binary files /dev/null and b/apps/lubelogger/metadata/logo.jpg differ diff --git a/apps/maintainerr/config.json b/apps/maintainerr/config.json index c850110b..858176b1 100644 --- a/apps/maintainerr/config.json +++ b/apps/maintainerr/config.json @@ -4,13 +4,15 @@ "exposable": true, "port": 8030, "id": "maintainerr", - "tipi_version": 5, - "version": "2.0.4", + "tipi_version": 9, + "version": "2.1.2", "categories": ["media", "utilities"], "description": "Maintainerr will manage the storage space on your plex server, launching automated actions to delete your files.", "short_desc": "Maintainerr will manage the storage space on your plex server, launching automated actions to delete your files.", "author": "jorenn92", "source": "https://github.com/jorenn92/Maintainerr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726222634000 } diff --git a/apps/maintainerr/docker-compose.yml b/apps/maintainerr/docker-compose.yml index ec356cf6..4c5e9088 100644 --- a/apps/maintainerr/docker-compose.yml +++ b/apps/maintainerr/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: maintainerr: - image: ghcr.io/jorenn92/maintainerr:2.0.4 # or jorenn92/maintainerr:1.7.1 + image: ghcr.io/jorenn92/maintainerr:2.1.2 # or jorenn92/maintainerr:1.7.1 container_name: maintainerr # user: 1000:1000 # only use this with release 2.0 and up volumes: diff --git a/apps/maintainerr/metadata/logo.jpg b/apps/maintainerr/metadata/logo.jpg index 6b0f6f57..53b6cef8 100644 Binary files a/apps/maintainerr/metadata/logo.jpg and b/apps/maintainerr/metadata/logo.jpg differ diff --git a/apps/mastodon/config.json b/apps/mastodon/config.json index 974ff4ee..1f7d138a 100644 --- a/apps/mastodon/config.json +++ b/apps/mastodon/config.json @@ -7,8 +7,8 @@ "force_expose": true, "generate_vapid_keys": true, "id": "mastodon", - "tipi_version": 20, - "version": "4.2.10", + "tipi_version": 22, + "version": "4.2.12", "categories": ["social"], "description": "Your self-hosted, globally interconnected microblogging community", "short_desc": "Your self-hosted, globally interconnected microblogging community", @@ -91,5 +91,7 @@ "env_variable": "MASTODON_LOCAL_DOMAIN" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724069530000 } diff --git a/apps/mastodon/docker-compose.yml b/apps/mastodon/docker-compose.yml index cbd43f87..f1d66475 100644 --- a/apps/mastodon/docker-compose.yml +++ b/apps/mastodon/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: mastodon: container_name: mastodon - image: lscr.io/linuxserver/mastodon:4.2.10 + image: lscr.io/linuxserver/mastodon:4.2.12 ports: - 8209:80 - ${APP_PORT}:443 diff --git a/apps/matrix-conduit/config.json b/apps/matrix-conduit/config.json index ef124b17..e0c59492 100644 --- a/apps/matrix-conduit/config.json +++ b/apps/matrix-conduit/config.json @@ -7,7 +7,7 @@ "force_expose": true, "no_gui": true, "id": "matrix-conduit", - "tipi_version": 6, + "tipi_version": 7, "version": "0.8.0", "categories": ["social"], "description": "Conduit is a fast Matrix homeserver that’s easy to set up and just works. You can install it on a mini-computer like the Raspberry Pi to host Matrix for your family, friends or company.", @@ -69,5 +69,7 @@ "env_variable": "TURN_SECRET" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/matrix-conduit/metadata/logo.jpg b/apps/matrix-conduit/metadata/logo.jpg index ad3f78a2..af251f9a 100644 Binary files a/apps/matrix-conduit/metadata/logo.jpg and b/apps/matrix-conduit/metadata/logo.jpg differ diff --git a/apps/matter-server/config.json b/apps/matter-server/config.json index 55a5c878..63870b7d 100644 --- a/apps/matter-server/config.json +++ b/apps/matter-server/config.json @@ -6,13 +6,15 @@ "no_gui": true, "port": 9997, "id": "matter-server", - "tipi_version": 9, - "version": "6.4.0", + "tipi_version": 11, + "version": "6.5.1", "categories": ["utilities", "automation"], "author": "OpenHomeFoundation", "description": "This project implements a Matter Controller Server over WebSockets using the official Matter (formerly CHIP) SDK as a base and provides both a server and client implementation.", "short_desc": "Interact with Matter. Works with HA !", "source": "https://github.com/home-assistant-libs/python-matter-server", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726160439000 } diff --git a/apps/matter-server/docker-compose.yml b/apps/matter-server/docker-compose.yml index d3c8bade..1fbb0ecf 100644 --- a/apps/matter-server/docker-compose.yml +++ b/apps/matter-server/docker-compose.yml @@ -1,6 +1,6 @@ services: matter-server: - image: ghcr.io/home-assistant-libs/python-matter-server:6.4.0 + image: ghcr.io/home-assistant-libs/python-matter-server:6.5.1 container_name: matter-server restart: unless-stopped network_mode: host diff --git a/apps/mdns-repeater/config.json b/apps/mdns-repeater/config.json index 6e806a2d..ea766da2 100644 --- a/apps/mdns-repeater/config.json +++ b/apps/mdns-repeater/config.json @@ -8,10 +8,7 @@ "id": "mdns-repeater", "tipi_version": 2, "version": "latest", - "categories": [ - "utilities", - "automation" - ], + "categories": ["utilities", "automation"], "author": "angelnu", "description": "This program re-broadcast mDNS packets from one interface to other interfaces.", "short_desc": "Re-broadcast mDNS packets.", @@ -32,8 +29,7 @@ "env_variable": "MDNS_DOCKER_NIC" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 +} diff --git a/apps/mealie-1/config.json b/apps/mealie-1/config.json index 227d6459..c3fba632 100644 --- a/apps/mealie-1/config.json +++ b/apps/mealie-1/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "mealie-1", - "tipi_version": 7, - "version": "1.10.2", + "tipi_version": 9, + "version": "1.12.0", "description": "Mealie is a self-hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications. Default username / password is changeme@email.com / MyPassword", "short_desc": "Mealie is a self-hosted recipe manager and meal planner.", "author": "hay-kot", @@ -19,5 +19,7 @@ "env_variable": "MEALIE_ALLOW_SIGNUP" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724244328000 } diff --git a/apps/mealie-1/docker-compose.yml b/apps/mealie-1/docker-compose.yml index 297dffef..7734e1ee 100644 --- a/apps/mealie-1/docker-compose.yml +++ b/apps/mealie-1/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: mealie-1: container_name: mealie-1 - image: ghcr.io/mealie-recipes/mealie:v1.10.2 + image: ghcr.io/mealie-recipes/mealie:v1.12.0 restart: unless-stopped ports: - ${APP_PORT}:9000 diff --git a/apps/mealie/config.json b/apps/mealie/config.json index 15cf3589..8800d683 100644 --- a/apps/mealie/config.json +++ b/apps/mealie/config.json @@ -14,5 +14,7 @@ "categories": [], "source": "https://github.com/hay-kot/mealie", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/memos/config.json b/apps/memos/config.json index 17254d5e..4a9d04b9 100644 --- a/apps/memos/config.json +++ b/apps/memos/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 5230, "id": "memos", - "tipi_version": 33, - "version": "0.22.4", + "tipi_version": 34, + "version": "0.22.5", "categories": ["utilities"], "description": "Memo hub for knowledge management and collaboration.", "short_desc": "Memo hub for knowledge management and collaboration.", @@ -14,5 +14,7 @@ "website": "https://usememos.com/", "source": "https://github.com/usememos/memos", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725410453000 } diff --git a/apps/memos/docker-compose.yml b/apps/memos/docker-compose.yml index 573ed979..85363017 100644 --- a/apps/memos/docker-compose.yml +++ b/apps/memos/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: memos: - image: neosmemo/memos:0.22.4 + image: neosmemo/memos:0.22.5 container_name: memos volumes: - ${APP_DATA_DIR}/memos:/var/opt/memos diff --git a/apps/metube/config.json b/apps/metube/config.json index 97bd65ea..58559be1 100644 --- a/apps/metube/config.json +++ b/apps/metube/config.json @@ -13,5 +13,7 @@ "author": "alexta69", "source": "https://github.com/alexta69/metube", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/mind/config.json b/apps/mind/config.json index 801ad651..9ec30290 100644 --- a/apps/mind/config.json +++ b/apps/mind/config.json @@ -7,16 +7,13 @@ "id": "mind", "tipi_version": 8, "version": "1.4.0", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "A simple self hosted reminder platform that uses push to send notifications to your device. Set the reminder and forget about it!", "short_desc": "A simple self hosted reminder platform that uses push to send notifications to your device.", "author": "https://github.com/Casvt", "source": "https://github.com/Casvt/MIND", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/minecraft-server/config.json b/apps/minecraft-server/config.json index ae975e30..6843d9ea 100644 --- a/apps/minecraft-server/config.json +++ b/apps/minecraft-server/config.json @@ -23,5 +23,7 @@ "env_variable": "MC_VERSION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/minio/config.json b/apps/minio/config.json index d5673a48..8186ed68 100644 --- a/apps/minio/config.json +++ b/apps/minio/config.json @@ -36,5 +36,7 @@ "env_variable": "MINIO_API_URL" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/mixpost-pro/config.json b/apps/mixpost-pro/config.json index f7550465..c61379a0 100644 --- a/apps/mixpost-pro/config.json +++ b/apps/mixpost-pro/config.json @@ -40,5 +40,7 @@ "env_variable": "MIXPOST_LICENSE_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/mixpost/config.json b/apps/mixpost/config.json index 642bf28c..1d07070f 100644 --- a/apps/mixpost/config.json +++ b/apps/mixpost/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "mixpost", - "tipi_version": 13, - "version": "1.7.1", + "tipi_version": 14, + "version": "1.7.2", "categories": ["social"], "description": "Mixpost it's the coolest Self-hosted social media management software.", "short_desc": "Self-hosted social media management. Schedule and organize your social content. ", @@ -34,5 +34,7 @@ "env_variable": "MIXPOST_APP_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723905317000 } diff --git a/apps/mixpost/docker-compose.yml b/apps/mixpost/docker-compose.yml index 55e50c9e..d7c8d251 100644 --- a/apps/mixpost/docker-compose.yml +++ b/apps/mixpost/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: mixpost: - image: inovector/mixpost:v1.7.1 + image: inovector/mixpost:v1.7.2 container_name: mixpost environment: - APP_NAME='Mixpost' diff --git a/apps/moneroblock/config.json b/apps/moneroblock/config.json index 65e2a87b..2c59ae7a 100644 --- a/apps/moneroblock/config.json +++ b/apps/moneroblock/config.json @@ -23,5 +23,7 @@ "env_variable": "DAEMON_ADDRESS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/monerod/config.json b/apps/monerod/config.json index eee562be..f8c6e819 100644 --- a/apps/monerod/config.json +++ b/apps/monerod/config.json @@ -6,11 +6,9 @@ "no_gui": true, "port": 18080, "id": "monerod", - "tipi_version": 10, - "version": "0.18.3.3", - "categories": [ - "finance" - ], + "tipi_version": 11, + "version": "0.18.3.4", + "categories": ["finance"], "description": "A device on the Internet running the Monero software, with a full copy of the Monero blockchain, actively assisting the Monero network. This is a simple and straightforward Dockerized monerod built from source and exposing standard ports. Please note that running this requires >50GB of free disk space and is best run on solid-state (SSD) storage.", "short_desc": "Monero is a private, decentralized cryptocurrency that keeps your finances confidential and secure.", "author": "sethforprivacy", @@ -18,8 +16,7 @@ "form_fields": [], "uid": 1000, "gid": 1000, - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724439914000 } diff --git a/apps/monerod/docker-compose.yml b/apps/monerod/docker-compose.yml index 332612a8..c75bb8a4 100644 --- a/apps/monerod/docker-compose.yml +++ b/apps/monerod/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: monerod: - image: sethsimmons/simple-monerod:v0.18.3.3 + image: sethsimmons/simple-monerod:v0.18.3.4 dns: - ${DNS_IP} ports: diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json index 7633b693..cd60eb4b 100644 --- a/apps/mongo-express/config.json +++ b/apps/mongo-express/config.json @@ -6,10 +6,7 @@ "short_desc": "Web-based MongoDB admin interface, written with Node.js and Express", "author": "MongoDB", "port": 8087, - "categories": [ - "development", - "data" - ], + "categories": ["development", "data"], "description": "A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3", "tipi_version": 3, "version": "1.0.2", @@ -57,8 +54,7 @@ "env_variable": "ME_CONFIG_BASICAUTH_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/mongo/config.json b/apps/mongo/config.json index 75432568..98f774c9 100644 --- a/apps/mongo/config.json +++ b/apps/mongo/config.json @@ -6,10 +6,7 @@ "short_desc": "MongoDB is an open-source NoSQL database", "author": "MongoDB", "port": 27017, - "categories": [ - "development", - "data" - ], + "categories": ["development", "data"], "description": "MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.", "tipi_version": 2, "version": "7.0.2", @@ -19,21 +16,23 @@ "no_gui": true, "form_fields": [ { - "type": "text", - "label": "Admin Username", - "max": 50, - "min": 3, - "required": true, - "env_variable": "MONGO_INITDB_ROOT_USERNAME" + "type": "text", + "label": "Admin Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "MONGO_INITDB_ROOT_USERNAME" }, { - "type": "password", - "label": "Admin Password", - "max": 50, - "min": 10, - "required": true, - "env_variable": "MONGO_INITDB_ROOT_PASSWORD" + "type": "password", + "label": "Admin Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "MONGO_INITDB_ROOT_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/monica/config.json b/apps/monica/config.json index 9ae6dcb1..5846c474 100644 --- a/apps/monica/config.json +++ b/apps/monica/config.json @@ -30,5 +30,7 @@ "env_variable": "MONICA_APP_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/moodist/config.json b/apps/moodist/config.json index 62587f8f..a5281822 100644 --- a/apps/moodist/config.json +++ b/apps/moodist/config.json @@ -13,5 +13,7 @@ "author": "remvze", "source": "https://github.com/remvze/moodist", "form_fields": [], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/movary/config.json b/apps/movary/config.json index a82f38c6..d888d9cc 100644 --- a/apps/movary/config.json +++ b/apps/movary/config.json @@ -4,9 +4,11 @@ "port": 8155, "available": true, "exposable": true, + "uid": 1000, + "gid": 1000, "id": "movary", - "tipi_version": 31, - "version": "0.62.1", + "tipi_version": 34, + "version": "0.62.2", "categories": ["media"], "description": "Movary is a self-hosted web application to track and rate your watched movies (like a digital movie diary). You can import/export your history and ratings from/to third parties like trakt.tv or letterboxd.com, scrobble your watches via Plex and Jellyfin and more.", "short_desc": "Movary is a self-hosted web application to track and rate your watched movies. ", @@ -27,7 +29,7 @@ }, { "type": "random", - "label": "Plex Identifier", + "label": "Jellyfin Identifier", "min": 32, "env_variable": "MOVARY_JELLYFIN_IDENTIFIER" }, @@ -39,5 +41,7 @@ "env_variable": "MOVARY_TMDB_API_KEY" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/movary/docker-compose.yml b/apps/movary/docker-compose.yml index 0295fbbe..fa3869df 100644 --- a/apps/movary/docker-compose.yml +++ b/apps/movary/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: movary: - image: leepeuker/movary:0.62.1 + image: leepeuker/movary:0.62.2 container_name: movary environment: - TMDB_API_KEY=${MOVARY_TMDB_API_KEY} @@ -16,6 +16,7 @@ services: - APPLICATION_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - PLEX_IDENTIFIER=${MOVARY_PLEX_IDENTIFIER} - JELLYFIN_DEVICE_ID=${MOVARY_JELLYFIN_IDENTIFIER} + user: "1000:1000" restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/movary:/app/storage @@ -53,7 +54,7 @@ services: traefik.http.routers.movary-local.tls: true runtipi.managed: true movary-migration: - image: leepeuker/movary:0.62.1 + image: leepeuker/movary:0.62.2 container_name: movary-migration command: php bin/console.php database:migration:migrate environment: @@ -68,6 +69,7 @@ services: - APPLICATION_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - PLEX_IDENTIFIER=${MOVARY_PLEX_IDENTIFIER} - JELLYFIN_DEVICE_ID=${MOVARY_JELLYFIN_IDENTIFIER} + user: "1000:1000" volumes: - ${APP_DATA_DIR}/data/movary:/app/storage depends_on: diff --git a/apps/movary/metadata/description.md b/apps/movary/metadata/description.md index c6e279d9..3ac8d9f7 100644 --- a/apps/movary/metadata/description.md +++ b/apps/movary/metadata/description.md @@ -1,9 +1,70 @@ -# Movary +

+ +
+ Movary +
+

-Movary is a self-hosted web application to track and rate your watched movies (like a digital movie diary). You can import/export your history and ratings from/to third parties like trakt.tv or letterboxd.com, scrobble your watches via Plex and Jellyfin and more. +

The central hub to track, rate and explore your movie watch history

-Demo installation can be found [here](https://demo.movary.org/) (login email `testUser@movary.org` and password `testUser`). +

+ + + + + +

-[![Movary Dashboard Example](https://camo.githubusercontent.com/dfa65cd4f21099481b5fc47832cc56dfc3dc3d45ee559238d2e5d6fa242b256e/68747470733a2f2f692e696d6775722e636f6d2f317176685746682e706e67)](https://camo.githubusercontent.com/dfa65cd4f21099481b5fc47832cc56dfc3dc3d45ee559238d2e5d6fa242b256e/68747470733a2f2f692e696d6775722e636f6d2f317176685746682e706e67) +

+Website • +Installation • +Docs • +Api • +Demo +

-View More Info [here](https://github.com/leepeuker/movary/blob/main/README.md#about)! \ No newline at end of file +Movary is a free and open source web application to track, rate and explore your movie watch history. +You can host it for yourself and others. +It offers detailed statistics, +third-party integrations for importing and exporting your history from platforms like Trakt, Letterboxd, or Netflix, +automated play tracking for Plex, Jellyfin or Emby and much [more](#features). + +![Movary Dashboard Example](https://raw.githubusercontent.com/leepeuker/movary/main/docs/images/dashboard-screenshot.png) + + +**Disclaimer:** This project is still in an experimental (but usable) state. +There are plans to add more and improve existing features before creating the 1.0 Release, +which can lead to sudden breaking changes from time to time, so keep the release notes in mind when updating until then. + +## Features + +- Movie watch history: Collect and manage your watch history and ratings +- Statistics: Analyze your movie watching behavior and history, like e.g. most watched actors/directors/genres/languages/years +- Customization: You decide how your dashboard should look like, what format to use when displaying dates and more +- Third party integrations: Import and export your history and ratings from/to platforms like Trakt, Letterboxd, or Netflix +- Scrobbler: Automatically add new plays and ratings from Plex, Jellyfin or Emby +- Own your personal data: Users can decide who can see their data and export/import/delete the data and their accounts at any time +- Locally stored metadata: Using e.g. themoviedb.org and imdb as sources, all metadata movary uses for your history entries can be stored locally +- PWA: Can be installed as a smartphone app ([How to install PWAs in chrome](https://support.google.com/chrome/answer/9658361?hl=en&co=GENIE.Platform%3DAndroid&oco=1)) +- User-management: Use Movary alone or with others +- Completely free, no ads, no tracking and open source! :) + +## Demo + +A demo installation can be found [here](https://demo.movary.org/) (User: `testUser@movary.org` Password:`testUser`). + +## Documentation + +The documentation for the latest release is located [here](https://docs.movary.org). Please report missing or wrong information. + +## Support + +- Please report bugs and request features/changes via [Github issues](https://github.com/leepeuker/movary/issues/new/choose) +- Ask for help or discuss related topics via [Github discussions](https://github.com/leepeuker/movary/discussions) +- Join our [Discord server](https://discord.gg/KbcSqggrgW) + +## Contributors + +* [@leepeuker](https://github.com/leepeuker) as Lee Peuker +* [@JVT038](https://github.com/JVT038) as JVT038 +* [@pbogre](https://github.com/pbogre) as Pietro Bonaldo Gregori \ No newline at end of file diff --git a/apps/movary/metadata/logo.jpg b/apps/movary/metadata/logo.jpg index c22d78ec..52bd8cd5 100644 Binary files a/apps/movary/metadata/logo.jpg and b/apps/movary/metadata/logo.jpg differ diff --git a/apps/mqttx/config.json b/apps/mqttx/config.json index 8ddb05b9..5056a042 100644 --- a/apps/mqttx/config.json +++ b/apps/mqttx/config.json @@ -12,5 +12,7 @@ "author": "EMQX", "source": "https://github.com/emqx/MQTTX/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/mstream/config.json b/apps/mstream/config.json index 47f22027..77289155 100644 --- a/apps/mstream/config.json +++ b/apps/mstream/config.json @@ -13,5 +13,7 @@ "author": "IrosTheBeggar", "source": "https://github.com/IrosTheBeggar/mStream", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/mylar3/config.json b/apps/mylar3/config.json index 03758523..eaf3f037 100644 --- a/apps/mylar3/config.json +++ b/apps/mylar3/config.json @@ -13,5 +13,7 @@ "author": "Mylar3", "source": "https://github.com/mylar3/mylar3", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/n8n-1/config.json b/apps/n8n-1/config.json index 7d814e2b..17757fcd 100644 --- a/apps/n8n-1/config.json +++ b/apps/n8n-1/config.json @@ -27,5 +27,7 @@ "env_variable": "N8N_NR_DB_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/n8n-1/docker-compose.yml b/apps/n8n-1/docker-compose.yml index d793e25a..ea354017 100644 --- a/apps/n8n-1/docker-compose.yml +++ b/apps/n8n-1/docker-compose.yml @@ -75,7 +75,7 @@ services: labels: runtipi.managed: true n8n-init: - image: bash:5.2.26 + image: bash:5.2.32 command: ['sh', '-c', 'chown -R 1000:1000 /home/node/.n8n'] volumes: - ${APP_DATA_DIR}/data/n8n:/home/node/.n8n diff --git a/apps/n8n/config.json b/apps/n8n/config.json index 9d9af947..1c6f5370 100644 --- a/apps/n8n/config.json +++ b/apps/n8n/config.json @@ -15,5 +15,7 @@ "source": "https://github.com/n8n-io/n8n", "website": "https://n8n.io/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/navidrome/config.json b/apps/navidrome/config.json index 6c252602..ed300e9e 100644 --- a/apps/navidrome/config.json +++ b/apps/navidrome/config.json @@ -7,16 +7,12 @@ "description": "Modern Music Server and Streamer compatible with Subsonic/Airsonic", "tipi_version": 12, "version": "0.52.5", - "categories": [ - "media", - "music" - ], + "categories": ["media", "music"], "short_desc": "A selfhosted music server", "author": "https://github.com/Bvoxl", "source": "https://github.com/navidrome/navidrome/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/netbootxyz/config.json b/apps/netbootxyz/config.json index 9040d8f0..cf7aebaa 100644 --- a/apps/netbootxyz/config.json +++ b/apps/netbootxyz/config.json @@ -5,18 +5,15 @@ "exposable": true, "id": "netbootxyz", "description": "Your favorite operating systems in one place. A network-based bootable operating system installer based on iPXE.", - "tipi_version": 4, + "tipi_version": 5, "version": "0.7.1-nbxyz3", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "short_desc": "Your favorite operating systems in one place.", "author": "netboot.xyz", "source": "https://github.com/netbootxyz/netboot.xyz", "website": "https://netboot.xyz/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/netbootxyz/docker-compose.yml b/apps/netbootxyz/docker-compose.yml index bfa40016..3cd889be 100644 --- a/apps/netbootxyz/docker-compose.yml +++ b/apps/netbootxyz/docker-compose.yml @@ -16,7 +16,7 @@ services: # Main traefik.enable: true traefik.http.middlewares.netbootxyz-web-redirect.redirectscheme.scheme: https - traefik.http.services.netbootxyz.loadbalancer.server.port: 19999 + traefik.http.services.netbootxyz.loadbalancer.server.port: 3000 # Web traefik.http.routers.netbootxyz-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.netbootxyz-insecure.entrypoints: web diff --git a/apps/netdata/config.json b/apps/netdata/config.json index b96c2785..12564d6b 100644 --- a/apps/netdata/config.json +++ b/apps/netdata/config.json @@ -5,13 +5,15 @@ "exposable": true, "id": "netdata", "description": "Stream any metrics from every physical and virtual server, container and IoT device, to one dashboard, in real-time.", - "tipi_version": 19, - "version": "1.46.3", + "tipi_version": 21, + "version": "1.47.1", "categories": ["utilities"], "short_desc": "Open-source, real-time, performance and health monitoring.", "author": "netdata", "source": "https://github.com/netdata/netdata", "website": "https://www.netdata.cloud/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725981912000 } diff --git a/apps/netdata/docker-compose.yml b/apps/netdata/docker-compose.yml index 5c478fd0..92830f62 100644 --- a/apps/netdata/docker-compose.yml +++ b/apps/netdata/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: netdata: - image: netdata/netdata:v1.46.3 + image: netdata/netdata:v1.47.1 container_name: netdata pid: host restart: unless-stopped diff --git a/apps/nextcloud-mini/config.json b/apps/nextcloud-mini/config.json new file mode 100644 index 00000000..5458431f --- /dev/null +++ b/apps/nextcloud-mini/config.json @@ -0,0 +1,49 @@ +{ + "$schema": "../schema.json", + "name": "Nextcloud Mini", + "id": "nextcloud-mini", + "available": true, + "short_desc": "A safe home for all your data.", + "author": "nextcloud", + "port": 8564, + "categories": ["data"], + "description": "The most popular open source content collaboration platform for tens of millions of users at thousands of organizations across the globe.", + "tipi_version": 2, + "version": "29.0.5-apache", + "source": "https://github.com/nextcloud/server", + "website": "https://nextcloud.com", + "exposable": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [ + { + "type": "text", + "label": "Nextcloud user", + "hint": "The username which you will use to sign in to nextcloud.", + "required": true, + "env_variable": "NEXTCLOUD_MINI_ADMIN_USER" + }, + { + "type": "password", + "label": "Nextcloud password", + "hint": "The password which you will use to sign in to nextcloud.", + "required": true, + "env_variable": "NEXTCLOUD_MINI_ADMIN_PASSWORD" + }, + { + "type": "text", + "label": "Nextcloud trusted domains", + "hint": "Add all of your trusted domains separated by a space.", + "required": false, + "env_variable": "NEXTCLOUD_MINI_TRUSTED_DOMAINS" + }, + { + "type": "random", + "label": "Nextcloud database password", + "min": 32, + "env_variable": "NEXTCLOUD_MINI_DB_PASSWORD" + } + ], + "created_at": 1724969173127, + "updated_at": 1724969173127, + "dynamic_config": true +} diff --git a/apps/nextcloud-mini/docker-compose.json b/apps/nextcloud-mini/docker-compose.json new file mode 100644 index 00000000..9c8e035b --- /dev/null +++ b/apps/nextcloud-mini/docker-compose.json @@ -0,0 +1,40 @@ +{ + "services": [ + { + "name": "nextcloud-mini", + "image": "nextcloud:29.0.5-apache", + "internalPort": 80, + "isMain": true, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/nextcloud", + "containerPath": "/var/www/html" + } + ], + "environment": { + "POSTGRES_HOST": "nextcloud-mini-db", + "POSTGRES_DB": "nextcloud", + "POSTGRES_USER": "nextcloud", + "POSTGRES_PASSWORD": "${NEXTCLOUD_MINI_DB_PASSWORD}", + "NEXTCLOUD_ADMIN_PASSWORD": "${NEXTCLOUD_MINI_ADMIN_PASSWORD}", + "NEXTCLOUD_ADMIN_USER": "${NEXTCLOUD_MINI_ADMIN_USER}", + "NEXTCLOUD_TRUSTED_DOMAINS": "${NEXTCLOUD_MINI_TRUSTED_DOMAINS}" + } + }, + { + "name": "nextcloud-mini-db", + "image": "postgres:16", + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/db", + "containerPath": "/var/lib/postgresql/data" + } + ], + "environment": { + "POSTGRES_DB": "nextcloud", + "POSTGRES_USER": "nextcloud", + "POSTGRES_PASSWORD": "${NEXTCLOUD_MINI_DB_PASSWORD}" + } + } + ] +} diff --git a/apps/nextcloud-mini/docker-compose.yml b/apps/nextcloud-mini/docker-compose.yml new file mode 100644 index 00000000..769db71b --- /dev/null +++ b/apps/nextcloud-mini/docker-compose.yml @@ -0,0 +1,62 @@ +services: + nextcloud-mini: + container_name: nextcloud-mini + image: nextcloud:29.0.5-apache + restart: unless-stopped + ports: + - ${APP_PORT}:80 + volumes: + - ${APP_DATA_DIR}/data/nextcloud:/var/www/html + environment: + - POSTGRES_HOST=nextcloud-mini-db + - POSTGRES_DB=nextcloud + - POSTGRES_USER=nextcloud + - POSTGRES_PASSWORD=${NEXTCLOUD_MINI_DB_PASSWORD} + - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_MINI_ADMIN_PASSWORD} + - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_MINI_ADMIN_USER} + - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_MINI_TRUSTED_DOMAINS} + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.nextcloud-mini-web-redirect.redirectscheme.scheme: https + traefik.http.services.nextcloud-mini.loadbalancer.server.port: 80 + # Web + traefik.http.routers.nextcloud-mini-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nextcloud-mini-insecure.entrypoints: web + traefik.http.routers.nextcloud-mini-insecure.service: nextcloud-mini + traefik.http.routers.nextcloud-mini-insecure.middlewares: nextcloud-mini-web-redirect + # Websecure + traefik.http.routers.nextcloud-mini.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.nextcloud-mini.entrypoints: websecure + traefik.http.routers.nextcloud-mini.service: nextcloud-mini + traefik.http.routers.nextcloud-mini.tls.certresolver: myresolver + # Local domain + traefik.http.routers.nextcloud-mini-local-insecure.rule: Host(`nextcloud-mini.${LOCAL_DOMAIN}`) + traefik.http.routers.nextcloud-mini-local-insecure.entrypoints: web + traefik.http.routers.nextcloud-mini-local-insecure.service: nextcloud-mini + traefik.http.routers.nextcloud-mini-local-insecure.middlewares: nextcloud-mini-web-redirect + # Local domain secure + traefik.http.routers.nextcloud-mini-local.rule: Host(`nextcloud-mini.${LOCAL_DOMAIN}`) + traefik.http.routers.nextcloud-mini-local.entrypoints: websecure + traefik.http.routers.nextcloud-mini-local.service: nextcloud-mini + traefik.http.routers.nextcloud-mini-local.tls: true + # Runtipi managed + runtipi.managed: true + + nextcloud-mini-db: + container_name: nextcloud-mini-db + image: postgres:16 + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + environment: + - POSTGRES_DB=nextcloud + - POSTGRES_USER=nextcloud + - POSTGRES_PASSWORD=${NEXTCLOUD_MINI_DB_PASSWORD} + networks: + - tipi_main_network + labels: + # Runtipi managed + runtipi.managed: true diff --git a/apps/nextcloud-mini/metadata/description.md b/apps/nextcloud-mini/metadata/description.md new file mode 100644 index 00000000..50c953aa --- /dev/null +++ b/apps/nextcloud-mini/metadata/description.md @@ -0,0 +1,17 @@ +## Nextcloud Server ☁ + +**A safe home for all your data.** + +![](https://raw.githubusercontent.com/nextcloud/screenshots/master/nextcloud-hub-files-25-preview.png) + +### Why is this so awesome? 🤩 + +- 📁 **Access your Data** You can store your files, contacts, calendars, and more on a server of your choosing. +- 🔄 **Sync your Data** You keep your files, contacts, calendars, and more synchronized amongst your devices. +- 🙌 **Share your Data** …by giving others access to the stuff you want them to see or to collaborate with. +- 🚀 **Expandable with hundreds of Apps** ...like [Calendar](https://github.com/nextcloud/calendar), [Contacts](https://github.com/nextcloud/contacts), [Mail](https://github.com/nextcloud/mail), [Video Chat](https://github.com/nextcloud/spreed) and all those you can discover in our [App Store](https://apps.nextcloud.com) +- 🔒 **Security** with our encryption mechanisms, [HackerOne bounty program](https://hackerone.com/nextcloud) and two-factor authentication. + +Do you want to learn more about how you can use Nextcloud to access, share, and protect your files, calendars, contacts, communication & more at home and in your organization? [**Learn about all our Features**](https://nextcloud.com/athome/). + +> Warning ⚠️: This is a simple nextcloud instance running only the nextcloud server and a postgres database. If you want features like cron and redis, please use the nextcloud app in the appstore. diff --git a/apps/nextcloud-mini/metadata/logo.jpg b/apps/nextcloud-mini/metadata/logo.jpg new file mode 100644 index 00000000..3df91ea4 Binary files /dev/null and b/apps/nextcloud-mini/metadata/logo.jpg differ diff --git a/apps/nextcloud/config.json b/apps/nextcloud/config.json index 037cf46c..e8701bc0 100644 --- a/apps/nextcloud/config.json +++ b/apps/nextcloud/config.json @@ -7,9 +7,7 @@ "id": "nextcloud", "tipi_version": 23, "version": "26.0.13-apache", - "categories": [ - "data" - ], + "categories": ["data"], "description": "Nextcloud is a self-hosted, open source, and fully-featured cloud storage solution for your personal files, office documents, and photos.", "short_desc": "Productivity platform that keeps you in control", "author": "Nextcloud GmbH", @@ -32,8 +30,7 @@ "env_variable": "NEXTCLOUD_ADMIN_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/nextgba/config.json b/apps/nextgba/config.json index 577c8f6e..b55bd837 100644 --- a/apps/nextgba/config.json +++ b/apps/nextgba/config.json @@ -7,15 +7,12 @@ "description": "All of your favorite gameboy games in your browser", "tipi_version": 4, "version": "0.0.5", - "categories": [ - "gaming" - ], + "categories": ["gaming"], "short_desc": "Gameboy in your browser", "author": "meienberger", "source": "https://github.com/meienberger/nextgba", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/nginx/config.json b/apps/nginx/config.json index 4421fd48..24e9b2da 100644 --- a/apps/nginx/config.json +++ b/apps/nginx/config.json @@ -1,18 +1,19 @@ { - "name": "Nginx", - "available": true, - "port": 8754, - "exposable": true, - "id": "nginx", - "description": "Simple webserver to test your tipi install. An alternative to the hello-world app.", - "tipi_version": 1, - "version": "1.25.3", - "categories": ["utilities"], - "short_desc": "Open-source simple and fast web server.", - "author": "nginx", - "source": "https://github.com/nginx/nginx", - "website": "https://www.nginx.com/", - "form_fields": [], - "supported_architectures": ["arm64", "amd64"] - } - \ No newline at end of file + "name": "Nginx", + "available": true, + "port": 8754, + "exposable": true, + "id": "nginx", + "description": "Simple webserver to test your tipi install. An alternative to the hello-world app.", + "tipi_version": 1, + "version": "1.25.3", + "categories": ["utilities"], + "short_desc": "Open-source simple and fast web server.", + "author": "nginx", + "source": "https://github.com/nginx/nginx", + "website": "https://www.nginx.com/", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 +} diff --git a/apps/nitter/config.json b/apps/nitter/config.json index fc3ff5db..72fd48eb 100644 --- a/apps/nitter/config.json +++ b/apps/nitter/config.json @@ -13,5 +13,7 @@ "author": "zedeus", "source": "https://github.com/zedeus/nitter", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/nocodb/config.json b/apps/nocodb/config.json index 8ea29105..bc532f85 100644 --- a/apps/nocodb/config.json +++ b/apps/nocodb/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "nocodb", - "tipi_version": 54, - "version": "0.251.3", + "tipi_version": 58, + "version": "0.255.2", "categories": ["utilities"], "description": "The Open Source Airtable Alternative. Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadsheet.", "short_desc": "Open Source Airtable Alternative", @@ -39,5 +39,7 @@ "env_variable": "NOCODB_TABLE_ROWS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724948508000 } diff --git a/apps/nocodb/docker-compose.yml b/apps/nocodb/docker-compose.yml index 32d46bb0..6df13abd 100644 --- a/apps/nocodb/docker-compose.yml +++ b/apps/nocodb/docker-compose.yml @@ -12,7 +12,7 @@ services: - NC_AUTH_JWT_SECRET=${NOCODB_JWT_SECRET} - NC_REDIS_URL=redis://default:${NOCODB_REDIS_PASSWORD}@nocodb-redis:6379 - DB_QUERY_LIMIT_DEFAULT=${NOCODB_TABLE_ROWS-25} - image: "nocodb/nocodb:0.251.3" + image: "nocodb/nocodb:0.255.2" ports: - "${APP_PORT}:8080" restart: always diff --git a/apps/nodered/config.json b/apps/nodered/config.json index 6d21a9d5..3c246dd3 100644 --- a/apps/nodered/config.json +++ b/apps/nodered/config.json @@ -5,7 +5,7 @@ "available": true, "exposable": true, "id": "nodered", - "tipi_version": 17, + "tipi_version": 18, "version": "4.0.2", "categories": ["automation"], "description": "Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.", @@ -13,5 +13,7 @@ "author": "node-red", "source": "https://github.com/node-red/node-red", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/nodered/metadata/logo.jpg b/apps/nodered/metadata/logo.jpg index aac3feb0..cc8957b7 100644 Binary files a/apps/nodered/metadata/logo.jpg and b/apps/nodered/metadata/logo.jpg differ diff --git a/apps/notemark/config.json b/apps/notemark/config.json index a35f0457..f6d8273b 100644 --- a/apps/notemark/config.json +++ b/apps/notemark/config.json @@ -5,11 +5,9 @@ "exposable": true, "port": 8567, "id": "notemark", - "tipi_version": 12, - "version": "0.13.0", - "categories": [ - "utilities" - ], + "tipi_version": 13, + "version": "0.13.1", + "categories": ["utilities"], "description": "Note Mark is a lighting fast and minimal web-based Markdown notes app.", "short_desc": "Lighting fast web-based Markdown notes app.", "author": "enchant97", @@ -22,8 +20,7 @@ "env_variable": "NOTEMARK_SERVICE_SECRET" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/notemark/docker-compose.yml b/apps/notemark/docker-compose.yml index b25d687b..f259f2e0 100644 --- a/apps/notemark/docker-compose.yml +++ b/apps/notemark/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: notemark: - image: ghcr.io/enchant97/note-mark-frontend:0.13.0 + image: ghcr.io/enchant97/note-mark-frontend:0.13.1 container_name: notemark restart: unless-stopped networks: @@ -9,7 +9,7 @@ services: labels: runtipi.managed: true notemark-backend: - image: ghcr.io/enchant97/note-mark-backend:0.13.0 + image: ghcr.io/enchant97/note-mark-backend:0.13.1 container_name: notemark-backend restart: unless-stopped networks: diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 3e48c199..9339f073 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/binwiederhier/ntfy", "website": "https://ntfy.sh/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/obsidian-livesync/config.json b/apps/obsidian-livesync/config.json index 8ff7f437..46c0fa43 100644 --- a/apps/obsidian-livesync/config.json +++ b/apps/obsidian-livesync/config.json @@ -40,5 +40,7 @@ "env_variable": "CUSTOM_PORTOBSIDIAN_LIVESYNC_PORT" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/octobot/config.json b/apps/octobot/config.json index 6b8af99f..f577eb6e 100644 --- a/apps/octobot/config.json +++ b/apps/octobot/config.json @@ -4,13 +4,15 @@ "available": true, "exposable": true, "id": "octobot", - "tipi_version": 11, - "version": "2.0.2", + "tipi_version": 14, + "version": "2.0.5", "categories": ["automation", "finance"], "description": "OctoBot is a highly customizable trading bot using its configuration and tentacles system. You can build your own bot using the infinite configuration possibilities such as technical analysis, social media processing or even external statistics management like google trends.", "short_desc": "Octobot is a powerful open-source cryptocurrency trading robot.", "author": "https://github.com/Drakkar-Software/", "source": "https://github.com/Drakkar-Software/OctoBot", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724797130000 } diff --git a/apps/octobot/docker-compose.yml b/apps/octobot/docker-compose.yml index 304950a2..b69205de 100644 --- a/apps/octobot/docker-compose.yml +++ b/apps/octobot/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: octobot: container_name: octobot - image: drakkarsoftware/octobot:2.0.2 + image: drakkarsoftware/octobot:2.0.5 environment: - TZ=${TZ} volumes: diff --git a/apps/odoo/config.json b/apps/odoo/config.json index efc12964..86b02370 100644 --- a/apps/odoo/config.json +++ b/apps/odoo/config.json @@ -19,5 +19,7 @@ "env_variable": "ODOO_POSTGRES_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/olivetin/config.json b/apps/olivetin/config.json index 3a666cd8..bbaebcaa 100644 --- a/apps/olivetin/config.json +++ b/apps/olivetin/config.json @@ -1,17 +1,19 @@ { - "$schema": "../schema.json", - "name": "Olivetin", - "id": "olivetin", - "available": true, - "short_desc": "Give safe and simple access to predefined shell commands from a web interface.", - "author": "OliveTin", - "port": 1337, - "categories": ["utilities"], - "description": "OliveTin gives safe and simple access to predefined shell commands from a web interface.", - "tipi_version": 3, - "version": "latest", - "source": "https://github.com/OliveTin/OliveTin", - "exposable": true, - "supported_architectures": ["arm64", "amd64"], - "form_fields": [] + "$schema": "../schema.json", + "name": "Olivetin", + "id": "olivetin", + "available": true, + "short_desc": "Give safe and simple access to predefined shell commands from a web interface.", + "author": "OliveTin", + "port": 1337, + "categories": ["utilities"], + "description": "OliveTin gives safe and simple access to predefined shell commands from a web interface.", + "tipi_version": 3, + "version": "latest", + "source": "https://github.com/OliveTin/OliveTin", + "exposable": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/ollama-amd/config.json b/apps/ollama-amd/config.json old mode 100755 new mode 100644 index 3caae7cb..e5736036 --- a/apps/ollama-amd/config.json +++ b/apps/ollama-amd/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 11434, "id": "ollama-amd", - "tipi_version": 22, - "version": "0.3.0-rocm", + "tipi_version": 32, + "version": "0.3.10-rocm", "categories": ["ai"], "description": "Get up and running with Llama 3, Mistral, Gemma, and other large language models.", "short_desc": "LLMs inference server with OpenAI compatible API", @@ -14,5 +14,7 @@ "source": "https://github.com/ollama/ollama", "website": "https://ollama.com", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725788642000 } diff --git a/apps/ollama-amd/docker-compose.yml b/apps/ollama-amd/docker-compose.yml index 1faf6aed..b2f3212b 100755 --- a/apps/ollama-amd/docker-compose.yml +++ b/apps/ollama-amd/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: ollama-amd: - image: ollama/ollama:0.3.0-rocm + image: ollama/ollama:0.3.10-rocm restart: unless-stopped container_name: ollama-amd environment: diff --git a/apps/ollama-cpu/config.json b/apps/ollama-cpu/config.json old mode 100755 new mode 100644 index 6cc79798..5831db26 --- a/apps/ollama-cpu/config.json +++ b/apps/ollama-cpu/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 11436, "id": "ollama-cpu", - "tipi_version": 22, - "version": "0.3.0", + "tipi_version": 32, + "version": "0.3.10", "categories": ["ai"], "description": "Get up and running with Llama 3, Mistral, Gemma, and other large language models.", "short_desc": "LLMs inference server with OpenAI compatible API", @@ -14,5 +14,7 @@ "source": "https://github.com/ollama/ollama", "website": "https://ollama.com", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725788644000 } diff --git a/apps/ollama-cpu/docker-compose.yml b/apps/ollama-cpu/docker-compose.yml index d994b4e2..33a56b07 100755 --- a/apps/ollama-cpu/docker-compose.yml +++ b/apps/ollama-cpu/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: ollama-cpu: - image: ollama/ollama:0.3.0 + image: ollama/ollama:0.3.10 restart: unless-stopped container_name: ollama-cpu ports: diff --git a/apps/ollama-nvidia/config.json b/apps/ollama-nvidia/config.json old mode 100755 new mode 100644 index 04634471..68e579fb --- a/apps/ollama-nvidia/config.json +++ b/apps/ollama-nvidia/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 11435, "id": "ollama-nvidia", - "tipi_version": 22, - "version": "0.3.0", + "tipi_version": 32, + "version": "0.3.10", "categories": ["ai"], "description": "Get up and running with Llama 3, Mistral, Gemma, and other large language models.", "short_desc": "LLMs inference server with OpenAI compatible API", @@ -14,5 +14,7 @@ "source": "https://github.com/ollama/ollama", "website": "https://ollama.com", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725788647000 } diff --git a/apps/ollama-nvidia/docker-compose.yml b/apps/ollama-nvidia/docker-compose.yml index a277996b..e744c08c 100755 --- a/apps/ollama-nvidia/docker-compose.yml +++ b/apps/ollama-nvidia/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: ollama-nvidia: - image: ollama/ollama:0.3.0 + image: ollama/ollama:0.3.10 restart: unless-stopped container_name: ollama-nvidia ports: diff --git a/apps/onedev/config.json b/apps/onedev/config.json index 48cc0fe3..e5cf839d 100644 --- a/apps/onedev/config.json +++ b/apps/onedev/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "onedev", - "tipi_version": 107, - "version": "11.0.0", + "tipi_version": 117, + "version": "11.1.2", "categories": ["development"], "description": "Self-hosted Git Server with Kanban and CI/CD", "short_desc": "Self-hosted Git Server with Kanban and CI/CD", @@ -44,5 +44,7 @@ "env_variable": "ONEDEV_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726248381000 } diff --git a/apps/onedev/docker-compose.yml b/apps/onedev/docker-compose.yml index e4f54bc6..044855fd 100644 --- a/apps/onedev/docker-compose.yml +++ b/apps/onedev/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: onedev: - image: 1dev/server:11.0.0 + image: 1dev/server:11.1.2 container_name: onedev environment: - hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect diff --git a/apps/open-webui/config.json b/apps/open-webui/config.json index 6532800d..bd1dd89f 100644 --- a/apps/open-webui/config.json +++ b/apps/open-webui/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8536, "id": "open-webui", - "tipi_version": 4, - "version": "v0.3.10", + "tipi_version": 15, + "version": "0.3.21", "categories": ["ai"], "description": "Open WebUI is an extensible, feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline.", "short_desc": "User-friendly WebUI for LLMs", @@ -29,5 +29,7 @@ } ], "dynamic_config": true, - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725759508000 } diff --git a/apps/open-webui/docker-compose.json b/apps/open-webui/docker-compose.json index 2bd9aa19..e07347da 100644 --- a/apps/open-webui/docker-compose.json +++ b/apps/open-webui/docker-compose.json @@ -1,7 +1,7 @@ { "services": [ { - "image": "ghcr.io/open-webui/open-webui:v0.3.10", + "image": "ghcr.io/open-webui/open-webui:0.3.21", "name": "open-webui", "internalPort": 8080, "isMain": true, diff --git a/apps/open-webui/docker-compose.yml b/apps/open-webui/docker-compose.yml index eee01995..9e63a8ad 100644 --- a/apps/open-webui/docker-compose.yml +++ b/apps/open-webui/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.8' services: open-webui: - image: ghcr.io/open-webui/open-webui:v0.3.10 + image: ghcr.io/open-webui/open-webui:0.3.21 container_name: open-webui volumes: - ${APP_DATA_DIR}/data:/app/backend/data diff --git a/apps/openbooks/config.json b/apps/openbooks/config.json index 128f57bb..e49bcb8b 100644 --- a/apps/openbooks/config.json +++ b/apps/openbooks/config.json @@ -8,10 +8,7 @@ "tipi_version": 3, "url_suffix": "/openbooks/", "version": "4.5.0", - "categories": [ - "media", - "books" - ], + "categories": ["media", "books"], "description": "Openbooks allows you to download ebooks from irc.irchighway.net quickly and easily. ", "short_desc": "Search and Download eBooks", "author": "https://github.com/evan-buss", @@ -28,5 +25,7 @@ "env_variable": "OPENBOOKS_IRC_USERNAME" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/outline/config.json b/apps/outline/config.json index e79256e0..8e1f9d8e 100644 --- a/apps/outline/config.json +++ b/apps/outline/config.json @@ -7,8 +7,8 @@ "port": 8404, "categories": ["utilities"], "description": "Outline is a knowledge base designed for teams. It's goals are to be fast, intuitive and support many integrations.", - "tipi_version": 6, - "version": "0.78.0", + "tipi_version": 8, + "version": "0.79.1", "source": "https://github.com/outline/outline", "website": "https://getoutline.com", "exposable": true, @@ -66,5 +66,7 @@ "env_variable": "OUTLINE_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725595704000 } diff --git a/apps/outline/docker-compose.yml b/apps/outline/docker-compose.yml index a657a2be..6cc8dc8a 100644 --- a/apps/outline/docker-compose.yml +++ b/apps/outline/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.8" services: outline: container_name: outline - image: outlinewiki/outline:0.78.0 + image: outlinewiki/outline:0.79.1 restart: unless-stopped environment: - DATABASE_URL=postgres://outline:${OUTLINE_PG_PASSWORD}@outline-postgres:5432/outline diff --git a/apps/overseerr/config.json b/apps/overseerr/config.json index 713477db..db10668c 100644 --- a/apps/overseerr/config.json +++ b/apps/overseerr/config.json @@ -7,14 +7,13 @@ "id": "overseerr", "tipi_version": 10, "version": "1.33.2", - "categories": [ - "media", - "utilities" - ], + "categories": ["media", "utilities"], "description": "Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services, such as Sonarr, Radarr, and Plex!", "short_desc": "Request management and media discovery tool for the Plex ecosystem", "author": "sct", "source": "https://github.com/sct/overseerr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/owncast/config.json b/apps/owncast/config.json old mode 100755 new mode 100644 index e91c1f24..f29e5160 --- a/apps/owncast/config.json +++ b/apps/owncast/config.json @@ -8,16 +8,13 @@ "description": "Owncast is an open source, self-hosted, decentralized, single user live video streaming and chat server for running your own live streams similar in style to the large mainstream options. It offers complete ownership over your content, interface, moderation and audience.", "tipi_version": 4, "version": "0.1.3", - "categories": [ - "media" - ], + "categories": ["media"], "short_desc": " Take control over your live stream video by running it yourself. Streaming + chat out of the box. ", "author": "Owncast", "source": "https://github.com/owncast/owncast", "website": "https://owncast.online/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/owncloud/config.json b/apps/owncloud/config.json index 193369e7..cfee34b4 100644 --- a/apps/owncloud/config.json +++ b/apps/owncloud/config.json @@ -5,11 +5,9 @@ "available": true, "exposable": true, "id": "owncloud", - "tipi_version": 11, - "version": "10.14.0", - "categories": [ - "data" - ], + "tipi_version": 12, + "version": "10.15.0", + "categories": ["data"], "description": "ownCloud gives you freedom and control over your own data. A personal cloud which runs on your own server. ", "short_desc": "A personal cloud which runs on your own server. ", "author": "https://github.com/owncloud", @@ -39,8 +37,7 @@ "env_variable": "OWNCLOUD_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/owncloud/docker-compose.yml b/apps/owncloud/docker-compose.yml index 15289da9..c0145f84 100644 --- a/apps/owncloud/docker-compose.yml +++ b/apps/owncloud/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: owncloud: - image: owncloud/server:10.14.0 + image: owncloud/server:10.15.0 container_name: owncloud restart: unless-stopped ports: diff --git a/apps/pairdrop/config.json b/apps/pairdrop/config.json index fee06a82..7eb55eb3 100644 --- a/apps/pairdrop/config.json +++ b/apps/pairdrop/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "pairdrop", - "tipi_version": 27, - "version": "1.10.9", + "tipi_version": 28, + "version": "1.10.10", "categories": ["media", "data", "utilities"], "description": "Local file sharing in your browser. Inspired by Apple's AirDrop", "short_desc": "Local file sharing in your browser. Inspired by Apple's AirDrop", @@ -14,5 +14,7 @@ "source": "https://github.com/schlagmichdoch/PairDrop", "website": "https://pairdrop.net/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724024762000 } diff --git a/apps/pairdrop/docker-compose.yml b/apps/pairdrop/docker-compose.yml index 094ae3f8..145834d9 100644 --- a/apps/pairdrop/docker-compose.yml +++ b/apps/pairdrop/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: pairdrop: - image: lscr.io/linuxserver/pairdrop:1.10.9 + image: lscr.io/linuxserver/pairdrop:1.10.10 container_name: pairdrop environment: - PUID=1000 diff --git a/apps/paperless-ngx/config.json b/apps/paperless-ngx/config.json index dd7a4e06..25cbdb39 100644 --- a/apps/paperless-ngx/config.json +++ b/apps/paperless-ngx/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8012, "id": "paperless-ngx", - "tipi_version": 41, - "version": "2.11.1", + "tipi_version": 49, + "version": "2.12.1", "categories": ["utilities"], "description": "Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.", "short_desc": "Document Management System (DMS)", @@ -49,5 +49,7 @@ "env_variable": "PAPERLESS_TIKA_ENABLED" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726470095000 } diff --git a/apps/paperless-ngx/docker-compose.yml b/apps/paperless-ngx/docker-compose.yml index f946f53a..b35e7d0c 100644 --- a/apps/paperless-ngx/docker-compose.yml +++ b/apps/paperless-ngx/docker-compose.yml @@ -1,8 +1,8 @@ -version: '3.7' +version: "3.7" services: paperless-ngx: container_name: paperless-ngx - image: ghcr.io/paperless-ngx/paperless-ngx:2.11.1 + image: ghcr.io/paperless-ngx/paperless-ngx:2.12.1 restart: unless-stopped depends_on: - db @@ -24,28 +24,33 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 PAPERLESS_URL: ${APP_PROTOCOL:-http}://${APP_DOMAIN} COMPOSE_PROJECT_NAME: paperless-ngx + PAPERLESS_CSRF_TRUSTED_ORIGINS: https://paperless-ngx.${LOCAL_DOMAIN},https://${APP_DOMAIN},http://${INTERNAL_IP}:${APP_PORT} networks: - - tipi_main_network + - tipi_main_network labels: # Main traefik.enable: true traefik.http.middlewares.paperless-ngx-web-redirect.redirectscheme.scheme: https - traefik.http.services.paperless-ngx.loadbalancer.server.port: 8000 + traefik.http.services.paperless-ngx.loadbalancer.server.port: + 8000 # Web traefik.http.routers.paperless-ngx-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.paperless-ngx-insecure.entrypoints: web traefik.http.routers.paperless-ngx-insecure.service: paperless-ngx - traefik.http.routers.paperless-ngx-insecure.middlewares: paperless-ngx-web-redirect + traefik.http.routers.paperless-ngx-insecure.middlewares: + paperless-ngx-web-redirect # Websecure traefik.http.routers.paperless-ngx.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.paperless-ngx.entrypoints: websecure traefik.http.routers.paperless-ngx.service: paperless-ngx - traefik.http.routers.paperless-ngx.tls.certresolver: myresolver + traefik.http.routers.paperless-ngx.tls.certresolver: + myresolver # Local domain traefik.http.routers.paperless-ngx-local-insecure.rule: Host(`paperless-ngx.${LOCAL_DOMAIN}`) traefik.http.routers.paperless-ngx-local-insecure.entrypoints: web traefik.http.routers.paperless-ngx-local-insecure.service: paperless-ngx - traefik.http.routers.paperless-ngx-local-insecure.middlewares: paperless-ngx-web-redirect + traefik.http.routers.paperless-ngx-local-insecure.middlewares: + paperless-ngx-web-redirect # Local domain secure traefik.http.routers.paperless-ngx-local.rule: Host(`paperless-ngx.${LOCAL_DOMAIN}`) traefik.http.routers.paperless-ngx-local.entrypoints: websecure @@ -77,7 +82,7 @@ services: labels: runtipi.managed: true gotenberg: - image: docker.io/gotenberg/gotenberg:8.8 + image: docker.io/gotenberg/gotenberg:8.9 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. @@ -86,13 +91,13 @@ services: - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp/.*" networks: - - tipi_main_network + - tipi_main_network labels: runtipi.managed: true tika: image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped networks: - - tipi_main_network + - tipi_main_network labels: runtipi.managed: true diff --git a/apps/penpot/config.json b/apps/penpot/config.json index b52d97a1..7893ab70 100644 --- a/apps/penpot/config.json +++ b/apps/penpot/config.json @@ -20,5 +20,7 @@ "min": 32, "env_variable": "PENPOT_POSTGRES_PASSWORD" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/peppermint/config.json b/apps/peppermint/config.json index d7a82612..51d5d3e8 100644 --- a/apps/peppermint/config.json +++ b/apps/peppermint/config.json @@ -7,9 +7,7 @@ "id": "peppermint", "tipi_version": 5, "version": "latest", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "An open source ticket management & help desk solution.", "short_desc": "An open source ticket management & help desk solution.", "author": "Peppermint-Lab", @@ -29,5 +27,7 @@ "env_variable": "PEPPERMINT_DOMAIN_API" } ], - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/photoprism/config.json b/apps/photoprism/config.json index a16ccadb..8f7ed72d 100644 --- a/apps/photoprism/config.json +++ b/apps/photoprism/config.json @@ -7,9 +7,7 @@ "id": "photoprism", "tipi_version": 5, "version": "240420", - "categories": [ - "photography" - ], + "categories": ["photography"], "description": "PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way. You can run it at home, on a private server, or in the cloud. Default username: admin", "short_desc": "AI-Powered Photos App for the Decentralized Web. We are on a mission to protect your freedom and privacy.", "author": "PhotoPrism", @@ -34,5 +32,7 @@ "env_variable": "DB_ROOT_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/pihole/config.json b/apps/pihole/config.json index 55f6de3a..e7a494e5 100644 --- a/apps/pihole/config.json +++ b/apps/pihole/config.json @@ -32,5 +32,7 @@ "env_variable": "NETWORK_INTERFACE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/pinchflat/config.json b/apps/pinchflat/config.json index 13380230..6a694d15 100644 --- a/apps/pinchflat/config.json +++ b/apps/pinchflat/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "pinchflat", - "tipi_version": 5, - "version": "2024.7.19", + "tipi_version": 11, + "version": "2024.9.12", "categories": ["media"], "description": "Your next YouTube media manager", "short_desc": "Your next YouTube media manager", @@ -32,5 +32,7 @@ "env_variable": "PINCHFLAT_BASIC_AUTH_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726211810000 } diff --git a/apps/pinchflat/docker-compose.yml b/apps/pinchflat/docker-compose.yml index 053e7ed7..f4962004 100644 --- a/apps/pinchflat/docker-compose.yml +++ b/apps/pinchflat/docker-compose.yml @@ -1,6 +1,6 @@ services: pinchflat: - image: keglin/pinchflat:v2024.7.19 + image: keglin/pinchflat:v2024.9.12 container_name: pinchflat environment: - BASIC_AUTH_USERNAME=${PINCHFLAT_BASIC_AUTH_USERNAME} diff --git a/apps/pinchflat/metadata/logo.jpg b/apps/pinchflat/metadata/logo.jpg index b5a7a344..5e39c5af 100644 Binary files a/apps/pinchflat/metadata/logo.jpg and b/apps/pinchflat/metadata/logo.jpg differ diff --git a/apps/pingvin-share/config.json b/apps/pingvin-share/config.json index 5461ac3d..01a0934a 100644 --- a/apps/pingvin-share/config.json +++ b/apps/pingvin-share/config.json @@ -8,11 +8,13 @@ "port": 8654, "categories": ["data", "utilities"], "description": "A self-hosted file sharing platform that combines lightness and beauty, perfect for seamless and efficient file sharing", - "tipi_version": 4, - "version": "0.28.0", + "tipi_version": 5, + "version": "0.29.0", "source": "https://github.com/stonith404/pingvin-share", "website": "https://pingvin-share.dev.eliasschneider.com", "exposable": true, "supported_architectures": ["arm64", "amd64"], - "form_fields": [] + "form_fields": [], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/pingvin-share/docker-compose.yml b/apps/pingvin-share/docker-compose.yml index 160d8a21..1176b5d4 100644 --- a/apps/pingvin-share/docker-compose.yml +++ b/apps/pingvin-share/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: pingvin-share: container_name: pingvin-share - image: stonith404/pingvin-share:v0.28.0 + image: stonith404/pingvin-share:v0.29.0 restart: unless-stopped ports: - ${APP_PORT}:3000 diff --git a/apps/planka/config.json b/apps/planka/config.json index d305dabf..7490762b 100644 --- a/apps/planka/config.json +++ b/apps/planka/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "planka", - "tipi_version": 32, - "version": "1.20.1", + "tipi_version": 33, + "version": "1.21.1", "categories": ["development"], "description": "The realtime kanban board for workgroups built with React and Redux.", "short_desc": "Free open source kanban board for workgroups.", @@ -21,5 +21,7 @@ "env_variable": "PLANKA_SECRET_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723792954000 } diff --git a/apps/planka/docker-compose.yml b/apps/planka/docker-compose.yml index 23df7778..d0f595a9 100644 --- a/apps/planka/docker-compose.yml +++ b/apps/planka/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: planka: - image: ghcr.io/plankanban/planka:1.20.1 + image: ghcr.io/plankanban/planka:1.21.1 container_name: planka command: > bash -c diff --git a/apps/planning-poker/config.json b/apps/planning-poker/config.json index 8dcd2670..165412bb 100644 --- a/apps/planning-poker/config.json +++ b/apps/planning-poker/config.json @@ -13,5 +13,7 @@ "author": "axeleroy", "source": "https://github.com/axeleroy/self-host-planning-poker", "form_fields": [], - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/plausible-ce/config.json b/apps/plausible-ce/config.json new file mode 100644 index 00000000..95a0c821 --- /dev/null +++ b/apps/plausible-ce/config.json @@ -0,0 +1,219 @@ +{ + "$schema": "../schema.json", + "name": "Plausible CE", + "port": 8193, + "available": true, + "exposable": true, + "dynamic_config": true, + "min_tipi_version": "3.6.0", + "id": "plausible-ce", + "tipi_version": 5, + "version": "v2.1.1", + "categories": [ + "utilities" + ], + "description": "Plausible Analytics is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR.", + "short_desc": "Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.", + "author": "Plausible", + "source": "https://github.com/plausible/community-edition", + "form_fields": [ + { + "type": "random", + "label": "Plausible Secret Key Base", + "hint": "Configures the secret used for sessions in the dashboard, doesn't have any defaults and needs to be provided in the ENV vars", + "min": 48, + "max": 48, + "env_variable": "PLAUSIBLE_SECRET_KEY_BASE" + }, + { + "type": "random", + "label": "Plausible TOTP Vault Key", + "hint": "Configures the secret used for encrypting TOTP secrets at rest using AES256-GCM, doesn't have any defaults and needs to be provided in the ENV vars", + "min": 32, + "max": 32, + "encoding": "base64", + "env_variable": "PLAUSIBLE_TOTP_VAULT_KEY" + }, + { + "type": "random", + "label": "Plausible Database Password", + "min": 32, + "env_variable": "PLAUSIBLE_DB_PASSWORD" + }, + { + "type": "text", + "label": "Disable Registration", + "hint": "Restricts registration of new users. Possible values are true (full restriction), false (no restriction), and invite_only (only the invited users can register).", + "default": "true", + "options": [ + { + "label": "true", + "value": "true" + }, + { + "label": "invite-only", + "value": "invite-only" + }, + { + "label": "false", + "value": "false" + } + ], + "env_variable": "PLAUSIBLE_DISABLE_REGISTRATION" + }, + { + "type": "boolean", + "label": "Enable Email Verification", + "hint": "When enabled, new users need to verify their email addressby following a link delivered to their mailbox. Please configure your server for SMTP to receive this email.", + "default": false, + "env_variable": "PLAUSIBLE_ENABLE_EMAIL_VERIFICATION" + }, + { + "type": "text", + "label": "Google Client ID", + "hint": "The Client ID from the Google API Console for your project. Not set by default.", + "env_variable": "PLAUSIBLE_GOOGLE_CLIENT_ID" + }, + { + "type": "text", + "label": "Google Client Secret", + "hint": "The Client Secret from the Google API Console for your project. Not set by default.", + "env_variable": "PLAUSIBLE_GOOGLE_CLIENT_SECRET" + }, + { + "type": "text", + "label": "MaxMind License Key", + "hint": "If set, this ENV variable takes precedence over IP_GEOLOCATION_DB and makes Plausible download (and keep up to date) a free MaxMind GeoLite2 MMDB of the selected edition", + "env_variable": "PLAUSIBLE_MAXMIND_LICENSE_KEY" + }, + { + "type": "text", + "label": "MaxMind Edition", + "hint": "MaxMind database edition to use (only if MAXMIND_LICENSE_KEY is set)", + "default": "GeoLite2-City", + "env_variable": "PLAUSIBLE_MAXMIND_EDITION" + }, + { + "type": "text", + "label": "Mail Provider", + "hint": "The mail provider to use for sending emails. The default is the built-in SMTP adapter.", + "default": "Bamboo.SMTPAdapter", + "options": [ + { + "label": "Default SMTP Adapter", + "value": "Bamboo.SMTPAdapter" + }, + { + "label": "MailGun", + "value": "Bamboo.MailgunAdapter" + }, + { + "label": "Mandrill", + "value": "Bamboo.MandrillAdapter" + }, + { + "label": "SendGrid", + "value": "Bamboo.SendGridAdapter" + } + ], + "env_variable": "PLAUSIBLE_MAILER_ADAPTER" + }, + { + "type": "text", + "label": "From Email", + "hint": "The email id to use for as from address of all communications from Plausible.", + "default": "hello@plausible.local", + "env_variable": "PLAUSIBLE_MAILER_EMAIL" + }, + { + "type": "text", + "label": "From Email Name", + "hint": "The display name for the sender (from).", + "default": "Plausible", + "env_variable": "PLAUSIBLE_MAILER_NAME" + }, + { + "type": "text", + "label": "SMTP Host", + "hint": "The host address of your SMTP relay.", + "env_variable": "PLAUSIBLE_SMTP_HOST_ADDR" + }, + { + "type": "number", + "label": "SMTP Host Port", + "hint": "The port of your SMTP relay.", + "default": "25", + "env_variable": "PLAUSIBLE_SMTP_HOST_PORT" + }, + { + "type": "text", + "label": "SMTP User Name", + "hint": "The username/email in case SMTP auth is required on your SMTP relay.", + "env_variable": "PLAUSIBLE_SMTP_USER_NAME" + }, + { + "type": "password", + "label": "SMTP User Password", + "hint": "The username/email in case SMTP auth is required on your SMTP relay.", + "env_variable": "PLAUSIBLE_SMTP_USER_PWD" + }, + { + "type": "boolean", + "label": "SMTP Host SSL Enabled", + "hint": "Configures whether SMTPS (SMTP over SSL) is enabled for SMTP connection, e.g. when you use port 465.", + "default": false, + "env_variable": "PLAUSIBLE_SMTP_HOST_SSL_ENABLED" + }, + { + "type": "number", + "label": "SMTP Retries", + "hint": "Number of retries to make until mailer gives up.", + "default": "2", + "env_variable": "PLAUSIBLE_SMTP_RETRIES" + }, + { + "type": "text", + "label": "Postmark API Key", + "placeholder": "Enter your Postmark API key", + "hint": "You also have to set the MAILER_EMAIL variable which needs to be configured in PostmarkApps sender signatures.", + "env_variable": "PLAUSIBLE_POSTMARK_API_KEY" + }, + { + "type": "text", + "label": "MailGun API Key", + "placeholder": "Enter your MailGun API key", + "env_variable": "PLAUSIBLE_MAILGUN_API_KEY" + }, + { + "type": "text", + "label": "MailGun Domain", + "placeholder": "Enter your MailGun Domain.", + "env_variable": "PLAUSIBLE_MAILGUN_DOMAIN" + }, + { + "type": "text", + "label": "MailGun BASE URI", + "default": "https://api.mailgun.net/v3", + "hint": "Mailgun makes a difference in the API base URL between sender domains from within the EU and outside. By default, the base URL is set to https://api.mailgun.net/v3. To override this you can pass https://api.eu.mailgun.net/v3 if you are using an EU domain.", + "env_variable": "PLAUSIBLE_MAILGUN_BASE_URI" + }, + { + "type": "text", + "label": "Mandrill API Key", + "placeholder": "Enter your Mandrill API key", + "env_variable": "PLAUSIBLE_MANDRILL_API_KEY" + }, + { + "type": "text", + "label": "Sendgrid API Key", + "placeholder": "Enter your Sendgrid API key", + "env_variable": "PLAUSIBLE_SENDGRID_API_KEY" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ], + "created_at": 1691943801422, + "updated_at": 1724188518000 +} diff --git a/apps/plausible-ce/data/clickhouse/clickhouse-config.xml b/apps/plausible-ce/data/clickhouse/clickhouse-config.xml new file mode 100644 index 00000000..dc1e36b7 --- /dev/null +++ b/apps/plausible-ce/data/clickhouse/clickhouse-config.xml @@ -0,0 +1,16 @@ + + + warning + true + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/plausible-ce/data/clickhouse/clickhouse-user-config.xml b/apps/plausible-ce/data/clickhouse/clickhouse-user-config.xml new file mode 100644 index 00000000..ae6a6b94 --- /dev/null +++ b/apps/plausible-ce/data/clickhouse/clickhouse-user-config.xml @@ -0,0 +1,8 @@ + + + + 0 + 0 + + + \ No newline at end of file diff --git a/apps/plausible-ce/docker-compose.json b/apps/plausible-ce/docker-compose.json new file mode 100644 index 00000000..18f76232 --- /dev/null +++ b/apps/plausible-ce/docker-compose.json @@ -0,0 +1,87 @@ +{ + "services": [ + { + "name": "plausible-ce", + "image": "ghcr.io/plausible/community-edition:v2.1.1", + "command": "sh -c 'sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run'", + "internalPort": 8000, + "isMain": true, + "environment": { + "BASE_URL": "${APP_PROTOCOL:-http}://${APP_DOMAIN}", + "SECRET_KEY_BASE": "${PLAUSIBLE_SECRET_KEY_BASE}", + "DATABASE_URL": "postgres://tipi:${PLAUSIBLE_DB_PASSWORD}@plausible-db:5432/plausible-db", + "CLICKHOUSE_DATABASE_URL": "http://plausible-events-db:8123/plausible_events_db", + "DISABLE_REGISTRATION": "${PLAUSIBLE_DISABLE_REGISTRATION:-invite-only}", + "ENABLE_EMAIL_VERIFICATION": "${PLAUSIBLE_ENABLE_EMAIL_VERIFICATION:-false}", + "TOTP_VAULT_KEY": "${PLAUSIBLE_TOTP_VAULT_KEY}", + "GOOGLE_CLIENT_ID": "${PLAUSIBLE_GOOGLE_CLIENT_ID}", + "GOOGLE_CLIENT_SECRET": "${PLAUSIBLE_GOOGLE_CLIENT_SECRET}", + "MAXMIND_LICENSE_KEY": "${PLAUSIBLE_MAXMIND_LICENSE_KEY}", + "MAXMIND_EDITION": "${PLAUSIBLE_MAXMIND_EDITION:-GeoLite2-City}", + "MAILER_ADAPTER": "${PLAUSIBLE_MAILER_ADAPTER:-Bamboo.SMTPAdapter}", + "MAILER_EMAIL": "${PLAUSIBLE_MAILER_EMAIL:-plausible@${APP_DOMAIN}}", + "MAILER_NAME": "${PLAUSIBLE_MAILER_NAME:-Plausible}", + "SMTP_HOST_ADDR": "${PLAUSIBLE_SMTP_HOST_ADDR}", + "SMTP_HOST_PORT": "${PLAUSIBLE_SMTP_HOST_PORT}", + "SMTP_USER_NAME": "${PLAUSIBLE_SMTP_USER_NAME}", + "SMTP_USER_PWD": "${PLAUSIBLE_SMTP_USER_PWD}", + "SMTP_HOST_SSL_ENABLED": "${PLAUSIBLE_SMTP_HOST_SSL_ENABLED:-false}", + "SMTP_RETRIES": "${PLAUSIBLE_SMTP_RETRIES:-2}", + "POSTMARK_API_KEY": "${PLAUSIBLE_POSTMARK_API_KEY}", + "MAILGUN_API_KEY": "${PLAUSIBLE_MAILGUN_API_KEY}", + "MAILGUN_DOMAIN": "${PLAUSIBLE_MAILGUN_DOMAIN}", + "MAILGUN_BASE_URI": "${PLAUSIBLE_MAILGUN_BASE_URI:-https://api.mailgun.net/v3}", + "MANDRILL_API_KEY": "${PLAUSIBLE_MANDRILL_API_KEY}", + "SENDGRID_API_KEY": "${PLAUSIBLE_SENDGRID_API_KEY}" + }, + "dependsOn": [ + "plausible-db", + "plausible-events-db" + ] + }, + { + "name": "plausible-db", + "image": "postgres:16-alpine", + "environment": { + "POSTGRES_DB": "plausible-db", + "POSTGRES_USER": "tipi", + "POSTGRES_PASSWORD": "${PLAUSIBLE_DB_PASSWORD}" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/database", + "containerPath": "/var/lib/postgresql/data" + } + ] + }, + { + "name": "plausible-events-db", + "image": "clickhouse/clickhouse-server:24.3.3.102-alpine", + "environment": { + "POSTGRES_DB": "plausible-db", + "POSTGRES_USER": "tipi", + "POSTGRES_PASSWORD": "${PLAUSIBLE_DB_PASSWORD}" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/event-data", + "containerPath": "/var/lib/clickhouse" + }, + { + "hostPath": "${APP_DATA_DIR}/data/event-logs", + "containerPath": "/var/log/clickhouse-server" + }, + { + "hostPath": "${APP_DATA_DIR}/data/clickhouse/clickhouse-config.xml", + "containerPath": "/etc/clickhouse-server/config.d/logging.xml", + "readOnly": true + }, + { + "hostPath": "${APP_DATA_DIR}/data/clickhouse/clickhouse-user-config.xml", + "containerPath": "/etc/clickhouse-server/users.d/logging.xml", + "readOnly": true + } + ] + } + ] +} diff --git a/apps/plausible-ce/docker-compose.yml b/apps/plausible-ce/docker-compose.yml new file mode 100644 index 00000000..4236cc17 --- /dev/null +++ b/apps/plausible-ce/docker-compose.yml @@ -0,0 +1,104 @@ +services: + plausible-ce: + container_name: plausible-ce + image: ghcr.io/plausible/community-edition:v2.1.1 + restart: unless-stopped + command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" + depends_on: + - plausible-db + - plausible-events-db + ports: + - ${APP_PORT}:8000 + environment: + - BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - SECRET_KEY_BASE=${PLAUSIBLE_SECRET_KEY_BASE} + - DATABASE_URL=postgres://tipi:${PLAUSIBLE_DB_PASSWORD}@plausible-db:5432/plausible-db + - CLICKHOUSE_DATABASE_URL=http://plausible-events-db:8123/plausible_events_db + - DISABLE_REGISTRATION=${PLAUSIBLE_DISABLE_REGISTRATION:-invite-only} + - ENABLE_EMAIL_VERIFICATION=${PLAUSIBLE_ENABLE_EMAIL_VERIFICATION:-false} + - TOTP_VAULT_KEY=${PLAUSIBLE_TOTP_VAULT_KEY} + - GOOGLE_CLIENT_ID=${PLAUSIBLE_GOOGLE_CLIENT_ID} + - GOOGLE_CLIENT_SECRET=${PLAUSIBLE_GOOGLE_CLIENT_SECRET} + - MAXMIND_LICENSE_KEY=${PLAUSIBLE_MAXMIND_LICENSE_KEY} + - MAXMIND_EDITION=${PLAUSIBLE_MAXMIND_EDITION:-GeoLite2-City} + - MAILER_ADAPTER=${PLAUSIBLE_MAILER_ADAPTER:-Bamboo.SMTPAdapter} + - MAILER_EMAIL=${PLAUSIBLE_MAILER_EMAIL:-plausible@${APP_DOMAIN}} + - MAILER_NAME=${PLAUSIBLE_MAILER_NAME:-Plausible} + - SMTP_HOST_ADDR=${PLAUSIBLE_SMTP_HOST_ADDR} + - SMTP_HOST_PORT=${PLAUSIBLE_SMTP_HOST_PORT} + - SMTP_USER_NAME=${PLAUSIBLE_SMTP_USER_NAME} + - SMTP_USER_PWD=${PLAUSIBLE_SMTP_USER_PWD} + - SMTP_HOST_SSL_ENABLED=${PLAUSIBLE_SMTP_HOST_SSL_ENABLED:-false} + - SMTP_RETRIES=${PLAUSIBLE_SMTP_RETRIES:-2} + - POSTMARK_API_KEY=${PLAUSIBLE_POSTMARK_API_KEY} + - MAILGUN_API_KEY=${PLAUSIBLE_MAILGUN_API_KEY} + - MAILGUN_DOMAIN=${PLAUSIBLE_MAILGUN_DOMAIN} + - MAILGUN_BASE_URI=${PLAUSIBLE_MAILGUN_BASE_URI:-https://api.mailgun.net/v3} + - MANDRILL_API_KEY=${PLAUSIBLE_MANDRILL_API_KEY} + - SENDGRID_API_KEY=${PLAUSIBLE_SENDGRID_API_KEY} + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.plausible-web-redirect.redirectscheme.scheme: https + traefik.http.services.plausible.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.plausible-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.plausible-insecure.entrypoints: web + traefik.http.routers.plausible-insecure.service: plausible + traefik.http.routers.plausible-insecure.middlewares: plausible-web-redirect + # Websecure + traefik.http.routers.plausible.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.plausible.entrypoints: websecure + traefik.http.routers.plausible.service: plausible + traefik.http.routers.plausible.tls.certresolver: myresolver + # Local domain + traefik.http.routers.plausible-local-insecure.rule: Host(`plausible.${LOCAL_DOMAIN}`) + traefik.http.routers.plausible-local-insecure.entrypoints: web + traefik.http.routers.plausible-local-insecure.service: plausible + traefik.http.routers.plausible-local-insecure.middlewares: plausible-web-redirect + # Local domain secure + traefik.http.routers.plausible-local.rule: Host(`plausible.${LOCAL_DOMAIN}`) + traefik.http.routers.plausible-local.entrypoints: websecure + traefik.http.routers.plausible-local.service: plausible + traefik.http.routers.plausible-local.tls: true + # Runtipi managed + runtipi.managed: true + + plausible-db: + # Plausible v2.1.1 was tested against PostgreSQL versions 15 and 16 + # https://github.com/plausible/analytics/blob/v2.1.1/.github/workflows/elixir.yml#L21-L32 + container_name: plausible-db + image: postgres:16-alpine + restart: unless-stopped + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/database:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${PLAUSIBLE_DB_PASSWORD} + - POSTGRES_USER=tipi + - POSTGRES_DB=plausible-db + labels: + # Runtipi managed + runtipi.managed: true + + plausible-events-db: + container_name: plausible-events-db + image: clickhouse/clickhouse-server:24.3.3.102-alpine + restart: unless-stopped + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data/event-data:/var/lib/clickhouse + - ${APP_DATA_DIR}/data/event-logs:/var/log/clickhouse-server + - ${APP_DATA_DIR}/data/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro + - ${APP_DATA_DIR}/data/clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro + ulimits: + nofile: + soft: 262144 + hard: 262144 + labels: + # Runtipi managed + runtipi.managed: true diff --git a/apps/plausible-ce/metadata/description.md b/apps/plausible-ce/metadata/description.md new file mode 100644 index 00000000..20f29cec --- /dev/null +++ b/apps/plausible-ce/metadata/description.md @@ -0,0 +1,105 @@ +# Plausible Analytics + +

+ + Plausible Analytics + +

+

+ Simple Metrics | + Lightweight Script | + Privacy Focused | + Open Source | + Docs | + Contributing +

+

+ +[Plausible Analytics](https://plausible.io/) is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host Plausible Community Edition or have us manage Plausible Analytics for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺 + +We are dedicated to making web analytics more privacy-friendly. Our mission is to reduce corporate surveillance by providing an alternative web analytics tool which doesn’t come from the AdTech world. We are completely independent and solely funded by our subscribers. + +![Plausible Analytics](https://plausible.io/docs/img/plausible-analytics.png) + +# Upgrade +- Manual Steps REQUIRED: From v1.x to 2.x: https://github.com/plausible/analytics/releases/tag/v2.0.0 + +## Why Plausible? + +Here's what makes Plausible a great Google Analytics alternative and why we're trusted by 12,000+ paying subscribers to deliver their website and business insights: + +- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary. +- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy) +- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. You can also send events directly to our [events API](https://plausible.io/docs/events-api). +- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications. +- **Invite team members and share stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. You can [invite team members](https://plausible.io/docs/users-roles) and assign user roles too. +- **Define key goals and track conversions**: Create custom events with custom dimensions to track conversions and attribution to understand and identify the trends that matter. Includes easy ways to track outbound link clicks, file downloads and 404 error pages. +- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords. +- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing). +- **Smooth transition from Google Analytics**: There's a realtime dashboard, entry pages report and integration with Search Console. You can track your paid campaigns and conversions. You can invite team members. You can even [import your historical Google Analytics stats](https://plausible.io/docs/google-analytics-import). Learn how to [get the most out of your Plausible experience](https://plausible.io/docs/your-plausible-experience) and join thousands who have already migrated from Google Analytics. + +Interested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs). + +## Why is Plausible Analytics Cloud not free like Google Analytics? + +Plausible Analytics is an independently owned and actively developed project. To keep the project development going, to stay in business, to continue putting effort into building a better product and to cover our costs, we need to charge a fee. + +Google Analytics is free because Google has built their company and their wealth by collecting and analyzing huge amounts of personal information from web users and using these personal and behavioral insights to sell advertisements. + +Plausible has no part in that business model. No personal data is being collected and analyzed either. With Plausible, you 100% own and control all of your website data. This data is not being shared with or sold to any third-parties. + +We choose the subscription business model rather than the business model of surveillance capitalism. See reasons why we believe you should [stop using Google Analytics on your website](https://plausible.io/blog/remove-google-analytics). + +## Getting started with Plausible + +The easiest way to get started with Plausible Analytics is with [our official managed service in the cloud](https://plausible.io/#pricing). It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. + +In order to be compliant with the GDPR and the Schrems II ruling, all visitor data for our managed service in the cloud is exclusively processed on servers and cloud infrastructure owned and operated by European providers. Your website data never leaves the EU. + +Our managed hosting can save a substantial amount of developer time and resources. For most sites this ends up being the best value option and the revenue goes to funding the maintenance and further development of Plausible. So you’ll be supporting open source software and getting a great service! + +### Can Plausible be self-hosted? + +Plausible is [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer and self-hosted solution called [Plausible Community Edition (CE)](https://plausible.io/self-hosted-web-analytics). Here are the differences between Plausible Analytics managed hosting in the cloud and the Plausible CE: + +| | Plausible Analytics Cloud | Plausible Community Edition | +| ------------- | ------------- | ------------- | +| **Infrastructure management** | Easy and convenient. It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. We manage everything so you don’t have to worry about anything and can focus on your stats. | You do it all yourself. You need to get a server and you need to manage your infrastructure. You are responsible for installation, maintenance, upgrades, server capacity, uptime, backup, security, stability, consistency, loading time and so on.| +| **Release schedule** | Continuously developed and improved with new features and updates multiple times per week. | [It's a long term release](https://plausible.io/blog/building-open-source) published twice per year so latest features and improvements won't be immediately available.| +| **Premium features** | All features available as listed in [our pricing plans](https://plausible.io/#pricing). | Selected premium features such as funnels and ecommerce revenue goals are not available as we aim to ensure a [protective barrier around our cloud offering](https://plausible.io/blog/community-edition).| +| **Bot filtering** | Advanced bot filtering for more accurate stats. Our algorithm detects and excludes non-human traffic patterns. We also exclude known bots by the User-Agent header and filter out traffic from data centers and referrer spam domains. | Basic bot filtering that targets the most common non-human traffic based on the User-Agent header and referrer spam domains.| +| **Server location** | All visitor data is exclusively processed on EU-owned cloud infrastructure. We keep your site data on a secure, encrypted and green energy powered server in Germany. This ensures that your site data is protected by the strict European Union data privacy laws and ensures compliance with GDPR. Your website data never leaves the EU. | You have full control and can host your instance on any server in any country that you wish. Host it on a server in your basement or host it with any cloud provider wherever you want, even those that are not GDPR compliant.| +| **Data portability** | You see all your site stats and metrics on our modern-looking, simple to use and fast loading dashboard. You can only see the stats aggregated in the dashboard. You can download the stats using the [CSV export](https://plausible.io/docs/export-stats), [stats API](https://plausible.io/docs/stats-api) or tools such as the [Data Studio Connector](https://plausible.io/docs/integration-guides#google-data-studio). | Do you want access to the raw data? Self-hosting gives you that option. You can take the data directly from the ClickHouse database. | +| **Premium support** | Real support delivered by real human beings who build and maintain Plausible. | Premium support is not included. CE is community supported only.| +| **Costs** | There's a cost associated with providing an analytics service so we charge a subscription fee. We choose the subscription business model rather than the business model of surveillance capitalism. Your money funds further development of Plausible. | You need to pay for your server, CDN, backups and whatever other cost there is associated with running the infrastructure. You never have to pay any fees to us. Your money goes to 3rd party companies with no connection to us.| + +Interested in self-hosting Plausible CE on your server? Take a look at our [Plausible CE installation instructions](https://github.com/plausible/community-edition/). + +Plausible CE is a community supported project and there are no guarantees that you will get support from the creators of Plausible to troubleshoot your self-hosting issues. There is a [community supported forum](https://github.com/plausible/analytics/discussions/categories/self-hosted-support) where you can ask for help. + +Our only source of funding is our premium, managed service for running Plausible in the cloud. + +## Technology + +Plausible Analytics is a standard Elixir/Phoenix application backed by a PostgreSQL database for general data and a Clickhouse +database for stats. On the frontend we use [TailwindCSS](https://tailwindcss.com/) for styling and React to make the dashboard interactive. + +## Contributors + +For anyone wishing to contribute to Plausible, we recommend taking a look at [our contributor guide](https://github.com/plausible/analytics/blob/master/CONTRIBUTING.md). + + + +## Feedback & Roadmap + +We welcome feedback from our community. We have a public roadmap driven by the features suggested by the community members. Take a look at our [feedback board](https://plausible.io/feedback). Please let us know if you have any requests and vote on open issues so we can better prioritize. + +To stay up to date with all the latest news and product updates, make sure to follow us on [X (formerly Twitter)](https://twitter.com/plausiblehq), [LinkedIn](https://www.linkedin.com/company/plausible-analytics/) or [Mastodon](https://fosstodon.org/@plausible). + +## License & Trademarks + +Plausible CE is open source under the GNU Affero General Public License Version 3 (AGPLv3) or any later version. You can [find it here](https://github.com/plausible/analytics/blob/master/LICENSE.md). + +To avoid issues with AGPL virality, we've released the JavaScript tracker which gets included on your website under the MIT license. You can [find it here](https://github.com/plausible/analytics/blob/master/tracker/LICENSE.md). + +Copyright (c) 2018-present Plausible Insights OÜ. Plausible Analytics name and logo are trademarks of Plausible Insights OÜ. Please see our [trademark guidelines](https://plausible.io/trademark) for info on acceptable usage. \ No newline at end of file diff --git a/apps/plausible-ce/metadata/logo.jpg b/apps/plausible-ce/metadata/logo.jpg new file mode 100644 index 00000000..27bf655b Binary files /dev/null and b/apps/plausible-ce/metadata/logo.jpg differ diff --git a/apps/plausible/config.json b/apps/plausible/config.json index 5cc06e26..39a4fc12 100644 --- a/apps/plausible/config.json +++ b/apps/plausible/config.json @@ -5,12 +5,11 @@ "available": true, "exposable": true, "id": "plausible", - "tipi_version": 3, + "deprecated": true, + "tipi_version": 5, "version": "v1.5.1", - "categories": [ - "utilities" - ], - "description": "Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.", + "categories": ["utilities"], + "description": "Plausible Analytics is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR.", "short_desc": "Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.", "author": "Plausible", "source": "https://github.com/plausible/analytics", @@ -35,5 +34,7 @@ "env_variable": "PLAUSIBLE_DISABLE_REGISTRATION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724188518000 } diff --git a/apps/plausible/docker-compose.yml b/apps/plausible/docker-compose.yml index 8cc75049..ea68a256 100644 --- a/apps/plausible/docker-compose.yml +++ b/apps/plausible/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.7" +version: '3.9' services: plausible: container_name: plausible @@ -9,10 +9,10 @@ services: - plausible-db - plausible-events-db ports: - - ${APP_PORT}:8000 + - ${APP_PORT}:8000 environment: - - BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - - SECRET_KEY_BASE=${PLAUSIBLE_SECRET_KEY_BASE} + - BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - SECRET_KEY_BASE=${PLAUSIBLE_SECRET_KEY_BASE} - DATABASE_URL=postgres://tipi:${PLAUSIBLE_DB_PASSWORD}@plausible-db:5432/plausible-db - CLICKHOUSE_DATABASE_URL=http://plausible-events-db:8123/plausible_events_db - DISABLE_REGISTRATION=${PLAUSIBLE_DISABLE_REGISTRATION} @@ -43,11 +43,13 @@ services: traefik.http.routers.plausible-local.entrypoints: websecure traefik.http.routers.plausible-local.service: plausible traefik.http.routers.plausible-local.tls: true + # Runtipi managed runtipi.managed: true + plausible-db: - # supported versions are 12, 13, and 14 + # Supported versions are 12, 13 and 14 image: postgres:14-alpine - container_name: plausible-db + container_name: plausible-db restart: always networks: - tipi_main_network @@ -58,13 +60,15 @@ services: - POSTGRES_USER=tipi - POSTGRES_DB=plausible-db labels: + # Runtipi managed runtipi.managed: true + plausible-events-db: container_name: plausible-events-db image: clickhouse/clickhouse-server:22.6-alpine restart: always networks: - - tipi_main_network + - tipi_main_network volumes: - ${APP_DATA_DIR}/data/plausible-event-data:/var/lib/clickhouse - ${APP_DATA_DIR}/data/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro @@ -74,4 +78,5 @@ services: soft: 262144 hard: 262144 labels: + # Runtipi managed runtipi.managed: true diff --git a/apps/plausible/metadata/description.md b/apps/plausible/metadata/description.md index 3e243be7..e23df9c8 100644 --- a/apps/plausible/metadata/description.md +++ b/apps/plausible/metadata/description.md @@ -1,25 +1,88 @@ -[![Plausible Analytics](https://raw.githubusercontent.com/plausible/docs/master/static/img/plausible-analytics-icon-top.png)](https://plausible.io/) +# Plausible Analytics -[Simple Metrics](https://plausible.io/simple-web-analytics) | [Lightweight Script](https://plausible.io/lightweight-web-analytics) | [Privacy Focused](https://plausible.io/privacy-focused-web-analytics) | [Open Source](https://plausible.io/open-source-website-analytics) | [Docs](https://plausible.io/docs) | [Contributing](https://github.com/plausible/analytics/blob/master/CONTRIBUTING.md) - +

+ + Plausible Analytics + +

+

+ Simple Metrics | + Lightweight Script | + Privacy Focused | + Open Source | + Docs | + Contributing +

+

-[Plausible Analytics](https://plausible.io/) is a simple, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host or have us run Plausible for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺 +[Plausible Analytics](https://plausible.io/) is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host Plausible Community Edition or have us manage Plausible Analytics for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺 We are dedicated to making web analytics more privacy-friendly. Our mission is to reduce corporate surveillance by providing an alternative web analytics tool which doesn’t come from the AdTech world. We are completely independent and solely funded by our subscribers. -[![Plausible Analytics](https://camo.githubusercontent.com/74a68bf1e55052517b1eab2e7ec8fb12a2f065e5cd6f12dd2a5002f6dcdc0d82/68747470733a2f2f706c61757369626c652e696f2f646f63732f696d672f706c61757369626c652d616e616c79746963732e706e67)](https://camo.githubusercontent.com/74a68bf1e55052517b1eab2e7ec8fb12a2f065e5cd6f12dd2a5002f6dcdc0d82/68747470733a2f2f706c61757369626c652e696f2f646f63732f696d672f706c61757369626c652d616e616c79746963732e706e67) +![Plausible Analytics](https://plausible.io/docs/img/plausible-analytics.png) ## Why Plausible? -Here's what makes Plausible a great Google Analytics alternative and why we're trusted by thousands of paying subscribers to deliver their website and business insights: +Here's what makes Plausible a great Google Analytics alternative and why we're trusted by 12,000+ paying subscribers to deliver their website and business insights: -- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary. -- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy) -- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. -- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications. -- **Open website stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. -- **Define key goals and track conversions**: Set custom events or page URLs as your goals and see how they convert over time to understand and identify the trends that matter. Includes easy ways to track outbound link clicks and 404 error pages. -- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords. -- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing). +- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary. +- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy) +- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. You can also send events directly to our [events API](https://plausible.io/docs/events-api). +- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications. +- **Invite team members and share stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. You can [invite team members](https://plausible.io/docs/users-roles) and assign user roles too. +- **Define key goals and track conversions**: Create custom events with custom dimensions to track conversions and attribution to understand and identify the trends that matter. Includes easy ways to track outbound link clicks, file downloads and 404 error pages. +- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords. +- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing). +- **Smooth transition from Google Analytics**: There's a realtime dashboard, entry pages report and integration with Search Console. You can track your paid campaigns and conversions. You can invite team members. You can even [import your historical Google Analytics stats](https://plausible.io/docs/google-analytics-import). Learn how to [get the most out of your Plausible experience](https://plausible.io/docs/your-plausible-experience) and join thousands who have already migrated from Google Analytics. -Interested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs). \ No newline at end of file +Interested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs). + +## Why is Plausible Analytics Cloud not free like Google Analytics? + +Plausible Analytics is an independently owned and actively developed project. To keep the project development going, to stay in business, to continue putting effort into building a better product and to cover our costs, we need to charge a fee. + +Google Analytics is free because Google has built their company and their wealth by collecting and analyzing huge amounts of personal information from web users and using these personal and behavioral insights to sell advertisements. + +Plausible has no part in that business model. No personal data is being collected and analyzed either. With Plausible, you 100% own and control all of your website data. This data is not being shared with or sold to any third-parties. + +We choose the subscription business model rather than the business model of surveillance capitalism. See reasons why we believe you should [stop using Google Analytics on your website](https://plausible.io/blog/remove-google-analytics). + +## Getting started with Plausible + +The easiest way to get started with Plausible Analytics is with [our official managed service in the cloud](https://plausible.io/#pricing). It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. + +In order to be compliant with the GDPR and the Schrems II ruling, all visitor data for our managed service in the cloud is exclusively processed on servers and cloud infrastructure owned and operated by European providers. Your website data never leaves the EU. + +Our managed hosting can save a substantial amount of developer time and resources. For most sites this ends up being the best value option and the revenue goes to funding the maintenance and further development of Plausible. So you’ll be supporting open source software and getting a great service! + +### Can Plausible be self-hosted? + +Plausible is [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer and self-hosted solution called [Plausible Community Edition (CE)](https://plausible.io/self-hosted-web-analytics). Here are the differences between Plausible Analytics managed hosting in the cloud and the Plausible CE: + +| | Plausible Analytics Cloud | Plausible Community Edition | +| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Infrastructure management** | Easy and convenient. It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. We manage everything so you don’t have to worry about anything and can focus on your stats. | You do it all yourself. You need to get a server and you need to manage your infrastructure. You are responsible for installation, maintenance, upgrades, server capacity, uptime, backup, security, stability, consistency, loading time and so on. | +| **Release schedule** | Continuously developed and improved with new features and updates multiple times per week. | [It's a long term release](https://plausible.io/blog/building-open-source) published twice per year so latest features and improvements won't be immediately available. | +| **Premium features** | All features available as listed in [our pricing plans](https://plausible.io/#pricing). | Selected premium features such as funnels and ecommerce revenue goals are not available as we aim to ensure a [protective barrier around our cloud offering](https://plausible.io/blog/community-edition). | +| **Bot filtering** | Advanced bot filtering for more accurate stats. Our algorithm detects and excludes non-human traffic patterns. We also exclude known bots by the User-Agent header and filter out traffic from data centers and referrer spam domains. | Basic bot filtering that targets the most common non-human traffic based on the User-Agent header and referrer spam domains. | +| **Server location** | All visitor data is exclusively processed on EU-owned cloud infrastructure. We keep your site data on a secure, encrypted and green energy powered server in Germany. This ensures that your site data is protected by the strict European Union data privacy laws and ensures compliance with GDPR. Your website data never leaves the EU. | You have full control and can host your instance on any server in any country that you wish. Host it on a server in your basement or host it with any cloud provider wherever you want, even those that are not GDPR compliant. | +| **Data portability** | You see all your site stats and metrics on our modern-looking, simple to use and fast loading dashboard. You can only see the stats aggregated in the dashboard. You can download the stats using the [CSV export](https://plausible.io/docs/export-stats), [stats API](https://plausible.io/docs/stats-api) or tools such as the [Data Studio Connector](https://plausible.io/docs/integration-guides#google-data-studio). | Do you want access to the raw data? Self-hosting gives you that option. You can take the data directly from the ClickHouse database. | +| **Premium support** | Real support delivered by real human beings who build and maintain Plausible. | Premium support is not included. CE is community supported only. | +| **Costs** | There's a cost associated with providing an analytics service so we charge a subscription fee. We choose the subscription business model rather than the business model of surveillance capitalism. Your money funds further development of Plausible. | You need to pay for your server, CDN, backups and whatever other cost there is associated with running the infrastructure. You never have to pay any fees to us. Your money goes to 3rd party companies with no connection to us. | + +Interested in self-hosting Plausible CE on your server? Take a look at our [Plausible CE installation instructions](https://github.com/plausible/community-edition/). + +Plausible CE is a community supported project and there are no guarantees that you will get support from the creators of Plausible to troubleshoot your self-hosting issues. There is a [community supported forum](https://github.com/plausible/analytics/discussions/categories/self-hosted-support) where you can ask for help. + +Our only source of funding is our premium, managed service for running Plausible in the cloud. + +## Technology + +Plausible Analytics is a standard Elixir/Phoenix application backed by a PostgreSQL database for general data and a Clickhouse +database for stats. On the frontend we use [TailwindCSS](https://tailwindcss.com/) for styling and React to make the dashboard interactive. + +## Feedback & Roadmap + +We welcome feedback from our community. We have a public roadmap driven by the features suggested by the community members. Take a look at our [feedback board](https://plausible.io/feedback). Please let us know if you have any requests and vote on open issues so we can better prioritize. + +To stay up to date with all the latest news and product updates, make sure to follow us on [X (formerly Twitter)](https://twitter.com/plausiblehq), [LinkedIn](https://www.linkedin.com/company/plausible-analytics/) or [Mastodon](https://fosstodon.org/@plausible). diff --git a/apps/plex/config.json b/apps/plex/config.json index 0e9e016e..3bb98235 100644 --- a/apps/plex/config.json +++ b/apps/plex/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 32400, "id": "plex", - "tipi_version": 28, - "version": "1.40.4", + "tipi_version": 30, + "version": "1.41.0", "url_suffix": "/web", "categories": ["media"], "description": "", @@ -14,5 +14,7 @@ "author": "plexinc", "source": "https://github.com/plexinc/pms-docker", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726236941000 } diff --git a/apps/plex/docker-compose.yml b/apps/plex/docker-compose.yml index 34490f98..8b7d2dcf 100644 --- a/apps/plex/docker-compose.yml +++ b/apps/plex/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: plex: - image: lscr.io/linuxserver/plex:1.40.4 + image: lscr.io/linuxserver/plex:1.41.0 container_name: plex network_mode: host environment: diff --git a/apps/podfetch/config.json b/apps/podfetch/config.json index de59b274..806badb2 100644 --- a/apps/podfetch/config.json +++ b/apps/podfetch/config.json @@ -7,9 +7,7 @@ "id": "podfetch", "tipi_version": 3, "version": "latest", - "categories": [ - "media" - ], + "categories": ["media"], "description": "A sleek and efficient podcast downloader.", "short_desc": "A sleek and efficient podcast downloader.", "author": "SamTV12345", @@ -48,5 +46,7 @@ "env_variable": "PODFETCH_PODINDEX_API_SECRET" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/portainer/config.json b/apps/portainer/config.json index bae35927..4cb41bc9 100644 --- a/apps/portainer/config.json +++ b/apps/portainer/config.json @@ -6,13 +6,15 @@ "exposable": true, "https": true, "id": "portainer", - "tipi_version": 22, - "version": "2.20.3-alpine", + "tipi_version": 24, + "version": "2.21.1-alpine", "categories": ["utilities"], "description": "", "short_desc": "Making Docker and Kubernetes management easy.", "author": "portainer.io", "source": "https://github.com/portainer/portainer", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725928195000 } diff --git a/apps/portainer/docker-compose.yml b/apps/portainer/docker-compose.yml index 10023395..faba1ac8 100644 --- a/apps/portainer/docker-compose.yml +++ b/apps/portainer/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: portainer: - image: portainer/portainer-ce:2.20.3-alpine + image: portainer/portainer-ce:2.21.1-alpine container_name: portainer restart: unless-stopped ports: diff --git a/apps/postfix-relay/config.json b/apps/postfix-relay/config.json index 68a3f811..209b8fc4 100644 --- a/apps/postfix-relay/config.json +++ b/apps/postfix-relay/config.json @@ -6,11 +6,9 @@ "no_gui": true, "port": 2525, "id": "postfix-relay", - "tipi_version": 1, + "tipi_version": 2, "version": "1.4.0", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Simple SMTP relay for environments where you may have private servers with no Internet connection.", "short_desc": "Simple SMTP relay for environments where you may have private servers with no Internet connection.", "author": "shamil", @@ -22,7 +20,8 @@ "hint": "Space delimited list of networks to accept mail from.", "placeholder": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", "env_variable": "RELAY_ACCEPTED_NETWORKS" - },{ + }, + { "type": "text", "label": "SMTP Host", "hint": "External relay DNS name.", @@ -69,5 +68,7 @@ "env_variable": "RELAY_USE_TLS" } ], - "supported_architectures": ["amd64"] -} \ No newline at end of file + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 +} diff --git a/apps/postfix-relay/metadata/logo.jpg b/apps/postfix-relay/metadata/logo.jpg index b3f4a94e..0542ea77 100644 Binary files a/apps/postfix-relay/metadata/logo.jpg and b/apps/postfix-relay/metadata/logo.jpg differ diff --git a/apps/privatebin/config.json b/apps/privatebin/config.json index 5a76e169..ddd8c955 100644 --- a/apps/privatebin/config.json +++ b/apps/privatebin/config.json @@ -15,5 +15,7 @@ "form_fields": [], "uid": 65534, "gid": 82, - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/prowlarr/config.json b/apps/prowlarr/config.json index 392f39bb..9f945913 100644 --- a/apps/prowlarr/config.json +++ b/apps/prowlarr/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8109, "id": "prowlarr", - "tipi_version": 11, - "version": "1.21.2", + "tipi_version": 12, + "version": "1.23.1", "categories": ["media", "utilities"], "description": "Prowlarr is an indexer manager/proxy built on the popular *arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports management of both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Lidarr, Mylar3, Radarr, Readarr, and Sonarr offering complete management of your indexers with no per app Indexer setup required (we do it all).", "short_desc": "A torrent/usenet indexer manager/proxy", "author": "Prowlarr", "source": "https://github.com/Prowlarr/Prowlarr/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725273337000 } diff --git a/apps/prowlarr/docker-compose.yml b/apps/prowlarr/docker-compose.yml index 2430227a..bae8a43a 100644 --- a/apps/prowlarr/docker-compose.yml +++ b/apps/prowlarr/docker-compose.yml @@ -1,7 +1,7 @@ services: prowlarr: # Should be exact same name as "id" field in config.json container_name: prowlarr # Should be exact same name as "id" field in config.json - image: ghcr.io/linuxserver/prowlarr:1.21.2 + image: ghcr.io/linuxserver/prowlarr:1.23.1 environment: - TZ=${TZ} # Can use any env variable. List in runtipi/templates/env-sample dns: diff --git a/apps/proxitok/config.json b/apps/proxitok/config.json index 4d31d35c..99bebb25 100644 --- a/apps/proxitok/config.json +++ b/apps/proxitok/config.json @@ -13,5 +13,7 @@ "author": "pablouser1", "source": "https://github.com/pablouser1/ProxiTok", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/qbittorrent/config.json b/apps/qbittorrent/config.json index d02fe41c..89b856c2 100644 --- a/apps/qbittorrent/config.json +++ b/apps/qbittorrent/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8133, "id": "qbittorrent", - "tipi_version": 14, - "version": "4.6.5", + "tipi_version": 17, + "version": "4.6.6", "categories": ["utilities"], "description": "qBittorrent is a fast, easy, and free BitTorrent client.", "short_desc": "Fast, easy, and free BitTorrent client", "author": "qBittorrent project", "source": "https://github.com/qbittorrent/qBittorrent", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724173158000 } diff --git a/apps/qbittorrent/docker-compose.yml b/apps/qbittorrent/docker-compose.yml index 2054abf0..6df6f35a 100644 --- a/apps/qbittorrent/docker-compose.yml +++ b/apps/qbittorrent/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: qbittorrent: - image: lscr.io/linuxserver/qbittorrent:4.6.5 + image: lscr.io/linuxserver/qbittorrent:4.6.6 container_name: qbittorrent dns: - ${DNS_IP} diff --git a/apps/qdirstat/config.json b/apps/qdirstat/config.json index 4ed9d037..6dedc289 100644 --- a/apps/qdirstat/config.json +++ b/apps/qdirstat/config.json @@ -7,13 +7,13 @@ "id": "qdirstat", "tipi_version": 1, "version": "1.8.1-ls82", - "categories": [ - "Utilities" - ], + "categories": ["Utilities"], "description": "QDirStat Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.", "short_desc": "A graphical disk usage analyzer", "author": "Stefan Hundhammer", "source": "https://github.com/linuxserver/docker-qdirstat", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/radarr/config.json b/apps/radarr/config.json index 0c4f85a6..cc4c6d61 100644 --- a/apps/radarr/config.json +++ b/apps/radarr/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8088, "id": "radarr", - "tipi_version": 17, - "version": "5.8.3", + "tipi_version": 18, + "version": "5.9.1", "categories": ["media", "utilities"], "description": "Radarr is a movie collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new movies and will interface with clients and indexers to grab, sort, and rename them. It can also be configured to automatically upgrade the quality of existing files in the library when a better quality format becomes available. Note that only one type of a given movie is supported. If you want both an 4k version and 1080p version of a given movie you will need multiple instances.", "short_desc": "Movie collection manager for Usenet and BitTorrent users.", "author": "radarr.video", "source": "https://github.com/Radarr/Radarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724188440000 } diff --git a/apps/radarr/docker-compose.yml b/apps/radarr/docker-compose.yml index 7751f8e4..bd74e11a 100644 --- a/apps/radarr/docker-compose.yml +++ b/apps/radarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: radarr: - image: ghcr.io/linuxserver/radarr:5.8.3 + image: ghcr.io/linuxserver/radarr:5.9.1 container_name: radarr environment: - PUID=1000 diff --git a/apps/rallly/config.json b/apps/rallly/config.json index e65683f8..bb202c73 100644 --- a/apps/rallly/config.json +++ b/apps/rallly/config.json @@ -6,8 +6,8 @@ "exposable": true, "id": "rallly", "description": "Rallly is an open-source scheduling and collaboration tool designed to make organizing events and meetings easier.", - "tipi_version": 8, - "version": "3.9.0", + "tipi_version": 11, + "version": "3.10.1", "categories": ["utilities"], "short_desc": "Scheduling and collaboration tool", "author": "lukevella", @@ -98,5 +98,7 @@ "required": false, "env_variable": "RALLLY_SMTP_PWD" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1726205946000 } diff --git a/apps/rallly/docker-compose.yml b/apps/rallly/docker-compose.yml index b940fc05..5aeaff95 100644 --- a/apps/rallly/docker-compose.yml +++ b/apps/rallly/docker-compose.yml @@ -1,7 +1,7 @@ services: rallly: container_name: rallly - image: lukevella/rallly:3.9.0 + image: lukevella/rallly:3.10.1 restart: always depends_on: rallly_db: diff --git a/apps/readarr/config.json b/apps/readarr/config.json index 979c9aab..552c7d0a 100644 --- a/apps/readarr/config.json +++ b/apps/readarr/config.json @@ -13,5 +13,7 @@ "author": "readarr.com", "source": "https://github.com/Readarr/Readarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/recyclarr/config.json b/apps/recyclarr/config.json index 849b2c9d..5d3fc91a 100644 --- a/apps/recyclarr/config.json +++ b/apps/recyclarr/config.json @@ -8,8 +8,8 @@ "uid": 1000, "gid": 1000, "id": "recyclarr", - "tipi_version": 14, - "version": "7.1.1", + "tipi_version": 19, + "version": "7.2.4", "categories": ["media", "utilities"], "description": "Automatically sync TRaSH Guides to your Sonarr and Radarr instances", "short_desc": "Sync TRaSH Guides.", @@ -17,5 +17,7 @@ "source": "https://github.com/recyclarr/recyclarr", "website": "https://recyclarr.dev", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726355398000 } diff --git a/apps/recyclarr/docker-compose.yml b/apps/recyclarr/docker-compose.yml index ad817f70..6917f1be 100644 --- a/apps/recyclarr/docker-compose.yml +++ b/apps/recyclarr/docker-compose.yml @@ -2,7 +2,7 @@ services: recyclarr: user: ${TIPI_UID}:${TIPI_GID} container_name: recyclarr - image: ghcr.io/recyclarr/recyclarr:7.1.1 + image: ghcr.io/recyclarr/recyclarr:7.2.4 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/config:/config diff --git a/apps/resilio-sync/config.json b/apps/resilio-sync/config.json index 24aed893..743734bd 100644 --- a/apps/resilio-sync/config.json +++ b/apps/resilio-sync/config.json @@ -4,13 +4,17 @@ "port": 8113, "available": true, "id": "resilio-sync", - "tipi_version": 4, - "version": "2.8.1", + "tipi_version": 5, + "version": "3.0.0", + "uid": 1000, + "gid": 1000, "categories": ["data", "utilities"], - "description": "", - "short_desc": "Resilio Sync is a fast, reliable, and simple file sync and share solution, powered by P2P technology", + "description": "Resilio Sync is a fast, reliable, and simple file sync and share solution, powered by P2P technology", + "short_desc": "Fast, reliable, and simple file sync and share solution.", "author": "Resilio, Inc.", "source": "https://github.com/bt-sync", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724439921000 } diff --git a/apps/resilio-sync/docker-compose.yml b/apps/resilio-sync/docker-compose.yml index d8d9d491..2a3748d6 100644 --- a/apps/resilio-sync/docker-compose.yml +++ b/apps/resilio-sync/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: resilio-sync: - image: lscr.io/linuxserver/resilio-sync:2.8.1 + image: lscr.io/linuxserver/resilio-sync:3.0.0 container_name: resilio-sync environment: - PUID=1000 diff --git a/apps/revolt/config.json b/apps/revolt/config.json index 40ba20e1..290f9c76 100644 --- a/apps/revolt/config.json +++ b/apps/revolt/config.json @@ -78,11 +78,19 @@ "hint": "Choose whether you want Open Signups or have the Platform Invite Only", "required": true, "options": [ - { "label": "Open Signups", "value": "0" }, - { "label": "Invite Only", "value": "1" } + { + "label": "Open Signups", + "value": "0" + }, + { + "label": "Invite Only", + "value": "1" + } ], "env_variable": "REVOLT_INVITE_ONLY" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/revolt/docker-compose.yml b/apps/revolt/docker-compose.yml index b075bef8..60a9af51 100644 --- a/apps/revolt/docker-compose.yml +++ b/apps/revolt/docker-compose.yml @@ -140,7 +140,7 @@ services: labels: runtipi.managed: true revolt-api: - image: ghcr.io/revoltchat/server:20240611-3 + image: ghcr.io/revoltchat/server:20240829-3 container_name: revolt-api depends_on: - revolt-database @@ -177,7 +177,7 @@ services: labels: runtipi.managed: true revolt-events: - image: ghcr.io/revoltchat/bonfire:20240611-3 + image: ghcr.io/revoltchat/bonfire:20240829-3 container_name: revolt-events depends_on: - revolt-database @@ -214,7 +214,7 @@ services: labels: runtipi.managed: true revolt-autumn: - image: ghcr.io/revoltchat/autumn:1.1.10 + image: ghcr.io/revoltchat/autumn:1.1.11 container_name: revolt-autumn depends_on: - revolt-database diff --git a/apps/romm/config.json b/apps/romm/config.json index 50cc2f8d..a770523f 100644 --- a/apps/romm/config.json +++ b/apps/romm/config.json @@ -7,9 +7,7 @@ "id": "romm", "tipi_version": 13, "version": "2.3.1", - "categories": [ - "gaming" - ], + "categories": ["gaming"], "description": "RomM (Rom Manager) is a web based retro roms manager integrated with IGDB.", "short_desc": "RomM (Rom Manager) is a web based retro roms manager integrated with IGDB.", "author": "Zurdi15", @@ -43,8 +41,7 @@ "env_variable": "ROMM_STEAMGRIDDB_API_KEY" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/rss/config.json b/apps/rss/config.json index 2c70694b..4c547348 100644 --- a/apps/rss/config.json +++ b/apps/rss/config.json @@ -5,19 +5,15 @@ "available": true, "exposable": true, "id": "rss", - "tipi_version": 9, - "version": "1.5.0", - "categories": [ - "utilities", - "media" - ], + "tipi_version": 11, + "version": "1.5.2", + "categories": ["utilities", "media"], "description": "A simple twitter-feed-style RSS aggregator written in PHP, Laravel, Inertia.js, Tailwind and Vue.js", "short_desc": "A simple, opinionated, RSS feed aggregator.", "author": "https://github.com/ssddanbrown", "source": "https://github.com/ssddanbrown/rss", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/rss/docker-compose.yml b/apps/rss/docker-compose.yml index 3ef28ce5..7961a582 100644 --- a/apps/rss/docker-compose.yml +++ b/apps/rss/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: rss: - image: ghcr.io/ssddanbrown/rss:v1.5.0 + image: codeberg.org/danb/rss:v1.5.2 container_name: rss environment: - APP_NAME=Tipi-RSS diff --git a/apps/rsshub/config.json b/apps/rsshub/config.json index 01afa34e..aab725f3 100644 --- a/apps/rsshub/config.json +++ b/apps/rsshub/config.json @@ -23,5 +23,7 @@ "env_variable": "ACCESS_KEY" } ], - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/ryot/config.json b/apps/ryot/config.json index c38dcbe3..315fe83a 100644 --- a/apps/ryot/config.json +++ b/apps/ryot/config.json @@ -7,9 +7,7 @@ "id": "ryot", "tipi_version": 25, "version": "2.24.2", - "categories": [ - "media" - ], + "categories": ["media"], "description": "Roll your own tracker!", "short_desc": "Roll your own tracker!", "author": "IgnisDa", @@ -44,5 +42,7 @@ "env_variable": "RYOT_VIDEO_GAMES_TWITCH_CLIENT_SECRET" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/sabnzbd/config.json b/apps/sabnzbd/config.json index 07c9e2ab..32b0af3f 100644 --- a/apps/sabnzbd/config.json +++ b/apps/sabnzbd/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "sabnzbd", - "tipi_version": 15, - "version": "4.3.2", + "tipi_version": 16, + "version": "4.3.3", "categories": ["media", "utilities"], "description": "Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.", "short_desc": "Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can", "author": "Sabnzbd", "source": "https://github.com/sabnzbd/sabnzbd", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724250967000 } diff --git a/apps/sabnzbd/docker-compose.yml b/apps/sabnzbd/docker-compose.yml index 21499b4e..a7c5d1c4 100644 --- a/apps/sabnzbd/docker-compose.yml +++ b/apps/sabnzbd/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: sabnzbd: - image: lscr.io/linuxserver/sabnzbd:4.3.2 + image: lscr.io/linuxserver/sabnzbd:4.3.3 container_name: sabnzbd ports: - ${APP_PORT}:8080 diff --git a/apps/schema.json b/apps/schema.json index d9b25365..c90c98d0 100644 --- a/apps/schema.json +++ b/apps/schema.json @@ -104,6 +104,9 @@ "type": "string", "pattern": "^/[a-z0-9-_/]+$" }, + "min_tipi_version": { + "type": "string" + }, "form_fields": { "type": "array", "items": [ @@ -135,6 +138,12 @@ }, "dynamic_config": { "type": "boolean" + }, + "created_at": { + "type": "number" + }, + "updated_at": { + "type": "number" } }, "required": [ diff --git a/apps/scrypted/config.json b/apps/scrypted/config.json index 18176be5..5bded8a1 100644 --- a/apps/scrypted/config.json +++ b/apps/scrypted/config.json @@ -8,9 +8,7 @@ "id": "scrypted", "tipi_version": 7, "version": "18-jammy-full.s6-v0.88.0", - "categories": [ - "security" - ], + "categories": ["security"], "description": "Scrypted is a high performance home video integration and automation platform", "short_desc": "High performance home video integration and automation platform", "author": "Koush", @@ -23,8 +21,7 @@ "env_variable": "SCRYPTED_BEARER_TOKEN" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/searxng/config.json b/apps/searxng/config.json index 7635e3c8..1cc8a61e 100644 --- a/apps/searxng/config.json +++ b/apps/searxng/config.json @@ -7,9 +7,7 @@ "id": "searxng", "tipi_version": 5, "version": "latest", - "categories": [ - "social" - ], + "categories": ["social"], "description": "SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled.", "short_desc": "Privacy-respecting, hackable metasearch engine", "author": "searxng", @@ -22,5 +20,7 @@ "env_variable": "SEARXNG_SECRET_KEY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/seedsync/config.json b/apps/seedsync/config.json index 36796a97..f976f314 100644 --- a/apps/seedsync/config.json +++ b/apps/seedsync/config.json @@ -6,7 +6,7 @@ "exposable": true, "id": "seedsync", "description": "SeedSync is a tool to sync the files on a remote Linux server (like your seedbox, for example). It uses LFTP to transfer files fast!", - "tipi_version": 1, + "tipi_version": 2, "version": "0.8.6", "categories": ["utilities"], "short_desc": "SeedSync is a tool to sync the files on a remote Linux server.", @@ -29,5 +29,7 @@ "placeholder": "1000", "env_variable": "SEEDSYNC_PGID" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/seedsync/metadata/logo.jpg b/apps/seedsync/metadata/logo.jpg index 56503be7..050f0d22 100644 Binary files a/apps/seedsync/metadata/logo.jpg and b/apps/seedsync/metadata/logo.jpg differ diff --git a/apps/semaphore/config.json b/apps/semaphore/config.json index 5f0abf76..d686022c 100644 --- a/apps/semaphore/config.json +++ b/apps/semaphore/config.json @@ -8,8 +8,8 @@ "port": 8526, "categories": ["development"], "description": "Semaphore is a modern UI for Ansible, Terraform/OpenTofu, Bash and Pulumi. It lets you easily run Ansible playbooks, get notifications about fails, control access to deployment system.", - "tipi_version": 8, - "version": "2.19.10", + "tipi_version": 11, + "version": "v2.10.22", "source": "https://github.com/semaphoreui/semaphore", "website": "https://semaphoreui.com", "exposable": true, @@ -46,5 +46,7 @@ "min": 32, "env_variable": "SEMAPHORE_ACCESS_KEY_ENCRYPTION" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/semaphore/docker-compose.yml b/apps/semaphore/docker-compose.yml index cd1406c3..9d842091 100644 --- a/apps/semaphore/docker-compose.yml +++ b/apps/semaphore/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: semaphore: container_name: semaphore - image: semaphoreui/semaphore:v2.19.10 + image: semaphoreui/semaphore:v2.10.22 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/repositories:/repositories diff --git a/apps/send/config.json b/apps/send/config.json index 15227503..8cd60657 100644 --- a/apps/send/config.json +++ b/apps/send/config.json @@ -7,13 +7,13 @@ "id": "send", "tipi_version": 3, "version": "latest", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "A file sharing experiment which allows you to send encrypted files to other users.", "short_desc": "Simple, private file sharing. https://send.vis.ee/", "author": "timvisee", "source": "https://gitlab.com/timvisee/send", "form_fields": [], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/serge/config.json b/apps/serge/config.json index a81d3162..c46c8fc2 100644 --- a/apps/serge/config.json +++ b/apps/serge/config.json @@ -5,18 +5,15 @@ "exposable": true, "port": 8008, "id": "serge", - "tipi_version": 9, + "tipi_version": 10, "version": "0.9.0", - "categories": [ - "ai" - ], + "categories": ["ai"], "description": "", "short_desc": "LLaMA made easy", "author": "nsarrazin", "source": "https://github.com/serge-chat/serge", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/serge/metadata/logo.jpg b/apps/serge/metadata/logo.jpg index 76d07404..d61bbe75 100644 Binary files a/apps/serge/metadata/logo.jpg and b/apps/serge/metadata/logo.jpg differ diff --git a/apps/sftpgo/config.json b/apps/sftpgo/config.json index 7bc82aa0..549c348e 100644 --- a/apps/sftpgo/config.json +++ b/apps/sftpgo/config.json @@ -52,5 +52,7 @@ "env_variable": "SFTPGO_GRACE_TIME" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/sftpgo/docker-compose.yml b/apps/sftpgo/docker-compose.yml index 4807c515..3210be83 100644 --- a/apps/sftpgo/docker-compose.yml +++ b/apps/sftpgo/docker-compose.yml @@ -66,7 +66,7 @@ services: runtipi.managed: true sftpgo-db: container_name: sftpgo-db - image: docker.io/library/postgres:16.3-alpine + image: docker.io/library/postgres:16.4-alpine restart: unless-stopped networks: - tipi_main_network diff --git a/apps/shlink/config.json b/apps/shlink/config.json index 55211d46..d3c566e7 100644 --- a/apps/shlink/config.json +++ b/apps/shlink/config.json @@ -6,11 +6,9 @@ "force_expose": true, "port": 8207, "id": "shlink", - "tipi_version": 5, + "tipi_version": 6, "version": "3.7.4", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Shlink is a self-hosted URL shortener which provides both a REST and a CLI interface to interact with it.", "short_desc": "Shlink is a self-hosted URL shortener", "author": "https://shlink.io/", @@ -24,8 +22,7 @@ "env_variable": "SHLINK_POSTGRES_PASSWORD" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724410930192 } diff --git a/apps/shlink/docker-compose.yml b/apps/shlink/docker-compose.yml index 16febfb9..214d0046 100644 --- a/apps/shlink/docker-compose.yml +++ b/apps/shlink/docker-compose.yml @@ -47,7 +47,7 @@ services: runtipi.managed: true shlink-db: container_name: shlink-db - image: docker.io/library/postgres:16.3-alpine + image: docker.io/library/postgres:16.4-alpine restart: unless-stopped networks: - tipi_main_network diff --git a/apps/shlink/metadata/logo.jpg b/apps/shlink/metadata/logo.jpg index 00495459..cdc9a43e 100644 Binary files a/apps/shlink/metadata/logo.jpg and b/apps/shlink/metadata/logo.jpg differ diff --git a/apps/silverbullet/config.json b/apps/silverbullet/config.json index 0ed06cc5..f1d0102b 100644 --- a/apps/silverbullet/config.json +++ b/apps/silverbullet/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "silverbullet", - "tipi_version": 12, - "version": "0.8.4", + "tipi_version": 16, + "version": "0.9.4", "categories": ["utilities"], "description": "SilverBullet aims to be your workshop for the mind", "short_desc": "SilverBullet is a creative space where you collect, create and expand your personal knowledge, while also letting you constantly evolve the tools you use to do so.", @@ -31,5 +31,7 @@ "env_variable": "SB_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725487886000 } diff --git a/apps/silverbullet/docker-compose.yml b/apps/silverbullet/docker-compose.yml index ab64363d..dc813276 100644 --- a/apps/silverbullet/docker-compose.yml +++ b/apps/silverbullet/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: silverbullet: - image: zefhemel/silverbullet:0.8.4 + image: zefhemel/silverbullet:0.9.4 container_name: 'silverbullet' restart: unless-stopped volumes: diff --git a/apps/simplex-smp/config.json b/apps/simplex-smp/config.json index 5eed1c93..c9997cb6 100644 --- a/apps/simplex-smp/config.json +++ b/apps/simplex-smp/config.json @@ -23,5 +23,7 @@ "env_variable": "SIMPLEX_SMP_PASSWORD" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/siyuan/config.json b/apps/siyuan/config.json index c6c7ee03..ee7b748a 100644 --- a/apps/siyuan/config.json +++ b/apps/siyuan/config.json @@ -8,8 +8,8 @@ "port": 6806, "categories": ["utilities"], "description": "SiYuan is a privacy-first personal knowledge management system, support fine-grained block-level reference and Markdown WYSIWYG.", - "tipi_version": 3, - "version": "3.1.1", + "tipi_version": 8, + "version": "3.1.6", "website": "https://b3log.org/siyuan/en/", "source": "https://github.com/siyuan-note/siyuan", "exposable": true, @@ -26,5 +26,7 @@ } ], "uid": 1000, - "gid": 1000 + "gid": 1000, + "created_at": 1691943801422, + "updated_at": 1725943389000 } diff --git a/apps/siyuan/docker-compose.yml b/apps/siyuan/docker-compose.yml index 6750f5ee..bf253500 100644 --- a/apps/siyuan/docker-compose.yml +++ b/apps/siyuan/docker-compose.yml @@ -1,6 +1,6 @@ services: siyuan: - image: b3log/siyuan:v3.1.1 + image: b3log/siyuan:v3.1.6 container_name: siyuan command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${SIYUAN_ACCESS_AUTH_CODE}'] user: "1000:1000" diff --git a/apps/slskd/config.json b/apps/slskd/config.json index cd756249..25b08918 100644 --- a/apps/slskd/config.json +++ b/apps/slskd/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "slskd", "description": "A modern client-server application for the Soulseek file-sharing network.", - "tipi_version": 5, - "version": "0.21.3", + "tipi_version": 7, + "version": "0.21.4", "categories": ["utilities"], "short_desc": "P2P downloads", "author": "jpdillingham", @@ -51,5 +51,7 @@ "required": true, "env_variable": "SLSKD_REMOTE_CONFIGURATION" } - ] + ], + "created_at": 1691943801422, + "updated_at": 1726355537000 } diff --git a/apps/slskd/docker-compose.yml b/apps/slskd/docker-compose.yml index 6d59af55..f40af8f9 100644 --- a/apps/slskd/docker-compose.yml +++ b/apps/slskd/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: slskd: - image: slskd/slskd:0.21.3 + image: slskd/slskd:0.21.4 container_name: slskd volumes: - "${APP_DATA_DIR}:/app" diff --git a/apps/slskd/metadata/logo.jpg b/apps/slskd/metadata/logo.jpg index 41b05b01..586b8291 100644 Binary files a/apps/slskd/metadata/logo.jpg and b/apps/slskd/metadata/logo.jpg differ diff --git a/apps/sonarr/config.json b/apps/sonarr/config.json index 8a4261ab..351f5ef7 100644 --- a/apps/sonarr/config.json +++ b/apps/sonarr/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8098, "id": "sonarr", - "tipi_version": 14, - "version": "4.0.8", + "tipi_version": 15, + "version": "4.0.9", "categories": ["media", "utilities"], "description": "Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", "short_desc": "TV show manager for Usenet and BitTorrent", "author": "sonarr.tv", "source": "https://github.com/Sonarr/Sonarr", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724649301000 } diff --git a/apps/sonarr/docker-compose.yml b/apps/sonarr/docker-compose.yml index ba458291..69023066 100644 --- a/apps/sonarr/docker-compose.yml +++ b/apps/sonarr/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: sonarr: - image: lscr.io/linuxserver/sonarr:4.0.8 + image: lscr.io/linuxserver/sonarr:4.0.9 container_name: sonarr environment: - PUID=1000 diff --git a/apps/spacedrive/config.json b/apps/spacedrive/config.json old mode 100755 new mode 100644 index 51391f46..fc5ee1e8 --- a/apps/spacedrive/config.json +++ b/apps/spacedrive/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 9300, "id": "spacedrive", - "tipi_version": 4, - "version": "0.4.1", + "tipi_version": 5, + "version": "0.4.2", "categories": ["utilities"], "description": "Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.", "short_desc": "Cross-platform file explorer", @@ -31,5 +31,7 @@ "env_variable": "SD_AUTH_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724015728000 } diff --git a/apps/spacedrive/docker-compose.yml b/apps/spacedrive/docker-compose.yml index 7bd14f3d..31503eba 100755 --- a/apps/spacedrive/docker-compose.yml +++ b/apps/spacedrive/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.9' services: spacedrive: container_name: spacedrive - image: ghcr.io/spacedriveapp/spacedrive/server:0.4.1 + image: ghcr.io/spacedriveapp/spacedrive/server:0.4.2 restart: unless-stopped environment: - SD_AUTH=${SD_AUTH_USER}:${SD_AUTH_PASSWORD} diff --git a/apps/speedtest-tracker/config.json b/apps/speedtest-tracker/config.json index 085c4008..639a76b7 100644 --- a/apps/speedtest-tracker/config.json +++ b/apps/speedtest-tracker/config.json @@ -5,9 +5,11 @@ "available": true, "exposable": true, "id": "speedtest-tracker", - "tipi_version": 35, - "version": "0.20.8", - "categories": ["utilities"], + "tipi_version": 41, + "version": "0.21.2", + "categories": [ + "utilities" + ], "description": "Speedtest Tracker is a self-hosted internet performance tracking application that runs speedtest checks against Ookla's Speedtest service.", "short_desc": "Internet performance tracking application.", "author": "alexjustesen", @@ -18,7 +20,40 @@ "label": "SPEEDTEST_TRACKER_DB_PASSWORD", "min": 32, "env_variable": "SPEEDTEST_TRACKER_DB_PASSWORD" + }, + { + "type": "text", + "label": "Application Key", + "env_variable": "SPEEDTEST_APP_KEY", + "min": 51, + "max": 51, + "default": "", + "required": true, + "hint": "Generate an app key at https://speedtest-tracker.dev/" + }, + { + "type": "text", + "label": "Speedtest Schedule (cron format)", + "env_variable": "SPEEDTEST_SCHEDULE", + "default": "30 * * * *", + "min": 9, + "max": 100, + "hint": "https://crontab.guru is a good resource" + }, + { + "type": "text", + "label": "Speedtest Servers (comma-separated IDs)", + "env_variable": "SPEEDTEST_SERVERS", + "default": "", + "min": 6, + "max": 100, + "hint": "Convenient-to-you speedtest servers may be found at https://speedtest.net/speedtest-servers-static.php" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": [ + "arm64", + "amd64" + ], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/speedtest-tracker/docker-compose.yml b/apps/speedtest-tracker/docker-compose.yml index 8b60062d..2a4cbe16 100644 --- a/apps/speedtest-tracker/docker-compose.yml +++ b/apps/speedtest-tracker/docker-compose.yml @@ -1,8 +1,6 @@ -version: '3.7' - services: speedtest-tracker: - image: lscr.io/linuxserver/speedtest-tracker:0.20.8 + image: lscr.io/linuxserver/speedtest-tracker:0.21.2 container_name: speedtest-tracker environment: - PUID=1000 @@ -13,7 +11,12 @@ services: - DB_DATABASE=speedtest-tracker - DB_USERNAME=tipi - DB_PASSWORD=${SPEEDTEST_TRACKER_DB_PASSWORD} + - SPEEDTEST_SCHEDULE=${SPEEDTEST_SCHEDULE:-'30 * * * *'} # every half-hour + - SPEEDTEST_SERVERS=${SPEEDTEST_SERVERS:-''} - TZ=${TZ} + - APP_TIMEZONE=${TZ} + - DISPLAY_TIMEZONE=${TZ} + - APP_KEY=${SPEEDTEST_APP_KEY} restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/speedtest-tracker/config:/config diff --git a/apps/speedtest-tracker/metadata/description.md b/apps/speedtest-tracker/metadata/description.md index d4ee7463..cedbef87 100644 --- a/apps/speedtest-tracker/metadata/description.md +++ b/apps/speedtest-tracker/metadata/description.md @@ -1,5 +1,22 @@ +# Speedtest Tracker -## Authentication +Speedtest Tracker is a self-hosted internet performance tracking application that runs speedtest checks against Ookla's Speedtest service. + +## About + +![v0.20.6 Speedtest Tracker Dashboard](https://F3367574858-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fvtb3s6TB12XY9iIx8YyJ%4Fuploads%2Fgit-blob-2896fa80b8d3f90cc8c4c495b8b9793af5f62244%2Fimage%20(2).png?alt=media&width=768&dpr=4&quality=100&sign=d549885e&sv=1) + +A self-hosted app to check your internet speed using Ookla's Speedtest service and track its history. Built using Laravel and the Speedtest CLI. + +The main use case for Speedtest Tracker is to build a history of your internet's performance so that you can be informed when you're not receiving your ISP's advertised rates. + +_...also some of us just like a lot of data._ + +These docs are up-to-date for version: `v0.21.2` + +## Configuration + +### Authentication Speedtest Tracker uses Filament for the admin panel. During the install process an admin account is created for you. @@ -10,23 +27,24 @@ Default User Account --- -## About +### SPEEDTEST_TRACKER_DB_PASSWORD -A Docker image to check your internet speed using Ookla's Speedtest service. Build using Laravel and the Speedtest CLI. -These docs are up-to-date for version: `v0.12.1` +This is the password for the PostgreSQL database used by Speedtest Tracker. It's automatically generated and should be a secure, random string of at least 32 characters. -![](https://834071469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fvtb3s6TB12XY9iIx8YyJ%2Fuploads%2FrOKoxV0cH35wwjkbAgvE%2Fdashboard_screenshot.jpg?alt=media&token=121f5175-4008-4b26-9655-bc67d1369710) +### SPEEDTEST_APP_KEY -### +This is the application key used by Laravel for encryption and other security features. You can retrieve one at the [Speedtest Tracker](https://speedtest-tracker.dev) site. -Introduction +### SPEEDTEST_SCHEDULE (cron format) -Speedtest Tracker is a self-hosted internet performance tracking application that runs speedtest checks against Ookla's Speedtest service. +This field allows you to set the schedule for running speed tests. It uses cron syntax. The default value is `30 * * * *`, which runs a test every 30 minutes. You can adjust this to your preferred frequency. [Crontab Guru](https://crontab.guru) is a good resource. -#### +### SPEEDTEST_SERVERS (comma-separated IDs) -Why might I want this? +Specify Speedtest servers to use for your tests. Enter one or more server IDs, separated by commas. To find server IDs, you can use the following method: -The main use case for Speedtest Tracker is to build a history of your internet's performance so that you can be informed when you're not receiving your ISP's advertised rates. +1. Open your web browser and navigate to [Speedtest.net's Servers page](https://www.speedtest.net/speedtest-servers.php) +2. This page will display a list of Speedtest servers along with their IDs, names, sponsors, and locations. +3. Find the server(s) you want to use and note down their IDs. +4. Enter these IDs in the Speedtest Servers field, separated by commas (e.g., "1234,5678,9012"). -_...also some of us just like a lot of data._ \ No newline at end of file diff --git a/apps/spoolman/config.json b/apps/spoolman/config.json index 12fcddbf..673aed86 100644 --- a/apps/spoolman/config.json +++ b/apps/spoolman/config.json @@ -5,11 +5,13 @@ "exposable": true, "id": "spoolman", "description": "Spoolman is a web service that helps you keep track of your filament spools and how they are being used. It acts as a database, where other printer software such as Octoprint and Moonraker can interact with to have a centralized place for spool information. For example, if used together with Moonraker, your spool weight will automatically be reduced as your print is progressing.", - "tipi_version": 4, - "version": "0.18.1", + "tipi_version": 8, + "version": "0.20.0", "categories": ["utilities", "automation"], "short_desc": "Keep track of your inventory of 3D-printer filament spools", "author": "Donkie", "source": "https://github.com/Donkie/Spoolman", - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725844884000 } diff --git a/apps/spoolman/docker-compose.yml b/apps/spoolman/docker-compose.yml index 252aa47c..6c71f28a 100644 --- a/apps/spoolman/docker-compose.yml +++ b/apps/spoolman/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: spoolman: container_name: spoolman - image: ghcr.io/donkie/spoolman:0.18.1 + image: ghcr.io/donkie/spoolman:0.20.0 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data:/home/app/.local/share/spoolman diff --git a/apps/sshwifty/config.json b/apps/sshwifty/config.json index 666816bd..2a96e4b0 100644 --- a/apps/sshwifty/config.json +++ b/apps/sshwifty/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "sshwifty", - "tipi_version": 16, - "version": "0.3.12-beta-release", + "tipi_version": 18, + "version": "0.3.14-beta-release", "categories": ["development"], "description": "Sshwifty is a SSH and Telnet connector made for the Web. It can be deployed on your computer or server to provide SSH and Telnet access interface for any compatible (standard) web browser.", "short_desc": "Web SSH & Telnet (WebSSH & WebTelnet client)", @@ -14,5 +14,7 @@ "source": "https://github.com/nirui/sshwifty", "website": "https://sshwifty-demo.nirui.org/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725645858000 } diff --git a/apps/sshwifty/docker-compose.yml b/apps/sshwifty/docker-compose.yml index 330ab910..9eccade8 100644 --- a/apps/sshwifty/docker-compose.yml +++ b/apps/sshwifty/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" services: sshwifty: - image: niruix/sshwifty:0.3.12-beta-release + image: niruix/sshwifty:0.3.14-beta-release restart: unless-stopped container_name: sshwifty privileged: true diff --git a/apps/stalwart-mail/config.json b/apps/stalwart-mail/config.json index 13ace602..db4a7a7d 100644 --- a/apps/stalwart-mail/config.json +++ b/apps/stalwart-mail/config.json @@ -3,8 +3,8 @@ "name": "Stalwart Mail", "available": true, "exposable": true, - "tipi_version": 8, - "version": "0.8.5", + "tipi_version": 13, + "version": "0.9.4", "port": 8677, "id": "stalwart-mail", "categories": ["media", "network", "utilities"], @@ -24,5 +24,7 @@ "env_variable": "NETWORK_INTERFACE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725904875000 } diff --git a/apps/stalwart-mail/docker-compose.yml b/apps/stalwart-mail/docker-compose.yml index f0a836f6..419e64c7 100644 --- a/apps/stalwart-mail/docker-compose.yml +++ b/apps/stalwart-mail/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: stalwart-mail: - image: stalwartlabs/mail-server:v0.8.5 + image: stalwartlabs/mail-server:v0.9.4 container_name: stalwart-mail volumes: - ${APP_DATA_DIR}/data:/opt/stalwart-mail diff --git a/apps/stirling-pdf/config.json b/apps/stirling-pdf/config.json index c8806393..063f7731 100644 --- a/apps/stirling-pdf/config.json +++ b/apps/stirling-pdf/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "stirling-pdf", - "tipi_version": 41, - "version": "0.26.1", + "tipi_version": 46, + "version": "0.29.0", "categories": ["data", "utilities"], "description": "Locally hosted web application that allows you to perform various operations on PDF files.", "short_desc": "Powerful locally hosted web based PDF manipulation tool.", @@ -19,5 +19,7 @@ "env_variable": "STIRLING_PDF_DOCKER_ENABLE_SECURITY" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726366302000 } diff --git a/apps/stirling-pdf/docker-compose.yml b/apps/stirling-pdf/docker-compose.yml index a78eda12..adc8ddbc 100644 --- a/apps/stirling-pdf/docker-compose.yml +++ b/apps/stirling-pdf/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.9" services: stirling-pdf: - image: frooodle/s-pdf:0.26.1 + image: frooodle/s-pdf:0.29.0 restart: unless-stopped container_name: stirling-pdf privileged: true diff --git a/apps/suwayomi/config.json b/apps/suwayomi/config.json index ef9295a8..7d7b21a2 100644 --- a/apps/suwayomi/config.json +++ b/apps/suwayomi/config.json @@ -6,11 +6,19 @@ "id": "suwayomi", "tipi_version": 3, "version": "1.1.1", - "categories": ["books", "media"], + "categories": [ + "books", + "media" + ], "description": "A free and open-source manga reader server that runs extensions", "short_desc": "An open-source manga reader server with bundled Web UI", "author": "Suwayomi", "source": "https://github.com/Suwayomi/docker-tachidesk", "form_fields": [], - "supported_architectures": ["arm64", "amd64", "arm"] + "supported_architectures": [ + "arm64", + "amd64" + ], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/syncthing/config.json b/apps/syncthing/config.json index 937995c6..72858b44 100644 --- a/apps/syncthing/config.json +++ b/apps/syncthing/config.json @@ -7,18 +7,14 @@ "id": "syncthing", "tipi_version": 10, "version": "1.27", - "categories": [ - "data", - "utilities" - ], + "categories": ["data", "utilities"], "description": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. We strive to fulfill the goals below. The goals are listed in order of importance, the most important one being the first. This is the summary version of the goal list - for more commentary, see the full Goals document.", "short_desc": "Peer-to-peer file synchronization between your devices", "author": "The Syncthing Foundation", "source": "https://github.com/syncthing", "website": "https://syncthing.net", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/tailscale/config.json b/apps/tailscale/config.json index 0952aab7..38dbafc3 100644 --- a/apps/tailscale/config.json +++ b/apps/tailscale/config.json @@ -6,8 +6,8 @@ "no_gui": true, "port": 8093, "id": "tailscale", - "tipi_version": 31, - "version": "1.70.0", + "tipi_version": 33, + "version": "1.72.1", "categories": ["network", "security"], "description": "Zero config VPN. Installs on any device in minutes, manages firewall rules for you, and works from anywhere.", "short_desc": "The easiest, most secure way to use WireGuard and 2FA.", @@ -61,5 +61,7 @@ "env_variable": "TAILSCALE_USERSPACE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724367620000 } diff --git a/apps/tailscale/docker-compose.yml b/apps/tailscale/docker-compose.yml index 63363ad5..d18c3c3e 100644 --- a/apps/tailscale/docker-compose.yml +++ b/apps/tailscale/docker-compose.yml @@ -1,7 +1,7 @@ services: tailscale: container_name: tailscale - image: tailscale/tailscale:v1.70.0 + image: tailscale/tailscale:v1.72.1 environment: - TS_SERVE_CONFIG=${TAILSCALE_SERVE_CONFIG} - TS_ACCEPT_DNS=${TAILSCALE_ACCEPT_DNS-false} diff --git a/apps/tandoor/config.json b/apps/tandoor/config.json index 5b1ae52e..ab2bba21 100644 --- a/apps/tandoor/config.json +++ b/apps/tandoor/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "tandoor", - "tipi_version": 14, - "version": "1.5.18", + "tipi_version": 15, + "version": "1.5.19", "categories": ["data"], "description": "Drop your collection of links and notes. Get Tandoor and never look back onto a time without recipe management, storage, sharing and collaborative cooking!", "short_desc": "Recipe collection manager.", @@ -27,5 +27,7 @@ "env_variable": "TANDOOR_POSTGRESS_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724166288000 } diff --git a/apps/tandoor/docker-compose.yml b/apps/tandoor/docker-compose.yml index 241680c4..789d6964 100644 --- a/apps/tandoor/docker-compose.yml +++ b/apps/tandoor/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: tandoor: container_name: tandoor - image: ghcr.io/tandoorrecipes/recipes:1.5.18 + image: ghcr.io/tandoorrecipes/recipes:1.5.19 volumes: - ${APP_DATA_DIR}/data/staticfiles:/opt/recipes/staticfiles - ${APP_DATA_DIR}/data/mediafiles:/opt/recipes/mediafiles diff --git a/apps/tasks-md/config.json b/apps/tasks-md/config.json index b6e4355c..912c4eed 100644 --- a/apps/tasks-md/config.json +++ b/apps/tasks-md/config.json @@ -21,5 +21,7 @@ "env_variable": "TASKS_MD_TITLE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/tautulli/config.json b/apps/tautulli/config.json index 8781308c..c303d275 100644 --- a/apps/tautulli/config.json +++ b/apps/tautulli/config.json @@ -5,13 +5,15 @@ "exposable": true, "port": 8181, "id": "tautulli", - "tipi_version": 16, - "version": "2.14.3", + "tipi_version": 17, + "version": "2.14.4", "categories": ["media", "utilities"], "description": "Tautulli is a 3rd party application that you can run alongside your Plex Media Server to monitor activity and track various statistics. Most importantly, these statistics include what has been watched, who watched it, when and where they watched it, and how it was watched. The only thing missing is \"why they watched it\", but who am I to question your 42 plays of Frozen. All statistics are presented in a nice and clean interface with many tables and graphs, which makes it easy to brag about your server to everyone else.", "short_desc": "Monitoring and tracking tool for Plex Media Server.", "author": "JonnyWong16", "source": "https://github.com/Tautulli/Tautulli", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/tautulli/docker-compose.yml b/apps/tautulli/docker-compose.yml index 4d3b9fba..95562317 100644 --- a/apps/tautulli/docker-compose.yml +++ b/apps/tautulli/docker-compose.yml @@ -2,7 +2,7 @@ version: "2.1" services: tautulli: container_name: tautulli - image: lscr.io/linuxserver/tautulli:2.14.3 + image: lscr.io/linuxserver/tautulli:2.14.4 environment: - PUID=1000 - PGID=1000 diff --git a/apps/teddit/config.json b/apps/teddit/config.json index ac5ca574..41f50603 100644 --- a/apps/teddit/config.json +++ b/apps/teddit/config.json @@ -8,13 +8,13 @@ "id": "teddit", "tipi_version": 2, "version": "latest", - "categories": [ - "social" - ], + "categories": ["social"], "description": "A free and open source alternative Reddit front-end focused on privacy. Inspired by the Nitter project.", "short_desc": "Alternative Reddit front-end focused on privacy https://teddit.net", "author": "teddit", "source": "https://codeberg.org/teddit/teddit", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/tooljet/config.json b/apps/tooljet/config.json index 1a817fb1..4c19af3b 100644 --- a/apps/tooljet/config.json +++ b/apps/tooljet/config.json @@ -7,9 +7,7 @@ "id": "tooljet", "tipi_version": 24, "version": "2.4.2", - "categories": [ - "automation" - ], + "categories": ["automation"], "description": "ToolJet is an open-source low-code framework to build and deploy internal tools quickly with minimal engineering effort. ToolJet's drag and drop frontend builder allows you to build complicated responsive frontends within minutes. You can also connect to your data sources, such as databases ( PostgreSQL, MongoDB, Elasticsearch & more), API endpoints (ToolJet supports importing OpenAPI spec & OAuth2 authorization), SaaS tools (Stripe, Slack, Google Sheets, Airtable, Notion & more) and object storage services ( S3, GCS, Minio, etc ) to fetch and write data.", "short_desc": "Alternative to retool to construct CRM dashboard", "author": "tooljet.com", @@ -38,5 +36,7 @@ "env_variable": "LOCKBOX_MASTER_KEY" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/traefik-certs-dumper/config.json b/apps/traefik-certs-dumper/config.json index 304abd35..de7fe41c 100644 --- a/apps/traefik-certs-dumper/config.json +++ b/apps/traefik-certs-dumper/config.json @@ -8,14 +8,13 @@ "id": "traefik-certs-dumper", "tipi_version": 1, "version": "1.6.1", - "categories": [ - "utilities", - "security" - ], + "categories": ["utilities", "security"], "description": "Dumps Let's Encrypt certificates of a specified domain which Traefik stores in acme.json.", "short_desc": "Dumps Let's Encrypt certificates of a specified domain which Traefik stores in acme.json.", "author": "kereis", "source": "https://github.com/kereis/traefik-certs-dumper", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] -} \ No newline at end of file + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 +} diff --git a/apps/transmission-vpn/config.json b/apps/transmission-vpn/config.json index ec6672b0..75c82aab 100644 --- a/apps/transmission-vpn/config.json +++ b/apps/transmission-vpn/config.json @@ -7,10 +7,7 @@ "id": "transmission-vpn", "tipi_version": 8, "version": "5.3.1", - "categories": [ - "utilities", - "security" - ], + "categories": ["utilities", "security"], "description": "Transmission is running only when OpenVPN has an active tunnel. It has built-in support for many popular VPN providers to make the setup easier.", "short_desc": "BitTorrent client with VPN support.", "author": "haugene", @@ -338,8 +335,7 @@ "env_variable": "TRANSMISSION_BLOCKLIST_URL" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/transmission/config.json b/apps/transmission/config.json index 17043189..9886cff8 100644 --- a/apps/transmission/config.json +++ b/apps/transmission/config.json @@ -33,5 +33,7 @@ "env_variable": "TRANSMISSION_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/trilium/config.json b/apps/trilium/config.json index 59e8a8a9..92b58300 100644 --- a/apps/trilium/config.json +++ b/apps/trilium/config.json @@ -11,5 +11,7 @@ "short_desc": "An open-source, self-hosted Notion alterative", "author": "zadam", "source": "https://github.com/zadam/trilium", - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/tubearchivist/config.json b/apps/tubearchivist/config.json index 16764cc1..c5bfdc02 100644 --- a/apps/tubearchivist/config.json +++ b/apps/tubearchivist/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8120, "id": "tubearchivist", - "tipi_version": 15, - "version": "0.4.9", + "tipi_version": 16, + "version": "0.4.10", "categories": ["media"], "description": "Once your YouTube video collection grows, it becomes hard to search and find a specific video. That's where Tube Archivist comes in: By indexing your video collection with metadata from YouTube, you can organize, search and enjoy your archived YouTube videos without hassle offline through a convenient web interface.", "short_desc": "Your self-hosted YouTube media server", @@ -37,5 +37,7 @@ "env_variable": "ELASTIC_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/tubearchivist/docker-compose.yml b/apps/tubearchivist/docker-compose.yml index 8c030c28..ad57171d 100644 --- a/apps/tubearchivist/docker-compose.yml +++ b/apps/tubearchivist/docker-compose.yml @@ -4,7 +4,7 @@ services: tubearchivist: container_name: tubearchivist restart: unless-stopped - image: bbilly1/tubearchivist:v0.4.9 + image: bbilly1/tubearchivist:v0.4.10 ports: - ${APP_PORT}:8000 dns: @@ -65,7 +65,7 @@ services: labels: runtipi.managed: true tubearchivist-es: - image: elasticsearch:8.14.3 + image: elasticsearch:8.15.1 container_name: tubearchivist-es restart: always environment: diff --git a/apps/umami/config.json b/apps/umami/config.json index 319aaa7a..496da8fc 100644 --- a/apps/umami/config.json +++ b/apps/umami/config.json @@ -7,9 +7,7 @@ "id": "umami", "tipi_version": 3, "version": "v1.40.0", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", "short_desc": "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", "author": "umami-software", @@ -28,5 +26,7 @@ "env_variable": "HASH_SALT" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/unmanic/config.json b/apps/unmanic/config.json index 73b0727f..657d55be 100644 --- a/apps/unmanic/config.json +++ b/apps/unmanic/config.json @@ -5,21 +5,16 @@ "available": true, "exposable": true, "id": "unmanic", - "tipi_version": 4, - "version": "0.2.7", - "categories": [ - "utilities", - "data", - "media" - ], + "tipi_version": 6, + "version": "0.2.8", + "categories": ["utilities", "data", "media"], "description": "Unmanic gives you the power to automate the management of any file library.", "short_desc": "Unmanic - Library Optimiser.", "author": "Unmanic", "source": "https://github.com/Unmanic/unmanic", "website": "https://docs.unmanic.app/", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724903264000 } diff --git a/apps/unmanic/docker-compose.yml b/apps/unmanic/docker-compose.yml index a634dd27..6654e858 100644 --- a/apps/unmanic/docker-compose.yml +++ b/apps/unmanic/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" services: unmanic: - image: josh5/unmanic:0.2.7 + image: josh5/unmanic:0.2.8 restart: unless-stopped container_name: unmanic privileged: true diff --git a/apps/unmanic/metadata/logo.jpg b/apps/unmanic/metadata/logo.jpg index 237dc43a..d170f9e6 100644 Binary files a/apps/unmanic/metadata/logo.jpg and b/apps/unmanic/metadata/logo.jpg differ diff --git a/apps/uptime-kuma/config.json b/apps/uptime-kuma/config.json index 5fce37fb..423186b2 100644 --- a/apps/uptime-kuma/config.json +++ b/apps/uptime-kuma/config.json @@ -7,13 +7,13 @@ "id": "uptime-kuma", "tipi_version": 3, "version": "1", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "It is a self-hosted monitoring tool like Uptime Robot.", "short_desc": "A fancy self-hosted monitoring tool.", "author": "louislam", "source": "https://github.com/louislam/uptime-kuma", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566283000 } diff --git a/apps/vaultwarden/config.json b/apps/vaultwarden/config.json index 3308efae..9cd87ffc 100644 --- a/apps/vaultwarden/config.json +++ b/apps/vaultwarden/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8107, "id": "vaultwarden", - "tipi_version": 16, - "version": "1.31.0", + "tipi_version": 17, + "version": "1.32.0", "categories": ["utilities"], "description": "Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.", "short_desc": "All your passwords in your control!", @@ -22,5 +22,7 @@ "env_variable": "VAULTWARDEN_ADMIN_PASSWORD" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/vaultwarden/docker-compose.yml b/apps/vaultwarden/docker-compose.yml index afd85db8..602648c4 100644 --- a/apps/vaultwarden/docker-compose.yml +++ b/apps/vaultwarden/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: vaultwarden: - image: vaultwarden/server:1.31.0 + image: vaultwarden/server:1.32.0 container_name: vaultwarden restart: unless-stopped ports: diff --git a/apps/viewtube/config.json b/apps/viewtube/config.json index 05145e2b..dbe3534a 100644 --- a/apps/viewtube/config.json +++ b/apps/viewtube/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "viewtube", - "tipi_version": 13, - "version": "0.16.2", + "tipi_version": 14, + "version": "0.17.0", "categories": ["media"], "description": "The open source, privacy-conscious way to enjoy your favorite YouTube content.", "short_desc": "The open source, privacy-conscious way to enjoy your favorite YouTube content.", "author": "ViewTube", "source": "https://github.com/ViewTube/viewtube", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724767365000 } diff --git a/apps/viewtube/docker-compose.arm64.yml b/apps/viewtube/docker-compose.arm64.yml index 06587c0a..5bb5f04a 100644 --- a/apps/viewtube/docker-compose.arm64.yml +++ b/apps/viewtube/docker-compose.arm64.yml @@ -4,7 +4,7 @@ services: viewtube: restart: unless-stopped container_name: viewtube - image: mauriceo/viewtube:0.16.2 + image: mauriceo/viewtube:0.17.0 depends_on: - viewtube-mongodb - viewtube-redis diff --git a/apps/viewtube/docker-compose.yml b/apps/viewtube/docker-compose.yml index d25e71f9..0b840be4 100644 --- a/apps/viewtube/docker-compose.yml +++ b/apps/viewtube/docker-compose.yml @@ -4,7 +4,7 @@ services: viewtube: restart: unless-stopped container_name: viewtube - image: mauriceo/viewtube:0.16.2 + image: mauriceo/viewtube:0.17.0 depends_on: - viewtube-mongodb - viewtube-redis diff --git a/apps/vikunja/config.json b/apps/vikunja/config.json index 8f8cf1ab..81fd2101 100644 --- a/apps/vikunja/config.json +++ b/apps/vikunja/config.json @@ -5,9 +5,9 @@ "exposable": true, "port": 8135, "id": "vikunja", - "tipi_version": 9, - "version": "0.22.1", "categories": ["utilities"], + "tipi_version": 11, + "version": "0.24.2", "description": "The Todo-app to organize your life.", "short_desc": "The Todo-app to organize your life.", "author": "kolaente", @@ -25,5 +25,7 @@ "env_variable": "VIKUNJA_SERVICE_SECRET" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/vikunja/docker-compose.yml b/apps/vikunja/docker-compose.yml index ac55c25c..ce502236 100644 --- a/apps/vikunja/docker-compose.yml +++ b/apps/vikunja/docker-compose.yml @@ -1,26 +1,7 @@ -version: '3.7' services: - vikunja-db: - container_name: vikunja-db - image: postgres:14 - environment: - POSTGRES_PASSWORD: ${VIKUNJA_DB_PASSWORD} - POSTGRES_USER: tipi - POSTGRES_DB: vikunja - volumes: - - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB'] - interval: 5s - timeout: 5s - retries: 5 - networks: - - tipi_main_network - labels: - runtipi.managed: true - vikunja-api: - container_name: vikunja-api - image: vikunja/api:0.22.1 + vikunja: + container_name: vikunja + image: vikunja/vikunja:0.24.2 environment: VIKUNJA_DATABASE_HOST: vikunja-db VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DB_PASSWORD} @@ -28,43 +9,22 @@ services: VIKUNJA_DATABASE_USER: tipi VIKUNJA_DATABASE_DATABASE: vikunja VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_SERVICE_SECRET} - VIKUNJA_SERVICE_FRONTENDURL: ${APP_PROTOCOL:-http}://${APP_DOMAIN}/ + VIKUNJA_SERVICE_PUBLICURL: ${APP_PROTOCOL:-http}://${APP_DOMAIN}/ volumes: - ${APP_DATA_DIR}/data/files:/app/vikunja/files restart: unless-stopped + ports: + - ${APP_PORT}:3456 depends_on: vikunja-db: condition: service_healthy - networks: - - tipi_main_network - labels: - runtipi.managed: true - vikunja: - image: vikunja/frontend:0.22.1 - restart: unless-stopped - container_name: vikunja - networks: - - tipi_main_network - labels: - runtipi.managed: true - vikunja-proxy: - image: nginx - container_name: vikunja-proxy - ports: - - ${APP_PORT}:80 - volumes: - - ${APP_DATA_DIR}/data/proxy/nginx.conf:/etc/nginx/conf.d/default.conf:ro - depends_on: - - vikunja-api - - vikunja - restart: unless-stopped networks: - tipi_main_network labels: # Main traefik.enable: true traefik.http.middlewares.vikunja-web-redirect.redirectscheme.scheme: https - traefik.http.services.vikunja.loadbalancer.server.port: 80 + traefik.http.services.vikunja.loadbalancer.server.port: 3456 # Web traefik.http.routers.vikunja-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.vikunja-insecure.entrypoints: web @@ -86,3 +46,21 @@ services: traefik.http.routers.vikunja-local.service: vikunja traefik.http.routers.vikunja-local.tls: true runtipi.managed: true + vikunja-db: + container_name: vikunja-db + image: postgres:14 + environment: + POSTGRES_PASSWORD: ${VIKUNJA_DB_PASSWORD} + POSTGRES_USER: tipi + POSTGRES_DB: vikunja + volumes: + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB'] + interval: 5s + timeout: 5s + retries: 5 + networks: + - tipi_main_network + labels: + runtipi.managed: true diff --git a/apps/wallos/config.json b/apps/wallos/config.json index 403882b8..f861fa40 100644 --- a/apps/wallos/config.json +++ b/apps/wallos/config.json @@ -5,13 +5,15 @@ "available": true, "exposable": true, "id": "wallos", - "tipi_version": 61, - "version": "2.20.0", + "tipi_version": 70, + "version": "2.23.2", "categories": ["finance"], "description": "Open-Source Personal Subscription Tracker", "short_desc": "Open-Source Personal Subscription Tracker", "author": "Miguel Ribeiro", "source": "https://github.com/ellite/Wallos", "form_fields": [], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1725485352000 } diff --git a/apps/wallos/docker-compose.yml b/apps/wallos/docker-compose.yml index 67f4561f..75af2b0d 100644 --- a/apps/wallos/docker-compose.yml +++ b/apps/wallos/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: wallos: - image: bellamy/wallos:2.20.0 + image: bellamy/wallos:2.23.2 container_name: wallos environment: - TZ=${TZ} diff --git a/apps/wekan/config.json b/apps/wekan/config.json index 09a22786..7e9f3a26 100644 --- a/apps/wekan/config.json +++ b/apps/wekan/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "wekan", - "tipi_version": 24, - "version": "7.51", + "tipi_version": 31, + "version": "7.59", "categories": ["development"], "description": "Experience efficient task management with WeKan - the Open-Source, customizable, and privacy-focused kanban", "short_desc": "Open-Source, customizable, and privacy-focused kanban", @@ -28,5 +28,7 @@ "env_variable": "MAIL_PASSWORD" } ], - "supported_architectures": ["amd64"] + "supported_architectures": ["amd64"], + "created_at": 1691943801422, + "updated_at": 1725487896000 } diff --git a/apps/wekan/docker-compose.yml b/apps/wekan/docker-compose.yml index b02983bc..ae98998e 100644 --- a/apps/wekan/docker-compose.yml +++ b/apps/wekan/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: wekan: - image: ghcr.io/wekan/wekan:v7.51 + image: ghcr.io/wekan/wekan:v7.59 container_name: wekan environment: # https://github.com/wekan/wekan/blob/main/docker-compose.yml diff --git a/apps/wg-easy/config.json b/apps/wg-easy/config.json index fffddcce..55b42d5f 100644 --- a/apps/wg-easy/config.json +++ b/apps/wg-easy/config.json @@ -8,8 +8,8 @@ "ports": [51820] }, "id": "wg-easy", - "tipi_version": 7, - "version": "13", + "tipi_version": 9, + "version": "14", "categories": ["network"], "description": "Access your homeserver from anywhere even on your mobile device. Wireguard-easy is a simple tool to configure and manage Wireguard VPN servers. It is written in Go and uses the official Wireguard client. You have to open and redirect port 51820 to your homeserver in order to connect.", "short_desc": "VPN server for your homeserver", @@ -24,11 +24,12 @@ }, { "type": "password", - "label": "Password", - "max": 50, - "min": 3, - "required": true, - "env_variable": "WIREGUARD_PASSWORD" + "label": "Password hash (bcrypt)", + "hint": "Choose a password and use https://bcrypt-generator.com/ to hash your password. Leave empty for no password", + "max": 60, + "min": 60, + "required": false, + "env_variable": "WIREGUARD_PASSWORD_HASH" }, { "type": "ip", @@ -37,5 +38,7 @@ "env_variable": "WIREGUARD_DNS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/wg-easy/docker-compose.yml b/apps/wg-easy/docker-compose.yml index 68f87ae6..54d72bda 100644 --- a/apps/wg-easy/docker-compose.yml +++ b/apps/wg-easy/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: wg-easy: container_name: wg-easy - image: ghcr.io/wg-easy/wg-easy:13 + image: ghcr.io/wg-easy/wg-easy:14 restart: unless-stopped volumes: - ${APP_DATA_DIR}/data:/etc/wireguard @@ -11,7 +11,7 @@ services: - ${APP_PORT}:51821/tcp environment: WG_HOST: "${WIREGUARD_HOST}" - PASSWORD: "${WIREGUARD_PASSWORD}" + PASSWORD_HASH: "${WIREGUARD_PASSWORD_HASH}" WG_DEFAULT_DNS: "${WIREGUARD_DNS:-8.8.8.8}" WG_ALLOWED_IPS: 0.0.0.0/0, ::/0 cap_add: diff --git a/apps/whisparr/config.json b/apps/whisparr/config.json index 0a017196..a340d4ea 100644 --- a/apps/whisparr/config.json +++ b/apps/whisparr/config.json @@ -7,10 +7,7 @@ "id": "whisparr", "tipi_version": 3, "version": "nightly-2.0.0.548", - "categories": [ - "media", - "utilities" - ], + "categories": ["media", "utilities"], "description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new movies and will interface with clients and indexers to grab, sort, and rename them. It can also be configured to automatically upgrade the quality of existing files in the library when a better quality format becomes available. Note that only one type of a given movie is supported. If you want both an 4k version and 1080p version of a given movie you will need multiple instances.", "short_desc": "Adult movie collection manager.", "author": "radarr.video", @@ -38,5 +35,7 @@ "env_variable": "WHISPARR_UMASK" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/whoogle/config.json b/apps/whoogle/config.json index 99bee7ef..567ebd44 100644 --- a/apps/whoogle/config.json +++ b/apps/whoogle/config.json @@ -7,16 +7,13 @@ "id": "whoogle", "tipi_version": 3, "version": "0.8.4", - "categories": [ - "social" - ], + "categories": ["social"], "description": "Get Google search results, but without any ads, JavaScript, AMP links, cookies, or IP address tracking.", "short_desc": "A self-hosted, ad-free, privacy-respecting metasearch engine.", "author": "Ben Busby", "source": "https://github.com/benbusby/whoogle-search", "form_fields": [], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566284000 } diff --git a/apps/wikijs/config.json b/apps/wikijs/config.json index d1d41ec0..d81da581 100644 --- a/apps/wikijs/config.json +++ b/apps/wikijs/config.json @@ -21,5 +21,7 @@ "env_variable": "WIKI_JS_DB_PASS" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/windows/config.json b/apps/windows/config.json index 7457bc77..b0704578 100644 --- a/apps/windows/config.json +++ b/apps/windows/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "windows", "description": "Run windows in docker...because why not?", - "tipi_version": 32, - "version": "3.12", + "tipi_version": 35, + "version": "3.16", "categories": ["utilities"], "short_desc": "Full windows vm in your browser", "author": "dockurr", @@ -106,5 +106,7 @@ "env_variable": "WINDOWS_VERSION" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726355403000 } diff --git a/apps/windows/docker-compose.yml b/apps/windows/docker-compose.yml index ac57c189..4396467c 100644 --- a/apps/windows/docker-compose.yml +++ b/apps/windows/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: windows: container_name: windows - image: dockurr/windows:3.12 + image: dockurr/windows:3.16 restart: unless-stopped devices: - /dev/kvm diff --git a/apps/wizarr/config.json b/apps/wizarr/config.json index 2fdf8758..0b9f82de 100644 --- a/apps/wizarr/config.json +++ b/apps/wizarr/config.json @@ -14,5 +14,7 @@ "source": "https://github.com/Wizarrrr/wizarr", "website": "https://docs.wizarr.dev/", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/wordpress/config.json b/apps/wordpress/config.json index fd084655..9f4e7aaf 100644 --- a/apps/wordpress/config.json +++ b/apps/wordpress/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "wordpress", "description": "WordPress is a popular content management system for creating websites and blogs.", - "tipi_version": 10, - "version": "6.6.1", + "tipi_version": 11, + "version": "6.6.2", "categories": ["social"], "short_desc": "Popular CMS for websites and blogs", "author": "WordPress.org", @@ -26,5 +26,7 @@ "env_variable": "DB_ROOT_PASSWORD" } ], - "supported_architectures": ["amd64", "arm64"] + "supported_architectures": ["amd64", "arm64"], + "created_at": 1691943801422, + "updated_at": 1726026707000 } diff --git a/apps/wordpress/docker-compose.yml b/apps/wordpress/docker-compose.yml index 9adb1f81..3e6f7d23 100644 --- a/apps/wordpress/docker-compose.yml +++ b/apps/wordpress/docker-compose.yml @@ -3,7 +3,7 @@ services: wordpress: container_name: wordpress - image: wordpress:6.6.1 + image: wordpress:6.6.2 environment: - WORDPRESS_DB_HOST=wordpress-db - WORDPRESS_DB_NAME=wordpress diff --git a/apps/your-spotify/config.json b/apps/your-spotify/config.json index a32fffca..c3e13689 100644 --- a/apps/your-spotify/config.json +++ b/apps/your-spotify/config.json @@ -5,12 +5,9 @@ "exposable": true, "port": 8103, "id": "your-spotify", - "tipi_version": 14, - "version": "1.10.1", - "categories": [ - "music", - "utilities" - ], + "tipi_version": 15, + "version": "1.11.0", + "categories": ["music", "utilities"], "description": "Self hosted Spotify tracking dashboard.", "short_desc": "Self hosted Spotify tracking dashboard.", "author": "Yooooomi", @@ -31,8 +28,7 @@ "env_variable": "SPOTIFY_SECRET" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1724612315000 } diff --git a/apps/your-spotify/docker-compose.yml b/apps/your-spotify/docker-compose.yml index c8ea8655..aa9135cb 100644 --- a/apps/your-spotify/docker-compose.yml +++ b/apps/your-spotify/docker-compose.yml @@ -3,7 +3,7 @@ version: "3" services: your-spotify: container_name: your-spotify - image: yooooomi/your_spotify_client:1.10.1 + image: yooooomi/your_spotify_client:1.11.0 depends_on: - your-spotify-server restart: unless-stopped diff --git a/apps/zerotier/config.json b/apps/zerotier/config.json index 4027f933..13a9d25f 100644 --- a/apps/zerotier/config.json +++ b/apps/zerotier/config.json @@ -7,10 +7,7 @@ "id": "zerotier", "tipi_version": 6, "version": "1.14.0", - "categories": [ - "network", - "security" - ], + "categories": ["network", "security"], "description": "ZeroTier combines the capabilities of VPN and SD-WAN, simplifying network management.", "short_desc": "Easy to use zero configuration VPN.", "author": "© ZeroTier Inc.", @@ -27,8 +24,7 @@ "env_variable": "NETWORK_ID" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1723566285000 } diff --git a/apps/zigbee2mqtt/config.json b/apps/zigbee2mqtt/config.json old mode 100755 new mode 100644 index 11a45f58..a761bfe9 --- a/apps/zigbee2mqtt/config.json +++ b/apps/zigbee2mqtt/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "zigbee2mqtt", - "tipi_version": 7, - "version": "1.39.0", + "tipi_version": 10, + "version": "1.40.1", "categories": ["utilities", "automation"], "description": "Zigbee to MQTT bridge, get rid of your proprietary Zigbee bridges", "short_desc": "Zigbee to MQTT bridge", @@ -22,5 +22,7 @@ "env_variable": "Z2M_DEVICE" } ], - "supported_architectures": ["arm64", "amd64"] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1725726500000 } diff --git a/apps/zigbee2mqtt/docker-compose.yml b/apps/zigbee2mqtt/docker-compose.yml index b0be4c3e..eae6dd0c 100644 --- a/apps/zigbee2mqtt/docker-compose.yml +++ b/apps/zigbee2mqtt/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.7' services: zigbee2mqtt: container_name: zigbee2mqtt - image: koenkk/zigbee2mqtt:1.39.0 + image: koenkk/zigbee2mqtt:1.40.1 environment: - TZ=${TZ} volumes: diff --git a/apps/zipline/config.json b/apps/zipline/config.json index c14d9e53..8574b3a2 100644 --- a/apps/zipline/config.json +++ b/apps/zipline/config.json @@ -5,11 +5,9 @@ "available": true, "exposable": true, "id": "zipline", - "tipi_version": 10, - "version": "3.7.9", - "categories": [ - "media" - ], + "tipi_version": 11, + "version": "3.7.10", + "categories": ["media"], "description": "A ShareX/file upload server that is easy to use, packed with features, and with an easy setup! ", "short_desc": "A ShareX/file upload server that is easy to use, packed with features, and with an easy setup! ", "author": "https://github.com/diced", @@ -29,8 +27,7 @@ "env_variable": "ZIPLINE_CORE_SECRET" } ], - "supported_architectures": [ - "arm64", - "amd64" - ] + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1726186419000 } diff --git a/apps/zipline/docker-compose.yml b/apps/zipline/docker-compose.yml index 1e0ed523..ba6be47f 100644 --- a/apps/zipline/docker-compose.yml +++ b/apps/zipline/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.7' services: zipline: container_name: zipline - image: ghcr.io/diced/zipline:3.7.9 + image: ghcr.io/diced/zipline:3.7.10 ports: - '${APP_PORT}:3000' restart: unless-stopped diff --git a/e2e/fixtures/fixtures.ts b/e2e/fixtures/fixtures.ts new file mode 100644 index 00000000..29744080 --- /dev/null +++ b/e2e/fixtures/fixtures.ts @@ -0,0 +1,39 @@ +import { Page, expect } from '@playwright/test'; + +export const signUpUser = async (page: Page) => { + // Skip insecure config thing + await page.addLocatorHandler(page.getByText('Insecure configuration'), async () => { + await page.getByRole('button', { name: 'Close' }).click(); + }); + + // Go to register page + await page.goto('http://127.0.0.1/register'); + + // Sign up + await page.getByPlaceholder('you@example.com').click(); + await page.getByPlaceholder('you@example.com').fill('tester@test.com'); + + await page.getByPlaceholder('Enter your password', { exact: true }).fill('password'); + await page.getByPlaceholder('Confirm your password').fill('password'); + + await page.getByRole('button', { name: 'Register' }).click(); + + await expect(page.getByRole('heading', { name: 'Thanks for using Runtipi' })).toBeVisible(); + await page.getByRole('button', { name: 'Save and enter' }).click(); +}; + +export const loginUser = async (page: Page) => { + // Skip insecure config thing + await page.addLocatorHandler(page.getByText('Insecure configuration'), async () => { + await page.getByRole('button', { name: 'Close' }).click(); + }); + + // Login user + await page.goto('http://127.0.0.1/login'); + + await page.getByPlaceholder('you@example.com').fill('tester@test.com'); + await page.getByPlaceholder('Your password').fill('password'); + await page.getByRole('button', { name: 'Login' }).click(); + + await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible(); +}; diff --git a/e2e/helpers/helpers.ts b/e2e/helpers/helpers.ts new file mode 100644 index 00000000..6b198c4c --- /dev/null +++ b/e2e/helpers/helpers.ts @@ -0,0 +1,10 @@ +import { chromium } from '@playwright/test'; +import { signUpUser } from '../fixtures/fixtures'; + +async function globalSetup() { + const browser = await chromium.launch(); + const page = await browser.newPage(); + await signUpUser(page); +} + +export default globalSetup; diff --git a/e2e/install.spec.ts b/e2e/install.spec.ts new file mode 100644 index 00000000..fb595fe6 --- /dev/null +++ b/e2e/install.spec.ts @@ -0,0 +1,42 @@ +import { test, expect } from '@playwright/test'; +import { loginUser } from './fixtures/fixtures'; + +test('app should install', async ({ page }) => { + // Set timeout + test.setTimeout(70000); + + // Sign in + await loginUser(page); + + // Get app from env and go to the app page + await page.goto(`http://127.0.0.1/apps/${process.env.APP_NAME || ''}`); + + // Click install button + await page.getByRole('button', { name: 'Install' }).click(); + + // Click install button in modal + await page.getByRole('button', { name: 'Install' }).click(); + + // App should install + await expect(page.getByText('Running')).toBeVisible({ timeout: 65000 }); +}); + +test('app should...work', async ({ page }) => { + // Sign in + await loginUser(page); + + // Get app from env and go to the app page + await page.goto(`http://127.0.0.1/apps/${process.env.APP_NAME || ''}`); + + // Click open button + await page.getByRole('button', { name: 'Open' }).click(); + + // Open the app + await page.getByRole('menuitem', { name: /127.0.0.1/i }).click(); + + // Wait for page redirect + await expect(page.title()).not.toBe(new RegExp('/' + process.env.APP_NAME + '/i')); + + // Take screenshot + await page.screenshot({ fullPage: true }); +}); diff --git a/package.json b/package.json index 31c53ee8..4fb46600 100644 --- a/package.json +++ b/package.json @@ -22,24 +22,25 @@ }, "homepage": "https://github.com/meienberger/runtipi-appstore#readme", "devDependencies": { - "@commitlint/cli": "^19.3.0", - "@commitlint/config-conventional": "^19.2.2", - "@commitlint/cz-commitlint": "^19.2.0", + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", + "@commitlint/cz-commitlint": "^19.4.0", + "@playwright/test": "^1.47.0", "@types/jest": "^28.1.6", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.14.9", + "@types/node": "^22.5.4", "@types/semver": "^7.5.8", "commitizen": "^4.3.0", "eslint": "^8.57.0", "eslint-plugin-json-schema-validator": "^5.1.2", "eslint-plugin-jsonc": "^2.16.0", - "husky": "^9.0.11", + "husky": "^9.1.5", "jest": "^28.1.3", "js-yaml": "^4.1.0", - "prettier": "^3.3.2", - "semver": "^7.6.2", + "prettier": "^3.3.3", + "semver": "^7.6.3", "ts-jest": "^28.0.7", - "typescript": "^5.5.3" + "typescript": "^5.6.2" }, "config": { "commitizen": { diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..4ad5b773 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,31 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + // Sign up to tipi before running + globalSetup: require.resolve('./e2e/helpers/helpers'), + // Run tests in files in parallel + testDir: './e2e', + // Fail the build on CI if you accidentally left test.only in the source code. + fullyParallel: false, + // Retry on CI only + forbidOnly: !!process.env.CI, + // Opt out of parallel tests on CI. + retries: process.env.CI ? 2 : 0, + // Reporter to use. See https://playwright.dev/docs/test-reporter + workers: process.env.CI ? 1 : undefined, + // Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. + reporter: 'html', + use: { + // Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer + trace: 'on-first-retry', + // Enable video + video: 'on', + }, + // No need for multiple browsers to just take a screenshot + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce8bc137..029235f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,17 +9,17 @@ importers: .: devDependencies: '@commitlint/cli': - specifier: ^19.3.0 - version: 19.3.0(@types/node@20.14.12)(typescript@5.5.4) + specifier: ^19.4.1 + version: 19.4.1(@types/node@22.5.4)(typescript@5.6.2) '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.4.1 + version: 19.4.1 '@commitlint/cz-commitlint': - specifier: ^19.2.0 - version: 19.2.0(@types/node@20.14.12)(commitizen@4.3.0(@types/node@20.14.12)(typescript@5.5.4))(inquirer@9.2.23)(typescript@5.5.4) + specifier: ^19.4.0 + version: 19.4.0(@types/node@22.5.4)(commitizen@4.3.0(@types/node@22.5.4)(typescript@5.6.2))(inquirer@9.2.23)(typescript@5.6.2) '@playwright/test': - specifier: ^1.45.3 - version: 1.45.3 + specifier: ^1.47.0 + version: 1.47.0 '@types/jest': specifier: ^28.1.6 version: 28.1.6 @@ -27,14 +27,14 @@ importers: specifier: ^4.0.9 version: 4.0.9 '@types/node': - specifier: ^20.14.12 - version: 20.14.12 + specifier: ^22.5.4 + version: 22.5.4 '@types/semver': specifier: ^7.5.8 version: 7.5.8 commitizen: specifier: ^4.3.0 - version: 4.3.0(@types/node@20.14.12)(typescript@5.5.4) + version: 4.3.0(@types/node@22.5.4)(typescript@5.6.2) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -45,11 +45,11 @@ importers: specifier: ^2.16.0 version: 2.16.0(eslint@8.57.0) husky: - specifier: ^9.1.2 - version: 9.1.2 + specifier: ^9.1.5 + version: 9.1.5 jest: specifier: ^28.1.3 - version: 28.1.3(@types/node@20.14.12) + version: 28.1.3(@types/node@22.5.4) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -61,10 +61,10 @@ importers: version: 7.6.3 ts-jest: specifier: ^28.0.7 - version: 28.0.7(@babel/core@7.18.9)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.18.9))(jest@28.1.3(@types/node@20.14.12))(typescript@5.5.4) + version: 28.0.7(@babel/core@7.18.9)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.18.9))(jest@28.1.3(@types/node@22.5.4))(typescript@5.6.2) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 packages: @@ -274,21 +274,21 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@commitlint/cli@19.3.0': - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + '@commitlint/cli@19.4.1': + resolution: {integrity: sha512-EerFVII3ZcnhXsDT9VePyIdCJoh3jEzygN1L37MjQXgPfGS6fJTWL/KHClVMod1d8w94lFC3l4Vh/y5ysVAz2A==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.4.1': + resolution: {integrity: sha512-D5S5T7ilI5roybWGc8X35OBlRXLAwuTseH1ro0XgqkOWrhZU8yOwBOslrNmSDlTXhXLq8cnfhQyC42qaUCzlXA==} engines: {node: '>=v18'} '@commitlint/config-validator@19.0.3': resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} engines: {node: '>=v18'} - '@commitlint/cz-commitlint@19.2.0': - resolution: {integrity: sha512-kudzHMY9/GxflGyAWMiisiBq2UkyQL1D1eWjGKoC66qQ+5jxRYeDaiVwTdPxYMnmehftNcpksZATDYKqdPP0Wg==} + '@commitlint/cz-commitlint@19.4.0': + resolution: {integrity: sha512-axgYquyTb9+HHFz8KX6xiXwsoX6HSlJOiaDQnnE8lHYxDv1nEtrEsasda8VI+EbH5sdfOT0FGtsiuGdL+09KmA==} engines: {node: '>=v18'} peerDependencies: commitizen: ^4.0.3 @@ -310,12 +310,12 @@ packages: resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.4.1': + resolution: {integrity: sha512-Ws4YVAZ0jACTv6VThumITC1I5AG0UyXMGua3qcf55JmXIXm/ejfaVKykrqx7RyZOACKVAs8uDRIsEsi87JZ3+Q==} engines: {node: '>=v18'} - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + '@commitlint/load@19.4.0': + resolution: {integrity: sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw==} engines: {node: '>=v18'} '@commitlint/message@19.0.0': @@ -326,16 +326,16 @@ packages: resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} engines: {node: '>=v18'} - '@commitlint/read@19.2.1': - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + '@commitlint/read@19.4.0': + resolution: {integrity: sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g==} engines: {node: '>=v18'} '@commitlint/resolve-extends@19.1.0': resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.4.1': + resolution: {integrity: sha512-AgctfzAONoVxmxOXRyxXIq7xEPrd7lK/60h2egp9bgGUMZK9v0+YqLOA+TH+KqCa63ZoCr8owP2YxoSSu7IgnQ==} engines: {node: '>=v18'} '@commitlint/to-lines@19.0.0': @@ -512,8 +512,8 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.45.3': - resolution: {integrity: sha512-UKF4XsBfy+u3MFWEH44hva1Q8Da28G6RFtR2+5saw+jgAFQV5yYnB1fu68Mz7fO+5GJF3wgwAIs0UelU8TxFrA==} + '@playwright/test@1.47.0': + resolution: {integrity: sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==} engines: {node: '>=18'} hasBin: true @@ -559,8 +559,8 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/node@20.14.12': - resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} + '@types/node@22.5.4': + resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} '@types/prettier@2.6.4': resolution: {integrity: sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==} @@ -600,6 +600,9 @@ packages: ajv@8.16.0: resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1045,6 +1048,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} @@ -1223,8 +1229,8 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.1.2: - resolution: {integrity: sha512-1/aDMXZdhr1VdJJTLt6e7BipM0Jd9qkpubPiIplon1WmCeOy3nnzsCMeBqS9AsL5ioonl8F8y/F2CLOmk19/Pw==} + husky@9.1.5: + resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==} engines: {node: '>=18'} hasBin: true @@ -1248,8 +1254,8 @@ packages: engines: {node: '>=8'} hasBin: true - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -1490,8 +1496,8 @@ packages: node-notifier: optional: true - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true js-tokens@4.0.0: @@ -1777,6 +1783,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -1789,13 +1798,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.45.3: - resolution: {integrity: sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==} + playwright-core@1.47.0: + resolution: {integrity: sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==} engines: {node: '>=18'} hasBin: true - playwright@1.45.3: - resolution: {integrity: sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==} + playwright@1.47.0: + resolution: {integrity: sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==} engines: {node: '>=18'} hasBin: true @@ -2090,13 +2099,13 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -2185,8 +2194,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} snapshots: @@ -2206,7 +2215,7 @@ snapshots: '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.0 + picocolors: 1.0.1 '@babel/compat-data@7.18.8': {} @@ -2325,7 +2334,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 '@babel/parser@7.18.9': dependencies: @@ -2440,12 +2449,12 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@19.3.0(@types/node@20.14.12)(typescript@5.5.4)': + '@commitlint/cli@19.4.1(@types/node@22.5.4)(typescript@5.6.2)': dependencies: '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.14.12)(typescript@5.5.4) - '@commitlint/read': 19.2.1 + '@commitlint/lint': 19.4.1 + '@commitlint/load': 19.4.0(@types/node@22.5.4)(typescript@5.6.2) + '@commitlint/read': 19.4.0 '@commitlint/types': 19.0.3 execa: 8.0.1 yargs: 17.7.2 @@ -2453,7 +2462,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.4.1': dependencies: '@commitlint/types': 19.0.3 conventional-changelog-conventionalcommits: 7.0.2 @@ -2461,15 +2470,15 @@ snapshots: '@commitlint/config-validator@19.0.3': dependencies: '@commitlint/types': 19.0.3 - ajv: 8.16.0 + ajv: 8.17.1 - '@commitlint/cz-commitlint@19.2.0(@types/node@20.14.12)(commitizen@4.3.0(@types/node@20.14.12)(typescript@5.5.4))(inquirer@9.2.23)(typescript@5.5.4)': + '@commitlint/cz-commitlint@19.4.0(@types/node@22.5.4)(commitizen@4.3.0(@types/node@22.5.4)(typescript@5.6.2))(inquirer@9.2.23)(typescript@5.6.2)': dependencies: '@commitlint/ensure': 19.0.3 - '@commitlint/load': 19.2.0(@types/node@20.14.12)(typescript@5.5.4) + '@commitlint/load': 19.4.0(@types/node@22.5.4)(typescript@5.6.2) '@commitlint/types': 19.0.3 chalk: 5.3.0 - commitizen: 4.3.0(@types/node@20.14.12)(typescript@5.5.4) + commitizen: 4.3.0(@types/node@22.5.4)(typescript@5.6.2) inquirer: 9.2.23 lodash.isplainobject: 4.0.6 word-wrap: 1.2.5 @@ -2498,22 +2507,22 @@ snapshots: '@commitlint/types': 19.0.3 semver: 7.6.3 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.4.1': dependencies: '@commitlint/is-ignored': 19.2.2 '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 + '@commitlint/rules': 19.4.1 '@commitlint/types': 19.0.3 - '@commitlint/load@19.2.0(@types/node@20.14.12)(typescript@5.5.4)': + '@commitlint/load@19.4.0(@types/node@22.5.4)(typescript@5.6.2)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 '@commitlint/resolve-extends': 19.1.0 '@commitlint/types': 19.0.3 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.12)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig: 9.0.0(typescript@5.6.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.5.4)(cosmiconfig@9.0.0(typescript@5.6.2))(typescript@5.6.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -2529,7 +2538,7 @@ snapshots: conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.2.1': + '@commitlint/read@19.4.0': dependencies: '@commitlint/top-level': 19.0.0 '@commitlint/types': 19.0.3 @@ -2542,11 +2551,11 @@ snapshots: '@commitlint/config-validator': 19.0.3 '@commitlint/types': 19.0.3 global-directory: 4.0.1 - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': + '@commitlint/rules@19.4.1': dependencies: '@commitlint/ensure': 19.0.3 '@commitlint/message': 19.0.0 @@ -2615,7 +2624,7 @@ snapshots: '@jest/console@28.1.3': dependencies: '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -2628,14 +2637,14 @@ snapshots: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.3.2 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 28.1.3 - jest-config: 28.1.3(@types/node@20.14.12) + jest-config: 28.1.3(@types/node@22.5.4) jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -2660,7 +2669,7 @@ snapshots: dependencies: '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 jest-mock: 28.1.3 '@jest/expect-utils@28.1.3': @@ -2678,7 +2687,7 @@ snapshots: dependencies: '@jest/types': 28.1.3 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 20.14.12 + '@types/node': 22.5.4 jest-message-util: 28.1.3 jest-mock: 28.1.3 jest-util: 28.1.3 @@ -2699,7 +2708,7 @@ snapshots: '@jest/transform': 28.1.3 '@jest/types': 28.1.3 '@jridgewell/trace-mapping': 0.3.14 - '@types/node': 20.14.12 + '@types/node': 22.5.4 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -2770,7 +2779,7 @@ snapshots: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.14.12 + '@types/node': 22.5.4 '@types/yargs': 17.0.10 chalk: 4.1.2 @@ -2827,9 +2836,9 @@ snapshots: '@pkgr/core@0.1.1': {} - '@playwright/test@1.45.3': + '@playwright/test@1.47.0': dependencies: - playwright: 1.45.3 + playwright: 1.47.0 '@sinclair/typebox@0.24.21': {} @@ -2864,11 +2873,11 @@ snapshots: '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 20.14.12 + '@types/node': 22.5.4 '@types/graceful-fs@4.1.5': dependencies: - '@types/node': 20.14.12 + '@types/node': 22.5.4 '@types/istanbul-lib-coverage@2.0.4': {} @@ -2887,9 +2896,9 @@ snapshots: '@types/js-yaml@4.0.9': {} - '@types/node@20.14.12': + '@types/node@22.5.4': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/prettier@2.6.4': {} @@ -2930,6 +2939,13 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -3131,10 +3147,10 @@ snapshots: color-name@1.1.4: {} - commitizen@4.3.0(@types/node@20.14.12)(typescript@5.5.4): + commitizen@4.3.0(@types/node@22.5.4)(typescript@5.6.2): dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@20.14.12)(typescript@5.5.4) + cz-conventional-changelog: 3.3.0(@types/node@22.5.4)(typescript@5.6.2) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -3179,21 +3195,21 @@ snapshots: dependencies: safe-buffer: 5.1.2 - cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.12)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.5.4)(cosmiconfig@9.0.0(typescript@5.6.2))(typescript@5.6.2): dependencies: - '@types/node': 20.14.12 - cosmiconfig: 9.0.0(typescript@5.5.4) - jiti: 1.21.0 - typescript: 5.5.4 + '@types/node': 22.5.4 + cosmiconfig: 9.0.0(typescript@5.6.2) + jiti: 1.21.6 + typescript: 5.6.2 - cosmiconfig@9.0.0(typescript@5.5.4): + cosmiconfig@9.0.0(typescript@5.6.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 cross-spawn@7.0.3: dependencies: @@ -3201,16 +3217,16 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cz-conventional-changelog@3.3.0(@types/node@20.14.12)(typescript@5.5.4): + cz-conventional-changelog@3.3.0(@types/node@22.5.4)(typescript@5.6.2): dependencies: chalk: 2.4.2 - commitizen: 4.3.0(@types/node@20.14.12)(typescript@5.5.4) + commitizen: 4.3.0(@types/node@22.5.4)(typescript@5.6.2) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.2.0(@types/node@20.14.12)(typescript@5.5.4) + '@commitlint/load': 19.4.0(@types/node@22.5.4)(typescript@5.6.2) transitivePeerDependencies: - '@types/node' - typescript @@ -3441,6 +3457,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.1: {} + fastq@1.13.0: dependencies: reusify: 1.0.4 @@ -3616,7 +3634,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.1.2: {} + husky@9.1.5: {} iconv-lite@0.4.24: dependencies: @@ -3636,7 +3654,7 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - import-meta-resolve@4.0.0: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -3769,7 +3787,7 @@ snapshots: '@jest/expect': 28.1.3 '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -3787,7 +3805,7 @@ snapshots: transitivePeerDependencies: - supports-color - jest-cli@28.1.3(@types/node@20.14.12): + jest-cli@28.1.3(@types/node@22.5.4): dependencies: '@jest/core': 28.1.3 '@jest/test-result': 28.1.3 @@ -3796,7 +3814,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 28.1.3(@types/node@20.14.12) + jest-config: 28.1.3(@types/node@22.5.4) jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 @@ -3806,7 +3824,7 @@ snapshots: - supports-color - ts-node - jest-config@28.1.3(@types/node@20.14.12): + jest-config@28.1.3(@types/node@22.5.4): dependencies: '@babel/core': 7.18.9 '@jest/test-sequencer': 28.1.3 @@ -3831,7 +3849,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.12 + '@types/node': 22.5.4 transitivePeerDependencies: - supports-color @@ -3859,7 +3877,7 @@ snapshots: '@jest/environment': 28.1.3 '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 jest-mock: 28.1.3 jest-util: 28.1.3 @@ -3869,7 +3887,7 @@ snapshots: dependencies: '@jest/types': 28.1.3 '@types/graceful-fs': 4.1.5 - '@types/node': 20.14.12 + '@types/node': 22.5.4 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 @@ -3908,7 +3926,7 @@ snapshots: jest-mock@28.1.3: dependencies: '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 jest-pnp-resolver@1.2.2(jest-resolve@28.1.3): optionalDependencies: @@ -3942,7 +3960,7 @@ snapshots: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 @@ -4019,7 +4037,7 @@ snapshots: jest-util@28.1.3: dependencies: '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 chalk: 4.1.2 ci-info: 3.3.2 graceful-fs: 4.2.10 @@ -4038,7 +4056,7 @@ snapshots: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.14.12 + '@types/node': 22.5.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -4047,22 +4065,22 @@ snapshots: jest-worker@28.1.3: dependencies: - '@types/node': 20.14.12 + '@types/node': 22.5.4 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@28.1.3(@types/node@20.14.12): + jest@28.1.3(@types/node@22.5.4): dependencies: '@jest/core': 28.1.3 '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3(@types/node@20.14.12) + jest-cli: 28.1.3(@types/node@22.5.4) transitivePeerDependencies: - '@types/node' - supports-color - ts-node - jiti@1.21.0: {} + jiti@1.21.6: {} js-tokens@4.0.0: {} @@ -4264,7 +4282,7 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 p-locate@4.1.0: dependencies: @@ -4286,7 +4304,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4307,6 +4325,8 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.0.1: {} + picomatch@2.3.1: {} pirates@4.0.5: {} @@ -4315,11 +4335,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.45.3: {} + playwright-core@1.47.0: {} - playwright@1.45.3: + playwright@1.47.0: dependencies: - playwright-core: 1.45.3 + playwright-core: 1.47.0 optionalDependencies: fsevents: 2.3.2 @@ -4535,17 +4555,17 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 - ts-jest@28.0.7(@babel/core@7.18.9)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.18.9))(jest@28.1.3(@types/node@20.14.12))(typescript@5.5.4): + ts-jest@28.0.7(@babel/core@7.18.9)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.18.9))(jest@28.1.3(@types/node@22.5.4))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3(@types/node@20.14.12) + jest: 28.1.3(@types/node@22.5.4) jest-util: 28.1.3 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.5.4 + typescript: 5.6.2 yargs-parser: 21.0.1 optionalDependencies: '@babel/core': 7.18.9 @@ -4568,9 +4588,9 @@ snapshots: type-fest@0.21.3: {} - typescript@5.5.4: {} + typescript@5.6.2: {} - undici-types@5.26.5: {} + undici-types@6.19.8: {} unicorn-magic@0.1.0: {} @@ -4580,7 +4600,7 @@ snapshots: dependencies: browserslist: 4.21.3 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 uri-js@4.4.1: dependencies: @@ -4657,4 +4677,4 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} + yocto-queue@1.1.1: {}