diff --git a/README.md b/README.md
index 38807954..9eaf1e29 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,15 @@ Cloud-friendly access to archival data
[](https://pypi.python.org/pypi/kerchunk/)
[](https://anaconda.org/conda-forge/kerchunk)
+> **Note:** Kerchunk is in maintenance mode. No new features are planned, though bug
+> fixes will continue to be accepted. For new projects, we recommend
+> [VirtualiZarr](https://virtualizarr.readthedocs.io/) for creating virtual Zarr
+> datasets, together with [Icechunk](https://icechunk.io/) as the storage engine.
+> See the FAQ for a
+> [comparison of libraries](https://virtualizarr.readthedocs.io/en/stable/explanation/faq.html#how-do-the-virtualizarr-and-kerchunk-libraries-compare),
+> [comparison of supported storage formats](https://virtualizarr.readthedocs.io/en/stable/explanation/faq.html#which-format-should-i-save-my-virtual-references-as),
+> and for how to [migrate existing Kerchunk references](https://virtualizarr.readthedocs.io/en/stable/explanation/faq.html#i-have-already-kerchunked-my-data-do-i-have-to-redo-that).
+
Kerchunk is a library that provides a unified way to represent a variety of chunked, compressed
data formats (e.g. NetCDF, HDF5, GRIB),
allowing efficient access to the data from traditional file systems or cloud object storage.
diff --git a/docs/source/_static/maintenance_banner.css b/docs/source/_static/maintenance_banner.css
new file mode 100644
index 00000000..c2d4dfeb
--- /dev/null
+++ b/docs/source/_static/maintenance_banner.css
@@ -0,0 +1,38 @@
+#kerchunk-maintenance-banner {
+ position: relative;
+ z-index: 10000;
+ background: #fff3cd;
+ color: #664d03;
+ border-bottom: 1px solid #ffecb5;
+ padding: 20px 50px 20px 20px;
+ font-size: 1rem;
+ line-height: 1.5;
+ text-align: center;
+}
+
+#kerchunk-maintenance-banner-content {
+ max-width: 1100px;
+ margin: 0 auto;
+}
+
+#kerchunk-maintenance-banner-title {
+ font-size: 1.15em;
+}
+
+#kerchunk-maintenance-banner a {
+ color: #664d03;
+ text-decoration: underline;
+}
+
+#kerchunk-maintenance-banner button {
+ position: absolute;
+ top: 50%;
+ right: 10px;
+ transform: translateY(-50%);
+ background: none;
+ border: none;
+ font-size: 2.2rem;
+ line-height: 1;
+ cursor: pointer;
+ color: #664d03;
+}
diff --git a/docs/source/_static/maintenance_banner.js b/docs/source/_static/maintenance_banner.js
new file mode 100644
index 00000000..c1c6b816
--- /dev/null
+++ b/docs/source/_static/maintenance_banner.js
@@ -0,0 +1,46 @@
+(function () {
+ var DISMISS_KEY = "kerchunkMaintenanceBannerDismissed";
+
+ try {
+ if (localStorage.getItem(DISMISS_KEY) === "1") {
+ return;
+ }
+ } catch (e) {
+ // localStorage unavailable (e.g. private browsing); show the banner anyway.
+ }
+
+ document.addEventListener("DOMContentLoaded", function () {
+ var banner = document.createElement("div");
+ banner.id = "kerchunk-maintenance-banner";
+
+ var content = document.createElement("div");
+ content.id = "kerchunk-maintenance-banner-content";
+ content.innerHTML =
+ 'Kerchunk is in maintenance mode: no new features are planned, ' +
+ "though bug fixes will continue to be accepted.
" +
+ "For new projects, we recommend " +
+ 'VirtualiZarr for creating ' +
+ "virtual Zarr datasets, together with " +
+ 'Icechunk as the storage engine.
' +
+ 'See the FAQ for a comparison of libraries, ' +
+ 'comparison of supported storage formats, ' +
+ "and for how to " +
+ 'migrate existing Kerchunk references.';
+ banner.appendChild(content);
+
+ var dismiss = document.createElement("button");
+ dismiss.setAttribute("aria-label", "Dismiss");
+ dismiss.textContent = "×";
+ dismiss.addEventListener("click", function () {
+ banner.remove();
+ try {
+ localStorage.setItem(DISMISS_KEY, "1");
+ } catch (e) {
+ // ignore
+ }
+ });
+ banner.appendChild(dismiss);
+
+ document.body.insertBefore(banner, document.body.firstChild);
+ });
+})();
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 23d479cd..a43e187b 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -53,7 +53,9 @@
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['images']
+html_static_path = ['images', '_static']
+html_css_files = ['maintenance_banner.css']
+html_js_files = ['maintenance_banner.js']
pygments_style = "sphinx"
html_theme = "sphinx_rtd_theme"
html_logo = "kerchunk.png"