Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Mar 2026 22:07:34 +0000
From:      Dave Cottlehuber <dch@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: a5575ead15e2 - main - sysutils/sylve: new port: lightweight GUI for managing jails & bhyve
Message-ID:  <69caf426.39b82.797c1972@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by dch:

URL: https://cgit.FreeBSD.org/ports/commit/?id=a5575ead15e221d83fb130d0ec6ff20bf3873f44

commit a5575ead15e221d83fb130d0ec6ff20bf3873f44
Author:     Dave Cottlehuber <dch@FreeBSD.org>
AuthorDate: 2026-03-30 22:03:00 +0000
Commit:     Dave Cottlehuber <dch@FreeBSD.org>
CommitDate: 2026-03-30 22:07:05 +0000

    sysutils/sylve: new port: lightweight GUI for managing jails & bhyve
    
    Sponsored by:   SkunkWerks, GmbH
    Sponsored by:   Alchemilla
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D52137
---
 sysutils/Makefile                   |  1 +
 sysutils/sylve/Makefile             | 46 ++++++++++++++++++++++++++++
 sysutils/sylve/distinfo             |  7 +++++
 sysutils/sylve/files/pkg-message.in | 24 +++++++++++++++
 sysutils/sylve/files/sylve.in       | 61 +++++++++++++++++++++++++++++++++++++
 sysutils/sylve/pkg-descr            |  5 +++
 sysutils/sylve/pkg-plist            |  3 ++
 7 files changed, 147 insertions(+)

diff --git a/sysutils/Makefile b/sysutils/Makefile
index ec10837486e1..80eaa94cf62e 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -1390,6 +1390,7 @@
     SUBDIR += swapusage
     SUBDIR += sweeper
     SUBDIR += swtpm
+    SUBDIR += sylve
     SUBDIR += symlinks
     SUBDIR += symon
     SUBDIR += synergy
