Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04d01e3aa0 | ||
|
|
292dfbed8c | ||
|
|
00fad39792 | ||
|
|
778533a62e | ||
|
|
b4fba47a23 | ||
|
|
76ddfceb13 | ||
|
|
2f6b96e5ba | ||
|
|
f1b7a5146a | ||
|
|
05292ae1f5 | ||
|
|
48fc8db2b4 | ||
|
|
018f84f80d | ||
|
|
d58a47b776 |
No files matched your search
@@ -7,8 +7,8 @@ tags:
|
|||||||
- Ping
|
- Ping
|
||||||
---
|
---
|
||||||
|
|
||||||
Apps are the building blocks of your Homarr board.
|
Apps are the building blocks of your Homarr board.
|
||||||
Most of the time they are a simple link to a website, but used on your board they also support a simple ping to check if your service is up.
|
Most of the time they are a simple link to a website, but used on your board they also support a simple ping to check if your service is up.
|
||||||
Apps are used in the bookmark and app widget.
|
Apps are used in the bookmark and app widget.
|
||||||
|
|
||||||
## Create an app
|
## Create an app
|
||||||
@@ -27,7 +27,7 @@ The name must be at least one character long and can be chosen freely.
|
|||||||
|
|
||||||
### Icon URL
|
### Icon URL
|
||||||
|
|
||||||
This is the URL to the icon that will be displayed on the app widget.
|
This is the URL to the icon that will be displayed on the app widget.
|
||||||
You can paste a direct HTTP(S) URL to an image, search the included icon repositories by name, or upload a local file through the upload button. Direct image URLs are used as entered and are not searched in the icon repositories.
|
You can paste a direct HTTP(S) URL to an image, search the included icon repositories by name, or upload a local file through the upload button. Direct image URLs are used as entered and are not searched in the icon repositories.
|
||||||
|
|
||||||

|

