1diff --git a/apks/jellyfin-web/APKBUILD b/apks/jellyfin-web/APKBUILD
2new file mode 100644
3index 0000000000000000000000000000000000000000..69e01e0b441386d6cc897d63ec1865b300df79b7
4--- /dev/null
5+++ b/apks/jellyfin-web/APKBUILD
6@@ -0,0 +1,28 @@
7+# Maintainer: Simon Zeni <simon@bl4ckb0ne.ca>
8+pkgname=jellyfin-web
9+pkgver=10.8.5
10+pkgrel=0
11+pkgdesc="Web Client for Jellyfin"
12+url="https://jellyfin.org/"
13+# armv7: oom
14+arch="x86_64 aarch64"
15+options="!check net" # no tests
16+license="GPL-2.0-only"
17+install="$pkgname.post-install"
18+depends="jellyfin"
19+makedepends="npm"
20+source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin-web/archive/refs/tags/v$pkgver.tar.gz"
21+
22+build() {
23+ npm ci --no-audit
24+}
25+
26+package() {
27+ mkdir -p "$pkgdir"/usr/lib/jellyfin/jellyfin-web
28+
29+ cp -r "$builddir"/dist/* "$pkgdir"/usr/lib/jellyfin/jellyfin-web
30+}
31+
32+sha512sums="
33+5953b1007cc771542aaad907ecc292b311e457e625c2e9d4e0246147488651ea556e8c3973fd603760326173db14939e4ce728c8f9fc563a7f3ab740453e60d8 jellyfin-web-10.8.5.tar.gz
34+"
35diff --git a/apks/jellyfin-web/jellyfin-web.post-install b/apks/jellyfin-web/jellyfin-web.post-install
36new file mode 100644
37index 0000000000000000000000000000000000000000..a6e69426fe7357daabddec8f662975f83bbecddd
38--- /dev/null
39+++ b/apks/jellyfin-web/jellyfin-web.post-install
40@@ -0,0 +1,6 @@
41+#!/bin/sh
42+
43+printf " *\n * The default jellyfin configuration does not enable the web ui.\n"
44+printf " * Remove the '--nowebclient' option from /etc/conf.d/jellyfin to enable it.\n *\n"
45+
46+exit 0
47diff --git a/apks/jellyfin/APKBUILD b/apks/jellyfin/APKBUILD
48new file mode 100644
49index 0000000000000000000000000000000000000000..80b8076926db1f27f9adcb85af4dfa76f20aefa6
50--- /dev/null
51+++ b/apks/jellyfin/APKBUILD
52@@ -0,0 +1,63 @@
53+# Maintainer: Simon Zeni <simon@bl4ckb0ne.ca>
54+pkgname=jellyfin
55+pkgver=10.8.5
56+pkgrel=0
57+pkgdesc="The Free Software Media System"
58+pkgusers="$pkgname"
59+pkggroups="$pkgname"
60+install="$pkgname.pre-install"
61+url="https://jellyfin.org/"
62+arch="x86_64 armv7 aarch64"
63+license="GPL-2.0-only"
64+makedepends="dotnet6-sdk"
65+depends="aspnetcore6-runtime ffmpeg"
66+subpackages="$pkgname-openrc"
67+source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin/archive/refs/tags/v$pkgver.tar.gz
68+ $pkgname.initd
69+ $pkgname.confd"
70+
71+case $CARCH in
72+ x86_64) _dotnet_arch=x64;;
73+ aarch64) _dotnet_arch=arm64;;
74+ armv7|armhf) _dotnet_arch=arm;;
75+esac
76+
77+# parses RID from /etc/os-release depending on if edge or production release
78+# to set _runtime_id
79+# shellcheck disable=SC2034
80+. /etc/os-release
81+[ -n "${VERSION_ID//[^_]}" ] && _runtime_id="alpine.${VERSION_ID%_*}-$_dotnet_arch" || _runtime_id="alpine.${VERSION_ID%.*}-$_dotnet_arch"
82+
83+build() {
84+ dotnet build --configuration Release Jellyfin.Server --no-self-contained --runtime $_runtime_id
85+ dotnet publish --configuration Release Jellyfin.Server --no-self-contained --output publish --runtime $_runtime_id
86+}
87+
88+check() {
89+ # check on aarch64 is broken for dotnet6-sdk v6.0.1xx due to
90+ # https://github.com/microsoft/vstest/issues/2566
91+ if [ "$CARCH" = "aarch64" ]; then
92+ return
93+ fi
94+
95+ dotnet test --runtime $_runtime_id
96+}
97+
98+package() {
99+ mkdir -p "$pkgdir"/usr/lib
100+ cp -dr publish "$pkgdir"/usr/lib/jellyfin
101+
102+ mkdir -p "$pkgdir"/usr/bin
103+ ln -s /usr/lib/jellyfin/jellyfin "$pkgdir"/usr/bin/jellyfin
104+
105+ install -Dm755 "$srcdir"/$pkgname.initd \
106+ "$pkgdir"/etc/init.d/$pkgname
107+ install -Dm644 "$srcdir"/$pkgname.confd \
108+ "$pkgdir"/etc/conf.d/$pkgname
109+}
110+
111+sha512sums="
112+a4c436919ae6b07fede95b98d6a16c6405c5a8efd8457c522cf5dd273fa0edb9d33e582f59c3ac4377a19129512530c344de58d81807adbd83af16b41dea8e1d jellyfin-10.8.5.tar.gz
113+364a70a953d921048a249fd370642c1782e434c850334cd55e35bbb10d1bb93482d37faa1c11da5d7acba96a084d9832e5db212b65b0fa9907c7d3afe553aaf9 jellyfin.initd
114+d35eb07d11d711b8ad35c7726e151a8096609712fee3bfea00c9adeff8e56660e3cde3d9b0b2dc8a847514af4d2b32340e2b29b77facfab4f8921ba15ba671b0 jellyfin.confd
115+"
116diff --git a/apks/jellyfin/jellyfin.confd b/apks/jellyfin/jellyfin.confd
117new file mode 100644
118index 0000000000000000000000000000000000000000..6cd891ce6d9f1932bbe850fe3e41b6135ac6ad7b
119--- /dev/null
120+++ b/apks/jellyfin/jellyfin.confd
121@@ -0,0 +1,5 @@
122+supervisor=supervise-daemon
123+datadir="/var/lib/jellyfin"
124+cachedir="/var/cache/jellyfin"
125+logdir="/var/log/jellyfin"
126+opts="--nowebclient"
127diff --git a/apks/jellyfin/jellyfin.initd b/apks/jellyfin/jellyfin.initd
128new file mode 100644
129index 0000000000000000000000000000000000000000..278d79dddae9ea4542ce580166a1e6fa3a2d94b7
130--- /dev/null
131+++ b/apks/jellyfin/jellyfin.initd
132@@ -0,0 +1,20 @@
133+#!/sbin/openrc-run
134+
135+name=jellyfin
136+description="The Free Software Media System"
137+
138+command=/usr/bin/jellyfin
139+command_user=jellyfin:jellyfin
140+command_args="--datadir ${datadir} --cachedir ${cachedir} --logdir ${logdir} ${opts}"
141+
142+depend() {
143+ use logger dns
144+ need net
145+ after firewall
146+}
147+
148+start_pre() {
149+ checkpath -d -o $command_user "$datadir"
150+ checkpath -d -o $command_user "$cachedir"
151+ checkpath -d -o $command_user "$logdir"
152+}
153diff --git a/apks/jellyfin/jellyfin.pre-install b/apks/jellyfin/jellyfin.pre-install
154new file mode 100644
155index 0000000000000000000000000000000000000000..6e647160debab510a6a24035d4028b66a6594e71
156--- /dev/null
157+++ b/apks/jellyfin/jellyfin.pre-install
158@@ -0,0 +1,9 @@
159+#!/bin/sh
160+
161+user=jellyfin
162+group=jellyfin
163+
164+addgroup -S $group 2>/dev/null
165+adduser -S -D -h /var/lib/$user -s /sbin/nologin -G $group -g $user $user 2>/dev/null
166+
167+exit 0