diff --git a/packages/py-plotly-resampler/package.py b/packages/py-plotly-resampler/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..febbe6c03b19e6bc56aa2788534c3507ab7a050f
--- /dev/null
+++ b/packages/py-plotly-resampler/package.py
@@ -0,0 +1,26 @@
+# 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)
+
+from spack.package import *
+
+
+class PyPlotlyResampler(PythonPackage):
+    """Visualizing large time series with plotly"""
+
+    homepage = "https://github.com/predict-idlab/plotly-resampler"
+    pypi = "plotly-resampler/plotly_resampler-0.10.0.tar.gz"
+
+    version("0.10.0", sha256="e1063d6d00aa4aedeb8c2c204de8661751b2145fd06682cd8fead9983c9a8334")
+    version("0.9.2", sha256="abddac809931c157f5982d3398b68cc256786e75de33878a84060f57d886b471")
+    version("0.9.1", sha256="28d53709c8bfa8d0d4f85a0d969cbce2d2bfc00c376b8f932cd280360a5bb8cc")
+    version("0.9.0", sha256="7485a17825045884ce7b05d9d7ff9a08fabbefb5d283599656633cf165a0af8f")
+
+    depends_on("py-poetry-core", type="build")
+    depends_on("py-plotly@5.5:6", type=("build", "run"))
+    depends_on("py-dash@2.11:", type=("build", "run"))
+    depends_on("py-pandas@1:", type=("build", "run"))
+    depends_on("py-numpy@1.14:", type=("build", "run"))
+    depends_on("py-orjson@3.10:", type=("build", "run"))
+    depends_on("py-tsdownsample@0.1.2:", type=("build", "run"))
diff --git a/packages/py-tsdownsample/package.py b/packages/py-tsdownsample/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..961efbd93bfcab166bd2bbca4abf618c927c9eb5
--- /dev/null
+++ b/packages/py-tsdownsample/package.py
@@ -0,0 +1,21 @@
+# 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)
+
+from spack.package import *
+
+
+class PyTsdownsample(PythonPackage):
+    """Time series downsampling in rust"""
+
+    homepage = "https://github.com/predict-idlab/tsdownsample"
+    pypi = "tsdownsample/tsdownsample-0.1.4.1.tar.gz"
+
+    version("0.1.4.1", sha256="cc2e2fc0031a5fb75c0f5204b498e86eae0333bcc19da481c0859f1943690f3b")
+    version("0.1.3", sha256="5268d0ab5e8572138871feff389440a0c59d5e0fe02c0fa1cf975d74ba33b933")
+    version("0.1.2", sha256="9da0b8f8859e9651910cc150bc5115bf5d1890d8ebee12bf57bd1bb016a0112a")
+    version("0.1.1", sha256="c7619017ed08376eefb59cacfa113e24a53c060624648b628ff624a88a48a415")
+
+    depends_on("py-maturin@1.1:1", type="build")
+    depends_on("py-numpy", type=("build", "run"))