diff --git a/sysutils/sylve/Makefile b/sysutils/sylve/Makefile
new file mode 100644
index 000000000000..66cf333011aa
--- /dev/null
+++ b/sysutils/sylve/Makefile
@@ -0,0 +1,46 @@
+PORTNAME=	sylve
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.2.2
+CATEGORIES=	sysutils
+MASTER_SITES+=	https://github.com/AlchemillaHQ/Sylve/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/:web_assets
+DISTFILES+=	sylve-web-assets.tar.gz:web_assets
+
+MAINTAINER=	hayzam@alchemilla.io
+COMMENT=	Lightweight GUI for managing Bhyve, Jails, ZFS, networking
+WWW=		https://github.com/alchemillahq/sylve
+
+LICENSE=	BSD2CLAUSE
+
+ONLY_FOR_ARCHS=	aarch64 amd64
+
+RUN_DEPENDS=	dnsmasq>0:dns/dnsmasq \
+		qemu-img:emulators/qemu@tools \
+		samba423>0:net/samba423 \
+		swtpm>0:sysutils/swtpm \
+		virsh:devel/libvirt
+.if ${ARCH} == amd64
+RUN_DEPENDS+=	bhyve-firmware>0:sysutils/bhyve-firmware
+.elif ${ARCH} == aarch64
+RUN_DEPENDS+=	u-boot-bhyve-arm64>0:sysutils/u-boot-bhyve-arm64
+.endif
+
+USES=		go:modules
+USE_RC_SUBR=	${PORTNAME}
+
+GO_MODULE=	github.com/alchemillahq/sylve
+
+GO_TARGET=	./cmd/sylve
+
+post-extract:
+	@${MKDIR} ${WRKSRC}/internal/assets/web-files
+	@${TAR} xf ${DISTDIR}/${DIST_SUBDIR}/sylve-web-assets.tar.gz \
+		-C ${WRKSRC}/internal/assets/
+
+do-install:
+	${MKDIR} ${STAGEDIR}${ETCDIR}
+	${MKDIR} ${STAGEDIR}/var/db/sylve
+	${INSTALL_PROGRAM} ${WRKDIR}/bin/${PORTNAME} \
+		${STAGEDIR}${PREFIX}/sbin/${PORTNAME}
+	${INSTALL_DATA} ${WRKSRC}/config.example.json ${STAGEDIR}${ETCDIR}/config.json.sample
+
+.include <bsd.port.mk>
diff --git a/sysutils/sylve/distinfo b/sysutils/sylve/distinfo
new file mode 100644
index 000000000000..5abaf1a4dee2
--- /dev/null
+++ b/sysutils/sylve/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1774805985
+SHA256 (go/sysutils_sylve/sylve-v0.2.2/sylve-web-assets.tar.gz) = d8d4dc99723d9352f1af6330ac8a8eb1a8cfddbd91d8e8c0d4b11663a3be5278
+SIZE (go/sysutils_sylve/sylve-v0.2.2/sylve-web-assets.tar.gz) = 2929354
+SHA256 (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.mod) = 5dfaadfaf24023652042afbc41d496ea4d4fcf4972c32b3f760c9f1f291f7587
+SIZE (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.mod) = 5823
+SHA256 (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.zip) = c64813343c99b41b60d68576d9559a934303d1709a49296647a5d746a1f96b40
+SIZE (go/sysutils_sylve/sylve-v0.2.2/v0.2.2.zip) = 34832987
diff --git a/sysutils/sylve/files/pkg-message.in b/sysutils/sylve/files/pkg-message.in
new file mode 100644
index 000000000000..5df054a1058b
--- /dev/null
+++ b/sysutils/sylve/files/pkg-message.in
@@ -0,0 +1,24 @@
+[
+{ type: install
+  message: <<EOM
+Sylve was installed!
+
+1) The default config file is located at %%ETCDIR%%/config.json. PLEASE
+   change your password in this file before starting the service for the
+   first time. The default username is "admin" and the default password is
+"admin".
+
+2) By default, Sylve datadir is located at %%DATADIR%% directory, this can
+   be modified in %%ETCDIR%%/config.json. This directory can become quite
+   large, with downloaded image files.
+
+3) Enable Sylve by using the command `sysrc sylve_enable=YES` and start
+   the service with `service sylve start`.
+
+4) You should now be able to visit https://IP:8181 to access the web
+   interface!
+
+5) Enjoy!
+EOM
+}
+]
diff --git a/sysutils/sylve/files/sylve.in b/sysutils/sylve/files/sylve.in
new file mode 100644
index 000000000000..f854f3684105
--- /dev/null
+++ b/sysutils/sylve/files/sylve.in
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# PROVIDE: sylve
+# REQUIRE: DAEMON NETWORKING
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable sylve:
+#
+# sylve_enable (bool):      Set to "NO" by default.
+#                           Set it to "YES" to enable sylve.
+# sylve_user (user):        Set to "root" by default.
+#                           User to run sylve as.
+# sylve_group (group):      Set to "wheel" by default.
+#                           Group to run sylve as.
+# sylve_args (str):         Set to "-config %%ETCDIR%%/config.json" by default.
+#                           Extra flags passed to sylve.
+
+. /etc/rc.subr
+
+name=sylve
+rcvar=sylve_enable
+
+load_rc_config $name
+
+: ${sylve_enable:="NO"}
+: ${sylve_user:="root"}
+: ${sylve_group:="wheel"}
+: ${sylve_args:="-config %%ETCDIR%%/config.json"}
+
+export PATH="${PATH}:/usr/local/bin:/usr/local/sbin"
+
+pidfile="/var/run/${name}.pid"
+daemon_pidfile="/var/run/${name}-daemon.pid"
+procname="%%PREFIX%%/sbin/sylve"
+command="/usr/sbin/daemon"
+command_args="-f -c -T ${name} -p ${pidfile} -P ${daemon_pidfile} ${procname} ${sylve_args}"
+
+start_precmd=sylve_startprecmd
+stop_postcmd=sylve_stoppostcmd
+
+sylve_startprecmd()
+{
+	if [ ! -e ${daemon_pidfile} ]; then
+		install -o ${sylve_user} -g ${sylve_group} /dev/null ${daemon_pidfile};
+	fi
+	if [ ! -e ${pidfile} ]; then
+		install -o ${sylve_user} -g ${sylve_group} /dev/null ${pidfile};
+	fi
+}
+
+
+sylve_stoppostcmd()
+{
+	if [ -f "${daemon_pidfile}" ]; then
+		pids=$( pgrep -F ${daemon_pidfile} 2>&1 )
+		_err=$?
+		[ ${_err} -eq 0 ] && kill -9 ${pids}
+	fi
+}
+
+run_rc_command "$1"
diff --git a/sysutils/sylve/pkg-descr b/sysutils/sylve/pkg-descr
new file mode 100644
index 000000000000..e97d487cef06
--- /dev/null
+++ b/sysutils/sylve/pkg-descr
@@ -0,0 +1,5 @@
+Sylve is a lightweight, open-source virtualization platform for FreeBSD,
+leveraging Bhyve for VMs and Jails for containerization, with deep ZFS
+integration. It provides a streamlined, Proxmox-like experience tailored for
+FreeBSD environments. Its backend is written in Go, and the frontend is written
+in Svelte (with Kit), integrated into a single binary for easy deployment.
diff --git a/sysutils/sylve/pkg-plist b/sysutils/sylve/pkg-plist
new file mode 100644
index 000000000000..a591cf664880
--- /dev/null
+++ b/sysutils/sylve/pkg-plist
@@ -0,0 +1,3 @@
+@sample %%ETCDIR%%/config.json.sample
+sbin/sylve
+@dir(root,wheel,0700) /var/db/sylve


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69caf426.39b82.797c1972>