diff --git a/packages/quiggeldy/package.py b/packages/quiggeldy/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..999644d90430957e4ab8e8e40f05c2dd5322fbcf
--- /dev/null
+++ b/packages/quiggeldy/package.py
@@ -0,0 +1,62 @@
+# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+import os
+import unittest.mock
+import xml.etree.ElementTree as ET
+
+from spack import *
+from spack.util.environment import EnvironmentModifications
+import spack.build_environment
+
+import importlib
+build_brainscales = importlib.import_module("spack.pkg.ebrains-spack-builds.build_brainscales")
+
+
+class Quiggeldy(build_brainscales.BuildBrainscales):
+    """quiggeldy --- the low-latency/high-throughput BSS-2 nmhw resource scheduler"""
+
+    homepage = "https://github.com/electronicvisions/hxcomm"
+    git      = "https://github.com/electronicvisions/hxcomm"
+
+    maintainers = ["emuller", "muffgaga"]
+
+    # host software dependencies
+    depends_on('bitsery', type=('build', 'link', 'run', 'test'))
+    depends_on('binutils+gold+ld+plugins', type=('build', 'link', 'run')) # specialize
+    depends_on('boost@1.69.0: +graph+icu+mpi+numpy+coroutine+context+filesystem+python+serialization+system+thread+program_options cxxstd=17', type=('build', 'link', 'run', 'test'))
+    depends_on('cereal', type=('build', 'link', 'run', 'test'))
+    depends_on('cppcheck', type=('build', 'link', 'run'))
+    depends_on('gflags', type=('build', 'link', 'run'))
+    depends_on('googletest@1.11.0:+gmock', type=('build', 'link', 'run')) # variadic templates needed
+    depends_on('liblockfile', type=('build', 'link', 'run'))
+    depends_on('log4cxx@0.12.1:1.0', when="@:8.0-a3", type=('build', 'link', 'run'))
+    depends_on('log4cxx@1.1: +events_at_exit', when="@8.0-a4:", type=('build', 'link', 'run'))
+    depends_on('pkgconfig', type=('build', 'link', 'run'))
+    depends_on('psmisc', type=('run', 'test'))
+    depends_on('util-linux', type=('build', 'link', 'run'))
+    depends_on('yaml-cpp+shared', type=('build', 'link', 'run'))
+
+    # override configure step as we only want to build quiggeldy from hxcomm
+    def configure(self, spec, prefix):
+        args = ['--prefix={0}'.format(self.prefix)]
+        args += self.configure_args()
+
+        if spec.version >= Version("9"):
+            self.waf('setup', '--directory=hxcomm', '--repo-db-url=https://github.com/electronicvisions/projects')
+        self.waf('configure', '--build-profile=release', '--disable-doxygen', *args)
+
+    def build_args(self):
+        args = super(BuildBrainscales, self).build_args()
+        args.append("--targets=quiggeldy")
+        return args
+
+    def install_test(self):
+        with working_dir('spack-test', create=True):
+            old_pythonpath = os.environ.get('PYTHONPATH', '')
+            os.environ['PYTHONPATH'] = ':'.join([str(self.prefix.lib), old_pythonpath])
+            bash = which("bash")
+            # ignore segfaults for now (exit code 139)
+            bash('-c', '(python -c "import hxtorch; print(hxtorch.__file__)" || ( test $? -eq 139 && echo "segfault")) || exit $?')
diff --git a/spack.yaml b/spack.yaml
index 6f22736623fcaff27f40367b43460cf56c03b6ad..aa0442180233cd4474a72f934ecb24948979b5a8 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -70,5 +70,7 @@ spack:
     #- py-cerebstats
     #- py-cerebunit
     #- py-morphounit@1.0.4
+    # Services
+    - quiggeldy@9.0-a4
   concretizer:
     unify: true