summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLuiz Guilherme D'Abruzzo Pereira <[email protected]>2026-02-02 17:52:32 -0300
committerGitHub <[email protected]>2026-02-02 14:52:32 -0600
commita9fca05d8b8f0e87dc9774f6d660fe65831b6da5 (patch)
treee3465e2991dc726be19e2457ce6d8f1655ae64f4
parent824165eb792edfd8600d44aac83e1f6bba2a9e62 (diff)
downloadopencode-a9fca05d8b8f0e87dc9774f6d660fe65831b6da5.tar.gz
opencode-a9fca05d8b8f0e87dc9774f6d660fe65831b6da5.zip
feat(server): add --mdns-domain flag to customize mDNS hostname (#11796)
-rw-r--r--packages/opencode/src/cli/cmd/web.ts2
-rw-r--r--packages/opencode/src/cli/network.ts9
-rw-r--r--packages/opencode/src/config/config.ts1
-rw-r--r--packages/opencode/src/server/mdns.ts5
-rw-r--r--packages/opencode/src/server/server.ts10
5 files changed, 21 insertions, 6 deletions
diff --git a/packages/opencode/src/cli/cmd/web.ts b/packages/opencode/src/cli/cmd/web.ts
index 5fa2bb426..0fe056f21 100644
--- a/packages/opencode/src/cli/cmd/web.ts
+++ b/packages/opencode/src/cli/cmd/web.ts
@@ -63,7 +63,7 @@ export const WebCommand = cmd({
UI.println(
UI.Style.TEXT_INFO_BOLD + " mDNS: ",
UI.Style.TEXT_NORMAL,
- `opencode.local:${server.port}`,
+ `${opts.mdnsDomain}:${server.port}`,
)
}
diff --git a/packages/opencode/src/cli/network.ts b/packages/opencode/src/cli/network.ts
index fe5731d07..dd09e1689 100644
--- a/packages/opencode/src/cli/network.ts
+++ b/packages/opencode/src/cli/network.ts
@@ -17,6 +17,11 @@ const options = {
describe: "enable mDNS service discovery (defaults hostname to 0.0.0.0)",
default: false,
},
+ "mdns-domain": {
+ type: "string" as const,
+ describe: "custom domain name for mDNS service (default: opencode.local)",
+ default: "opencode.local",
+ },
cors: {
type: "string" as const,
array: true,
@@ -36,9 +41,11 @@ export async function resolveNetworkOptions(args: NetworkOptions) {
const portExplicitlySet = process.argv.includes("--port")
const hostnameExplicitlySet = process.argv.includes("--hostname")
const mdnsExplicitlySet = process.argv.includes("--mdns")
+ const mdnsDomainExplicitlySet = process.argv.includes("--mdns-domain")
const corsExplicitlySet = process.argv.includes("--cors")
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
+ const mdnsDomain = mdnsDomainExplicitlySet ? args["mdns-domain"] : (config?.server?.mdnsDomain ?? args["mdns-domain"])
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)
const hostname = hostnameExplicitlySet
? args.hostname
@@ -49,5 +56,5 @@ export async function resolveNetworkOptions(args: NetworkOptions) {
const argsCors = Array.isArray(args.cors) ? args.cors : args.cors ? [args.cors] : []
const cors = [...configCors, ...argsCors]
- return { hostname, port, mdns, cors }
+ return { hostname, port, mdns, mdnsDomain, cors }
}
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index b0164e8aa..54ca94ae4 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -860,6 +860,7 @@ export namespace Config {
port: z.number().int().positive().optional().describe("Port to listen on"),
hostname: z.string().optional().describe("Hostname to listen on"),
mdns: z.boolean().optional().describe("Enable mDNS service discovery"),
+ mdnsDomain: z.string().optional().describe("Custom domain name for mDNS service (default: opencode.local)"),
cors: z.array(z.string()).optional().describe("Additional domains to allow for CORS"),
})
.strict()
diff --git a/packages/opencode/src/server/mdns.ts b/packages/opencode/src/server/mdns.ts
index 953269de4..778afa26a 100644
--- a/packages/opencode/src/server/mdns.ts
+++ b/packages/opencode/src/server/mdns.ts
@@ -7,17 +7,18 @@ export namespace MDNS {
let bonjour: Bonjour | undefined
let currentPort: number | undefined
- export function publish(port: number) {
+ export function publish(port: number, domain?: string) {
if (currentPort === port) return
if (bonjour) unpublish()
try {
+ const host = domain ?? "opencode.local"
const name = `opencode-${port}`
bonjour = new Bonjour()
const service = bonjour.publish({
name,
type: "http",
- host: "opencode.local",
+ host,
port,
txt: { path: "/" },
})
diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts
index f6dd0d122..015553802 100644
--- a/packages/opencode/src/server/server.ts
+++ b/packages/opencode/src/server/server.ts
@@ -563,7 +563,13 @@ export namespace Server {
return result
}
- export function listen(opts: { port: number; hostname: string; mdns?: boolean; cors?: string[] }) {
+ export function listen(opts: {
+ port: number
+ hostname: string
+ mdns?: boolean
+ mdnsDomain?: string
+ cors?: string[]
+ }) {
_corsWhitelist = opts.cors ?? []
const args = {
@@ -591,7 +597,7 @@ export namespace Server {
opts.hostname !== "localhost" &&
opts.hostname !== "::1"
if (shouldPublishMDNS) {
- MDNS.publish(server.port!)
+ MDNS.publish(server.port!, opts.mdnsDomain)
} else if (opts.mdns) {
log.warn("mDNS enabled but hostname is loopback; skipping mDNS publish")
}