{ "$schema": "https://www.raycast.com/schemas/extension.json", "name": "homelab", "title": "Homelab", "platforms": [ "macOS", "Windows" ], "description": "Your whole homelab in Raycast: stats, downloads, media requests, monitors, music, photos, books, documents, services, jobs, DNS, backups and money \u2014 one hub, every service optional.", "icon": "icon.png", "author": "aleksandar", "license": "MIT", "commands": [ { "name": "home", "title": "Homelab Home", "subtitle": "Homelab", "description": "One place for everything: live status, commands, quick links", "mode": "view", "keywords": [ "homelab", "dashboard", "hub" ] }, { "name": "stats", "title": "Homelab Stats", "subtitle": "Homelab", "description": "Server and NAS stats at a glance", "mode": "view" }, { "name": "menubar", "title": "Homelab Menu Bar", "subtitle": "Homelab", "description": "CPU load and temperature in the menu bar", "mode": "menu-bar", "interval": "30s" }, { "name": "downloads", "title": "Homelab Downloads", "subtitle": "Homelab", "description": "qBittorrent, SABnzbd, NZBget and slskd activity in one place", "mode": "view" }, { "name": "request", "title": "Discover Media", "subtitle": "Homelab", "description": "Browse trending/popular or search, and request movies & shows", "mode": "view", "keywords": [ "jellyseerr", "request", "movie", "show", "search" ] }, { "name": "requests", "title": "Request History", "subtitle": "Homelab", "description": "Past and pending Jellyseerr requests \u2014 approve, decline, retry, delete", "mode": "view", "keywords": [ "jellyseerr", "pending", "approve", "decline" ] }, { "name": "transaction", "title": "Add Transaction", "subtitle": "Homelab", "description": "Firefly Pico assistant: template + amount + description, or one-tap templates", "mode": "view", "keywords": [ "firefly", "pico", "money", "expense", "spend" ] }, { "name": "monitors", "title": "Homelab Monitors", "subtitle": "Homelab", "description": "Uptime Kuma monitor status \u2014 what's down right now", "mode": "view", "keywords": [ "kuma", "uptime", "down", "status" ] }, { "name": "music", "title": "Music Library", "subtitle": "Homelab", "description": "Browse and search the Navidrome library with cover art", "mode": "view", "keywords": [ "navidrome", "music", "album", "artist" ] }, { "name": "notifications", "title": "Notifications", "subtitle": "Homelab", "description": "ntfy alerts and download notifications from the last 7 days", "mode": "view", "keywords": [ "ntfy", "alerts", "notifications" ] }, { "name": "photos", "title": "Photos", "subtitle": "Homelab", "description": "Browse and smart-search the Immich library", "mode": "view", "keywords": [ "immich", "photos", "pictures", "gallery" ] }, { "name": "audiobooks", "title": "Audiobooks", "subtitle": "Homelab", "description": "Audiobookshelf: continue listening, browse and search", "mode": "view", "keywords": [ "abs", "audiobookshelf", "audiobook", "podcast" ] }, { "name": "calendar", "title": "Media Calendar", "subtitle": "Homelab", "description": "Upcoming movies/episodes/albums and stuck arr queues", "mode": "view", "keywords": [ "radarr", "sonarr", "lidarr", "upcoming", "releases" ] }, { "name": "containers", "title": "Containers", "subtitle": "Homelab", "description": "Komodo stacks: state and restart/start/stop", "mode": "view", "keywords": [ "komodo", "docker", "stack", "restart" ] }, { "name": "services", "title": "Services & Jobs", "subtitle": "Homelab", "description": "Native systemd services and scheduled jobs over SSH: state, last result, next run and logs", "mode": "view", "keywords": [ "systemd", "services", "timers", "jobs", "ssh", "logs" ] }, { "name": "metube", "title": "Send to MeTube", "subtitle": "Homelab", "description": "Queue a video or audio download from a URL", "mode": "view", "keywords": [ "metube", "youtube", "download", "yt-dlp" ] }, { "name": "disks", "title": "Disk Health", "subtitle": "Homelab", "description": "Scrutiny SMART status for every server and NAS disk", "mode": "view", "keywords": [ "scrutiny", "smart", "disk", "hdd", "ssd" ] }, { "name": "backups", "title": "Backup Health", "subtitle": "Homelab", "description": "Backup freshness, integrity checks, repository sizes and disk/cloud usage across backup copies", "mode": "view", "keywords": [ "backrest", "restic", "backup", "storage", "disk", "cloud", "verification" ] }, { "name": "jellyfin", "title": "Continue Watching", "subtitle": "Homelab", "description": "Jellyfin: now playing, resume, next up", "mode": "view", "keywords": [ "jellyfin", "watch", "resume", "playing" ] }, { "name": "subtitles", "title": "Subtitles", "subtitle": "Homelab", "description": "Subtitle sync queue and Bazarr wanted list", "mode": "view", "keywords": [ "bazarr", "subsync", "subtitles" ] }, { "name": "bills", "title": "Upcoming Bills", "subtitle": "Homelab", "description": "Firefly month spend and upcoming subscriptions", "mode": "view", "keywords": [ "firefly", "subscriptions", "money", "bills" ] }, { "name": "indexers", "title": "Search Indexers", "subtitle": "Homelab", "description": "Prowlarr: search every indexer and grab releases", "mode": "view", "keywords": [ "prowlarr", "torrent", "usenet", "grab", "search" ] }, { "name": "adguard", "title": "AdGuard Home", "subtitle": "Homelab", "description": "DNS dashboard: protection toggle, stats, top blocked, recent log, blocklists", "mode": "view", "keywords": [ "adguard", "dns", "blocklist", "ads" ] }, { "name": "books", "title": "Ebooks", "subtitle": "Homelab", "description": "Calibre-Web: search the library, send to Kindle, download", "mode": "view", "keywords": [ "calibre", "ebook", "kindle", "book", "epub" ] }, { "name": "paperless", "title": "Paperless Search", "subtitle": "Homelab", "description": "Search document contents in Paperless-ngx, preview and download", "mode": "view", "keywords": [ "paperless", "documents", "ocr", "receipts", "invoices" ] }, { "name": "nudge", "title": "Nudge Subtitles", "subtitle": "Homelab", "description": "Shift a subtitle file by \u00b1ms (pins it against the nightly sync), undo, unpin", "mode": "view", "keywords": [ "subtitle", "nudge", "sync", "offset", "srt" ] }, { "name": "nextcloud", "title": "Nextcloud Files and Sharing", "subtitle": "Homelab", "description": "Browse, download and share files; search document contents and OCR with Elasticsearch", "mode": "view", "keywords": [ "nextcloud", "files", "download", "share", "elasticsearch", "ocr" ] }, { "name": "vehicle", "title": "Vehicle Expenses", "subtitle": "Homelab", "description": "LubeLogger \u2014 fuel, service, repairs and car expenses; log a new record", "mode": "view", "keywords": [ "lubelogger", "car", "vehicle", "fuel", "mileage", "service", "repair", "expense", "auto" ] } ], "preferences": [ { "name": "configFile", "title": "Env File", "description": "Optional dotenv file that supplies any setting left empty here. Keys are UPPER_SNAKE (JELLYFIN_URL, JELLYFIN_API_KEY\u2026). See .env.example.", "type": "textfield", "required": false, "placeholder": "~/.config/raycast-homelab/.env", "default": "~/.config/raycast-homelab/.env" }, { "name": "glancesUrl", "title": "Glances URL", "description": "Base URL of your Glances instance. Leave empty to hide Glances features.", "type": "textfield", "required": false, "placeholder": "https://glances.example.com" }, { "name": "storageMount", "title": "Extra Mount Point", "description": "A second filesystem from Glances to show next to / (e.g. a data SSD). Leave empty to show only the root filesystem.", "type": "textfield", "required": false, "placeholder": "/mnt/storage" }, { "name": "tempsUrl", "title": "Temperatures JSON URL", "description": "Optional URL of a temps.json published by the companion temps-publish script (server CPU/disk + NAS disk temps).", "type": "textfield", "required": false, "placeholder": "https://home.example.com/images/temps.json" }, { "name": "homepageUrl", "title": "Dashboard URL", "description": "Optional link to your dashboard (Homepage, Dashy\u2026) shown in the menu bar and Home links.", "type": "textfield", "required": false, "placeholder": "https://home.example.com" }, { "name": "truenasUrl", "title": "TrueNAS URL", "description": "Base URL of your TrueNAS instance. Leave empty to hide TrueNAS features.", "type": "textfield", "required": false, "placeholder": "https://nas.example.com" }, { "name": "truenasApiKey", "title": "TrueNAS API Key", "description": "Read-only key is enough (pool capacity + health). Leave empty to hide the NAS row.", "type": "password", "required": false }, { "name": "qbitUrl", "title": "qBittorrent URL", "description": "Base URL of your qBittorrent instance. Leave empty to hide qBittorrent features.", "type": "textfield", "required": false, "placeholder": "https://qbit.example.com" }, { "name": "qbitUsername", "title": "qBittorrent Username", "description": "Web UI username.", "type": "textfield", "required": false, "placeholder": "admin" }, { "name": "qbitPassword", "title": "qBittorrent Password", "description": "Web UI password. Never attempted while empty (qBittorrent IP-bans after 5 failures).", "type": "password", "required": false }, { "name": "sabnzbdUrl", "title": "SABnzbd URL", "description": "Base URL of your SABnzbd instance. Leave empty to hide SABnzbd features.", "type": "textfield", "required": false, "placeholder": "https://sabnzbd.example.com" }, { "name": "sabnzbdApiKey", "title": "SABnzbd API Key", "description": "Config \u2192 General \u2192 API Key.", "type": "password", "required": false }, { "name": "nzbgetUrl", "title": "NZBget URL", "description": "Base URL of your NZBget instance. Leave empty to hide NZBget features.", "type": "textfield", "required": false, "placeholder": "https://nzbget.example.com" }, { "name": "nzbgetUsername", "title": "NZBget Username", "description": "Settings \u2192 Security \u2192 ControlUsername.", "type": "textfield", "required": false, "placeholder": "nzbget" }, { "name": "nzbgetPassword", "title": "NZBget Password", "description": "Settings \u2192 Security \u2192 ControlPassword.", "type": "password", "required": false }, { "name": "slskdUrl", "title": "slskd URL", "description": "Base URL of your slskd instance. Leave empty to hide slskd features.", "type": "textfield", "required": false, "placeholder": "https://slskd.example.com" }, { "name": "slskdApiKey", "title": "slskd API Key", "description": "Options \u2192 Web \u2192 Authentication \u2192 API keys.", "type": "password", "required": false }, { "name": "jellyfinUrl", "title": "Jellyfin URL", "description": "Base URL of your Jellyfin instance. Leave empty to hide Jellyfin features.", "type": "textfield", "required": false, "placeholder": "https://jellyfin.example.com" }, { "name": "jellyfinApiKey", "title": "Jellyfin API Key", "description": "Dashboard \u2192 API Keys.", "type": "password", "required": false }, { "name": "jellyfinUserId", "title": "Jellyfin User ID", "description": "Optional. Whose Continue Watching / Next Up to show; defaults to the first administrator.", "type": "textfield", "required": false, "placeholder": "e.g. 3f1c\u2026" }, { "name": "jellyseerrUrl", "title": "Jellyseerr URL", "description": "Base URL of your Jellyseerr instance. Leave empty to hide Jellyseerr features.", "type": "textfield", "required": false, "placeholder": "https://requests.example.com" }, { "name": "jellyseerrApiKey", "title": "Jellyseerr API Key", "description": "Settings \u2192 General \u2192 API Key (admin).", "type": "password", "required": false }, { "name": "radarrUrl", "title": "Radarr URL", "description": "Base URL of your Radarr instance. Leave empty to hide Radarr features.", "type": "textfield", "required": false, "placeholder": "https://radarr.example.com" }, { "name": "radarrApiKey", "title": "Radarr API Key", "description": "Settings \u2192 General.", "type": "password", "required": false }, { "name": "sonarrUrl", "title": "Sonarr URL", "description": "Base URL of your Sonarr instance. Leave empty to hide Sonarr features.", "type": "textfield", "required": false, "placeholder": "https://sonarr.example.com" }, { "name": "sonarrApiKey", "title": "Sonarr API Key", "description": "Settings \u2192 General.", "type": "password", "required": false }, { "name": "lidarrUrl", "title": "Lidarr URL", "description": "Base URL of your Lidarr instance. Leave empty to hide Lidarr features.", "type": "textfield", "required": false, "placeholder": "https://lidarr.example.com" }, { "name": "lidarrApiKey", "title": "Lidarr API Key", "description": "Settings \u2192 General.", "type": "password", "required": false }, { "name": "chaptarrUrl", "title": "Chaptarr / Readarr URL", "description": "Base URL of your Chaptarr / Readarr instance. Leave empty to hide Chaptarr / Readarr features.", "type": "textfield", "required": false, "placeholder": "https://chaptarr.example.com" }, { "name": "chaptarrApiKey", "title": "Chaptarr / Readarr API Key", "description": "Settings \u2192 General (any Readarr-compatible fork).", "type": "password", "required": false }, { "name": "prowlarrUrl", "title": "Prowlarr URL", "description": "Base URL of your Prowlarr instance. Leave empty to hide Prowlarr features.", "type": "textfield", "required": false, "placeholder": "https://prowlarr.example.com" }, { "name": "prowlarrApiKey", "title": "Prowlarr API Key", "description": "Settings \u2192 General.", "type": "password", "required": false }, { "name": "bazarrUrl", "title": "Bazarr URL", "description": "Base URL of your Bazarr instance. Leave empty to hide Bazarr features.", "type": "textfield", "required": false, "placeholder": "https://bazarr.example.com" }, { "name": "bazarrApiKey", "title": "Bazarr API Key", "description": "Settings \u2192 General.", "type": "password", "required": false }, { "name": "subsyncUrl", "title": "Subtitle Sync Server URL", "description": "Base URL of your Subtitle Sync Server instance. Leave empty to hide Subtitle Sync Server features.", "type": "textfield", "required": false, "placeholder": "https://subtitles.example.com" }, { "name": "absUrl", "title": "Audiobookshelf URL", "description": "Base URL of your Audiobookshelf instance. Leave empty to hide Audiobookshelf features.", "type": "textfield", "required": false, "placeholder": "https://audiobooks.example.com" }, { "name": "absToken", "title": "Audiobookshelf API Token", "description": "Settings \u2192 Users \u2192 your user \u2192 API token.", "type": "password", "required": false }, { "name": "navidromeUrl", "title": "Navidrome URL", "description": "Base URL of your Navidrome instance. Leave empty to hide Navidrome features.", "type": "textfield", "required": false, "placeholder": "https://music.example.com" }, { "name": "navidromeUser", "title": "Navidrome Username", "description": "Any user; Subsonic token auth is used.", "type": "textfield", "required": false, "placeholder": "admin" }, { "name": "navidromePassword", "title": "Navidrome Password", "description": "Password of that user.", "type": "password", "required": false }, { "name": "immichUrl", "title": "Immich URL", "description": "Base URL of your Immich instance. Leave empty to hide Immich features.", "type": "textfield", "required": false, "placeholder": "https://immich.example.com" }, { "name": "immichApiKey", "title": "Immich API Key", "description": "Account Settings \u2192 API Keys.", "type": "password", "required": false }, { "name": "calibreUrl", "title": "Calibre-Web URL", "description": "Base URL of your Calibre-Web instance. Leave empty to hide Calibre-Web features.", "type": "textfield", "required": false, "placeholder": "https://reader.example.com" }, { "name": "calibreUser", "title": "Calibre-Web Username", "description": "Used for OPDS + Send-to-Kindle.", "type": "textfield", "required": false, "placeholder": "admin" }, { "name": "calibrePassword", "title": "Calibre-Web Password", "description": "Password of that user.", "type": "password", "required": false }, { "name": "paperlessUrl", "title": "Paperless URL", "description": "Base URL of your Paperless-ngx instance. Leave empty to hide Paperless features.", "type": "textfield", "required": false, "placeholder": "https://paperless.example.com" }, { "name": "paperlessToken", "title": "Paperless API Token", "description": "Your Paperless profile \u2192 API Auth Token. Documents must be visible to this user.", "type": "password", "required": false }, { "name": "metubeUrl", "title": "MeTube URL", "description": "Base URL of your MeTube instance. Leave empty to hide MeTube features.", "type": "textfield", "required": false, "placeholder": "https://metube.example.com" }, { "name": "metubeFolders", "title": "MeTube Destinations", "description": "Comma-separated extra folders as folder|Label[|video]. Add |video to download video instead of opus audio. Example: music|Music,clips|Clips|video", "type": "textfield", "required": false, "placeholder": "music|Music,clips|Clips|video" }, { "name": "kumaUrl", "title": "Uptime Kuma URL", "description": "Base URL of your Uptime Kuma instance. Leave empty to hide Uptime Kuma features.", "type": "textfield", "required": false, "placeholder": "https://kuma.example.com" }, { "name": "kumaStatusSlug", "title": "Uptime Kuma Status Page Slug", "description": "Slug of a public status page (used when no API key is set).", "type": "textfield", "required": false, "placeholder": "home" }, { "name": "kumaApiKey", "title": "Uptime Kuma API Key", "description": "Settings \u2192 API Keys. With a key every monitor is read from /metrics, not just the status page.", "type": "password", "required": false }, { "name": "ntfyUrl", "title": "ntfy URL", "description": "Base URL of your ntfy instance. Leave empty to hide ntfy features.", "type": "textfield", "required": false, "placeholder": "https://ntfy.example.com" }, { "name": "ntfyTopics", "title": "ntfy Topics", "description": "Comma-separated topics to read.", "type": "textfield", "required": false, "placeholder": "alerts,downloads" }, { "name": "adguardUrl", "title": "AdGuard Home URL", "description": "Base URL of your AdGuard Home instance. Leave empty to hide AdGuard Home features.", "type": "textfield", "required": false, "placeholder": "https://dns.example.com" }, { "name": "adguardUsername", "title": "AdGuard Home Username", "description": "Web UI username.", "type": "textfield", "required": false, "placeholder": "admin" }, { "name": "adguardPassword", "title": "AdGuard Home Password", "description": "Web UI password.", "type": "password", "required": false }, { "name": "komodoUrl", "title": "Komodo URL", "description": "Base URL of your Komodo instance. Leave empty to hide Komodo features.", "type": "textfield", "required": false, "placeholder": "https://komodo.example.com" }, { "name": "komodoApiKey", "title": "Komodo API Key", "description": "Settings \u2192 Profile \u2192 API keys.", "type": "password", "required": false }, { "name": "komodoApiSecret", "title": "Komodo API Secret", "description": "Shown once when the key is created.", "type": "password", "required": false }, { "name": "servicesSshHost", "title": "Services SSH Host", "description": "SSH destination for Services & Jobs: user@host or an alias from ~/.ssh/config. Uses noninteractive key or agent authentication and a previously trusted host key. Leave empty to disable.", "type": "textfield", "required": false, "placeholder": "user@server.example.com" }, { "name": "servicesSshPort", "title": "Services SSH Port", "description": "Optional SSH port (1\u201365535). Leave empty to use your SSH configuration or port 22.", "type": "textfield", "required": false, "placeholder": "22" }, { "name": "servicesSshIdentityFile", "title": "Services SSH Identity File", "description": "Optional path to your local SSH private key; ~/ is supported. Leave empty to use your SSH configuration or agent. Enter a file path, never the key itself.", "type": "textfield", "required": false, "placeholder": "~/.ssh/id_ed25519" }, { "name": "backrestUrl", "title": "Backrest URL", "description": "Base URL of your Backrest instance. Leave empty to hide Backrest features.", "type": "textfield", "required": false, "placeholder": "https://backrest.example.com" }, { "name": "backrestUsername", "title": "Backrest Username", "description": "Web UI username.", "type": "textfield", "required": false, "placeholder": "admin" }, { "name": "backrestPassword", "title": "Backrest Password", "description": "Web UI password.", "type": "password", "required": false }, { "name": "backrestGraceHours", "title": "Backup Freshness Grace (Hours)", "description": "Extra time beyond each backup/check schedule before it is overdue. Defaults to 2 hours. Manual plans have no deadline.", "type": "textfield", "required": false, "placeholder": "2" }, { "name": "scrutinyUrl", "title": "Scrutiny URL", "description": "Base URL of your Scrutiny instance. Leave empty to hide Scrutiny features.", "type": "textfield", "required": false, "placeholder": "https://scrutiny.example.com" }, { "name": "speedtestUrl", "title": "Speedtest Tracker URL", "description": "Base URL of your Speedtest Tracker instance. Leave empty to hide Speedtest Tracker features.", "type": "textfield", "required": false, "placeholder": "https://speedtest.example.com" }, { "name": "fireflyUrl", "title": "Firefly III URL", "description": "Base URL of your Firefly III instance. Leave empty to hide Firefly III features.", "type": "textfield", "required": false, "placeholder": "https://firefly.example.com" }, { "name": "fireflyToken", "title": "Firefly III Personal Access Token", "description": "Options \u2192 Profile \u2192 OAuth \u2192 Personal Access Tokens.", "type": "password", "required": false }, { "name": "picoUrl", "title": "Firefly Pico URL", "description": "Base URL of your Firefly Pico instance. Leave empty to hide Firefly Pico features.", "type": "textfield", "required": false, "placeholder": "https://pico.example.com" }, { "name": "subscriptionsUrl", "title": "Subscriptions JSON URL", "description": "Optional URL of a subscriptions.json published by the companion firefly-sub-publish script (upcoming bills summary).", "type": "textfield", "required": false, "placeholder": "https://home.example.com/images/subscriptions.json" }, { "name": "forgejoUrl", "title": "Forgejo / Gitea URL", "description": "Base URL of your Forgejo / Gitea instance. Leave empty to hide Forgejo / Gitea features.", "type": "textfield", "required": false, "placeholder": "https://git.example.com" }, { "name": "forgejoToken", "title": "Forgejo / Gitea Access Token", "description": "Settings → Applications → Generate token, with read/write on repository, issue and notification. Unlocks the Code screen (repos, pull requests, reviews, Actions).", "type": "password", "required": false }, { "name": "nextcloudUrl", "title": "Nextcloud URL", "description": "Base URL of Nextcloud, including its subpath if any.", "type": "textfield", "required": false }, { "name": "nextcloudUsername", "title": "Nextcloud Username", "description": "Your Nextcloud user ID (not display name).", "type": "textfield", "required": false }, { "name": "nextcloudAppPassword", "title": "Nextcloud App Password", "description": "Create an app password in Nextcloud \u2192 Personal settings \u2192 Security.", "type": "password", "required": false }, { "name": "lubeloggerUrl", "type": "textfield", "required": false, "title": "LubeLogger URL", "description": "Base URL of your LubeLogger instance, e.g. https://lubelogger.example.org", "placeholder": "https://lubelogger.example.org" }, { "name": "lubeloggerUsername", "type": "textfield", "required": false, "title": "LubeLogger Username", "description": "Only needed if your LubeLogger requires a login (basic auth)", "placeholder": "leave empty when LubeLogger has no account" }, { "name": "lubeloggerPassword", "type": "password", "required": false, "title": "LubeLogger Password", "description": "Only needed if your LubeLogger requires a login (basic auth)", "placeholder": "leave empty when LubeLogger has no account" }, { "name": "lubeloggerCurrency", "type": "textfield", "required": false, "title": "Vehicle Currency Label", "description": "Shown next to costs, e.g. KM or EUR. LubeLogger's API does not report one.", "placeholder": "KM" }, { "name": "lubeloggerDistanceUnit", "type": "textfield", "required": false, "title": "Distance Unit Label", "description": "Defaults to km", "placeholder": "km" }, { "name": "lubeloggerVolumeUnit", "type": "textfield", "required": false, "title": "Fuel Volume Unit Label", "description": "Defaults to L", "placeholder": "L" }, { "name": "lubeloggerVehicleId", "type": "textfield", "required": false, "title": "Default Vehicle ID", "description": "Which vehicle the Home row summarises when you have several", "placeholder": "first vehicle" }, { "name": "lubeloggerDecimal", "type": "dropdown", "required": false, "title": "LubeLogger Decimal Separator", "description": "How LubeLogger's server locale parses numbers. Auto-detects from its own data.", "default": "auto", "data": [ { "title": "Auto-detect", "value": "auto" }, { "title": "Comma (1234,56)", "value": "," }, { "title": "Dot (1234.56)", "value": "." } ] }, { "name": "searxngUrl", "title": "SearXNG URL", "description": "Base URL of your SearXNG instance (JSON API enabled). Leave empty to hide web search.", "type": "textfield", "required": false, "placeholder": "https://search.example.com" }, { "name": "jellystatUrl", "title": "Jellystat URL", "description": "Base URL of your Jellystat instance. Leave empty to hide watch statistics.", "type": "textfield", "required": false, "placeholder": "https://jellystat.example.com" }, { "name": "jellystatApiKey", "title": "Jellystat API Key", "description": "Jellystat → Settings → API Keys.", "type": "password", "required": false } ], "dependencies": { "@raycast/api": "^1.88.4", "@raycast/utils": "^1.18.1", "cron-parser": "^5.10.0", "fast-xml-parser": "^5.11.1" }, "devDependencies": { "@raycast/eslint-config": "^2.2.0", "@types/node": "^22.9.0", "@types/react": "^19.2.18", "eslint": "^10.9.1", "typescript": "^5.6.3" }, "scripts": { "dev": "ray develop", "build": "ray build -e dist", "typecheck": "tsc --noEmit", "test:paperless": "node --test scripts/paperless-api.test.cjs", "lint": "ray lint", "lint:local": "eslint src", "fix-lint": "ray lint --fix", "gen:env": "node scripts/gen-env-example.mjs", "test:nextcloud": "node --test scripts/nextcloud-api.test.cjs", "test:services": "node --test scripts/services-api.test.cjs && python3 scripts/services-jobs.test.py", "test:backups": "node --test scripts/backups-api.test.cjs scripts/backup-storage-api.test.cjs && python3 scripts/backup-storage.test.py" }, "categories": [ "Developer Tools", "Media", "Productivity" ], "keywords": [ "raycast", "raycast-extension", "homelab", "self-hosted", "jellyfin", "jellyseerr", "sonarr", "radarr", "lidarr", "audiobookshelf", "immich", "paperless-ngx", "uptime-kuma", "firefly-iii" ], "repository": { "type": "git", "url": "https://github.com/abjelosevic88/raycast-homelab.git" }, "homepage": "https://github.com/abjelosevic88/raycast-homelab#readme" }