diff --git a/documentation/jetty/.gitignore b/documentation/jetty/.gitignore
new file mode 100644
index 000000000000..27ef6457e2b3
--- /dev/null
+++ b/documentation/jetty/.gitignore
@@ -0,0 +1,2 @@
+/.asciidoctorconfig
+/provided-antora-playbook.yml
diff --git a/documentation/jetty/README.adoc b/documentation/jetty/README.adoc
new file mode 100644
index 000000000000..0014636fc233
--- /dev/null
+++ b/documentation/jetty/README.adoc
@@ -0,0 +1,17 @@
+= Jetty Documentation
+
+This project is the root of the Jetty documentation.
+The content files in this project get sourced by the Antora playbook in the playbook repository that builds the website.
+
+In order to build the documentation locally, you first need to prepare a jetty-home directory:
+
+ $ mvn process-resources -Dcollector -Pfast -N
+
+Then you can use the following command to prepare and run Antora using a preview profile:
+
+ $ mvn antora -N
+
+The `antora:antora` goal, which the `antora` lifecycle invokes, takes advantage of the playbook provider feature so the playbook for this branch can be centrally managed in the playbook repository.
+
+Note that this preview profile does not run the jetty blocks, so you will only see the configuration for those runs in the preview site.
+If you want to build the full site, use the build in the playbook repository.
diff --git a/documentation/jetty/antora.yml b/documentation/jetty/antora.yml
new file mode 100644
index 000000000000..f69bf37b7563
--- /dev/null
+++ b/documentation/jetty/antora.yml
@@ -0,0 +1,25 @@
+name: jetty
+version: '11'
+title: Eclipse Jetty
+asciidoc:
+ attributes:
+ javadoc-url: https://eclipse.dev/jetty/javadoc/jetty-11
+ jdurl: '{javadoc-url}'
+ jetty-home: ${jetty.home}@
+ version: 11.0.21-SNAPSHOT
+ idprefix: ''
+ idseparator: ''
+ run-jetty-classpath: ${settings.localRepository}/org/eclipse/jetty/tests/jetty-home-tester/${project.version}/jetty-home-tester-${project.version}.jar${path.separator}${run.jetty.classpath}
+nav:
+- modules/operations-guide/nav.adoc
+- modules/programming-guide/nav.adoc
+ext:
+ collector:
+ - run:
+ command: mvn install -ntp -B -Dcollector -Pfast -am -pl documentation/jetty
+ scan:
+ dir: documentation/jetty/target/collector
+ - scan:
+ dir: jetty-server/src/main/java
+ files: org/eclipse/jetty/server/CustomRequestLog.java
+ base: modules/code/partials
diff --git a/documentation/jetty/modules/ROOT/pages/index.adoc b/documentation/jetty/modules/ROOT/pages/index.adoc
new file mode 100644
index 000000000000..ac1c57eb289b
--- /dev/null
+++ b/documentation/jetty/modules/ROOT/pages/index.adoc
@@ -0,0 +1,24 @@
+//
+// ========================================================================
+// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
+//
+// This program and the accompanying materials are made available under the
+// terms of the Eclipse Public License v. 2.0 which is available at
+// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+// which is available at https://www.apache.org/licenses/LICENSE-2.0.
+//
+// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+// ========================================================================
+//
+
+= Eclipse Jetty
+
+This section of the site contains the documentation for {page-component-title} {page-version}.
+
+== xref:operations-guide:index.adoc[]
+
+The Eclipse Jetty Operations Guide targets sysops, devops, and developers who want to install Eclipse Jetty as a standalone server to deploy web applications.
+
+== xref:programming-guide:index.adoc[]
+
+The Eclipse Jetty Programming Guide targets developers who want to use the Eclipse Jetty libraries in their applications, and advanced sysops/devops that want to customize the deployment of web applications.
diff --git a/documentation/jetty/modules/code/examples/jetty-modules/jpms.mod b/documentation/jetty/modules/code/examples/jetty-modules/jpms.mod
new file mode 100644
index 000000000000..6d261a6eb542
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/jetty-modules/jpms.mod
@@ -0,0 +1,8 @@
+[description]
+JPMS Configuration Module
+
+[ini]
+--jpms
+
+[jpms]
+# Additional JPMS configuration.
diff --git a/documentation/jetty/modules/code/examples/jetty-modules/jvm.mod b/documentation/jetty/modules/code/examples/jetty-modules/jvm.mod
new file mode 100644
index 000000000000..e8b2fc51d0a9
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/jetty-modules/jvm.mod
@@ -0,0 +1,6 @@
+[description]
+JVM Options Module
+
+[exec]
+-Xmx1g
+-Xlog:gc*,gc+stats=off:file=logs/gc.log:time,level,tags
diff --git a/documentation/jetty/modules/code/examples/jetty-modules/postgresql.mod b/documentation/jetty/modules/code/examples/jetty-modules/postgresql.mod
new file mode 100644
index 000000000000..aadffda2ca90
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/jetty-modules/postgresql.mod
@@ -0,0 +1,15 @@
+[description]
+Postgres JDBC Driver Module
+
+[lib]
+lib/postgresql-${postgresql-version}.jar
+
+[files]
+maven://org.postgresql/postgresql/${postgresql-version}|lib/postgresql-${postgresql-version}.jar
+
+[ini]
+postgresql-version?=42.2.18
+
+[ini-template]
+## Postgres JDBC version.
+# postgresql-version=42.2.18
diff --git a/documentation/jetty/modules/code/examples/jetty-modules/remote-debug.mod b/documentation/jetty/modules/code/examples/jetty-modules/remote-debug.mod
new file mode 100644
index 000000000000..9cae360e33f5
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/jetty-modules/remote-debug.mod
@@ -0,0 +1,5 @@
+[description]
+Enables remote debugging
+
+[exec]
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
diff --git a/documentation/jetty/modules/code/examples/pom.xml b/documentation/jetty/modules/code/examples/pom.xml
new file mode 100644
index 000000000000..01619d68eb1e
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/pom.xml
@@ -0,0 +1,199 @@
+
+
+
+ 4.0.0
+
+ org.eclipse.jetty.documentation
+ documentation-parent
+ 11.0.21-SNAPSHOT
+ ../../../../pom.xml
+
+ code-examples
+ pom
+ Documentation :: Code Examples
+
+
+ true
+ true
+
+
+
+
+ org.eclipse.jetty
+ infinispan-embedded-query
+
+
+ org.eclipse.jetty
+ infinispan-remote-query
+
+
+ org.eclipse.jetty
+ jetty-alpn-server
+
+
+ org.eclipse.jetty
+ jetty-client
+
+
+ org.eclipse.jetty
+ jetty-jmx
+
+
+ org.eclipse.jetty
+ jetty-nosql
+
+
+ org.eclipse.jetty
+ jetty-rewrite
+
+
+ org.eclipse.jetty
+ jetty-server
+
+
+ org.eclipse.jetty
+ jetty-servlets
+
+
+ org.eclipse.jetty
+ jetty-unixdomain-server
+
+
+ org.eclipse.jetty
+ jetty-util-ajax
+
+
+ org.eclipse.jetty.fcgi
+ fcgi-client
+
+
+ org.eclipse.jetty.gcloud
+ jetty-gcloud-session-manager
+
+
+ org.eclipse.jetty.http2
+ http2-http-client-transport
+
+
+ org.eclipse.jetty.http2
+ http2-server
+
+
+ org.eclipse.jetty.http3
+ http3-http-client-transport
+
+
+ org.eclipse.jetty.http3
+ http3-server
+
+
+ org.eclipse.jetty.memcached
+ jetty-memcached-sessions
+
+
+ org.eclipse.jetty.toolchain
+ jetty-jakarta-servlet-api
+
+
+ org.eclipse.jetty.websocket
+ websocket-jakarta-server
+
+
+ org.eclipse.jetty.websocket
+ websocket-jetty-client
+
+
+ org.eclipse.jetty.websocket
+ websocket-jetty-server
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ compile-code-examples
+
+ compile
+
+ compile
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+
+ false
+
+
+ [21,)
+ [ERROR] OLD JDK [${java.version}] in use. Jetty documentation ${project.version} MUST use JDK 21 or newer
+
+
+
+
+
+
+
+
+
+ jdk17-18
+
+ [17,19)
+
+
+
+
+ maven-compiler-plugin
+
+
+ **/ArchitectureDocs.java
+
+
+
+
+
+
+
+ jdk19-20
+
+ [19,21)
+
+
+
+
+ maven-compiler-plugin
+
+
+ ${java.specification.version}
+ ${java.specification.version}
+ true
+
+
+
+
+
+
+ jdk21+
+
+ [21,)
+
+
+
+
+ maven-compiler-plugin
+
+
+ ${java.specification.version}
+ ${java.specification.version}
+
+
+
+
+
+
+
diff --git a/documentation/jetty/modules/code/examples/src/main/java/org/eclipse/jetty/docs/programming/ComponentDocs.java b/documentation/jetty/modules/code/examples/src/main/java/org/eclipse/jetty/docs/programming/ComponentDocs.java
new file mode 100644
index 000000000000..f309dad3af35
--- /dev/null
+++ b/documentation/jetty/modules/code/examples/src/main/java/org/eclipse/jetty/docs/programming/ComponentDocs.java
@@ -0,0 +1,284 @@
+//
+// ========================================================================
+// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
+//
+// This program and the accompanying materials are made available under the
+// terms of the Eclipse Public License v. 2.0 which is available at
+// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+// which is available at https://www.apache.org/licenses/LICENSE-2.0.
+//
+// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+// ========================================================================
+//
+
+package org.eclipse.jetty.docs.programming;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.util.component.AbstractLifeCycle;
+import org.eclipse.jetty.util.component.Container;
+import org.eclipse.jetty.util.component.ContainerLifeCycle;
+import org.eclipse.jetty.util.component.LifeCycle;
+
+import static java.lang.System.Logger.Level.INFO;
+
+@SuppressWarnings("unused")
+public class ComponentDocs
+{
+ public void start() throws Exception
+ {
+ // tag::start[]
+ class Monitor extends AbstractLifeCycle
+ {
+ }
+
+ class Root extends ContainerLifeCycle
+ {
+ // Monitor is an internal component.
+ private final Monitor monitor = new Monitor();
+
+ public Root()
+ {
+ // The Monitor life cycle is managed by Root.
+ addManaged(monitor);
+ }
+ }
+
+ class Service extends ContainerLifeCycle
+ {
+ // An instance of the Java scheduler service.
+ private ScheduledExecutorService scheduler;
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ // Java's schedulers cannot be restarted, so they must
+ // be created anew every time their container is started.
+ scheduler = Executors.newSingleThreadScheduledExecutor();
+ // Even if Java scheduler does not implement
+ // LifeCycle, make it part of the component tree.
+ addBean(scheduler);
+ // Start all the children beans.
+ super.doStart();
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ // Perform the opposite operations that were
+ // performed in doStart(), in reverse order.
+ super.doStop();
+ removeBean(scheduler);
+ scheduler.shutdown();
+ }
+ }
+
+ // Create a Root instance.
+ Root root = new Root();
+
+ // Create a Service instance.
+ Service service = new Service();
+
+ // Link the components.
+ root.addBean(service);
+
+ // Start the root component to
+ // start the whole component tree.
+ root.start();
+ // end::start[]
+ }
+
+ public void restart() throws Exception
+ {
+ // tag::restart[]
+ class Root extends ContainerLifeCycle
+ {
+ }
+
+ class Service extends ContainerLifeCycle
+ {
+ // An instance of the Java scheduler service.
+ private ScheduledExecutorService scheduler;
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ // Java's schedulers cannot be restarted, so they must
+ // be created anew every time their container is started.
+ scheduler = Executors.newSingleThreadScheduledExecutor();
+ // Even if Java scheduler does not implement
+ // LifeCycle, make it part of the component tree.
+ addBean(scheduler);
+ // Start all the children beans.
+ super.doStart();
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ // Perform the opposite operations that were
+ // performed in doStart(), in reverse order.
+ super.doStop();
+ removeBean(scheduler);
+ scheduler.shutdown();
+ }
+ }
+
+ Root root = new Root();
+ Service service = new Service();
+ root.addBean(service);
+
+ // Start the Root component.
+ root.start();
+
+ // Stop temporarily Service without stopping the Root.
+ service.stop();
+
+ // Restart Service.
+ service.start();
+ // end::restart[]
+ }
+
+ public void getBeans() throws Exception
+ {
+ // tag::getBeans[]
+ class Root extends ContainerLifeCycle
+ {
+ }
+
+ class Service extends ContainerLifeCycle
+ {
+ private ScheduledExecutorService scheduler;
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ scheduler = Executors.newSingleThreadScheduledExecutor();
+ addBean(scheduler);
+ super.doStart();
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ super.doStop();
+ removeBean(scheduler);
+ scheduler.shutdown();
+ }
+ }
+
+ Root root = new Root();
+ Service service = new Service();
+ root.addBean(service);
+
+ // Start the Root component.
+ root.start();
+
+ // Find all the direct children of root.
+ Collection