git: a73cae2fd894 - main - www/code-server: Add new port
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 21 Jun 2026 18:09:41 UTC
The branch main has been updated by joneum:
URL: https://cgit.FreeBSD.org/ports/commit/?id=a73cae2fd8948279ab7467aa82d34fdb8cd10833
commit a73cae2fd8948279ab7467aa82d34fdb8cd10833
Author: Jochen Neumeister <joneum@FreeBSD.org>
AuthorDate: 2026-06-21 17:58:38 +0000
Commit: Jochen Neumeister <joneum@FreeBSD.org>
CommitDate: 2026-06-21 18:07:06 +0000
www/code-server: Add new port
code-server enables running Visual Studio Code on a remote system and
accessing it through a web browser. It provides a familiar development
environment without requiring a local VS Code installation.
WWW: https://github.com/coder/code-server
Sponsored by: Netzkommune GmbH
---
www/Makefile | 1 +
www/code-server/Makefile | 55 +
www/code-server/Makefile.build | 85 +
www/code-server/Makefile.install | 17 +
www/code-server/Makefile.vscode | 54 +
www/code-server/distinfo | 11 +
www/code-server/files/README.md | 137 +
www/code-server/files/code-server-wrapper.in | 2 +
www/code-server/files/code-server.in | 75 +
.../files/patch-ci_build_build-vscode.sh | 72 +
.../patch-disable-agenthost-sandbox-forwarder | 12 +
...64_node__modules__vscode_deviceid_dist_index.js | 13 +
..._node__modules__vscode_deviceid_dist_storage.js | 11 +
.../patch-lib_vscode_build_gulpfile.extensions.ts | 11 +
.../patch-lib_vscode_build_gulpfile.vscode.ts | 16 +
.../files/patch-lib_vscode_build_lib_extensions.ts | 20 +
.../files/patch-lib_vscode_build_lib_getVersion.ts | 11 +
...extensions_microsoft-authentication_esbuild.mts | 10 +
...de_node__modules__vscode_deviceid_dist_index.js | 12 +
..._node__modules__vscode_deviceid_dist_storage.js | 11 +
...b_vscode_node__modules_node-pty_src_unix_pty.cc | 11 +
.../files/patch-lib_vscode_product.json | 28 +
...rc_vs_platform_environment_node_userDataPath.ts | 10 +
...ode_src_vs_platform_sign_browser_signService.ts | 23 +
www/code-server/pkg-descr | 5 +
www/code-server/pkg-message | 23 +
www/code-server/pkg-plist | 13704 +++++++++++++++++++
27 files changed, 14440 insertions(+)
diff --git a/www/Makefile b/www/Makefile
index 38cc7a3f0a56..5ea848b5d776 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -124,6 +124,7 @@
SUBDIR += closure-compiler
SUBDIR += cntlm
SUBDIR += cobalt
+ SUBDIR += code-server
SUBDIR += codeberg-pages-server
SUBDIR += codeigniter
SUBDIR += colly
diff --git a/www/code-server/Makefile b/www/code-server/Makefile
new file mode 100644
index 000000000000..3634aeac4ab3
--- /dev/null
+++ b/www/code-server/Makefile
@@ -0,0 +1,55 @@
+PORTNAME= code-server
+DISTVERSION= 4.123.0
+CATEGORIES= www
+MASTER_SITES= https://github.com/joneum/FreeBSD-CodeServer/releases/download/code-server-${DISTVERSION}/:code_server
+DISTFILES= vscode-node-modules-${VSCODE_VERSION}${EXTRACT_SUFX}:code_server \
+ vscode-reh-web-linux-x64-${DISTVERSION}${EXTRACT_SUFX}:code_server
+.if !defined(BOOTSTRAP_NODE_MODULES)
+DISTFILES+= code-server-node-modules-${DISTVERSION}${EXTRACT_SUFX}:code_server
+.endif
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Run VS Code on a remote server and access it through a browser
+WWW= https://github.com/coder/code-server
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+EXTRACT_DEPENDS= jq:textproc/jq
+BUILD_DEPENDS= npm-node22>0:www/npm-node22 \
+ bash:shells/bash \
+ pkgconf:devel/pkgconf
+LIB_DEPENDS= libinotify.so:devel/libinotify \
+ libsecret-1.so:security/libsecret \
+ libuv.so:devel/libuv \
+ libxkbfile.so:x11/libxkbfile \
+ libX11.so:x11/libX11
+RUN_DEPENDS= node:www/node22
+
+USES= nodejs:22 perl5 pkgconfig python:build ssl
+
+USE_GITHUB= yes
+GH_ACCOUNT= coder
+GH_PROJECT= code-server
+GH_TAGNAME= v${DISTVERSION}
+GH_TUPLE= microsoft:vscode:${VSCODE_VERSION}:vscode
+
+USE_RC_SUBR= code-server
+
+SUB_FILES= code-server-wrapper
+
+OPTIONS_DEFINE= DOCS
+PORTDOCS= README.md
+
+NO_CCACHE= yes
+
+VSCODE_VERSION= 1.122.1
+
+MAKE_ENV+= NODE_OPTIONS=--max-old-space-size=6144 \
+ ESBUILD_WORKER_THREADS=1
+
+.include "${.CURDIR}/Makefile.vscode"
+.include "${.CURDIR}/Makefile.build"
+.include "${.CURDIR}/Makefile.install"
+
+.include <bsd.port.mk>
diff --git a/www/code-server/Makefile.build b/www/code-server/Makefile.build
new file mode 100644
index 000000000000..17dd48bc8474
--- /dev/null
+++ b/www/code-server/Makefile.build
@@ -0,0 +1,85 @@
+post-extract:
+ ${RM} -r ${WRKSRC}/lib/vscode
+ ${MV} ${WRKDIR}/vscode-${VSCODE_VERSION} ${WRKSRC}/lib/vscode
+.if !defined(BOOTSTRAP_NODE_MODULES)
+ ${TAR} -xzf ${DISTDIR}/code-server-node-modules-${DISTVERSION}${EXTRACT_SUFX} \
+ -C ${WRKSRC}
+.endif
+ ${TAR} -xzf ${DISTDIR}/vscode-reh-web-linux-x64-${DISTVERSION}${EXTRACT_SUFX} \
+ -C ${WRKSRC}
+.for dir in ${VSCODE_NODE_MODULES}
+ ${MKDIR} ${WRKSRC}/lib/vscode/${dir}
+ ${TAR} -xzf ${WRKDIR}/vscode-${dir:S|/|_|g}-node-modules${EXTRACT_SUFX} \
+ -C ${WRKSRC}/lib/vscode/${dir}
+.endfor
+
+post-patch:
+ cd ${WRKSRC} && while read patchfile; do \
+ ${PATCH} -p1 < ${WRKSRC}/patches/$${patchfile}; \
+ done < ${WRKSRC}/patches/series
+ ${CP} ${WRKSRC}/lib/vscode/build/.moduleignore.linux \
+ ${WRKSRC}/lib/vscode/build/.moduleignore.freebsd
+ ${REINPLACE_CMD} -e '/"typeRoots": \[/,+2d' \
+ ${WRKSRC}/lib/vscode/extensions/configuration-editing/tsconfig.json
+ ${LOCALBASE}/bin/jq \
+ '.version = "${DISTVERSION}" | .commit = "${DISTVERSION}"' \
+ ${WRKSRC}/package.json > ${WRKSRC}/package.json.tmp
+ ${MV} ${WRKSRC}/package.json.tmp ${WRKSRC}/package.json
+
+do-build:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ npm run build
+ cd ${WRKSRC}/lib/vscode/node_modules/node-pty && \
+ ${SETENV} ${MAKE_ENV} PYTHON=${PYTHON_CMD} \
+ node ${LOCALBASE}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js \
+ rebuild --nodedir=${LOCALBASE}
+ ${MKDIR} ${WRKSRC}/lib/vscode/node_modules/node-pty/prebuilds/freebsd-x64
+ ${CP} ${WRKSRC}/lib/vscode/node_modules/node-pty/build/Release/pty.node \
+ ${WRKSRC}/lib/vscode/node_modules/node-pty/prebuilds/freebsd-x64/pty.node
+ cd ${WRKSRC}/lib/vscode/node_modules/@vscode/spdlog && \
+ ${SETENV} ${MAKE_ENV} PYTHON=${PYTHON_CMD} \
+ node ${LOCALBASE}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js \
+ rebuild --nodedir=${LOCALBASE}
+ cd ${WRKSRC}/lib/vscode/node_modules/@vscode/native-watchdog && \
+ ${SETENV} ${MAKE_ENV} PYTHON=${PYTHON_CMD} \
+ CXXFLAGS="${CXXFLAGS} -I${LOCALBASE}/include" \
+ node ${LOCALBASE}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js \
+ rebuild --nodedir=${LOCALBASE}
+ cd ${WRKSRC}/lib/vscode && \
+ VSCODE_NODE_VERSION=$$(${AWK} \
+ '/node-v[0-9.]+-linux-x64\.tar\.gz/ { \
+ sub(/^.*node-v/, "", $$2); \
+ sub(/-linux-x64\.tar\.gz$$/, "", $$2); \
+ print $$2; \
+ exit \
+ }' build/checksums/nodejs.txt) && \
+ ${MKDIR} .build/node/v$${VSCODE_NODE_VERSION}/linux-x64 && \
+ ${CP} ${LOCALBASE}/bin/node \
+ .build/node/v$${VSCODE_NODE_VERSION}/linux-x64/node
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} VERSION=${DISTVERSION} \
+ npm run build:vscode
+ ${PERL} -0pi \
+ -e 's#process\.platform !== "linux"\) \{#process.platform !== "linux" \&\&\n process.platform !== "freebsd") {#' \
+ ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/index.js
+ ${PERL} -0pi \
+ -e 's#process\.platform === "linux"#process.platform === "linux" || process.platform === "freebsd"#' \
+ ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/storage.js
+ ${MKDIR} ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/node-pty/prebuilds/freebsd-x64
+ ${CP} ${WRKSRC}/lib/vscode/node_modules/node-pty/build/Release/pty.node \
+ ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/node-pty/prebuilds/freebsd-x64/pty.node
+ ${MKDIR} ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/spdlog/build/Release
+ ${CP} ${WRKSRC}/lib/vscode/node_modules/@vscode/spdlog/build/Release/spdlog.node \
+ ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/spdlog/build/Release/spdlog.node
+ ${MKDIR} ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/native-watchdog/build/Release
+ ${CP} ${WRKSRC}/lib/vscode/node_modules/@vscode/native-watchdog/build/Release/watchdog.node \
+ ${WRKSRC}/lib/vscode-reh-web-linux-x64/node_modules/@vscode/native-watchdog/build/Release/watchdog.node
+ ${RM} ${WRKSRC}/lib/vscode-reh-web-linux-x64/node
+
+make-node-modules-archive:
+ ${MAKE} BOOTSTRAP_NODE_MODULES=yes clean extract
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ npm ci --ignore-scripts --no-progress --no-audit \
+ --no-fund --no-update-notifier
+ cd ${WRKSRC} && ${TAR} -czf \
+ ${WRKDIR}/code-server-node-modules-${DISTVERSION}${EXTRACT_SUFX} \
+ node_modules
diff --git a/www/code-server/Makefile.install b/www/code-server/Makefile.install
new file mode 100644
index 000000000000..aae9061c5ebb
--- /dev/null
+++ b/www/code-server/Makefile.install
@@ -0,0 +1,17 @@
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ cd ${WRKSRC} && ${COPYTREE_SHARE} "out node_modules package.json src" \
+ ${STAGEDIR}${DATADIR}
+ ${MKDIR} ${STAGEDIR}${DATADIR}/lib/vscode
+ cd ${WRKSRC}/lib/vscode-reh-web-linux-x64 && ${COPYTREE_SHARE} "." \
+ ${STAGEDIR}${DATADIR}/lib/vscode
+ ${INSTALL_SCRIPT} ${WRKDIR}/code-server-wrapper \
+ ${STAGEDIR}${PREFIX}/bin/code-server
+ ${CHMOD} 755 ${STAGEDIR}${DATADIR}/lib/vscode/bin/code-server-oss
+ ${CHMOD} 755 ${STAGEDIR}${DATADIR}/lib/vscode/bin/helpers/*.sh
+ ${CHMOD} 755 ${STAGEDIR}${DATADIR}/lib/vscode/bin/remote-cli/code-server
+
+do-install-DOCS-on:
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${FILESDIR}/README.md \
+ ${STAGEDIR}${DOCSDIR}
diff --git a/www/code-server/Makefile.vscode b/www/code-server/Makefile.vscode
new file mode 100644
index 000000000000..c53eb37e59fa
--- /dev/null
+++ b/www/code-server/Makefile.vscode
@@ -0,0 +1,54 @@
+VSCODE_NODE_MODULES= . \
+ .vscode/extensions/vscode-pr-pinger \
+ .vscode/extensions/vscode-selfhost-import-aid \
+ .vscode/extensions/vscode-selfhost-test-provider \
+ build \
+ build/rspack \
+ build/vite \
+ extensions \
+ extensions/configuration-editing \
+ extensions/copilot \
+ extensions/css-language-features \
+ extensions/css-language-features/server \
+ extensions/debug-auto-launch \
+ extensions/debug-server-ready \
+ extensions/emmet \
+ extensions/extension-editing \
+ extensions/git \
+ extensions/git-base \
+ extensions/github \
+ extensions/github-authentication \
+ extensions/grunt \
+ extensions/gulp \
+ extensions/html-language-features \
+ extensions/html-language-features/server \
+ extensions/ipynb \
+ extensions/jake \
+ extensions/json-language-features \
+ extensions/json-language-features/server \
+ extensions/markdown-language-features \
+ extensions/markdown-math \
+ extensions/media-preview \
+ extensions/merge-conflict \
+ extensions/mermaid-markdown-features \
+ extensions/microsoft-authentication \
+ extensions/notebook-renderers \
+ extensions/npm \
+ extensions/php-language-features \
+ extensions/references-view \
+ extensions/search-result \
+ extensions/simple-browser \
+ extensions/terminal-suggest \
+ extensions/tunnel-forwarding \
+ extensions/typescript-language-features \
+ extensions/vscode-api-tests \
+ extensions/vscode-colorize-perf-tests \
+ extensions/vscode-colorize-tests \
+ extensions/vscode-test-resolver \
+ remote \
+ remote/web \
+ test/automation \
+ test/integration/browser \
+ test/mcp \
+ test/monaco \
+ test/smoke
diff --git a/www/code-server/distinfo b/www/code-server/distinfo
new file mode 100644
index 000000000000..aa3ddf7e1cec
--- /dev/null
+++ b/www/code-server/distinfo
@@ -0,0 +1,11 @@
+TIMESTAMP = 1781371123
+SHA256 (vscode-node-modules-1.122.1.tar.gz) = 808d60c65ae2c01ed2c5fdf7fb4917c6e106f67d519c16626c8061fbb99fe2d7
+SIZE (vscode-node-modules-1.122.1.tar.gz) = 1122690861
+SHA256 (vscode-reh-web-linux-x64-4.123.0.tar.gz) = ae0a305471fcfb552178f950f56f64a91afb56b7a5932315a013cb805cdca654
+SIZE (vscode-reh-web-linux-x64-4.123.0.tar.gz) = 150548740
+SHA256 (code-server-node-modules-4.123.0.tar.gz) = c2e136a59272086708e5be58784926335adc2ec42f7afb79e1f5b425c11198da
+SIZE (code-server-node-modules-4.123.0.tar.gz) = 18703344
+SHA256 (coder-code-server-4.123.0-v4.123.0_GH0.tar.gz) = 72953516411cc96054f78f386c29adf537ae93c3cc84ac53e6a84cf0609c8124
+SIZE (coder-code-server-4.123.0-v4.123.0_GH0.tar.gz) = 779115
+SHA256 (microsoft-vscode-1.122.1_GH0.tar.gz) = d7dc639c5c10aafa41b735c48d4b9347a19afb03ef6af3277a6d6af8b711aa7e
+SIZE (microsoft-vscode-1.122.1_GH0.tar.gz) = 42706904
diff --git a/www/code-server/files/README.md b/www/code-server/files/README.md
new file mode 100644
index 000000000000..a91f0e348267
--- /dev/null
+++ b/www/code-server/files/README.md
@@ -0,0 +1,137 @@
+code-server on FreeBSD
+======================
+
+Overview
+--------
+
+code-server allows Visual Studio Code to run on a remote FreeBSD system and
+be accessed through a web browser.
+
+After installation, code-server can be started either manually or through
+the provided rc.d service.
+
+
+Service Management
+------------------
+
+Enable automatic startup at boot:
+
+ sysrc code_server_enable=YES
+
+Start the service:
+
+ service code-server start
+
+Stop the service:
+
+ service code-server stop
+
+Restart the service:
+
+ service code-server restart
+
+Check service status:
+
+ service code-server status
+
+
+Accessing code-server
+---------------------
+
+By default, code-server listens on TCP port 8080.
+
+Open the following URL in a web browser:
+
+ http://<server>:8080/
+
+Replace <server> with the hostname or IP address of your FreeBSD system.
+
+If a firewall is enabled, ensure that the configured port is reachable from
+the client system.
+
+
+Configuration
+-------------
+
+When code-server is started manually, it uses the configuration file of the
+current user, usually:
+
+ ~/.config/code-server/config.yaml
+
+When code-server is started through the rc.d service, the configuration file
+is created and used at:
+
+ /usr/local/etc/code-server/config.yaml
+
+The configuration file contains settings such as:
+
+ - listen address
+ - TCP port
+ - authentication settings
+ - password
+
+Example:
+
+ bind-addr: 0.0.0.0:8080
+ auth: password
+ password: my-secret-password
+
+
+Password
+--------
+
+During the first startup, code-server generates a configuration file and a
+random password.
+
+When running as a service, the password can be displayed using:
+
+ grep '^password:' /usr/local/etc/code-server/config.yaml
+
+When started manually, the password can be displayed using:
+
+ grep '^password:' ~/.config/code-server/config.yaml
+
+
+Changing the Listening Address
+------------------------------
+
+The listening address and port can be changed in the configuration file.
+
+Example:
+
+ bind-addr: 0.0.0.0:8443
+
+After changing the configuration, restart the service:
+
+ service code-server restart
+
+
+Extensions
+
+----------
+
+code-server supports many Visual Studio Code extensions.
+
+Extension availability and compatibility depend on the individual extension,
+the extension marketplace used, and whether the extension relies on features
+that are not available in code-server.
+
+Not all Visual Studio Code extensions are compatible with code-server.
+
+For information about extension compatibility and limitations, see:
+
+ https://coder.com/docs/code-server/FAQ
+ https://code.visualstudio.com/api/advanced-topics/remote-extensions
+
+
+Resource Requirements
+---------------------
+
+Building code-server requires substantially more memory than typical FreeBSD
+ports.
+
+Systems with insufficient RAM or swap may fail during the build process.
+
+Running code-server generally requires significantly less memory than building
+it, but available RAM should still be considered when hosting multiple users
+or large development workloads.
diff --git a/www/code-server/files/code-server-wrapper.in b/www/code-server/files/code-server-wrapper.in
new file mode 100644
index 000000000000..7f1090044744
--- /dev/null
+++ b/www/code-server/files/code-server-wrapper.in
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec %%LOCALBASE%%/bin/node %%DATADIR%%/out/node/entry.js "$@"
diff --git a/www/code-server/files/code-server.in b/www/code-server/files/code-server.in
new file mode 100644
index 000000000000..2b146f4128b9
--- /dev/null
+++ b/www/code-server/files/code-server.in
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+# PROVIDE: code_server
+# REQUIRE: LOGIN NETWORKING DAEMON
+# KEYWORD: shutdown
+#
+# Add the following line to /etc/rc.conf to enable code-server:
+#
+# code_server_enable="YES"
+#
+# Optional settings:
+#
+# code_server_run_user="nobody"
+# code_server_run_group="nobody"
+# code_server_config="%%PREFIX%%/etc/code-server/config.yaml"
+# code_server_host="127.0.0.1"
+# code_server_port="8080"
+# code_server_auth="password"
+# code_server_user_data_dir="/var/db/code-server/user-data"
+# code_server_extensions_dir="/var/db/code-server/extensions"
+# code_server_extra_args=""
+
+. /etc/rc.subr
+
+name="code_server"
+rcvar="code_server_enable"
+
+load_rc_config "${name}"
+
+: ${code_server_enable:="NO"}
+: ${code_server_run_user:="nobody"}
+: ${code_server_run_group:="nobody"}
+: ${code_server_config:="%%PREFIX%%/etc/code-server/config.yaml"}
+: ${code_server_host:="127.0.0.1"}
+: ${code_server_port:="8080"}
+: ${code_server_auth:="password"}
+: ${code_server_user_data_dir:="/var/db/code-server/user-data"}
+: ${code_server_extensions_dir:="/var/db/code-server/extensions"}
+: ${code_server_extra_args:=""}
+
+pidfile="/var/run/code-server/${name}.pid"
+
+command="/usr/sbin/daemon"
+procname="%%LOCALBASE%%/bin/node"
+
+command_args="-f \
+-p ${pidfile} \
+-u ${code_server_run_user} \
+/usr/bin/env \
+HOME=/var/db/code-server \
+XDG_DATA_HOME=${code_server_user_data_dir} \
+XDG_CONFIG_HOME=$(dirname ${code_server_config}) \
+XDG_CACHE_HOME=/var/db/code-server/cache \
+%%PREFIX%%/bin/code-server \
+--config ${code_server_config} \
+--host ${code_server_host} \
+--port ${code_server_port} \
+--auth ${code_server_auth} \
+--user-data-dir ${code_server_user_data_dir} \
+--extensions-dir ${code_server_extensions_dir} \
+${code_server_extra_args}"
+
+start_precmd="${name}_prestart"
+
+code_server_prestart()
+{
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 /var/run/code-server
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 /var/db/code-server
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 /var/db/code-server/cache
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 ${code_server_user_data_dir}
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 ${code_server_extensions_dir}
+ install -d -o ${code_server_run_user} -g ${code_server_run_group} -m 0750 "$(dirname "${code_server_config}")"
+}
+
+run_rc_command "$1"
diff --git a/www/code-server/files/patch-ci_build_build-vscode.sh b/www/code-server/files/patch-ci_build_build-vscode.sh
new file mode 100644
index 000000000000..e2bfed590ee5
--- /dev/null
+++ b/www/code-server/files/patch-ci_build_build-vscode.sh
@@ -0,0 +1,72 @@
+--- ci/build/build-vscode.sh.orig
++++ ci/build/build-vscode.sh
+@@ -7,7 +7,7 @@
+ MINIFY=${MINIFY-true}
+
+ fix-bin-script() {
+- local script="lib/vscode-reh-web-$VSCODE_TARGET/bin/$1"
++ local script="lib/vscode-reh-web-$GULP_VSCODE_TARGET/bin/$1"
+ sed -i.bak "s/@@VERSION@@/$(vscode_version)/g" "$script"
+ sed -i.bak "s/@@COMMIT@@/$BUILD_SOURCEVERSION/g" "$script"
+ sed -i.bak "s/@@APPNAME@@/code-server/g" "$script"
+@@ -30,7 +30,7 @@
+ }
+
+ copy-bin-script() {
+- cp "lib/vscode/resources/server/bin/$1" "lib/vscode-reh-web-$VSCODE_TARGET/bin/$1"
++ cp "lib/vscode/resources/server/bin/$1" "lib/vscode-reh-web-$GULP_VSCODE_TARGET/bin/$1"
+ fix-bin-script "$1"
+ }
+
+@@ -47,7 +47,7 @@
+ # not update when only our patch files change, and that will cause caching
+ # issues where the browser keeps using outdated code.
+ export BUILD_SOURCEVERSION
+- BUILD_SOURCEVERSION=$(git rev-parse HEAD)
++ BUILD_SOURCEVERSION="${BUILD_SOURCEVERSION:-4.123.0}"
+
+ pushd lib/vscode
+
+@@ -64,13 +64,13 @@
+ #
+ # This needs to be done before building as Code will read this file and embed
+ # it into the client-side code.
+- git checkout product.json # Reset in case the script exited early.
+ cp product.json product.original.json # Since jq has no inline edit.
+ jq --slurp '.[0] * .[1]' product.original.json <(
+ cat << EOF
+ {
+ "enableTelemetry": true,
+ "quality": "stable",
++ "commit": "$BUILD_SOURCEVERSION",
+ "codeServerVersion": "$VERSION",
+ "nameShort": "code-server",
+ "nameLong": "code-server",
+@@ -111,16 +111,24 @@
+ VSCODE_QUALITY=stable npm run gulp compile-copilot-extension-full-build
+
+ npm run gulp core-ci
+- npm run gulp "vscode-reh-web-$VSCODE_TARGET${MINIFY:+-min}-ci"
++ GULP_VSCODE_TARGET="$VSCODE_TARGET"
++ if [[ "$GULP_VSCODE_TARGET" == freebsd-* ]]; then
++ GULP_VSCODE_TARGET="linux-${GULP_VSCODE_TARGET#freebsd-}"
++ fi
++ npm run gulp "vscode-reh-web-$GULP_VSCODE_TARGET${MINIFY:+-min}-ci"
+
++ pushd "../vscode-reh-web-$GULP_VSCODE_TARGET"
++ cp product.json product.original.json
++ jq --arg commit "$BUILD_SOURCEVERSION" '.commit = $commit' product.original.json > product.json
++ popd
++
+ # Reset so if you develop after building you will not be stuck with the wrong
+ # commit (the dev client will use `oss-dev` but the dev server will still use
+ # product.json which will have `stable-$commit`).
+- git checkout product.json
+
+ popd
+
+- pushd "lib/vscode-reh-web-$VSCODE_TARGET"
++ pushd "lib/vscode-reh-web-$GULP_VSCODE_TARGET"
+ # Make sure Code took the version we set in the environment variable. Not
+ # having a version will break display languages.
+ if ! jq -e .commit product.json; then
diff --git a/www/code-server/files/patch-disable-agenthost-sandbox-forwarder b/www/code-server/files/patch-disable-agenthost-sandbox-forwarder
new file mode 100644
index 000000000000..12e9e4f84b6e
--- /dev/null
+++ b/www/code-server/files/patch-disable-agenthost-sandbox-forwarder
@@ -0,0 +1,12 @@
+--- lib/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts.orig
++++ lib/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts
+@@ -193,7 +193,8 @@
+ }
+ }
+ registerWorkbenchContribution2(ChatAgentToolsContribution.ID, ChatAgentToolsContribution, WorkbenchPhase.AfterRestored);
+-registerWorkbenchContribution2(AgentHostSandboxForwarder.ID, AgentHostSandboxForwarder, WorkbenchPhase.AfterRestored);
++// Disabled for code-server web runtime: agent host is not available.
++// registerWorkbenchContribution2(AgentHostSandboxForwarder.ID, AgentHostSandboxForwarder, WorkbenchPhase.AfterRestored);
+
+ // #endregion Contributions
+
diff --git a/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_index.js b/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_index.js
new file mode 100644
index 000000000000..086f08aa120f
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_index.js
@@ -0,0 +1,13 @@
+--- lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/index.js.orig
++++ lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/index.js
+@@ -20,7 +20,8 @@
+ Object.defineProperty(exports, "__esModule", { value: true });
+ if (process.platform !== "win32" &&
+ process.platform !== "darwin" &&
+- process.platform !== "linux") {
++ process.platform !== "linux" &&
++ process.platform !== "freebsd") {
+ throw new Error("Unsupported platform");
+ }
+ __exportStar(require("./devdeviceid.js"), exports);
+\ No newline at end of file
diff --git a/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_storage.js b/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_storage.js
new file mode 100644
index 000000000000..5ba223054365
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode-reh-web-linux-x64_node__modules__vscode_deviceid_dist_storage.js
@@ -0,0 +1,11 @@
+--- lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/storage.js.orig
++++ lib/vscode-reh-web-linux-x64/node_modules/@vscode/deviceid/dist/storage.js
+@@ -42,7 +42,7 @@
+ if (process.platform === "darwin") {
+ folder = path.join(process.env.HOME, "Library", "Application Support");
+ }
+- else if (process.platform === "linux") {
++ else if (process.platform === "linux" || process.platform === "freebsd") {
+ folder =
+ process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME, ".cache");
+ }
diff --git a/www/code-server/files/patch-lib_vscode_build_gulpfile.extensions.ts b/www/code-server/files/patch-lib_vscode_build_gulpfile.extensions.ts
new file mode 100644
index 000000000000..cf50531b5db1
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_build_gulpfile.extensions.ts
@@ -0,0 +1,11 @@
+--- lib/vscode/build/gulpfile.extensions.ts.orig
++++ lib/vscode/build/gulpfile.extensions.ts
+@@ -264,7 +264,7 @@
+ /**
+ * brings in the marketplace extensions for the build
+ */
+-const bundleMarketplaceExtensionsBuildTask = task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build')));
++const bundleMarketplaceExtensionsBuildTask = task.define('bundle-marketplace-extensions-build', () => process.platform === 'freebsd' ? es.readArray([]) : ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build')));
+
+ /**
+ * Compiles the non-native extensions for the build
diff --git a/www/code-server/files/patch-lib_vscode_build_gulpfile.vscode.ts b/www/code-server/files/patch-lib_vscode_build_gulpfile.vscode.ts
new file mode 100644
index 000000000000..68a5dfd794ce
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_build_gulpfile.vscode.ts
@@ -0,0 +1,16 @@
+--- lib/vscode/build/gulpfile.vscode.ts.orig
++++ lib/vscode/build/gulpfile.vscode.ts
+@@ -188,11 +188,11 @@
+ compileExtensionMediaBuildTask,
+ writeISODate('out-build'),
+ // Type-check with tsgo (no emit)
+- task.define('tsgo-typecheck', () => spawnTsgo(path.join(root, 'src', 'tsconfig.json'), { taskName: 'tsgo-typecheck', noEmit: true })),
++ task.define('tsgo-typecheck', () => process.platform === 'freebsd' ? Promise.resolve() : spawnTsgo(path.join(root, 'src', 'tsconfig.json'), { taskName: 'tsgo-typecheck', noEmit: true })),
+ // Transpile individual files to out-build first (for unit tests)
+ task.define('esbuild-out-build', () => runEsbuildTranspile('out-build', false)),
+ // Then bundle for shipping (bundles also write NLS files to out-build)
+- task.parallel(
++ (process.platform === 'freebsd' ? task.series : task.parallel)(
+ task.define('esbuild-vscode-min', () => runEsbuildBundle('out-vscode-min', true, true, 'desktop', `${sourceMappingURLBase}/core`)),
+ task.define('esbuild-vscode-reh-min', () => runEsbuildBundle('out-vscode-reh-min', true, true, 'server', `${sourceMappingURLBase}/core`)),
+ task.define('esbuild-vscode-reh-web-min', () => runEsbuildBundle('out-vscode-reh-web-min', true, true, 'server-web', `${sourceMappingURLBase}/core`)),
diff --git a/www/code-server/files/patch-lib_vscode_build_lib_extensions.ts b/www/code-server/files/patch-lib_vscode_build_lib_extensions.ts
new file mode 100644
index 000000000000..9c6b6a1fa8c3
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_build_lib_extensions.ts
@@ -0,0 +1,20 @@
+--- lib/vscode/build/lib/extensions.ts.orig
++++ lib/vscode/build/lib/extensions.ts
+@@ -89,7 +89,7 @@
+ ? es.merge(
+ fromLocalEsbuild(extensionPath, esbuildConfigFileName),
+ // Standard esbuild extensions need a separate type check step
+- ...getBuildRootsForExtension(extensionPath).map(root => typeCheckExtensionStream(root, forWeb)),
++ ...(process.platform === 'freebsd' ? [] : getBuildRootsForExtension(extensionPath).map(root => typeCheckExtensionStream(root, forWeb))),
+ )
+ // Extensions with their own build system (e.g. .esbuild.mts) handle type checking internally
+ : fromLocalEsbuild(extensionPath, esbuildConfigFileName);
+@@ -745,7 +745,7 @@
+ outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(script)) : undefined
+ })));
+
+- const typeCheckTasks = esbuildMediaScripts.map(({ tsconfig }) => {
++ const typeCheckTasks = process.platform === 'freebsd' ? [] : esbuildMediaScripts.map(({ tsconfig }) => {
+ const tsconfigPath = path.join(extensionsPath, tsconfig);
+ const config = { taskName: 'typechecking extension media (tsgo)', noEmit: true };
+ if (!isWatch) {
diff --git a/www/code-server/files/patch-lib_vscode_build_lib_getVersion.ts b/www/code-server/files/patch-lib_vscode_build_lib_getVersion.ts
new file mode 100644
index 000000000000..de402af82102
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_build_lib_getVersion.ts
@@ -0,0 +1,11 @@
+--- lib/vscode/build/lib/getVersion.ts.orig
++++ lib/vscode/build/lib/getVersion.ts
+@@ -8,7 +8,7 @@
+ export function getVersion(root: string): string | undefined {
+ let version = process.env['BUILD_SOURCEVERSION'];
+
+- if (!version || !/^[0-9a-f]{40}$/i.test(version.trim())) {
++ if (!version || (!/^[0-9a-f]{40}$/i.test(version.trim()) && !/^[0-9]+(\.[0-9]+){1,3}$/i.test(version.trim()))) {
+ version = git.getVersion(root);
+ }
+
diff --git a/www/code-server/files/patch-lib_vscode_extensions_microsoft-authentication_esbuild.mts b/www/code-server/files/patch-lib_vscode_extensions_microsoft-authentication_esbuild.mts
new file mode 100644
index 000000000000..2a5645348a13
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_extensions_microsoft-authentication_esbuild.mts
@@ -0,0 +1,10 @@
+--- lib/vscode/extensions/microsoft-authentication/esbuild.mts.orig
++++ lib/vscode/extensions/microsoft-authentication/esbuild.mts
+@@ -21,6 +21,7 @@
+ case 'win32': platformFolder = 'windows'; break;
+ case 'darwin': platformFolder = 'macos'; break;
+ case 'linux': platformFolder = 'linux'; break;
++ case 'freebsd': platformFolder = 'linux'; break;
+ default: throw new Error(`Unsupported platform: ${process.platform}`);
+ }
+
diff --git a/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_index.js b/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_index.js
new file mode 100644
index 000000000000..9ab21611d640
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_index.js
@@ -0,0 +1,12 @@
+--- lib/vscode/node_modules/@vscode/deviceid/dist/index.js.orig
++++ lib/vscode/node_modules/@vscode/deviceid/dist/index.js
+@@ -19,7 +19,8 @@
+ Object.defineProperty(exports, "__esModule", { value: true });
+ if (process.platform !== "win32" &&
+ process.platform !== "darwin" &&
+- process.platform !== "linux") {
++ process.platform !== "linux" &&
++ process.platform !== "freebsd") {
+ throw new Error("Unsupported platform");
+ }
+ __exportStar(require("./devdeviceid.js"), exports);
diff --git a/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_storage.js b/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_storage.js
new file mode 100644
index 000000000000..c983db8744d3
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_node__modules__vscode_deviceid_dist_storage.js
@@ -0,0 +1,11 @@
+--- lib/vscode/node_modules/@vscode/deviceid/dist/storage.js.orig
++++ lib/vscode/node_modules/@vscode/deviceid/dist/storage.js
+@@ -42,7 +42,7 @@
+ if (process.platform === "darwin") {
+ folder = path.join(process.env.HOME, "Library", "Application Support");
+ }
+- else if (process.platform === "linux") {
++ else if (process.platform === "linux" || process.platform === "freebsd") {
+ folder =
+ process.env.XDG_CACHE_HOME ?? path.join(process.env.HOME, ".cache");
+ }
diff --git a/www/code-server/files/patch-lib_vscode_node__modules_node-pty_src_unix_pty.cc b/www/code-server/files/patch-lib_vscode_node__modules_node-pty_src_unix_pty.cc
new file mode 100644
index 000000000000..28465ee324bc
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_node__modules_node-pty_src_unix_pty.cc
@@ -0,0 +1,11 @@
+--- lib/vscode/node_modules/node-pty/src/unix/pty.cc.orig
++++ lib/vscode/node_modules/node-pty/src/unix/pty.cc
+@@ -112,7 +112,7 @@
+ int exit_code = 0, signal_code = 0;
+ };
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+
+ static int
+ SetCloseOnExec(int fd) {
diff --git a/www/code-server/files/patch-lib_vscode_product.json b/www/code-server/files/patch-lib_vscode_product.json
new file mode 100644
index 000000000000..7674a6d06a36
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_product.json
@@ -0,0 +1,28 @@
+--- lib/vscode/product.json.orig
++++ lib/vscode/product.json
+@@ -147,14 +147,7 @@
+ "tokenEntitlementUrl": "https://api.github.com/copilot_internal/v2/token",
+ "mcpRegistryDataUrl": "https://api.github.com/copilot/mcp_registry"
+ },
+- "trustedExtensionAuthAccess": {
+- "github": [
+- "GitHub.copilot-chat"
+- ],
+- "github-enterprise": [
+- "GitHub.copilot-chat"
+- ]
+- },
++ "trustedExtensionAuthAccess": {},
+ "onboardingKeymaps": [
+ {
+ "id": "vscode",
+@@ -230,8 +223,6 @@
+ "type": "light"
+ }
+ ],
+- "builtInExtensionsEnabledWithAutoUpdates": [
+- "GitHub.copilot-chat"
+- ],
++ "builtInExtensionsEnabledWithAutoUpdates": [],
+ "sessionsWindowAllowedExtensions": []
+ }
diff --git a/www/code-server/files/patch-lib_vscode_src_vs_platform_environment_node_userDataPath.ts b/www/code-server/files/patch-lib_vscode_src_vs_platform_environment_node_userDataPath.ts
new file mode 100644
index 000000000000..82330a01ee87
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_src_vs_platform_environment_node_userDataPath.ts
@@ -0,0 +1,10 @@
+--- lib/vscode/src/vs/platform/environment/node/userDataPath.ts.orig
++++ lib/vscode/src/vs/platform/environment/node/userDataPath.ts
+@@ -96,6 +96,7 @@
+ appDataPath = join(homedir(), 'Library', 'Application Support');
+ break;
+ case 'linux':
++ case 'freebsd':
+ appDataPath = process.env['XDG_CONFIG_HOME'] || join(homedir(), '.config');
+ break;
+ default:
diff --git a/www/code-server/files/patch-lib_vscode_src_vs_platform_sign_browser_signService.ts b/www/code-server/files/patch-lib_vscode_src_vs_platform_sign_browser_signService.ts
new file mode 100644
index 000000000000..4204214c2197
--- /dev/null
+++ b/www/code-server/files/patch-lib_vscode_src_vs_platform_sign_browser_signService.ts
@@ -0,0 +1,23 @@
+--- lib/vscode/src/vs/platform/sign/browser/signService.ts.orig
++++ lib/vscode/src/vs/platform/sign/browser/signService.ts
+@@ -42,18 +42,11 @@
+ super();
+ }
+ protected override getValidator(): Promise<IVsdaValidator> {
+- return this.vsda().then(vsda => {
+- const v = new vsda.validator();
+- return {
+- createNewMessage: arg => v.createNewMessage(arg),
+- validate: arg => v.validate(arg),
+- dispose: () => v.free(),
+- };
+- });
++ return Promise.reject(new Error("VSDA is not available"));
+ }
+
+ protected override signValue(arg: string): Promise<string> {
+- return this.vsda().then(vsda => vsda.sign(arg));
++ return Promise.reject(new Error("VSDA is not available"));
+ }
+
+ @memoize
diff --git a/www/code-server/pkg-descr b/www/code-server/pkg-descr
new file mode 100644
index 000000000000..d34bc8ec0757
--- /dev/null
+++ b/www/code-server/pkg-descr
@@ -0,0 +1,5 @@
+code-server runs Visual Studio Code in a web browser and allows remote
+development through a web-based interface.
+
+The service provides access to a full VS Code environment from any modern
+browser without requiring a local VS Code installation.
diff --git a/www/code-server/pkg-message b/www/code-server/pkg-message
new file mode 100644
index 000000000000..f0e9f93ff937
--- /dev/null
+++ b/www/code-server/pkg-message
@@ -0,0 +1,23 @@
+[
+{ type: install
+ message: <<EOM
+code-server has been installed.
+
+Enable the service:
+
+ sysrc code_server_enable=YES
+
+Start the service:
+
+ service code-server start
+
+By default, code-server listens on:
+
+ http://<server>:8080/
+
+See:
+
+ %%PREFIX%%/share/doc/code-server/README.md
+EOM
+}
+]
diff --git a/www/code-server/pkg-plist b/www/code-server/pkg-plist
new file mode 100644
index 000000000000..0a035fcd8c01
--- /dev/null
+++ b/www/code-server/pkg-plist
@@ -0,0 +1,13704 @@
+%%DATADIR%%/lib/vscode/bin/code-server-oss
+%%DATADIR%%/lib/vscode/bin/helpers/browser-darwin.sh
+%%DATADIR%%/lib/vscode/bin/helpers/browser-linux.sh
+%%DATADIR%%/lib/vscode/bin/helpers/browser.cmd
+%%DATADIR%%/lib/vscode/bin/helpers/browser.sh
+%%DATADIR%%/lib/vscode/bin/helpers/check-requirements.sh
+%%DATADIR%%/lib/vscode/bin/remote-cli/code-darwin.sh
+%%DATADIR%%/lib/vscode/bin/remote-cli/code-linux.sh
+%%DATADIR%%/lib/vscode/bin/remote-cli/code-server
+%%DATADIR%%/lib/vscode/bin/remote-cli/code.cmd
+%%DATADIR%%/lib/vscode/extensions/bat/language-configuration.json
+%%DATADIR%%/lib/vscode/extensions/bat/package.json
+%%DATADIR%%/lib/vscode/extensions/bat/package.nls.json
+%%DATADIR%%/lib/vscode/extensions/bat/snippets/batchfile.code-snippets
+%%DATADIR%%/lib/vscode/extensions/bat/syntaxes/batchfile.tmLanguage.json
+%%DATADIR%%/lib/vscode/extensions/clojure/language-configuration.json
+%%DATADIR%%/lib/vscode/extensions/clojure/package.json
+%%DATADIR%%/lib/vscode/extensions/clojure/package.nls.json
+%%DATADIR%%/lib/vscode/extensions/clojure/syntaxes/clojure.tmLanguage.json
+%%DATADIR%%/lib/vscode/extensions/coffeescript/language-configuration.json
+%%DATADIR%%/lib/vscode/extensions/coffeescript/package.json
+%%DATADIR%%/lib/vscode/extensions/coffeescript/package.nls.json
+%%DATADIR%%/lib/vscode/extensions/coffeescript/snippets/coffeescript.code-snippets
+%%DATADIR%%/lib/vscode/extensions/coffeescript/syntaxes/coffeescript.tmLanguage.json
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/dist/configurationEditingMain.js
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/images/icon.png
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/package.json
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/package.nls.json
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/schemas/attachContainer.schema.json
+%%DATADIR%%/lib/vscode/extensions/configuration-editing/tsconfig.json.bak
+%%DATADIR%%/lib/vscode/extensions/copilot/CHANGELOG.md
+%%DATADIR%%/lib/vscode/extensions/copilot/LICENSE.txt
+%%DATADIR%%/lib/vscode/extensions/copilot/README.md
+%%DATADIR%%/lib/vscode/extensions/copilot/assets/copilot.png
+%%DATADIR%%/lib/vscode/extensions/copilot/assets/copilot.woff
*** 13669 LINES SKIPPED ***