|
||||||
@@ -40,11 +40,14 @@ An optional description that can be shown as tooltip on the app widget.
|
|||||||
|
|
||||||
The URL to the website you want to link to. Clicking on the app widget or bookmark will open this URL.
|
The URL to the website you want to link to. Clicking on the app widget or bookmark will open this URL.
|
||||||
|
|
||||||
|
You can also use custom URI schemes such as `vscode://file/path`, `microsoft-edge:https://example.com`, or `myapp://open` to link to local applications or third-party programs. We trust that you know what you are doing — only `javascript:` URIs are blocked for security reasons.
|
||||||
|
|
||||||
### Ping URL
|
### Ping URL
|
||||||
|
|
||||||
When you want to use another url for the simple status check you can set it here.
|
When you want to use another url for the simple status check you can set it here.
|
||||||
This will allow you to set a different URL for the ping than the URL that is opened when clicking on the app widget.
|
This will allow you to set a different URL for the ping than the URL that is opened when clicking on the app widget.
|
||||||
It's useful when you want to ping the service internally for example with a custom ip but open the website externally.
|
It's useful when you want to ping the service internally for example with a custom ip but open the website externally.
|
||||||
|
Note that the ping URL only accepts `http://` and `https://` URLs — custom URI schemes are not supported for pings.
|
||||||
|
|
||||||
## List of apps
|
## List of apps
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ export const appRouter = createTRPCRouter({
|
|||||||
mcp: {
|
mcp: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
description:
|
description:
|
||||||
"Create a new app (bookmark/shortcut to a service). REQUIRED: name (string), iconUrl (icon URL string), href (app URL, http/https or blank). OPTIONAL: description (string or null), pingUrl (URL to check reachability, or empty string)",
|
"Create a new app (bookmark/shortcut to a service). REQUIRED: name (string), iconUrl (icon URL string), href (app URL or custom URI scheme such as vscode://, or blank). OPTIONAL: description (string or null), pingUrl (URL to check reachability, or empty string)",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.mutation(async ({ ctx, input }) => {
|
.mutation(async ({ ctx, input }) => {
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ export type HomarrDocumentationPath =
|
|||||||
| "/docs/tags/variables"
|
| "/docs/tags/variables"
|
||||||
| "/docs/tags/widgets"
|
| "/docs/tags/widgets"
|
||||||
| "/docs/advanced/command-line"
|
| "/docs/advanced/command-line"
|
||||||
|
| "/docs/advanced/command-line/development"
|
||||||
| "/docs/advanced/command-line/fix-usernames"
|
| "/docs/advanced/command-line/fix-usernames"
|
||||||
| "/docs/advanced/command-line/integrations"
|
| "/docs/advanced/command-line/integrations"
|
||||||
| "/docs/advanced/command-line/password-recovery"
|
| "/docs/advanced/command-line/password-recovery"
|
||||||
|
|||||||
@@ -442,7 +442,7 @@ export const integrationDefs = {
|
|||||||
name: "Beszel",
|
name: "Beszel",
|
||||||
secretKinds: [["username", "password"]],
|
secretKinds: [["username", "password"]],
|
||||||
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/beszel.svg",
|
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/beszel.svg",
|
||||||
category: ["healthMonitoring"],
|
category: ["beszel"],
|
||||||
documentationUrl: createDocumentationLink("/docs/integrations/beszel"),
|
documentationUrl: createDocumentationLink("/docs/integrations/beszel"),
|
||||||
defaultPort: 8090,
|
defaultPort: 8090,
|
||||||
},
|
},
|
||||||
@@ -565,6 +565,7 @@ export const integrationCategories = [
|
|||||||
"smartHomeServer",
|
"smartHomeServer",
|
||||||
"indexerManager",
|
"indexerManager",
|
||||||
"healthMonitoring",
|
"healthMonitoring",
|
||||||
|
"beszel",
|
||||||
"search",
|
"search",
|
||||||
"mediaTranscoding",
|
"mediaTranscoding",
|
||||||
"networkController",
|
"networkController",
|
||||||
|
|||||||
@@ -148,6 +148,8 @@ const optionMapping: OptionMapping = {
|
|||||||
},
|
},
|
||||||
mediaServer: {
|
mediaServer: {
|
||||||
showOnlyPlaying: () => undefined,
|
showOnlyPlaying: () => undefined,
|
||||||
|
showBitrate: () => undefined,
|
||||||
|
showLocation: () => undefined,
|
||||||
},
|
},
|
||||||
indexerManager: {
|
indexerManager: {
|
||||||
openIndexerSiteInNewTab: (oldOptions) => oldOptions.openIndexerSiteInNewTab,
|
openIndexerSiteInNewTab: (oldOptions) => oldOptions.openIndexerSiteInNewTab,
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ import { z } from "zod/v4";
|
|||||||
export const appHrefSchema = z
|
export const appHrefSchema = z
|
||||||
.string()
|
.string()
|
||||||
.trim()
|
.trim()
|
||||||
.url()
|
.refine((val) => !/^javascript:/i.test(val), "JavaScript URIs are not permitted")
|
||||||
.regex(/^(?!javascript)[a-zA-Z]*:\/\//i) // javascript: is not allowed, i for case insensitive (so Javascript: is also not allowed)
|
|
||||||
.or(z.literal(""))
|
.or(z.literal(""))
|
||||||
.transform((value) => (value.length === 0 ? null : value))
|
.transform((value) => (value.length === 0 ? null : value))
|
||||||
.nullable();
|
.nullable();
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ const columnTranslationKeyMap = {
|
|||||||
export const { definition, componentLoader } = createWidgetDefinition("dockerContainers", {
|
export const { definition, componentLoader } = createWidgetDefinition("dockerContainers", {
|
||||||
icon: IconBrandDocker,
|
icon: IconBrandDocker,
|
||||||
queryKey: [["docker", "getContainers"]],
|
queryKey: [["docker", "getContainers"]],
|
||||||
|
refetchInterval: 30,
|
||||||
createOptions() {
|
createOptions() {
|
||||||
return optionsBuilder.from(
|
return optionsBuilder.from(
|
||||||
(factory) => ({
|
(factory) => ({
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { optionsBuilder } from "../options";
|
|||||||
|
|
||||||
export const { componentLoader, definition } = createWidgetDefinition("notifications", {
|
export const { componentLoader, definition } = createWidgetDefinition("notifications", {
|
||||||
icon: IconMessage,
|
icon: IconMessage,
|
||||||
refetchInterval: null,
|
|
||||||
createOptions() {
|
createOptions() {
|
||||||
return optionsBuilder.from((factory) => ({
|
return optionsBuilder.from((factory) => ({
|
||||||
hideLogos: factory.switch({ defaultValue: false }),
|
hideLogos: factory.switch({ defaultValue: false }),
|
||||||
|
|||||||
Generated
+995
-1057
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -37,9 +37,9 @@ catalog:
|
|||||||
"@octokit/auth-app": ^8.2.0
|
"@octokit/auth-app": ^8.2.0
|
||||||
"@paralleldrive/cuid2": ^3.3.0
|
"@paralleldrive/cuid2": ^3.3.0
|
||||||
"@playwright/test": ^1.61.1
|
"@playwright/test": ^1.61.1
|
||||||
"@semantic-release/changelog": ^6.0.3
|
"@semantic-release/changelog": ^7.0.0
|
||||||
"@semantic-release/commit-analyzer": ^13.0.1
|
"@semantic-release/commit-analyzer": ^13.0.1
|
||||||
"@semantic-release/git": ^10.0.1
|
"@semantic-release/git": ^11.0.1
|
||||||
"@semantic-release/github": ^12.0.9
|
"@semantic-release/github": ^12.0.9
|
||||||
"@semantic-release/npm": ^13.1.5
|
"@semantic-release/npm": ^13.1.5
|
||||||
"@semantic-release/release-notes-generator": ^14.1.1
|
"@semantic-release/release-notes-generator": ^14.1.1
|
||||||
|
|||||||
Reference in new issue
Block a user