You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by li...@apache.org on 2022/10/17 11:00:41 UTC

[pulsar-site] branch main updated: Adjust both left and right toc style and add missing CLI tools docs (#254)

This is an automated email from the ASF dual-hosted git repository.

liuyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 84d94c5d00a Adjust both left and right toc style and add missing CLI tools docs (#254)
84d94c5d00a is described below

commit 84d94c5d00ae2c1076a5bd46967ae0225548f45a
Author: Mercurio <32...@users.noreply.github.com>
AuthorDate: Mon Oct 17 19:00:36 2022 +0800

    Adjust both left and right toc style and add missing CLI tools docs (#254)
---
 site2/tools/build-site.sh                          |   2 +-
 site2/tools/pulsar-client-doc-gen.sh               |   2 +-
 site2/tools/pulsar-config-doc-gen.sh               |   7 +
 site2/tools/pulsar-perf-doc-gen.sh                 |   2 +-
 site2/website-next/docsify/2.10.x/CLI.md           |   3 +
 .../docsify/2.10.x/bookkeeper/README.md            |  87 +++++
 .../docsify/2.10.x/bookkeeper/_sidebar.md          |   2 +
 .../docsify/2.10.x/broker-tool/README.md           |  23 ++
 .../docsify/2.10.x/broker-tool/_sidebar.md         |   2 +
 .../website-next/docsify/2.10.x/client/_sidebar.md |   3 +-
 .../website-next/docsify/2.10.x/config/_sidebar.md |   3 +-
 .../docsify/2.10.x/pulsar-admin/_sidebar.md        |   3 +-
 .../docsify/2.10.x/pulsar-client/README.md         |  70 ++++-
 .../docsify/2.10.x/pulsar-client/_sidebar.md       |   4 +-
 .../docsify/2.10.x/pulsar-client/pulsar-client.md  |  69 ----
 .../docsify/2.10.x/pulsar-daemon/README.md         |  32 ++
 .../docsify/2.10.x/pulsar-daemon/_sidebar.md       |   2 +
 .../docsify/2.10.x/pulsar-perf/README.md           | 350 ++++++++++++++++++++-
 .../docsify/2.10.x/pulsar-perf/_sidebar.md         |   4 +-
 .../docsify/2.10.x/pulsar-perf/pulsar-perf.md      | 349 --------------------
 .../website-next/docsify/2.10.x/pulsar/_sidebar.md |   3 +-
 site2/website-next/docsify/2.6.x/CLI.md            |   3 +
 .../docsify/2.6.x/bookkeeper/README.md             |  87 +++++
 .../docsify/2.6.x/bookkeeper/_sidebar.md           |   2 +
 .../docsify/2.6.x/broker-tool/README.md            |  23 ++
 .../docsify/2.6.x/broker-tool/_sidebar.md          |   2 +
 .../website-next/docsify/2.6.x/client/_sidebar.md  |   3 +-
 .../website-next/docsify/2.6.x/config/_sidebar.md  |   3 +-
 .../docsify/2.6.x/pulsar-admin/_sidebar.md         |   3 +-
 .../docsify/2.6.x/pulsar-client/README.md          |  70 ++++-
 .../docsify/2.6.x/pulsar-client/_sidebar.md        |   4 +-
 .../docsify/2.6.x/pulsar-client/pulsar-client.md   |  69 ----
 .../docsify/2.6.x/pulsar-daemon/README.md          |  26 ++
 .../docsify/2.6.x/pulsar-daemon/_sidebar.md        |   2 +
 .../docsify/2.6.x/pulsar-perf/README.md            |  28 +-
 .../docsify/2.6.x/pulsar-perf/_sidebar.md          |   4 +-
 .../docsify/2.6.x/pulsar-perf/pulsar-perf.md       |  27 --
 .../website-next/docsify/2.6.x/pulsar/_sidebar.md  |   3 +-
 site2/website-next/docsify/2.7.x/CLI.md            |   3 +
 .../docsify/2.7.x/bookkeeper/README.md             |  86 +++++
 .../docsify/2.7.x/bookkeeper/_sidebar.md           |   2 +
 .../docsify/2.7.x/broker-tool/README.md            |  24 ++
 .../docsify/2.7.x/broker-tool/_sidebar.md          |   2 +
 .../website-next/docsify/2.7.x/client/_sidebar.md  |   3 +-
 .../website-next/docsify/2.7.x/config/_sidebar.md  |   3 +-
 .../docsify/2.7.x/pulsar-admin/_sidebar.md         |   3 +-
 .../docsify/2.7.x/pulsar-client/README.md          |  70 ++++-
 .../docsify/2.7.x/pulsar-client/_sidebar.md        |   4 +-
 .../docsify/2.7.x/pulsar-client/pulsar-client.md   |  69 ----
 .../docsify/2.7.x/pulsar-daemon/README.md          |  27 ++
 .../docsify/2.7.x/pulsar-daemon/_sidebar.md        |   2 +
 .../docsify/2.7.x/pulsar-perf/README.md            |  28 +-
 .../docsify/2.7.x/pulsar-perf/_sidebar.md          |   4 +-
 .../docsify/2.7.x/pulsar-perf/pulsar-perf.md       |  27 --
 .../website-next/docsify/2.7.x/pulsar/_sidebar.md  |   3 +-
 site2/website-next/docsify/2.8.x/CLI.md            |   3 +
 .../docsify/2.8.x/bookkeeper/README.md             |  86 +++++
 .../docsify/2.8.x/bookkeeper/_sidebar.md           |   2 +
 .../docsify/2.8.x/broker-tool/README.md            |  23 ++
 .../docsify/2.8.x/broker-tool/_sidebar.md          |   2 +
 .../website-next/docsify/2.8.x/client/_sidebar.md  |   3 +-
 .../website-next/docsify/2.8.x/config/_sidebar.md  |   3 +-
 .../docsify/2.8.x/pulsar-admin/_sidebar.md         |   3 +-
 .../docsify/2.8.x/pulsar-client/README.md          |  70 ++++-
 .../docsify/2.8.x/pulsar-client/_sidebar.md        |   4 +-
 .../docsify/2.8.x/pulsar-client/pulsar-client.md   |  69 ----
 .../docsify/2.8.x/pulsar-daemon/README.md          |  26 ++
 .../docsify/2.8.x/pulsar-daemon/_sidebar.md        |   2 +
 .../docsify/2.8.x/pulsar-perf/README.md            | 350 ++++++++++++++++++++-
 .../docsify/2.8.x/pulsar-perf/_sidebar.md          |   4 +-
 .../docsify/2.8.x/pulsar-perf/pulsar-perf.md       | 349 --------------------
 .../website-next/docsify/2.8.x/pulsar/_sidebar.md  |   3 +-
 site2/website-next/docsify/2.9.x/CLI.md            |   3 +
 .../docsify/2.9.x/bookkeeper/README.md             |  86 +++++
 .../docsify/2.9.x/bookkeeper/_sidebar.md           |   2 +
 .../docsify/2.9.x/broker-tool/README.md            |  23 ++
 .../docsify/2.9.x/broker-tool/_sidebar.md          |   2 +
 .../website-next/docsify/2.9.x/client/_sidebar.md  |   3 +-
 .../website-next/docsify/2.9.x/config/_sidebar.md  |   3 +-
 .../docsify/2.9.x/pulsar-admin/_sidebar.md         |   3 +-
 .../docsify/2.9.x/pulsar-client/README.md          |  70 ++++-
 .../docsify/2.9.x/pulsar-client/_sidebar.md        |   4 +-
 .../docsify/2.9.x/pulsar-client/pulsar-client.md   |  69 ----
 .../docsify/2.9.x/pulsar-daemon/README.md          |  26 ++
 .../docsify/2.9.x/pulsar-daemon/_sidebar.md        |   2 +
 .../docsify/2.9.x/pulsar-perf/README.md            | 350 ++++++++++++++++++++-
 .../docsify/2.9.x/pulsar-perf/_sidebar.md          |   4 +-
 .../docsify/2.9.x/pulsar-perf/pulsar-perf.md       | 349 --------------------
 .../website-next/docsify/2.9.x/pulsar/_sidebar.md  |   3 +-
 site2/website-next/docsify/_sidebar.md             |   9 +-
 site2/website-next/docsify/index.html              |   4 +-
 site2/website-next/docsify/latest/CLI.md           |   3 +
 .../docsify/latest/bookkeeper/_sidebar.md          |   2 +
 .../docsify/latest/broker-tool/_sidebar.md         |   2 +
 site2/website-next/docsify/latest/client/README.md |   2 +-
 .../website-next/docsify/latest/client/_sidebar.md |   3 +-
 .../website-next/docsify/latest/config/_sidebar.md |   3 +-
 .../docsify/latest/pulsar-admin/_sidebar.md        |   3 +-
 .../docsify/latest/pulsar-client/README.md         |   1 -
 .../docsify/latest/pulsar-client/_sidebar.md       |   4 +-
 .../docsify/latest/pulsar-daemon/_sidebar.md       |   2 +
 .../docsify/latest/pulsar-perf/README.md           |   1 -
 .../docsify/latest/pulsar-perf/_sidebar.md         |   4 +-
 .../docsify/latest/pulsar-shell/_sidebar.md        |   2 +
 .../website-next/docsify/latest/pulsar/_sidebar.md |   3 +-
 105 files changed, 2278 insertions(+), 1515 deletions(-)

diff --git a/site2/tools/build-site.sh b/site2/tools/build-site.sh
index 8189832a96c..e35f3a2c1f4 100755
--- a/site2/tools/build-site.sh
+++ b/site2/tools/build-site.sh
@@ -62,4 +62,4 @@ cp -R ./build/* "$CONTENT_DIR"
 cp -R "$WEBSITE_DIR"/static/swagger/* "$CONTENT_DIR"/swagger/
 
 # Generate document for release table
-"$TOOLS_DIR"/release-json-gen.sh $GH_TOKEN "$WEBSITE_DIR"
+"$TOOLS_DIR"/release-json-gen.sh "$GH_TOKEN" "$WEBSITE_DIR"
diff --git a/site2/tools/pulsar-client-doc-gen.sh b/site2/tools/pulsar-client-doc-gen.sh
index ae641ee9485..549df06f104 100755
--- a/site2/tools/pulsar-client-doc-gen.sh
+++ b/site2/tools/pulsar-client-doc-gen.sh
@@ -25,6 +25,6 @@ WEBSITE=$1
 VERSION=$2
 DOCS_DIR=$WEBSITE/docsify/$VERSION/pulsar-client
 
-"$ROOT_DIR"/bin/pulsar-client generate_documentation > "$DOCS_DIR"/pulsar-client.md
+"$ROOT_DIR"/bin/pulsar-client generate_documentation > "$DOCS_DIR"/README.md
 
 
diff --git a/site2/tools/pulsar-config-doc-gen.sh b/site2/tools/pulsar-config-doc-gen.sh
index 4c166b520d5..658cef21ed2 100755
--- a/site2/tools/pulsar-config-doc-gen.sh
+++ b/site2/tools/pulsar-config-doc-gen.sh
@@ -52,3 +52,10 @@ $JAVA -cp "$CLIENT_CP:$(cat "$f")" $GEN_DOCS_CLIENT -c $CLIENT_CONF.ClientConfig
 $JAVA -cp "$CLIENT_CP:$(cat "$f")" $GEN_DOCS_CLIENT -c $CLIENT_CONF.ProducerConfigurationData > "$CLIENT_DIR"/client-configuration-producer.md
 $JAVA -cp "$CLIENT_CP:$(cat "$f")" $GEN_DOCS_CLIENT -c $CLIENT_CONF.ConsumerConfigurationData > "$CLIENT_DIR"/client-configuration-consumer.md
 $JAVA -cp "$CLIENT_CP:$(cat "$f")" $GEN_DOCS_CLIENT -c $CLIENT_CONF.ReaderConfigurationData > "$CLIENT_DIR"/client-configuration-reader.md
+
+# copy CLI tools docs
+tools="bookkeeper broker-tool pulsar-daemon pulsar-shell"
+for tool in $tools
+do
+    cp "$WEBSITE/docs/reference-cli-$tool.md" "$VERSIONED_DIR/$tool/README.md"
+done
diff --git a/site2/tools/pulsar-perf-doc-gen.sh b/site2/tools/pulsar-perf-doc-gen.sh
index 67906015952..b72fe4a2c6b 100755
--- a/site2/tools/pulsar-perf-doc-gen.sh
+++ b/site2/tools/pulsar-perf-doc-gen.sh
@@ -25,7 +25,7 @@ WEBSITE=$1
 VERSION=$2
 DOCS_DIR=$WEBSITE/docsify/$VERSION/pulsar-perf
 
-"$ROOT_DIR"/bin/pulsar-perf gen-doc > "$DOCS_DIR"/pulsar-perf.md
+"$ROOT_DIR"/bin/pulsar-perf gen-doc > "$DOCS_DIR"/README.md
 
 
 
diff --git a/site2/website-next/docsify/2.10.x/CLI.md b/site2/website-next/docsify/2.10.x/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/2.10.x/bookkeeper/README.md b/site2/website-next/docsify/2.10.x/bookkeeper/README.md
new file mode 100644
index 00000000000..38661020c98
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/bookkeeper/README.md
@@ -0,0 +1,87 @@
+## `bookkeeper`
+A tool for managing BookKeeper.
+
+### Environment variables
+
+The table below lists the environment variables that you can use to configure the bookkeeper tool.
+
+|Variable|Description|Default|
+|---|---|---|
+|BOOKIE_LOG_CONF|Log4j configuration file|conf/log4j2.yaml|
+|BOOKIE_CONF|BookKeeper configuration file|conf/bk_server.conf|
+|BOOKIE_EXTRA_OPTS|Extra options to be passed to the JVM||
+|BOOKIE_EXTRA_CLASSPATH|Extra paths for BookKeeper's classpath||
+|ENTRY_FORMATTER_CLASS|The Java class used to format entries||
+|BOOKIE_PID_DIR|Folder where the BookKeeper server PID file should be stored||
+|BOOKIE_STOP_TIMEOUT|Wait time before forcefully killing the Bookie server instance if attempts to stop it are not successful||
+|BOOKIE_GC_LOG|Gc options to be passed to the jvm||
+
+
+### `autorecovery`
+Runs an auto-recovery service
+
+Usage
+```bash
+$ bookkeeper autorecovery options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery||
+
+
+### `bookie`
+Starts up a BookKeeper server (aka bookie)
+
+Usage
+```bash
+$ bookkeeper bookie options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery||
+|-readOnly|Force start a read-only bookie server|false|
+|-withAutoRecovery|Start auto-recovery service bookie server|false|
+
+
+### `localbookie`
+Runs a test ensemble of N bookies locally
+
+Usage
+```bash
+$ bookkeeper localbookie N
+```
+
+### `upgrade`
+Upgrade the bookie’s filesystem
+
+Usage
+```bash
+$ bookkeeper upgrade options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery||
+|`-u`, `--upgrade`|Upgrade the bookie’s directories||
+
+
+### `shell`
+Run shell for admin commands. To see a full listing of those commands, run bookkeeper shell without an argument.
+
+Usage
+```bash
+$ bookkeeper shell
+```
+
+Example
+```bash
+$ bookkeeper shell bookiesanity
+```
diff --git a/site2/website-next/docsify/2.10.x/bookkeeper/_sidebar.md b/site2/website-next/docsify/2.10.x/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/2.10.x/broker-tool/README.md b/site2/website-next/docsify/2.10.x/broker-tool/README.md
new file mode 100644
index 00000000000..7e5ef95ba55
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/broker-tool/README.md
@@ -0,0 +1,23 @@
+## `broker-tool`
+
+The `broker-tool` is used for operations on a specific broker.
+
+### Example
+Two ways to get more information about a command as below:
+
+```bash
+$ broker-tool help command
+$ broker-tool command --help
+```
+
+### `load-report`
+
+Collect the load report of a specific broker. 
+The command is run on a broker, and used for troubleshooting why broker can’t collect right load report.
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-i`, `--interval`| Interval to collect load report, in milliseconds ||
+|`-h`, `--help`| Display help information ||
diff --git a/site2/website-next/docsify/2.10.x/broker-tool/_sidebar.md b/site2/website-next/docsify/2.10.x/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/2.10.x/client/_sidebar.md b/site2/website-next/docsify/2.10.x/client/_sidebar.md
index 8135122b05e..304c03222e1 100644
--- a/site2/website-next/docsify/2.10.x/client/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/client/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Java](client/client-libraries-java)
diff --git a/site2/website-next/docsify/2.10.x/config/_sidebar.md b/site2/website-next/docsify/2.10.x/config/_sidebar.md
index 9958b4871a4..360d2ebcbcc 100644
--- a/site2/website-next/docsify/2.10.x/config/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/config/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [Configuration](config/reference-configuration)
diff --git a/site2/website-next/docsify/2.10.x/pulsar-admin/_sidebar.md b/site2/website-next/docsify/2.10.x/pulsar-admin/_sidebar.md
index c37222ad4e3..bebde313ceb 100644
--- a/site2/website-next/docsify/2.10.x/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/2.10.x/pulsar-client/README.md b/site2/website-next/docsify/2.10.x/pulsar-client/README.md
index 0331c05d962..c813cbecdc1 100644
--- a/site2/website-next/docsify/2.10.x/pulsar-client/README.md
+++ b/site2/website-next/docsify/2.10.x/pulsar-client/README.md
@@ -1 +1,69 @@
-> Docs for Configuration for `pulsar-client`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Produce messages to a specified topic
+
+
+```shell
+$ pulsar-client produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
+| `-db, --disable-batching` | Disable batch sending of messages|false|
+| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
+| `-s, --separator` | Character to split messages string on default is comma|,|
+| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
+| `-k, --key` | message key to add |null|
+| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
+| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
+| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
+| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
+| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
+| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Consume messages from a specified topic
+
+
+```shell
+$ pulsar-client consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-t, --subscription-type` | Subscription type.|Exclusive|
+| `--hide-content` | Do not write the message to console.|false|
+| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
+| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
+| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
+| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
+| `-q, --queue-size` | Consumer receiver queue size.|0|
+| `-p, --subscription-position` | Subscription position.|Latest|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `--hex` | Display binary messages in hex.|false|
+| `--regex` | Indicate the topic name is a regex pattern|false|
+| `-m, --subscription-mode` | Subscription mode.|Durable|
+| `-s, --subscription-name` | Subscription name.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+| `-pm, --pool-messages` | Use the pooled message|true|
+
diff --git a/site2/website-next/docsify/2.10.x/pulsar-client/_sidebar.md b/site2/website-next/docsify/2.10.x/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/2.10.x/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/2.10.x/pulsar-client/pulsar-client.md b/site2/website-next/docsify/2.10.x/pulsar-client/pulsar-client.md
deleted file mode 100644
index c813cbecdc1..00000000000
--- a/site2/website-next/docsify/2.10.x/pulsar-client/pulsar-client.md
+++ /dev/null
@@ -1,69 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Produce messages to a specified topic
-
-
-```shell
-$ pulsar-client produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
-| `-db, --disable-batching` | Disable batch sending of messages|false|
-| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
-| `-s, --separator` | Character to split messages string on default is comma|,|
-| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
-| `-k, --key` | message key to add |null|
-| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
-| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
-| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
-| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
-| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
-| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Consume messages from a specified topic
-
-
-```shell
-$ pulsar-client consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-t, --subscription-type` | Subscription type.|Exclusive|
-| `--hide-content` | Do not write the message to console.|false|
-| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
-| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
-| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
-| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
-| `-q, --queue-size` | Consumer receiver queue size.|0|
-| `-p, --subscription-position` | Subscription position.|Latest|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `--hex` | Display binary messages in hex.|false|
-| `--regex` | Indicate the topic name is a regex pattern|false|
-| `-m, --subscription-mode` | Subscription mode.|Durable|
-| `-s, --subscription-name` | Subscription name.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-| `-pm, --pool-messages` | Use the pooled message|true|
-
diff --git a/site2/website-next/docsify/2.10.x/pulsar-daemon/README.md b/site2/website-next/docsify/2.10.x/pulsar-daemon/README.md
new file mode 100644
index 00000000000..2f92d391f71
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/pulsar-daemon/README.md
@@ -0,0 +1,32 @@
+## `pulsar-daemon`
+A wrapper around the pulsar tool that’s used to start and stop processes, such as ZooKeeper, bookies, and Pulsar brokers, in the background using nohup.
+
+pulsar-daemon has a similar interface to the pulsar command but adds start and stop commands for various services. For a listing of those services, run pulsar-daemon to see the help output or see the documentation for the pulsar command.
+
+### `start`
+Start a service in the background using nohup.
+
+Usage
+```bash
+$ pulsar-daemon start service
+```
+
+### `stop`
+Stop a service that’s already been started using start.
+
+Usage
+```bash
+$ pulsar-daemon stop service options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|-force|Stop the service forcefully if not stopped by normal shutdown.|false|
+
+### `restart`
+Restart a service that has already been started.
+```bash
+$ pulsar-daemon restart service
+```
diff --git a/site2/website-next/docsify/2.10.x/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/2.10.x/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/2.10.x/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/2.10.x/pulsar-perf/README.md b/site2/website-next/docsify/2.10.x/pulsar-perf/README.md
index ef7ab6beaaa..8141daab8db 100644
--- a/site2/website-next/docsify/2.10.x/pulsar-perf/README.md
+++ b/site2/website-next/docsify/2.10.x/pulsar-perf/README.md
@@ -1 +1,349 @@
-> Docs for Configuration for `pulsar-perf`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Test pulsar producer performance.
+
+
+```shell
+$ pulsar-perf produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size (bytes)|1024|
+| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-threads, --num-test-threads` | Number of test threads|1|
+| `--separator` | Separator between the topic and topic number|-|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-d, --delay` | Mark messages with a given delay in seconds|0|
+| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-h, --help` | Help message|false|
+| `-am, --access-mode` | Producer access mode|Shared|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-pn, --producer-name` | Producer Name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
+| `-n, --num-producers` | Number of producers (per topic)|1|
+| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-z, --compression` | Compress messages payload|NONE|
+| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
+| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
+| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-o, --max-outstanding` | Max number of outstanding messages|1000|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-t, --num-topic` | Number of topics|1|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `--listener-name` | Listener name for the broker.|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
+| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
+| `--conf-file` | Configuration file|null|
+| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
+| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
+| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Test pulsar consumer performance.
+
+
+```shell
+$ pulsar-perf consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-sp, --subscription-position` | Subscription position|Latest|
+| `-h, --help` | Help message|false|
+| `--replicated` | Whether the subscription status should be replicated|false|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
+| `-st, --subscription-type` | Subscription type|Exclusive|
+| `-t, --num-topics` | Number of topics|1|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
+| `--conf-file` | Configuration file|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
+| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-pm, --pool-messages` | Use the pooled message|true|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-s, --subscriber-name` | Subscriber name prefix|null|
+| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `--listener-name` | Listener name for the broker.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+
+------------
+
+## transaction
+
+### Usage
+
+`$transaction`
+
+------------
+
+Test pulsar transaction performance.
+
+
+```shell
+$ pulsar-perf transaction [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `--txn-disable` | Disable transaction|false|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-h, --help` | Help message|false|
+| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
+| `-st, --subscription-type` | Subscription type|Shared|
+| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
+| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
+| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
+| `--conf-file` | Configuration file|null|
+| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
+| `-sp, --subscription-position` | Subscription position|Earliest|
+| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
+
+------------
+
+## read
+
+### Usage
+
+`$read`
+
+------------
+
+Test pulsar reader performance.
+
+
+```shell
+$ pulsar-perf read [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `-h, --help` | Help message|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
+| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--use-tls` | Use TLS encryption on the connection|false|
+| `--conf-file` | Configuration file|null|
+| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
+| `--listener-name` | Listener name for the broker.|null|
+| `-t, --num-topics` | Number of topics|1|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+
+------------
+
+## monitor-brokers
+
+### Usage
+
+`$monitor-brokers`
+
+------------
+
+Monitors brokers and prints to the console information about their system resource usages,
+their topic and bundle counts, their message rates, and other metrics.
+
+
+```shell
+$ pulsar-perf monitor-brokers [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--connect-string` | Zookeeper connect string|null|
+
+------------
+
+## simulation-client
+
+### Usage
+
+`$simulation-client`
+
+------------
+
+Simulate client load by maintaining producers and consumers for topics.
+
+
+```shell
+$ pulsar-perf simulation-client [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--port` | Port to listen on for controller|0|
+| `--service-url` | Pulsar Service URL|null|
+
+------------
+
+## simulation-controller
+
+### Usage
+
+`$simulation-controller`
+
+------------
+
+Provides a shell for the user to dictate how simulation clients should incur load.
+
+
+```shell
+$ pulsar-perf simulation-controller [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--cluster` | Cluster to test on|null|
+| `--client-port` | Port that the clients are listening on|0|
+| `--clients` | Comma separated list of client hostnames|null|
+
+------------
+
+## websocket-producer
+
+### Usage
+
+`$websocket-producer`
+
+------------
+
+Test pulsar websocket producer performance.
+
+
+```shell
+$ pulsar-perf websocket-producer [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size in byte|1024|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+| `-h, --help` | Help message|false|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
+| `--conf-file` | Configuration file|null|
+| `-t, --num-topic` | Number of topics|1|
+| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+
+------------
+
+## managed-ledger
+
+### Usage
+
+`$managed-ledger`
+
+------------
+
+Write directly on managed-ledgers
+
+
+```shell
+$ pulsar-perf managed-ledger [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-e, --ensemble-size` | Ledger ensemble size|1|
+| `-w, --write-quorum` | Ledger write quorum|1|
+| `-r, --rate` | Write rate msg/s across managed ledgers|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-a, --ack-quorum` | Ledger ack quorum|1|
+| `--threads` | Number of threads writing|1|
+| `-s, --size` | Message size|1024|
+| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
+| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-o, --max-outstanding` | Max number of outstanding requests|1000|
+| `-h, --help` | Help message|false|
+| `-t, --num-topic` | Number of managed ledgers|1|
+| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
+
diff --git a/site2/website-next/docsify/2.10.x/pulsar-perf/_sidebar.md b/site2/website-next/docsify/2.10.x/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/2.10.x/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/2.10.x/pulsar-perf/pulsar-perf.md b/site2/website-next/docsify/2.10.x/pulsar-perf/pulsar-perf.md
deleted file mode 100644
index 8141daab8db..00000000000
--- a/site2/website-next/docsify/2.10.x/pulsar-perf/pulsar-perf.md
+++ /dev/null
@@ -1,349 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Test pulsar producer performance.
-
-
-```shell
-$ pulsar-perf produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size (bytes)|1024|
-| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-threads, --num-test-threads` | Number of test threads|1|
-| `--separator` | Separator between the topic and topic number|-|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-d, --delay` | Mark messages with a given delay in seconds|0|
-| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-h, --help` | Help message|false|
-| `-am, --access-mode` | Producer access mode|Shared|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-pn, --producer-name` | Producer Name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
-| `-n, --num-producers` | Number of producers (per topic)|1|
-| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-z, --compression` | Compress messages payload|NONE|
-| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
-| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
-| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-o, --max-outstanding` | Max number of outstanding messages|1000|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-t, --num-topic` | Number of topics|1|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `--listener-name` | Listener name for the broker.|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
-| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
-| `--conf-file` | Configuration file|null|
-| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
-| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
-| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Test pulsar consumer performance.
-
-
-```shell
-$ pulsar-perf consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-sp, --subscription-position` | Subscription position|Latest|
-| `-h, --help` | Help message|false|
-| `--replicated` | Whether the subscription status should be replicated|false|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
-| `-st, --subscription-type` | Subscription type|Exclusive|
-| `-t, --num-topics` | Number of topics|1|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
-| `--conf-file` | Configuration file|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
-| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-pm, --pool-messages` | Use the pooled message|true|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-s, --subscriber-name` | Subscriber name prefix|null|
-| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `--listener-name` | Listener name for the broker.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-
-------------
-
-## transaction
-
-### Usage
-
-`$transaction`
-
-------------
-
-Test pulsar transaction performance.
-
-
-```shell
-$ pulsar-perf transaction [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `--txn-disable` | Disable transaction|false|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-h, --help` | Help message|false|
-| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
-| `-st, --subscription-type` | Subscription type|Shared|
-| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
-| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
-| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
-| `--conf-file` | Configuration file|null|
-| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
-| `-sp, --subscription-position` | Subscription position|Earliest|
-| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
-
-------------
-
-## read
-
-### Usage
-
-`$read`
-
-------------
-
-Test pulsar reader performance.
-
-
-```shell
-$ pulsar-perf read [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `-h, --help` | Help message|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
-| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--use-tls` | Use TLS encryption on the connection|false|
-| `--conf-file` | Configuration file|null|
-| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
-| `--listener-name` | Listener name for the broker.|null|
-| `-t, --num-topics` | Number of topics|1|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-
-------------
-
-## monitor-brokers
-
-### Usage
-
-`$monitor-brokers`
-
-------------
-
-Monitors brokers and prints to the console information about their system resource usages,
-their topic and bundle counts, their message rates, and other metrics.
-
-
-```shell
-$ pulsar-perf monitor-brokers [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--connect-string` | Zookeeper connect string|null|
-
-------------
-
-## simulation-client
-
-### Usage
-
-`$simulation-client`
-
-------------
-
-Simulate client load by maintaining producers and consumers for topics.
-
-
-```shell
-$ pulsar-perf simulation-client [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--port` | Port to listen on for controller|0|
-| `--service-url` | Pulsar Service URL|null|
-
-------------
-
-## simulation-controller
-
-### Usage
-
-`$simulation-controller`
-
-------------
-
-Provides a shell for the user to dictate how simulation clients should incur load.
-
-
-```shell
-$ pulsar-perf simulation-controller [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--cluster` | Cluster to test on|null|
-| `--client-port` | Port that the clients are listening on|0|
-| `--clients` | Comma separated list of client hostnames|null|
-
-------------
-
-## websocket-producer
-
-### Usage
-
-`$websocket-producer`
-
-------------
-
-Test pulsar websocket producer performance.
-
-
-```shell
-$ pulsar-perf websocket-producer [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size in byte|1024|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-| `-h, --help` | Help message|false|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
-| `--conf-file` | Configuration file|null|
-| `-t, --num-topic` | Number of topics|1|
-| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-
-------------
-
-## managed-ledger
-
-### Usage
-
-`$managed-ledger`
-
-------------
-
-Write directly on managed-ledgers
-
-
-```shell
-$ pulsar-perf managed-ledger [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-e, --ensemble-size` | Ledger ensemble size|1|
-| `-w, --write-quorum` | Ledger write quorum|1|
-| `-r, --rate` | Write rate msg/s across managed ledgers|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-a, --ack-quorum` | Ledger ack quorum|1|
-| `--threads` | Number of threads writing|1|
-| `-s, --size` | Message size|1024|
-| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
-| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-o, --max-outstanding` | Max number of outstanding requests|1000|
-| `-h, --help` | Help message|false|
-| `-t, --num-topic` | Number of managed ledgers|1|
-| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
-
diff --git a/site2/website-next/docsify/2.10.x/pulsar/_sidebar.md b/site2/website-next/docsify/2.10.x/pulsar/_sidebar.md
index fc05fd6f1f0..87568febfb1 100644
--- a/site2/website-next/docsify/2.10.x/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/2.10.x/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker](pulsar/broker.md)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)
diff --git a/site2/website-next/docsify/2.6.x/CLI.md b/site2/website-next/docsify/2.6.x/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/2.6.x/bookkeeper/README.md b/site2/website-next/docsify/2.6.x/bookkeeper/README.md
new file mode 100644
index 00000000000..4cf9b8d9021
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/bookkeeper/README.md
@@ -0,0 +1,87 @@
+## `bookkeeper`
+A tool for managing BookKeeper.
+
+### Environment variables
+
+The table below lists the environment variables that you can use to configure the bookkeeper tool.
+
+|Variable|Description|Default|
+|---|---|---|
+|BOOKIE_LOG_CONF|Log4j configuration file|conf/log4j2.yaml|
+|BOOKIE_CONF|BookKeeper configuration file|conf/bk_server.conf|
+|BOOKIE_EXTRA_OPTS|Extra options to be passed to the JVM||
+|BOOKIE_EXTRA_CLASSPATH|Extra paths for BookKeeper's classpath||
+|ENTRY_FORMATTER_CLASS|The Java class used to format entries||
+|BOOKIE_PID_DIR|Folder where the BookKeeper server PID file should be stored||
+|BOOKIE_STOP_TIMEOUT|Wait time before forcefully killing the Bookie server instance if attempts to stop it are not successful||
+
+
+### `auto-recovery`
+Runs an auto-recovery service daemon
+
+Usage
+```bash
+$ bookkeeper auto-recovery options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+
+
+### `bookie`
+Starts up a BookKeeper server (aka bookie)
+
+Usage
+```bash
+$ bookkeeper bookie options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|-readOnly|Force start a read-only bookie server|false|
+|-withAutoRecovery|Start auto-recovery service bookie server|false|
+
+
+### `localbookie`
+Runs a test ensemble of N bookies locally
+
+Usage
+```bash
+$ bookkeeper localbookie N
+```
+
+### `upgrade`
+Upgrade the bookie’s filesystem
+
+Usage
+```bash
+$ bookkeeper upgrade options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|`-u`, `--upgrade`|Upgrade the bookie’s directories||
+
+
+### `shell`
+Run shell for admin commands. To see a full listing of those commands, run bookkeeper shell without an argument.
+
+Usage
+```bash
+$ bookkeeper shell
+```
+
+Example
+```bash
+$ bookkeeper shell bookiesanity
+```
+
diff --git a/site2/website-next/docsify/2.6.x/bookkeeper/_sidebar.md b/site2/website-next/docsify/2.6.x/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/2.6.x/broker-tool/README.md b/site2/website-next/docsify/2.6.x/broker-tool/README.md
new file mode 100644
index 00000000000..7e5ef95ba55
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/broker-tool/README.md
@@ -0,0 +1,23 @@
+## `broker-tool`
+
+The `broker-tool` is used for operations on a specific broker.
+
+### Example
+Two ways to get more information about a command as below:
+
+```bash
+$ broker-tool help command
+$ broker-tool command --help
+```
+
+### `load-report`
+
+Collect the load report of a specific broker. 
+The command is run on a broker, and used for troubleshooting why broker can’t collect right load report.
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-i`, `--interval`| Interval to collect load report, in milliseconds ||
+|`-h`, `--help`| Display help information ||
diff --git a/site2/website-next/docsify/2.6.x/broker-tool/_sidebar.md b/site2/website-next/docsify/2.6.x/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/2.6.x/client/_sidebar.md b/site2/website-next/docsify/2.6.x/client/_sidebar.md
index 8135122b05e..304c03222e1 100644
--- a/site2/website-next/docsify/2.6.x/client/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/client/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Java](client/client-libraries-java)
diff --git a/site2/website-next/docsify/2.6.x/config/_sidebar.md b/site2/website-next/docsify/2.6.x/config/_sidebar.md
index 9958b4871a4..360d2ebcbcc 100644
--- a/site2/website-next/docsify/2.6.x/config/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/config/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [Configuration](config/reference-configuration)
diff --git a/site2/website-next/docsify/2.6.x/pulsar-admin/_sidebar.md b/site2/website-next/docsify/2.6.x/pulsar-admin/_sidebar.md
index c37222ad4e3..bebde313ceb 100644
--- a/site2/website-next/docsify/2.6.x/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/2.6.x/pulsar-client/README.md b/site2/website-next/docsify/2.6.x/pulsar-client/README.md
index 0331c05d962..c813cbecdc1 100644
--- a/site2/website-next/docsify/2.6.x/pulsar-client/README.md
+++ b/site2/website-next/docsify/2.6.x/pulsar-client/README.md
@@ -1 +1,69 @@
-> Docs for Configuration for `pulsar-client`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Produce messages to a specified topic
+
+
+```shell
+$ pulsar-client produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
+| `-db, --disable-batching` | Disable batch sending of messages|false|
+| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
+| `-s, --separator` | Character to split messages string on default is comma|,|
+| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
+| `-k, --key` | message key to add |null|
+| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
+| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
+| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
+| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
+| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
+| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Consume messages from a specified topic
+
+
+```shell
+$ pulsar-client consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-t, --subscription-type` | Subscription type.|Exclusive|
+| `--hide-content` | Do not write the message to console.|false|
+| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
+| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
+| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
+| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
+| `-q, --queue-size` | Consumer receiver queue size.|0|
+| `-p, --subscription-position` | Subscription position.|Latest|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `--hex` | Display binary messages in hex.|false|
+| `--regex` | Indicate the topic name is a regex pattern|false|
+| `-m, --subscription-mode` | Subscription mode.|Durable|
+| `-s, --subscription-name` | Subscription name.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+| `-pm, --pool-messages` | Use the pooled message|true|
+
diff --git a/site2/website-next/docsify/2.6.x/pulsar-client/_sidebar.md b/site2/website-next/docsify/2.6.x/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/2.6.x/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/2.6.x/pulsar-client/pulsar-client.md b/site2/website-next/docsify/2.6.x/pulsar-client/pulsar-client.md
deleted file mode 100644
index c813cbecdc1..00000000000
--- a/site2/website-next/docsify/2.6.x/pulsar-client/pulsar-client.md
+++ /dev/null
@@ -1,69 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Produce messages to a specified topic
-
-
-```shell
-$ pulsar-client produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
-| `-db, --disable-batching` | Disable batch sending of messages|false|
-| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
-| `-s, --separator` | Character to split messages string on default is comma|,|
-| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
-| `-k, --key` | message key to add |null|
-| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
-| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
-| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
-| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
-| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
-| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Consume messages from a specified topic
-
-
-```shell
-$ pulsar-client consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-t, --subscription-type` | Subscription type.|Exclusive|
-| `--hide-content` | Do not write the message to console.|false|
-| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
-| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
-| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
-| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
-| `-q, --queue-size` | Consumer receiver queue size.|0|
-| `-p, --subscription-position` | Subscription position.|Latest|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `--hex` | Display binary messages in hex.|false|
-| `--regex` | Indicate the topic name is a regex pattern|false|
-| `-m, --subscription-mode` | Subscription mode.|Durable|
-| `-s, --subscription-name` | Subscription name.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-| `-pm, --pool-messages` | Use the pooled message|true|
-
diff --git a/site2/website-next/docsify/2.6.x/pulsar-daemon/README.md b/site2/website-next/docsify/2.6.x/pulsar-daemon/README.md
new file mode 100644
index 00000000000..e1d30e5a9a5
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/pulsar-daemon/README.md
@@ -0,0 +1,26 @@
+## `pulsar-daemon`
+A wrapper around the pulsar tool that’s used to start and stop processes, such as ZooKeeper, bookies, and Pulsar brokers, in the background using nohup.
+
+pulsar-daemon has a similar interface to the pulsar command but adds start and stop commands for various services. For a listing of those services, run pulsar-daemon to see the help output or see the documentation for the pulsar command.
+
+### `start`
+Start a service in the background using nohup.
+
+Usage
+```bash
+$ pulsar-daemon start service
+```
+
+### `stop`
+Stop a service that’s already been started using start.
+
+Usage
+```bash
+$ pulsar-daemon stop service options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|-force|Stop the service forcefully if not stopped by normal shutdown.|false|
diff --git a/site2/website-next/docsify/2.6.x/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/2.6.x/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/2.6.x/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/2.6.x/pulsar-perf/README.md b/site2/website-next/docsify/2.6.x/pulsar-perf/README.md
index ef7ab6beaaa..b2e8ace7bf4 100644
--- a/site2/website-next/docsify/2.6.x/pulsar-perf/README.md
+++ b/site2/website-next/docsify/2.6.x/pulsar-perf/README.md
@@ -1 +1,27 @@
-> Docs for Configuration for `pulsar-perf`.
+Usage: `pulsar-perf <command>`
+
+where command is one of:
+
+    produce                 Run a producer
+    consume                 Run a consumer
+    read                    Run a topic reader
+
+    websocket-producer      Run a websocket producer
+
+    managed-ledger          Write directly on managed-ledgers
+    monitor-brokers         Continuously receive broker data and/or load reports
+    simulation-client       Run a simulation server acting as a Pulsar client
+    simulation-controller   Run a simulation controller to give commands to servers
+
+    help                    This help message
+
+or command is the full name of a class with a defined `main()` method.
+
+Environment variables:
+
+    PULSAR_LOG_CONF               Log4j configuration file (default /Users/mercury/Downloads/pulsar/conf/log4j2.yaml)
+    PULSAR_CLIENT_CONF            Configuration file for client (default: /Users/mercury/Downloads/pulsar/conf/client.conf)
+    PULSAR_EXTRA_OPTS             Extra options to be passed to the jvm
+    PULSAR_EXTRA_CLASSPATH        Add extra paths to the pulsar classpath
+
+These variable can also be set in `conf/pulsar_env.sh`
diff --git a/site2/website-next/docsify/2.6.x/pulsar-perf/_sidebar.md b/site2/website-next/docsify/2.6.x/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/2.6.x/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/2.6.x/pulsar-perf/pulsar-perf.md b/site2/website-next/docsify/2.6.x/pulsar-perf/pulsar-perf.md
deleted file mode 100644
index b2e8ace7bf4..00000000000
--- a/site2/website-next/docsify/2.6.x/pulsar-perf/pulsar-perf.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Usage: `pulsar-perf <command>`
-
-where command is one of:
-
-    produce                 Run a producer
-    consume                 Run a consumer
-    read                    Run a topic reader
-
-    websocket-producer      Run a websocket producer
-
-    managed-ledger          Write directly on managed-ledgers
-    monitor-brokers         Continuously receive broker data and/or load reports
-    simulation-client       Run a simulation server acting as a Pulsar client
-    simulation-controller   Run a simulation controller to give commands to servers
-
-    help                    This help message
-
-or command is the full name of a class with a defined `main()` method.
-
-Environment variables:
-
-    PULSAR_LOG_CONF               Log4j configuration file (default /Users/mercury/Downloads/pulsar/conf/log4j2.yaml)
-    PULSAR_CLIENT_CONF            Configuration file for client (default: /Users/mercury/Downloads/pulsar/conf/client.conf)
-    PULSAR_EXTRA_OPTS             Extra options to be passed to the jvm
-    PULSAR_EXTRA_CLASSPATH        Add extra paths to the pulsar classpath
-
-These variable can also be set in `conf/pulsar_env.sh`
diff --git a/site2/website-next/docsify/2.6.x/pulsar/_sidebar.md b/site2/website-next/docsify/2.6.x/pulsar/_sidebar.md
index d76dde33390..837740681fa 100644
--- a/site2/website-next/docsify/2.6.x/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/2.6.x/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)
     - [tokens](pulsar/tokens.md)
diff --git a/site2/website-next/docsify/2.7.x/CLI.md b/site2/website-next/docsify/2.7.x/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/2.7.x/bookkeeper/README.md b/site2/website-next/docsify/2.7.x/bookkeeper/README.md
new file mode 100644
index 00000000000..1bd3c0f7f18
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/bookkeeper/README.md
@@ -0,0 +1,86 @@
+## `bookkeeper`
+A tool for managing BookKeeper.
+
+### Environment variables
+
+The table below lists the environment variables that you can use to configure the bookkeeper tool.
+
+|Variable|Description|Default|
+|---|---|---|
+|BOOKIE_LOG_CONF|Log4j configuration file|conf/log4j2.yaml|
+|BOOKIE_CONF|BookKeeper configuration file|conf/bk_server.conf|
+|BOOKIE_EXTRA_OPTS|Extra options to be passed to the JVM||
+|BOOKIE_EXTRA_CLASSPATH|Extra paths for BookKeeper's classpath||
+|ENTRY_FORMATTER_CLASS|The Java class used to format entries||
+|BOOKIE_PID_DIR|Folder where the BookKeeper server PID file should be stored||
+|BOOKIE_STOP_TIMEOUT|Wait time before forcefully killing the Bookie server instance if attempts to stop it are not successful||
+
+
+### `auto-recovery`
+Runs an auto-recovery service daemon
+
+Usage
+```bash
+$ bookkeeper auto-recovery options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+
+
+### `bookie`
+Starts up a BookKeeper server (aka bookie)
+
+Usage
+```bash
+$ bookkeeper bookie options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|-readOnly|Force start a read-only bookie server|false|
+|-withAutoRecovery|Start auto-recovery service bookie server|false|
+
+
+### `localbookie`
+Runs a test ensemble of N bookies locally
+
+Usage
+```bash
+$ bookkeeper localbookie N
+```
+
+### `upgrade`
+Upgrade the bookie’s filesystem
+
+Usage
+```bash
+$ bookkeeper upgrade options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|`-u`, `--upgrade`|Upgrade the bookie’s directories||
+
+
+### `shell`
+Run shell for admin commands. To see a full listing of those commands, run bookkeeper shell without an argument.
+
+Usage
+```bash
+$ bookkeeper shell
+```
+
+Example
+```bash
+$ bookkeeper shell bookiesanity
+```
diff --git a/site2/website-next/docsify/2.7.x/bookkeeper/_sidebar.md b/site2/website-next/docsify/2.7.x/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/2.7.x/broker-tool/README.md b/site2/website-next/docsify/2.7.x/broker-tool/README.md
new file mode 100644
index 00000000000..bef4aa42c65
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/broker-tool/README.md
@@ -0,0 +1,24 @@
+## `broker-tool`
+
+The `broker-tool` is used for operations on a specific broker.
+
+### Example
+Two ways to get more information about a command as below:
+
+```bash
+$ broker-tool help command
+$ broker-tool command --help
+```
+
+### `load-report`
+
+Collect the load report of a specific broker. 
+The command is run on a broker, and used for troubleshooting why broker can’t collect right load report.
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-i`, `--interval`| Interval to collect load report, in milliseconds ||
+|`-h`, `--help`| Display help information ||
+
diff --git a/site2/website-next/docsify/2.7.x/broker-tool/_sidebar.md b/site2/website-next/docsify/2.7.x/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/2.7.x/client/_sidebar.md b/site2/website-next/docsify/2.7.x/client/_sidebar.md
index 8135122b05e..304c03222e1 100644
--- a/site2/website-next/docsify/2.7.x/client/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/client/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Java](client/client-libraries-java)
diff --git a/site2/website-next/docsify/2.7.x/config/_sidebar.md b/site2/website-next/docsify/2.7.x/config/_sidebar.md
index 9958b4871a4..360d2ebcbcc 100644
--- a/site2/website-next/docsify/2.7.x/config/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/config/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [Configuration](config/reference-configuration)
diff --git a/site2/website-next/docsify/2.7.x/pulsar-admin/_sidebar.md b/site2/website-next/docsify/2.7.x/pulsar-admin/_sidebar.md
index c37222ad4e3..bebde313ceb 100644
--- a/site2/website-next/docsify/2.7.x/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/2.7.x/pulsar-client/README.md b/site2/website-next/docsify/2.7.x/pulsar-client/README.md
index 0331c05d962..c813cbecdc1 100644
--- a/site2/website-next/docsify/2.7.x/pulsar-client/README.md
+++ b/site2/website-next/docsify/2.7.x/pulsar-client/README.md
@@ -1 +1,69 @@
-> Docs for Configuration for `pulsar-client`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Produce messages to a specified topic
+
+
+```shell
+$ pulsar-client produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
+| `-db, --disable-batching` | Disable batch sending of messages|false|
+| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
+| `-s, --separator` | Character to split messages string on default is comma|,|
+| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
+| `-k, --key` | message key to add |null|
+| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
+| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
+| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
+| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
+| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
+| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Consume messages from a specified topic
+
+
+```shell
+$ pulsar-client consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-t, --subscription-type` | Subscription type.|Exclusive|
+| `--hide-content` | Do not write the message to console.|false|
+| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
+| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
+| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
+| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
+| `-q, --queue-size` | Consumer receiver queue size.|0|
+| `-p, --subscription-position` | Subscription position.|Latest|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `--hex` | Display binary messages in hex.|false|
+| `--regex` | Indicate the topic name is a regex pattern|false|
+| `-m, --subscription-mode` | Subscription mode.|Durable|
+| `-s, --subscription-name` | Subscription name.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+| `-pm, --pool-messages` | Use the pooled message|true|
+
diff --git a/site2/website-next/docsify/2.7.x/pulsar-client/_sidebar.md b/site2/website-next/docsify/2.7.x/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/2.7.x/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/2.7.x/pulsar-client/pulsar-client.md b/site2/website-next/docsify/2.7.x/pulsar-client/pulsar-client.md
deleted file mode 100644
index c813cbecdc1..00000000000
--- a/site2/website-next/docsify/2.7.x/pulsar-client/pulsar-client.md
+++ /dev/null
@@ -1,69 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Produce messages to a specified topic
-
-
-```shell
-$ pulsar-client produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
-| `-db, --disable-batching` | Disable batch sending of messages|false|
-| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
-| `-s, --separator` | Character to split messages string on default is comma|,|
-| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
-| `-k, --key` | message key to add |null|
-| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
-| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
-| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
-| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
-| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
-| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Consume messages from a specified topic
-
-
-```shell
-$ pulsar-client consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-t, --subscription-type` | Subscription type.|Exclusive|
-| `--hide-content` | Do not write the message to console.|false|
-| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
-| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
-| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
-| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
-| `-q, --queue-size` | Consumer receiver queue size.|0|
-| `-p, --subscription-position` | Subscription position.|Latest|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `--hex` | Display binary messages in hex.|false|
-| `--regex` | Indicate the topic name is a regex pattern|false|
-| `-m, --subscription-mode` | Subscription mode.|Durable|
-| `-s, --subscription-name` | Subscription name.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-| `-pm, --pool-messages` | Use the pooled message|true|
-
diff --git a/site2/website-next/docsify/2.7.x/pulsar-daemon/README.md b/site2/website-next/docsify/2.7.x/pulsar-daemon/README.md
new file mode 100644
index 00000000000..e4e1c3771aa
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/pulsar-daemon/README.md
@@ -0,0 +1,27 @@
+## `pulsar-daemon`
+A wrapper around the pulsar tool that’s used to start and stop processes, such as ZooKeeper, bookies, and Pulsar brokers, in the background using nohup.
+
+pulsar-daemon has a similar interface to the pulsar command but adds start and stop commands for various services. For a listing of those services, run pulsar-daemon to see the help output or see the documentation for the pulsar command.
+
+### `start`
+Start a service in the background using nohup.
+
+Usage
+```bash
+$ pulsar-daemon start service
+```
+
+### `stop`
+Stop a service that’s already been started using start.
+
+Usage
+```bash
+$ pulsar-daemon stop service options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|-force|Stop the service forcefully if not stopped by normal shutdown.|false|
+
diff --git a/site2/website-next/docsify/2.7.x/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/2.7.x/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/2.7.x/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/2.7.x/pulsar-perf/README.md b/site2/website-next/docsify/2.7.x/pulsar-perf/README.md
index ef7ab6beaaa..b2e8ace7bf4 100644
--- a/site2/website-next/docsify/2.7.x/pulsar-perf/README.md
+++ b/site2/website-next/docsify/2.7.x/pulsar-perf/README.md
@@ -1 +1,27 @@
-> Docs for Configuration for `pulsar-perf`.
+Usage: `pulsar-perf <command>`
+
+where command is one of:
+
+    produce                 Run a producer
+    consume                 Run a consumer
+    read                    Run a topic reader
+
+    websocket-producer      Run a websocket producer
+
+    managed-ledger          Write directly on managed-ledgers
+    monitor-brokers         Continuously receive broker data and/or load reports
+    simulation-client       Run a simulation server acting as a Pulsar client
+    simulation-controller   Run a simulation controller to give commands to servers
+
+    help                    This help message
+
+or command is the full name of a class with a defined `main()` method.
+
+Environment variables:
+
+    PULSAR_LOG_CONF               Log4j configuration file (default /Users/mercury/Downloads/pulsar/conf/log4j2.yaml)
+    PULSAR_CLIENT_CONF            Configuration file for client (default: /Users/mercury/Downloads/pulsar/conf/client.conf)
+    PULSAR_EXTRA_OPTS             Extra options to be passed to the jvm
+    PULSAR_EXTRA_CLASSPATH        Add extra paths to the pulsar classpath
+
+These variable can also be set in `conf/pulsar_env.sh`
diff --git a/site2/website-next/docsify/2.7.x/pulsar-perf/_sidebar.md b/site2/website-next/docsify/2.7.x/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/2.7.x/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/2.7.x/pulsar-perf/pulsar-perf.md b/site2/website-next/docsify/2.7.x/pulsar-perf/pulsar-perf.md
deleted file mode 100644
index b2e8ace7bf4..00000000000
--- a/site2/website-next/docsify/2.7.x/pulsar-perf/pulsar-perf.md
+++ /dev/null
@@ -1,27 +0,0 @@
-Usage: `pulsar-perf <command>`
-
-where command is one of:
-
-    produce                 Run a producer
-    consume                 Run a consumer
-    read                    Run a topic reader
-
-    websocket-producer      Run a websocket producer
-
-    managed-ledger          Write directly on managed-ledgers
-    monitor-brokers         Continuously receive broker data and/or load reports
-    simulation-client       Run a simulation server acting as a Pulsar client
-    simulation-controller   Run a simulation controller to give commands to servers
-
-    help                    This help message
-
-or command is the full name of a class with a defined `main()` method.
-
-Environment variables:
-
-    PULSAR_LOG_CONF               Log4j configuration file (default /Users/mercury/Downloads/pulsar/conf/log4j2.yaml)
-    PULSAR_CLIENT_CONF            Configuration file for client (default: /Users/mercury/Downloads/pulsar/conf/client.conf)
-    PULSAR_EXTRA_OPTS             Extra options to be passed to the jvm
-    PULSAR_EXTRA_CLASSPATH        Add extra paths to the pulsar classpath
-
-These variable can also be set in `conf/pulsar_env.sh`
diff --git a/site2/website-next/docsify/2.7.x/pulsar/_sidebar.md b/site2/website-next/docsify/2.7.x/pulsar/_sidebar.md
index fe2261d9fe8..99c5f22ca16 100644
--- a/site2/website-next/docsify/2.7.x/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/2.7.x/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)
     - [tokens](pulsar/tokens.md)
diff --git a/site2/website-next/docsify/2.8.x/CLI.md b/site2/website-next/docsify/2.8.x/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/2.8.x/bookkeeper/README.md b/site2/website-next/docsify/2.8.x/bookkeeper/README.md
new file mode 100644
index 00000000000..1bd3c0f7f18
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/bookkeeper/README.md
@@ -0,0 +1,86 @@
+## `bookkeeper`
+A tool for managing BookKeeper.
+
+### Environment variables
+
+The table below lists the environment variables that you can use to configure the bookkeeper tool.
+
+|Variable|Description|Default|
+|---|---|---|
+|BOOKIE_LOG_CONF|Log4j configuration file|conf/log4j2.yaml|
+|BOOKIE_CONF|BookKeeper configuration file|conf/bk_server.conf|
+|BOOKIE_EXTRA_OPTS|Extra options to be passed to the JVM||
+|BOOKIE_EXTRA_CLASSPATH|Extra paths for BookKeeper's classpath||
+|ENTRY_FORMATTER_CLASS|The Java class used to format entries||
+|BOOKIE_PID_DIR|Folder where the BookKeeper server PID file should be stored||
+|BOOKIE_STOP_TIMEOUT|Wait time before forcefully killing the Bookie server instance if attempts to stop it are not successful||
+
+
+### `auto-recovery`
+Runs an auto-recovery service daemon
+
+Usage
+```bash
+$ bookkeeper auto-recovery options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+
+
+### `bookie`
+Starts up a BookKeeper server (aka bookie)
+
+Usage
+```bash
+$ bookkeeper bookie options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|-readOnly|Force start a read-only bookie server|false|
+|-withAutoRecovery|Start auto-recovery service bookie server|false|
+
+
+### `localbookie`
+Runs a test ensemble of N bookies locally
+
+Usage
+```bash
+$ bookkeeper localbookie N
+```
+
+### `upgrade`
+Upgrade the bookie’s filesystem
+
+Usage
+```bash
+$ bookkeeper upgrade options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|`-u`, `--upgrade`|Upgrade the bookie’s directories||
+
+
+### `shell`
+Run shell for admin commands. To see a full listing of those commands, run bookkeeper shell without an argument.
+
+Usage
+```bash
+$ bookkeeper shell
+```
+
+Example
+```bash
+$ bookkeeper shell bookiesanity
+```
diff --git a/site2/website-next/docsify/2.8.x/bookkeeper/_sidebar.md b/site2/website-next/docsify/2.8.x/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/2.8.x/broker-tool/README.md b/site2/website-next/docsify/2.8.x/broker-tool/README.md
new file mode 100644
index 00000000000..7e5ef95ba55
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/broker-tool/README.md
@@ -0,0 +1,23 @@
+## `broker-tool`
+
+The `broker-tool` is used for operations on a specific broker.
+
+### Example
+Two ways to get more information about a command as below:
+
+```bash
+$ broker-tool help command
+$ broker-tool command --help
+```
+
+### `load-report`
+
+Collect the load report of a specific broker. 
+The command is run on a broker, and used for troubleshooting why broker can’t collect right load report.
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-i`, `--interval`| Interval to collect load report, in milliseconds ||
+|`-h`, `--help`| Display help information ||
diff --git a/site2/website-next/docsify/2.8.x/broker-tool/_sidebar.md b/site2/website-next/docsify/2.8.x/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/2.8.x/client/_sidebar.md b/site2/website-next/docsify/2.8.x/client/_sidebar.md
index 8135122b05e..304c03222e1 100644
--- a/site2/website-next/docsify/2.8.x/client/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/client/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Java](client/client-libraries-java)
diff --git a/site2/website-next/docsify/2.8.x/config/_sidebar.md b/site2/website-next/docsify/2.8.x/config/_sidebar.md
index 9958b4871a4..360d2ebcbcc 100644
--- a/site2/website-next/docsify/2.8.x/config/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/config/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [Configuration](config/reference-configuration)
diff --git a/site2/website-next/docsify/2.8.x/pulsar-admin/_sidebar.md b/site2/website-next/docsify/2.8.x/pulsar-admin/_sidebar.md
index c37222ad4e3..bebde313ceb 100644
--- a/site2/website-next/docsify/2.8.x/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/2.8.x/pulsar-client/README.md b/site2/website-next/docsify/2.8.x/pulsar-client/README.md
index 0331c05d962..c813cbecdc1 100644
--- a/site2/website-next/docsify/2.8.x/pulsar-client/README.md
+++ b/site2/website-next/docsify/2.8.x/pulsar-client/README.md
@@ -1 +1,69 @@
-> Docs for Configuration for `pulsar-client`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Produce messages to a specified topic
+
+
+```shell
+$ pulsar-client produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
+| `-db, --disable-batching` | Disable batch sending of messages|false|
+| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
+| `-s, --separator` | Character to split messages string on default is comma|,|
+| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
+| `-k, --key` | message key to add |null|
+| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
+| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
+| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
+| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
+| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
+| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Consume messages from a specified topic
+
+
+```shell
+$ pulsar-client consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-t, --subscription-type` | Subscription type.|Exclusive|
+| `--hide-content` | Do not write the message to console.|false|
+| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
+| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
+| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
+| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
+| `-q, --queue-size` | Consumer receiver queue size.|0|
+| `-p, --subscription-position` | Subscription position.|Latest|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `--hex` | Display binary messages in hex.|false|
+| `--regex` | Indicate the topic name is a regex pattern|false|
+| `-m, --subscription-mode` | Subscription mode.|Durable|
+| `-s, --subscription-name` | Subscription name.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+| `-pm, --pool-messages` | Use the pooled message|true|
+
diff --git a/site2/website-next/docsify/2.8.x/pulsar-client/_sidebar.md b/site2/website-next/docsify/2.8.x/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/2.8.x/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/2.8.x/pulsar-client/pulsar-client.md b/site2/website-next/docsify/2.8.x/pulsar-client/pulsar-client.md
deleted file mode 100644
index c813cbecdc1..00000000000
--- a/site2/website-next/docsify/2.8.x/pulsar-client/pulsar-client.md
+++ /dev/null
@@ -1,69 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Produce messages to a specified topic
-
-
-```shell
-$ pulsar-client produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
-| `-db, --disable-batching` | Disable batch sending of messages|false|
-| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
-| `-s, --separator` | Character to split messages string on default is comma|,|
-| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
-| `-k, --key` | message key to add |null|
-| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
-| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
-| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
-| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
-| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
-| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Consume messages from a specified topic
-
-
-```shell
-$ pulsar-client consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-t, --subscription-type` | Subscription type.|Exclusive|
-| `--hide-content` | Do not write the message to console.|false|
-| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
-| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
-| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
-| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
-| `-q, --queue-size` | Consumer receiver queue size.|0|
-| `-p, --subscription-position` | Subscription position.|Latest|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `--hex` | Display binary messages in hex.|false|
-| `--regex` | Indicate the topic name is a regex pattern|false|
-| `-m, --subscription-mode` | Subscription mode.|Durable|
-| `-s, --subscription-name` | Subscription name.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-| `-pm, --pool-messages` | Use the pooled message|true|
-
diff --git a/site2/website-next/docsify/2.8.x/pulsar-daemon/README.md b/site2/website-next/docsify/2.8.x/pulsar-daemon/README.md
new file mode 100644
index 00000000000..e1d30e5a9a5
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/pulsar-daemon/README.md
@@ -0,0 +1,26 @@
+## `pulsar-daemon`
+A wrapper around the pulsar tool that’s used to start and stop processes, such as ZooKeeper, bookies, and Pulsar brokers, in the background using nohup.
+
+pulsar-daemon has a similar interface to the pulsar command but adds start and stop commands for various services. For a listing of those services, run pulsar-daemon to see the help output or see the documentation for the pulsar command.
+
+### `start`
+Start a service in the background using nohup.
+
+Usage
+```bash
+$ pulsar-daemon start service
+```
+
+### `stop`
+Stop a service that’s already been started using start.
+
+Usage
+```bash
+$ pulsar-daemon stop service options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|-force|Stop the service forcefully if not stopped by normal shutdown.|false|
diff --git a/site2/website-next/docsify/2.8.x/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/2.8.x/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/2.8.x/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/2.8.x/pulsar-perf/README.md b/site2/website-next/docsify/2.8.x/pulsar-perf/README.md
index ef7ab6beaaa..8141daab8db 100644
--- a/site2/website-next/docsify/2.8.x/pulsar-perf/README.md
+++ b/site2/website-next/docsify/2.8.x/pulsar-perf/README.md
@@ -1 +1,349 @@
-> Docs for Configuration for `pulsar-perf`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Test pulsar producer performance.
+
+
+```shell
+$ pulsar-perf produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size (bytes)|1024|
+| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-threads, --num-test-threads` | Number of test threads|1|
+| `--separator` | Separator between the topic and topic number|-|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-d, --delay` | Mark messages with a given delay in seconds|0|
+| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-h, --help` | Help message|false|
+| `-am, --access-mode` | Producer access mode|Shared|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-pn, --producer-name` | Producer Name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
+| `-n, --num-producers` | Number of producers (per topic)|1|
+| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-z, --compression` | Compress messages payload|NONE|
+| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
+| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
+| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-o, --max-outstanding` | Max number of outstanding messages|1000|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-t, --num-topic` | Number of topics|1|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `--listener-name` | Listener name for the broker.|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
+| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
+| `--conf-file` | Configuration file|null|
+| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
+| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
+| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Test pulsar consumer performance.
+
+
+```shell
+$ pulsar-perf consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-sp, --subscription-position` | Subscription position|Latest|
+| `-h, --help` | Help message|false|
+| `--replicated` | Whether the subscription status should be replicated|false|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
+| `-st, --subscription-type` | Subscription type|Exclusive|
+| `-t, --num-topics` | Number of topics|1|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
+| `--conf-file` | Configuration file|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
+| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-pm, --pool-messages` | Use the pooled message|true|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-s, --subscriber-name` | Subscriber name prefix|null|
+| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `--listener-name` | Listener name for the broker.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+
+------------
+
+## transaction
+
+### Usage
+
+`$transaction`
+
+------------
+
+Test pulsar transaction performance.
+
+
+```shell
+$ pulsar-perf transaction [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `--txn-disable` | Disable transaction|false|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-h, --help` | Help message|false|
+| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
+| `-st, --subscription-type` | Subscription type|Shared|
+| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
+| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
+| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
+| `--conf-file` | Configuration file|null|
+| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
+| `-sp, --subscription-position` | Subscription position|Earliest|
+| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
+
+------------
+
+## read
+
+### Usage
+
+`$read`
+
+------------
+
+Test pulsar reader performance.
+
+
+```shell
+$ pulsar-perf read [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `-h, --help` | Help message|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
+| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--use-tls` | Use TLS encryption on the connection|false|
+| `--conf-file` | Configuration file|null|
+| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
+| `--listener-name` | Listener name for the broker.|null|
+| `-t, --num-topics` | Number of topics|1|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+
+------------
+
+## monitor-brokers
+
+### Usage
+
+`$monitor-brokers`
+
+------------
+
+Monitors brokers and prints to the console information about their system resource usages,
+their topic and bundle counts, their message rates, and other metrics.
+
+
+```shell
+$ pulsar-perf monitor-brokers [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--connect-string` | Zookeeper connect string|null|
+
+------------
+
+## simulation-client
+
+### Usage
+
+`$simulation-client`
+
+------------
+
+Simulate client load by maintaining producers and consumers for topics.
+
+
+```shell
+$ pulsar-perf simulation-client [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--port` | Port to listen on for controller|0|
+| `--service-url` | Pulsar Service URL|null|
+
+------------
+
+## simulation-controller
+
+### Usage
+
+`$simulation-controller`
+
+------------
+
+Provides a shell for the user to dictate how simulation clients should incur load.
+
+
+```shell
+$ pulsar-perf simulation-controller [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--cluster` | Cluster to test on|null|
+| `--client-port` | Port that the clients are listening on|0|
+| `--clients` | Comma separated list of client hostnames|null|
+
+------------
+
+## websocket-producer
+
+### Usage
+
+`$websocket-producer`
+
+------------
+
+Test pulsar websocket producer performance.
+
+
+```shell
+$ pulsar-perf websocket-producer [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size in byte|1024|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+| `-h, --help` | Help message|false|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
+| `--conf-file` | Configuration file|null|
+| `-t, --num-topic` | Number of topics|1|
+| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+
+------------
+
+## managed-ledger
+
+### Usage
+
+`$managed-ledger`
+
+------------
+
+Write directly on managed-ledgers
+
+
+```shell
+$ pulsar-perf managed-ledger [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-e, --ensemble-size` | Ledger ensemble size|1|
+| `-w, --write-quorum` | Ledger write quorum|1|
+| `-r, --rate` | Write rate msg/s across managed ledgers|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-a, --ack-quorum` | Ledger ack quorum|1|
+| `--threads` | Number of threads writing|1|
+| `-s, --size` | Message size|1024|
+| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
+| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-o, --max-outstanding` | Max number of outstanding requests|1000|
+| `-h, --help` | Help message|false|
+| `-t, --num-topic` | Number of managed ledgers|1|
+| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
+
diff --git a/site2/website-next/docsify/2.8.x/pulsar-perf/_sidebar.md b/site2/website-next/docsify/2.8.x/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/2.8.x/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/2.8.x/pulsar-perf/pulsar-perf.md b/site2/website-next/docsify/2.8.x/pulsar-perf/pulsar-perf.md
deleted file mode 100644
index 8141daab8db..00000000000
--- a/site2/website-next/docsify/2.8.x/pulsar-perf/pulsar-perf.md
+++ /dev/null
@@ -1,349 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Test pulsar producer performance.
-
-
-```shell
-$ pulsar-perf produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size (bytes)|1024|
-| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-threads, --num-test-threads` | Number of test threads|1|
-| `--separator` | Separator between the topic and topic number|-|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-d, --delay` | Mark messages with a given delay in seconds|0|
-| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-h, --help` | Help message|false|
-| `-am, --access-mode` | Producer access mode|Shared|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-pn, --producer-name` | Producer Name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
-| `-n, --num-producers` | Number of producers (per topic)|1|
-| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-z, --compression` | Compress messages payload|NONE|
-| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
-| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
-| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-o, --max-outstanding` | Max number of outstanding messages|1000|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-t, --num-topic` | Number of topics|1|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `--listener-name` | Listener name for the broker.|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
-| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
-| `--conf-file` | Configuration file|null|
-| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
-| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
-| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Test pulsar consumer performance.
-
-
-```shell
-$ pulsar-perf consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-sp, --subscription-position` | Subscription position|Latest|
-| `-h, --help` | Help message|false|
-| `--replicated` | Whether the subscription status should be replicated|false|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
-| `-st, --subscription-type` | Subscription type|Exclusive|
-| `-t, --num-topics` | Number of topics|1|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
-| `--conf-file` | Configuration file|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
-| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-pm, --pool-messages` | Use the pooled message|true|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-s, --subscriber-name` | Subscriber name prefix|null|
-| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `--listener-name` | Listener name for the broker.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-
-------------
-
-## transaction
-
-### Usage
-
-`$transaction`
-
-------------
-
-Test pulsar transaction performance.
-
-
-```shell
-$ pulsar-perf transaction [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `--txn-disable` | Disable transaction|false|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-h, --help` | Help message|false|
-| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
-| `-st, --subscription-type` | Subscription type|Shared|
-| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
-| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
-| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
-| `--conf-file` | Configuration file|null|
-| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
-| `-sp, --subscription-position` | Subscription position|Earliest|
-| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
-
-------------
-
-## read
-
-### Usage
-
-`$read`
-
-------------
-
-Test pulsar reader performance.
-
-
-```shell
-$ pulsar-perf read [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `-h, --help` | Help message|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
-| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--use-tls` | Use TLS encryption on the connection|false|
-| `--conf-file` | Configuration file|null|
-| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
-| `--listener-name` | Listener name for the broker.|null|
-| `-t, --num-topics` | Number of topics|1|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-
-------------
-
-## monitor-brokers
-
-### Usage
-
-`$monitor-brokers`
-
-------------
-
-Monitors brokers and prints to the console information about their system resource usages,
-their topic and bundle counts, their message rates, and other metrics.
-
-
-```shell
-$ pulsar-perf monitor-brokers [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--connect-string` | Zookeeper connect string|null|
-
-------------
-
-## simulation-client
-
-### Usage
-
-`$simulation-client`
-
-------------
-
-Simulate client load by maintaining producers and consumers for topics.
-
-
-```shell
-$ pulsar-perf simulation-client [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--port` | Port to listen on for controller|0|
-| `--service-url` | Pulsar Service URL|null|
-
-------------
-
-## simulation-controller
-
-### Usage
-
-`$simulation-controller`
-
-------------
-
-Provides a shell for the user to dictate how simulation clients should incur load.
-
-
-```shell
-$ pulsar-perf simulation-controller [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--cluster` | Cluster to test on|null|
-| `--client-port` | Port that the clients are listening on|0|
-| `--clients` | Comma separated list of client hostnames|null|
-
-------------
-
-## websocket-producer
-
-### Usage
-
-`$websocket-producer`
-
-------------
-
-Test pulsar websocket producer performance.
-
-
-```shell
-$ pulsar-perf websocket-producer [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size in byte|1024|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-| `-h, --help` | Help message|false|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
-| `--conf-file` | Configuration file|null|
-| `-t, --num-topic` | Number of topics|1|
-| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-
-------------
-
-## managed-ledger
-
-### Usage
-
-`$managed-ledger`
-
-------------
-
-Write directly on managed-ledgers
-
-
-```shell
-$ pulsar-perf managed-ledger [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-e, --ensemble-size` | Ledger ensemble size|1|
-| `-w, --write-quorum` | Ledger write quorum|1|
-| `-r, --rate` | Write rate msg/s across managed ledgers|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-a, --ack-quorum` | Ledger ack quorum|1|
-| `--threads` | Number of threads writing|1|
-| `-s, --size` | Message size|1024|
-| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
-| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-o, --max-outstanding` | Max number of outstanding requests|1000|
-| `-h, --help` | Help message|false|
-| `-t, --num-topic` | Number of managed ledgers|1|
-| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
-
diff --git a/site2/website-next/docsify/2.8.x/pulsar/_sidebar.md b/site2/website-next/docsify/2.8.x/pulsar/_sidebar.md
index fc05fd6f1f0..87568febfb1 100644
--- a/site2/website-next/docsify/2.8.x/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/2.8.x/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker](pulsar/broker.md)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)
diff --git a/site2/website-next/docsify/2.9.x/CLI.md b/site2/website-next/docsify/2.9.x/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/2.9.x/bookkeeper/README.md b/site2/website-next/docsify/2.9.x/bookkeeper/README.md
new file mode 100644
index 00000000000..1bd3c0f7f18
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/bookkeeper/README.md
@@ -0,0 +1,86 @@
+## `bookkeeper`
+A tool for managing BookKeeper.
+
+### Environment variables
+
+The table below lists the environment variables that you can use to configure the bookkeeper tool.
+
+|Variable|Description|Default|
+|---|---|---|
+|BOOKIE_LOG_CONF|Log4j configuration file|conf/log4j2.yaml|
+|BOOKIE_CONF|BookKeeper configuration file|conf/bk_server.conf|
+|BOOKIE_EXTRA_OPTS|Extra options to be passed to the JVM||
+|BOOKIE_EXTRA_CLASSPATH|Extra paths for BookKeeper's classpath||
+|ENTRY_FORMATTER_CLASS|The Java class used to format entries||
+|BOOKIE_PID_DIR|Folder where the BookKeeper server PID file should be stored||
+|BOOKIE_STOP_TIMEOUT|Wait time before forcefully killing the Bookie server instance if attempts to stop it are not successful||
+
+
+### `auto-recovery`
+Runs an auto-recovery service daemon
+
+Usage
+```bash
+$ bookkeeper auto-recovery options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+
+
+### `bookie`
+Starts up a BookKeeper server (aka bookie)
+
+Usage
+```bash
+$ bookkeeper bookie options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|-readOnly|Force start a read-only bookie server|false|
+|-withAutoRecovery|Start auto-recovery service bookie server|false|
+
+
+### `localbookie`
+Runs a test ensemble of N bookies locally
+
+Usage
+```bash
+$ bookkeeper localbookie N
+```
+
+### `upgrade`
+Upgrade the bookie’s filesystem
+
+Usage
+```bash
+$ bookkeeper upgrade options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-c`, `--conf`|Configuration for the auto-recovery daemon||
+|`-u`, `--upgrade`|Upgrade the bookie’s directories||
+
+
+### `shell`
+Run shell for admin commands. To see a full listing of those commands, run bookkeeper shell without an argument.
+
+Usage
+```bash
+$ bookkeeper shell
+```
+
+Example
+```bash
+$ bookkeeper shell bookiesanity
+```
diff --git a/site2/website-next/docsify/2.9.x/bookkeeper/_sidebar.md b/site2/website-next/docsify/2.9.x/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/2.9.x/broker-tool/README.md b/site2/website-next/docsify/2.9.x/broker-tool/README.md
new file mode 100644
index 00000000000..7e5ef95ba55
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/broker-tool/README.md
@@ -0,0 +1,23 @@
+## `broker-tool`
+
+The `broker-tool` is used for operations on a specific broker.
+
+### Example
+Two ways to get more information about a command as below:
+
+```bash
+$ broker-tool help command
+$ broker-tool command --help
+```
+
+### `load-report`
+
+Collect the load report of a specific broker. 
+The command is run on a broker, and used for troubleshooting why broker can’t collect right load report.
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|`-i`, `--interval`| Interval to collect load report, in milliseconds ||
+|`-h`, `--help`| Display help information ||
diff --git a/site2/website-next/docsify/2.9.x/broker-tool/_sidebar.md b/site2/website-next/docsify/2.9.x/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/2.9.x/client/_sidebar.md b/site2/website-next/docsify/2.9.x/client/_sidebar.md
index 8135122b05e..304c03222e1 100644
--- a/site2/website-next/docsify/2.9.x/client/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/client/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Java](client/client-libraries-java)
diff --git a/site2/website-next/docsify/2.9.x/config/_sidebar.md b/site2/website-next/docsify/2.9.x/config/_sidebar.md
index 9958b4871a4..360d2ebcbcc 100644
--- a/site2/website-next/docsify/2.9.x/config/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/config/_sidebar.md
@@ -1,2 +1,3 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [Configuration](config/reference-configuration)
diff --git a/site2/website-next/docsify/2.9.x/pulsar-admin/_sidebar.md b/site2/website-next/docsify/2.9.x/pulsar-admin/_sidebar.md
index c37222ad4e3..bebde313ceb 100644
--- a/site2/website-next/docsify/2.9.x/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/2.9.x/pulsar-client/README.md b/site2/website-next/docsify/2.9.x/pulsar-client/README.md
index 0331c05d962..c813cbecdc1 100644
--- a/site2/website-next/docsify/2.9.x/pulsar-client/README.md
+++ b/site2/website-next/docsify/2.9.x/pulsar-client/README.md
@@ -1 +1,69 @@
-> Docs for Configuration for `pulsar-client`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Produce messages to a specified topic
+
+
+```shell
+$ pulsar-client produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
+| `-db, --disable-batching` | Disable batch sending of messages|false|
+| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
+| `-s, --separator` | Character to split messages string on default is comma|,|
+| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
+| `-k, --key` | message key to add |null|
+| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
+| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
+| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
+| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
+| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
+| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Consume messages from a specified topic
+
+
+```shell
+$ pulsar-client consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-t, --subscription-type` | Subscription type.|Exclusive|
+| `--hide-content` | Do not write the message to console.|false|
+| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
+| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
+| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
+| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
+| `-q, --queue-size` | Consumer receiver queue size.|0|
+| `-p, --subscription-position` | Subscription position.|Latest|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `--hex` | Display binary messages in hex.|false|
+| `--regex` | Indicate the topic name is a regex pattern|false|
+| `-m, --subscription-mode` | Subscription mode.|Durable|
+| `-s, --subscription-name` | Subscription name.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+| `-pm, --pool-messages` | Use the pooled message|true|
+
diff --git a/site2/website-next/docsify/2.9.x/pulsar-client/_sidebar.md b/site2/website-next/docsify/2.9.x/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/2.9.x/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/2.9.x/pulsar-client/pulsar-client.md b/site2/website-next/docsify/2.9.x/pulsar-client/pulsar-client.md
deleted file mode 100644
index c813cbecdc1..00000000000
--- a/site2/website-next/docsify/2.9.x/pulsar-client/pulsar-client.md
+++ /dev/null
@@ -1,69 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Produce messages to a specified topic
-
-
-```shell
-$ pulsar-client produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-ks, --key-schema` | Schema type (can be bytes,avro,json,string...)|string|
-| `-db, --disable-batching` | Disable batch sending of messages|false|
-| `-m, --messages` | Messages to send, either -m or -f must be specified. The default separator is comma|[]|
-| `-s, --separator` | Character to split messages string on default is comma|,|
-| `-n, --num-produce` | Number of times to send message(s), the count of messages/files * num-produce should below than 1000.|1|
-| `-k, --key` | message key to add |null|
-| `-c, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-ekn, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-p, --properties` | Properties to add, Comma separated key=value string, like k1=v1,k2=v2.|[]|
-| `-kvet, --key-value-encoding-type` | Key Value Encoding Type (it can be separated or inline)|null|
-| `-ekv, --encryption-key-value` | The URI of public key to encrypt payload, for example file:///path/to/public.key or data:application/x-pem-file;base64,*****|null|
-| `-f, --files` | Comma separated file paths to send, either -m or -f must be specified.|[]|
-| `-vs, --value-schema` | Schema type (can be bytes,avro,json,string...)|bytes|
-| `-r, --rate` | Rate (in msg/sec) at which to produce, value 0 means to produce messages as fast as possible.|0.0|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Consume messages from a specified topic
-
-
-```shell
-$ pulsar-client consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-t, --subscription-type` | Subscription type.|Exclusive|
-| `--hide-content` | Do not write the message to console.|false|
-| `-n, --num-messages` | Number of messages to consume, 0 means to consume forever.|1|
-| `-r, --rate` | Rate (in msg/sec) at which to consume, value 0 means to consume messages as fast as possible.|0.0|
-| `-ekv, --encryption-key-value` | The URI of private key to decrypt payload, for example file:///path/to/private.key or data:application/x-pem-file;base64,*****|null|
-| `-st, --schema-type` | Set a schema type on the consumer, it can be 'bytes' or 'auto_consume'|bytes|
-| `-q, --queue-size` | Consumer receiver queue size.|0|
-| `-p, --subscription-position` | Subscription position.|Latest|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `--hex` | Display binary messages in hex.|false|
-| `--regex` | Indicate the topic name is a regex pattern|false|
-| `-m, --subscription-mode` | Subscription mode.|Durable|
-| `-s, --subscription-name` | Subscription name.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-| `-pm, --pool-messages` | Use the pooled message|true|
-
diff --git a/site2/website-next/docsify/2.9.x/pulsar-daemon/README.md b/site2/website-next/docsify/2.9.x/pulsar-daemon/README.md
new file mode 100644
index 00000000000..e1d30e5a9a5
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/pulsar-daemon/README.md
@@ -0,0 +1,26 @@
+## `pulsar-daemon`
+A wrapper around the pulsar tool that’s used to start and stop processes, such as ZooKeeper, bookies, and Pulsar brokers, in the background using nohup.
+
+pulsar-daemon has a similar interface to the pulsar command but adds start and stop commands for various services. For a listing of those services, run pulsar-daemon to see the help output or see the documentation for the pulsar command.
+
+### `start`
+Start a service in the background using nohup.
+
+Usage
+```bash
+$ pulsar-daemon start service
+```
+
+### `stop`
+Stop a service that’s already been started using start.
+
+Usage
+```bash
+$ pulsar-daemon stop service options
+```
+
+Options
+
+|Flag|Description|Default|
+|---|---|---|
+|-force|Stop the service forcefully if not stopped by normal shutdown.|false|
diff --git a/site2/website-next/docsify/2.9.x/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/2.9.x/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/2.9.x/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/2.9.x/pulsar-perf/README.md b/site2/website-next/docsify/2.9.x/pulsar-perf/README.md
index ef7ab6beaaa..8141daab8db 100644
--- a/site2/website-next/docsify/2.9.x/pulsar-perf/README.md
+++ b/site2/website-next/docsify/2.9.x/pulsar-perf/README.md
@@ -1 +1,349 @@
-> Docs for Configuration for `pulsar-perf`.
+------------
+
+## produce
+
+### Usage
+
+`$produce`
+
+------------
+
+Test pulsar producer performance.
+
+
+```shell
+$ pulsar-perf produce [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size (bytes)|1024|
+| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
+| `-threads, --num-test-threads` | Number of test threads|1|
+| `--separator` | Separator between the topic and topic number|-|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-d, --delay` | Mark messages with a given delay in seconds|0|
+| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-h, --help` | Help message|false|
+| `-am, --access-mode` | Producer access mode|Shared|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-pn, --producer-name` | Producer Name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
+| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
+| `-n, --num-producers` | Number of producers (per topic)|1|
+| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-z, --compression` | Compress messages payload|NONE|
+| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
+| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
+| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-o, --max-outstanding` | Max number of outstanding messages|1000|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-t, --num-topic` | Number of topics|1|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `--listener-name` | Listener name for the broker.|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
+| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
+| `--conf-file` | Configuration file|null|
+| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
+| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
+| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+
+------------
+
+## consume
+
+### Usage
+
+`$consume`
+
+------------
+
+Test pulsar consumer performance.
+
+
+```shell
+$ pulsar-perf consume [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-sp, --subscription-position` | Subscription position|Latest|
+| `-h, --help` | Help message|false|
+| `--replicated` | Whether the subscription status should be replicated|false|
+| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
+| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
+| `-st, --subscription-type` | Subscription type|Exclusive|
+| `-t, --num-topics` | Number of topics|1|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
+| `-txn, --txn-enable` | Enable or disable the transaction|false|
+| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
+| `--conf-file` | Configuration file|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
+| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
+| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-pm, --pool-messages` | Use the pooled message|true|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-s, --subscriber-name` | Subscriber name prefix|null|
+| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--histogram-file` | HdrHistogram output file|null|
+| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
+| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
+| `--listener-name` | Listener name for the broker.|null|
+| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
+
+------------
+
+## transaction
+
+### Usage
+
+`$transaction`
+
+------------
+
+Test pulsar transaction performance.
+
+
+```shell
+$ pulsar-perf transaction [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `--txn-disable` | Disable transaction|false|
+| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
+| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
+| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
+| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
+| `-h, --help` | Help message|false|
+| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
+| `-st, --subscription-type` | Subscription type|Shared|
+| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
+| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
+| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
+| `--conf-file` | Configuration file|null|
+| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
+| `-u, --service-url` | Pulsar Service URL|null|
+| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
+| `-sp, --subscription-position` | Subscription position|Earliest|
+| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
+| `-au, --admin-url` | Pulsar Admin URL|null|
+| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
+
+------------
+
+## read
+
+### Usage
+
+`$read`
+
+------------
+
+Test pulsar reader performance.
+
+
+```shell
+$ pulsar-perf read [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `--trust-cert-file` | Path for the trusted TLS certificate file||
+| `--tls-allow-insecure` | Allow insecure TLS connection|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
+| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
+| `-h, --help` | Help message|false|
+| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
+| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
+| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
+| `--use-tls` | Use TLS encryption on the connection|false|
+| `--conf-file` | Configuration file|null|
+| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
+| `--listener-name` | Listener name for the broker.|null|
+| `-t, --num-topics` | Number of topics|1|
+| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
+| `-u, --service-url` | Pulsar Service URL|null|
+
+------------
+
+## monitor-brokers
+
+### Usage
+
+`$monitor-brokers`
+
+------------
+
+Monitors brokers and prints to the console information about their system resource usages,
+their topic and bundle counts, their message rates, and other metrics.
+
+
+```shell
+$ pulsar-perf monitor-brokers [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--connect-string` | Zookeeper connect string|null|
+
+------------
+
+## simulation-client
+
+### Usage
+
+`$simulation-client`
+
+------------
+
+Simulate client load by maintaining producers and consumers for topics.
+
+
+```shell
+$ pulsar-perf simulation-client [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--port` | Port to listen on for controller|0|
+| `--service-url` | Pulsar Service URL|null|
+
+------------
+
+## simulation-controller
+
+### Usage
+
+`$simulation-controller`
+
+------------
+
+Provides a shell for the user to dictate how simulation clients should incur load.
+
+
+```shell
+$ pulsar-perf simulation-controller [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-h, --help` | Help message|false|
+| `--cluster` | Cluster to test on|null|
+| `--client-port` | Port that the clients are listening on|0|
+| `--clients` | Comma separated list of client hostnames|null|
+
+------------
+
+## websocket-producer
+
+### Usage
+
+`$websocket-producer`
+
+------------
+
+Test pulsar websocket producer performance.
+
+
+```shell
+$ pulsar-perf websocket-producer [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-s, --size` | Message size in byte|1024|
+| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
+| `-h, --help` | Help message|false|
+| `--auth_plugin` | Authentication plugin class name|null|
+| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
+| `--conf-file` | Configuration file|null|
+| `-t, --num-topic` | Number of topics|1|
+| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
+| `--auth-plugin` | Authentication plugin class name|null|
+| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
+| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
+| `-r, --rate` | Publish rate msg/s across topics|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+
+------------
+
+## managed-ledger
+
+### Usage
+
+`$managed-ledger`
+
+------------
+
+Write directly on managed-ledgers
+
+
+```shell
+$ pulsar-perf managed-ledger [options]
+```
+
+|Flag|Description|Default|
+|---|---|---|
+| `-e, --ensemble-size` | Ledger ensemble size|1|
+| `-w, --write-quorum` | Ledger write quorum|1|
+| `-r, --rate` | Write rate msg/s across managed ledgers|100|
+| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
+| `-a, --ack-quorum` | Ledger ack quorum|1|
+| `--threads` | Number of threads writing|1|
+| `-s, --size` | Message size|1024|
+| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
+| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
+| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
+| `-o, --max-outstanding` | Max number of outstanding requests|1000|
+| `-h, --help` | Help message|false|
+| `-t, --num-topic` | Number of managed ledgers|1|
+| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
+
diff --git a/site2/website-next/docsify/2.9.x/pulsar-perf/_sidebar.md b/site2/website-next/docsify/2.9.x/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/2.9.x/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/2.9.x/pulsar-perf/pulsar-perf.md b/site2/website-next/docsify/2.9.x/pulsar-perf/pulsar-perf.md
deleted file mode 100644
index 8141daab8db..00000000000
--- a/site2/website-next/docsify/2.9.x/pulsar-perf/pulsar-perf.md
+++ /dev/null
@@ -1,349 +0,0 @@
-------------
-
-## produce
-
-### Usage
-
-`$produce`
-
-------------
-
-Test pulsar producer performance.
-
-
-```shell
-$ pulsar-perf produce [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size (bytes)|1024|
-| `-ch, --chunking` | Should split the message and publish in chunks if message size is larger than allowed max size|false|
-| `-threads, --num-test-threads` | Number of test threads|1|
-| `--separator` | Separator between the topic and topic number|-|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-d, --delay` | Mark messages with a given delay in seconds|0|
-| `-b, --batch-time-window` | Batch messages in 'x' ms window (Default: 1ms)|1.0|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-h, --help` | Help message|false|
-| `-am, --access-mode` | Producer access mode|Shared|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-pn, --producer-name` | Producer Name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-k, --encryption-key-name` | The public key name to encrypt payload|null|
-| `-nmt, --numMessage-perTransaction` | The number of messages sent by a transaction. (After --txn-enable setting to true, -nmt takes effect)|50|
-| `-n, --num-producers` | Number of producers (per topic)|1|
-| `-np, --partitions` | Create partitioned topics with the given number of partitions, set 0 to not try to create the topic|null|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-z, --compression` | Compress messages payload|NONE|
-| `--warmup-time` | Warm-up time in seconds (Default: 1 sec)|1.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds.|false|
-| `-bm, --batch-max-messages` | Maximum number of messages per batch|1000|
-| `--send-timeout` | Set the sendTimeout value default 0 to keep compatibility with previous version of pulsar-perf|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-o, --max-outstanding` | Max number of outstanding messages|1000|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-t, --num-topic` | Number of topics|1|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `--listener-name` | Listener name for the broker.|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-v, --encryption-key-value-file` | The file which contains the public key to encrypt payload|null|
-| `-bb, --batch-max-bytes` | Maximum number of bytes per batch|4194304|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-ef, --exit-on-failure` | Exit from the process on publish failure (default: disable)|false|
-| `--conf-file` | Configuration file|null|
-| `-p, --max-outstanding-across-partitions` | Max number of outstanding messages across partitions|50000|
-| `-f, --payload-file` | Use payload from an UTF-8 encoded text file and a payload will be randomly selected when publishing messages|null|
-| `-mk, --message-key-generation-mode` | The generation mode of message key, valid options are: [autoIncrement, random]|null|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-
-------------
-
-## consume
-
-### Usage
-
-`$consume`
-
-------------
-
-Test pulsar consumer performance.
-
-
-```shell
-$ pulsar-perf consume [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-sp, --subscription-position` | Subscription position|Latest|
-| `-h, --help` | Help message|false|
-| `--replicated` | Whether the subscription status should be replicated|false|
-| `-mc, --max_chunked_msg` | Max pending chunk messages|0|
-| `-nmt, --numMessage-perTransaction` | The number of messages acknowledged by a transaction. (After --txn-enable setting to true, -numMessage-perTransaction takes effect|50|
-| `-st, --subscription-type` | Subscription type|Exclusive|
-| `-t, --num-topics` | Number of topics|1|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-r, --rate` | Simulate a slow message consumer (rate in msg/s)|0.0|
-| `-txn, --txn-enable` | Enable or disable the transaction|false|
-| `-e, --expire_time_incomplete_chunked_messages` | Expire time in ms for incomplete chunk messages|0|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `--acks-delay-millis` | Acknowledgements grouping delay in millis|100|
-| `--conf-file` | Configuration file|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|10|
-| `-n, --num-consumers` | Number of consumers (per subscription), only one consumer is allowed when subscriptionType is Exclusive|1|
-| `-ntxn` | The number of opened transactions, 0 means keeping open.(After --txn-enable setting to true, -ntxn takes effect.)|0|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `-m, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-abort` | Abort the transaction. (After --txn-enable setting to true, -abort takes effect)|false|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-pm, --pool-messages` | Use the pooled message|true|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-s, --subscriber-name` | Subscriber name prefix|null|
-| `--batch-index-ack` | Enable or disable the batch index acknowledgment|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-p, --receiver-queue-size-across-partitions` | Max total size of the receiver queue across partitions|50000|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--histogram-file` | HdrHistogram output file|null|
-| `-v, --encryption-key-value-file` | The file which contains the private key to decrypt payload|null|
-| `-bw, --busy-wait` | Enable Busy-Wait on the Pulsar client|false|
-| `--listener-name` | Listener name for the broker.|null|
-| `-ac, --auto_ack_chunk_q_full` | Auto ack for oldest message on queue is full|false|
-
-------------
-
-## transaction
-
-### Usage
-
-`$transaction`
-
-------------
-
-Test pulsar transaction performance.
-
-
-```shell
-$ pulsar-perf transaction [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `--txn-disable` | Disable transaction|false|
-| `-ns, --num-subscriptions` | Number of subscriptions (per topic)|1|
-| `-ntxn, --number-txn` | Set the number of transaction. 0 means keeping open.If transaction disabled, it means the number of tasks. The task or transaction produces or consumes a specified number of messages.|0|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers. The default value is 1.|1|
-| `-nmc, --numMessage-perTransaction-consume` | Set the number of messages consumed in a transaction.If transaction disabled, it means the number of messages consumed in a task.|1|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-txnRate` | Set the rate of opened transaction or task. 0 means no limit|0|
-| `-ss, --subscriptions` | A list of subscriptions to consume (for example, sub1,sub2)|[sub]|
-| `-h, --help` | Help message|false|
-| `--topics-c` | All topics that need ack for a transaction|[test-consume]|
-| `-st, --subscription-type` | Subscription type|Shared|
-| `-nmp, --numMessage-perTransaction-produce` | Set the number of messages produced in  a transaction.If transaction disabled, it means the number of messages produced in a task.|1|
-| `-threads, --num-test-threads` | Number of test threads.This thread is for a new transaction to ack messages from consumer topics and produce message to producer topics, and then commit or abort this transaction. Increasing the number of threads increases the parallelism of the performance test, thereby increasing the intensity of the stress test.|1|
-| `-time, --test-duration` | Test duration (in second). 0 means keeping publishing|0|
-| `--conf-file` | Configuration file|null|
-| `-abort` | Abort the transaction. (After --txn-disEnable setting to false, -abort takes effect)|false|
-| `-u, --service-url` | Pulsar Service URL|null|
-| `-np, --partitions` | Create partitioned topics with a given number of partitions, 0 meansnot trying to create a topic|null|
-| `-sp, --subscription-position` | Subscription position|Earliest|
-| `--topics-p` | All topics that need produce for a transaction|[test-produce]|
-| `-au, --admin-url` | Pulsar Admin URL|null|
-| `-tto, --txn-timeout` | Set the time value of transaction timeout, and the time unit is second. (After --txn-enable setting to true, --txn-timeout takes effect)|5|
-
-------------
-
-## read
-
-### Usage
-
-`$read`
-
-------------
-
-Test pulsar reader performance.
-
-
-```shell
-$ pulsar-perf read [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `--trust-cert-file` | Path for the trusted TLS certificate file||
-| `--tls-allow-insecure` | Allow insecure TLS connection|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep consuming|0|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-q, --receiver-queue-size` | Size of the receiver queue|1000|
-| `-n, --num-messages` | Number of messages to consume in total. If <= 0, it will keep consuming|0|
-| `-h, --help` | Help message|false|
-| `-c, --max-connections` | Max number of TCP connections to a single broker|100|
-| `-ioThreads, --num-io-threads` | Set the number of threads to be used for handling connections to brokers, default is 1 thread|1|
-| `-m, --start-message-id` | Start message id. This can be either 'earliest', 'latest' or a specific message id by using 'lid:eid'|earliest|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-lt, --num-listener-threads` | Set the number of threads to be used for message listeners|1|
-| `--use-tls` | Use TLS encryption on the connection|false|
-| `--conf-file` | Configuration file|null|
-| `-r, --rate` | Simulate a slow message reader (rate in msg/s)|0.0|
-| `--listener-name` | Listener name for the broker.|null|
-| `-t, --num-topics` | Number of topics|1|
-| `-i, --stats-interval-seconds` | Statistics Interval Seconds. If 0, statistics will be disabled|0|
-| `-u, --service-url` | Pulsar Service URL|null|
-
-------------
-
-## monitor-brokers
-
-### Usage
-
-`$monitor-brokers`
-
-------------
-
-Monitors brokers and prints to the console information about their system resource usages,
-their topic and bundle counts, their message rates, and other metrics.
-
-
-```shell
-$ pulsar-perf monitor-brokers [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--connect-string` | Zookeeper connect string|null|
-
-------------
-
-## simulation-client
-
-### Usage
-
-`$simulation-client`
-
-------------
-
-Simulate client load by maintaining producers and consumers for topics.
-
-
-```shell
-$ pulsar-perf simulation-client [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--port` | Port to listen on for controller|0|
-| `--service-url` | Pulsar Service URL|null|
-
-------------
-
-## simulation-controller
-
-### Usage
-
-`$simulation-controller`
-
-------------
-
-Provides a shell for the user to dictate how simulation clients should incur load.
-
-
-```shell
-$ pulsar-perf simulation-controller [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-h, --help` | Help message|false|
-| `--cluster` | Cluster to test on|null|
-| `--client-port` | Port that the clients are listening on|0|
-| `--clients` | Comma separated list of client hostnames|null|
-
-------------
-
-## websocket-producer
-
-### Usage
-
-`$websocket-producer`
-
-------------
-
-Test pulsar websocket producer performance.
-
-
-```shell
-$ pulsar-perf websocket-producer [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-s, --size` | Message size in byte|1024|
-| `--auth-params` | Authentication parameters, whose format is determined by the implementation of method `configure` in authentication plugin class, for example "key1:val1,key2:val2" or "{"key1":"val1","key2":"val2"}.|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-e, --payload-delimiter` | The delimiter used to split lines when using payload from a file|\n|
-| `-h, --help` | Help message|false|
-| `--auth_plugin` | Authentication plugin class name|null|
-| `-fp, --format-payload` | Format %i as a message index in the stream from producer and/or %t as the timestamp nanoseconds|false|
-| `--conf-file` | Configuration file|null|
-| `-t, --num-topic` | Number of topics|1|
-| `-f, --payload-file` | Use payload from a file instead of empty buffer|null|
-| `--auth-plugin` | Authentication plugin class name|null|
-| `-fc, --format-class` | Custom Formatter class name|org.apache.pulsar.testclient.DefaultMessageFormatter|
-| `-u, --proxy-url` | Pulsar Proxy URL, e.g., "ws://localhost:8080/"|null|
-| `-r, --rate` | Publish rate msg/s across topics|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-
-------------
-
-## managed-ledger
-
-### Usage
-
-`$managed-ledger`
-
-------------
-
-Write directly on managed-ledgers
-
-
-```shell
-$ pulsar-perf managed-ledger [options]
-```
-
-|Flag|Description|Default|
-|---|---|---|
-| `-e, --ensemble-size` | Ledger ensemble size|1|
-| `-w, --write-quorum` | Ledger write quorum|1|
-| `-r, --rate` | Write rate msg/s across managed ledgers|100|
-| `-m, --num-messages` | Number of messages to publish in total. If <= 0, it will keep publishing|0|
-| `-a, --ack-quorum` | Ledger ack quorum|1|
-| `--threads` | Number of threads writing|1|
-| `-s, --size` | Message size|1024|
-| `-c, --max-connections` | Max number of TCP connections to a single bookie|1|
-| `-zk, --zookeeperServers` | ZooKeeper connection string|null|
-| `-time, --test-duration` | Test duration in secs. If <= 0, it will keep publishing|0|
-| `-o, --max-outstanding` | Max number of outstanding requests|1000|
-| `-h, --help` | Help message|false|
-| `-t, --num-topic` | Number of managed ledgers|1|
-| `-dt, --digest-type` | BookKeeper digest type|CRC32C|
-
diff --git a/site2/website-next/docsify/2.9.x/pulsar/_sidebar.md b/site2/website-next/docsify/2.9.x/pulsar/_sidebar.md
index fc05fd6f1f0..87568febfb1 100644
--- a/site2/website-next/docsify/2.9.x/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/2.9.x/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker](pulsar/broker.md)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)
diff --git a/site2/website-next/docsify/_sidebar.md b/site2/website-next/docsify/_sidebar.md
index 5809d6d06dc..dfb03396dbb 100644
--- a/site2/website-next/docsify/_sidebar.md
+++ b/site2/website-next/docsify/_sidebar.md
@@ -1,8 +1,11 @@
-- Pulsar Configuration
+- [Configuration]()
   - [Pulsar](config/)
-  - [Client Library](client/)
-- CLI Configuration
+  - [Client](client/)
+- [CLI Tools](cli)
   - [pulsar-admin](pulsar-admin/)
   - [pulsar-client](pulsar-client/)
   - [pulsar](pulsar/)
+  - [pulsar-daemon](pulsar-daemon/)
   - [pulsar-perf](pulsar-perf/)
+  - [bookkeeper](bookkeeper/)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/index.html b/site2/website-next/docsify/index.html
index 1f2e575ac0a..f4bf88e841f 100644
--- a/site2/website-next/docsify/index.html
+++ b/site2/website-next/docsify/index.html
@@ -70,7 +70,7 @@
         align-self: flex-start;
         flex: 0 0 auto;
         overflow-y: hidden;
-        max-height: 70%;
+        max-height: 90%;
         /* For iOS */
         cursor: pointer;
         /* For Firefox */
@@ -193,7 +193,7 @@
       // Docsify Configuration
       window.$docsify = {
         name:
-          '<a id="home-link" class="app-name-link" data-nosearch href="/reference">Pulsar Configuration</a>' +
+          '<a id="home-link" class="app-name-link" data-nosearch href="/reference">Pulsar Reference</a>' +
           '<select id="ver-selector" name="v" class="select">' +
           '<option value="2.6.x">2.6.x</value>' +
           '<option value="2.7.x">2.7.x</value>' +
diff --git a/site2/website-next/docsify/latest/CLI.md b/site2/website-next/docsify/latest/CLI.md
new file mode 100644
index 00000000000..520d14e5b03
--- /dev/null
+++ b/site2/website-next/docsify/latest/CLI.md
@@ -0,0 +1,3 @@
+# Welcome
+
+> Welcome to Pulsar CLI Tools Docs.
diff --git a/site2/website-next/docsify/latest/bookkeeper/_sidebar.md b/site2/website-next/docsify/latest/bookkeeper/_sidebar.md
new file mode 100644
index 00000000000..afbe04c4fd0
--- /dev/null
+++ b/site2/website-next/docsify/latest/bookkeeper/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [bookkeeper](bookkeeper/)
diff --git a/site2/website-next/docsify/latest/broker-tool/_sidebar.md b/site2/website-next/docsify/latest/broker-tool/_sidebar.md
new file mode 100644
index 00000000000..c582219c085
--- /dev/null
+++ b/site2/website-next/docsify/latest/broker-tool/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [broker-tool](broker-tool/)
diff --git a/site2/website-next/docsify/latest/client/README.md b/site2/website-next/docsify/latest/client/README.md
index aef2ece7932..63a63d11ae1 100644
--- a/site2/website-next/docsify/latest/client/README.md
+++ b/site2/website-next/docsify/latest/client/README.md
@@ -1 +1 @@
-> Docs for Pulsar Client Library Configuration.
+> Docs for Pulsar Client Configuration.
diff --git a/site2/website-next/docsify/latest/client/_sidebar.md b/site2/website-next/docsify/latest/client/_sidebar.md
index e5ccce15531..07e8fb06f5c 100644
--- a/site2/website-next/docsify/latest/client/_sidebar.md
+++ b/site2/website-next/docsify/latest/client/_sidebar.md
@@ -1,4 +1,5 @@
-- Pulsar Configuration > Client Library
+- [Configuration]()
+  - [Client](client/)
     - [Client](client/client-configuration-client)
     - [Producer](client/client-configuration-producer)
     - [Consumer](client/client-configuration-consumer)
diff --git a/site2/website-next/docsify/latest/config/_sidebar.md b/site2/website-next/docsify/latest/config/_sidebar.md
index 689d876d0ea..75cd8a0ceb3 100644
--- a/site2/website-next/docsify/latest/config/_sidebar.md
+++ b/site2/website-next/docsify/latest/config/_sidebar.md
@@ -1,4 +1,5 @@
-- Pulsar Configuration > Pulsar
+- [Configuration]()
+  - [Pulsar](config/)
     - [BookKeeper](config/reference-configuration-bookkeeper)
     - [Broker](config/reference-configuration-broker)
     - [Client](config/reference-configuration-client)
diff --git a/site2/website-next/docsify/latest/pulsar-admin/_sidebar.md b/site2/website-next/docsify/latest/pulsar-admin/_sidebar.md
index 2e66f553ac9..ef7b86c8b84 100644
--- a/site2/website-next/docsify/latest/pulsar-admin/_sidebar.md
+++ b/site2/website-next/docsify/latest/pulsar-admin/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar-admin
+- [CLI Tools](cli)
+  - [pulsar-admin](pulsar-admin/)
     - [broker-stats](pulsar-admin/broker-stats.md)
     - [brokers](pulsar-admin/brokers.md)
     - [bookies](pulsar-admin/bookies.md)
diff --git a/site2/website-next/docsify/latest/pulsar-client/README.md b/site2/website-next/docsify/latest/pulsar-client/README.md
deleted file mode 100644
index 0331c05d962..00000000000
--- a/site2/website-next/docsify/latest/pulsar-client/README.md
+++ /dev/null
@@ -1 +0,0 @@
-> Docs for Configuration for `pulsar-client`.
diff --git a/site2/website-next/docsify/latest/pulsar-client/_sidebar.md b/site2/website-next/docsify/latest/pulsar-client/_sidebar.md
index 6a94239b1d2..4fef463f71c 100644
--- a/site2/website-next/docsify/latest/pulsar-client/_sidebar.md
+++ b/site2/website-next/docsify/latest/pulsar-client/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-client
-    - [pulsar-client](pulsar-client/pulsar-client.md)
+- [CLI Tools](cli)
+  - [pulsar-client](pulsar-client/)
diff --git a/site2/website-next/docsify/latest/pulsar-daemon/_sidebar.md b/site2/website-next/docsify/latest/pulsar-daemon/_sidebar.md
new file mode 100644
index 00000000000..a39119be225
--- /dev/null
+++ b/site2/website-next/docsify/latest/pulsar-daemon/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-daemon](pulsar-daemon/)
diff --git a/site2/website-next/docsify/latest/pulsar-perf/README.md b/site2/website-next/docsify/latest/pulsar-perf/README.md
deleted file mode 100644
index ef7ab6beaaa..00000000000
--- a/site2/website-next/docsify/latest/pulsar-perf/README.md
+++ /dev/null
@@ -1 +0,0 @@
-> Docs for Configuration for `pulsar-perf`.
diff --git a/site2/website-next/docsify/latest/pulsar-perf/_sidebar.md b/site2/website-next/docsify/latest/pulsar-perf/_sidebar.md
index 499161c404c..d570a7200c7 100644
--- a/site2/website-next/docsify/latest/pulsar-perf/_sidebar.md
+++ b/site2/website-next/docsify/latest/pulsar-perf/_sidebar.md
@@ -1,2 +1,2 @@
-- CLI Configuration > pulsar-perf
-    - [pulsar-perf](pulsar-perf/pulsar-perf.md)
+- [CLI Tools](cli)
+  - [pulsar-perf](pulsar-perf/)
diff --git a/site2/website-next/docsify/latest/pulsar-shell/_sidebar.md b/site2/website-next/docsify/latest/pulsar-shell/_sidebar.md
new file mode 100644
index 00000000000..1ac76a2c133
--- /dev/null
+++ b/site2/website-next/docsify/latest/pulsar-shell/_sidebar.md
@@ -0,0 +1,2 @@
+- [CLI Tools](cli)
+  - [pulsar-shell](pulsar-shell/)
diff --git a/site2/website-next/docsify/latest/pulsar/_sidebar.md b/site2/website-next/docsify/latest/pulsar/_sidebar.md
index fc05fd6f1f0..87568febfb1 100644
--- a/site2/website-next/docsify/latest/pulsar/_sidebar.md
+++ b/site2/website-next/docsify/latest/pulsar/_sidebar.md
@@ -1,4 +1,5 @@
-- CLI Configuration > pulsar
+- [CLI Tools](cli)
+  - [pulsar](pulsar/)
     - [broker](pulsar/broker.md)
     - [broker-tool](pulsar/broker-tool.md)
     - [compact-topic](pulsar/compact-topic.md)