Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1102ef08cd |
No files matched your search
@@ -33,7 +33,6 @@ body:
|
||||
options:
|
||||
# The below comment is used to insert a new version with on-release.yml
|
||||
#NEXT_VERSION#
|
||||
- 1.69.0
|
||||
- 1.68.0
|
||||
- 1.67.0
|
||||
- 1.66.1
|
||||
|
||||
@@ -163,3 +163,65 @@ jobs:
|
||||
run: cp .env.example .env
|
||||
- name: Build
|
||||
run: pnpm turbo build --affected
|
||||
|
||||
memory-regression:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4
|
||||
- name: Build Docker image
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
platforms: linux/amd64
|
||||
context: .
|
||||
push: false
|
||||
load: true
|
||||
tags: homarr-memory-test
|
||||
network: host
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
env:
|
||||
SKIP_ENV_VALIDATION: true
|
||||
- name: Start container and measure memory
|
||||
run: |
|
||||
docker run -d --name homarr-mem-test -p 17575:7575 homarr-memory-test
|
||||
# Wait for container to be healthy (up to 60s)
|
||||
healthy=false
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf http://localhost:17575/api/health 2>/dev/null; then
|
||||
echo "Container healthy after $((i * 2))s"
|
||||
healthy=true
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if [ "$healthy" != "true" ]; then
|
||||
echo "ERROR: Container never became healthy"
|
||||
docker logs homarr-mem-test --tail 50
|
||||
exit 1
|
||||
fi
|
||||
# Warm up: hit the dashboard page a few times
|
||||
for i in $(seq 1 5); do
|
||||
curl -sf http://localhost:17575/ > /dev/null 2>&1 || true
|
||||
sleep 2
|
||||
done
|
||||
# Measure RSS after warmup
|
||||
MEM_KB=$(docker stats --no-stream --format '{{.MemUsage}}' homarr-mem-test | sed 's| /.*||')
|
||||
echo "Raw memory: $MEM_KB"
|
||||
# Convert to numeric MB (handles GiB and MiB suffixes)
|
||||
MEM_NUM=$(echo "$MEM_KB" | awk '{
|
||||
if ($0 ~ /GiB/) { gsub(/GiB/,""); print $1 * 1024 }
|
||||
else if ($0 ~ /MiB/) { gsub(/MiB/,""); print $1 }
|
||||
else if ($0 ~ /KiB/) { gsub(/KiB/,""); print $1 / 1024 }
|
||||
else { print $1 / 1048576 }
|
||||
}')
|
||||
echo "Memory usage: ${MEM_NUM} MB"
|
||||
MAX_MB=700
|
||||
if awk "BEGIN {exit !($MEM_NUM > $MAX_MB)}"; then
|
||||
echo "ERROR: Memory usage ${MEM_NUM} MB exceeds ${MAX_MB} MB threshold"
|
||||
docker logs homarr-mem-test --tail 50
|
||||
exit 1
|
||||
fi
|
||||
echo "Memory check passed: ${MEM_NUM} MB <= ${MAX_MB} MB"
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
# dependencies
|
||||
node_modules
|
||||
.pnpm-store/
|
||||
.pnp
|
||||
.pnp.js
|
||||
.idea/
|
||||
@@ -71,10 +70,7 @@ apps/nextjs/public/images/background.png
|
||||
|
||||
# personal agent config
|
||||
.opencode
|
||||
.agents/
|
||||
skills-lock.json
|
||||
|
||||
# docusaurus
|
||||
apps/docs/.docusaurus
|
||||
apps/docs/build
|
||||
.pnpm-store
|
||||
@@ -1,42 +1,3 @@
|
||||
## [1.69.1](https://github.com/homarr-labs/homarr/compare/v1.69.0...v1.69.1) (2026-07-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* unblock query cache mutations in demo mode and add cache buster ([#6176](https://github.com/homarr-labs/homarr/issues/6176)) ([a382c75](https://github.com/homarr-labs/homarr/commit/a382c75968e73bafff55b5890b1e95f0779b50d3))
|
||||
|
||||
## [1.69.0](https://github.com/homarr-labs/homarr/compare/v1.68.1...v1.69.0) (2026-07-03)
|
||||
|
||||
### Features
|
||||
|
||||
* add per-widget secret storage for release provider authentication ([77884a3](https://github.com/homarr-labs/homarr/commit/77884a31794e12a6f7bc59d96c8f61aa429ca68d))
|
||||
* **config:** enable pnpm global virtual store for worktree support ([#6098](https://github.com/homarr-labs/homarr/issues/6098)) ([3864727](https://github.com/homarr-labs/homarr/commit/3864727502a64052c4e3838468094b30bf04a133))
|
||||
* **docker-widget:** add per-column visibility toggle ([#6093](https://github.com/homarr-labs/homarr/issues/6093)) ([0765262](https://github.com/homarr-labs/homarr/commit/076526293d13379004461633d7ba4c2e83bd5ffe))
|
||||
* **docs:** addd in documentation for archiveteam warrior ([f66469d](https://github.com/homarr-labs/homarr/commit/f66469d79797a2da214588f4e8253b03633c59a5))
|
||||
* simplify caching — TanStack Query as single source of truth ([#6075](https://github.com/homarr-labs/homarr/issues/6075)) ([f19033e](https://github.com/homarr-labs/homarr/commit/f19033e0d53d248aed678737f3d04d5d8c7815b5))
|
||||
* **widgets:** right-click context menu with auto-generated toggle actions ([#6126](https://github.com/homarr-labs/homarr/issues/6126)) ([7e58858](https://github.com/homarr-labs/homarr/commit/7e58858353ae866efd657270d4bb16d2c7d3e551))
|
||||
* **widgets:** show calendar events on hover with pin on click ([#2637](https://github.com/homarr-labs/homarr/issues/2637)) ([#6081](https://github.com/homarr-labs/homarr/issues/6081)) ([db3d588](https://github.com/homarr-labs/homarr/commit/db3d58821e4de8d46b110125d0fa36919765248f))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add id to repository schema and handle missing ids gracefully ([8747d5f](https://github.com/homarr-labs/homarr/commit/8747d5f93ee9a295aad3c7035e8c6c7080bf5ee6))
|
||||
* address PR review - atomic upsert, MCP metadata, stale tokens, save UX ([757d598](https://github.com/homarr-labs/homarr/commit/757d59854e5ec82d91c053b8bc3d7eaf2e70efc4))
|
||||
* address PR review findings for widget-only integration refactor ([c892731](https://github.com/homarr-labs/homarr/commit/c892731479b47fab6218bd1f52fa6eccbdaa371e))
|
||||
* address review - paginate GH releases, GitLab tag_name, docs, test ([e687bc8](https://github.com/homarr-labs/homarr/commit/e687bc8c9277797acaa164a09c74b3808a2cb346))
|
||||
* apply version filter to LinuxServer.io provider ([34d976e](https://github.com/homarr-labs/homarr/commit/34d976eeea09e396334ce8fce5c492c07e7dd32b))
|
||||
* catch individual repo fetch failures to prevent batch crashes ([d893515](https://github.com/homarr-labs/homarr/commit/d893515b932608ea08c9c6e90b83f340e40f6f8e))
|
||||
* compile versionRegex once and add fetch timeouts ([64c7512](https://github.com/homarr-labs/homarr/commit/64c75122833981a49e9c8bf1789d501faff6d62d))
|
||||
* **deps:** update dependency postcss to ^8.5.16 ([#6169](https://github.com/homarr-labs/homarr/issues/6169)) ([9252fdc](https://github.com/homarr-labs/homarr/commit/9252fdc13971bd982224a31d7be577112f99ec45))
|
||||
* dns-hole widgets showing stale disconnected state ([#6096](https://github.com/homarr-labs/homarr/issues/6096)) ([2443f1c](https://github.com/homarr-labs/homarr/commit/2443f1cd3ff6765a91783d60d42aa03d9ba63fcd))
|
||||
* gracefully degrade when widget_secret table is missing or access denied ([30107e4](https://github.com/homarr-labs/homarr/commit/30107e4e76a454ff7402de9a8bc2e0dd6f422aa8))
|
||||
* handle missing widgetSecrets table and add default releases repo ([af35a50](https://github.com/homarr-labs/homarr/commit/af35a50fa05fee2f0118e98727eb108b0200f762))
|
||||
* **immich:** v3 API compatibility — use searchAssets for album assets, drop deviceAssetId ([#5977](https://github.com/homarr-labs/homarr/issues/5977)) ([a5ec880](https://github.com/homarr-labs/homarr/commit/a5ec880eec276e0814d2ab3ed7f9bc0b804d0465))
|
||||
* quick wins — calendar, about, glances, admin UX, releases, iframe, notes ([#6116](https://github.com/homarr-labs/homarr/issues/6116)) ([f9da71a](https://github.com/homarr-labs/homarr/commit/f9da71a19bdfa589aafe26b164d0e0782208ac0a))
|
||||
* restore ArchiveTeam Warrior as a proper integration ([8a5ad58](https://github.com/homarr-labs/homarr/commit/8a5ad5861ba4c2d0978f1fa3f6115a1c5974f8a2))
|
||||
* **timetable:** restore station search by removing disabled query guard ([d670b69](https://github.com/homarr-labs/homarr/commit/d670b6939672932c1a3d17ab9913901491cb46e3))
|
||||
* update CHANGES.md for ArchiveTeam Warrior restoration, remove typo translation key ([62baaf7](https://github.com/homarr-labs/homarr/commit/62baaf78130c4b74e899a948cee17097d8c02593))
|
||||
* verbose error messages in all release providers ([2155f13](https://github.com/homarr-labs/homarr/commit/2155f13f245f601b99458e227b6e058fbfa44cd9))
|
||||
* **widgets:** make downloads widget table background transparent ([#6025](https://github.com/homarr-labs/homarr/issues/6025)) ([73bed51](https://github.com/homarr-labs/homarr/commit/73bed51df895250f415efd7a87e721e403b3fd99))
|
||||
|
||||
## [1.68.1](https://github.com/homarr-labs/homarr/compare/v1.68.0...v1.68.1) (2026-06-30)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
-96
@@ -1,96 +0,0 @@
|
||||
# Changes
|
||||
|
||||
## Goal
|
||||
|
||||
Remove widget-only services from Homarr's global Integration system.
|
||||
|
||||
The affected services are release providers and Search.ch. They are only used by specific widgets, so keeping them as global integrations added unnecessary setup, UI, database rows, docs pages, and integration package code.
|
||||
|
||||
ArchiveTeam Warrior remains a proper integration but is no longer auto-seeded on first install.
|
||||
|
||||
## Why
|
||||
|
||||
These services do not need shared integration state.
|
||||
|
||||
- Release providers are selected per Releases widget repository.
|
||||
- Search.ch is only used by the Timetable widget.
|
||||
|
||||
Moving them into widget options makes configuration simpler and removes dead-weight integration code from `packages/integrations`.
|
||||
|
||||
## What Changed
|
||||
|
||||
### Release Providers
|
||||
|
||||
- Added release provider definitions in `packages/definitions/src/release-provider.ts`.
|
||||
- Removed release providers from `IntegrationKind`.
|
||||
- Moved release-fetching code out of `packages/integrations` and into `packages/request-handler/src/release-providers.ts`.
|
||||
- Updated the Releases widget to store provider configuration directly in widget options:
|
||||
- `provider`
|
||||
- `identifier`
|
||||
- `versionFilter`
|
||||
- `providerUrl`
|
||||
- Updated the Releases widget editor to use a provider select instead of an integration select.
|
||||
- Updated Docker import mapping so `ghcr.io` maps to `gitHubContainerRegistry`.
|
||||
- GitHub Container Registry now uses the public OCI registry API and accepts full image references such as `ghcr.io/homarr-labs/homarr:latest`.
|
||||
|
||||
### Timetable / Search.ch
|
||||
|
||||
- Removed Search.ch as an integration.
|
||||
- Added a Timetable widget `baseUrl` option, defaulting to `https://search.ch`.
|
||||
- Moved Search.ch request/parsing logic into `packages/request-handler/src/timetable.ts`.
|
||||
- Updated the Timetable API to receive `baseUrl` directly from widget options.
|
||||
|
||||
### ArchiveTeam Warrior
|
||||
|
||||
- Kept as a proper integration (not removed).
|
||||
- Removed `defaultUrl` from the integration definition to prevent auto-seeding on first install.
|
||||
|
||||
### Integration Cleanup
|
||||
|
||||
- Removed creators, exports, docs references, and implementation files for the deleted integrations.
|
||||
- Removed unused dependencies from `packages/integrations/package.json`.
|
||||
|
||||
### Database Migration
|
||||
|
||||
- Added `packages/db/migrations/custom/0003_remove_widget_only_integrations.ts`.
|
||||
- The migration moves old integration-linked widget config into widget options, then deletes the old widget-only integration rows.
|
||||
- Updated the earlier release widget migration to use the new `provider` field instead of `providerIntegrationId`.
|
||||
|
||||
### Docs
|
||||
|
||||
- Updated Releases widget docs to describe providers instead of integrations.
|
||||
- Updated Timetable docs to remove Search.ch integration setup.
|
||||
- Removed obsolete integration docs pages for the deleted integration kinds.
|
||||
- Updated docs sitemap and integration docs mappings.
|
||||
|
||||
### Translations
|
||||
|
||||
- Added English labels for the new widget options:
|
||||
- `widget.timetable.option.baseUrl.label`
|
||||
- `widget.releases.option.repositories.providerUrl.label`
|
||||
|
||||
## How It Works Now
|
||||
|
||||
Release provider configuration lives on each Releases widget repository entry. The request handler resolves provider metadata and fetches releases directly from the provider-specific endpoint. GHCR uses anonymous OCI registry access for public packages.
|
||||
|
||||
Timetable passes its widget URL option directly to its API router and request handler. No global integration lookup is needed.
|
||||
|
||||
ArchiveTeam Warrior continues to use the standard integration system, but users must manually add the integration (it is not auto-created on install).
|
||||
|
||||
## Deliberate Non-Goals
|
||||
|
||||
- No provider secret/token support was added.
|
||||
- No new secret storage model was introduced.
|
||||
- No compatibility layer was kept in `packages/integrations`.
|
||||
|
||||
Widget options are client-visible, so storing provider credentials there would be wrong. If authenticated provider requests are needed later, they need a separate secret-storage design.
|
||||
|
||||
## Verification So Far
|
||||
|
||||
- Focused typechecks passed for affected packages.
|
||||
- Full `pnpm turbo typecheck` passed.
|
||||
- Full `pnpm lint` passed with existing warnings.
|
||||
- Focused release provider normalization tests passed.
|
||||
- Widget translation test passed.
|
||||
- Live GHCR smoke checks passed for `ghcr.io/muchobien/pocketbase:latest` and `ghcr.io/homarr-labs/homarr:latest`.
|
||||
- `pnpm test packages/integrations/test/pi-hole.spec.ts` passed earlier, but failed on rebased reruns because Pi-hole reported `domainsBeingBlocked` as `-2`/`0` instead of `> 1`.
|
||||
@@ -28,7 +28,6 @@ Read our [glossary](/docs/getting-started/glossary) if you are new to Homarr.
|
||||
Congratulations on installing Homarr. Now it's time to get yourself familiar with the concepts of Homarr and how to use it.
|
||||
|
||||
## Onboarding
|
||||
|
||||
The onboard will show the first time you start Homarr.
|
||||
This process will help you with your first steps and adding some initial data, such as the administrator account.
|
||||
|
||||
@@ -46,68 +45,50 @@ You can either import a previous dashboard using the ZIP archive or start from s
|
||||
You may refresh anytime and continue from a different device - the onboarding is saved immediately on the server for your convenience.
|
||||
|
||||
### Starting from scratch
|
||||
|
||||
Depending on your auth provider configuration you will either first see the admin user creation form or the external group creation form.
|
||||
If the credentials provider was selected, you'll be prompted to create an admin user for Homarr.
|
||||
This user cannot be deleted and has full control over Homarr and all of its boards.
|
||||
You must choose a username and password (both can later be changed).
|
||||
We enforce strict password requirements when you enter your password to protect your instance if you accidentally
|
||||
expose it to the internet.
|
||||
If credentials provider was selected, you'll be prompted to create an admin user for Homarr.
|
||||
This user cannot be deleted and has full control over Homarr and all of it's boards.
|
||||
You must choose an username and password (both can later be changed).
|
||||
We enforce strict password requirements, when you enter your password, to protect your instance if you accidentially
|
||||
expose it to the Internet.
|
||||
|
||||
<img
|
||||
src={imageStartFromScratchStepAdminUser}
|
||||
alt={"Screenshot form to create admin user"}
|
||||
width={300}
|
||||
/>
|
||||
<img src={imageStartFromScratchStepAdminUser} alt={"Screenshot form to create admin user"} width={300} />
|
||||
|
||||
If you selected external providers (such as LDAP or OIDC), you'll be prompted to create an admin group.
|
||||
This group will be used to synchronize users from your provider to Homarr.
|
||||
When a user logs in through the provider, any of their groups that match groups in Homarr will be assigned to the user.
|
||||
The name of the group must match exactly the name of the group in the provider.
|
||||
This group will be used to synchronize users from your provider to Homarr.
|
||||
When a user is logged in through the provider the groups of him that match groups with any in Homarr will be added to the user.
|
||||
The name of the group has to match exactly the name of the group in the provider.
|
||||
|
||||
<img
|
||||
src={imageStartFromScratchStepExternalAdminGroup}
|
||||
alt={"Screenshot form to create external admin group"}
|
||||
width={300}
|
||||
/>
|
||||
<img src={imageStartFromScratchStepExternalAdminGroup} alt={"Screenshot form to create external admin group"} width={300} />
|
||||
|
||||
Next, you can configure some basic settings for Homarr. We recommend to leave all settings at default for most users.
|
||||
Here you can also disable analytics. Please note that our analytics are completly anonymous and is fully compliant with GDPR and PECR.
|
||||
|
||||
<img
|
||||
src={imageStartFromScratchStepServerSettings}
|
||||
alt={"Screenshot of analytics and indexing settings in the onboarding"}
|
||||
width={300}
|
||||
/>
|
||||
<img src={imageStartFromScratchStepServerSettings} alt={"Screenshot of analytics and indexing settings in the onboarding"} width={300} />
|
||||
|
||||
### Setting up integrations
|
||||
|
||||
After configuring server settings, the onboarding guides you through setting up your integrations.
|
||||
|
||||
#### Docker service discovery
|
||||
|
||||
If Docker is available (socket mounted), Homarr automatically detects running containers and matches them to known integration types.
|
||||
Matching integrations are pre-selected in the integration list, saving you from manually picking each one.
|
||||
|
||||
#### URL templating
|
||||
|
||||
You can define a base URL template to auto-fill integration URLs in bulk.
|
||||
Two modes are supported:
|
||||
|
||||
- **Subdomain mode** - e.g. `{app}.example.com` where `{app}` is replaced with the integration name
|
||||
- **Port mode** - e.g. `192.168.1.1:{port}` where `{port}` is replaced with the integration's default port
|
||||
|
||||
#### API key helper links
|
||||
|
||||
For integrations that require API keys (such as Sonarr, Radarr, SABnzbd, or Seerr), a helper link opens the relevant settings page in the target application so you can quickly copy your key.
|
||||
|
||||
#### Creating apps from Docker containers
|
||||
|
||||
You can optionally auto-create bookmark apps for all discovered Docker containers, making them immediately available on your board.
|
||||
|
||||
:::note
|
||||
|
||||
Release providers and Search.ch are configured directly in their widgets instead of the integrations page.
|
||||
Some niche and registry integrations (GitHub, npm, Docker Hub, GitLab, Codeberg, LinuxServer.io, GHCR, Quay, Search.ch) are hidden from the onboarding selection grid but remain available on the manage integrations page.
|
||||
|
||||
:::
|
||||
|
||||
@@ -116,41 +97,30 @@ The onboarding can no longer be started again.
|
||||
From here you can click on one of the provided links to continue your journey.
|
||||
We recommend you to continue with the section [creating your first board on this page](#creating-your-first-board).
|
||||
|
||||
<img
|
||||
src={imageStartFromScratchStepFinish}
|
||||
alt={"Screenshot of the finish onboarding process with links"}
|
||||
width={300}
|
||||
/>
|
||||
<img src={imageStartFromScratchStepFinish} alt={"Screenshot of the finish onboarding process with links"} width={300} />
|
||||
|
||||
### Importing a ZIP from version before 1.0.0
|
||||
|
||||
This is recommended when you used Homarr before and want to re-import your data.
|
||||
It is important that you first migrate correctly using [the list of breaking changes for 1.0](/blog/2024/09/23/version-1.0).
|
||||
|
||||
<img
|
||||
src={manageExportOldHomarr}
|
||||
alt="Export from old Homarr"
|
||||
style={{ maxWidth: 500 }}
|
||||
/>
|
||||
<img src={manageExportOldHomarr} alt="Export from old Homarr" style={{ maxWidth: 500 }} />
|
||||
|
||||
**How to export and import data**
|
||||
|
||||
1. Navigate to your old Homarr, open your management pages, open the tools submenu and open `Migrate to 1.0`.
|
||||
1. Navigate to your old Homarr, open your management pages, open the tools submenu and open ``Migrate to 1.0``.
|
||||
2. Check the contents that you want to export. We recommend you to export all data.
|
||||
3. Click on the export data button
|
||||
4. Save the ZIP file, that is being downloaded, on your device. If you selected "integrations" or "users", you also get an encryption / decryption key.
|
||||
Copy it and do not loose it!
|
||||
5. Go to your new >1.0.0 Homarr instance and start the onboarding. Choose `Import from Homarr before 1.0`
|
||||
Copy it and do not loose it!
|
||||
5. Go to your new >1.0.0 Homarr instance and start the onboarding. Choose ``Import from Homarr before 1.0``
|
||||
6. Drag and drop your previously downloaded ZIP archive into the file upload: <br/><img src={manageImportOldHomarrDropzone} style={{ maxWidth: 500 }} />
|
||||
7. Next, choose the data that you want to import and how to import it. Since screen sizes were removed in 1.0, we create a new board for every screen size by default. We recommend you to only keep the best layout and adjust it later in 1.0.0 - but you can also import all of them and pick later.<br/><img src={manageImportOldHomarrChooseData} style={{ maxWidth: 500 }} />
|
||||
8. If you previously exported integrations or users, you will be asked to decrypt the data safely using your obtained encryption token. Paste into the modal and confirm your action.<br/><img src={manageImportDecryptionToken} style={{ maxWidth: 500 }} />
|
||||
9. Next, you can [follow the same setup as when starting from scratch](#starting-from-scratch). After you completed the onboarding, all of your data will be migrated and available.
|
||||
|
||||
## Creating your first board
|
||||
|
||||
In Homarr, you organize your apps and widgets on boards.
|
||||
Boards can be organized using the interactive drag and drop.
|
||||
Let's create your first board by navigating here: `Manage` > `Boards` > `New board`:
|
||||
Let's create your first board by navigating here: ``Manage`` > ``Boards`` > ``New board``:
|
||||

|
||||
|
||||
A board must always have a name and can either be public or private.
|
||||
@@ -163,13 +133,12 @@ Congratulations - you've just created your first board. You can see boards, that
|
||||

|
||||
|
||||
## Add your first app to Homarr
|
||||
|
||||
To add links to your dashboard, you must first add them as an "app".
|
||||
Navigate to this page to add an app:
|
||||
|
||||

|
||||
|
||||
Next, click on the `New app` button. You'll need to provide a name and an icon to create an app.
|
||||
Next, click on the ``New app`` button. You'll need to provide a name and an icon to create an app.
|
||||
The name must be at least one character long but you can provide any image URL for the icon.
|
||||
Homarr ships with over 11K icons - so you can just search by entering a search text instead.
|
||||
|
||||
@@ -180,9 +149,8 @@ After you created the app, you'll see in on the apps page:
|
||||

|
||||
|
||||
## Arrange and organize your board
|
||||
|
||||
Let's add your freshly created app, from the previous step, to the board.
|
||||
To do this, edit your previously created board by clicking on the big `Open board` button:
|
||||
To do this, edit your previously created board by clicking on the big ``Open board`` button:
|
||||
|
||||

|
||||
|
||||
@@ -197,38 +165,23 @@ Here you have the following options in the header:
|
||||
|
||||
When entering the edit mode, you'll get some additional buttons to work with:
|
||||
|
||||
<img
|
||||
src={manageBoardHeaderEditMode}
|
||||
alt={"Screenshot of buttons in the edit mode"}
|
||||
width={200}
|
||||
/>
|
||||
<img src={manageBoardHeaderEditMode} alt={"Screenshot of buttons in the edit mode"} width={200} />
|
||||
|
||||
- **Add item**: Click this button to add new elements to your page.
|
||||
- **Exit edit mode**: Click this btuton to save your changes and exit edit mode.
|
||||
|
||||
To continue, click the option "New Item":
|
||||
|
||||
<img
|
||||
src={manageBoardHeaderAddItem}
|
||||
alt={"Screenshot of the add item menu"}
|
||||
width={200}
|
||||
/>
|
||||
<img src={manageBoardHeaderAddItem} alt={"Screenshot of the add item menu"} width={200} />
|
||||
|
||||
Next, you can choose what item you'd like to add.
|
||||
We will discuss the other options in the following sections - for now choose "App" to continue.
|
||||
|
||||
<img
|
||||
src={manageBoardHeaderChooseItem}
|
||||
alt={"Screenshot of choosing the app item in the modal"}
|
||||
width={300}
|
||||
/>
|
||||
<img src={manageBoardHeaderChooseItem} alt={"Screenshot of choosing the app item in the modal"} width={300} />
|
||||
|
||||
As soon as you chose the app, the modal will close and you'll get the following item on your board:
|
||||
|
||||
<img
|
||||
src={manageBoardNoApp}
|
||||
alt="Screenshot of the No app element on the board"
|
||||
/>
|
||||
<img src={manageBoardNoApp} alt="Screenshot of the No app element on the board" />
|
||||
|
||||
This is expected, because you haven't told Homarr what app it should show in this item.
|
||||
To configure this, click on the small 3 dots at the top of the item in the edit mode and choose "Edit item" in the menu.
|
||||
@@ -275,18 +228,17 @@ Be sure to save your changes by exiting edit mode!
|
||||

|
||||
|
||||
## Adding your first integration
|
||||
|
||||
Now it's time to integrate some basic data into your board.
|
||||
To do this, we first need to create an integration.
|
||||
An integration is a connection between Homarr and a third party application - usually something that you run and deploy yourself.
|
||||
|
||||
Navigate to `Manage` > `Integrations` (for example via your user menu).
|
||||
Navigate to ``Manage`` > ``Integrations`` (for example via your user menu).
|
||||
As an example, we are going to use the public demo instance of **Dash.** - a popular application to monitor CPU / hardware usage.
|
||||
Choose the **Dash.** integration from the list of available integrations:
|
||||
|
||||

|
||||
|
||||
Next, choose a name (or leave it at default), enter `https://dash.mauz.dev/` as the URL in the form and click on `Test connection and create`.
|
||||
Next, choose a name (or leave it at default), enter ``https://dash.mauz.dev/`` as the URL in the form and click on ``Test connection and create``.
|
||||
Pressing the save button will perform a test request to the integration, to confirm that the networking setup is working as expected.
|
||||
Sometimes invalid configurations, firewalls and other mistakes can lead to connectivity problems - [follow this guide here](/docs/management/integrations/#troubleshooting-connection) if you experience issues.
|
||||
|
||||
@@ -302,14 +254,13 @@ the target application or your router.
|
||||
:::
|
||||
|
||||
## Embed integration data using widgets
|
||||
|
||||
Let's add your integration, that you have configured in the section above, as a widget to your board.
|
||||
First, navigate back to your board that you want to add it to.
|
||||
Next, enter edit mode again and add another item to your board:
|
||||
|
||||

|
||||
|
||||
Instead of choosing an app, let's choose `System Health Monitoring` this time.
|
||||
Instead of choosing an app, let's choose ``System Health Monitoring`` this time.
|
||||
Click on "Add to board":
|
||||
|
||||

|
||||
@@ -339,12 +290,10 @@ As with every change, don't forget to save your changes using the exit edit mode
|
||||

|
||||
|
||||
## Grouping your items
|
||||
|
||||
As the last step, let's organize your freshly created items using two different options.
|
||||
You can choose either or both of them on your boards.
|
||||
|
||||
### Using dynamic sections
|
||||
|
||||
Dynamic sections are a simple, resizable visual group to group items.
|
||||
|
||||

|
||||
@@ -354,7 +303,6 @@ After adding a dynamic section, you can simply drag and drop items into the sect
|
||||

|
||||
|
||||
### Using categories
|
||||
|
||||
Categories are more advanced and complicated than dynamic sections.
|
||||
To create a category, open the add item modal and choose "new category":
|
||||
|
||||
@@ -381,27 +329,22 @@ You cannot reduce their horizontal width.
|
||||
After completing the onboarding, Homarr provides interactive guided tours to help you discover key features.
|
||||
|
||||
### Management tour
|
||||
|
||||
When you first visit the management area (`/manage`), Homarr walks you through the main pages: boards, apps, integrations, and users (admin only).
|
||||
Each page highlights the list view and the create action so you know where to find and add things.
|
||||
|
||||
### Board tour
|
||||
|
||||
When you first open a board, a tour highlights the board header elements: search, edit mode, settings, board switcher, and user menu.
|
||||
|
||||
### Tour controls
|
||||
|
||||
- Press **Enter** (or click **Next**) to advance through tour steps
|
||||
- Tours auto-start on first visit and do not repeat once completed
|
||||
- Tours are skipped on mobile screens (below `sm` breakpoint)
|
||||
- You can **reset tours** from the user settings page under **Manage > Users > [Your user] > General**
|
||||
|
||||
## Next steps
|
||||
|
||||
You're done with the basic setup 🔥. Now it's time to organize and customize even more.
|
||||
We highly recommend you to experiment with different options, styles and configurations.
|
||||
See these curated pages for your next steps:
|
||||
|
||||
- Create new apps using the [apps management](/docs/management/apps/)
|
||||
- Customize your board or add more boards using the [boards management](/docs/management/boards/)
|
||||
- Integrate software that you use using the [integrations management](/docs/management/integrations/)
|
||||
|
||||
@@ -4,6 +4,7 @@ description: "AdGuard Home is a network-wide software for blocking ads and track
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
|
||||
categories={['DNS Hole']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={adguardHomeIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const adguardHomeIntegration: IntegrationDefinition = {
|
||||
"AdGuard Home is a network-wide software for blocking ads and trackers, providing a safer and faster internet experience.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg",
|
||||
path: "../../integrations/adguard-home",
|
||||
data: "Fetches DNS query statistics, blocking status, and filtering rules from AdGuard Home.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Anchor is a self-hosted note-taking application."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { anchorNoteWidget } from '@site/docs/widgets/anchor-note';
|
||||
|
||||
The Anchor integration lets Homarr connect to your Anchor instance so you can display and edit selected notes directly from your dashboard.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={anchorIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const anchorIntegration: IntegrationDefinition = {
|
||||
"Anchor is a self-hosted note-taking application. The Anchor integration lets Homarr display and edit selected notes directly from the dashboard.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/anchor.svg",
|
||||
path: "../../integrations/anchor",
|
||||
data: "Fetches and updates notes from an Anchor note-taking server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "ArchiveTeam Warrior is an easy-to-run virtual machine that helps p
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from "@site/src/components/integrations/data";
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
@@ -13,6 +14,10 @@ import { archiveTeamWarriorIntegration } from ".";
|
||||
|
||||
The ArchiveTeam Warrior integration lets Homarr connect to your ArchiveTeam Warrior instance so you can manage and monitor your archiving tasks directly from your dashboard.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={archiveTeamWarriorIntegration} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
@@ -6,4 +6,5 @@ export const archiveTeamWarriorIntegration: IntegrationDefinition = {
|
||||
"ArchiveTeam Warrior is an easy-to-run virtual machine that helps preserve websites by using some of your bandwidth and disk space to download and upload content to ArchiveTeam’s archive.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/archiveteam-warrior.png",
|
||||
path: "../../integrations/archiveteam-warrior",
|
||||
data: "Fetches Archive Team Warrior status including project, bandwidth stats, and item progress via WebSocket.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Lightweight multiprotocol & multi-source command-line download uti
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -16,6 +17,10 @@ import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
categories={['Download', 'Multiprotocol', 'Multi-source']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={aria2Integration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const aria2Integration: IntegrationDefinition = {
|
||||
"Lightweight multi-protocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/PapirusDevelopmentTeam/papirus_icons@latest/src/system_downloads_3.svg",
|
||||
path: "../../integrations/aria2",
|
||||
data: "Manages and monitors Aria2 downloads including active, waiting, and stopped transfers.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Audiobookshelf is a self-hosted audiobook and podcast server that
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
|
||||
|
||||
Audiobookshelf provides library statistics including audiobook and podcast counts, listening time, and active sessions.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={audiobookshelfIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const audiobookshelfIntegration: IntegrationDefinition = {
|
||||
"Audiobookshelf is a self-hosted audiobook and podcast server that lets you manage and stream your audio library.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/audiobookshelf.svg",
|
||||
path: "../../integrations/audiobookshelf",
|
||||
data: "Fetches library statistics, listening time, and active sessions from Audiobookshelf.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Beszel is a lightweight server monitoring platform with Docker sta
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -27,6 +28,10 @@ Beszel monitors your servers in real time via lightweight agents, collecting CPU
|
||||
|
||||
<img src={beszelDashboard} alt="Beszel dashboard overview showing all four widgets" />
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={beszelIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const beszelIntegration: IntegrationDefinition = {
|
||||
"Beszel is a lightweight server monitoring platform with Docker stats, historical data, and alert functions.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/beszel.svg",
|
||||
path: "../../integrations/beszel",
|
||||
data: "Fetches server monitoring data including system stats, containers, SMART devices, alerts, and real-time metrics.",
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: 'Codeberg'
|
||||
description: "Codeberg is a non-profit, community-driven platform for hosting and collaborating on software projects."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { codebergIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={codebergIntegration}
|
||||
categories={['Version Control', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={codebergIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ['personalAccessToken'],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,10 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const codebergIntegration: IntegrationDefinition = {
|
||||
name: "Codeberg",
|
||||
description:
|
||||
"Codeberg is a non-profit, community-driven platform for hosting and collaborating on software projects.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/codeberg.svg",
|
||||
path: "../../integrations/codeberg",
|
||||
data: "Fetches latest releases and repository metadata from a Codeberg instance.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: 'Self-hosted PaaS and deployment platform'
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -16,6 +17,10 @@ import { coolifyWidget } from '../../widgets/coolify';
|
||||
categories={['System monitoring', 'Deployment']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={coolifyIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -5,4 +5,5 @@ export const coolifyIntegration: IntegrationDefinition = {
|
||||
description: "Self-hosted PaaS and deployment platform",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/coolify.svg",
|
||||
path: "../../integrations/coolify",
|
||||
data: "Fetches Coolify instance information including applications, services, servers, projects, and health status.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Dash. is a system performance and resource monitoring tool"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={dashDotIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -5,4 +5,5 @@ export const dashDotIntegration: IntegrationDefinition = {
|
||||
description: "Dash. is a system performance and resource monitoring tool",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dashdot.png",
|
||||
path: "../../integrations/dash-dot",
|
||||
data: "Fetches system health monitoring data including CPU, RAM, storage, network, and GPU information.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Deluge is a lightweight, Free Software, cross-platform BitTorrent
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
categories={['Torrent client']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={delugeIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -5,4 +5,5 @@ export const delugeIntegration: IntegrationDefinition = {
|
||||
description: "Deluge is a lightweight, Free Software, cross-platform BitTorrent client.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/deluge.svg",
|
||||
path: "../../integrations/deluge",
|
||||
data: "Manages and monitors Deluge torrents including progress, speeds, and pause/resume/delete actions.",
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: 'Docker Hub'
|
||||
description: "Docker Hub is a cloud-based registry service for sharing and managing Docker images."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { dockerHubIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={dockerHubIntegration}
|
||||
categories={['Container Management', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={dockerHubIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ['username', 'personalAccessToken'],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,9 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const dockerHubIntegration: IntegrationDefinition = {
|
||||
name: "Docker Hub",
|
||||
description: "Docker Hub is a cloud-based registry service for sharing and managing Docker images.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/docker.svg",
|
||||
path: "../../integrations/docker-hub",
|
||||
data: "Fetches container image tags and repository metadata from Docker Hub.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Docker is a platform where you can run your applications in contai
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
@@ -17,6 +18,10 @@ import { dockerContainersWidget } from '@site/docs/widgets/docker-containers';
|
||||
categories={['Containers']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={dockerIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const dockerIntegration: IntegrationDefinition = {
|
||||
"Docker is a platform where you can run your applications in containers, allowing for easy deployment and management of applications.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/docker.svg",
|
||||
path: "../../integrations/docker",
|
||||
data: "Fetches Docker container information including status, CPU, and memory usage via the Docker socket.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Emby is a media server platform that allows you to organize, manag
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
categories={['Media server']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={embyIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const embyIntegration: IntegrationDefinition = {
|
||||
"Emby is a media server platform that allows you to organize, manage, and stream your personal media collection.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/emby.svg",
|
||||
path: "../../integrations/emby",
|
||||
data: "Fetches active streams and recently added media from an Emby media server.",
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: 'GitHub Container Registry'
|
||||
description: "GitHub Container Registry is a platform for hosting and managing packages."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { gitHubContainerRegistryIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={gitHubContainerRegistryIntegration}
|
||||
categories={['Package Management', 'Software']}
|
||||
/>
|
||||
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={gitHubContainerRegistryIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ["personalAccessToken"],
|
||||
steps: []
|
||||
}, {
|
||||
tabLabel: "GitHub App",
|
||||
credentials: ['githubAppId', 'githubInstallationId', 'privateKey'],
|
||||
steps: ['Create GitHub App', 'Create a private key for it', 'Install it to your organization / user']
|
||||
}]} />
|
||||
@@ -0,0 +1,12 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const gitHubContainerRegistryIntegration: IntegrationDefinition = {
|
||||
name: "GitHub Container Registry",
|
||||
description: "GitHub Container Registry is a platform for hosting and managing packages.",
|
||||
iconUrl: {
|
||||
light: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/github.svg",
|
||||
dark: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/github-light.svg",
|
||||
},
|
||||
path: "../../integrations/github-packages",
|
||||
data: "Fetches container image tags and package metadata from GitHub Container Registry.",
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: 'GitHub'
|
||||
description: "GitHub is a web-based platform for version control and collaboration."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { githubIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={githubIntegration}
|
||||
categories={['Version Control', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={githubIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ['personalAccessToken'],
|
||||
steps: []
|
||||
}, {
|
||||
tabLabel: "GitHub App",
|
||||
credentials: ['githubAppId', 'githubInstallationId', 'privateKey'],
|
||||
steps: ['Create GitHub App', 'Create a private key for it', 'Install it to your organization / user']
|
||||
}]} />
|
||||
@@ -0,0 +1,12 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const githubIntegration: IntegrationDefinition = {
|
||||
name: "GitHub",
|
||||
description: "GitHub is a web-based platform for version control and collaboration.",
|
||||
iconUrl: {
|
||||
light: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/github.svg",
|
||||
dark: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/github-light.svg",
|
||||
},
|
||||
path: "../../integrations/github",
|
||||
data: "Fetches releases and repository metadata from GitHub using the Octokit API.",
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: 'GitLab'
|
||||
description: "GitLab is a web-based DevOps lifecycle tool that provides a Git repository manager."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { gitlabIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={gitlabIntegration}
|
||||
categories={['Version Control', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={gitlabIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ['personalAccessToken'],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,9 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const gitlabIntegration: IntegrationDefinition = {
|
||||
name: "GitLab",
|
||||
description: "GitLab is a web-based DevOps lifecycle tool that provides a Git repository manager.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitlab.svg",
|
||||
path: "../../integrations/gitlab",
|
||||
data: "Fetches releases and project metadata from a GitLab instance.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Glances is a cross-platform system monitoring tool."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
categories={['System Monitoring']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={glancesIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -8,4 +8,5 @@ export const glancesIntegration: IntegrationDefinition = {
|
||||
dark: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances-light.svg",
|
||||
},
|
||||
path: "../../integrations/glances",
|
||||
data: "Fetches system health data including CPU, RAM, disk, network, GPU, and sensors from Glances.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: 'Connect Gluetun to Homarr as a VPN integration.'
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { vpnWidget } from '@site/docs/widgets/vpn';
|
||||
[Gluetun](https://github.com/qdm12/gluetun) exposes a control server that Homarr can query to report the VPN tunnel
|
||||
status, DNS status, public IP address, and active provider details in the VPN widget.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={gluetunIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
|
||||
@@ -5,4 +5,5 @@ export const gluetunIntegration: IntegrationDefinition = {
|
||||
description: "VPN control server integration for Homarr's VPN widget.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gluetun.svg",
|
||||
path: "../../integrations/gluetun",
|
||||
data: "Fetches VPN status, public IP, and DNS information from a Gluetun VPN container.",
|
||||
};
|
||||
@@ -6,6 +6,7 @@ hide_title: true
|
||||
|
||||
import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
@@ -16,6 +17,10 @@ import { gotifyIntegration } from '.';
|
||||
categories={['Notifications', 'Messaging']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={gotifyIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -5,4 +5,5 @@ export const gotifyIntegration: IntegrationDefinition = {
|
||||
description: "Gotify is a simple, self-hosted server for sending and receiving messages in real time.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gotify.svg",
|
||||
path: "../../integrations/gotify",
|
||||
data: "Fetches recent push notification messages from a Gotify server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Home Assistant is an open-source home automation platform that foc
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { smartHomeExecuteAutomationWidget } from '@site/docs/widgets/smart-home-
|
||||
categories={['Smart Home', 'Automation']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={homeAssistantIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const homeAssistantIntegration: IntegrationDefinition = {
|
||||
"Home Assistant is an open-source home automation platform that focuses on privacy and local control, allowing you to automate and control your smart home devices.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/home-assistant.svg",
|
||||
path: "../../integrations/home-assistant",
|
||||
data: "Fetches entity states, triggers automations, toggles entities, and retrieves calendar events from Home Assistant.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "iCal is a standard for calendar data exchange, allowing users to s
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -17,6 +18,10 @@ import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
categories={['Calendar']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={icalIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const icalIntegration: IntegrationDefinition = {
|
||||
"iCal is a standard for calendar data exchange, allowing users to share and manage calendar events across different platforms.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ical.svg",
|
||||
path: "../../integrations/ical",
|
||||
data: "Fetches and parses an iCal/ICS calendar feed to retrieve calendar events.",
|
||||
};
|
||||
@@ -9,6 +9,7 @@ import { immichAlbumCarouselWidget } from '../../widgets/immich-album-carousel';
|
||||
} from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { immichIntegration } from '.';
|
||||
import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
|
||||
@@ -19,6 +20,10 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
|
||||
categories={['Photo server']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={immichIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
@@ -39,26 +44,13 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
|
||||
'Scroll down to "API Keys"',
|
||||
'Click "New API Key"',
|
||||
'Enter a name, e.g. "Homarr"',
|
||||
(
|
||||
|
||||
<span>
|
||||
|
||||
Select the following permissions:{" "}
|
||||
<code>album.statistics</code>,{" "}
|
||||
<code>album.read</code>,{" "}
|
||||
<code>album.create</code>,{" "}
|
||||
<code>user.read</code>,{" "}
|
||||
<code>user.update</code>,{" "}
|
||||
<code>asset.read</code>,{" "}
|
||||
<code>asset.download</code>,{" "}
|
||||
<code>asset.statistics</code>,{" "}
|
||||
<code>server.statistics</code>,{" "}
|
||||
<code>server.about</code>.
|
||||
<br />
|
||||
Additional permissions may be required depending on your Immich version. If you encounter authorization errors, grant any missing permissions requested by the server.
|
||||
</span>
|
||||
|
||||
),Ï
|
||||
(<span>
|
||||
Select the following permissions:{" "}
|
||||
<code>album.read</code>,{" "}
|
||||
<code>user.read</code>,{" "}
|
||||
<code>server.statistics</code>,{" "}
|
||||
<code>asset.download</code>
|
||||
</span>),
|
||||
'Create the integration in Homarr and copy the API key to there'
|
||||
]
|
||||
}]} />
|
||||
}]} />
|
||||
@@ -5,4 +5,5 @@ export const immichIntegration: IntegrationDefinition = {
|
||||
description: "Self-hosted photo and video management solution",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg",
|
||||
path: "../../integrations/immich",
|
||||
data: "Fetches server statistics, albums, and users from an Immich photo management server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Jellyfin is a free and open-source media server software that allo
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
categories={['Media server']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={jellyfinIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const jellyfinIntegration: IntegrationDefinition = {
|
||||
"Jellyfin is a free and open-source media server software that allows you to organize, manage, and share your media files.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyfin.svg",
|
||||
path: "../../integrations/jellyfin",
|
||||
data: "Fetches active streams and recently added media from a Jellyfin media server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Jellyseerr is a self-hosted media request management system that i
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats'
|
||||
categories={['Media requests']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={jellyseerrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const jellyseerrIntegration: IntegrationDefinition = {
|
||||
"Jellyseerr is a self-hosted media request management system that integrates with Jellyfin and other media servers.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyseerr.svg",
|
||||
path: "../../integrations/jellyseerr",
|
||||
data: "Fetches media requests, search results, and user information from Jellyseerr.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Kubernetes is a powerful container orchestration platform that aut
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
@@ -24,6 +25,10 @@ This integration is read-only, meaning Homarr does not modify or manage cluster
|
||||
|
||||

|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={kubernetesIntegration} />
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Before deploying Homarr in Kubernetes, ensure the following prerequisites are met:
|
||||
|
||||
@@ -6,4 +6,5 @@ export const kubernetesIntegration: IntegrationDefinition = {
|
||||
"Kubernetes is a powerful container orchestration platform that automates the deployment, scaling, and management of containerized applications.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/kubernetes.svg",
|
||||
path: "../../integrations/kubernetes",
|
||||
data: "Fetches Kubernetes cluster information including pods, deployments, and services.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Lidarr is a music management tool that automates the process of do
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={lidarrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const lidarrIntegration: IntegrationDefinition = {
|
||||
"Lidarr is a music management tool that automates the process of downloading, sorting, and renaming music.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lidarr.svg",
|
||||
path: "../../integrations/lidarr",
|
||||
data: "Fetches music album release calendar events from Lidarr.",
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: 'LinuxServer.io'
|
||||
description: "LinuxServer.io is a platform for managing and deploying containerized applications."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { linuxServerIoIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={linuxServerIoIntegration}
|
||||
categories={['Container Management', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={linuxServerIoIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,9 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const linuxServerIoIntegration: IntegrationDefinition = {
|
||||
name: "LinuxServer.io",
|
||||
description: "LinuxServer.io is a platform for managing and deploying containerized applications.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/linuxserver-io.svg",
|
||||
path: "../../integrations/linux-server-io",
|
||||
data: "Fetches Docker image versions and changelogs from LinuxServer.io.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Navidrome is a self-hosted music server and streamer compatible wi
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
|
||||
|
||||
Navidrome provides music library statistics including artist, album, and song counts, as well as now playing information via the Subsonic API.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={navidromeIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -5,4 +5,5 @@ export const navidromeIntegration: IntegrationDefinition = {
|
||||
description: "Navidrome is a self-hosted music server and streamer compatible with the Subsonic API.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/navidrome.svg",
|
||||
path: "../../integrations/navidrome",
|
||||
data: "Fetches library statistics and currently playing tracks from a Navidrome music server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Nextcloud is a self-hosted productivity platform that provides fil
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
categories={['Calendar', 'Notifications']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={nextcloudIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const nextcloudIntegration: IntegrationDefinition = {
|
||||
"Nextcloud is a self-hosted productivity platform that provides file storage, collaboration tools, and more.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg",
|
||||
path: "../../integrations/nextcloud",
|
||||
data: "Fetches calendar events and notifications from a Nextcloud instance.",
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: 'NPM'
|
||||
description: "NPM is a package manager for the JavaScript programming language, primarily used for managing Node.js packages."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { npmIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={npmIntegration}
|
||||
categories={['Package Management', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={npmIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,10 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const npmIntegration: IntegrationDefinition = {
|
||||
name: "NPM",
|
||||
description:
|
||||
"NPM is a package manager for the JavaScript programming language, primarily used for managing Node.js packages.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/npm.svg",
|
||||
path: "../../integrations/npm",
|
||||
data: "Fetches the latest npm package version and metadata from the npm registry.",
|
||||
};
|
||||
@@ -6,6 +6,7 @@ hide_title: true
|
||||
|
||||
import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
@@ -17,6 +18,10 @@ import { ntfyIntegration } from '.';
|
||||
categories={['Notifications', 'Messaging']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={ntfyIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const ntfyIntegration: IntegrationDefinition = {
|
||||
"Ntfy is a simple, open-source notification service that allows you to send and receive notifications across devices.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ntfy.svg",
|
||||
path: "../../integrations/ntfy",
|
||||
data: "Fetches recent push notifications from an ntfy.sh topic.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "NZBGet is a lightweight and efficient Usenet downloader."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
categories={['Usenet client']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={nzbgetIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -4,4 +4,5 @@ export const nzbgetIntegration: IntegrationDefinition = {
|
||||
description: "NZBGet is a lightweight and efficient Usenet downloader.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nzbget.svg",
|
||||
path: "../../integrations/nzbget",
|
||||
data: "Manages and monitors NZBGet usenet downloads including queue, history, and pause/resume/delete actions.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Open Media Vault is a free network-attached storage server based o
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={openMediaVaultIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -4,4 +4,5 @@ export const openMediaVaultIntegration: IntegrationDefinition = {
|
||||
description: "Open Media Vault is a free network-attached storage server based on the Debian operating system.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openmediavault.svg",
|
||||
path: "../../integrations/open-media-vault",
|
||||
data: "Fetches system health data including CPU, memory, filesystem, SMART status, and CPU temperature from OpenMediaVault.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "OPNsense is an open-source, easy-to-use, and easy-to-build firewal
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { firewallWidget } from '../../widgets/firewall';
|
||||
categories={['Firewall']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={opnsenseIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -4,4 +4,5 @@ export const opnsenseIntegration: IntegrationDefinition = {
|
||||
description: "OPNsense is an open-source, easy-to-use, and easy-to-build firewall and routing platform",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/opnsense.svg",
|
||||
path: "../../integrations/opnsense",
|
||||
data: "Fetches firewall summary data including version, interface traffic, memory, and CPU usage from OPNsense.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Overseerr is a self-hosted media request management system that in
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats'
|
||||
categories={['Media requests']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={overseerrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -4,4 +4,5 @@ export const overseerrIntegration: IntegrationDefinition = {
|
||||
description: "Overseerr is a self-hosted media request management system that integrates with Plex.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/overseerr.svg",
|
||||
path: "../../integrations/overseerr",
|
||||
data: "Fetches media requests, search results, and user information from Overseerr with approve/decline actions.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Paperless-ngx is a document management system that transforms your
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { paperlessNgxWidget } from '@site/docs/widgets/paperless-ngx';
|
||||
|
||||
Paperless-ngx provides document statistics including total documents, inbox count, correspondents, tags, and document types.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={paperlessNgxIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -6,4 +6,5 @@ export const paperlessNgxIntegration: IntegrationDefinition = {
|
||||
"Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg",
|
||||
path: "../../integrations/paperless-ngx",
|
||||
data: "Fetches document statistics including total documents, inbox count, tags, correspondents, and document types.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: 'A tiny dashboard for Network UPS Tools (NUT) servers.'
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { upsWidget } from '@site/docs/widgets/ups';
|
||||
[PeaNUT](https://github.com/Brandawg93/PeaNUT) exposes the data of your [Network UPS Tools](https://networkupstools.org/) servers
|
||||
over a REST API, which Homarr reads to display the status of your UPS devices.
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={peaNutIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -5,4 +5,5 @@ export const peaNutIntegration: IntegrationDefinition = {
|
||||
description: "A tiny dashboard for Network UPS Tools (NUT) servers.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/peanut.svg",
|
||||
path: "../../integrations/peanut",
|
||||
data: "Fetches UPS device summaries including battery charge, runtime, load, and voltage from PeaNut (NUT).",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Pi-hole is a network-wide ad blocker that acts as a DNS sinkhole,
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -24,6 +25,10 @@ import { piHoleIntegration } from '.';
|
||||
Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API.
|
||||
</Alert>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={piHoleIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
|
||||
@@ -6,4 +6,5 @@ export const piHoleIntegration: IntegrationDefinition = {
|
||||
"Pi-hole is a network-wide ad blocker that acts as a DNS sinkhole, blocking unwanted content and improving your browsing experience.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/pi-hole.svg",
|
||||
path: "../../integrations/pi-hole",
|
||||
data: "Fetches DNS query statistics and blocking status from Pi-hole with enable/disable support (auto-detects v5 vs v6).",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Plex is a media server platform that allows you to organize, manag
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
categories={['Media server']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={plexIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -5,4 +5,5 @@ export const plexIntegration: IntegrationDefinition = {
|
||||
"Plex is a media server platform that allows you to organize, manage, and stream your personal media collection.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/plex.svg",
|
||||
path: "../../integrations/plex",
|
||||
data: "Fetches active streams and recently added media from a Plex Media Server.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Prowlarr is an indexer manager for Usenet and BitTorrent, providin
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -17,6 +18,10 @@ import { indexerManagerWidget } from '@site/docs/widgets/indexer-manager';
|
||||
categories={['Indexer']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={prowlarrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: indexerManagerWidget }]}
|
||||
|
||||
@@ -5,4 +5,5 @@ export const prowlarrIntegration: IntegrationDefinition = {
|
||||
"Prowlarr is an indexer manager for Usenet and BitTorrent, providing a unified interface to manage your indexers.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/prowlarr.svg",
|
||||
path: "../../integrations/prowlarr",
|
||||
data: "Fetches indexer status and health from Prowlarr with test-all-indexers support.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Proxmox is a powerful open-source virtualization platform that all
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={proxmoxIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
|
||||
@@ -5,4 +5,5 @@ export const proxmoxIntegration: IntegrationDefinition = {
|
||||
"Proxmox is a powerful open-source virtualization platform that allows you to run virtual machines and containers.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/proxmox.svg",
|
||||
path: "../../integrations/proxmox",
|
||||
data: "Fetches Proxmox cluster resources including nodes, VMs, containers, and storage information.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "qBittorrent is a free and open-source BitTorrent client."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
categories={['Torrent client']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={qBittorentIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: downloadsWidget }]}
|
||||
|
||||
@@ -4,4 +4,5 @@ export const qBittorentIntegration: IntegrationDefinition = {
|
||||
description: "qBittorrent is a free and open-source BitTorrent client.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/qbittorrent.svg",
|
||||
path: "../../integrations/q-bittorent",
|
||||
data: "Manages and monitors qBittorrent torrents including progress, speeds, and pause/resume/delete actions.",
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: 'Quay'
|
||||
description: "Quay is a container registry for storing and managing container images."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { quayIntegration } from '.';
|
||||
import { releasesWidget } from '@site/docs/widgets/releases';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={quayIntegration}
|
||||
categories={['Container Registry', 'Software']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={quayIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: releasesWidget
|
||||
}]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ["personalAccessToken"],
|
||||
steps: []
|
||||
}]} />
|
||||
@@ -0,0 +1,9 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
|
||||
export const quayIntegration: IntegrationDefinition = {
|
||||
name: "Quay",
|
||||
description: "Quay is a container registry for storing and managing container images.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/quay.png",
|
||||
path: "../../integrations/quay",
|
||||
data: "Fetches container image tags and repository metadata from a Quay.io registry.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Radarr is a movie management tool that automates the process of do
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={radarrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: calendarWidget }]}
|
||||
|
||||
@@ -5,4 +5,5 @@ export const radarrIntegration: IntegrationDefinition = {
|
||||
"Radarr is a movie management tool that automates the process of downloading, sorting, and renaming movies.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/radarr.svg",
|
||||
path: "../../integrations/radarr",
|
||||
data: "Fetches movie release calendar events including in-cinemas, physical, and digital release dates.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "Readarr is a book management tool that automates the process of do
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -18,6 +19,10 @@ import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={readarrIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: calendarWidget }]}
|
||||
|
||||
@@ -5,4 +5,5 @@ export const readarrIntegration: IntegrationDefinition = {
|
||||
"Readarr is a book management tool that automates the process of downloading, sorting, and renaming books.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/readarr.svg",
|
||||
path: "../../integrations/readarr",
|
||||
data: "Fetches book release calendar events from Readarr.",
|
||||
};
|
||||
@@ -4,6 +4,7 @@ description: "SABnzbd is an Open Source Binary Newsreader."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
@@ -19,6 +20,10 @@ import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
categories={['Usenet client']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={sabnzbdIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: downloadsWidget}]}
|
||||
|
||||
@@ -4,4 +4,5 @@ export const sabnzbdIntegration: IntegrationDefinition = {
|
||||
description: "SABnzbd is an Open Source Binary Newsreader.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/sabnzbd.svg",
|
||||
path: "../../integrations/sabnzbd",
|
||||
data: "Manages and monitors SABnzbd usenet downloads including queue, history, and pause/resume/delete actions.",
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: 'Search.ch'
|
||||
description: "Search.ch supports searching for timetables in Switzerland."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationData } from '@site/src/components/integrations/data';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import { searchChIntegration } from '.';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { timetableWidget } from '@site/docs/widgets/timetable';
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={searchChIntegration}
|
||||
categories={['Timetable']}
|
||||
/>
|
||||
|
||||
### Data
|
||||
|
||||
<IntegrationData integration={searchChIntegration} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: timetableWidget }]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
@@ -0,0 +1,8 @@
|
||||
import { IntegrationDefinition } from "@site/src/types";
|
||||
export const searchChIntegration: IntegrationDefinition = {
|
||||
name: "Search.ch",
|
||||
description: "Search.ch supports searching for timetables in Switzerland.",
|
||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/search-ch.png",
|
||||
path: "../../integrations/search-ch",
|
||||
data: "Fetches Swiss public transport station information and departure timetables from search.ch.",
|
||||
};
|
||||
Loaded 100 of 525 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user