You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fesod.apache.org by gi...@apache.org on 2026/08/28 00:37:54 UTC
(fesod) 01/01: deploy: 0805cbfec763fd3080cea8c4b91f33dd6c13892c
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/fesod.git
commit 9ce9a0874eaea7c5e02d87e7beec821f0e5ecbf6
Author: delei <de...@users.noreply.github.com>
AuthorDate: Fri Aug 28 00:37:46 2026 +0000
deploy: 0805cbfec763fd3080cea8c4b91f33dd6c13892c
---
.asf.yaml | 52 ++
.nojekyll | 0
404.html | 4 +
assets/css/styles.721b8549.css | 1 +
...fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg | 19 +
...fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png | Bin 0 -> 40755 bytes
...-logo-icon-3285667fcb12e822454e1e8bc1296eed.png | Bin 0 -> 15935 bytes
...-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg | 19 +
...0250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png | Bin 0 -> 335411 bytes
...0250917-02-8ffdd34d6cbc80004f5404c95a83de58.png | Bin 0 -> 40889 bytes
...il-setting-64fa2bef013a1817489ee6195d293a97.png | Bin 0 -> 166719 bytes
.../icla-01-83a226e824e1b9a9d08813f21b882e31.png | Bin 0 -> 41209 bytes
.../icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png | Bin 0 -> 47829 bytes
.../icla-03-c8df2f12ca6b2bc591a4e73aced61280.png | Bin 0 -> 64617 bytes
.../icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png | Bin 0 -> 21166 bytes
...ink-github-d7d62b2548477c375730056807eacc89.png | Bin 0 -> 30463 bytes
...set-passwd-e8828118db9277c6fe25a82a5a0bb3da.png | Bin 0 -> 180046 bytes
...-committer-20873b578f8c3b1853cd24d52171ca44.png | Bin 0 -> 14561 bytes
assets/js/0058b4c6.acc2b13f.js | 1 +
assets/js/01a85c17.d4a0e19d.js | 1 +
assets/js/035672d3.6e139c24.js | 1 +
assets/js/0553a1a7.36541fc3.js | 1 +
assets/js/0fc1e0ab.a7e4daf9.js | 1 +
assets/js/10e1fcd2.a85f04fe.js | 1 +
assets/js/138e0e15.9b1e4a76.js | 1 +
assets/js/1415.49234292.js | 1 +
assets/js/1465.8afb8067.js | 27 +
assets/js/1498.5314f8f7.js | 1 +
assets/js/1672.ac5f5174.js | 1 +
assets/js/16d33c03.1194700d.js | 1 +
assets/js/17896441.2c2cd4ef.js | 1 +
assets/js/1798.c7c77970.js | 1 +
assets/js/1880.8bc01267.js | 1 +
assets/js/1922.e7922913.js | 1 +
assets/js/1a4e3797.69d0e3e1.js | 4 +
assets/js/1ed9728e.496378db.js | 1 +
assets/js/2039.8245f5a7.js | 24 +
assets/js/2083.6b0edc38.js | 1 +
assets/js/213c1e68.be170e6f.js | 1 +
assets/js/2411.762cef65.js | 1 +
assets/js/2426.12e423cf.js | 1 +
assets/js/2621.23295aaa.js | 215 ++++++++
assets/js/2800.2660ecbd.js | 41 ++
assets/js/2983.7d925ee1.js | 148 ++++++
assets/js/2995.d990c09b.js | 86 ++++
assets/js/299aa024.66db5b42.js | 1 +
assets/js/2c1e9c28.f7ccfacd.js | 1 +
assets/js/3023.4be1dbab.js | 77 +++
assets/js/305e64c1.7cd9b267.js | 1 +
assets/js/3354.56465d1b.js | 153 ++++++
assets/js/3362.6af26af5.js | 1 +
assets/js/3399376c.2399dc4e.js | 1 +
assets/js/34338452.6572d98a.js | 1 +
assets/js/3527.da1e4c81.js | 255 ++++++++++
assets/js/3548.8e3967d3.js | 1 +
assets/js/35aaf8c2.30a0852d.js | 1 +
assets/js/36994c47.a8d503bd.js | 1 +
assets/js/372d2263.e3b6b50b.js | 1 +
assets/js/38165d4c.1f1f59c1.js | 1 +
assets/js/3852.e1f1a458.js | 90 ++++
assets/js/3908.9d97dcde.js | 23 +
assets/js/3958.bf2b780c.js | 1 +
assets/js/3a2db09e.c6a98ea9.js | 1 +
assets/js/3cb2f586.cf75b464.js | 1 +
assets/js/3ff09b31.4d21973a.js | 1 +
assets/js/4089.3e7d5969.js | 1 +
assets/js/4116.6d616022.js | 1 +
assets/js/4281.61b90dee.js | 1 +
assets/js/4383cab8.7c69fc6f.js | 1 +
assets/js/4529.047a2dd5.js | 1 +
assets/js/4557.2831c3a9.js | 1 +
assets/js/4596.c15e80af.js | 82 +++
assets/js/47edf924.4559d8a0.js | 1 +
assets/js/4817.dcdbbac5.js | 104 ++++
assets/js/498dc5b3.8a3b3189.js | 1 +
assets/js/4a783ec1.698915d3.js | 1 +
assets/js/4b935b7f.6305f41e.js | 1 +
assets/js/5028.574cb63e.js | 36 ++
assets/js/5127.38ce1c79.js | 1 +
assets/js/5277.03f6c19e.js | 38 ++
assets/js/5329.3b1eaa5b.js | 1 +
assets/js/5369.e41dc62b.js | 1 +
assets/js/54d6a969.c367b195.js | 1 +
assets/js/551.db2292b0.js | 79 +++
assets/js/552b812f.fb015e28.js | 1 +
assets/js/5653.d2d55026.js | 1 +
assets/js/5742f295.abdb3447.js | 1 +
assets/js/5771c448.d4b295ec.js | 1 +
assets/js/57b9d056.3650aa6f.js | 1 +
assets/js/57e3af1f.86fc4cf7.js | 1 +
assets/js/5806.7b0236ca.js | 1 +
assets/js/5855.21122fc9.js | 1 +
assets/js/5885.6a3e6aab.js | 1 +
assets/js/5dfaa6dd.518587d6.js | 1 +
assets/js/5e95c892.755e4ceb.js | 1 +
assets/js/6016.3ca06a5e.js | 1 +
assets/js/6211.88936703.js | 4 +
assets/js/621db11d.6861fd08.js | 1 +
assets/js/6270108c.1c05701f.js | 1 +
assets/js/6279.947276da.js | 1 +
assets/js/64ca138b.e88f8366.js | 1 +
assets/js/6578.3a80bb05.js | 1 +
assets/js/66e7b107.b4f15ad8.js | 1 +
assets/js/674.56c0ec8c.js | 1 +
assets/js/67ac9947.5bec1465.js | 1 +
assets/js/6827.a4c6176a.js | 1 +
assets/js/6875c492.98d30afd.js | 1 +
assets/js/6910.93d66ffc.js | 1 +
assets/js/6999.02845492.js | 1 +
assets/js/7009b5d3.a064c031.js | 1 +
assets/js/704.8df70b1f.js | 24 +
assets/js/7052.7a09bd03.js | 1 +
assets/js/7108.4cbd9a68.js | 1 +
assets/js/7158.ae0edc8c.js | 1 +
assets/js/7297.7b4efe07.js | 115 +++++
assets/js/7354.d7c32b36.js | 1 +
assets/js/7431.8bccbabc.js | 226 +++++++++
assets/js/7484.a3da2aa5.js | 1 +
assets/js/7492.45c9aaf7.js | 1 +
assets/js/7558.65194fa9.js | 5 +
assets/js/7750.31867392.js | 34 ++
assets/js/8001.17116c39.js | 1 +
assets/js/8041.bd029986.js | 287 +++++++++++
assets/js/8131.96c39786.js | 1 +
assets/js/814f3328.c898acf7.js | 1 +
assets/js/8197.707fcdc6.js | 1 +
assets/js/83b4fe73.31b30734.js | 1 +
assets/js/8406.a049668c.js | 1 +
assets/js/84450331.566219b3.js | 1 +
assets/js/846.55acd6e2.js | 1 +
assets/js/859.ad9fdc65.js | 1 +
assets/js/8599.7765a37a.js | 64 +++
assets/js/8646.d2071ca2.js | 1 +
assets/js/87165530.115b37bc.js | 1 +
assets/js/8768.2424319c.js | 1 +
assets/js/87c901a1.39927b23.js | 1 +
assets/js/8811.c72e6e0e.js | 1 +
assets/js/883.651dd44a.js | 80 +++
assets/js/8946.c675b412.js | 160 ++++++
assets/js/8ccf8dfc.f3c67c06.js | 1 +
assets/js/8ff8400d.c5b455f3.js | 1 +
assets/js/903f555a.2e2bb632.js | 1 +
assets/js/908b89db.f31148de.js | 1 +
assets/js/9247.9eca23a2.js | 1 +
assets/js/9475.fdff35d7.js | 62 +++
assets/js/9500.cbf0d6f8.js | 8 +
assets/js/9608.0bae41be.js | 93 ++++
assets/js/979.6b356cf0.js | 141 ++++++
assets/js/98b2b410.e9815a9a.js | 1 +
assets/js/98b33ad6.c6f16b74.js | 1 +
assets/js/9b316f1b.e59cb9b7.js | 1 +
assets/js/9d86e7fa.9d9199f8.js | 1 +
assets/js/9e4087bc.14f52c79.js | 1 +
assets/js/a0cc137d.e7adb6b1.js | 1 +
assets/js/a2915123.08e49acb.js | 1 +
assets/js/a3e235df.21a8b41e.js | 1 +
assets/js/a468a806.6870bf57.js | 1 +
assets/js/a4b4544e.9ef558e8.js | 1 +
assets/js/a6aa9e1f.2ce66791.js | 1 +
assets/js/a7456010.955429ca.js | 1 +
assets/js/a7bd4aaa.4e78779a.js | 1 +
assets/js/a8dd066c.40602be1.js | 1 +
assets/js/a94703ab.8152de4b.js | 1 +
assets/js/a9f50754.38c07dbf.js | 1 +
assets/js/aba21aa0.377ad74b.js | 1 +
assets/js/abce2868.046e4693.js | 1 +
assets/js/acecf23e.d61e7861.js | 1 +
assets/js/ae338ae9.65b84fb6.js | 1 +
assets/js/bfc739f4.30475fa6.js | 1 +
assets/js/c15d9823.1039eb0d.js | 1 +
assets/js/c3aa4345.0c8e8137.js | 1 +
assets/js/c4f5d8e4.2e47602b.js | 1 +
assets/js/c639369e.22e46e62.js | 1 +
assets/js/c72637f2.59f3e5d6.js | 1 +
assets/js/c8d101a0.0f5d4d7c.js | 1 +
assets/js/c9cac9d9.333a8a44.js | 1 +
assets/js/c9de33a5.9bebe484.js | 1 +
assets/js/ccc49370.a2fd741e.js | 1 +
assets/js/cfa642a3.9feab08a.js | 1 +
assets/js/d2436a2b.8044d3c9.js | 1 +
assets/js/d5273c26.d5850a58.js | 1 +
assets/js/d55aa8bb.224e76cb.js | 1 +
assets/js/d90696c9.aa49fa46.js | 1 +
assets/js/db358d00.a3bb76d0.js | 1 +
assets/js/db72292f.6595767d.js | 1 +
assets/js/de3da009.cfb56a1e.js | 1 +
assets/js/e0719818.50c8207c.js | 1 +
assets/js/e1dda140.9b3e0229.js | 1 +
assets/js/e2f5eafd.b3e78229.js | 1 +
assets/js/ea334bcf.ae991c18.js | 1 +
assets/js/edc931f8.9b7cbd03.js | 1 +
assets/js/ef8b811a.4acad354.js | 1 +
assets/js/f81c1134.2e5c1ef5.js | 1 +
assets/js/f9e23376.61c00978.js | 1 +
assets/js/fae1940b.1622e20e.js | 1 +
assets/js/fc8fba91.44f548a7.js | 1 +
assets/js/fe9a19b4.b6351905.js | 1 +
assets/js/ff3732e9.707cf21d.js | 1 +
assets/js/main.79f22081.js | 38 ++
assets/js/runtime~main.e5afd9cd.js | 1 +
.../17/fesod-entered-apache-incubator/index.html | 84 ++++
.../index.html | 79 +++
blog/2026/02/27/welcome-new-committer/index.html | 35 ++
blog/2026/04/29/from-user-to-committer/index.html | 30 ++
.../index.html | 57 +++
blog/2026/06/11/cve-2026-49328/index.html | 36 ++
blog/archive/index.html | 4 +
blog/atom.xml | 388 ++++++++++++++
blog/authors/index.html | 4 +
blog/feed.json | 101 ++++
blog/index.html | 25 +
blog/rss.xml | 374 ++++++++++++++
blog/tags/announcement/index.html | 15 +
blog/tags/apache/index.html | 11 +
blog/tags/committer/index.html | 11 +
blog/tags/cve-2026-49328/index.html | 5 +
blog/tags/fastexcel/index.html | 7 +
blog/tags/fesod/index.html | 14 +
blog/tags/index.html | 4 +
blog/tags/migration/index.html | 7 +
blog/tags/opensource/index.html | 11 +
blog/tags/release/index.html | 6 +
blog/tags/security/index.html | 5 +
community/brand/index.html | 10 +
community/committer/become-committer/index.html | 68 +++
community/committer/icla/index.html | 64 +++
community/committer/onboarding/index.html | 54 ++
.../contribution/code-review-guide/index.html | 34 ++
community/contribution/commit-format/index.html | 35 ++
community/contribution/contribute-code/index.html | 63 +++
community/contribution/contribute-doc/index.html | 55 ++
community/contribution/index.html | 63 +++
community/feedback/index.html | 48 ++
community/index.html | 67 +++
community/maturity/index.html | 297 +++++++++++
community/pmc/become-pmc-member/index.html | 34 ++
community/pmc/nominate-committer/index.html | 68 +++
community/pmc/onboarding/index.html | 22 +
community/release/release-version/index.html | 195 ++++++++
community/release/verify-release/index.html | 91 ++++
community/security/index.html | 23 +
docs/download/index.html | 75 +++
docs/index.html | 32 ++
docs/migration/from-fastexcel/index.html | 555 +++++++++++++++++++++
docs/quickstart/guide/index.html | 78 +++
docs/quickstart/simple-example/index.html | 11 +
docs/sheet/advanced/custom-converter/index.html | 46 ++
docs/sheet/advanced/large-file/index.html | 22 +
docs/sheet/advanced/password/index.html | 22 +
docs/sheet/fill/index.html | 150 ++++++
docs/sheet/help/annotation/index.html | 382 ++++++++++++++
docs/sheet/help/core-class/index.html | 370 ++++++++++++++
docs/sheet/help/faq/index.html | 279 +++++++++++
docs/sheet/help/large-data/index.html | 48 ++
docs/sheet/help/parameter/index.html | 433 ++++++++++++++++
docs/sheet/read/converter/index.html | 16 +
docs/sheet/read/csv/index.html | 97 ++++
docs/sheet/read/exception/index.html | 12 +
docs/sheet/read/extra/index.html | 29 ++
docs/sheet/read/format/index.html | 89 ++++
docs/sheet/read/head/index.html | 26 +
docs/sheet/read/num-rows/index.html | 19 +
docs/sheet/read/pojo/index.html | 35 ++
docs/sheet/read/sheet/index.html | 41 ++
docs/sheet/read/simple/index.html | 59 +++
docs/sheet/read/spring/index.html | 35 ++
docs/sheet/write/converter/index.html | 31 ++
docs/sheet/write/csv/index.html | 88 ++++
docs/sheet/write/extra/index.html | 62 +++
docs/sheet/write/format/index.html | 17 +
docs/sheet/write/head/index.html | 87 ++++
docs/sheet/write/image/index.html | 100 ++++
docs/sheet/write/merge/index.html | 57 +++
docs/sheet/write/pojo/index.html | 72 +++
docs/sheet/write/sheet/index.html | 45 ++
docs/sheet/write/simple/index.html | 29 ++
docs/sheet/write/spring/index.html | 12 +
docs/sheet/write/style/index.html | 55 ++
img/apache-incubator.svg | 171 +++++++
img/blog/20250917-01.png | Bin 0 -> 335411 bytes
img/blog/20250917-02.png | Bin 0 -> 40889 bytes
img/blog/apache-fesod-new-committer.svg | 34 ++
img/community/gmail-setting.png | Bin 0 -> 166719 bytes
img/community/icla-01.png | Bin 0 -> 41209 bytes
img/community/icla-02.png | Bin 0 -> 47829 bytes
img/community/icla-03.png | Bin 0 -> 64617 bytes
img/community/icla-04.png | Bin 0 -> 21166 bytes
img/community/link-github.png | Bin 0 -> 30463 bytes
img/community/reset-passwd.png | Bin 0 -> 180046 bytes
img/community/roster-add-committer.png | Bin 0 -> 14561 bytes
img/docs/write/sample-image.svg | 24 +
img/favicon.ico | Bin 0 -> 15406 bytes
img/github_icon.svg | 21 +
img/index/undraw_files.svg | 19 +
img/index/undraw_programming.svg | 143 ++++++
img/index/undraw_spreadsheet.svg | 19 +
img/logo/fesod-logo-icon-white.png | Bin 0 -> 13489 bytes
img/logo/fesod-logo-icon.png | Bin 0 -> 15935 bytes
img/logo/fesod-logo-icon.svg | 19 +
img/logo/fesod-logo-white-y.png | Bin 0 -> 28116 bytes
img/logo/fesod-logo-white.svg | 19 +
img/logo/fesod-logo-y.png | Bin 0 -> 29073 bytes
img/logo/fesod-logo.png | Bin 0 -> 40755 bytes
img/logo/fesod-logo.svg | 19 +
index.html | 5 +
robots.txt | 2 +
search-index.json | 1 +
search/index.html | 4 +
sitemap.xml | 1 +
team/index.html | 4 +
zh-cn/.nojekyll | 0
zh-cn/404.html | 4 +
zh-cn/assets/css/styles.721b8549.css | 1 +
...fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg | 19 +
...fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png | Bin 0 -> 40755 bytes
...-logo-icon-3285667fcb12e822454e1e8bc1296eed.png | Bin 0 -> 15935 bytes
...-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg | 19 +
...0250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png | Bin 0 -> 335411 bytes
...0250917-02-8ffdd34d6cbc80004f5404c95a83de58.png | Bin 0 -> 40889 bytes
...il-setting-64fa2bef013a1817489ee6195d293a97.png | Bin 0 -> 166719 bytes
.../icla-01-83a226e824e1b9a9d08813f21b882e31.png | Bin 0 -> 41209 bytes
.../icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png | Bin 0 -> 47829 bytes
.../icla-03-c8df2f12ca6b2bc591a4e73aced61280.png | Bin 0 -> 64617 bytes
.../icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png | Bin 0 -> 21166 bytes
...ink-github-d7d62b2548477c375730056807eacc89.png | Bin 0 -> 30463 bytes
...set-passwd-e8828118db9277c6fe25a82a5a0bb3da.png | Bin 0 -> 180046 bytes
...-committer-20873b578f8c3b1853cd24d52171ca44.png | Bin 0 -> 14561 bytes
zh-cn/assets/js/00e1230c.e0eef312.js | 1 +
zh-cn/assets/js/01a85c17.d4a0e19d.js | 1 +
zh-cn/assets/js/026e6981.f7aa20a7.js | 1 +
zh-cn/assets/js/035672d3.6e139c24.js | 1 +
zh-cn/assets/js/05542247.740341d9.js | 1 +
zh-cn/assets/js/0e5da277.e1b681af.js | 1 +
zh-cn/assets/js/138e0e15.9b1e4a76.js | 1 +
zh-cn/assets/js/1415.49234292.js | 1 +
zh-cn/assets/js/1465.8afb8067.js | 27 +
zh-cn/assets/js/1498.047856a8.js | 1 +
zh-cn/assets/js/14fc6b04.3a667b49.js | 1 +
zh-cn/assets/js/1672.ac5f5174.js | 1 +
zh-cn/assets/js/17896441.2c2cd4ef.js | 1 +
zh-cn/assets/js/1798.c7c77970.js | 1 +
zh-cn/assets/js/1880.8bc01267.js | 1 +
zh-cn/assets/js/18b1fbba.511762a2.js | 1 +
zh-cn/assets/js/1922.e7922913.js | 1 +
zh-cn/assets/js/1935f3f4.0e631409.js | 1 +
zh-cn/assets/js/1a3b291f.89aef7ad.js | 1 +
zh-cn/assets/js/1a4e3797.69d0e3e1.js | 4 +
zh-cn/assets/js/2039.8245f5a7.js | 24 +
zh-cn/assets/js/2083.6b0edc38.js | 1 +
zh-cn/assets/js/21f75b74.0ec10c97.js | 1 +
zh-cn/assets/js/23f7ca76.62512fb7.js | 1 +
zh-cn/assets/js/2411.762cef65.js | 1 +
zh-cn/assets/js/2426.12e423cf.js | 1 +
zh-cn/assets/js/2557682e.b7f650b3.js | 1 +
zh-cn/assets/js/2621.23295aaa.js | 215 ++++++++
zh-cn/assets/js/2800.2660ecbd.js | 41 ++
zh-cn/assets/js/2983.7d925ee1.js | 148 ++++++
zh-cn/assets/js/2995.d990c09b.js | 86 ++++
zh-cn/assets/js/2bc519fb.c953f8c3.js | 1 +
zh-cn/assets/js/3023.4be1dbab.js | 77 +++
zh-cn/assets/js/3050cd25.631c24dd.js | 1 +
zh-cn/assets/js/32d423f7.7ac9836e.js | 1 +
zh-cn/assets/js/33296af2.1f4408ad.js | 1 +
zh-cn/assets/js/3354.56465d1b.js | 153 ++++++
zh-cn/assets/js/3362.6af26af5.js | 1 +
zh-cn/assets/js/3527.da1e4c81.js | 255 ++++++++++
zh-cn/assets/js/3548.8e3967d3.js | 1 +
zh-cn/assets/js/35ef6288.2f7632ee.js | 1 +
zh-cn/assets/js/3696a4b8.46b5b293.js | 1 +
zh-cn/assets/js/36994c47.a8d503bd.js | 1 +
zh-cn/assets/js/37f769b0.f53c1d60.js | 1 +
zh-cn/assets/js/3852.e1f1a458.js | 90 ++++
zh-cn/assets/js/3908.9d97dcde.js | 23 +
zh-cn/assets/js/3958.bf2b780c.js | 1 +
zh-cn/assets/js/39832ed4.0ca6764f.js | 1 +
zh-cn/assets/js/3a6abea9.91d3deee.js | 1 +
zh-cn/assets/js/3aafc6e9.8a0e88e1.js | 1 +
zh-cn/assets/js/4089.3e7d5969.js | 1 +
zh-cn/assets/js/4116.6d616022.js | 1 +
zh-cn/assets/js/4281.61b90dee.js | 1 +
zh-cn/assets/js/42f9ab63.f36a208b.js | 1 +
zh-cn/assets/js/4529.047a2dd5.js | 1 +
zh-cn/assets/js/4557.2831c3a9.js | 1 +
zh-cn/assets/js/4596.c15e80af.js | 82 +++
zh-cn/assets/js/4817.dcdbbac5.js | 104 ++++
zh-cn/assets/js/4823c654.02628172.js | 1 +
zh-cn/assets/js/5028.574cb63e.js | 36 ++
zh-cn/assets/js/5127.38ce1c79.js | 1 +
zh-cn/assets/js/516dc88b.9d087b08.js | 1 +
zh-cn/assets/js/5277.03f6c19e.js | 38 ++
zh-cn/assets/js/5329.3b1eaa5b.js | 1 +
zh-cn/assets/js/5369.e41dc62b.js | 1 +
zh-cn/assets/js/53c18be7.2405a91f.js | 1 +
zh-cn/assets/js/551.db2292b0.js | 79 +++
zh-cn/assets/js/5653.d2d55026.js | 1 +
zh-cn/assets/js/5806.7b0236ca.js | 1 +
zh-cn/assets/js/5855.21122fc9.js | 1 +
zh-cn/assets/js/5885.6a3e6aab.js | 1 +
zh-cn/assets/js/5b656150.fb69ebbc.js | 1 +
zh-cn/assets/js/5e6cf37e.9680b039.js | 1 +
zh-cn/assets/js/5e95c892.755e4ceb.js | 1 +
zh-cn/assets/js/5f5c637e.d4f72e1c.js | 1 +
zh-cn/assets/js/6016.3ca06a5e.js | 1 +
zh-cn/assets/js/6211.88936703.js | 4 +
zh-cn/assets/js/621db11d.6861fd08.js | 1 +
zh-cn/assets/js/6279.947276da.js | 1 +
zh-cn/assets/js/65556891.62710ecf.js | 1 +
zh-cn/assets/js/6578.3a80bb05.js | 1 +
zh-cn/assets/js/660e9ab8.b6b60218.js | 1 +
zh-cn/assets/js/674.56c0ec8c.js | 1 +
zh-cn/assets/js/6827.a4c6176a.js | 1 +
zh-cn/assets/js/6875c492.98d30afd.js | 1 +
zh-cn/assets/js/6910.93d66ffc.js | 1 +
zh-cn/assets/js/6999.02845492.js | 1 +
zh-cn/assets/js/6e79d794.9836e11a.js | 1 +
zh-cn/assets/js/6ea91d84.c4639c81.js | 1 +
zh-cn/assets/js/704.8df70b1f.js | 24 +
zh-cn/assets/js/7052.7a09bd03.js | 1 +
zh-cn/assets/js/70652f5d.86a79799.js | 1 +
zh-cn/assets/js/706f3984.a0c3dea3.js | 1 +
zh-cn/assets/js/70f646db.bc50744d.js | 1 +
zh-cn/assets/js/7108.4cbd9a68.js | 1 +
zh-cn/assets/js/7158.ae0edc8c.js | 1 +
zh-cn/assets/js/7297.7b4efe07.js | 115 +++++
zh-cn/assets/js/7354.d7c32b36.js | 1 +
zh-cn/assets/js/7431.8bccbabc.js | 226 +++++++++
zh-cn/assets/js/7484.a3da2aa5.js | 1 +
zh-cn/assets/js/7492.45c9aaf7.js | 1 +
zh-cn/assets/js/7558.65194fa9.js | 5 +
zh-cn/assets/js/7750.31867392.js | 34 ++
zh-cn/assets/js/77914434.ec6a2fcb.js | 1 +
zh-cn/assets/js/77ad7f28.65a1fc0c.js | 1 +
zh-cn/assets/js/7ab5af9c.71d810ac.js | 1 +
zh-cn/assets/js/7bacda60.a6f05a11.js | 1 +
zh-cn/assets/js/7c8dfedd.296bfc72.js | 1 +
zh-cn/assets/js/8001.17116c39.js | 1 +
zh-cn/assets/js/8041.bd029986.js | 287 +++++++++++
zh-cn/assets/js/8131.96c39786.js | 1 +
zh-cn/assets/js/814f3328.8b6268bb.js | 1 +
zh-cn/assets/js/8197.707fcdc6.js | 1 +
zh-cn/assets/js/8406.a049668c.js | 1 +
zh-cn/assets/js/846.55acd6e2.js | 1 +
zh-cn/assets/js/84f1c788.9743354a.js | 1 +
zh-cn/assets/js/859.ad9fdc65.js | 1 +
zh-cn/assets/js/8599.7765a37a.js | 64 +++
zh-cn/assets/js/8646.d2071ca2.js | 1 +
zh-cn/assets/js/8768.2424319c.js | 1 +
zh-cn/assets/js/8811.c72e6e0e.js | 1 +
zh-cn/assets/js/883.651dd44a.js | 80 +++
zh-cn/assets/js/8946.c675b412.js | 160 ++++++
zh-cn/assets/js/8a2aa126.e097f145.js | 1 +
zh-cn/assets/js/8d9c01b3.15751dca.js | 1 +
zh-cn/assets/js/8db46f1a.afb1c3e4.js | 1 +
zh-cn/assets/js/906a4097.6a5b8097.js | 1 +
zh-cn/assets/js/92380f4a.05defbd6.js | 1 +
zh-cn/assets/js/9247.9eca23a2.js | 1 +
zh-cn/assets/js/932b6cf8.0028364a.js | 1 +
zh-cn/assets/js/9475.fdff35d7.js | 62 +++
zh-cn/assets/js/9500.cbf0d6f8.js | 8 +
zh-cn/assets/js/9608.0bae41be.js | 93 ++++
zh-cn/assets/js/979.6b356cf0.js | 141 ++++++
zh-cn/assets/js/97fe7548.cf4ca5a7.js | 1 +
zh-cn/assets/js/9904a28c.d7e7ca0e.js | 1 +
zh-cn/assets/js/995798e3.4361e643.js | 1 +
zh-cn/assets/js/9e4087bc.14f52c79.js | 1 +
zh-cn/assets/js/a08ce007.30770322.js | 1 +
zh-cn/assets/js/a1225c8b.b2329e04.js | 1 +
zh-cn/assets/js/a1c89fd2.2c53b6c1.js | 1 +
zh-cn/assets/js/a2451e7a.199d96a3.js | 1 +
zh-cn/assets/js/a6aa9e1f.2ce66791.js | 1 +
zh-cn/assets/js/a7456010.955429ca.js | 1 +
zh-cn/assets/js/a7bd4aaa.4e78779a.js | 1 +
zh-cn/assets/js/a94703ab.8152de4b.js | 1 +
zh-cn/assets/js/aba21aa0.377ad74b.js | 1 +
zh-cn/assets/js/acecf23e.8b52626d.js | 1 +
zh-cn/assets/js/b2fa7a64.9dd77a2a.js | 1 +
zh-cn/assets/js/b4229a02.89809491.js | 1 +
zh-cn/assets/js/b8255b90.866866a3.js | 1 +
zh-cn/assets/js/bbd078df.9a70f63e.js | 1 +
zh-cn/assets/js/be2eec21.1f1f2079.js | 1 +
zh-cn/assets/js/beba5e5e.8bb083b1.js | 1 +
zh-cn/assets/js/bf80cbe7.20daf73c.js | 1 +
zh-cn/assets/js/c1ff7703.08d5de57.js | 1 +
zh-cn/assets/js/c4f5d8e4.2e47602b.js | 1 +
zh-cn/assets/js/c6f3059b.c9b32039.js | 1 +
zh-cn/assets/js/ccc49370.a2fd741e.js | 1 +
zh-cn/assets/js/cd11f224.2240f87e.js | 1 +
zh-cn/assets/js/d0f020bf.cc95ed5f.js | 1 +
zh-cn/assets/js/d58f16ca.e5019391.js | 1 +
zh-cn/assets/js/dce8ecc0.4817d2f0.js | 1 +
zh-cn/assets/js/df5d2657.b5993701.js | 1 +
zh-cn/assets/js/e0719818.50c8207c.js | 1 +
zh-cn/assets/js/e2a2ffd3.c3120095.js | 1 +
zh-cn/assets/js/e3ca1761.c2d2ee2d.js | 1 +
zh-cn/assets/js/e7985601.10ab7f93.js | 1 +
zh-cn/assets/js/e87656ac.98b30505.js | 1 +
zh-cn/assets/js/ea6ff1c0.8a4b59c7.js | 1 +
zh-cn/assets/js/ec043a98.26e50415.js | 1 +
zh-cn/assets/js/ec6079f5.f04444da.js | 1 +
zh-cn/assets/js/ee6d64e6.ee259058.js | 1 +
zh-cn/assets/js/f0bb121e.c55185d1.js | 1 +
zh-cn/assets/js/f133e5e2.b1c8992a.js | 1 +
zh-cn/assets/js/f341d759.78e47081.js | 1 +
zh-cn/assets/js/f59a517c.be2fad03.js | 1 +
zh-cn/assets/js/f7ff6690.b4c11520.js | 1 +
zh-cn/assets/js/f98e3ca9.9a334fc7.js | 1 +
zh-cn/assets/js/fa69dec0.39a0338d.js | 1 +
zh-cn/assets/js/main.dddb6da8.js | 38 ++
zh-cn/assets/js/runtime~main.8b23e8d1.js | 1 +
.../17/fesod-entered-apache-incubator/index.html | 64 +++
.../index.html | 79 +++
.../2026/02/27/welcome-new-committer/index.html | 35 ++
.../2026/04/29/from-user-to-committer/index.html | 31 ++
.../index.html | 57 +++
zh-cn/blog/2026/06/11/cve-2026-49328/index.html | 36 ++
zh-cn/blog/archive/index.html | 4 +
zh-cn/blog/atom.xml | 369 ++++++++++++++
zh-cn/blog/authors/index.html | 4 +
zh-cn/blog/feed.json | 101 ++++
zh-cn/blog/index.html | 23 +
zh-cn/blog/rss.xml | 355 +++++++++++++
zh-cn/blog/tags/announcement/index.html | 13 +
zh-cn/blog/tags/apache/index.html | 11 +
zh-cn/blog/tags/committer/index.html | 11 +
zh-cn/blog/tags/cve-2026-49328/index.html | 5 +
zh-cn/blog/tags/fastexcel/index.html | 7 +
zh-cn/blog/tags/fesod/index.html | 14 +
zh-cn/blog/tags/index.html | 4 +
zh-cn/blog/tags/migration/index.html | 7 +
zh-cn/blog/tags/opensource/index.html | 11 +
zh-cn/blog/tags/release/index.html | 6 +
zh-cn/blog/tags/security/index.html | 5 +
zh-cn/community/brand/index.html | 10 +
.../committer/become-committer/index.html | 52 ++
zh-cn/community/committer/icla/index.html | 64 +++
zh-cn/community/committer/onboarding/index.html | 54 ++
.../contribution/code-review-guide/index.html | 34 ++
.../contribution/commit-format/index.html | 35 ++
.../contribution/contribute-code/index.html | 64 +++
.../contribution/contribute-doc/index.html | 55 ++
zh-cn/community/contribution/index.html | 60 +++
zh-cn/community/feedback/index.html | 47 ++
zh-cn/community/index.html | 64 +++
zh-cn/community/maturity/index.html | 297 +++++++++++
zh-cn/community/pmc/become-pmc-member/index.html | 33 ++
zh-cn/community/pmc/nominate-committer/index.html | 64 +++
zh-cn/community/pmc/onboarding/index.html | 22 +
zh-cn/community/release/release-version/index.html | 195 ++++++++
zh-cn/community/release/verify-release/index.html | 103 ++++
zh-cn/community/security/index.html | 21 +
zh-cn/docs/download/index.html | 76 +++
zh-cn/docs/index.html | 22 +
zh-cn/docs/migration/from-fastexcel/index.html | 548 ++++++++++++++++++++
zh-cn/docs/quickstart/guide/index.html | 74 +++
zh-cn/docs/quickstart/simple-example/index.html | 11 +
.../sheet/advanced/custom-converter/index.html | 46 ++
zh-cn/docs/sheet/advanced/large-file/index.html | 22 +
zh-cn/docs/sheet/advanced/password/index.html | 22 +
zh-cn/docs/sheet/fill/index.html | 140 ++++++
zh-cn/docs/sheet/help/annotation/index.html | 376 ++++++++++++++
zh-cn/docs/sheet/help/core-class/index.html | 349 +++++++++++++
zh-cn/docs/sheet/help/faq/index.html | 262 ++++++++++
zh-cn/docs/sheet/help/large-data/index.html | 32 ++
zh-cn/docs/sheet/help/parameter/index.html | 433 ++++++++++++++++
zh-cn/docs/sheet/read/converter/index.html | 15 +
zh-cn/docs/sheet/read/csv/index.html | 91 ++++
zh-cn/docs/sheet/read/exception/index.html | 12 +
zh-cn/docs/sheet/read/extra/index.html | 29 ++
zh-cn/docs/sheet/read/format/index.html | 89 ++++
zh-cn/docs/sheet/read/head/index.html | 25 +
zh-cn/docs/sheet/read/num-rows/index.html | 16 +
zh-cn/docs/sheet/read/pojo/index.html | 30 ++
zh-cn/docs/sheet/read/sheet/index.html | 40 ++
zh-cn/docs/sheet/read/simple/index.html | 53 ++
zh-cn/docs/sheet/read/spring/index.html | 30 ++
zh-cn/docs/sheet/write/converter/index.html | 31 ++
zh-cn/docs/sheet/write/csv/index.html | 82 +++
zh-cn/docs/sheet/write/extra/index.html | 61 +++
zh-cn/docs/sheet/write/format/index.html | 17 +
zh-cn/docs/sheet/write/head/index.html | 80 +++
zh-cn/docs/sheet/write/image/index.html | 94 ++++
zh-cn/docs/sheet/write/merge/index.html | 57 +++
zh-cn/docs/sheet/write/pojo/index.html | 69 +++
zh-cn/docs/sheet/write/sheet/index.html | 45 ++
zh-cn/docs/sheet/write/simple/index.html | 29 ++
zh-cn/docs/sheet/write/spring/index.html | 11 +
zh-cn/docs/sheet/write/style/index.html | 54 ++
zh-cn/img/apache-incubator.svg | 171 +++++++
zh-cn/img/blog/20250917-01.png | Bin 0 -> 335411 bytes
zh-cn/img/blog/20250917-02.png | Bin 0 -> 40889 bytes
zh-cn/img/blog/apache-fesod-new-committer.svg | 34 ++
zh-cn/img/community/gmail-setting.png | Bin 0 -> 166719 bytes
zh-cn/img/community/icla-01.png | Bin 0 -> 41209 bytes
zh-cn/img/community/icla-02.png | Bin 0 -> 47829 bytes
zh-cn/img/community/icla-03.png | Bin 0 -> 64617 bytes
zh-cn/img/community/icla-04.png | Bin 0 -> 21166 bytes
zh-cn/img/community/link-github.png | Bin 0 -> 30463 bytes
zh-cn/img/community/reset-passwd.png | Bin 0 -> 180046 bytes
zh-cn/img/community/roster-add-committer.png | Bin 0 -> 14561 bytes
zh-cn/img/docs/write/sample-image.svg | 24 +
zh-cn/img/favicon.ico | Bin 0 -> 15406 bytes
zh-cn/img/github_icon.svg | 21 +
zh-cn/img/index/undraw_files.svg | 19 +
zh-cn/img/index/undraw_programming.svg | 143 ++++++
zh-cn/img/index/undraw_spreadsheet.svg | 19 +
zh-cn/img/logo/fesod-logo-icon-white.png | Bin 0 -> 13489 bytes
zh-cn/img/logo/fesod-logo-icon.png | Bin 0 -> 15935 bytes
zh-cn/img/logo/fesod-logo-icon.svg | 19 +
zh-cn/img/logo/fesod-logo-white-y.png | Bin 0 -> 28116 bytes
zh-cn/img/logo/fesod-logo-white.svg | 19 +
zh-cn/img/logo/fesod-logo-y.png | Bin 0 -> 29073 bytes
zh-cn/img/logo/fesod-logo.png | Bin 0 -> 40755 bytes
zh-cn/img/logo/fesod-logo.svg | 19 +
zh-cn/index.html | 4 +
zh-cn/robots.txt | 2 +
zh-cn/search-index.json | 1 +
zh-cn/search/index.html | 4 +
zh-cn/sitemap.xml | 1 +
zh-cn/team/index.html | 4 +
619 files changed, 19312 insertions(+)
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 00000000..563a2156
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# All configurations could be found here: https://github.com/apache/infrastructure-asfyaml/
+
+github:
+ description: "Fast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM."
+ homepage: https://fesod.apache.org
+ labels:
+ - java
+ - excel
+ - office
+ - poi
+ - xlsx
+ - xls
+ - csv
+ - fast-excel
+ - fastexcel
+ - easyexcel
+ enabled_merge_buttons:
+ squash: true
+ merge: false
+ rebase: false
+ protected_branches:
+ main:
+ required_pull_request_reviews:
+ dismiss_stale_reviews: true
+ required_approving_review_count: 1
+ dependabot_alerts: true
+ dependabot_updates: false
+notifications:
+ commits: commits@fesod.apache.org
+ issues: commits@fesod.apache.org
+ pullrequests: commits@fesod.apache.org
+ discussions: dev@fesod.apache.org
+
+publish:
+ whoami: gh-pages
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 00000000..e69de29b
diff --git a/404.html b/404.html
new file mode 100644
index 00000000..7a70d6c9
--- /dev/null
+++ b/404.html
@@ -0,0 +1,4 @@
+<!doctype html><html lang=en dir=ltr class="plugin-native plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Page Not Found | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apache.org/img/logo.svg /><meta data- [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
\ No newline at end of file
diff --git a/assets/css/styles.721b8549.css b/assets/css/styles.721b8549.css
new file mode 100644
index 00000000..aa6475cc
--- /dev/null
+++ b/assets/css/styles.721b8549.css
@@ -0,0 +1 @@
+@layer docusaurus.infima{:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--if [...]
\ No newline at end of file
diff --git a/assets/files/fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg b/assets/files/fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg
new file mode 100644
index 00000000..97929d90
--- /dev/null
+++ b/assets/files/fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg
@@ -0,0 +1,19 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="591" height="180" viewBox="0 0 591 180" fill="none"><path fill="#14824B" d="M95.8897 139.62L66.4027 110.133L66.4027 110.133C69.8119 113.542 69.812 119.07 66.4027 122.479L66.2471 122.635L51.8993 136.983C47.9944 140.887 47.9944 147.218 51.8993 151.123L68.1429 167.367C72.0478 171.272 78.3788 171.272 82.2836 167.367L95.8898 153.761C99.7946 149.856 99.7946 143.525 95.8897 139.62Z"></path><path fil [...]
\ No newline at end of file
diff --git a/assets/files/fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png b/assets/files/fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png
new file mode 100644
index 00000000..f588317f
Binary files /dev/null and b/assets/files/fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png differ
diff --git a/assets/files/fesod-logo-icon-3285667fcb12e822454e1e8bc1296eed.png b/assets/files/fesod-logo-icon-3285667fcb12e822454e1e8bc1296eed.png
new file mode 100644
index 00000000..65d71cbc
Binary files /dev/null and b/assets/files/fesod-logo-icon-3285667fcb12e822454e1e8bc1296eed.png differ
diff --git a/assets/files/fesod-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg b/assets/files/fesod-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg
new file mode 100644
index 00000000..4e574776
--- /dev/null
+++ b/assets/files/fesod-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg
@@ -0,0 +1,19 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="222" height="220" viewBox="0 0 222 220" fill="none"><path fill="#14824B" d="M113.324 163.939L81.7664 132.382L81.7664 132.382C85.415 136.03 85.4151 141.946 81.7665 145.595L81.6 145.761L66.2449 161.116C62.066 165.295 62.066 172.071 66.245 176.25L83.6291 193.634C87.8081 197.813 94.5836 197.813 98.7625 193.634L113.324 179.073C117.503 174.894 117.503 168.118 113.324 163.939Z"></path><path fill-rul [...]
\ No newline at end of file
diff --git a/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png b/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png
new file mode 100644
index 00000000..9a2f79cc
Binary files /dev/null and b/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png differ
diff --git a/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png b/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png
new file mode 100644
index 00000000..8366d55a
Binary files /dev/null and b/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png differ
diff --git a/assets/images/gmail-setting-64fa2bef013a1817489ee6195d293a97.png b/assets/images/gmail-setting-64fa2bef013a1817489ee6195d293a97.png
new file mode 100644
index 00000000..95e69220
Binary files /dev/null and b/assets/images/gmail-setting-64fa2bef013a1817489ee6195d293a97.png differ
diff --git a/assets/images/icla-01-83a226e824e1b9a9d08813f21b882e31.png b/assets/images/icla-01-83a226e824e1b9a9d08813f21b882e31.png
new file mode 100644
index 00000000..af3bef05
Binary files /dev/null and b/assets/images/icla-01-83a226e824e1b9a9d08813f21b882e31.png differ
diff --git a/assets/images/icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png b/assets/images/icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png
new file mode 100644
index 00000000..f3b91411
Binary files /dev/null and b/assets/images/icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png differ
diff --git a/assets/images/icla-03-c8df2f12ca6b2bc591a4e73aced61280.png b/assets/images/icla-03-c8df2f12ca6b2bc591a4e73aced61280.png
new file mode 100644
index 00000000..7b3da5a3
Binary files /dev/null and b/assets/images/icla-03-c8df2f12ca6b2bc591a4e73aced61280.png differ
diff --git a/assets/images/icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png b/assets/images/icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png
new file mode 100644
index 00000000..49445dd0
Binary files /dev/null and b/assets/images/icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png differ
diff --git a/assets/images/link-github-d7d62b2548477c375730056807eacc89.png b/assets/images/link-github-d7d62b2548477c375730056807eacc89.png
new file mode 100644
index 00000000..dce58cea
Binary files /dev/null and b/assets/images/link-github-d7d62b2548477c375730056807eacc89.png differ
diff --git a/assets/images/reset-passwd-e8828118db9277c6fe25a82a5a0bb3da.png b/assets/images/reset-passwd-e8828118db9277c6fe25a82a5a0bb3da.png
new file mode 100644
index 00000000..b03d74c9
Binary files /dev/null and b/assets/images/reset-passwd-e8828118db9277c6fe25a82a5a0bb3da.png differ
diff --git a/assets/images/roster-add-committer-20873b578f8c3b1853cd24d52171ca44.png b/assets/images/roster-add-committer-20873b578f8c3b1853cd24d52171ca44.png
new file mode 100644
index 00000000..37e647f2
Binary files /dev/null and b/assets/images/roster-add-committer-20873b578f8c3b1853cd24d52171ca44.png differ
diff --git a/assets/js/0058b4c6.acc2b13f.js b/assets/js/0058b4c6.acc2b13f.js
new file mode 100644
index 00000000..656fbebe
--- /dev/null
+++ b/assets/js/0058b4c6.acc2b13f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["266"],{86164(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/docs/","label":"Introduction","docId":"introduce","unlisted":false},{"type":"link","href":"/docs/download","label":"Download","docId":"download","unlisted":false},{"typ [...]
\ No newline at end of file
diff --git a/assets/js/01a85c17.d4a0e19d.js b/assets/js/01a85c17.d4a0e19d.js
new file mode 100644
index 00000000..d531cdf2
--- /dev/null
+++ b/assets/js/01a85c17.d4a0e19d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9786"],{29204(e,t,a){a.d(t,{J_:()=>b,x:()=>r,Gx:()=>C,Ki:()=>y,kJ:()=>x,OU:()=>_,e7:()=>m,in:()=>c});var s=a(91987),n=a(71763),i=a(17995),l=a(1831);function r(){let e=(0,l.A)(),t=e?.data?.blogMetadata;if(!t)throw Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}let o=n.createContext(null);function c({children:e,content:t,isBlog [...]
\ No newline at end of file
diff --git a/assets/js/035672d3.6e139c24.js b/assets/js/035672d3.6e139c24.js
new file mode 100644
index 00000000..2015007a
--- /dev/null
+++ b/assets/js/035672d3.6e139c24.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2390"],{89434(A,I,e){e.d(I,{A:()=>a});var s=e(91987);e(71763);var Q=e(45915);function a({children:A,fallback:I}){return(0,Q.A)()?(0,s.jsx)(s.Fragment,{children:A?.()}):I??null}},47237(A,I,e){e.r(I),e.d(I,{default:()=>j});var s,Q=e(91987),a=e(71763),E=e(89434),i=JSON.parse('{"pmc":[{"githubId":"29803617","gitUrl":"https://github.com/dave2wave","name":"Dave Fisher","isMentor":true},{"githubId":"13284744","gitUrl": [...]
\ No newline at end of file
diff --git a/assets/js/0553a1a7.36541fc3.js b/assets/js/0553a1a7.36541fc3.js
new file mode 100644
index 00000000..3072cbfd
--- /dev/null
+++ b/assets/js/0553a1a7.36541fc3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6777"],{14337(e){e.exports=JSON.parse('{"tag":{"label":"fesod","permalink":"/blog/tags/fesod","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/fesod","page":1,"postsPerPage":15,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/0fc1e0ab.a7e4daf9.js b/assets/js/0fc1e0ab.a7e4daf9.js
new file mode 100644
index 00000000..1ba4c2ba
--- /dev/null
+++ b/assets/js/0fc1e0ab.a7e4daf9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["652"],{24539(e,n,i){i.r(n),i.d(n,{metadata:()=>t,default:()=>h,frontMatter:()=>r,contentTitle:()=>a,toc:()=>c,assets:()=>o});var t=JSON.parse('{"id":"committer/icla","title":"Sign iCLA Guide","description":"\x3c!--","source":"@site/community/committer/icla.md","sourceDirName":"committer","slug":"/committer/icla","permalink":"/community/committer/icla","draft":false,"unlisted":false,"editUrl":"https://github.com/ [...]
\ No newline at end of file
diff --git a/assets/js/10e1fcd2.a85f04fe.js b/assets/js/10e1fcd2.a85f04fe.js
new file mode 100644
index 00000000..659c5764
--- /dev/null
+++ b/assets/js/10e1fcd2.a85f04fe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2414"],{16557(e,i,t){t.r(i),t.d(i,{metadata:()=>n,default:()=>h,frontMatter:()=>o,contentTitle:()=>s,toc:()=>c,assets:()=>l});var n=JSON.parse('{"id":"committer/onboarding","title":"Onboarding","description":"\x3c!--","source":"@site/community/committer/onboarding.md","sourceDirName":"committer","slug":"/committer/onboarding","permalink":"/community/committer/onboarding","draft":false,"unlisted":false,"editUrl": [...]
\ No newline at end of file
diff --git a/assets/js/138e0e15.9b1e4a76.js b/assets/js/138e0e15.9b1e4a76.js
new file mode 100644
index 00000000..24d70524
--- /dev/null
+++ b/assets/js/138e0e15.9b1e4a76.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1234"],{41597(e){e.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/1415.49234292.js b/assets/js/1415.49234292.js
new file mode 100644
index 00000000..de28d2da
--- /dev/null
+++ b/assets/js/1415.49234292.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1415"],{10234(e,s,c){c.d(s,{createTreeViewServices:()=>i.I});var i=c(35543);c(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/1465.8afb8067.js b/assets/js/1465.8afb8067.js
new file mode 100644
index 00000000..4c0069b7
--- /dev/null
+++ b/assets/js/1465.8afb8067.js
@@ -0,0 +1,27 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1465"],{55692(e,t,i){i.d(t,{m:()=>n});var r=i(88053),n=class{constructor(e){this.init=e,this.records=this.init()}static{(0,r.K)(this,"ImperativeState")}reset(){this.records=this.init()}}},83492(e,t,i){function r(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}i.d(t,{S:()=>r}),(0,i(88053).K)(r,"populateCommonDb")},91200(e,t,i){i.d(t, [...]
+ .treeView-node-label {
+ font-size: ${t};
+ fill: ${i};
+ white-space: pre;
+ }
+ .treeView-node-dir {
+ font-weight: bold;
+ }
+ .treeView-node-line {
+ stroke: ${r};
+ }
+ .treeView-node-icon {
+ color: ${n};
+ }
+ .treeView-node-description {
+ font-size: ${t};
+ fill: ${o};
+ font-style: italic;
+ white-space: pre;
+ }
+ .treeView-highlight-bg {
+ fill: ${s};
+ stroke: ${l};
+ stroke-width: 1;
+ }
+ `},"styles")}}}]);
\ No newline at end of file
diff --git a/assets/js/1498.5314f8f7.js b/assets/js/1498.5314f8f7.js
new file mode 100644
index 00000000..af1b9427
--- /dev/null
+++ b/assets/js/1498.5314f8f7.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,r,t,s,n,o={86897(e,r,t){t.d(r,{BH:()=>a,Ho:()=>p,IH:()=>i,sx:()=>o});var s=t(36430),n=t.n(s);t(18100)(n()),t(22413).A(n()),t(19955)(n());let o=[],a=["zh","en"],i="search-index{dir}.json?_=1df45972",p=1}},a={};function i(e){var r=a[e];if(void 0!==r)return r.exports;var t=a[e]={exports:{}};return o[e].call(t.exports,t,t.exports,i),t.exports}i.m=o,i.x=()=>{var e=i.O(void 0,["3958"],()=>i(78658));return i.O(e)},i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return [...]
\ No newline at end of file
diff --git a/assets/js/1672.ac5f5174.js b/assets/js/1672.ac5f5174.js
new file mode 100644
index 00000000..d9da06b1
--- /dev/null
+++ b/assets/js/1672.ac5f5174.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1672"],{49805(e,s,a){a.d(s,{diagram:()=>b.AC});var b=a(65529);a(45644),a(59673),a(51355),a(60368),a(1033),a(94247),a(69976),a(33),a(22679),a(735),a(56170),a(13071),a(21976),a(94812),a(30740),a(92371),a(88053)}}]);
\ No newline at end of file
diff --git a/assets/js/16d33c03.1194700d.js b/assets/js/16d33c03.1194700d.js
new file mode 100644
index 00000000..95592009
--- /dev/null
+++ b/assets/js/16d33c03.1194700d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1509"],{38986(e,T,n){n.r(T),n.d(T,{assets:()=>R,contentTitle:()=>d,default:()=>U,frontMatter:()=>i,metadata:()=>a,toc:()=>o});var a=n(2291),l=n(91987),t=n(67008);let i={title:"From User to Committer",description:"From User to Committer",authors:["bengbengbalabalabeng"],tags:["opensource","apache","committer","fesod"]},d,R={authorsImageUrls:[void 0]},o=[{value:"My First Encounter with Apache Fesod (Incubating)",i [...]
\ No newline at end of file
diff --git a/assets/js/17896441.2c2cd4ef.js b/assets/js/17896441.2c2cd4ef.js
new file mode 100644
index 00000000..4434d4e5
--- /dev/null
+++ b/assets/js/17896441.2c2cd4ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["106"],{94411(e,n,t){t.d(n,{A:()=>c});var s=t(91987);t(71763);var i=t(13526),r=t(56111),l=t(79218),a=t(53727);function o({className:e}){return(0,s.jsx)(a.A,{type:"caution",title:(0,s.jsx)(r.Rc,{}),className:(0,i.A)(e,l.G.common.unlistedBanner),children:(0,s.jsx)(r.Uh,{})})}function c(e){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.AE,{}),(0,s.jsx)(o,{...e})]})}},94318(e,n,t){t.d(n,{A:()=>d});var s=t(91987); [...]
\ No newline at end of file
diff --git a/assets/js/1798.c7c77970.js b/assets/js/1798.c7c77970.js
new file mode 100644
index 00000000..d668e769
--- /dev/null
+++ b/assets/js/1798.c7c77970.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1798"],{52421(e,t,r){r.r(t),r.d(t,{getEdgesToRender:()=>R,render:()=>b});var a=r(34570),i=r(69976),n=r(33);r(22679),r(735);var d=r(56170);r(13071),r(21976),r(94812);var o=r(30740),s=r(92371),l=r(88053),g=r(72478),h=r(14585),f=r(62399),c=(0,l.K)((e,t,r)=>Math.max(t,Math.min(r,e)),"clamp"),p=(0,l.K)((e="TB")=>{switch(e){case"BT":return"bottom";case"LR":return"right";case"RL":return"left";default:return"top"}},"get [...]
\ No newline at end of file
diff --git a/assets/js/1880.8bc01267.js b/assets/js/1880.8bc01267.js
new file mode 100644
index 00000000..0ac7f260
--- /dev/null
+++ b/assets/js/1880.8bc01267.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1880"],{58347(e,s,c){c.d(s,{createInfoServices:()=>t.v});var t=c(4455);c(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/1922.e7922913.js b/assets/js/1922.e7922913.js
new file mode 100644
index 00000000..fec3fd5d
--- /dev/null
+++ b/assets/js/1922.e7922913.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1922"],{60777(e,r,t){t.d(r,{diagram:()=>i});var s=t(9242);t(59673),t(51355),t(1033),t(94247),t(69976),t(33),t(22679),t(735),t(56170),t(13071),t(21976),t(94812),t(30740),t(92371);var a=t(88053),i={parser:s.Zk,get db(){return new s.u4(2)},renderer:s.q7,styles:s.tM,init:(0,a.K)(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]);
\ No newline at end of file
diff --git a/assets/js/1a4e3797.69d0e3e1.js b/assets/js/1a4e3797.69d0e3e1.js
new file mode 100644
index 00000000..7603cc60
--- /dev/null
+++ b/assets/js/1a4e3797.69d0e3e1.js
@@ -0,0 +1,4 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5847"],{78444(e,t,r){r.d(t,{W:()=>u});var l=r(71763),s=r(59326);let a=["zero","one","two","few","many","other"];function n(e){return a.filter(t=>e.includes(t))}let c={locale:"en",pluralForms:n(["one","other"]),select:e=>1===e?"one":"other"};function u(){let e=function(){let{i18n:{currentLocale:e}}=(0,s.A)();return(0,l.useMemo)(()=>{try{let t;return t=new Intl.PluralRules(e),{locale:e,pluralForms:n(t.resolvedOpti [...]
+Docusaurus will fallback to the default (English) implementation.
+Error: ${t.message}
+`),c}},[e])}();return{selectMessage:(t,r)=>(function(e,t,r){let l=e.split("|");if(1===l.length)return l[0];l.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);let s=r.select(t);return l[Math.min(r.pluralForms.indexOf(s),l.length-1)]})(r,t,e)}}},10676(e,t,r){r.r(t),r.d(t,{default:()=>P});var l=r(91987),s=r(71763),a=r(59326),n=r(82893), [...]
\ No newline at end of file
diff --git a/assets/js/1ed9728e.496378db.js b/assets/js/1ed9728e.496378db.js
new file mode 100644
index 00000000..3fae37c0
--- /dev/null
+++ b/assets/js/1ed9728e.496378db.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["299"],{58809(T,e,R){R.r(e),R.d(e,{assets:()=>d,contentTitle:()=>p,default:()=>V,frontMatter:()=>l,metadata:()=>N,toc:()=>a});var N=R(36656),M=R(91987),U=R(67008);let l={title:"Welcome Apache Fesod's New Committer",description:"Welcome Apache Fesod's New Committer",authors:["GOODBOY008"],tags:["opensource","apache","committer","fesod"]},p,d={authorsImageUrls:[void 0]},a=[];function E(T){let e={blockquote:"blockqu [...]
\ No newline at end of file
diff --git a/assets/js/2039.8245f5a7.js b/assets/js/2039.8245f5a7.js
new file mode 100644
index 00000000..9d2e5d0b
--- /dev/null
+++ b/assets/js/2039.8245f5a7.js
@@ -0,0 +1,24 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2039"],{83492(t,e,a){function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(88053).K)(r,"populateCommonDb")},15850(t,e,a){a.d(e,{diagram:()=>$});var r=a(83492),i=a(34969),l=a(94812),o=a(30740),s=a(92371),c=a(88053),n=a(99183),d=o.UI.packet,k=class{constructor(){this.packet=[],this.setAccTitle=o.SV,this.getA [...]
+ .packetByte {
+ font-size: ${e.byteFontSize};
+ }
+ .packetByte.start {
+ fill: ${e.startByteColor};
+ }
+ .packetByte.end {
+ fill: ${e.endByteColor};
+ }
+ .packetLabel {
+ fill: ${e.labelColor};
+ font-size: ${e.labelFontSize};
+ }
+ .packetTitle {
+ fill: ${e.titleColor};
+ font-size: ${e.titleFontSize};
+ }
+ .packetBlock {
+ stroke: ${e.blockStrokeColor};
+ stroke-width: ${e.blockStrokeWidth};
+ fill: ${e.blockFillColor};
+ }
+ `},"styles")}}}]);
\ No newline at end of file
diff --git a/assets/js/2083.6b0edc38.js b/assets/js/2083.6b0edc38.js
new file mode 100644
index 00000000..820f0108
--- /dev/null
+++ b/assets/js/2083.6b0edc38.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2083"],{69998(e,r,t){t.d(r,{diagram:()=>g});var a=t(20681),n=t(83492);t(34969),t(30740);var s=t(92371),l=t(88053),i=t(99183),p=(0,i.Pz)().RailroadPeg.parser.LangiumParser,o=(0,l.K)(e=>{let r=e.alternatives.map(u);return 1===r.length?r[0]:{type:"choice",alternatives:r}},"transformOrderedChoice"),u=(0,l.K)(e=>{let r=e.elements.map(m);return 1===r.length?r[0]:{type:"sequence",elements:r}},"transformSequence"),m=(0, [...]
\ No newline at end of file
diff --git a/assets/js/213c1e68.be170e6f.js b/assets/js/213c1e68.be170e6f.js
new file mode 100644
index 00000000..75551f47
--- /dev/null
+++ b/assets/js/213c1e68.be170e6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6587"],{59583(e,n,s){s.r(n),s.d(n,{metadata:()=>i,default:()=>h,frontMatter:()=>l,contentTitle:()=>a,toc:()=>o,assets:()=>t});var i=JSON.parse('{"id":"release/verify-release","title":"How to Verify Release","description":"\x3c!--","source":"@site/community/release/verify-release.md","sourceDirName":"release","slug":"/release/verify-release","permalink":"/community/release/verify-release","draft":false,"unlisted" [...]
\ No newline at end of file
diff --git a/assets/js/2411.762cef65.js b/assets/js/2411.762cef65.js
new file mode 100644
index 00000000..a30d64e0
--- /dev/null
+++ b/assets/js/2411.762cef65.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2411"],{90918(e,r,s){s.d(r,{diagram:()=>i});var a=s(66780);s(45644),s(59673),s(51355),s(1033),s(94247),s(69976),s(33),s(22679),s(735),s(56170),s(13071),s(21976),s(94812),s(30740),s(92371);var t=s(88053),i={parser:a._$,get db(){return new a.NM},renderer:a.Lh,styles:a.tM,init:(0,t.K)(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]);
\ No newline at end of file
diff --git a/assets/js/2426.12e423cf.js b/assets/js/2426.12e423cf.js
new file mode 100644
index 00000000..789a8522
--- /dev/null
+++ b/assets/js/2426.12e423cf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2426"],{36001(t,e,a){a.d(e,{diagram:()=>R});var i,r=a(9242);a(59673),a(51355),a(1033),a(94247),a(69976),a(33),a(22679),a(735),a(56170),a(13071),a(21976);var d=a(94812),n=a(30740),s=a(92371),o=a(88053),g=a(35123),p=a(72478),l=a(62399),h=(0,o.K)(t=>t.append("circle").attr("class","start-state").attr("r",(0,n.D7)().state.sizeUnit).attr("cx",(0,n.D7)().state.padding+(0,n.D7)().state.sizeUnit).attr("cy",(0,n.D7)().st [...]
\ No newline at end of file
diff --git a/assets/js/2621.23295aaa.js b/assets/js/2621.23295aaa.js
new file mode 100644
index 00000000..314567f4
--- /dev/null
+++ b/assets/js/2621.23295aaa.js
@@ -0,0 +1,215 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2621"],{94247(t,e,s){s.d(e,{CP:()=>h,Ck:()=>A,HT:()=>p,PB:()=>d,aC:()=>c,lC:()=>u,m:()=>o,tk:()=>l});var i=s(30740),a=s(88053),n=s(34674),r=s(35123),l=(0,a.K)((t,e)=>{let s=t.append("rect");if(s.attr("x",e.x),s.attr("y",e.y),s.attr("fill",e.fill),s.attr("stroke",e.stroke),s.attr("width",e.width),s.attr("height",e.height),e.name&&s.attr("name",e.name),e.rx&&s.attr("rx",e.rx),e.ry&&s.attr("ry",e.ry),void 0!==e.att [...]
+ /* Font Awesome icon styling - consolidated */
+ .label-icon {
+ display: inline-block;
+ height: 1em;
+ overflow: visible;
+ vertical-align: -0.125em;
+ }
+
+ .node .label-icon path {
+ fill: currentColor;
+ stroke: revert;
+ stroke-width: revert;
+ }
+`,"getIconStyles")},66780(t,e,s){s.d(e,{Lh:()=>D,NM:()=>E,_$:()=>y,tM:()=>f});var i=s(45644),a=s(59673),n=s(51355),r=s(1033),l=s(94247),u=s(94812),o=s(30740),c=s(92371),h=s(88053),d=s(35123),p=s(95605),A=function(){var t=(0,h.K)(function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},"o"),e=[1,18],s=[1,19],i=[1,20],a=[1,41],n=[1,26],r=[1,42],l=[1,24],u=[1,25],o=[1,32],c=[1,33],d=[1,34],p=[1,45],A=[1,35],y=[1,36],g=[1,37],m=[1,38],b=[1,27],C=[1,28],k=[1,29],E=[1,30],f=[1,31],T=[ [...]
+ fill: ${t.nodeBorder||t.classText};
+ stroke: none;
+ font-family: ${t.fontFamily};
+ font-size: 10px;
+
+ .title {
+ font-weight: bolder;
+ }
+
+}
+
+ .cluster-label text {
+ fill: ${t.titleColor};
+ }
+ .cluster-label span {
+ color: ${t.titleColor};
+ }
+ .cluster-label span p {
+ background-color: transparent;
+ }
+
+ .cluster rect {
+ fill: ${t.clusterBkg};
+ stroke: ${t.clusterBorder};
+ stroke-width: 1px;
+ }
+
+ .cluster text {
+ fill: ${t.titleColor};
+ }
+
+ .cluster span {
+ color: ${t.titleColor};
+ }
+
+.nodeLabel, .edgeLabel {
+ color: ${t.classText};
+}
+
+.noteLabel .nodeLabel, .noteLabel .edgeLabel {
+ color: ${t.noteTextColor};
+}
+.edgeLabel .label rect {
+ fill: ${t.mainBkg};
+}
+.label text {
+ fill: ${t.classText};
+}
+
+.labelBkg {
+ background: ${t.mainBkg};
+}
+.edgeLabel .label span {
+ background: ${t.mainBkg};
+}
+
+.classTitle {
+ font-weight: bolder;
+}
+.node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon,
+ .node path {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ stroke-width: ${t.strokeWidth};
+ }
+
+
+.divider {
+ stroke: ${t.nodeBorder};
+ stroke-width: 1;
+}
+
+g.clickable {
+ cursor: pointer;
+}
+
+g.classGroup rect {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+}
+
+g.classGroup line {
+ stroke: ${t.nodeBorder};
+ stroke-width: 1;
+}
+
+.classLabel .box {
+ stroke: none;
+ stroke-width: 0;
+ fill: ${t.mainBkg};
+ opacity: 0.5;
+}
+
+.classLabel .label {
+ fill: ${t.nodeBorder};
+ font-size: 10px;
+}
+
+.relation {
+ stroke: ${t.lineColor};
+ stroke-width: ${t.strokeWidth};
+ fill: none;
+}
+
+.dashed-line{
+ stroke-dasharray: 3;
+}
+
+.dotted-line{
+ stroke-dasharray: 1 2;
+}
+
+[id$="-compositionStart"], .composition {
+ fill: ${t.lineColor} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-compositionEnd"], .composition {
+ fill: ${t.lineColor} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-dependencyStart"], .dependency {
+ fill: ${t.lineColor} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-dependencyEnd"], .dependency {
+ fill: ${t.lineColor} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-extensionStart"], .extension {
+ fill: transparent !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-extensionEnd"], .extension {
+ fill: transparent !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-aggregationStart"], .aggregation {
+ fill: transparent !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-aggregationEnd"], .aggregation {
+ fill: transparent !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-lollipopStart"], .lollipop {
+ fill: ${t.mainBkg} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+[id$="-lollipopEnd"], .lollipop {
+ fill: ${t.mainBkg} !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+}
+
+.edgeTerminals {
+ font-size: 11px;
+ line-height: initial;
+}
+
+.classTitleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.textColor};
+}
+
+.edgeLabel[data-look="neo"] {
+ background-color: ${t.edgeLabelBackground};
+ p {
+ background-color: ${t.edgeLabelBackground};
+ }
+ rect {
+ opacity: 0.5;
+ background-color: ${t.edgeLabelBackground};
+ fill: ${t.edgeLabelBackground};
+ }
+ text-align: center;
+}
+ ${(0,i.o)()}
+`,"getStyles"),T=(0,h.K)((t,e="TB")=>{if(!t.doc)return e;let s=e;for(let e of t.doc)"dir"===e.stmt&&(s=e.value);return s},"getDir"),D={getClasses:(0,h.K)(function(t,e){return e.db.getClasses()},"getClasses"),draw:(0,h.K)(async function(t,e,s,i){c.R.info("REF0:"),c.R.info("Drawing class diagram (v3)",e);let{securityLevel:l,state:h,layout:d}=(0,o.D7)();i.db.setDiagramId(e);let p=i.db.getData(),A=(0,a.A)(e,l);p.type=i.type,p.layoutAlgorithm=(0,r.q7)(d),p.nodeSpacing=h?.nodeSpacing||50,p.ran [...]
\ No newline at end of file
diff --git a/assets/js/2800.2660ecbd.js b/assets/js/2800.2660ecbd.js
new file mode 100644
index 00000000..eae73b41
--- /dev/null
+++ b/assets/js/2800.2660ecbd.js
@@ -0,0 +1,41 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2800"],{83492(t,e,a){function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(88053).K)(r,"populateCommonDb")},53731(t,e,a){a.d(e,{diagram:()=>z});var r=a(83492),i=a(34969),l=a(94812),n=a(30740),s=a(92371),o=a(88053),c=a(99183),d={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},g={axes:[],curves:[],o [...]
+ .radarCurve-${r} {
+ color: ${i};
+ fill: ${i};
+ fill-opacity: ${e.curveOpacity};
+ stroke: ${i};
+ stroke-width: ${e.curveStrokeWidth};
+ }
+ .radarLegendBox-${r} {
+ fill: ${i};
+ fill-opacity: ${e.curveOpacity};
+ stroke: ${i};
+ }
+ `}return a},"genIndexStyles"),O=(0,o.K)(t=>{let e=(0,n.P$)(),a=(0,n.zj)(),r=(0,l.$t)(e,a.themeVariables),i=(0,l.$t)(r.radar,t);return{themeVariables:r,radarOptions:i}},"buildRadarStyleOptions"),z={parser:C,db:w,renderer:{draw:K},styles:(0,o.K)(({radar:t}={})=>{let{themeVariables:e,radarOptions:a}=O(t);return`
+ .radarTitle {
+ font-size: ${e.fontSize};
+ color: ${e.titleColor};
+ dominant-baseline: hanging;
+ text-anchor: middle;
+ }
+ .radarAxisLine {
+ stroke: ${a.axisColor};
+ stroke-width: ${a.axisStrokeWidth};
+ }
+ .radarAxisLabel {
+ font-size: ${a.axisLabelFontSize}px;
+ color: ${a.axisColor};
+ }
+ .radarGraticule {
+ fill: ${a.graticuleColor};
+ fill-opacity: ${a.graticuleOpacity};
+ stroke: ${a.graticuleColor};
+ stroke-width: ${a.graticuleStrokeWidth};
+ }
+ .radarLegendText {
+ text-anchor: start;
+ font-size: ${a.legendFontSize}px;
+ dominant-baseline: hanging;
+ }
+ ${D(e,a)}
+ `},"styles")}}}]);
\ No newline at end of file
diff --git a/assets/js/2983.7d925ee1.js b/assets/js/2983.7d925ee1.js
new file mode 100644
index 00000000..70ae0eb6
--- /dev/null
+++ b/assets/js/2983.7d925ee1.js
@@ -0,0 +1,148 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2983"],{94247(t,e,i){i.d(e,{CP:()=>u,Ck:()=>d,HT:()=>y,PB:()=>p,aC:()=>h,lC:()=>o,m:()=>c,tk:()=>l});var n=i(30740),r=i(88053),s=i(34674),a=i(35123),l=(0,r.K)((t,e)=>{let i=t.append("rect");if(i.attr("x",e.x),i.attr("y",e.y),i.attr("fill",e.fill),i.attr("stroke",e.stroke),i.attr("width",e.width),i.attr("height",e.height),e.name&&i.attr("name",e.name),e.rx&&i.attr("rx",e.rx),e.ry&&i.attr("ry",e.ry),void 0!==e.att [...]
+ /* Font Awesome icon styling - consolidated */
+ .label-icon {
+ display: inline-block;
+ height: 1em;
+ overflow: visible;
+ vertical-align: -0.125em;
+ }
+
+ .node .label-icon path {
+ fill: currentColor;
+ stroke: revert;
+ stroke-width: revert;
+ }
+`,"getIconStyles")},54074(t,e,i){i.d(e,{diagram:()=>Y});var n=i(45644),r=i(94247),s=i(30740);i(92371);var a=i(88053),l=i(35123),o=function(){var t=(0,a.K)(function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},"o"),e=[6,8,10,11,12,14,16,17,18],i=[1,9],n=[1,10],r=[1,11],s=[1,12],l=[1,13],o=[1,14],c={trace:(0,a.K)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_des [...]
+ font-family: ${t.fontFamily};
+ color: ${t.textColor};
+ }
+ .mouth {
+ stroke: #666;
+ }
+
+ line {
+ stroke: ${t.textColor}
+ }
+
+ .legend {
+ fill: ${t.textColor};
+ font-family: ${t.fontFamily};
+ }
+
+ .label text {
+ fill: #333;
+ }
+ .label {
+ color: ${t.textColor}
+ }
+
+ .face {
+ ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};
+ stroke: #999;
+ }
+
+ .node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon,
+ .node path {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ stroke-width: 1px;
+ }
+
+ .node .label {
+ text-align: center;
+ }
+ .node.clickable {
+ cursor: pointer;
+ }
+
+ .arrowheadPath {
+ fill: ${t.arrowheadColor};
+ }
+
+ .edgePath .path {
+ stroke: ${t.lineColor};
+ stroke-width: 1.5px;
+ }
+
+ .flowchart-link {
+ stroke: ${t.lineColor};
+ fill: none;
+ }
+
+ .edgeLabel {
+ background-color: ${t.edgeLabelBackground};
+ rect {
+ opacity: 0.5;
+ }
+ text-align: center;
+ }
+
+ .cluster rect {
+ }
+
+ .cluster text {
+ fill: ${t.titleColor};
+ }
+
+ div.mermaidTooltip {
+ position: absolute;
+ text-align: center;
+ max-width: 200px;
+ padding: 2px;
+ font-family: ${t.fontFamily};
+ font-size: 12px;
+ background: ${t.tertiaryColor};
+ border: 1px solid ${t.border2};
+ border-radius: 2px;
+ pointer-events: none;
+ z-index: 100;
+ }
+
+ .task-type-0, .section-type-0 {
+ ${t.fillType0?`fill: ${t.fillType0}`:""};
+ }
+ .task-type-1, .section-type-1 {
+ ${t.fillType0?`fill: ${t.fillType1}`:""};
+ }
+ .task-type-2, .section-type-2 {
+ ${t.fillType0?`fill: ${t.fillType2}`:""};
+ }
+ .task-type-3, .section-type-3 {
+ ${t.fillType0?`fill: ${t.fillType3}`:""};
+ }
+ .task-type-4, .section-type-4 {
+ ${t.fillType0?`fill: ${t.fillType4}`:""};
+ }
+ .task-type-5, .section-type-5 {
+ ${t.fillType0?`fill: ${t.fillType5}`:""};
+ }
+ .task-type-6, .section-type-6 {
+ ${t.fillType0?`fill: ${t.fillType6}`:""};
+ }
+ .task-type-7, .section-type-7 {
+ ${t.fillType0?`fill: ${t.fillType7}`:""};
+ }
+
+ .actor-0 {
+ ${t.actor0?`fill: ${t.actor0}`:""};
+ }
+ .actor-1 {
+ ${t.actor1?`fill: ${t.actor1}`:""};
+ }
+ .actor-2 {
+ ${t.actor2?`fill: ${t.actor2}`:""};
+ }
+ .actor-3 {
+ ${t.actor3?`fill: ${t.actor3}`:""};
+ }
+ .actor-4 {
+ ${t.actor4?`fill: ${t.actor4}`:""};
+ }
+ .actor-5 {
+ ${t.actor5?`fill: ${t.actor5}`:""};
+ }
+ ${(0,n.o)()}
+`,"getStyles"),K=(0,a.K)(function(t,e){return(0,r.tk)(t,e)},"drawRect"),$=(0,a.K)(function(t,e){let i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");function r(t){let i=(0,l.JLW)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function s(t){let i=(0 [...]
\ No newline at end of file
diff --git a/assets/js/2995.d990c09b.js b/assets/js/2995.d990c09b.js
new file mode 100644
index 00000000..8fac0213
--- /dev/null
+++ b/assets/js/2995.d990c09b.js
@@ -0,0 +1,86 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2995"],{83492(e,t,r){function i(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}r.d(t,{S:()=>i}),(0,r(88053).K)(i,"populateCommonDb")},20681(e,t,r){r.d(t,{$:()=>O,U:()=>j,db:()=>S});var i=r(34969),a=r(30740),n=r(92371),o=r(88053),l="",s="",d="",m=[],c=new Map,h=(0,o.K)(e=>(0,a.jZ)(e,(0,a.D7)()),"sanitizeText"),p=(0,o.K)(e=>{switch(e [...]
+ .railroad-diagram {
+ font-family: ${t};
+ font-size: ${r}px;
+ }
+
+ .railroad-terminal rect {
+ fill: ${i};
+ stroke: ${a};
+ stroke-width: ${m}px;
+ }
+
+ .railroad-terminal text {
+ fill: ${n};
+ font-family: ${t};
+ font-size: ${r}px;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ }
+
+ .railroad-nonterminal rect {
+ fill: ${o};
+ stroke: ${l};
+ stroke-width: ${m}px;
+ }
+
+ .railroad-nonterminal text {
+ fill: ${s};
+ font-family: ${t};
+ font-size: ${r}px;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ }
+
+ .railroad-line {
+ stroke: ${d};
+ stroke-width: ${m}px;
+ fill: none;
+ }
+
+ .railroad-start circle,
+ .railroad-end circle {
+ fill: ${c};
+ }
+
+ .railroad-comment ellipse {
+ fill: ${h};
+ stroke: ${p};
+ stroke-width: ${m}px;
+ }
+
+ .railroad-comment text {
+ fill: ${u};
+ font-style: italic;
+ font-family: ${t};
+ font-size: ${r}px;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ }
+
+ .railroad-special rect {
+ fill: ${g};
+ stroke: ${T};
+ stroke-width: ${m}px;
+ stroke-dasharray: 5,3;
+ }
+
+ .railroad-special text {
+ fill: ${s};
+ font-family: ${t};
+ font-size: ${r}px;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ }
+
+ .railroad-rule-name {
+ font-weight: bold;
+ fill: ${f};
+ font-family: ${t};
+ font-size: ${r}px;
+ }
+
+ .railroad-group {
+ /* Grouping container, no specific styles */
+ }
+`},"getStyles"),W=class{constructor(){this.d=""}static{(0,o.K)(this,"PathBuilder")}moveTo(e,t){return this.d+=`M ${e} ${t} `,this}lineTo(e,t){return this.d+=`L ${e} ${t} `,this}horizontalTo(e){return this.d+=`H ${e} `,this}verticalTo(e){return this.d+=`V ${e} `,this}arcTo(e,t,r,i,a,n,o){return this.d+=`A ${e} ${t} ${r} ${+!!i} ${+!!a} ${n} ${o} `,this}build(){return this.d.trim()}},q=class{constructor(e,t=E()){this.textCache=new Map,this.svg=e,this.config=t}static{(0,o.K)(this,"RailroadR [...]
\ No newline at end of file
diff --git a/assets/js/299aa024.66db5b42.js b/assets/js/299aa024.66db5b42.js
new file mode 100644
index 00000000..5b98f823
--- /dev/null
+++ b/assets/js/299aa024.66db5b42.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8108"],{39010(e,n,i){i.r(n),i.d(n,{metadata:()=>t,default:()=>h,frontMatter:()=>d,contentTitle:()=>l,toc:()=>c,assets:()=>a});var t=JSON.parse('{"id":"quickstart/guide","title":"Guide","description":"\x3c!--","source":"@site/docs/quickstart/guide.md","sourceDirName":"quickstart","slug":"/quickstart/guide","permalink":"/docs/quickstart/guide","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fes [...]
\ No newline at end of file
diff --git a/assets/js/2c1e9c28.f7ccfacd.js b/assets/js/2c1e9c28.f7ccfacd.js
new file mode 100644
index 00000000..748f2bf7
--- /dev/null
+++ b/assets/js/2c1e9c28.f7ccfacd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5455"],{16327(e,t,s){s.r(t),s.d(t,{metadata:()=>n,default:()=>h,frontMatter:()=>l,contentTitle:()=>r,toc:()=>c,assets:()=>d});var n=JSON.parse('{"id":"sheet/write/image","title":"Image","description":"\x3c!--","source":"@site/docs/sheet/write/image.md","sourceDirName":"sheet/write","slug":"/sheet/write/image","permalink":"/docs/sheet/write/image","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/3023.4be1dbab.js b/assets/js/3023.4be1dbab.js
new file mode 100644
index 00000000..d8446608
--- /dev/null
+++ b/assets/js/3023.4be1dbab.js
@@ -0,0 +1,77 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3023"],{83492(t,e,a){function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(88053).K)(r,"populateCommonDb")},93186(t,e,a){a.d(e,{diagram:()=>F});var r=a(83492),o=a(34969),n=a(94812),i=a(30740),l=a(92371),s=a(88053),d=a(99183),c=(0,s.K)((t,e)=>{let a=t<=1?100*t:t;if(a<0||a>100)throw Error(`${e} must be betwe [...]
+ M ${a} ${r-15}
+ L ${a+60-20} ${r-15}
+ L ${a+60-20} ${r-15-8}
+ L ${a+60} ${r}
+ L ${a+60-20} ${r+15+8}
+ L ${a+60-20} ${r+15}
+ L ${a} ${r+15}
+ Z
+ `;t.append("path").attr("d",o).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",1),t.append("text").attr("x",a+30).attr("y",r+15+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",d.axisTextColor).attr("font-weight","bold").text(e.name)})}if(h.deaccelerators.length>0){let t=u.append("g").attr("class","wardley-deaccelerators");h.deaccelerators.forEach(e=>{let a=b(e.x),r=$(e.y),o=`
+ M ${a+60} ${r-15}
+ L ${a+20} ${r-15}
+ L ${a+20} ${r-15-8}
+ L ${a} ${r}
+ L ${a+20} ${r+15+8}
+ L ${a+20} ${r+15}
+ L ${a+60} ${r+15}
+ Z
+ `;t.append("path").attr("d",o).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",1),t.append("text").attr("x",a+30).attr("y",r+15+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",d.axisTextColor).attr("font-weight","bold").text(e.name)})}},"draw")},styles:(0,s.K)(({wardley:t}={})=>{let e=(0,i.P$)(),a=(0,i.zj)(),r=(0,n.$t)(e,a.themeVariables),o=(0,n.$t)(r.wardley,t);return`
+ .wardley-background {
+ fill: ${o.backgroundColor};
+ }
+ .wardley-axes line, .wardley-axes path {
+ stroke: ${o.axisColor};
+ }
+ .wardley-axis-label {
+ fill: ${o.axisTextColor};
+ }
+ .wardley-stage-label {
+ fill: ${o.axisTextColor};
+ }
+ .wardley-grid line {
+ stroke: ${o.gridColor};
+ }
+ .wardley-node circle {
+ fill: ${o.componentFill};
+ stroke: ${o.componentStroke};
+ }
+ .wardley-node-label {
+ fill: ${o.componentLabelColor};
+ }
+ .wardley-link {
+ stroke: ${o.linkStroke};
+ }
+ .wardley-link--dashed {
+ stroke-dasharray: 4 4;
+ }
+ .wardley-link-label {
+ fill: ${o.axisTextColor};
+ }
+ .wardley-trend line {
+ stroke: ${o.evolutionStroke};
+ }
+ .wardley-annotation-line {
+ stroke: ${o.annotationStroke};
+ }
+ .wardley-annotation circle {
+ fill: ${o.annotationFill};
+ stroke: ${o.annotationStroke};
+ }
+ .wardley-annotation text {
+ fill: ${o.annotationTextColor};
+ }
+ .wardley-annotations-box rect {
+ fill: ${o.annotationFill};
+ stroke: ${o.annotationStroke};
+ }
+ .wardley-annotations-box text {
+ fill: ${o.annotationTextColor};
+ }
+ .wardley-pipeline-box {
+ stroke: ${o.componentStroke};
+ }
+ .wardley-notes text {
+ fill: ${o.axisTextColor};
+ }
+ `},"styles")}}}]);
\ No newline at end of file
diff --git a/assets/js/305e64c1.7cd9b267.js b/assets/js/305e64c1.7cd9b267.js
new file mode 100644
index 00000000..0d461488
--- /dev/null
+++ b/assets/js/305e64c1.7cd9b267.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6611"],{9908(e,i,t){t.r(i),t.d(i,{metadata:()=>r,default:()=>h,frontMatter:()=>s,contentTitle:()=>o,toc:()=>d,assets:()=>l});var r=JSON.parse('{"id":"sheet/advanced/large-file","title":"Large File Writing","description":"\x3c!--","source":"@site/docs/sheet/advanced/large-file.md","sourceDirName":"sheet/advanced","slug":"/sheet/advanced/large-file","permalink":"/docs/sheet/advanced/large-file","draft":false,"unli [...]
\ No newline at end of file
diff --git a/assets/js/3354.56465d1b.js b/assets/js/3354.56465d1b.js
new file mode 100644
index 00000000..552eeeaa
--- /dev/null
+++ b/assets/js/3354.56465d1b.js
@@ -0,0 +1,153 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3354"],{55692(t,e,a){a.d(e,{m:()=>i});var r=a(88053),i=class{constructor(t){this.init=t,this.records=this.init()}static{(0,r.K)(this,"ImperativeState")}reset(){this.records=this.init()}}},94247(t,e,a){a.d(e,{CP:()=>h,Ck:()=>E,HT:()=>T,PB:()=>p,aC:()=>d,lC:()=>c,m:()=>l,tk:()=>o});var r=a(30740),i=a(88053),s=a(34674),n=a(35123),o=(0,i.K)((t,e)=>{let a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fi [...]
+ stroke: ${t.actorBorder};
+ fill: ${t.actorBkg};
+ stroke-width: ${t.strokeWidth??1};
+ }
+
+ rect.actor.outer-path[data-look="neo"] {
+ filter: ${e};
+ }
+
+ rect.note[data-look="neo"] {
+ stroke:${t.noteBorderColor};
+ fill:${t.noteBkgColor};
+ filter: ${e};
+ }
+
+ text.actor > tspan {
+ fill: ${t.actorTextColor};
+ stroke: none;
+ }
+
+ .actor-line {
+ stroke: ${t.actorLineColor};
+ }
+
+ .innerArc {
+ stroke-width: 1.5;
+ stroke-dasharray: none;
+ }
+
+ .messageLine0 {
+ stroke-width: 1.5;
+ stroke-dasharray: none;
+ stroke: ${t.signalColor};
+ }
+
+ .messageLine1 {
+ stroke-width: 1.5;
+ stroke-dasharray: 2, 2;
+ stroke: ${t.signalColor};
+ }
+
+ [id$="-arrowhead"] path {
+ fill: ${t.signalColor};
+ stroke: ${t.signalColor};
+ }
+
+ .sequenceNumber {
+ fill: ${t.sequenceNumberColor};
+ }
+
+ [id$="-sequencenumber"] {
+ fill: ${t.signalColor};
+ }
+
+ [id$="-crosshead"] path {
+ fill: ${t.signalColor};
+ stroke: ${t.signalColor};
+ }
+
+ .messageText {
+ fill: ${t.signalTextColor};
+ stroke: none;
+ }
+
+ .labelBox {
+ stroke: ${t.labelBoxBorderColor};
+ fill: ${t.labelBoxBkgColor};
+ filter: ${"neo"===a?e:"none"};
+ }
+
+ .labelText, .labelText > tspan {
+ fill: ${t.labelTextColor};
+ stroke: none;
+ }
+
+ .loopText, .loopText > tspan {
+ fill: ${t.loopTextColor};
+ stroke: none;
+ }
+
+ .sectionTitle, .sectionTitle > tspan {
+ fill: ${t.loopTextColor};
+ stroke: none;
+ }
+
+ .loopLine {
+ stroke-width: 2px;
+ stroke-dasharray: 2, 2;
+ stroke: ${t.labelBoxBorderColor};
+ fill: ${t.labelBoxBorderColor};
+ }
+
+ .note {
+ //stroke: #decc93;
+ stroke: ${t.noteBorderColor};
+ fill: ${t.noteBkgColor};
+ }
+
+ .noteText, .noteText > tspan {
+ fill: ${t.noteTextColor};
+ stroke: none;
+ ${t.noteFontWeight?`font-weight: ${t.noteFontWeight};`:""}
+ }
+
+ .activation0 {
+ fill: ${t.activationBkgColor};
+ stroke: ${t.activationBorderColor};
+ }
+
+ .activation1 {
+ fill: ${t.activationBkgColor};
+ stroke: ${t.activationBorderColor};
+ }
+
+ .activation2 {
+ fill: ${t.activationBkgColor};
+ stroke: ${t.activationBorderColor};
+ }
+
+ .actorPopupMenu {
+ position: absolute;
+ }
+
+ .actorPopupMenuPanel {
+ position: absolute;
+ fill: ${t.actorBkg};
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+ filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
+}
+ .actor-man circle, line {
+ fill: ${t.actorBkg};
+ stroke-width: 2px;
+ }
+
+ g rect.rect {
+ filter: ${e};
+ stroke: ${t.nodeBorder};
+ }
+`},"getStyles"),y="actor-top",_="actor-bottom",O="actor-box",b="actor-man",m=new Set(["redux-color","redux-dark-color"]),I=(0,l.K)(function(t,e){let a=(0,s.tk)(t,e);return"neo"===(0,o.zj)().look&&a.attr("data-look","neo"),a},"drawRect"),f=(0,l.K)(function(t,e,a,r,i){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};let s=e.links,n=e.actorCnt,o=e.rectData;var c="none";i&&(c="block !important");let l=t.append("g");l.attr("id","actor"+n+"_popup"), [...]
+ a ${f},${I} 0 0 0 0,${x.height}
+ h ${x.width-2*f}
+ a ${f},${I} 0 0 0 0,-${x.height}
+ Z
+ `;L.append("path").attr("d",w),P.append("path").attr("d",`M ${x.x},${x.y+I}
+ a ${f},${I} 0 0 0 0,${x.height}`),L.attr("transform",`translate(${f}, ${-(x.height/2)})`),P.attr("transform",`translate(${x.width-f}, ${-x.height/2})`),e.rectData=x,"neo"===d&&L.attr("filter","url(#drop-shadow)");let N=i.get(e.name)??0;if(m.has(h)&&(L.style("stroke",E[N%E.length]),L.style("fill",T[N%E.length]),P.style("stroke",E[N%E.length]),P.style("fill",T[N%E.length])),e.properties?.icon){let t=e.properties.icon.trim(),a=x.x+x.width-20,r=x.y+10;"@"===t.charAt(0)?(0,s.CP)(u,a,r,t [...]
+ M ${b.x},${b.y+w}
+ a ${P},${w} 0 0 0 ${f},0
+ a ${P},${w} 0 0 0 -${f},0
+ l 0,${L-2*w}
+ a ${P},${w} 0 0 0 ${f},0
+ l 0,-${L-2*w}
+`;N.append("path").attr("d",S),"neo"===p&&N.attr("filter","url(#drop-shadow)");let A=i.get(e.name)??0;m.has(d)?(N.style("stroke",E[A%E.length]),N.style("fill",T[A%E.length])):N.style("stroke",g),N.attr("transform",`translate(${f}, ${w})`),e.rectData=b,te(a,(0,o.Wi)(e.description))(e.description,x,b.x,b.y+35,b.width,b.height,{class:`actor ${O}`},a);let k=N.select("path:last-child");return k.node()&&(e.height=k.node().getBBox().height+(a.sequence.labelBoxHeight??0)),r||(x.attr("data-et","p [...]
\ No newline at end of file
diff --git a/assets/js/3362.6af26af5.js b/assets/js/3362.6af26af5.js
new file mode 100644
index 00000000..886c8560
--- /dev/null
+++ b/assets/js/3362.6af26af5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3362"],{59737(e,s,t){t.d(s,{createCynefinServices:()=>c.t});var c=t(10682);t(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/3399376c.2399dc4e.js b/assets/js/3399376c.2399dc4e.js
new file mode 100644
index 00000000..56f9b0fe
--- /dev/null
+++ b/assets/js/3399376c.2399dc4e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["721"],{75029(e,t,a){a.r(t),a.d(t,{metadata:()=>i,default:()=>c,frontMatter:()=>s,contentTitle:()=>o,toc:()=>d,assets:()=>l});var i=JSON.parse('{"id":"sheet/help/large-data","title":"Large Data","description":"\x3c!--","source":"@site/docs/sheet/help/large-data.md","sourceDirName":"sheet/help","slug":"/sheet/help/large-data","permalink":"/docs/sheet/help/large-data","draft":false,"unlisted":false,"editUrl":"https [...]
\ No newline at end of file
diff --git a/assets/js/34338452.6572d98a.js b/assets/js/34338452.6572d98a.js
new file mode 100644
index 00000000..180da41f
--- /dev/null
+++ b/assets/js/34338452.6572d98a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6530"],{61704(e,t,s){s.r(t),s.d(t,{metadata:()=>i,default:()=>o,frontMatter:()=>n,contentTitle:()=>a,toc:()=>c,assets:()=>d});var i=JSON.parse('{"id":"sheet/write/simple","title":"Simple","description":"\x3c!--","source":"@site/docs/sheet/write/simple.md","sourceDirName":"sheet/write","slug":"/sheet/write/simple","permalink":"/docs/sheet/write/simple","draft":false,"unlisted":false,"editUrl":"https://github.com/ [...]
\ No newline at end of file
diff --git a/assets/js/3527.da1e4c81.js b/assets/js/3527.da1e4c81.js
new file mode 100644
index 00000000..fc4bb8c7
--- /dev/null
+++ b/assets/js/3527.da1e4c81.js
@@ -0,0 +1,255 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3527"],{14371(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BLANK_URL=e.relativeFirstCharacters=e.whitespaceEscapeCharsRegex=e.urlSchemeRegex=e.ctrlCharactersRegex=e.htmlCtrlEntityRegex=e.htmlEntitiesRegex=e.invalidProtocolRegex=void 0,e.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im,e.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g,e.htmlCtrlEntityRegex=/&(newline|tab);/gi,e.ctrlCharactersRegex=/[\ [...]
+ outsidePoint: ${JSON.stringify(e)}
+ insidePoint : ${JSON.stringify(r)}
+ node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let i=t.x,o=t.y,a=Math.abs(i-r.x),n=t.width/2,s=r.x<e.x?n-a:n+a,l=t.height/2,h=Math.abs(e.y-r.y),d=Math.abs(e.x-r.x);if(Math.abs(o-e.y)*n>Math.abs(i-e.x)*l){let t=r.y<e.y?e.y-l-o:o-l-e.y;s=d*t/h;let i={x:r.x<e.x?r.x+s:r.x-d+s,y:r.y<e.y?r.y+h-t:r.y-h+t};return 0===s&&(i.x=e.x,i.y=e.y),0===d&&(i.x=e.x),0===h&&(i.y=e.y),c.R.debug(`abc89 top/bottom calc, Q ${h}, q ${t}, R ${d}, r ${s}`,i),i}{let t=h*(s=r.x<e.x?e.x-n-i:i-n-e.x)/d, [...]
+ L20,10
+ M20,10
+ L0,20`)},"requirement_arrow"),to=(0,d.K)((t,e,r)=>{let{themeVariables:i}=(0,h.zj)(),{strokeWidth:o}=i;t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").attr("markerUnits","userSpaceOnUse").attr("stroke-width",`${o}`).attr("viewBox","0 0 25 20").append("path").attr("d",`M0,0
+ L20,10
+ M20,10
+ L0,20`).attr("stroke-linejoin","miter")},"requirement_arrow_neo"),ta={extension:K,composition:P,aggregation:z,dependency:N,lollipop:W,point:j,circle:H,cross:U,barb:Y,barbNeo:G,only_one:X,zero_or_one:V,one_or_more:Z,zero_or_more:Q,only_one_neo:J,zero_or_one_neo:tt,one_or_more_neo:te,zero_or_more_neo:tr,requirement_arrow:ti,requirement_contains:(0,d.K)((t,e,r)=>{let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr [...]
+`,"ig");t=t.trim().replace(i,"").replace(/'/gm,'"'),a.R.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);let n=[];for(;null!==(r=o.DB.exec(t));)if(r.index===o.DB.lastIndex&&o.DB.lastIndex++,r&&!e||e&&r[1]?.match(e)||e&&r[2]?.match(e)){let t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}if(0===n.length)return{type:t,args:null};return 1===n.length?n[0]:n}catch(r){return a.R.error(`ERROR: ${r.message} - Unable [...]
+]`).replace("lheading",m).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},M=/^( {2,}|\\)\n(?!\s*$)/,E=/[\p{P}\p{S}]/u,$=/[\s\p{P}\p{S}]/u,O=/[^\s\p{P}\p{S}]/u,D=u(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,$).getRegex(),I=/(?!~)[\p{P}\p{S}]/u,q=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,R=u(q,"u").replace(/punct/g,E).getRegex(),K=u(q,"u").replace(/punct/g,I).getR [...]
+`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let t=e[0],r=function(t,e,r){let i=t.match(r.other.indentCodeCompensation);if(null===i)return e;let o=i[1];return e.split(`
+`).map(t=>{let e=t.match(r.other.beginningSpace);if(null===e)return t;let[i]=e;return i.length>=o.length?t.slice(o.length):t}).join(`
+`)}(t,e[3]||"",this.rules);return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:r}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(this.rules.other.endingHash.test(t)){let e=tc(t,"#");(this.options.pedantic||!e||this.rules.other.endingSpaceChar.test(e))&&(t=e.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type: [...]
+`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let t=tc(e[0],`
+`).split(`
+`),r="",i="",o=[];for(;t.length>0;){let e=!1,a=[],n;for(n=0;n<t.length;n++)if(this.rules.other.blockquoteStart.test(t[n]))a.push(t[n]),e=!0;else if(e)break;else a.push(t[n]);t=t.slice(n);let s=a.join(`
+`),l=s.replace(this.rules.other.blockquoteSetextReplace,`
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,"");r=r?`${r}
+${s}`:s,i=i?`${i}
+${l}`:l;let h=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(l,o,!0),this.lexer.state.top=h,0===t.length)break;let c=o.at(-1);if(c?.type==="code")break;if(c?.type==="blockquote"){let e=c.raw+`
+`+t.join(`
+`),a=this.blockquote(e);o[o.length-1]=a,r=r.substring(0,r.length-c.raw.length)+a.raw,i=i.substring(0,i.length-c.text.length)+a.text;break}if(c?.type==="list"){let e=c.raw+`
+`+t.join(`
+`),a=this.list(e);o[o.length-1]=a,r=r.substring(0,r.length-c.raw.length)+a.raw,i=i.substring(0,i.length-c.raw.length)+a.raw,t=e.substring(o.at(-1).raw.length).split(`
+`);continue}}return{type:"blockquote",raw:r,tokens:o,text:i}}}list(t){let e=this.rules.block.list.exec(t);if(e){let r=e[1].trim(),i=r.length>1,o={type:"list",raw:"",ordered:i,start:i?+r.slice(0,-1):"",loose:!1,items:[]};r=i?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=i?r:"[*+-]");let a=this.rules.other.listItemRegex(r),n=!1;for(;t;){let r=!1,i="",s="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;i=e[0],t=t.substring(i.length);let l=e[2].split(`
+`,1)[0].replace(this.rules.other.listReplaceTabs,t=>" ".repeat(3*t.length)),h=t.split(`
+`,1)[0],c=!l.trim(),d=0;if(this.options.pedantic?(d=2,s=l.trimStart()):c?d=e[1].length+1:(d=(d=e[2].search(this.rules.other.nonSpaceChar))>4?1:d,s=l.slice(d),d+=e[1].length),c&&this.rules.other.blankLine.test(h)&&(i+=h+`
+`,t=t.substring(h.length+1),r=!0),!r){let e=this.rules.other.nextBulletRegex(d),r=this.rules.other.hrRegex(d),o=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),n=this.rules.other.htmlBeginRegex(d);for(;t;){let u=t.split(`
+`,1)[0],p;if(h=u,p=this.options.pedantic?h=h.replace(this.rules.other.listReplaceNesting," "):h.replace(this.rules.other.tabCharGlobal," "),o.test(h)||a.test(h)||n.test(h)||e.test(h)||r.test(h))break;if(p.search(this.rules.other.nonSpaceChar)>=d||!h.trim())s+=`
+`+p.slice(d);else{if(c||l.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||o.test(l)||a.test(l)||r.test(l))break;s+=`
+`+h}c||h.trim()||(c=!0),i+=u+`
+`,t=t.substring(u.length+1),l=p.slice(d)}}o.loose||(n?o.loose=!0:this.rules.other.doubleBlankLine.test(i)&&(n=!0));let u=null,p;this.options.gfm&&(u=this.rules.other.listIsTask.exec(s))&&(p="[ ] "!==u[0],s=s.replace(this.rules.other.listReplaceTask,"")),o.items.push({type:"list_item",raw:i,task:!!u,checked:p,loose:!1,text:s,tokens:[]}),o.raw+=i}let s=o.items.at(-1);if(!s)return;s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd(),o.raw=o.raw.trimEnd();for(let t=0;t<o.items.length;t++)if(this.le [...]
+`):[],a={type:"table",raw:e[0],header:[],align:[],rows:[]};if(r.length===i.length){for(let t of i)this.rules.other.tableAlignRight.test(t)?a.align.push("right"):this.rules.other.tableAlignCenter.test(t)?a.align.push("center"):this.rules.other.tableAlignLeft.test(t)?a.align.push("left"):a.align.push(null);for(let t=0;t<r.length;t++)a.header.push({text:r[t],tokens:this.lexer.inline(r[t]),header:!0,align:a.align[t]});for(let t of o)a.rows.push(th(t,a.header.length).map((t,e)=>({text:t,token [...]
+`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.oth [...]
+`),this.blockTokens(t,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let e=this.inlineQueue[t];this.inlineTokens(e.src,e.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,e=[],r=!1){for(this.options.pedantic&&(t=t.replace(p.tabCharGlobal," ").replace(p.spaceLine,""));t;){let i;if(this.options.extensions?.block?.some(r=>!!(i=r.call({lexer:this},t,e))&&(t=t.substring(i.raw.length),e.push(i),!0)))continue;if(i=this.tokenizer.space(t)){t=t.substring(i.raw.length);let r [...]
+`:e.push(i);continue}if(i=this.tokenizer.code(t)){t=t.substring(i.raw.length);let r=e.at(-1);r?.type==="paragraph"||r?.type==="text"?(r.raw+=(r.raw.endsWith(`
+`)?"":`
+`)+i.raw,r.text+=`
+`+i.text,this.inlineQueue.at(-1).src=r.text):e.push(i);continue}if((i=this.tokenizer.fences(t))||(i=this.tokenizer.heading(t))||(i=this.tokenizer.hr(t))||(i=this.tokenizer.blockquote(t))||(i=this.tokenizer.list(t))||(i=this.tokenizer.html(t))){t=t.substring(i.raw.length),e.push(i);continue}if(i=this.tokenizer.def(t)){t=t.substring(i.raw.length);let r=e.at(-1);r?.type==="paragraph"||r?.type==="text"?(r.raw+=(r.raw.endsWith(`
+`)?"":`
+`)+i.raw,r.text+=`
+`+i.raw,this.inlineQueue.at(-1).src=r.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},e.push(i));continue}if((i=this.tokenizer.table(t))||(i=this.tokenizer.lheading(t))){t=t.substring(i.raw.length),e.push(i);continue}let o=t;if(this.options.extensions?.startBlock){let e=1/0,r=t.slice(1),i;this.options.extensions.startBlock.forEach(t=>{"number"==typeof(i=t.call({lexer:this},r))&&i>=0&&(e=Math.min(e,i))}),e<1/0&&e>=0&&(o=t.substring(0,e+1))}if(this.sta [...]
+`)?"":`
+`)+i.raw,a.text+=`
+`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):e.push(i),r=o.length!==t.length,t=t.substring(i.raw.length);continue}if(i=this.tokenizer.text(t)){t=t.substring(i.raw.length);let r=e.at(-1);r?.type==="text"?(r.raw+=(r.raw.endsWith(`
+`)?"":`
+`)+i.raw,r.text+=`
+`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):e.push(i);continue}if(t){let e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw Error(e)}}return this.state.top=!0,e}inline(t,e=[]){return this.inlineQueue.push({src:t,tokens:e}),e}inlineTokens(t,e=[]){let r=t,i=null;if(this.tokens.links){let t=Object.keys(this.tokens.links);if(t.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(r));)t.includes(i[0].slice( [...]
+`;return i?'<pre><code class="language-'+ts(i)+'">'+(r?o:ts(o,!0))+`</code></pre>
+`:"<pre><code>"+(r?o:ts(o,!0))+`</code></pre>
+`}blockquote({tokens:t}){return`<blockquote>
+${this.parser.parse(t)}</blockquote>
+`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>
+`}hr(t){return`<hr>
+`}list(t){let e=t.ordered,r=t.start,i="";for(let e=0;e<t.items.length;e++){let r=t.items[e];i+=this.listitem(r)}let o=e?"ol":"ul";return"<"+o+(e&&1!==r?' start="'+r+'"':"")+`>
+`+i+"</"+o+`>
+`}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=r+" "+ts(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`<li>${e}</li>
+`}checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
+`}table(t){let e="",r="";for(let e=0;e<t.header.length;e++)r+=this.tablecell(t.header[e]);e+=this.tablerow({text:r});let i="";for(let e=0;e<t.rows.length;e++){let o=t.rows[e];r="";for(let t=0;t<o.length;t++)r+=this.tablecell(o[t]);i+=this.tablerow({text:r})}return i&&(i=`<tbody>${i}</tbody>`),`<table>
+<thead>
+`+e+`</thead>
+`+i+`</table>
+`}tablerow({text:t}){return`<tr>
+${t}</tr>
+`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`</${r}>
+`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${ts(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:r}){let i=this.parser.parseInline(r),o=tl(t);if(null===o)return i;let a='<a href="'+(t=o)+'"';return e&&(a+=' title="'+ts(e)+'"'),a+=">"+i+"</a>"}image({href:t,title:e,text:r,tokens:i}){i&&( [...]
+`+this.renderer.text(a);e?r+=this.renderer.paragraph({type:"paragraph",raw:n,text:n,tokens:[{type:"text",raw:n,text:n,escaped:!0}]}):r+=n;continue}default:{let t='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(t),"";throw Error(t)}}}return r}parseInline(t,e=this.renderer){let r="";for(let i=0;i<t.length;i++){let o=t[i];if(this.options.extensions?.renderers?.[o.type]){let t=this.options.extensions.renderers[o.type].call({parser:this},o);if(!1!==t| [...]
+Please report this to https://github.com/markedjs/marked.`,t){let t="<p>An error occurred:</p><pre>"+ts(r.message+"",!0)+"</pre>";return e?Promise.resolve(t):t}if(e)return Promise.reject(r);throw r}}};function tx(t,e){return tC.parse(t,e)}tx.options=tx.setOptions=function(t){return tC.setOptions(t),tx.defaults=tC.defaults,c=tx.defaults,tx},tx.getDefaults=h,tx.defaults=c,tx.use=function(...t){return tC.use(...t),tx.defaults=tC.defaults,c=tx.defaults,tx},tx.walkTokens=function(t,e){return [...]
+ font-family: ${r.fontFamily};
+ font-size: ${r.fontSize};
+ fill: ${r.textColor}
+ }
+ @keyframes edge-animation-frame {
+ from {
+ stroke-dashoffset: 0;
+ }
+ }
+ @keyframes dash {
+ to {
+ stroke-dashoffset: 0;
+ }
+ }
+ & .edge-animation-slow {
+ stroke-dasharray: 9,5 !important;
+ stroke-dashoffset: 900;
+ animation: dash 50s linear infinite;
+ stroke-linecap: round;
+ }
+ & .edge-animation-fast {
+ stroke-dasharray: 9,5 !important;
+ stroke-dashoffset: 900;
+ animation: dash 20s linear infinite;
+ stroke-linecap: round;
+ }
+ /* Classes common for multiple diagrams */
+
+ & .error-icon {
+ fill: ${r.errorBkgColor};
+ }
+ & .error-text {
+ fill: ${r.errorTextColor};
+ stroke: ${r.errorTextColor};
+ }
+
+ & .edge-thickness-normal {
+ stroke-width: ${r.strokeWidth??1}px;
+ }
+ & .edge-thickness-thick {
+ stroke-width: 3.5px
+ }
+ & .edge-pattern-solid {
+ stroke-dasharray: 0;
+ }
+ & .edge-thickness-invisible {
+ stroke-width: 0;
+ fill: none;
+ }
+ & .edge-pattern-dashed{
+ stroke-dasharray: 3;
+ }
+ .edge-pattern-dotted {
+ stroke-dasharray: 2;
+ }
+
+ & .marker {
+ fill: ${r.lineColor};
+ stroke: ${r.lineColor};
+ }
+ & .marker.cross {
+ stroke: ${r.lineColor};
+ }
+
+ & svg {
+ font-family: ${r.fontFamily};
+ font-size: ${r.fontSize};
+ }
+ & p {
+ margin: 0
+ }
+
+ ${o}
+ .node .neo-node {
+ stroke: ${r.nodeBorder};
+ }
+
+ [data-look="neo"].node rect, [data-look="neo"].cluster rect, [data-look="neo"].node polygon {
+ stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder};
+ filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"};
+ }
+ [data-look="neo"].swimlane.cluster rect {
+ filter: none;
+ }
+
+
+ [data-look="neo"].node path {
+ stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder};
+ stroke-width: ${r.strokeWidth??1}px;
+ }
+
+ [data-look="neo"].node .outer-path {
+ filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"};
+ }
+
+ [data-look="neo"].node .neo-line path {
+ stroke: ${r.nodeBorder};
+ filter: none;
+ }
+
+ [data-look="neo"].node circle{
+ stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder};
+ filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"};
+ }
+
+ [data-look="neo"].node circle .state-start{
+ fill: #000000;
+ }
+
+ [data-look="neo"].icon-shape .icon {
+ fill: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder};
+ filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"};
+ }
+
+ [data-look="neo"].icon-shape .icon-neo path {
+ stroke: ${r.useGradient?"url("+i+"-gradient)":r.nodeBorder};
+ filter: ${r.dropShadow?r.dropShadow.replace("url(#drop-shadow)",`url(${i}-drop-shadow)`):"none"};
+ }
+
+ ${e}
+`},"getStyles"),t8=(0,n.K)((t,e)=>{void 0!==e&&(t3[t]=e)},"addStylesForDiagram"),t7=t6,t9={};(0,n.V)(t9,{clear:()=>eo,getAccDescription:()=>el,getAccTitle:()=>en,getDiagramTitle:()=>ec,setAccDescription:()=>es,setAccTitle:()=>ea,setDiagramTitle:()=>eh});var et="",ee="",er="",ei=(0,n.K)(t=>tO(t,th()),"sanitizeText"),eo=(0,n.K)(()=>{et="",er="",ee=""},"clear"),ea=(0,n.K)(t=>{et=ei(t).replace(/^\s+/g,"")},"setAccTitle"),en=(0,n.K)(()=>et,"getAccTitle"),es=(0,n.K)(t=>{er=ei(t).replace(/\n\s+ [...]
+ M ${o.x},${o.y} L ${n.x},${n.y}`}function Y(t,e){let{labelStyles:r,nodeStyles:o}=(0,i.GX)(e);e.labelStyle=r,e.label="";let a=t.insert("g").attr("class",y(e)).attr("id",e.domId??e.id),n=Math.max(30,e?.width??0),{cssStyles:s}=e,l=u.A.svg(a),c=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(c.roughness=0,c.fillStyle="solid");let d=l.circle(0,0,2*n,c),p=U(n),g=l.path(p,c),m=a.insert(()=>d,":first-child");return m.insert(()=>g),m.attr("class","outer-path"),s&&"handDrawn"!==e.look&&m. [...]
+ a${o},${a} 0,0,1 0,${-i}
+ l${r},0
+ a${o},${a} 0,0,1 0,${i}
+ M${r},${-i}
+ a${o},${a} 0,0,0 0,${i}
+ l${-r},0`,"createCylinderPathD"),tZ=(0,c.K)((t,e,r,i,o,a)=>`M${t},${e} M${t+r},${e} a${o},${a} 0,0,0 0,${-i} l${-r},0 a${o},${a} 0,0,0 0,${i} l${r},0`,"createOuterCylinderPathD"),tQ=(0,c.K)((t,e,r,i,o,a)=>`M${t+r/2},${-i/2} a${o},${a} 0,0,0 0,${i}`,"createInnerCylinderPathD");async function tJ(t,e){let r,{labelStyles:o,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=o;let n=e.padding??0,l="neo"===e.look?12:n/2;if(e.width||e.height){let t=e.height??0;e.height=(e.height??0)-l,e.height<5&&(e.hei [...]
+ M${C-10},${x} L${C+g},${x}
+ M${C},${x-10} L${C},${x+m}`;"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");let S=k.path(B,w),v=s.insert(()=>S,":first-child");return v.attr("transform","translate(5, 5)"),v.attr("class","basic label-container outer-path"),b&&"handDrawn"!==e.look&&v.selectAll("path").attr("style",b),o&&"handDrawn"!==e.look&&v.selectAll("path").attr("style",o),h.attr("transform",`translate(${-(l.width/2)+5-(l.x-(l.left??0))}, ${-(l.height/2)+5-(l.y-(l.top??0))})`),f(e,v),e.inters [...]
+ a${C},${C} 1 0,0 ${.25*T},${-1*B*.1}
+ a${C},${C} 1 0,0 ${.25*T},0
+ a${C},${C} 1 0,0 ${.25*T},0
+ a${C},${C} 1 0,0 ${.25*T},${.1*B}
+
+ a${C},${C} 1 0,0 ${.15*T},${.33*B}
+ a${.8*C},${.8*C} 1 0,0 0,${.34*B}
+ a${C},${C} 1 0,0 ${-1*T*.15},${.33*B}
+
+ a${C},${C} 1 0,0 ${-1*T*.25},${.15*B}
+ a${C},${C} 1 0,0 ${-1*T*.25},0
+ a${C},${C} 1 0,0 ${-1*T*.25},0
+ a${C},${C} 1 0,0 ${-1*T*.25},${-1*B*.15}
+
+ a${C},${C} 1 0,0 ${-1*T*.1},${-1*B*.33}
+ a${.8*C},${.8*C} 1 0,0 0,${-1*B*.34}
+ a${C},${C} 1 0,0 ${.1*T},${-1*B*.33}
+ H0 V0 Z`;if("handDrawn"===e.look){let t=u.A.svg(n),o=(0,i.Fr)(e,{}),a=t.path(S,o);(r=n.insert(()=>a,":first-child")).attr("class","basic label-container").attr("style",(0,s.KL)(x))}else r=n.insert("path",":first-child").attr("class","basic label-container").attr("style",a).attr("d",S);return r.attr("transform",`translate(${-T/2}, ${-B/2})`),f(e,r),e.calcIntersect=function(t,e){return k(t,e)},e.intersect=function(t){return h.R.info("Bang intersect",e,t),k(e,t)},n}async function eh(t,e){ [...]
+ a${C},${C} 0 0,1 ${.25*g},${-1*g*.1}
+ a${b},${b} 1 0,1 ${.4*g},${-1*g*.1}
+ a${x},${x} 1 0,1 ${.35*g},${.2*g}
+
+ a${C},${C} 1 0,1 ${.15*g},${.35*m}
+ a${w},${w} 1 0,1 ${-1*g*.15},${.65*m}
+
+ a${x},${C} 1 0,1 ${-1*g*.25},${.15*g}
+ a${b},${b} 1 0,1 ${-1*g*.5},0
+ a${C},${C} 1 0,1 ${-1*g*.25},${-1*g*.15}
+
+ a${C},${C} 1 0,1 ${-1*g*.1},${-1*m*.35}
+ a${w},${w} 1 0,1 ${.1*g},${-1*m*.65}
+ H0 V0 Z`;if("handDrawn"===e.look){let t=u.A.svg(n),o=(0,i.Fr)(e,{}),a=t.path(B,o);(r=n.insert(()=>a,":first-child")).attr("class","basic label-container").attr("style",(0,s.KL)(T))}else r=n.insert("path",":first-child").attr("class","basic label-container").attr("style",a).attr("d",B);return d.attr("transform",`translate(${-l.width/2}, ${-l.height/2})`),r.attr("transform",`translate(${-g/2}, ${-m/2})`),f(e,r),e.calcIntersect=function(t,e){return k(t,e)},e.intersect=function(t){return h [...]
+ M${-h/2} ${c/2-5}
+ v${-c+10}
+ q0,-5 5,-5
+ h${h-10}
+ q5,0 5,5
+ v${c-5}
+ H${-h/2}
+ Z
+ `:`
+ M${-h/2} ${c/2-5}
+ v${-c+10}
+ q0,-5 5,-5
+ h${h-10}
+ q5,0 5,5
+ v${c-10}
+ q0,5 -5,5
+ h${-(h-10)}
+ q-5,0 -5,-5
+ Z
+ `;if(!e.domId)throw Error(`defaultMindmapNode: node "${e.id}" is missing a domId \u2014 was render.ts domId prefixing skipped?`);let u=a.append("path").attr("id",e.domId).attr("class","node-bkg node-"+e.type).attr("style",o).attr("d",d);return a.append("line").attr("class","node-line-").attr("x1",-h/2).attr("y1",c/2).attr("x2",h/2).attr("y2",c/2),l.attr("transform",`translate(${-n.width/2}, ${-n.height/2})`),a.append(()=>l.node()),f(e,u),e.calcIntersect=function(t,e){return k(t,e)},e.i [...]
+`;return i+(0,l.KG)(r)},"createCssStyles"),rL=(0,c.K)((t,e)=>{var r,i,o,a,n;return S((o=function t(e,r,i,o,a,n,s,l,h){for(var c,d,u,g,f=0,y=0,m=s,C=0,S=0,v=0,A=1,P=1,z=1,N=0,W=0,j="",H=a,U=n,Y=o,G=j;P;)switch(v=W,W=O()){case 40:108!=v&&58==k(G,m-1)?(N++,G+="("):G+=q(W);break;case 41:N--,G+=")";break;case 34:case 39:case 91:G+=q(W);break;case 9:case 10:case 13:case 32:if(N>0){G+=x(W);break}G+=function(t){for(;M=D();)if(M<33)O();else break;return I(t)>2||I(M)>3?"":" "}(v);break;case 92:G+= [...]
+ The "iframe" tag is not supported by your browser.
+</iframe>`},"putIntoIFrame"),rO=(0,c.K)((t,e,r,i,o)=>{let a=t.append("div");a.attr("id",r),i&&a.attr("style",i);let n=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return o&&n.attr("xmlns:xlink",o),n.append("g"),t},"appendDivSvgG");function rD(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}(0,c.K)(rD,"sandboxedIframe");var rI=(0,c.K)((t,e,r,i)=>{t.getElementById(e)?.remove(),t.getEle [...]
\ No newline at end of file
diff --git a/assets/js/3548.8e3967d3.js b/assets/js/3548.8e3967d3.js
new file mode 100644
index 00000000..98925003
--- /dev/null
+++ b/assets/js/3548.8e3967d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3548"],{52327(t,e,i){i.d(e,{diagram:()=>I});var a=i(30740),n=i(92371),s=i(88053),r=i(35123),l=function(){var t=(0,s.K)(function(t,e,i,a){for(i=i||{},a=t.length;a--;i[t[a]]=e);return i},"o"),e=[1,3],i=[1,4],a=[1,5],n=[1,6],r=[1,7],l=[1,4,5,10,12,13,14,15,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],o=[1,4,5,10,12,13,14,15,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,6 [...]
\ No newline at end of file
diff --git a/assets/js/35aaf8c2.30a0852d.js b/assets/js/35aaf8c2.30a0852d.js
new file mode 100644
index 00000000..714a5507
--- /dev/null
+++ b/assets/js/35aaf8c2.30a0852d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8373"],{49110(e,t,n){n.r(t),n.d(t,{metadata:()=>s,default:()=>h,frontMatter:()=>l,contentTitle:()=>o,toc:()=>c,assets:()=>d});var s=JSON.parse('{"id":"sheet/write/csv","title":"CSV","description":"\x3c!--","source":"@site/docs/sheet/write/csv.md","sourceDirName":"sheet/write","slug":"/sheet/write/csv","permalink":"/docs/sheet/write/csv","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/ed [...]
\ No newline at end of file
diff --git a/assets/js/36994c47.a8d503bd.js b/assets/js/36994c47.a8d503bd.js
new file mode 100644
index 00000000..387b4a3b
--- /dev/null
+++ b/assets/js/36994c47.a8d503bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["191"],{45516(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/372d2263.e3b6b50b.js b/assets/js/372d2263.e3b6b50b.js
new file mode 100644
index 00000000..d67446cf
--- /dev/null
+++ b/assets/js/372d2263.e3b6b50b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9379"],{55415(a){a.exports=JSON.parse('{"tag":{"label":"apache","permalink":"/blog/tags/apache","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/apache","page":1,"postsPerPage":15,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/38165d4c.1f1f59c1.js b/assets/js/38165d4c.1f1f59c1.js
new file mode 100644
index 00000000..464e099e
--- /dev/null
+++ b/assets/js/38165d4c.1f1f59c1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5412"],{89650(e){e.exports=JSON.parse('{"tag":{"label":"fastexcel","permalink":"/blog/tags/fastexcel","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/fastexcel","page":1,"postsPerPage":15,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/3852.e1f1a458.js b/assets/js/3852.e1f1a458.js
new file mode 100644
index 00000000..8e39f143
--- /dev/null
+++ b/assets/js/3852.e1f1a458.js
@@ -0,0 +1,90 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3852"],{51355(e,t,n){n.d(t,{P:()=>r});var i=n(30740),s=n(92371),o=n(88053),r=(0,o.K)((e,t,n,o)=>{e.attr("class",n);let{width:r,height:l,x:h,y:d}=a(e,t);(0,i.a$)(e,l,r,o);let g=c(h,d,r,l,t);e.attr("viewBox",g),s.R.debug(`viewBox configured: ${g} with padding: ${t}`)},"setupViewPortForSVG"),a=(0,o.K)((e,t)=>{let n=e.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:n.width+2*t,height:n.height+2*t,x:n.x,y: [...]
+ .section-${s-1} rect, .section-${s-1} path, .section-${s-1} circle, .section-${s-1} polygon, .section-${s-1} path {
+ fill: ${e["cScale"+s]};
+ }
+ .section-${s-1} text {
+ fill: ${e["cScaleLabel"+s]};
+ }
+ .section-${s-1} span {
+ color: ${e["cScaleLabel"+s]};
+ }
+ .node-icon-${s-1} {
+ font-size: 40px;
+ color: ${e["cScaleLabel"+s]};
+ }
+ .section-edge-${s-1}{
+ stroke: ${e["cScale"+s]};
+ }
+ .edge-depth-${s-1}{
+ stroke-width: ${o};
+ }
+ .section-${s-1} line {
+ stroke: ${e["cScaleInv"+s]} ;
+ stroke-width: 3;
+ }
+
+ .disabled, .disabled circle, .disabled text {
+ fill: lightgray;
+ }
+ .disabled text {
+ fill: #efefef;
+ }
+ [data-look="neo"].mindmap-node.section-${s-1} rect, [data-look="neo"].mindmap-node.section-${s-1} path, [data-look="neo"].mindmap-node.section-${s-1} circle, [data-look="neo"].mindmap-node.section-${s-1} polygon {
+ fill: ${"redux"===t||"redux-dark"===t||"neutral"===t?e.mainBkg:e["cScale"+s]};
+ stroke: ${"redux"===t||"redux-dark"===t?e.nodeBorder:e["cScale"+s]};
+ stroke-width: ${e.strokeWidth??2}px;
+ }
+ [data-look="neo"].section-edge-${s-1}{
+ stroke: ${t?.includes("redux")||"neo-dark"===t?e.nodeBorder:e["cScale"+s]};
+ }
+ [data-look="neo"].mindmap-node.section-${s-1} text {
+ fill: ${"redux"===t||"redux-dark"===t?e.nodeBorder:e["cScaleLabel"+("neutral"===t?1:s)]};
+ }
+ `}return i},"genSections"),_=(0,c.K)((e,t,n)=>{let i="";for(let s=0;s<e;s++)i+=`
+ [data-look="neo"].mindmap-node.section-${s-1} rect, [data-look="neo"].mindmap-node.section-${s-1} path, [data-look="neo"].mindmap-node.section-${s-1} circle, [data-look="neo"].mindmap-node.section-${s-1} polygon {
+ stroke: url(${t}-gradient);
+ fill: ${n};
+ }
+ .section-${s-1} line {
+ stroke-width: 0;
+ }`;return i},"genGradient"),E={get db(){return new m},renderer:{draw:f},parser:p,styles:(0,c.K)(e=>{let{theme:t}=e,n=e.svgId,i=e.dropShadow?e.dropShadow.replace("url(#drop-shadow)",`url(${n}-drop-shadow)`):"none";return`
+ .edge {
+ stroke-width: 3;
+ }
+ ${b(e)}
+ .section-root rect, .section-root path, .section-root circle, .section-root polygon {
+ fill: ${e.git0};
+ }
+ .section-root text {
+ fill: ${e.gitBranchLabel0};
+ }
+ .section-root span {
+ color: ${t?.includes("redux")?e.nodeBorder:e.gitBranchLabel0};
+ }
+ .icon-container {
+ height:100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ .edge {
+ fill: none;
+ }
+ .mindmap-node-label {
+ dy: 1em;
+ alignment-baseline: middle;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ text-align: center;
+ }
+ [data-look="neo"].mindmap-node {
+ filter: ${i};
+ }
+ [data-look="neo"].mindmap-node.section-root rect, [data-look="neo"].mindmap-node.section-root path, [data-look="neo"].mindmap-node.section-root circle, [data-look="neo"].mindmap-node.section-root polygon {
+ fill: ${t?.includes("redux")?e.mainBkg:e.git0};
+ }
+ [data-look="neo"].mindmap-node.section-root .text-inner-tspan {
+ fill: ${t?.includes("redux")?e.nodeBorder:e["cScaleLabel"+ +("neutral"===t)]};
+ }
+ ${e.useGradient&&n&&e.mainBkg?_(e.THEME_COLOR_LIMIT,n,e.mainBkg):""}
+`},"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/3908.9d97dcde.js b/assets/js/3908.9d97dcde.js
new file mode 100644
index 00000000..a64e7c75
--- /dev/null
+++ b/assets/js/3908.9d97dcde.js
@@ -0,0 +1,23 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3908"],{85423(t,e,n){n.d(e,{diagram:()=>tp});var s,i=n(34969),r=n(94812),l=n(30740);n(92371);var a=n(88053),o=n(35123),h=n(22582),c=n(11628);let u=(t,e)=>(0,c.A)(t,"a",-e);var f=n(58480),d=n(81896);function y(t,e){let n=function(t){let e=[];for(let n=0;n<t.length;++n)for(let s=n+1;s<t.length;++s)for(let i of m(t[n],t[s]))i.parentIndex=[n,s],e.push(i);return e}(t),s=n.filter(e=>{var n;return n=e,t.every(t=>x(n,t) [...]
+ .venn-title {
+ font-size: 32px;
+ fill: ${t.vennTitleTextColor};
+ font-family: ${t.fontFamily};
+ }
+
+ .venn-circle text {
+ font-size: 48px;
+ font-family: ${t.fontFamily};
+ }
+
+ .venn-intersection text {
+ font-size: 48px;
+ fill: ${t.vennSetTextColor};
+ font-family: ${t.fontFamily};
+ }
+
+ .venn-text-node {
+ font-family: ${t.fontFamily};
+ color: ${t.vennSetTextColor};
+ }
+`,"getStyles");function tf(t){let e=new Map;for(let n of t){let t=n.targets.join("|"),s=e.get(t);s?Object.assign(s,n.styles):e.set(t,{...n.styles})}return e}(0,a.K)(tf,"buildStyleByKey");var td=(0,a.K)((t,e,n,s)=>{let r=s.db,a=r.getConfig?.(),{themeVariables:c,look:y,handDrawnSeed:g}=(0,l.zj)(),x="handDrawn"===y,p=[c.venn1,c.venn2,c.venn3,c.venn4,c.venn5,c.venn6,c.venn7,c.venn8].filter(Boolean),m=r.getDiagramTitle?.(),b=r.getSubsetData(),v=r.getTextData(),M=tf(r.getStyleData()),I=tx(b),k [...]
\ No newline at end of file
diff --git a/assets/js/3958.bf2b780c.js b/assets/js/3958.bf2b780c.js
new file mode 100644
index 00000000..6545e8dd
--- /dev/null
+++ b/assets/js/3958.bf2b780c.js
@@ -0,0 +1 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3958"],{36430(e){!function(){var t,r,i,n,s,o,a,u,l,c,h,d,f,p,m,y,g,v,x,w,b,k,E,Q,S,P,L,T,I,_,F=function(e){var t=new F.Builder;return t.pipeline.add(F.trimmer,F.stopWordFilter,F.stemmer),t.searchPipeline.add(F.stemmer),e.call(t,t),t.build()};F.version="2.3.9",F.utils={},F.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),F.utils.asString=function(e){return null==e?"":e.toString()},F.utils.clone=functi [...]
\ No newline at end of file
diff --git a/assets/js/3a2db09e.c6a98ea9.js b/assets/js/3a2db09e.c6a98ea9.js
new file mode 100644
index 00000000..6e03bd64
--- /dev/null
+++ b/assets/js/3a2db09e.c6a98ea9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3186"],{68070(e){e.exports=JSON.parse('{"tags":[{"label":"announcement","permalink":"/blog/tags/announcement","count":3},{"label":"security","permalink":"/blog/tags/security","count":1},{"label":"CVE-2026-49328","permalink":"/blog/tags/cve-2026-49328","count":1},{"label":"migration","permalink":"/blog/tags/migration","count":1},{"label":"fastexcel","permalink":"/blog/tags/fastexcel","count":1},{"label":"fesod"," [...]
\ No newline at end of file
diff --git a/assets/js/3cb2f586.cf75b464.js b/assets/js/3cb2f586.cf75b464.js
new file mode 100644
index 00000000..bfc9121d
--- /dev/null
+++ b/assets/js/3cb2f586.cf75b464.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3781"],{47839(e,n,t){t.r(n),t.d(n,{metadata:()=>r,default:()=>o,frontMatter:()=>i,contentTitle:()=>l,toc:()=>c,assets:()=>a});var r=JSON.parse('{"id":"sheet/help/parameter","title":"Parameter","description":"\x3c!--","source":"@site/docs/sheet/help/parameter.md","sourceDirName":"sheet/help","slug":"/sheet/help/parameter","permalink":"/docs/sheet/help/parameter","draft":false,"unlisted":false,"editUrl":"https://g [...]
\ No newline at end of file
diff --git a/assets/js/3ff09b31.4d21973a.js b/assets/js/3ff09b31.4d21973a.js
new file mode 100644
index 00000000..4fa8958a
--- /dev/null
+++ b/assets/js/3ff09b31.4d21973a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4804"],{79271(e,n,s){s.r(n),s.d(n,{metadata:()=>t,default:()=>h,frontMatter:()=>i,contentTitle:()=>a,toc:()=>o,assets:()=>r});var t=JSON.parse('{"id":"sheet/read/csv","title":"CSV","description":"\x3c!--","source":"@site/docs/sheet/read/csv.md","sourceDirName":"sheet/read","slug":"/sheet/read/csv","permalink":"/docs/sheet/read/csv","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/ma [...]
\ No newline at end of file
diff --git a/assets/js/4089.3e7d5969.js b/assets/js/4089.3e7d5969.js
new file mode 100644
index 00000000..b0466066
--- /dev/null
+++ b/assets/js/4089.3e7d5969.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4089"],{14832(e,s,a){a.d(s,{createRailroadServices:()=>c.l});var c=a(5553);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/4116.6d616022.js b/assets/js/4116.6d616022.js
new file mode 100644
index 00000000..12a486a3
--- /dev/null
+++ b/assets/js/4116.6d616022.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4116"],{39275(t,e,r){r.d(e,{T:()=>M});var n=r(28076),i=r(28132),o=r(9080),u=r(2607),a=r(56281),s=r(2818),c=r(88858),l=r(95635),f=r(92908),h=r(91566),d=r(93941),A=r(24056),p=Object.prototype.hasOwnProperty;let v=function(t){if(null==t)return!0;if((0,f.A)(t)&&((0,l.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,h.A)(t)||(0,A.A)(t)||(0,c.A)(t)))return!t.length;var e=(0,s.A)(t);if("[object Map]"==e||"[ob [...]
\ No newline at end of file
diff --git a/assets/js/4281.61b90dee.js b/assets/js/4281.61b90dee.js
new file mode 100644
index 00000000..da3fcc26
--- /dev/null
+++ b/assets/js/4281.61b90dee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4281"],{63382(e,t,i){i.d(t,{A:()=>a});var n=i(91987);i(71763);var o=i(13526),r=i(66783),s=i(52003);function a({className:e}){return(0,n.jsx)("main",{className:(0,o.A)("container margin-vert--xl",e),children:(0,n.jsx)("div",{className:"row",children:(0,n.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,n.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,n.jsx)(r.A,{id:"theme.NotFound.title",desc [...]
\ No newline at end of file
diff --git a/assets/js/4383cab8.7c69fc6f.js b/assets/js/4383cab8.7c69fc6f.js
new file mode 100644
index 00000000..9a72c52d
--- /dev/null
+++ b/assets/js/4383cab8.7c69fc6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9718"],{80759(e,n,t){t.r(n),t.d(n,{metadata:()=>o,default:()=>h,frontMatter:()=>s,contentTitle:()=>l,toc:()=>a,assets:()=>c});var o=JSON.parse('{"id":"contribution/contribute-code","title":"Code Contribution","description":"\x3c!--","source":"@site/community/contribution/contribute-code.md","sourceDirName":"contribution","slug":"/contribution/contribute-code","permalink":"/community/contribution/contribute-code" [...]
\ No newline at end of file
diff --git a/assets/js/4529.047a2dd5.js b/assets/js/4529.047a2dd5.js
new file mode 100644
index 00000000..a5c6e027
--- /dev/null
+++ b/assets/js/4529.047a2dd5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4529"],{49805(e,s,a){a.d(s,{diagram:()=>b.AC});var b=a(65529);a(45644),a(59673),a(51355),a(60368),a(1033),a(94247),a(69976),a(33),a(22679),a(735),a(56170),a(13071),a(21976),a(94812),a(30740),a(92371),a(88053)}}]);
\ No newline at end of file
diff --git a/assets/js/4557.2831c3a9.js b/assets/js/4557.2831c3a9.js
new file mode 100644
index 00000000..77077642
--- /dev/null
+++ b/assets/js/4557.2831c3a9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4557"],{82652(e,s,c){c.d(s,{createArchitectureServices:()=>t.S});var t=c(2993);c(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/4596.c15e80af.js b/assets/js/4596.c15e80af.js
new file mode 100644
index 00000000..52f951cc
--- /dev/null
+++ b/assets/js/4596.c15e80af.js
@@ -0,0 +1,82 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4596"],{67221(e,t,r){r.d(t,{J:()=>s});var n=r(29044),i=class extends n.dg{static{(0,n.K2)(this,"WardleyValueConverter")}runCustomConverter(e,t,r){return"LINK_LABEL"===e.name.toUpperCase()?t.substring(1).trim():void 0}},a={parser:{ValueConverter:(0,n.K2)(()=>new i,"ValueConverter")}};function s(e=n.DD){let t=(0,n.WQ)((0,n.uM)(e),n.sr),r=(0,n.WQ)((0,n.tG)({shared:t}),n.Xr,a);return t.ServiceRegistry.register(r),{s [...]
+${JSON.stringify(Object.fromEntries(e))}`));let r=parseInt(t);if(isNaN(r))return void this.fireError(Error(`Content-Length value must be a number. Got ${t}`));this.nextMessageLength=r}let e=this.buffer.tryReadBody(this.nextMessageLength);if(void 0===e)return void this.setPartialMessageTimer();this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock(async()=>{let t=void 0!==this.options.contentDecoder?await this.options.contentDecoder.decode(e):e,r=await this.opti [...]
+${r}`);let i=r.substr(0,n),a=r.substr(n+1).trim();s.set(e?i.toLowerCase():i,a)}return s}tryReadBody(e){if(!(this._totalLength<e))return this._read(e)}get numberOfBytes(){return this._totalLength}_read(e){if(0===e)return this.emptyBuffer();if(e>this._totalLength)throw Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===e){let t=this._chunks[0];return this._chunks.shift(),this._totalLength-=e,this.asNative(t)}if(this._chunks[0].byteLength>e){let t=this._chunks[0],r=this.asN [...]
+${JSON.stringify(e.error,void 0,4)}`):v.error("Received response message without id. No further error information provided.");else{let t=e.id,r=L.get(t);if(e$(e,r),void 0!==r){L.delete(t);try{if(e.error){let t=e.error;r.reject(new k.ResponseError(t.code,t.message,t.data))}else if(void 0!==e.result)r.resolve(e.result);else throw Error("Should never happen.")}catch(e){e.message?v.error(`Response handler '${r.method}' failed with message: ${e.message}`):v.error(`Response handler '${r.method [...]
+${JSON.stringify(e,null,4)}`),S.string(e.id)||S.number(e.id)){let t=e.id,r=L.get(t);r&&r.reject(Error("The received response has neither a result nor an error property."))}}function em(e){if(null!=e)switch(F){case c.Verbose:return JSON.stringify(e,null,4);case c.Compact:return JSON.stringify(e);default:return}}function eh(e){if(F!==c.Off&&p)if(z===f.Text){let t;(F===c.Verbose||F===c.Compact)&&e.params&&(t=`Params: ${em(e.params)}
+
+`),p.log(`Sending request '${e.method} - (${e.id})'.`,t)}else eR("send-request",e)}function ey(e){if(F!==c.Off&&p)if(z===f.Text){let t;(F===c.Verbose||F===c.Compact)&&(t=e.params?`Params: ${em(e.params)}
+
+`:"No parameters provided.\n\n"),p.log(`Sending notification '${e.method}'.`,t)}else eR("send-notification",e)}function eg(e,t,r){if(F!==c.Off&&p)if(z===f.Text){let n;(F===c.Verbose||F===c.Compact)&&(e.error&&e.error.data?n=`Error data: ${em(e.error.data)}
+
+`:e.result?n=`Result: ${em(e.result)}
+
+`:void 0===e.error&&(n="No result returned.\n\n")),p.log(`Sending response '${t} - (${e.id})'. Processing request took ${Date.now()-r}ms`,n)}else eR("send-response",e)}function eT(e){if(F!==c.Off&&p)if(z===f.Text){let t;(F===c.Verbose||F===c.Compact)&&e.params&&(t=`Params: ${em(e.params)}
+
+`),p.log(`Received request '${e.method} - (${e.id})'.`,t)}else eR("receive-request",e)}function ev(e){if(F!==c.Off&&p&&e.method!==m.type.method)if(z===f.Text){let t;(F===c.Verbose||F===c.Compact)&&(t=e.params?`Params: ${em(e.params)}
+
+`:"No parameters provided.\n\n"),p.log(`Received notification '${e.method}'.`,t)}else eR("receive-notification",e)}function e$(e,t){if(F!==c.Off&&p)if(z===f.Text){let r;if((F===c.Verbose||F===c.Compact)&&(e.error&&e.error.data?r=`Error data: ${em(e.error.data)}
+
+`:e.result?r=`Result: ${em(e.result)}
+
+`:void 0===e.error&&(r="No result returned.\n\n")),t){let n=e.error?` Request failed: ${e.error.message} (${e.error.code}).`:"";p.log(`Received response '${t.method} - (${e.id})' in ${Date.now()-t.timerStart}ms.${n}`,r)}else p.log(`Received response ${e.id} without active response promise.`,r)}else eR("receive-response",e)}function eR(e,t){if(!p||F===c.Off)return;let r={isLSPMessage:!0,type:e,message:t,timestamp:Date.now()};p.log(r)}function eE(){if(et())throw new G(h.Closed,"Connection [...]
+ Complement Sets cannot be automatically optimized.
+ This will disable the lexer's first char optimizations.
+ See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let r="";t&&(r="\n This will disable the lexer's first char optimizations.\n See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details."),pn(`${pK}
+ Failed parsing: < ${e.toString()} >
+ Using the @chevrotain/regexp-to-ast library
+ Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+r)}}return[]}function pU(e,t,r){switch(e.type){case"Disjunction":for(let n=0;n<e.value.length;n++)pU(e.value[n],t,r);break;case"Alternative":let n=e.value;for(let e=0;e<n.length;e++){let i=n[e];switch(i.type){case"EndAnchor":case"GroupBackReference":case"Lookahead":case"NegativeLookahead":case"Lookbehind":case"NegativeLookbehind":case"StartAnchor":case"WordBoundary":case"NonWordBoundary":continue}switch(i.type){ca [...]
+ The regexp unicode flag is not currently supported by the regexp-to-ast library.
+ This will disable the lexer's first char optimizations.
+ For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let i=pq(r.PATTERN,t.ensureOptimizations);cQ(i)&&(y=!1),cb(i,t=>{fT(e,t,d[n])})}else t.ensureOptimizations&&pn(`${pK} TokenType: <${r.name}> is using a custom token pattern without providing <start_chars_hint> parameter.
+ This will disable the lexer's first char optimizations.
+ For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return e},[])}),{emptyGroups:f,patternIdxToConfig:d,charCodeToPatternIdxToConfig:g,hasCustom:h,canBeOptimized:y}}function p1(e,t){let r=[],n=p3(e);r=r.concat(n.errors);let i=p4(n.valid),a=i.valid;return(r=(r=(r=(r=r.concat(i.errors)).concat(p2(a))).concat(fr(a))).concat(fn(a,t))).concat(fi(a))}function p2(e){let t=[],r=cx(e,e=>cJ(e[pZ]));return(t=(t=(t=(t=t.concat(p5(r))).concat(p6(r))). [...]
+Because it appears AFTER the Token Type ->${e.name}<-in the lexer's definition.
+See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;t.push({message:r,type:eY.UNREACHABLE_PATTERN,tokenTypes:[e,a]})}})}),t}function fa(e,t){if(cJ(t)){if(fo(t))return!1;let r=t.exec(e);return null!==r&&0===r.index}if(sD(t))return t(e,0,[],{});if(cz(t,"exec"))return t.exec(e,0,[],{});if("string"==typeof t)return t===e;throw Error("non exhaustive match")}function fs(e){return void 0===c_([".","\\","[","]","|","^","$","(",")","?","*","+","{"],t=>-1!==e.source.index [...]
+`,type:eY.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),cz(e,pJ)&&cb(e.modes,(e,t)=>{cb(e,(r,i)=>{c0(r)?n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${t}> at index: <${i}>
+`,type:eY.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED}):cz(r,"LONGER_ALT")&&cb(sh(r.LONGER_ALT)?r.LONGER_ALT:[r.LONGER_ALT],i=>{c0(i)||cW(e,i)||n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${i.name}> on token <${r.name}> outside of mode <${t}>
+`,type:eY.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})})}),n}function fc(e,t,r){let n=[],i=!1,a=c8(uD(lI(cU(e.modes))),e=>e[pZ]===fG.NA),s=fg(r);return t&&cb(a,e=>{let t=fh(e,s);if(!1!==t){let r={message:fy(e,t),type:t.issue,tokenType:e};n.push(r)}else cz(e,"LINE_BREAKS")?!0===e.LINE_BREAKS&&(i=!0):pQ(s,e.PATTERN)&&(i=!0)}),t&&!i&&n.push({message:"Warning: No LINE_BREAKS Found.\n This Lexer has been defined to track line and column information,\n But none of the Token Types can be [...]
+ The problem is in the <${e.name}> Token Type
+ Root cause: ${t.errMsg}.
+ For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(t.issue===eY.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.
+ The problem is in the <${e.name}> Token Type
+ For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function fg(e){return cD(e,e=>cK(e)?e.charCodeAt(0):e)}function fT(e,t,r){void 0===e[t]?e[t]=[r]:e[t].push(r)}tD(fh,"checkLineBreaksIssues"),tD(fy,"buildLineBreakIssueMessage"),tD(fg,"getCharCodes"),tD(fT,"addToMapOfArrays");var fv=256,f$=[];function fR(e){return e<fv?e:f$[e]}function fE(){if(cQ(f$)){f$=Array(65536);for(let e=0;e<65536;e++)f$[e]=e>255?255+ [...]
+ Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.
+ Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{pG()}),this.TRACE_INIT("toFastProperties",()=>{ps(this)})})}tokenize(e,t=this.defaultMode){if(!cQ(this.lexerDefinitionErrors))throw Error("Unable to Tokenize because Errors detected in definition of Lexer:\n"+cD(this.lexerDefinitionErrors,e=>e.message).join("-----------------------\n"));return this.tokenizeInternal(e,t)}tokenizeInternal(e,t){let r,n,i,a,s,o,l,u,c,p,f [...]
+${r.join("\n")}`+s}},buildEarlyExitMessage({expectedIterationPaths:e,actual:t,customUserDescription:r,ruleName:n}){let i="Expecting: ",a="\nbut found: '"+cP(t).image+"'";if(r)return i+r+a;{let t=cD(e,e=>`[${cD(e,e=>fz(e)).join(",")}]`);return i+`expecting at least one iteration which starts with one of these possible Token sequences::
+ <${t.join(" ,")}>`+a}}};Object.freeze(f2);var f3={buildRuleNotFoundError:(e,t)=>"Invalid grammar, reference to a rule which is not defined: ->"+t.nonTerminalName+"<-\ninside top level rule: ->"+e.name+"<-"},f4={buildDuplicateFoundError(e,t){function r(e){return e instanceof pv?e.terminalType.name:e instanceof pc?e.nonTerminalName:""}tD(r,"getExtraProductionArgument");let n=e.name,i=cP(t),a=i.idx,s=pS(i),o=r(i),l=`->${s}${a>0?a:""}<- ${o?`with argument: ->${o}<-`:""}
+ appears more than once (${t.length} times) in the top level rule: ->${n}<-.
+ For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES
+ `;return(l=l.replace(/[ \t]+/g," ")).replace(/\s\s+/g,"\n")},buildNamespaceConflictError:e=>`Namespace conflict found in grammar.
+The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${e.name}>.
+To resolve this make sure each Terminal and Non-Terminal names are unique
+This is easy to accomplish by using the convention that Terminal names start with an uppercase letter
+and Non-Terminal names start with a lower case letter.`,buildAlternationPrefixAmbiguityError(e){let t=cD(e.prefixPath,e=>fz(e)).join(", "),r=0===e.alternation.idx?"":e.alternation.idx;return`Ambiguous alternatives: <${e.ambiguityIndices.join(" ,")}> due to common lookahead prefix
+in <OR${r}> inside <${e.topLevelRule.name}> Rule,
+<${t}> may appears as a prefix path in all these alternatives.
+See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX
+For Further details.`},buildAlternationAmbiguityError(e){let t=0===e.alternation.idx?"":e.alternation.idx,r=0===e.prefixPath.length,n=`Ambiguous Alternatives Detected: <${e.ambiguityIndices.join(" ,")}> in <OR${t}> inside <${e.topLevelRule.name}> Rule,
+`;if(r)n+=`These alternatives are all empty (match no tokens), making them indistinguishable.
+Only the last alternative may be empty.
+`;else{let t=cD(e.prefixPath,e=>fz(e)).join(", ");n+=`<${t}> may appears as a prefix path in all these alternatives.
+`}return n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
+For Further details.`},buildEmptyRepetitionError(e){let t=pS(e.repetition);return 0!==e.repetition.idx&&(t+=e.repetition.idx),`The repetition <${t}> within Rule <${e.topLevelRule.name}> can never consume any tokens.
+This could lead to an infinite loop.`},buildTokenNameError:e=>"deprecated",buildEmptyAlternationError:e=>`Ambiguous empty alternative: <${e.emptyChoiceIdx+1}> in <OR${e.alternation.idx}> inside <${e.topLevelRule.name}> Rule.
+Only the last alternative may be an empty alternative.`,buildTooManyAlternativesError:e=>`An Alternation cannot have more than 256 alternatives:
+<OR${e.alternation.idx}> inside <${e.topLevelRule.name}> Rule.
+ has ${e.alternation.definition.length+1} alternatives.`,buildLeftRecursionError(e){let t=e.topLevelRule.name,r=cD(e.leftRecursionPath,e=>e.name),n=`${t} --> ${r.concat([t]).join(" --\x3e ")}`;return`Left Recursion found in grammar.
+rule: <${t}> can be invoked from itself (directly or indirectly)
+without consuming any Tokens. The grammar path that causes this is:
+ ${n}
+ To fix this refactor your grammar to remove the left recursion.
+see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError:e=>"deprecated",buildDuplicateRuleNameError(e){let t;return t=e.topLevelRule instanceof pp?e.topLevelRule.name:e.topLevelRule,`Duplicate definition, rule: ->${t}<- is already defined in the grammar: ->${e.grammarName}<-`}};function f9(e,t){let r=new f5(e,t);return r.resolveRefs(),r.errors}tD(f9,"resolveGrammar");var f5=class extends pE{static{tD(this,"GastRefResolverVisitor")}constructor(e,t){super() [...]
+ ${t.join("\n\n").replace(/\n/g,"\n ")}`)}},"validateVisitor")},r.prototype.constructor=r,r._RULE_NAMES=t,r}function mc(e,t,r){let n=tD(function(){},"derivedConstructor");mo(n,e+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return cb(t,e=>{i[e]=ml}),n.prototype=i,n.prototype.constructor=n,n}function mp(e,t){return mf(e,t)}function mf(e,t){return uD(cD(cx(t,t=>!1===sD(e[t])),t=>({msg:`Missing visitor method: <${t}> on ${e.constructor.name} CST Visitor.`,type:eZ.MISSING_MET [...]
+Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let n=cz(r,"resyncEnabled")?r.resyncEnabled:m_.resyncEnabled,i=cz(r,"recoveryValueFunc")?r.recoveryValueFunc:m_.recoveryValueFunc,a=this.ruleShortNameIdx<<12;return this.ruleShortNameIdx++,this.shortRuleNameToFull[a]=e,this.fullRuleNameToShort[e]=a,Object.assign(!0===this.outputCst?tD(function(...r){try{this.ruleInvocationStateUpdate(a,e,this.subruleIdx),t.apply(this,r);let n=this.CST_STACK[thi [...]
+ inside top level rule: <${this.recordingProdStack[0].name}>`);throw r.KNOWN_RECORDER_ERROR=!0,r}let n=cv(this.recordingProdStack),i=new pc({idx:t,nonTerminalName:e.ruleName,label:null==r?void 0:r.LABEL,referencedRule:void 0});return n.definition.push(i),this.outputCst?mE:mv}consumeInternalRecord(e,t,r){if(mk(t),!fP(e)){let r=Error(`<CONSUME${mS(t)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}>
+ inside top level rule: <${this.recordingProdStack[0].name}>`);throw r.KNOWN_RECORDER_ERROR=!0,r}let n=cv(this.recordingProdStack),i=new pv({idx:t,terminalType:e,label:null==r?void 0:r.LABEL});return n.definition.push(i),mR}};function mA(e,t,r,n=!1){mk(r);let i=cv(this.recordingProdStack),a=sD(t)?t:t.DEF,s=new e({definition:[],idx:r});return n&&(s.separator=t.SEP),cz(t,"MAX_LOOKAHEAD")&&(s.maxLookahead=t.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),thi [...]
+ Idx value must be a none negative value smaller than ${256}`);throw t.KNOWN_RECORDER_ERROR=!0,t}}tD(mA,"recordProd"),tD(mC,"recordOrProd"),tD(mS,"getIdxSuffix"),tD(mk,"assertMethodIdxIsValid");var mx=class{static{tD(this,"PerformanceTracer")}initPerformanceTracer(e){if(cz(e,"traceInitPerf")){let t=e.traceInitPerf,r="number"==typeof t;this.traceInitMaxIdent=r?t:1/0,this.traceInitPerf=r?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=mI.traceInitPerf;this.traceInitIndent=-1}TRACE_I [...]
+ ${t.join("\n-------------------------------\n")}`)})}constructor(e,t){if(this.definitionErrors=[],this.selfAnalysisDone=!1,this.initErrorHandler(t),this.initLexerAdapter(),this.initLooksAhead(t),this.initRecognizerEngine(e,t),this.initRecoverable(t),this.initTreeBuilder(t),this.initContentAssist(),this.initGastRecorder(t),this.initPerformanceTracer(t),cz(t,"ignoredIssues"))throw Error("The <ignoredIssues> IParserConfig property has been deprecated.\n Please use the <IGNORE_AMBIGUITIES> [...]
+<${t}> may appears as a prefix path in all these alternatives.
+`;return n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
+For Further details.`}function T_(e){if(e instanceof pc)return"SUBRULE";if(e instanceof pd)return"OPTION";if(e instanceof pT)return"OR";if(e instanceof pm)return"AT_LEAST_ONE";if(e instanceof ph)return"AT_LEAST_ONE_SEP";else if(e instanceof pg)return"MANY_SEP";else if(e instanceof py)return"MANY";else if(e instanceof pv)return"CONSUME";else throw Error("non exhaustive match")}function TP(e,t,r){return{actualToken:r,possibleTokenTypes:Tp(Tt(t.configs.elements,e=>e.state.transitions).filte [...]
+${t}`),this.inline)?`{${e}}`:e}toMarkdown(e){return e?.renderTag?.(this)??this.toMarkdownDefault(e)}toMarkdownDefault(e){let t=this.content.toMarkdown(e);if(this.inline){let r=$Z(this.name,t,e??{});if("string"==typeof r)return r}let r="";e?.tag==="italic"||e?.tag===void 0?r="*":e?.tag==="bold"?r="**":e?.tag==="bold-italic"&&(r="***");let n=`${r}@${this.name}${r}`;return(1===this.content.inlines.length?n=`${n} \u2014 ${t}`:this.content.inlines.length>1&&(n=`${n}
+${t}`),this.inline)?`{${n}}`:n}};function $Z(e,t,r){if("linkplain"===e||"linkcode"===e||"link"===e){let n=t.indexOf(" "),i=t;if(n>0){let e=$j(t,n);i=t.substring(e),t=t.substring(0,n)}return("linkcode"===e||"link"===e&&"code"===r.link)&&(i=`\`${i}\``),r.renderLink?.(t,i)??$X(t,i)}}function $X(e,t){try{return vK.parse(e,!0),`[${t}](${e})`}catch{return e}}tD($Z,"renderInlineTag"),tD($X,"renderLinkDefault");var $J=class{static{tD(this,"JSDocTextImpl")}constructor(e,t){this.inlines=e,this.ran [...]
\ No newline at end of file
diff --git a/assets/js/47edf924.4559d8a0.js b/assets/js/47edf924.4559d8a0.js
new file mode 100644
index 00000000..bd0892d2
--- /dev/null
+++ b/assets/js/47edf924.4559d8a0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["23"],{80843(e,r,t){t.r(r),t.d(r,{metadata:()=>n,default:()=>v,frontMatter:()=>o,contentTitle:()=>a,toc:()=>c,assets:()=>s});var n=JSON.parse('{"id":"sheet/write/converter","title":"Converter","description":"\x3c!--","source":"@site/docs/sheet/write/converter.md","sourceDirName":"sheet/write","slug":"/sheet/write/converter","permalink":"/docs/sheet/write/converter","draft":false,"unlisted":false,"editUrl":"https: [...]
\ No newline at end of file
diff --git a/assets/js/4817.dcdbbac5.js b/assets/js/4817.dcdbbac5.js
new file mode 100644
index 00000000..d920da96
--- /dev/null
+++ b/assets/js/4817.dcdbbac5.js
@@ -0,0 +1,104 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4817"],{55692(t,e,r){r.d(e,{m:()=>a});var o=r(88053),a=class{constructor(t){this.init=t,this.records=this.init()}static{(0,o.K)(this,"ImperativeState")}reset(){this.records=this.init()}}},83492(t,e,r){function o(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}r.d(e,{S:()=>o}),(0,r(88053).K)(o,"populateCommonDb")},56216(t,e,r){r.d(e, [...]
+ ${o-i/2-2},${d+2}
+ ${o-i/2-2},${d-2}
+ ${r.posWithOffset-i/2-4},${d-s-2}
+ ${r.posWithOffset+i/2+4},${d-s-2}
+ ${r.posWithOffset+i/2+4},${d+s+2}
+ ${r.posWithOffset-i/2-4},${d+s+2}`),e.attr("cy",d).attr("cx",o-i/2+2).attr("r",1.5).attr("class","tag-hole"),"TB"===Q||"BT"===Q){let n=o+c;a.attr("class","tag-label-bkg").attr("points",`
+ ${r.x},${n+2}
+ ${r.x},${n-2}
+ ${r.x+10},${n-s-2}
+ ${r.x+10+i+4},${n-s-2}
+ ${r.x+10+i+4},${n+s+2}
+ ${r.x+10},${n+s+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+o+")"),e.attr("cx",r.x+2).attr("cy",n).attr("transform","translate(12,12) rotate(45, "+r.x+","+o+")"),t.attr("x",r.x+5).attr("y",n+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+o+")")}}}},"drawCommitTags"),tl=(0,c.K)(t=>{switch(t.customType??t.type){case h.NORMAL:return"commit-normal";case h.REVERSE:return"commit-reverse";case h.HIGHLIGHT:return"commit-highlight";case h.MERGE:return"commit-m [...]
+ .label${o} { fill: ${t.mainBkg}; stroke: url(${e}-gradient); stroke-width: ${t.strokeWidth};}
+ `;return r},"genGitGraphGradient"),tL=(0,c.K)(t=>{let{theme:e,themeVariables:r}=(0,n.zj)(),{borderColorArray:o}=r,a=tk.has(e);if(tB.has(e)){let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)if(0===r)e+=`
+ .branch-label${r} { fill: ${t.nodeBorder};}
+ .commit${r} { stroke: ${t.nodeBorder}; }
+ .commit-highlight${r} { stroke: ${t.nodeBorder}; fill: ${t.nodeBorder}; }
+ .arrow${r} { stroke: ${t.nodeBorder}; }
+ .commit-bullets { fill: ${t.nodeBorder}; }
+ .commit-cherry-pick${r} { stroke: ${t.nodeBorder}; }
+ ${tC(t)}`;else{let o=r%8;e+=`
+ .branch-label${r} { fill: ${t["gitBranchLabel"+o]}; }
+ .commit${r} { stroke: ${t["git"+o]}; fill: ${t["git"+o]}; }
+ .commit-highlight${r} { stroke: ${t["gitInv"+o]}; fill: ${t["gitInv"+o]}; }
+ .arrow${r} { stroke: ${t["git"+o]}; }
+ `}return e}if(tw.has(e)){let r="";for(let i=0;i<t.THEME_COLOR_LIMIT;i++)if(0===i)r+=`
+ .branch-label${i} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
+ .commit${i} { stroke: ${t.nodeBorder}; }
+ .commit-highlight${i} { stroke: ${t.nodeBorder}; fill: ${t.mainBkg}; }
+ .label${i} { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; stroke-width: ${t.strokeWidth}; ${a?`font-weight:${t.noteFontWeight}`:""} }
+ .arrow${i} { stroke: ${t.nodeBorder}; }
+ .commit-bullets { fill: ${t.nodeBorder}; }
+ `;else{let n=i%o.length;r+=`
+ .branch-label${i} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
+ .commit${i} { stroke: ${o[n]}; fill: ${o[n]}; }
+ .commit-highlight${i} { stroke: ${o[n]}; fill: ${o[n]}; }
+ .label${i} { fill: ${tE.has(e)?t.mainBkg:o[n]}; stroke: ${o[n]}; stroke-width: ${t.strokeWidth}; }
+ .arrow${i} { stroke: ${o[n]}; }
+ `}return r}{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)e+=`
+ .branch-label${r} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
+ .commit${r} { stroke: ${t.nodeBorder}; }
+ .commit-highlight${r} { stroke: ${t.nodeBorder}; fill: ${t.nodeBorder}; }
+ .label${r} { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; stroke-width: ${t.strokeWidth}; ${a?`font-weight:${t.noteFontWeight}`:""}}
+ .arrow${r} { stroke: ${t.nodeBorder}; }
+ .commit-bullets { fill: ${t.nodeBorder}; }
+ .commit-cherry-pick${r} { stroke: ${t.nodeBorder}; }
+ `;return e}},"genColor"),tK=(0,c.K)(t=>`${Array.from({length:t.THEME_COLOR_LIMIT},(t,e)=>e).map(e=>{let r=e%8;return`
+ .branch-label${e} { fill: ${t["gitBranchLabel"+r]}; }
+ .commit${e} { stroke: ${t["git"+r]}; fill: ${t["git"+r]}; }
+ .commit-highlight${e} { stroke: ${t["gitInv"+r]}; fill: ${t["gitInv"+r]}; }
+ .label${e} { fill: ${t["git"+r]}; }
+ .arrow${e} { stroke: ${t["git"+r]}; }
+ `}).join("\n")}`,"normalTheme"),tM={parser:q,db:P,renderer:{draw:tb},styles:(0,c.K)(t=>{let{theme:e}=(0,n.zj)(),r=tT.has(e);return`
+ .commit-id,
+ .commit-msg,
+ .branch-label {
+ fill: lightgrey;
+ color: lightgrey;
+ font-family: 'trebuchet ms', verdana, arial, sans-serif;
+ font-family: var(--mermaid-font-family);
+ }
+
+ ${r?tL(t):tK(t)}
+
+ .branch {
+ stroke-width: ${t.strokeWidth};
+ stroke: ${t.commitLineColor??t.lineColor};
+ stroke-dasharray: ${r?"4 2":"2"};
+ }
+ .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${r?t.nodeBorder:t.commitLabelColor}; ${r?`font-weight:${t.noteFontWeight};`:""}}
+ .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${r?"transparent":t.commitLabelBackground}; opacity: ${r?"":.5}; }
+ .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}
+ .tag-label-bkg { fill: ${r?t.mainBkg:t.tagLabelBackground}; stroke: ${r?t.nodeBorder:t.tagLabelBorder}; ${r?`filter:${t.dropShadow}`:""} }
+ .tag-hole { fill: ${t.textColor}; }
+
+ .commit-merge {
+ stroke: ${r?t.mainBkg:t.primaryColor};
+ fill: ${r?t.mainBkg:t.primaryColor};
+ }
+ .commit-reverse {
+ stroke: ${r?t.mainBkg:t.primaryColor};
+ fill: ${r?t.mainBkg:t.primaryColor};
+ stroke-width: ${r?t.strokeWidth:3};
+ }
+ .commit-highlight-outer {
+ }
+ .commit-highlight-inner {
+ stroke: ${r?t.mainBkg:t.primaryColor};
+ fill: ${r?t.mainBkg:t.primaryColor};
+ }
+
+ .arrow {
+ /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */
+ stroke-width: ${tk.has(e)?t.strokeWidth:8};
+ stroke-linecap: round;
+ fill: none
+ }
+ .gitTitleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.textColor};
+ }
+`},"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/498dc5b3.8a3b3189.js b/assets/js/498dc5b3.8a3b3189.js
new file mode 100644
index 00000000..92b399df
--- /dev/null
+++ b/assets/js/498dc5b3.8a3b3189.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1976"],{25737(e,n,s){s.r(n),s.d(n,{metadata:()=>a,default:()=>h,frontMatter:()=>t,contentTitle:()=>o,toc:()=>c,assets:()=>l});var a=JSON.parse('{"id":"release/release-version","title":"How to Release","description":"\x3c!--","source":"@site/community/release/release-version.md","sourceDirName":"release","slug":"/release/release-version","permalink":"/community/release/release-version","draft":false,"unlisted":fa [...]
\ No newline at end of file
diff --git a/assets/js/4a783ec1.698915d3.js b/assets/js/4a783ec1.698915d3.js
new file mode 100644
index 00000000..22eb0ef6
--- /dev/null
+++ b/assets/js/4a783ec1.698915d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9836"],{51828(e,n,t){t.r(n),t.d(n,{metadata:()=>o,default:()=>l,frontMatter:()=>s,contentTitle:()=>r,toc:()=>d,assets:()=>c});var o=JSON.parse('{"id":"pmc/nominate-committer","title":"Nominate Committer","description":"\x3c!--","source":"@site/community/pmc/nominate-committer.md","sourceDirName":"pmc","slug":"/pmc/nominate-committer","permalink":"/community/pmc/nominate-committer","draft":false,"unlisted":false, [...]
\ No newline at end of file
diff --git a/assets/js/4b935b7f.6305f41e.js b/assets/js/4b935b7f.6305f41e.js
new file mode 100644
index 00000000..fb884397
--- /dev/null
+++ b/assets/js/4b935b7f.6305f41e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["980"],{66477(t){t.exports=JSON.parse('{"tag":{"label":"migration","permalink":"/blog/tags/migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/migration","page":1,"postsPerPage":15,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/5028.574cb63e.js b/assets/js/5028.574cb63e.js
new file mode 100644
index 00000000..7291d537
--- /dev/null
+++ b/assets/js/5028.574cb63e.js
@@ -0,0 +1,36 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5028"],{57601(t,e,i){var r;r=i(22318),t.exports=(()=>{"use strict";var t={45:(t,e,i)=>{var r={};r.layoutBase=i(551),r.CoSEConstants=i(806),r.CoSEEdge=i(767),r.CoSEGraph=i(880),r.CoSEGraphManager=i(578),r.CoSELayout=i(765),r.CoSENode=i(991),r.ConstraintHandler=i(902),t.exports=r},806:(t,e,i)=>{var r=i(551).FDLayoutConstants;function n(){}for(var o in r)n[o]=r[o];n.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,n.DEFAULT_RADIAL_SEPARATION [...]
+ .edge {
+ stroke-width: ${t.archEdgeWidth};
+ stroke: ${t.archEdgeColor};
+ fill: none;
+ }
+
+ .arrow {
+ fill: ${t.archEdgeArrowColor};
+ }
+
+ .node-bkg {
+ fill: none;
+ stroke: ${t.archGroupBorderColor};
+ stroke-width: ${t.archGroupBorderWidth};
+ stroke-dasharray: 8;
+ }
+ .node-icon-text {
+ display: flex;
+ align-items: center;
+ }
+
+ .node-icon-text > div {
+ color: #fff;
+ margin: 1px;
+ height: fit-content;
+ text-align: center;
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ }
+`,"getStyles");function U(t,e){if(0===t)return e();let i=Math.random,r=t>>>0;Math.random=function(){let t=r=r+0x6d2b79f5>>>0;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/0x100000000};try{return e()}finally{Math.random=i}}(0,d.K)(U,"withSeededRandom");var k=(0,d.K)(t=>`<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${t}</g>`,"wrapIcon"),Y={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:k('<path id="b" da [...]
+ translate(${O}, ${R-e.height/2})
+ translate(${i*o.width/2}, ${n*o.height/2})
+ rotate(${-1*i*n*45}, 0, ${e.height/2})
+ `)}}}}}))},"drawEdges"),X=(0,d.K)(async function(t,e,i,r){let n=.75*i.getConfigField("padding"),s=i.getConfigField("fontSize"),l=i.getConfigField("iconSize")/2;await Promise.all(e.nodes().map(async e=>{let d=R(e);if("group"===d.type){let{h:g,w:c,x1:u,y1:f}=e.boundingBox(),p=t.append("rect");p.attr("id",`${r}-group-${d.id}`).attr("x",u+l).attr("y",f+l).attr("width",c).attr("height",g).attr("class","node-bkg");let v=t.append("g"),m=u,y=f;if(d.icon){let t=v.append("g");t.html( [...]
\ No newline at end of file
diff --git a/assets/js/5127.38ce1c79.js b/assets/js/5127.38ce1c79.js
new file mode 100644
index 00000000..01020894
--- /dev/null
+++ b/assets/js/5127.38ce1c79.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5127"],{83492(e,t,i){function n(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}i.d(t,{S:()=>n}),(0,i(88053).K)(n,"populateCommonDb")},53242(e,t,i){i.d(t,{diagram:()=>en});var n=i(83492),a=i(94812),r=i(30740),o=i(92371),l=i(88053),d=i(99183),s=i(35123),m="position frame",c="frame positioned",x="position relation",u="relation positio [...]
\ No newline at end of file
diff --git a/assets/js/5277.03f6c19e.js b/assets/js/5277.03f6c19e.js
new file mode 100644
index 00000000..e237bc77
--- /dev/null
+++ b/assets/js/5277.03f6c19e.js
@@ -0,0 +1,38 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5277"],{83492(e,t,a){function i(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>i}),(0,a(88053).K)(i,"populateCommonDb")},60940(e,t,a){a.d(t,{diagram:()=>v});var i=a(83492),l=a(34969),r=a(94812),n=a(30740),s=a(92371),o=a(88053),c=a(99183),d=a(35123),p=n.UI.pie,h={sections:new Map,showData:!1,config:p},g=h.sections,u=h.s [...]
+ .pieCircle{
+ stroke: ${e.pieStrokeColor};
+ stroke-width : ${e.pieStrokeWidth};
+ opacity : ${e.pieOpacity};
+ }
+ .pieCircle.highlighted{
+ scale: 1.05;
+ opacity: 1;
+ }
+ .pieCircle.highlightedOnHover:hover{
+ transition-duration: 250ms;
+ scale: 1.05;
+ opacity: 1;
+ }
+ .pieOuterCircle{
+ stroke: ${e.pieOuterStrokeColor};
+ stroke-width: ${e.pieOuterStrokeWidth};
+ fill: none;
+ }
+ .pieTitleText {
+ text-anchor: middle;
+ font-size: ${e.pieTitleTextSize};
+ fill: ${e.pieTitleTextColor};
+ font-family: ${e.fontFamily};
+ }
+ .slice {
+ font-family: ${e.fontFamily};
+ fill: ${e.pieSectionTextColor};
+ font-size:${e.pieSectionTextSize};
+ // fill: white;
+ }
+ .legend text {
+ fill: ${e.pieLegendTextColor};
+ font-family: ${e.fontFamily};
+ font-size: ${e.pieLegendTextSize};
+ }
+`,"getStyles"),k=(0,o.K)(e=>{let t=[...e.values()].reduce((e,t)=>e+t,0),a=[...e.entries()].map(([e,t])=>({label:e,value:t})).filter(e=>e.value/t*100>=1);return(0,d.rLf)().value(e=>e.value).sort(null)(a)},"createPieArcs"),v={parser:D,db:y,renderer:{draw:(0,o.K)((e,t,a,i)=>{s.R.debug("rendering pie chart\n"+e);let o=i.db,c=(0,n.D7)(),p=(0,r.$t)(o.getConfig(),c.pie),h=(0,l.D)(t),g=h.append("g");g.attr("transform","translate(225,225)");let{themeVariables:u}=c,[f]=(0,r.I5)(u.pieOuterStrokeWid [...]
\ No newline at end of file
diff --git a/assets/js/5329.3b1eaa5b.js b/assets/js/5329.3b1eaa5b.js
new file mode 100644
index 00000000..9cc068d3
--- /dev/null
+++ b/assets/js/5329.3b1eaa5b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5329"],{61912(e,s,a){a.d(s,{createRailroadPegServices:()=>c.P});var c=a(8116);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/5369.e41dc62b.js b/assets/js/5369.e41dc62b.js
new file mode 100644
index 00000000..941c05dc
--- /dev/null
+++ b/assets/js/5369.e41dc62b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5369"],{70213(e,t,r){r.d(t,{default:()=>aZ});class a extends Error{constructor(e,t){var r="KaTeX parse error: "+e,n=t&&t.loc;if(n&&n.start<=n.end){var i,s,o=n.lexer.input;i=n.start,s=n.end,i===o.length?r+=" at end of input: ":r+=" at position "+(i+1)+": ";var l=o.slice(i,s).replace(/[^]/g,"$&\u0332");r+=(i>15?"\u2026"+o.slice(i-15,i):o.slice(0,i))+l+(s+15<o.length?o.slice(s,s+15)+"\u2026":o.slice(s))}super(r),th [...]
\ No newline at end of file
diff --git a/assets/js/54d6a969.c367b195.js b/assets/js/54d6a969.c367b195.js
new file mode 100644
index 00000000..8fc26bcc
--- /dev/null
+++ b/assets/js/54d6a969.c367b195.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6712"],{26041(e,n,s){s.r(n),s.d(n,{metadata:()=>t,default:()=>h,frontMatter:()=>r,contentTitle:()=>o,toc:()=>a,assets:()=>d});var t=JSON.parse('{"id":"sheet/help/faq","title":"FAQ","description":"\x3c!--","source":"@site/docs/sheet/help/faq.md","sourceDirName":"sheet/help","slug":"/sheet/help/faq","permalink":"/docs/sheet/help/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/ma [...]
\ No newline at end of file
diff --git a/assets/js/551.db2292b0.js b/assets/js/551.db2292b0.js
new file mode 100644
index 00000000..58361e47
--- /dev/null
+++ b/assets/js/551.db2292b0.js
@@ -0,0 +1,79 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["551"],{51355(e,t,s){s.d(t,{P:()=>a});var i=s(30740),r=s(92371),n=s(88053),a=(0,n.K)((e,t,s,n)=>{e.attr("class",s);let{width:a,height:c,x:h,y:u}=l(e,t);(0,i.a$)(e,c,a,n);let y=o(h,u,a,c,t);e.attr("viewBox",y),r.R.debug(`viewBox configured: ${y} with padding: ${t}`)},"setupViewPortForSVG"),l=(0,n.K)((e,t)=>{let s=e.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*t,height:s.height+2*t,x:s.x,y:s [...]
+
+ [data-look="${s}"][data-color-id="color-${t}"].node path {
+ stroke: ${r[t]};
+ fill: ${i?.length?i[t]:""};
+ }
+
+ [data-look="${s}"][data-color-id="color-${t}"].node rect {
+ stroke: ${r[t]};
+ fill: ${i?.length?i[t]:""};
+ }
+ `;return n},"genColor"),m=(0,c.K)(e=>{let{look:t,themeVariables:s}=(0,l.zj)(),{requirementEdgeLabelBackground:i}=s;return`
+ ${y(e)}
+ marker {
+ fill: ${e.relationColor};
+ stroke: ${e.relationColor};
+ }
+
+ marker.cross {
+ stroke: ${e.lineColor};
+ }
+
+ svg {
+ font-family: ${e.fontFamily};
+ font-size: ${e.fontSize};
+ }
+
+ .reqBox {
+ fill: ${e.requirementBackground};
+ fill-opacity: 1.0;
+ stroke: ${e.requirementBorderColor};
+ stroke-width: ${e.requirementBorderSize};
+ }
+
+ .reqTitle, .reqLabel{
+ fill: ${e.requirementTextColor};
+ }
+ .reqLabelBox {
+ fill: ${e.relationLabelBackground};
+ fill-opacity: 1.0;
+ }
+
+ .req-title-line {
+ stroke: ${e.requirementBorderColor};
+ stroke-width: ${e.requirementBorderSize};
+ }
+ .relationshipLine {
+ stroke: ${e.relationColor};
+ stroke-width: ${"neo"===t?e.strokeWidth:"1px"};
+ }
+ .relationshipLabel {
+ fill: ${e.relationLabelColor};
+ }
+ .edgeLabel {
+ background-color: ${e.edgeLabelBackground};
+ }
+ .edgeLabel .label rect {
+ fill: ${e.edgeLabelBackground};
+ }
+ .edgeLabel .label text {
+ fill: ${e.relationLabelColor};
+ }
+ .divider {
+ stroke: ${e.nodeBorder};
+ stroke-width: 1;
+ }
+ .label {
+ font-family: ${e.fontFamily};
+ color: ${e.nodeTextColor||e.textColor};
+ }
+ .label text,span {
+ fill: ${e.nodeTextColor||e.textColor};
+ color: ${e.nodeTextColor||e.textColor};
+ }
+ .labelBkg {
+ background-color: ${i??e.edgeLabelBackground};
+ }
+
+`},"getStyles"),d={};(0,c.V)(d,{draw:()=>E});var E=(0,c.K)(async function(e,t,s,c){o.R.info("REF0:"),o.R.info("Drawing requirement diagram (unified)",t);let{securityLevel:h,state:u,layout:y,look:m}=(0,l.D7)(),d=c.db.getData(),E=(0,i.A)(t,h);d.type=c.type,d.layoutAlgorithm=(0,n.q7)(y),d.nodeSpacing=u?.nodeSpacing??50,d.rankSpacing=u?.rankSpacing??50,d.markers="neo"===m?["requirement_contains_neo","requirement_arrow_neo"]:["requirement_contains","requirement_arrow"],d.diagramId=t,await (0, [...]
\ No newline at end of file
diff --git a/assets/js/552b812f.fb015e28.js b/assets/js/552b812f.fb015e28.js
new file mode 100644
index 00000000..f20d4e8a
--- /dev/null
+++ b/assets/js/552b812f.fb015e28.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7805"],{97608(e,t,r){r.r(t),r.d(t,{metadata:()=>n,default:()=>v,frontMatter:()=>o,contentTitle:()=>s,toc:()=>d,assets:()=>a});var n=JSON.parse('{"id":"sheet/advanced/custom-converter","title":"Custom Converter","description":"\x3c!--","source":"@site/docs/sheet/advanced/custom-converter.md","sourceDirName":"sheet/advanced","slug":"/sheet/advanced/custom-converter","permalink":"/docs/sheet/advanced/custom-convert [...]
\ No newline at end of file
diff --git a/assets/js/5653.d2d55026.js b/assets/js/5653.d2d55026.js
new file mode 100644
index 00000000..c02dd0a2
--- /dev/null
+++ b/assets/js/5653.d2d55026.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5653"],{11348(e,s,t){t.d(s,{createGitGraphServices:()=>a.b});var a=t(79145);t(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/5742f295.abdb3447.js b/assets/js/5742f295.abdb3447.js
new file mode 100644
index 00000000..1adf4a5b
--- /dev/null
+++ b/assets/js/5742f295.abdb3447.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5020"],{57741(e,a,n){n.r(a),n.d(a,{metadata:()=>d,default:()=>c,frontMatter:()=>i,contentTitle:()=>s,toc:()=>o,assets:()=>l});var d=JSON.parse('{"id":"sheet/read/head","title":"Head","description":"\x3c!--","source":"@site/docs/sheet/read/head.md","sourceDirName":"sheet/read","slug":"/sheet/read/head","permalink":"/docs/sheet/read/head","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/ed [...]
\ No newline at end of file
diff --git a/assets/js/5771c448.d4b295ec.js b/assets/js/5771c448.d4b295ec.js
new file mode 100644
index 00000000..6bdf638f
--- /dev/null
+++ b/assets/js/5771c448.d4b295ec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2199"],{70035(e,t,i){i.r(t),i.d(t,{metadata:()=>n,default:()=>u,frontMatter:()=>a,contentTitle:()=>o,toc:()=>l,assets:()=>c});var n=JSON.parse('{"id":"security","title":"Security","description":"\x3c!--","source":"@site/community/security.md","sourceDirName":".","slug":"/security","permalink":"/community/security","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/communi [...]
\ No newline at end of file
diff --git a/assets/js/57b9d056.3650aa6f.js b/assets/js/57b9d056.3650aa6f.js
new file mode 100644
index 00000000..76fe18f9
--- /dev/null
+++ b/assets/js/57b9d056.3650aa6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5546"],{93794(e,n,t){t.r(n),t.d(n,{metadata:()=>i,default:()=>c,frontMatter:()=>s,contentTitle:()=>d,toc:()=>o,assets:()=>l});var i=JSON.parse('{"id":"sheet/read/spring","title":"Spring","description":"\x3c!--","source":"@site/docs/sheet/read/spring.md","sourceDirName":"sheet/read","slug":"/sheet/read/spring","permalink":"/docs/sheet/read/spring","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/57e3af1f.86fc4cf7.js b/assets/js/57e3af1f.86fc4cf7.js
new file mode 100644
index 00000000..24ee3b7b
--- /dev/null
+++ b/assets/js/57e3af1f.86fc4cf7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["372"],{36869(e,t,n){n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>b,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var a=n(69888),o=n(91987),i=n(67008);let r={title:"Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite",description:"Migrate FastExcel 1.3 to Apache Fesod (Incubating) 2.0.1-incubating",authors:["bengbengbalabalabeng"],tags:["migration","fastexcel","fesod [...]
\ No newline at end of file
diff --git a/assets/js/5806.7b0236ca.js b/assets/js/5806.7b0236ca.js
new file mode 100644
index 00000000..9f753961
--- /dev/null
+++ b/assets/js/5806.7b0236ca.js
@@ -0,0 +1 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5806"],{34809(e,t){function n(e){let t,n=[];for(let s of e.split(",").map(e=>e.trim()))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,r]=t;if(s&&r){let e=(s=parseInt(s))<(r=parseInt(r))?1:-1;("-"===a||".."===a||"\u2025"===a)&&(r+=e);for(let t=s;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},89434(e,t,n){"use strict";n.d(t,{A:()=>r});var s= [...]
\ No newline at end of file
diff --git a/assets/js/5855.21122fc9.js b/assets/js/5855.21122fc9.js
new file mode 100644
index 00000000..6f25a23d
--- /dev/null
+++ b/assets/js/5855.21122fc9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5855"],{46130(e,r,s){s.d(r,{diagram:()=>i});var a=s(66780);s(45644),s(59673),s(51355),s(1033),s(94247),s(69976),s(33),s(22679),s(735),s(56170),s(13071),s(21976),s(94812),s(30740),s(92371);var t=s(88053),i={parser:a._$,get db(){return new a.NM},renderer:a.Lh,styles:a.tM,init:(0,t.K)(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]);
\ No newline at end of file
diff --git a/assets/js/5885.6a3e6aab.js b/assets/js/5885.6a3e6aab.js
new file mode 100644
index 00000000..f838879e
--- /dev/null
+++ b/assets/js/5885.6a3e6aab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5885"],{51340(e,s,c){c.d(s,{createPieServices:()=>i.f});var i=c(76111);c(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/5dfaa6dd.518587d6.js b/assets/js/5dfaa6dd.518587d6.js
new file mode 100644
index 00000000..39dbdff8
--- /dev/null
+++ b/assets/js/5dfaa6dd.518587d6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8847"],{14293(e,n,a){a.r(n),a.d(n,{metadata:()=>l,default:()=>h,frontMatter:()=>r,contentTitle:()=>i,toc:()=>o,assets:()=>d});var l=JSON.parse('{"id":"sheet/read/pojo","title":"POJO","description":"\x3c!--","source":"@site/docs/sheet/read/pojo.md","sourceDirName":"sheet/read","slug":"/sheet/read/pojo","permalink":"/docs/sheet/read/pojo","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/ed [...]
\ No newline at end of file
diff --git a/assets/js/5e95c892.755e4ceb.js b/assets/js/5e95c892.755e4ceb.js
new file mode 100644
index 00000000..25530b94
--- /dev/null
+++ b/assets/js/5e95c892.755e4ceb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1668"],{51348(e,s,r){r.r(s),r.d(s,{default:()=>l});var a=r(91987);r(71763);var t=r(13526),u=r(26221),c=r(79218),n=r(36345),i=r(82893);function l(e){return(0,a.jsx)(u.e3,{className:(0,t.A)(c.G.wrapper.docsPages),children:(0,a.jsx)(i.A,{children:(0,n.v)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/6016.3ca06a5e.js b/assets/js/6016.3ca06a5e.js
new file mode 100644
index 00000000..3d38e82f
--- /dev/null
+++ b/assets/js/6016.3ca06a5e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6016"],{3171(e,r,t){t.d(r,{diagram:()=>y});var n=t(20681),a=t(83492);t(34969),t(30740);var s=t(92371),i=t(88053),l=t(99183),p=(0,l.WG)().RailroadEbnf.parser.LangiumParser,o=(0,i.K)(e=>{let r=e.alternatives.map(m);return 1===r.length?r[0]:{type:"choice",alternatives:r}},"transformChoice"),m=(0,i.K)(e=>{let r=e.elements.map(c);return 1===r.length?r[0]:{type:"sequence",elements:r}},"transformSequence"),u=(0,i.K)(e= [...]
\ No newline at end of file
diff --git a/assets/js/6211.88936703.js b/assets/js/6211.88936703.js
new file mode 100644
index 00000000..c5d14ce7
--- /dev/null
+++ b/assets/js/6211.88936703.js
@@ -0,0 +1,4 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6211"],{29204(e,t,a){a.d(t,{J_:()=>v,x:()=>i,Gx:()=>N,Ki:()=>k,kJ:()=>f,OU:()=>C,e7:()=>h,in:()=>c});var s=a(91987),l=a(71763),n=a(17995),r=a(1831);function i(){let e=(0,r.A)(),t=e?.data?.blogMetadata;if(!t)throw Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}let o=l.createContext(null);function c({children:e,content:t,isBlog [...]
+Docusaurus will fallback to the default (English) implementation.
+Error: ${t.message}
+`),i}},[e])}();return{selectMessage:(t,a)=>(function(e,t,a){let s=e.split("|");if(1===s.length)return s[0];s.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);let l=a.select(t);return s[Math.min(a.pluralForms.indexOf(l),s.length-1)]})(a,t,e)}}}}]);
\ No newline at end of file
diff --git a/assets/js/621db11d.6861fd08.js b/assets/js/621db11d.6861fd08.js
new file mode 100644
index 00000000..17fc703e
--- /dev/null
+++ b/assets/js/621db11d.6861fd08.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1221"],{49899(e,t,s){s.r(t),s.d(t,{default:()=>m});var a=s(91987);s(71763);var r=s(13526),l=s(26221),o=s(79218),u=s(94760),i=s(63131),n=s(96522),h=s(52003),c=s(17197);let g={authorListItem:"authorListItem_zBTp"};function p({author:e}){return(0,a.jsx)("li",{className:g.authorListItem,children:(0,a.jsx)(c.A,{as:"h2",author:e,count:e.count})})}function d({authors:e}){return(0,a.jsx)("section",{className:(0,r.A)("ma [...]
\ No newline at end of file
diff --git a/assets/js/6270108c.1c05701f.js b/assets/js/6270108c.1c05701f.js
new file mode 100644
index 00000000..22a529c6
--- /dev/null
+++ b/assets/js/6270108c.1c05701f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6011"],{25849(e,l,s){s.r(l),s.d(l,{metadata:()=>d,default:()=>h,frontMatter:()=>i,contentTitle:()=>n,toc:()=>a,assets:()=>c});var d=JSON.parse('{"id":"sheet/fill/fill","title":"Fill","description":"\x3c!--","source":"@site/docs/sheet/fill/fill.md","sourceDirName":"sheet/fill","slug":"/sheet/fill/","permalink":"/docs/sheet/fill/","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/ [...]
\ No newline at end of file
diff --git a/assets/js/6279.947276da.js b/assets/js/6279.947276da.js
new file mode 100644
index 00000000..422ccf15
--- /dev/null
+++ b/assets/js/6279.947276da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6279"],{68533(t,e,r){r.d(e,{A:()=>a});var n=r(54738),o=r(10778),c=Object.prototype.hasOwnProperty;let a=function(t,e,r){var a=t[e];c.call(t,e)&&(0,o.A)(a,r)&&(void 0!==r||e in t)||(0,n.A)(t,e,r)}},54738(t,e,r){r.d(e,{A:()=>o});var n=r(36049);let o=function(t,e,r){"__proto__"==e&&n.A?(0,n.A)(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},14027(t,e,r){r.d(e,{A:()=>z});var n=r(87119),o=r(84139),c [...]
\ No newline at end of file
diff --git a/assets/js/64ca138b.e88f8366.js b/assets/js/64ca138b.e88f8366.js
new file mode 100644
index 00000000..e127d2e9
--- /dev/null
+++ b/assets/js/64ca138b.e88f8366.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6296"],{2069(e,n,s){s.r(n),s.d(n,{metadata:()=>t,default:()=>l,frontMatter:()=>d,contentTitle:()=>o,toc:()=>a,assets:()=>c});var t=JSON.parse('{"id":"maturity","title":"Maturity","description":"\x3c!--","source":"@site/community/maturity.md","sourceDirName":".","slug":"/maturity","permalink":"/community/maturity","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/communit [...]
\ No newline at end of file
diff --git a/assets/js/6578.3a80bb05.js b/assets/js/6578.3a80bb05.js
new file mode 100644
index 00000000..51d23155
--- /dev/null
+++ b/assets/js/6578.3a80bb05.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6578"],{27129(t,i,e){e.d(i,{diagram:()=>te});var s,a=e(34969),n=e(13071);e(21976);var h=e(94812),o=e(30740),r=e(92371),l=e(88053),c=e(35123),g=function(){var t=(0,l.K)(function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},"o"),i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],a=[1,5],n=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,36,37,38],r=[1,25],c=[1,26],g=[1,28],u=[1,29],x=[1,30],d=[1,31],p=[1,32],f= [...]
\ No newline at end of file
diff --git a/assets/js/66e7b107.b4f15ad8.js b/assets/js/66e7b107.b4f15ad8.js
new file mode 100644
index 00000000..f8b2f0b4
--- /dev/null
+++ b/assets/js/66e7b107.b4f15ad8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3712"],{1515(e,s,n){n.r(s),n.d(s,{metadata:()=>i,default:()=>h,frontMatter:()=>o,contentTitle:()=>a,toc:()=>d,assets:()=>l});var i=JSON.parse('{"id":"feedback","title":"Feedback","description":"\x3c!--","source":"@site/community/feedback.md","sourceDirName":".","slug":"/feedback","permalink":"/community/feedback","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/communit [...]
\ No newline at end of file
diff --git a/assets/js/674.56c0ec8c.js b/assets/js/674.56c0ec8c.js
new file mode 100644
index 00000000..62fe3bfb
--- /dev/null
+++ b/assets/js/674.56c0ec8c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["674"],{93753(e,t,n){n.r(t),n.d(t,{render:()=>nc});var r=n(34570),o=n(69976),l=n(33);n(22679);var i=n(735),a=n(56170);n(13071),n(21976);var s=n(94812),f=n(30740),d=n(92371),u=n(88053),h=n(62399);async function g(e,t){let r=new h.T({multigraph:!0,compound:!0}),o=[...t.edges],i=(0,f.D7)(),a=e.insert("g").attr("class","root"),s=a.insert("g").attr("class","clusters"),d=a.insert("g").attr("class","edges edgePath"),u=a [...]
\ No newline at end of file
diff --git a/assets/js/67ac9947.5bec1465.js b/assets/js/67ac9947.5bec1465.js
new file mode 100644
index 00000000..724dee24
--- /dev/null
+++ b/assets/js/67ac9947.5bec1465.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8748"],{8660(e,n,t){t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var a=t(67933),o=t(91987),i=t(67008);let s={title:"Apache Fesod (Incubating) 2.0.1-incubating Officially Released",description:"The Apache Fesod community is pleased to announce the official release of Apache Fesod (Incubating) 2.0.1-incubating.",authors:["psxjoy"],tags:["announcement","re [...]
\ No newline at end of file
diff --git a/assets/js/6827.a4c6176a.js b/assets/js/6827.a4c6176a.js
new file mode 100644
index 00000000..7c13bccc
--- /dev/null
+++ b/assets/js/6827.a4c6176a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6827"],{19718(e,s,a){a.d(s,{createRadarServices:()=>c.f});var c=a(60567);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/6875c492.98d30afd.js b/assets/js/6875c492.98d30afd.js
new file mode 100644
index 00000000..ec15da1f
--- /dev/null
+++ b/assets/js/6875c492.98d30afd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["766"],{90982(e,t,n){n.d(t,{A:()=>a});var r=n(91987);n(71763);var i=n(66783),s=n(62259);function a(e){let{metadata:t}=e,{previousPage:n,nextPage:a}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,i.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,r.jsx)(s.A,{permalink:n,title:(0,r.jsx)(i.A,{id [...]
\ No newline at end of file
diff --git a/assets/js/6910.93d66ffc.js b/assets/js/6910.93d66ffc.js
new file mode 100644
index 00000000..e7696849
--- /dev/null
+++ b/assets/js/6910.93d66ffc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6910"],{49805(e,s,a){a.d(s,{diagram:()=>b.AC});var b=a(65529);a(45644),a(59673),a(51355),a(60368),a(1033),a(94247),a(69976),a(33),a(22679),a(735),a(56170),a(13071),a(21976),a(94812),a(30740),a(92371),a(88053)}}]);
\ No newline at end of file
diff --git a/assets/js/6999.02845492.js b/assets/js/6999.02845492.js
new file mode 100644
index 00000000..773fe022
--- /dev/null
+++ b/assets/js/6999.02845492.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6999"],{14585(e,t,n){n.d(t,{M:()=>d});var r=n(88430),a=n(14027),i=n(63336);function d(e){var t,n,d,l={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:(t=e,i.A(t.nodes(),function(e){var n=t.node(e),a=t.parent(e),i={v:e};return r.A(n)||(i.value=n),r.A(a)||(i.parent=a),i})),edges:(n=e,i.A(n.edges(),function(e){var t=n.edge(e),a={v:e.v,w:e.w};return r.A(e.name)||(a.name=e. [...]
\ No newline at end of file
diff --git a/assets/js/7009b5d3.a064c031.js b/assets/js/7009b5d3.a064c031.js
new file mode 100644
index 00000000..eaf3e641
--- /dev/null
+++ b/assets/js/7009b5d3.a064c031.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["964"],{69374(T,e,R){R.r(e),R.d(e,{assets:()=>d,contentTitle:()=>M,default:()=>E,frontMatter:()=>N,metadata:()=>U,toc:()=>p});var U=R(2291),l=R(91987),a=R(67008);let N={title:"From User to Committer",description:"From User to Committer",authors:["bengbengbalabalabeng"],tags:["opensource","apache","committer","fesod"]},M,d={authorsImageUrls:[void 0]},p=[];function n(T){let e={code:"code",img:"img",p:"p",strong:"st [...]
\ No newline at end of file
diff --git a/assets/js/704.8df70b1f.js b/assets/js/704.8df70b1f.js
new file mode 100644
index 00000000..ec35e8af
--- /dev/null
+++ b/assets/js/704.8df70b1f.js
@@ -0,0 +1,24 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["704"],{83492(e,t,a){function l(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>l}),(0,a(88053).K)(l,"populateCommonDb")},51355(e,t,a){a.d(t,{P:()=>i});var l=a(30740),r=a(92371),s=a(88053),i=(0,s.K)((e,t,a,s)=>{e.attr("class",a);let{width:i,height:c,x:d,y:p}=n(e,t);(0,l.a$)(e,c,i,s);let h=o(d,p,i,c,t);e.attr("viewBox",h) [...]
+ .treemapNode.section {
+ stroke: ${r.sectionStrokeColor};
+ stroke-width: ${r.sectionStrokeWidth};
+ fill: ${r.sectionFillColor};
+ }
+ .treemapNode.leaf {
+ stroke: ${r.leafStrokeColor};
+ stroke-width: ${r.leafStrokeWidth};
+ fill: ${r.leafFillColor};
+ }
+ .treemapLabel {
+ fill: ${i};
+ font-size: ${r.labelFontSize};
+ }
+ .treemapValue {
+ fill: ${c};
+ font-size: ${r.valueFontSize};
+ }
+ .treemapTitle {
+ fill: ${s};
+ font-size: ${r.titleFontSize};
+ }
+ `},"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/7052.7a09bd03.js b/assets/js/7052.7a09bd03.js
new file mode 100644
index 00000000..da478c14
--- /dev/null
+++ b/assets/js/7052.7a09bd03.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7052"],{95111(e,t,i){i.d(t,{captureNodeSizes:()=>u});var r=i(88053);function n(){if("u">typeof globalThis)return globalThis}function a(){return"u"<typeof location?"browser-dev":`${location.pathname}${location.search}`}function o(e,t){let i=n();if(!i)return;let r=t.node(),a=(r&&"ownerSVGElement"in r?r.ownerSVGElement:null)??r,o=a?.id??"(unknown)";i.mermaidCapturedSizes??=[];let u={svgId:o,sizes:e};i.mermaidCaptur [...]
\ No newline at end of file
diff --git a/assets/js/7108.4cbd9a68.js b/assets/js/7108.4cbd9a68.js
new file mode 100644
index 00000000..c47f8de0
--- /dev/null
+++ b/assets/js/7108.4cbd9a68.js
@@ -0,0 +1 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7108"],{29951(t,e,n){"use strict";t.exports=n(84848)},48920(t,e,n){"use strict";var i=n(96627),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",l [...]
\ No newline at end of file
diff --git a/assets/js/7158.ae0edc8c.js b/assets/js/7158.ae0edc8c.js
new file mode 100644
index 00000000..e1806b27
--- /dev/null
+++ b/assets/js/7158.ae0edc8c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7158"],{67173(e,s,a){a.d(s,{createRailroadEbnfServices:()=>b.W});var b=a(77804);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/7297.7b4efe07.js b/assets/js/7297.7b4efe07.js
new file mode 100644
index 00000000..f4278546
--- /dev/null
+++ b/assets/js/7297.7b4efe07.js
@@ -0,0 +1,115 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7297"],{72856(t,e,n){n.d(e,{diagram:()=>te});var i=n(34969),r=n(94812),a=n(30740),s=n(92371),o=n(88053),l=n(35123),c=n(22582),h=n(58480),d=n(81896),u=function(){var t=(0,o.K)(function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},"o"),e=[6,11,13,14,15,17,19,20,23,24],n=[1,12],i=[1,13],r=[1,14],a=[1,15],s=[1,16],l=[1,19],c=[1,20],h={trace:(0,o.K)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ti [...]
+ .section-${e-1} rect,
+ .section-${e-1} path,
+ .section-${e-1} circle {
+ fill: ${n&&i?t.mainBkg:a};
+ stroke: ${l};
+ stroke-width: ${t.strokeWidth};
+ filter: ${s};
+ }
+
+ .section-${e-1} text {
+ fill: ${t.nodeBorder};
+ font-weight: ${t.fontWeight}
+ }
+
+ .node-icon-${e-1} {
+ font-size: 40px;
+ color: ${t["cScaleLabel"+e]};
+ }
+
+ .section-edge-${e-1} {
+ stroke: ${t["cScale"+e]};
+ }
+
+ .edge-depth-${e-1} {
+ stroke-width: ${r};
+ }
+
+ .section-${e-1} line {
+ stroke: ${t["cScaleInv"+e]};
+ stroke-width: 3;
+ }
+
+ .lineWrapper line {
+ stroke: ${t.nodeBorder};
+ stroke-width:${t.strokeWidth}
+ }
+
+ .disabled,
+ .disabled circle,
+ .disabled text {
+ fill: ${t.tertiaryColor??"lightgray"};
+ }
+
+ .disabled text {
+ fill: ${t.clusterBorder??"#efefef"};
+ }
+ `}return o},"genReduxSections"),Q=(0,o.K)(t=>{let e="";for(let e=0;e<t.THEME_COLOR_LIMIT;e++)t["lineColor"+e]=t["lineColor"+e]||t["cScaleInv"+e],(0,c.A)(t["lineColor"+e])?t["lineColor"+e]=(0,h.A)(t["lineColor"+e],20):t["lineColor"+e]=(0,d.A)(t["lineColor"+e],20);for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=""+(17-3*n);e+=`
+ .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} path {
+ fill: ${t["cScale"+n]};
+ }
+ .section-${n-1} text {
+ fill: ${t["cScaleLabel"+n]};
+ }
+ .node-icon-${n-1} {
+ font-size: 40px;
+ color: ${t["cScaleLabel"+n]};
+ }
+ .section-edge-${n-1}{
+ stroke: ${t["cScale"+n]};
+ }
+ .edge-depth-${n-1}{
+ stroke-width: ${i};
+ }
+ .section-${n-1} line {
+ stroke: ${t["cScaleInv"+n]} ;
+ stroke-width: 3;
+ }
+
+ .lineWrapper line{
+ stroke: ${t["cScaleLabel"+n]} ;
+ }
+
+ .disabled, .disabled circle, .disabled text {
+ fill: ${t.tertiaryColor??"lightgray"};
+ }
+ .disabled text {
+ fill: ${t.clusterBorder??"#efefef"};
+ }
+ `}return e},"genSections"),tt=(0,o.K)(t=>{let{theme:e}=(0,a.zj)(),n=e?.includes("redux"),i="neutral"===e,r=t.svgId?.replace(/^#/,"")??"",s="";if(t.useGradient&&r&&t.THEME_COLOR_LIMIT&&!i)for(let e=0;e<t.THEME_COLOR_LIMIT;e++)s+=`
+ .section-${e-1}[data-look="neo"] rect,
+ .section-${e-1}[data-look="neo"] path,
+ .section-${e-1}[data-look="neo"] circle {
+ fill: ${t.mainBkg};
+ stroke: url(#${r}-gradient);
+ stroke-width: 2;
+ }
+ .section-${e-1}[data-look="neo"] line {
+ stroke: url(#${r}-gradient);
+ stroke-width: 2;
+ }`;return`
+ .edge {
+ stroke-width: 3;
+ }
+ ${n?X(t):Q(t)}
+ ${s}
+ .section-root rect, .section-root path, .section-root circle {
+ fill: ${t.git0};
+ }
+ .section-root text {
+ fill: ${t.gitBranchLabel0};
+ }
+ .icon-container {
+ height:100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ .edge {
+ fill: none;
+ }
+ .eventWrapper {
+ filter: brightness(120%);
+ }
+`},"getStyles"),te={db:p,renderer:{setConf:(0,o.K)(()=>{},"setConf"),draw:(0,o.K)((t,e,n,i)=>"TD"===(i?.db?.getDirection?.()??"LR")?Y.draw(t,e,n,i):U.draw(t,e,n,i),"draw")},parser:u,styles:tt}}}]);
\ No newline at end of file
diff --git a/assets/js/7354.d7c32b36.js b/assets/js/7354.d7c32b36.js
new file mode 100644
index 00000000..6f920d18
--- /dev/null
+++ b/assets/js/7354.d7c32b36.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7354"],{35153(e,r,t){t.d(r,{diagram:()=>y});var a=t(20681),n=t(83492);t(34969),t(30740);var l=t(92371),s=t(88053),p=t(99183),i=(0,p.sB)().RailroadAbnf.parser.LangiumParser,u=(0,s.K)(e=>{let r=e.alternatives.map(m);return 1===r.length?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),m=(0,s.K)(e=>{let r=e.elements.map(d);return 1===r.length?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),o [...]
\ No newline at end of file
diff --git a/assets/js/7431.8bccbabc.js b/assets/js/7431.8bccbabc.js
new file mode 100644
index 00000000..a2a9a704
--- /dev/null
+++ b/assets/js/7431.8bccbabc.js
@@ -0,0 +1,226 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7431"],{94247(t,e,s){s.d(e,{CP:()=>d,Ck:()=>y,HT:()=>p,PB:()=>u,aC:()=>h,lC:()=>l,m:()=>c,tk:()=>o});var i=s(30740),r=s(88053),a=s(34674),n=s(35123),o=(0,r.K)((t,e)=>{let s=t.append("rect");if(s.attr("x",e.x),s.attr("y",e.y),s.attr("fill",e.fill),s.attr("stroke",e.stroke),s.attr("width",e.width),s.attr("height",e.height),e.name&&s.attr("name",e.name),e.rx&&s.attr("rx",e.rx),e.ry&&s.attr("ry",e.ry),void 0!==e.att [...]
+defs [id$="-barbEnd"] {
+ fill: ${t.transitionColor};
+ stroke: ${t.transitionColor};
+ }
+g.stateGroup text {
+ fill: ${t.nodeBorder};
+ stroke: none;
+ font-size: 10px;
+}
+g.stateGroup text {
+ fill: ${t.textColor};
+ stroke: none;
+ font-size: 10px;
+
+}
+g.stateGroup .state-title {
+ font-weight: bolder;
+ fill: ${t.stateLabelColor};
+}
+
+g.stateGroup rect {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+}
+
+g.stateGroup line {
+ stroke: ${t.lineColor};
+ stroke-width: ${t.strokeWidth||1};
+}
+
+.transition {
+ stroke: ${t.transitionColor};
+ stroke-width: ${t.strokeWidth||1};
+ fill: none;
+}
+
+.stateGroup .composit {
+ fill: ${t.background};
+ border-bottom: 1px
+}
+
+.stateGroup .alt-composit {
+ fill: #e0e0e0;
+ border-bottom: 1px
+}
+
+.state-note {
+ stroke: ${t.noteBorderColor};
+ fill: ${t.noteBkgColor};
+
+ text {
+ fill: ${t.noteTextColor};
+ stroke: none;
+ font-size: 10px;
+ }
+}
+
+.stateLabel .box {
+ stroke: none;
+ stroke-width: 0;
+ fill: ${t.mainBkg};
+ opacity: 0.5;
+}
+
+.edgeLabel .label rect {
+ fill: ${t.labelBackgroundColor};
+ opacity: 0.5;
+}
+.edgeLabel {
+ background-color: ${t.edgeLabelBackground};
+ p {
+ background-color: ${t.edgeLabelBackground};
+ }
+ rect {
+ opacity: 0.5;
+ background-color: ${t.edgeLabelBackground};
+ fill: ${t.edgeLabelBackground};
+ }
+ text-align: center;
+}
+.edgeLabel .label text {
+ fill: ${t.transitionLabelColor||t.tertiaryTextColor};
+}
+.label div .edgeLabel {
+ color: ${t.transitionLabelColor||t.tertiaryTextColor};
+}
+
+.stateLabel text {
+ fill: ${t.stateLabelColor};
+ font-size: 10px;
+ font-weight: bold;
+}
+
+.node circle.state-start {
+ fill: ${t.specialStateColor};
+ stroke: ${t.specialStateColor};
+}
+
+.node .fork-join {
+ fill: ${t.specialStateColor};
+ stroke: ${t.specialStateColor};
+}
+
+.node circle.state-end {
+ fill: ${t.innerEndBackground};
+ stroke: ${t.background};
+ stroke-width: 1.5
+}
+.end-state-inner {
+ fill: ${t.compositeBackground||t.background};
+ // stroke: ${t.background};
+ stroke-width: 1.5
+}
+
+.node rect {
+ fill: ${t.stateBkg||t.mainBkg};
+ stroke: ${t.stateBorder||t.nodeBorder};
+ stroke-width: ${t.strokeWidth||1}px;
+}
+.node polygon {
+ fill: ${t.mainBkg};
+ stroke: ${t.stateBorder||t.nodeBorder};;
+ stroke-width: ${t.strokeWidth||1}px;
+}
+[id$="-barbEnd"] {
+ fill: ${t.lineColor};
+}
+
+.statediagram-cluster rect {
+ fill: ${t.compositeTitleBackground};
+ stroke: ${t.stateBorder||t.nodeBorder};
+ stroke-width: ${t.strokeWidth||1}px;
+}
+
+.cluster-label, .nodeLabel {
+ color: ${t.stateLabelColor};
+ // line-height: 1;
+}
+
+.statediagram-cluster rect.outer {
+ rx: 5px;
+ ry: 5px;
+}
+.statediagram-state .divider {
+ stroke: ${t.stateBorder||t.nodeBorder};
+}
+
+.statediagram-state .title-state {
+ rx: 5px;
+ ry: 5px;
+}
+.statediagram-cluster.statediagram-cluster .inner {
+ fill: ${t.compositeBackground||t.background};
+}
+.statediagram-cluster.statediagram-cluster-alt .inner {
+ fill: ${t.altBackground?t.altBackground:"#efefef"};
+}
+
+.statediagram-cluster .inner {
+ rx:0;
+ ry:0;
+}
+
+.statediagram-state rect.basic {
+ rx: 5px;
+ ry: 5px;
+}
+.statediagram-state rect.divider {
+ stroke-dasharray: 10,10;
+ fill: ${t.altBackground?t.altBackground:"#efefef"};
+}
+
+.note-edge {
+ stroke-dasharray: 5;
+}
+
+.statediagram-note rect {
+ fill: ${t.noteBkgColor};
+ stroke: ${t.noteBorderColor};
+ stroke-width: 1px;
+ rx: 0;
+ ry: 0;
+}
+.statediagram-note rect {
+ fill: ${t.noteBkgColor};
+ stroke: ${t.noteBorderColor};
+ stroke-width: 1px;
+ rx: 0;
+ ry: 0;
+}
+
+.statediagram-note text {
+ fill: ${t.noteTextColor};
+}
+
+.statediagram-note .nodeLabel {
+ color: ${t.noteTextColor};
+}
+.statediagram .edgeLabel {
+ color: red; // ${t.noteTextColor};
+}
+
+[id$="-dependencyStart"], [id$="-dependencyEnd"] {
+ fill: ${t.lineColor};
+ stroke: ${t.lineColor};
+ stroke-width: ${t.strokeWidth||1};
+}
+
+.statediagramTitleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.textColor};
+}
+
+[data-look="neo"].statediagram-cluster rect {
+ fill: ${t.mainBkg};
+ stroke: ${t.useGradient?"url("+t.svgId+"-gradient)":t.stateBorder||t.nodeBorder};
+ stroke-width: ${t.strokeWidth??1};
+}
+[data-look="neo"].statediagram-cluster rect.outer {
+ rx: ${t.radius}px;
+ ry: ${t.radius}px;
+ filter: ${t.dropShadow?t.dropShadow.replace("url(#drop-shadow)",`url(${t.svgId}-drop-shadow)`):"none"}
+}
+`,"getStyles")},51355(t,e,s){s.d(e,{P:()=>n});var i=s(30740),r=s(92371),a=s(88053),n=(0,a.K)((t,e,s,a)=>{t.attr("class",s);let{width:n,height:c,x:h,y:d}=o(t,e);(0,i.a$)(t,c,n,a);let u=l(h,d,n,c,e);t.attr("viewBox",u),r.R.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),o=(0,a.K)((t,e)=>{let s=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*e,height:s.height+2*e,x:s.x,y:s.y}},"calculateDimensionsWithPadding"),l=(0,a.K)((t,e,s,i,r)=>`${t-r [...]
\ No newline at end of file
diff --git a/assets/js/7484.a3da2aa5.js b/assets/js/7484.a3da2aa5.js
new file mode 100644
index 00000000..0ce964b8
--- /dev/null
+++ b/assets/js/7484.a3da2aa5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7484"],{85463(e,s,a){a.d(s,{createRailroadAbnfServices:()=>b.s});var b=a(10027);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/7492.45c9aaf7.js b/assets/js/7492.45c9aaf7.js
new file mode 100644
index 00000000..718f6b7e
--- /dev/null
+++ b/assets/js/7492.45c9aaf7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7492"],{25663(e,s,c){c.d(s,{createPacketServices:()=>t.$});var t=c(39185);c(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/7558.65194fa9.js b/assets/js/7558.65194fa9.js
new file mode 100644
index 00000000..93962b9d
--- /dev/null
+++ b/assets/js/7558.65194fa9.js
@@ -0,0 +1,5 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7558"],{55973(t,e,a){a.d(e,{diagram:()=>tR});var n,i=a(94247),s=a(94812),r=a(30740),l=a(92371),o=a(88053),h=a(35123),d=a(34674),p=function(){var t=(0,o.K)(function(t,e,a,n){for(a=a||{},n=t.length;n--;a[t[n]]=e);return a},"o"),e=[1,24],a=[1,25],n=[1,26],i=[1,27],s=[1,28],r=[1,63],l=[1,64],h=[1,65],d=[1,66],p=[1,67],u=[1,68],y=[1,69],b=[1,29],f=[1,30],g=[1,31],x=[1,32],_=[1,33],m=[1,34],E=[1,35],S=[1,36],A=[1,37], [...]
+ stroke: ${t.personBorder};
+ fill: ${t.personBkg};
+ }
+`,"getStyles"),init:(0,o.K)(({c4:t,wrap:e})=>{tv.setConf(t),H.setWrap(e)},"init")}},94247(t,e,a){a.d(e,{CP:()=>p,Ck:()=>b,HT:()=>y,PB:()=>u,aC:()=>d,lC:()=>o,m:()=>h,tk:()=>l});var n=a(30740),i=a(88053),s=a(34674),r=a(35123),l=(0,i.K)((t,e)=>{let a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),e.name&&a.attr("name",e.name),e.rx&&a.attr("rx",e.rx),e.ry&&a.attr("ry",e.ry),void 0!==e.attr [...]
\ No newline at end of file
diff --git a/assets/js/7750.31867392.js b/assets/js/7750.31867392.js
new file mode 100644
index 00000000..35564cd3
--- /dev/null
+++ b/assets/js/7750.31867392.js
@@ -0,0 +1,34 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7750"],{29029(t,e,n){n.d(e,{diagram:()=>te});var i=n(30740);n(92371);var r=n(88053),s=n(35123);function o(t,e){let n;if(void 0===e)for(let e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n>r||void 0===n&&r>=r)&&(n=r)}return n}function l(t){return t.target.depth}function a(t,e){return t.sourceLinks.length?t.depth:e-1}function h(t,e){let n=0;if(void 0===e)for(let [...]
+${W}${Math.round(100*e)/100}${V}`:t,"getText"),tr=(0,r.K)(t=>"outlined"===q?(t.layer??0)<tt?{x:t.x0-6,anchor:"end"}:{x:t.x1+6,anchor:"start"}:t.x0<j/2?{x:t.x1+6,anchor:"start"}:{x:t.x0-6,anchor:"end"},"getLabelPosition"),ts=O.append("g").attr("class","node-labels").attr("font-size",14),to=(0,r.K)(t=>ts.selectAll(t?`.${t}`:"text").data(H.nodes).join("text").attr("class",t??null).attr("x",t=>tr(t).x).attr("y",t=>(t.y1+t.y0)/2).attr("dy",`${G?"0":"0.35"}em`).attr("text-anchor",t=>tr(t).anch [...]
+ font-family: ${t.fontFamily};
+ }
+
+ .node-labels {
+ font-family: ${t.fontFamily};
+ }
+
+ /* Outlined label style - background stroke for better readability */
+ .sankey-label-bg {
+ stroke: ${t.mainBkg||t.background||"#fff"};
+ stroke-width: 4px;
+ stroke-linejoin: round;
+ paint-order: stroke;
+ }
+
+ /* Foreground label text */
+ .sankey-label-fg {
+ fill: ${t.textColor};
+ }
+
+ /* Node styling */
+ .node rect {
+ shape-rendering: crispEdges;
+ }
+
+ /* Link styling */
+ .link {
+ fill: none;
+ stroke-opacity: 0.5;
+ mix-blend-mode: multiply;
+ }
+`,"getStyles"),tt=N.parse.bind(N);N.parse=t=>tt(H(t));var te={styles:J,parser:N,db:q,renderer:{draw:Z}}}}]);
\ No newline at end of file
diff --git a/assets/js/8001.17116c39.js b/assets/js/8001.17116c39.js
new file mode 100644
index 00000000..6c0a6838
--- /dev/null
+++ b/assets/js/8001.17116c39.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8001"],{63720(e,t,n){function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function i(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}function a(e,t,n){return t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,c(r.key),r)}}(e.prot [...]
\ No newline at end of file
diff --git a/assets/js/8041.bd029986.js b/assets/js/8041.bd029986.js
new file mode 100644
index 00000000..dddfa992
--- /dev/null
+++ b/assets/js/8041.bd029986.js
@@ -0,0 +1,287 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8041"],{99222(t){t.exports=function(t,e){var i=e.prototype,s=i.format;i.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return s.bind(this)(t);var n=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return i.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWe [...]
+ .mermaid-main-font {
+ font-family: ${t.fontFamily};
+ }
+
+ .exclude-range {
+ fill: ${t.excludeBkgColor};
+ }
+
+ .section {
+ stroke: none;
+ opacity: 0.2;
+ }
+
+ .section0 {
+ fill: ${t.sectionBkgColor};
+ }
+
+ .section2 {
+ fill: ${t.sectionBkgColor2};
+ }
+
+ .section1,
+ .section3 {
+ fill: ${t.altSectionBkgColor};
+ opacity: 0.2;
+ }
+
+ .sectionTitle0 {
+ fill: ${t.titleColor};
+ }
+
+ .sectionTitle1 {
+ fill: ${t.titleColor};
+ }
+
+ .sectionTitle2 {
+ fill: ${t.titleColor};
+ }
+
+ .sectionTitle3 {
+ fill: ${t.titleColor};
+ }
+
+ .sectionTitle {
+ text-anchor: start;
+ font-family: ${t.fontFamily};
+ }
+
+
+ /* Grid and axis */
+
+ .grid .tick {
+ stroke: ${t.gridColor};
+ opacity: 0.8;
+ shape-rendering: crispEdges;
+ }
+
+ .grid .tick text {
+ font-family: ${t.fontFamily};
+ fill: ${t.textColor};
+ }
+
+ .grid path {
+ stroke-width: 0;
+ }
+
+
+ /* Today line */
+
+ .today {
+ fill: none;
+ stroke: ${t.todayLineColor};
+ stroke-width: 2px;
+ }
+
+
+ /* Task styling */
+
+ /* Default task */
+
+ .task {
+ stroke-width: 2;
+ }
+
+ .taskText {
+ text-anchor: middle;
+ font-family: ${t.fontFamily};
+ }
+
+ .taskTextOutsideRight {
+ fill: ${t.taskTextDarkColor};
+ text-anchor: start;
+ font-family: ${t.fontFamily};
+ }
+
+ .taskTextOutsideLeft {
+ fill: ${t.taskTextDarkColor};
+ text-anchor: end;
+ }
+
+
+ /* Special case clickable */
+
+ .task.clickable {
+ cursor: pointer;
+ }
+
+ .taskText.clickable {
+ cursor: pointer;
+ fill: ${t.taskTextClickableColor} !important;
+ font-weight: bold;
+ }
+
+ .taskTextOutsideLeft.clickable {
+ cursor: pointer;
+ fill: ${t.taskTextClickableColor} !important;
+ font-weight: bold;
+ }
+
+ .taskTextOutsideRight.clickable {
+ cursor: pointer;
+ fill: ${t.taskTextClickableColor} !important;
+ font-weight: bold;
+ }
+
+
+ /* Specific task settings for the sections*/
+
+ .taskText0,
+ .taskText1,
+ .taskText2,
+ .taskText3 {
+ fill: ${t.taskTextColor};
+ }
+
+ .task0,
+ .task1,
+ .task2,
+ .task3 {
+ fill: ${t.taskBkgColor};
+ stroke: ${t.taskBorderColor};
+ }
+
+ .taskTextOutside0,
+ .taskTextOutside2
+ {
+ fill: ${t.taskTextOutsideColor};
+ }
+
+ .taskTextOutside1,
+ .taskTextOutside3 {
+ fill: ${t.taskTextOutsideColor};
+ }
+
+
+ /* Active task */
+
+ .active0,
+ .active1,
+ .active2,
+ .active3 {
+ fill: ${t.activeTaskBkgColor};
+ stroke: ${t.activeTaskBorderColor};
+ }
+
+ .activeText0,
+ .activeText1,
+ .activeText2,
+ .activeText3 {
+ fill: ${t.taskTextDarkColor} !important;
+ }
+
+
+ /* Completed task */
+
+ .done0,
+ .done1,
+ .done2,
+ .done3 {
+ stroke: ${t.doneTaskBorderColor};
+ fill: ${t.doneTaskBkgColor};
+ stroke-width: 2;
+ }
+
+ .doneText0,
+ .doneText1,
+ .doneText2,
+ .doneText3 {
+ fill: ${t.taskTextDarkColor} !important;
+ }
+
+ /* Done task text displayed outside the bar sits against the diagram background,
+ not against the done-task bar, so it must use the outside/contrast color. */
+ .doneText0.taskTextOutsideLeft,
+ .doneText0.taskTextOutsideRight,
+ .doneText1.taskTextOutsideLeft,
+ .doneText1.taskTextOutsideRight,
+ .doneText2.taskTextOutsideLeft,
+ .doneText2.taskTextOutsideRight,
+ .doneText3.taskTextOutsideLeft,
+ .doneText3.taskTextOutsideRight {
+ fill: ${t.taskTextOutsideColor} !important;
+ }
+
+
+ /* Tasks on the critical line */
+
+ .crit0,
+ .crit1,
+ .crit2,
+ .crit3 {
+ stroke: ${t.critBorderColor};
+ fill: ${t.critBkgColor};
+ stroke-width: 2;
+ }
+
+ .activeCrit0,
+ .activeCrit1,
+ .activeCrit2,
+ .activeCrit3 {
+ stroke: ${t.critBorderColor};
+ fill: ${t.activeTaskBkgColor};
+ stroke-width: 2;
+ }
+
+ .doneCrit0,
+ .doneCrit1,
+ .doneCrit2,
+ .doneCrit3 {
+ stroke: ${t.critBorderColor};
+ fill: ${t.doneTaskBkgColor};
+ stroke-width: 2;
+ cursor: pointer;
+ shape-rendering: crispEdges;
+ }
+
+ .milestone {
+ transform: rotate(45deg) scale(0.8,0.8);
+ }
+
+ .milestoneText {
+ font-style: italic;
+ }
+ .doneCritText0,
+ .doneCritText1,
+ .doneCritText2,
+ .doneCritText3 {
+ fill: ${t.taskTextDarkColor} !important;
+ }
+
+ /* Done-crit task text outside the bar \u2014 same reasoning as doneText above. */
+ .doneCritText0.taskTextOutsideLeft,
+ .doneCritText0.taskTextOutsideRight,
+ .doneCritText1.taskTextOutsideLeft,
+ .doneCritText1.taskTextOutsideRight,
+ .doneCritText2.taskTextOutsideLeft,
+ .doneCritText2.taskTextOutsideRight,
+ .doneCritText3.taskTextOutsideLeft,
+ .doneCritText3.taskTextOutsideRight {
+ fill: ${t.taskTextOutsideColor} !important;
+ }
+
+ .vert {
+ stroke: ${t.vertLineColor};
+ }
+
+ .vertText {
+ font-size: 15px;
+ text-anchor: middle;
+ fill: ${t.vertLineColor} !important;
+ }
+
+ .activeCritText0,
+ .activeCritText1,
+ .activeCritText2,
+ .activeCritText3 {
+ fill: ${t.taskTextDarkColor} !important;
+ }
+
+ .titleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.titleColor||t.textColor};
+ font-family: ${t.fontFamily};
+ }
+`,"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/8131.96c39786.js b/assets/js/8131.96c39786.js
new file mode 100644
index 00000000..d9a98951
--- /dev/null
+++ b/assets/js/8131.96c39786.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8131"],{72478(e,n,r){r.d(n,{Zp:()=>nH});var t,o,i,a=r(39344),u=r(93897),d=0;let c=function(e){var n=++d;return(0,u.A)(e)+n};var f=r(28076),s=r(43817);let v=function(e){return(null==e?0:e.length)?(0,s.A)(e,1):[]};var h=r(63336),l=Math.ceil,g=Math.max;let p=function(e,n,r,t){for(var o=-1,i=g(l((n-e)/(r||1)),0),a=Array(i);i--;)a[t?i:++o]=e,e+=r;return a};var A=r(10778),w=r(92908),b=r(21143),y=r(80115);let m=functio [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.c898acf7.js b/assets/js/814f3328.c898acf7.js
new file mode 100644
index 00000000..ad80d0a7
--- /dev/null
+++ b/assets/js/814f3328.c898acf7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1833"],{55513(e){e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF","permalink":"/blog/2026/06/11/cve-2026-49328","unlisted":false,"date":"2026-06-11T00:00:00.000Z"},{"title":"Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite","permalink":"/blog/2026/05/07/migr [...]
\ No newline at end of file
diff --git a/assets/js/8197.707fcdc6.js b/assets/js/8197.707fcdc6.js
new file mode 100644
index 00000000..747e8766
--- /dev/null
+++ b/assets/js/8197.707fcdc6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8197"],{53380(e,t,a){a.d(t,{diagram:()=>b});var r=a(34969),s=a(30740),n=a(92371),d=a(88053),i=a(99183),p={parse:(0,d.K)(async e=>{let t=await (0,i.qg)("info",e);n.R.debug(t)},"parse")},g=(0,d.K)(()=>"11.16.0","getVersion"),b={parser:p,db:{getVersion:g},renderer:{draw:(0,d.K)((e,t,a)=>{n.R.debug("rendering info diagram\n"+e);let d=(0,r.D)(t);(0,s.a$)(d,100,400,!0),d.append("g").append("text").attr("x",100).attr(" [...]
\ No newline at end of file
diff --git a/assets/js/83b4fe73.31b30734.js b/assets/js/83b4fe73.31b30734.js
new file mode 100644
index 00000000..aae845fa
--- /dev/null
+++ b/assets/js/83b4fe73.31b30734.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1244"],{48067(e,n,t){t.r(n),t.d(n,{metadata:()=>i,default:()=>u,frontMatter:()=>s,contentTitle:()=>c,toc:()=>m,assets:()=>a});var i=JSON.parse('{"id":"pmc/become-pmc-member","title":"Become A PPMC member","description":"\x3c!--","source":"@site/community/pmc/become-pmc-member.md","sourceDirName":"pmc","slug":"/pmc/become-pmc-member","permalink":"/community/pmc/become-pmc-member","draft":false,"unlisted":false,"e [...]
\ No newline at end of file
diff --git a/assets/js/8406.a049668c.js b/assets/js/8406.a049668c.js
new file mode 100644
index 00000000..c1113ccf
--- /dev/null
+++ b/assets/js/8406.a049668c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8406"],{10821(e,t,n){n.d(t,{default:()=>o});function o(e,{target:t=document.body}={}){if("string"!=typeof e)throw TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);let n=document.createElement("textarea"),l=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.all="unset",n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.width="2e [...]
\ No newline at end of file
diff --git a/assets/js/84450331.566219b3.js b/assets/js/84450331.566219b3.js
new file mode 100644
index 00000000..34bde688
--- /dev/null
+++ b/assets/js/84450331.566219b3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5682"],{94243(e,n,t){t.r(n),t.d(n,{metadata:()=>a,default:()=>c,frontMatter:()=>l,contentTitle:()=>d,toc:()=>o,assets:()=>s});var a=JSON.parse('{"id":"sheet/read/extra","title":"Extra","description":"\x3c!--","source":"@site/docs/sheet/read/extra.md","sourceDirName":"sheet/read","slug":"/sheet/read/extra","permalink":"/docs/sheet/read/extra","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fes [...]
\ No newline at end of file
diff --git a/assets/js/846.55acd6e2.js b/assets/js/846.55acd6e2.js
new file mode 100644
index 00000000..f489d9fc
--- /dev/null
+++ b/assets/js/846.55acd6e2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["846"],{29661(e,r,a){a.d(r,{diagram:()=>m});var t=a(20681),l=a(83492);a(34969),a(30740);var n=a(92371),i=a(88053),s=a(99183),p=(0,s.lz)().Railroad.parser.LangiumParser,o=(0,i.K)(e=>{switch(e.$type){case"RailroadTerminalExpr":return{type:"terminal",value:e.value};case"RailroadNonTerminalExpr":return{type:"nonterminal",name:e.name};case"RailroadSpecialExpr":return{type:"special",text:e.text};case"RailroadSequenceEx [...]
\ No newline at end of file
diff --git a/assets/js/859.ad9fdc65.js b/assets/js/859.ad9fdc65.js
new file mode 100644
index 00000000..a9b1ce23
--- /dev/null
+++ b/assets/js/859.ad9fdc65.js
@@ -0,0 +1 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["859"],{20239(t,e,i){t.exports=function(t){var e=[function(e,i){e.exports=t},function(t,e,i){"use strict";var r=i(0).FDLayoutConstants;function n(){}for(var o in r)n[o]=r[o];n.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,n.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,n.DEFAULT_COMPONENT_SEPERATION=60,n.TILE=!0,n.TILING_PADDING_VERTICAL=10,n.TILING_PADDING_HORIZONTAL=10,n.TREE_REDUCTION_ON_INCREMENTAL=!1,t.exports=n},function(t,e,i){ [...]
\ No newline at end of file
diff --git a/assets/js/8599.7765a37a.js b/assets/js/8599.7765a37a.js
new file mode 100644
index 00000000..b4971645
--- /dev/null
+++ b/assets/js/8599.7765a37a.js
@@ -0,0 +1,64 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8599"],{2650(t,e,i){i.d(e,{diagram:()=>$});var s=i(34969),n=i(94812),a=i(30740);i(92371);var r=i(88053),h=i(30726),l=function(){var t=(0,r.K)(function(t,e,i,s){for(i=i||{},s=t.length;s--;i[t[s]]=e);return i},"o"),e=[1,4],i=[1,14],s=[1,12],n=[1,13],a=[6,7,8],h=[1,20],l=[1,18],o=[1,19],c=[6,7,11],u=[1,6,13,14],d=[1,23],y=[1,24],p=[1,6,7,11,13,14],g={trace:(0,r.K)(function(){},"trace"),yy:{},symbols_:{error:2,start [...]
+.ishikawa .ishikawa-spine,
+.ishikawa .ishikawa-branch,
+.ishikawa .ishikawa-sub-branch {
+ stroke: ${t.lineColor};
+ stroke-width: 2;
+ fill: none;
+}
+
+.ishikawa .ishikawa-sub-branch {
+ stroke-width: 1;
+}
+
+.ishikawa .ishikawa-arrow {
+ fill: ${t.lineColor};
+}
+
+.ishikawa .ishikawa-head {
+ fill: ${t.mainBkg};
+ stroke: ${t.lineColor};
+ stroke-width: 2;
+}
+
+.ishikawa .ishikawa-label-box {
+ fill: ${t.mainBkg};
+ stroke: ${t.lineColor};
+ stroke-width: 2;
+}
+
+.ishikawa text {
+ font-family: ${t.fontFamily};
+ font-size: ${t.fontSize};
+ fill: ${t.textColor};
+}
+
+.ishikawa .ishikawa-head-label {
+ font-weight: 600;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ font-size: 14px;
+}
+
+.ishikawa .ishikawa-label {
+ text-anchor: end;
+}
+
+.ishikawa .ishikawa-label.cause {
+ text-anchor: middle;
+ dominant-baseline: middle;
+}
+
+.ishikawa .ishikawa-label.align {
+ text-anchor: end;
+ dominant-baseline: middle;
+}
+
+.ishikawa .ishikawa-label.up {
+ dominant-baseline: baseline;
+}
+
+.ishikawa .ishikawa-label.down {
+ dominant-baseline: hanging;
+}
+`,"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/8646.d2071ca2.js b/assets/js/8646.d2071ca2.js
new file mode 100644
index 00000000..04504c88
--- /dev/null
+++ b/assets/js/8646.d2071ca2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8646"],{8725(e,s,t){t.d(s,{createEventModelingServices:()=>c.g});var c=t(93277);t(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/87165530.115b37bc.js b/assets/js/87165530.115b37bc.js
new file mode 100644
index 00000000..0ab599bf
--- /dev/null
+++ b/assets/js/87165530.115b37bc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["27"],{47733(e,l,t){t.r(l),t.d(l,{metadata:()=>s,default:()=>h,frontMatter:()=>r,contentTitle:()=>i,toc:()=>c,assets:()=>d});var s=JSON.parse('{"id":"sheet/write/extra","title":"Extra","description":"\x3c!--","source":"@site/docs/sheet/write/extra.md","sourceDirName":"sheet/write","slug":"/sheet/write/extra","permalink":"/docs/sheet/write/extra","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/ [...]
\ No newline at end of file
diff --git a/assets/js/8768.2424319c.js b/assets/js/8768.2424319c.js
new file mode 100644
index 00000000..d0eb2f12
--- /dev/null
+++ b/assets/js/8768.2424319c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8768"],{42675(e,s,a){a.d(s,{createTreemapServices:()=>c.d});var c=a(86955);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/87c901a1.39927b23.js b/assets/js/87c901a1.39927b23.js
new file mode 100644
index 00000000..55eaea21
--- /dev/null
+++ b/assets/js/87c901a1.39927b23.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1556"],{69645(e){e.exports=JSON.parse('{"tag":{"label":"security","permalink":"/blog/tags/security","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/security","page":1,"postsPerPage":15,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/8811.c72e6e0e.js b/assets/js/8811.c72e6e0e.js
new file mode 100644
index 00000000..17cf2e24
--- /dev/null
+++ b/assets/js/8811.c72e6e0e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8811"],{31382(){}}]);
\ No newline at end of file
diff --git a/assets/js/883.651dd44a.js b/assets/js/883.651dd44a.js
new file mode 100644
index 00000000..2c4a4372
--- /dev/null
+++ b/assets/js/883.651dd44a.js
@@ -0,0 +1,80 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["883"],{80124(t,e,i){i.d(e,{A:()=>r});var s=i(70761),n=i(27868);let r=(t,e)=>s.A.lang.round(n.A.parse(t)[e])},51355(t,e,i){i.d(e,{P:()=>a});var s=i(30740),n=i(92371),r=i(88053),a=(0,r.K)((t,e,i,r)=>{t.attr("class",i);let{width:a,height:l,x:h,y:u}=c(t,e);(0,s.a$)(t,l,a,r);let d=o(h,u,a,l,e);t.attr("viewBox",d),n.R.debug(`viewBox configured: ${d} with padding: ${e}`)},"setupViewPortForSVG"),c=(0,r.K)((t,e)=>{let i= [...]
+
+ [data-look="${i}"][data-color-id="color-${e}"].node path {
+ stroke: ${n[e]};
+ ${r?`fill: ${s[e]};`:""}
+ }
+
+ [data-look="${i}"][data-color-id="color-${e}"].node rect {
+ stroke: ${n[e]};
+ ${r?`fill: ${s[e]};`:""}
+ }
+ `;return a},"genColor"),E={parser:y,get db(){return new p},renderer:_,styles:(0,l.K)(t=>{let{look:e,theme:i,erEdgeLabelBackground:s,strokeWidth:n}=t;return`
+ ${m(t)}
+ .entityBox {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ }
+
+ .relationshipLabelBox {
+ fill: ${t.tertiaryColor};
+ opacity: 0.7;
+ background-color: ${t.tertiaryColor};
+ rect {
+ opacity: 0.5;
+ }
+ }
+
+ .labelBkg {
+ background-color: ${f.has(i)&&s?s:b(t.tertiaryColor,.5)};
+ }
+
+ .edgeLabel {
+ background-color: ${f.has(i)&&s?s:t.edgeLabelBackground};
+ }
+ .edgeLabel .label rect {
+ fill: ${f.has(i)&&s?s:t.edgeLabelBackground};
+ }
+ .edgeLabel .label text {
+ fill: ${t.textColor};
+ }
+
+ .edgeLabel .label {
+ fill: ${t.nodeBorder};
+ font-size: 14px;
+ }
+
+ .label {
+ font-family: ${t.fontFamily};
+ color: ${t.nodeTextColor||t.textColor};
+ }
+
+ .edge-pattern-dashed {
+ stroke-dasharray: 8,8;
+ }
+
+ .node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon
+ {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ stroke-width: ${"neo"===e?n:"1px"};
+ }
+
+ .relationshipLine {
+ stroke: ${t.lineColor};
+ stroke-width: ${"neo"===e?n:"1px"};
+ fill: none;
+ }
+
+ .marker {
+ fill: none !important;
+ stroke: ${t.lineColor} !important;
+ stroke-width: 1;
+ }
+ [data-look=neo].labelBkg {
+ background-color: ${b(t.tertiaryColor,.5)};
+ }
+`},"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/8946.c675b412.js b/assets/js/8946.c675b412.js
new file mode 100644
index 00000000..d4cd8326
--- /dev/null
+++ b/assets/js/8946.c675b412.js
@@ -0,0 +1,160 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8946"],{80124(t,e,s){s.d(e,{A:()=>a});var i=s(70761),r=s(27868);let a=(t,e)=>i.A.lang.round(r.A.parse(t)[e])},94247(t,e,s){s.d(e,{CP:()=>h,Ck:()=>g,HT:()=>p,PB:()=>d,aC:()=>c,lC:()=>l,m:()=>o,tk:()=>u});var i=s(30740),r=s(88053),a=s(34674),n=s(35123),u=(0,r.K)((t,e)=>{let s=t.append("rect");if(s.attr("x",e.x),s.attr("y",e.y),s.attr("fill",e.fill),s.attr("stroke",e.stroke),s.attr("width",e.width),s.attr("height", [...]
+ /* Font Awesome icon styling - consolidated */
+ .label-icon {
+ display: inline-block;
+ height: 1em;
+ overflow: visible;
+ vertical-align: -0.125em;
+ }
+
+ .node .label-icon path {
+ fill: currentColor;
+ stroke: revert;
+ stroke-width: revert;
+ }
+`,"getIconStyles")},65529(t,e,s){s.d(e,{AC:()=>T,tM:()=>D,ur:()=>C});var i=s(45644),r=s(59673),a=s(51355),n=s(60368),u=s(1033),l=s(94247),o=s(33),c=s(94812),h=s(30740),d=s(92371),p=s(88053),g=s(35123),A=s(95605),b=s(80124),y=s(30941),k=class{constructor(){this.vertexCounter=0,this.config=(0,h.D7)(),this.diagramId="",this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCo [...]
+
+Initialize mermaid with maxEdges set to a higher number to allow more edges.
+You cannot set this config via configuration inside the diagram as it is a secure config.
+You have to call mermaid.initialize.`)}isLinkData(t){return null!==t&&"object"==typeof t&&"id"in t&&"string"==typeof t.id}addLink(t,e,s){let i=this.isLinkData(s)?s.id.replace("@",""):void 0;for(let r of(d.R.info("addLink",t,e,i),t))for(let a of e){let n=r===t[t.length-1],u=a===e[0];n&&u?this.addSingleLink(r,a,s,i):this.addSingleLink(r,a,s,void 0)}}updateLinkInterpolate(t,e){t.forEach(t=>{"default"===t?this.edges.defaultInterpolate=e:this.edges[t].interpolate=e})}updateLink(t,e){t.forEach [...]
+ font-family: ${t.fontFamily};
+ color: ${t.nodeTextColor||t.textColor};
+ }
+ .cluster-label text {
+ fill: ${t.titleColor};
+ }
+ .cluster-label span {
+ color: ${t.titleColor};
+ }
+ .cluster-label span p {
+ background-color: transparent;
+ }
+
+ .label text,span {
+ fill: ${t.nodeTextColor||t.textColor};
+ color: ${t.nodeTextColor||t.textColor};
+ }
+
+ .node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon,
+ .node path {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ stroke-width: ${t.strokeWidth??1}px;
+ }
+ .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {
+ text-anchor: middle;
+ }
+
+ .node .katex path {
+ fill: #000;
+ stroke: #000;
+ stroke-width: 1px;
+ }
+
+ .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {
+ text-align: center;
+ }
+ .node.clickable {
+ cursor: pointer;
+ }
+
+
+ .root .anchor path {
+ fill: ${t.lineColor} !important;
+ stroke-width: 0;
+ stroke: ${t.lineColor};
+ }
+
+ .arrowheadPath {
+ fill: ${t.arrowheadColor};
+ }
+
+ .edgePath .path {
+ stroke: ${t.lineColor};
+ stroke-width: ${t.strokeWidth??2}px;
+ }
+
+ .flowchart-link {
+ stroke: ${t.lineColor};
+ fill: none;
+ }
+
+ .edgeLabel {
+ background-color: ${t.edgeLabelBackground};
+ p {
+ background-color: ${t.edgeLabelBackground};
+ }
+ rect {
+ opacity: 0.5;
+ background-color: ${t.edgeLabelBackground};
+ fill: ${t.edgeLabelBackground};
+ }
+ text-align: center;
+ }
+
+ /* For html labels only */
+ .labelBkg {
+ background-color: ${E(t.edgeLabelBackground,.5)};
+ // background-color:
+ }
+
+ .cluster rect {
+ fill: ${t.clusterBkg};
+ stroke: ${t.clusterBorder};
+ stroke-width: 1px;
+ }
+
+ .cluster text {
+ fill: ${t.titleColor};
+ }
+
+ .cluster span {
+ color: ${t.titleColor};
+ }
+ /* .cluster div {
+ color: ${t.titleColor};
+ } */
+
+ div.mermaidTooltip {
+ position: absolute;
+ text-align: center;
+ max-width: 200px;
+ padding: 2px;
+ font-family: ${t.fontFamily};
+ font-size: 12px;
+ background: ${t.tertiaryColor};
+ border: 1px solid ${t.border2};
+ border-radius: 2px;
+ pointer-events: none;
+ z-index: 100;
+ }
+
+ .flowchartTitleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.textColor};
+ }
+
+ rect.text {
+ fill: none;
+ stroke-width: 0;
+ }
+
+ .icon-shape, .image-shape {
+ background-color: ${t.edgeLabelBackground};
+ p {
+ background-color: ${t.edgeLabelBackground};
+ padding: 2px;
+ }
+ .label rect {
+ opacity: 0.5;
+ background-color: ${t.edgeLabelBackground};
+ fill: ${t.edgeLabelBackground};
+ }
+ text-align: center;
+ }
+ ${(0,i.o)()}
+`,"getStyles"),C=(0,p.K)(({defaultLayout:t,styles:e=D}={})=>({parser:x,get db(){return new k},renderer:f,styles:e,init:(0,p.K)(e=>{e.flowchart||(e.flowchart={});let s=(0,h.TM)().layout??t??e.layout;s&&(0,h.XV)({layout:s}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,h.XV)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}})},"init")}),"createFlowDiagram"),T=C()},51355(t,e,s){s.d(e,{P:()=>n});var i=s(30740),r=s(92371),a=s(88053),n=(0,a.K)((t,e,s,a)=>{t.attr("class",s);let{ [...]
\ No newline at end of file
diff --git a/assets/js/8ccf8dfc.f3c67c06.js b/assets/js/8ccf8dfc.f3c67c06.js
new file mode 100644
index 00000000..3d48c841
--- /dev/null
+++ b/assets/js/8ccf8dfc.f3c67c06.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9263"],{87939(e,n,s){s.r(n),s.d(n,{metadata:()=>a,default:()=>h,frontMatter:()=>l,contentTitle:()=>d,toc:()=>o,assets:()=>r});var a=JSON.parse('{"id":"sheet/read/simple","title":"Simple","description":"\x3c!--","source":"@site/docs/sheet/read/simple.md","sourceDirName":"sheet/read","slug":"/sheet/read/simple","permalink":"/docs/sheet/read/simple","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/8ff8400d.c5b455f3.js b/assets/js/8ff8400d.c5b455f3.js
new file mode 100644
index 00000000..af40ad17
--- /dev/null
+++ b/assets/js/8ff8400d.c5b455f3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9356"],{52683(e){e.exports=JSON.parse('{"tag":{"label":"CVE-2026-49328","permalink":"/blog/tags/cve-2026-49328","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/cve-2026-49328","page":1,"postsPerPage":15,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/903f555a.2e2bb632.js b/assets/js/903f555a.2e2bb632.js
new file mode 100644
index 00000000..96f0565a
--- /dev/null
+++ b/assets/js/903f555a.2e2bb632.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4240"],{56792(e,t,n){n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var o=n(64098),s=n(91987),a=n(67008);let r={title:"Way to Go: Fesod successfully entered Apache Incubator",description:"Fesod successfully entered Apache Incubator.",tags:["announcement"]},c,i={authorsImageUrls:[]},u=[];function l(e){let t={a:"a",p:"p",...(0,a.R)(),...e.components};return [...]
\ No newline at end of file
diff --git a/assets/js/908b89db.f31148de.js b/assets/js/908b89db.f31148de.js
new file mode 100644
index 00000000..f631c757
--- /dev/null
+++ b/assets/js/908b89db.f31148de.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9322"],{78395(e,n,d){d.r(n),d.d(n,{metadata:()=>t,default:()=>c,frontMatter:()=>a,contentTitle:()=>r,toc:()=>h,assets:()=>l});var t=JSON.parse('{"id":"sheet/read/sheet","title":"Sheet","description":"\x3c!--","source":"@site/docs/sheet/read/sheet.md","sourceDirName":"sheet/read","slug":"/sheet/read/sheet","permalink":"/docs/sheet/read/sheet","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fes [...]
\ No newline at end of file
diff --git a/assets/js/9247.9eca23a2.js b/assets/js/9247.9eca23a2.js
new file mode 100644
index 00000000..294ae89d
--- /dev/null
+++ b/assets/js/9247.9eca23a2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9247"],{3938(e,s,a){a.d(s,{createWardleyServices:()=>c.J});var c=a(67221);a(29044)}}]);
\ No newline at end of file
diff --git a/assets/js/9475.fdff35d7.js b/assets/js/9475.fdff35d7.js
new file mode 100644
index 00000000..1081f262
--- /dev/null
+++ b/assets/js/9475.fdff35d7.js
@@ -0,0 +1,62 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9475"],{83492(t,e,a){function n(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>n}),(0,a(88053).K)(n,"populateCommonDb")},65742(t,e,a){a.d(e,{diagram:()=>B});var n=a(83492),r=a(34969),i=a(94812),o=a(30740),l=a(92371),c=a(88053),s=a(99183),d=(0,c.K)(()=>({domains:new Map,transitions:[]}),"createDefaultData"),f=d(),p=(0,c [...]
+ .cynefinDomain {
+ stroke: none;
+ }
+ .cynefinDomainLabel {
+ font-size: ${t.domainFontSize}px;
+ font-weight: bold;
+ fill: ${t.labelColor};
+ }
+ .cynefinSubtitle {
+ font-size: ${t.itemFontSize-1}px;
+ fill: ${t.textColor};
+ font-style: italic;
+ }
+ .cynefinItem {
+ fill-opacity: 0.95;
+ stroke: ${t.boundaryColor};
+ stroke-width: 1;
+ }
+ .cynefinItemText {
+ font-size: ${t.itemFontSize}px;
+ fill: ${t.textColor};
+ }
+ .cynefinItemOverflow {
+ fill-opacity: 0.6;
+ stroke: ${t.boundaryColor};
+ stroke-width: 1;
+ stroke-dasharray: 3 2;
+ }
+ .cynefinBoundary {
+ stroke: ${t.boundaryColor};
+ stroke-width: ${t.boundaryWidth};
+ stroke-dasharray: 6 3;
+ }
+ .cynefinCliff {
+ stroke: ${t.cliffColor};
+ stroke-width: ${t.cliffWidth};
+ }
+ .cynefinConfusion {
+ stroke: ${t.boundaryColor};
+ stroke-width: 1.5;
+ stroke-dasharray: 4 2;
+ }
+ .cynefinArrowLine {
+ stroke: ${t.arrowColor};
+ stroke-width: ${t.arrowWidth};
+ fill: none;
+ }
+ .cynefinArrowHead {
+ fill: ${t.arrowColor};
+ stroke: none;
+ }
+ .cynefinArrowLabel {
+ font-size: ${t.itemFontSize-1}px;
+ fill: ${t.textColor};
+ }
+ .cynefinTitle {
+ font-size: ${t.domainFontSize+2}px;
+ font-weight: bold;
+ fill: ${t.labelColor};
+ }
+ `},"styles")}}}]);
\ No newline at end of file
diff --git a/assets/js/9500.cbf0d6f8.js b/assets/js/9500.cbf0d6f8.js
new file mode 100644
index 00000000..838656f5
--- /dev/null
+++ b/assets/js/9500.cbf0d6f8.js
@@ -0,0 +1,8 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9500"],{1591(e,t,s){s.d(t,{diagram:()=>l});var r=s(65529);s(45644),s(59673),s(51355),s(60368),s(1033),s(94247),s(69976),s(33),s(22679),s(735),s(56170),s(13071),s(21976),s(94812),s(30740),s(92371);var a=(0,s(88053).K)(e=>`${(0,r.tM)(e)}
+ .swimlane.cluster rect {
+ stroke: ${e.clusterBorder} !important;
+ }
+ [data-look="neo"].cluster rect {
+ filter: none;
+ }
+`,"getStyles"),l=(0,r.ur)({defaultLayout:"swimlane",styles:a})}}]);
\ No newline at end of file
diff --git a/assets/js/9608.0bae41be.js b/assets/js/9608.0bae41be.js
new file mode 100644
index 00000000..09b2953d
--- /dev/null
+++ b/assets/js/9608.0bae41be.js
@@ -0,0 +1,93 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9608"],{45644(t,e,i){i.d(e,{o:()=>n});var n=(0,i(88053).K)(()=>`
+ /* Font Awesome icon styling - consolidated */
+ .label-icon {
+ display: inline-block;
+ height: 1em;
+ overflow: visible;
+ vertical-align: -0.125em;
+ }
+
+ .node .label-icon path {
+ fill: currentColor;
+ stroke: revert;
+ stroke-width: revert;
+ }
+`,"getIconStyles")},86779(t,e,i){i.d(e,{diagram:()=>K});var n=i(34969),s=i(45644),r=i(60368),o=i(33);i(22679),i(56170),i(13071),i(21976),i(94812);var a=i(30740),l=i(92371),c=i(88053),h=i(22582),u=i(58480),g=i(81896),d=function(){var t=(0,c.K)(function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},"o"),e=[1,4],i=[1,13],n=[1,12],s=[1,15],r=[1,16],o=[1,20],a=[1,19],l=[6,7,8],h=[1,26],u=[1,24],g=[1,25],d=[6,7,11],p=[1,31],y=[6,7,11,24],f=[1,6,13,16,17,20,23],m=[1,35],b=[1,36],k=[1 [...]
+ .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {
+ fill: ${i(t["cScale"+n],10)};
+ stroke: ${i(t["cScale"+n],10)};
+
+ }
+ .section-${n-1} text {
+ fill: ${t["cScaleLabel"+n]};
+ }
+ .node-icon-${n-1} {
+ font-size: 40px;
+ color: ${t["cScaleLabel"+n]};
+ }
+ .section-edge-${n-1}{
+ stroke: ${t["cScale"+n]};
+ }
+ .edge-depth-${n-1}{
+ stroke-width: ${s};
+ }
+ .section-${n-1} line {
+ stroke: ${t["cScaleInv"+n]} ;
+ stroke-width: 3;
+ }
+
+ .disabled, .disabled circle, .disabled text {
+ fill: lightgray;
+ }
+ .disabled text {
+ fill: #efefef;
+ }
+
+ .node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon,
+ .node path {
+ fill: ${t.background};
+ stroke: ${t.nodeBorder};
+ stroke-width: 1px;
+ }
+
+ .kanban-ticket-link {
+ fill: ${t.background};
+ stroke: ${t.nodeBorder};
+ text-decoration: underline;
+ }
+ `}return e},"genSections"),K={db:{clear:b,addNode:S,getSections:_,getData:E,nodeType:N,getType:x,setElementForId:D,decorateNode:L,type2Str:I,getLogger:v,getElementById:C},renderer:{draw:O},parser:d,styles:(0,c.K)(t=>`
+ .edge {
+ stroke-width: 3;
+ }
+ ${A(t)}
+ .section-root rect, .section-root path, .section-root circle, .section-root polygon {
+ fill: ${t.git0};
+ }
+ .section-root text {
+ fill: ${t.gitBranchLabel0};
+ }
+ .icon-container {
+ height:100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+ .edge {
+ fill: none;
+ }
+ .cluster-label, .label {
+ color: ${t.textColor};
+ fill: ${t.textColor};
+ }
+ .kanban-label {
+ dy: 1em;
+ alignment-baseline: middle;
+ text-anchor: middle;
+ dominant-baseline: middle;
+ text-align: center;
+ }
+ ${(0,s.o)()}
+`,"getStyles")}}}]);
\ No newline at end of file
diff --git a/assets/js/979.6b356cf0.js b/assets/js/979.6b356cf0.js
new file mode 100644
index 00000000..19a418e5
--- /dev/null
+++ b/assets/js/979.6b356cf0.js
@@ -0,0 +1,141 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["979"],{80124(t,e,r){r.d(e,{A:()=>s});var a=r(70761),i=r(27868);let s=(t,e)=>a.A.lang.round(i.A.parse(t)[e])},71598(t,e,r){r.d(e,{diagram:()=>ex});var a=r(45644),i=r(735),s=r(56170),n=r(13071);r(21976);var l=r(94812),o=r(30740),c=r(92371),d=r(88053),h=r(44091),g=r(37904),u=r(66307),y=r(57838);function p(t,e){for(let r in e)Object.hasOwn(e,r)&&(t[r]=e[r])}var x=r(80124),b=r(30941),f=r(35123),w=r(62399),m=function( [...]
+ font-family: ${t.fontFamily};
+ color: ${t.nodeTextColor||t.textColor};
+ }
+ .cluster-label text {
+ fill: ${t.titleColor};
+ }
+ .cluster-label span,p {
+ color: ${t.titleColor};
+ }
+
+
+
+ .label text,span,p {
+ fill: ${t.nodeTextColor||t.textColor};
+ color: ${t.nodeTextColor||t.textColor};
+ }
+
+ .node rect,
+ .node circle,
+ .node ellipse,
+ .node polygon,
+ .node path {
+ fill: ${t.mainBkg};
+ stroke: ${t.nodeBorder};
+ stroke-width: 1px;
+ }
+ .flowchart-label text {
+ text-anchor: middle;
+ }
+ // .flowchart-label .text-outer-tspan {
+ // text-anchor: middle;
+ // }
+ // .flowchart-label .text-inner-tspan {
+ // text-anchor: start;
+ // }
+
+ .node .label {
+ text-align: center;
+ }
+ .node.clickable {
+ cursor: pointer;
+ }
+
+ .arrowheadPath {
+ fill: ${t.arrowheadColor};
+ }
+
+ .edgePath .path {
+ stroke: ${t.lineColor};
+ stroke-width: 2.0px;
+ }
+
+ .flowchart-link {
+ stroke: ${t.lineColor};
+ fill: none;
+ }
+
+ .edgeLabel {
+ background-color: ${t.edgeLabelBackground};
+ /*
+ * This is for backward compatibility with existing code that didn't
+ * add a \`<p>\` around edge labels.
+ *
+ * TODO: We should probably remove this in a future release.
+ */
+ p {
+ margin: 0;
+ padding: 0;
+ display: inline;
+ }
+ rect {
+ opacity: 0.5;
+ background-color: ${t.edgeLabelBackground};
+ fill: ${t.edgeLabelBackground};
+ }
+ text-align: center;
+ }
+
+ /* For html labels only */
+ .labelBkg {
+ background-color: ${t.edgeLabelBackground};
+ }
+
+ .node .cluster {
+ // fill: ${tr(t.mainBkg,.5)};
+ fill: ${tr(t.clusterBkg,.5)};
+ stroke: ${tr(t.clusterBorder,.2)};
+ box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
+ stroke-width: 1px;
+ }
+
+ .cluster text {
+ fill: ${t.titleColor};
+ }
+
+ .cluster span,p {
+ color: ${t.titleColor};
+ }
+ /* .cluster div {
+ color: ${t.titleColor};
+ } */
+
+ div.mermaidTooltip {
+ position: absolute;
+ text-align: center;
+ max-width: 200px;
+ padding: 2px;
+ font-family: ${t.fontFamily};
+ font-size: 12px;
+ background: ${t.tertiaryColor};
+ border: 1px solid ${t.border2};
+ border-radius: 2px;
+ pointer-events: none;
+ z-index: 100;
+ }
+
+ .flowchartTitleText {
+ text-anchor: middle;
+ font-size: 18px;
+ fill: ${t.textColor};
+ }
+ ${(0,a.o)()}
+`,"getStyles"),ti=(0,d.K)((t,e,r,a)=>{e.forEach(e=>{tg[e](t,r,a)})},"insertMarkers"),ts=(0,d.K)((t,e,r)=>{c.R.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extens [...]
+ outsidePoint: ${JSON.stringify(e)}
+ insidePoint : ${JSON.stringify(r)}
+ node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let a=t.x,i=t.y,s=Math.abs(a-r.x),n=t.width/2,l=r.x<e.x?n-s:n+s,o=t.height/2,d=Math.abs(e.y-r.y),h=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*n>Math.abs(a-e.x)*o){let t=r.y<e.y?e.y-o-i:i-o-e.y;l=h*t/d;let a={x:r.x<e.x?r.x+l:r.x-h+l,y:r.y<e.y?r.y+d-t:r.y-d+t};return 0===l&&(a.x=e.x,a.y=e.y),0===h&&(a.x=e.x),0===d&&(a.y=e.y),c.R.debug(`abc89 topp/bott calc, Q ${d}, q ${t}, R ${h}, r ${l}`,a),a}{let t=d*(l=r.x<e.x?e.x-n-a:a-n-e.x)/h,i [...]
+ /* Font Awesome icon styling - consolidated */
+ .label-icon {
+ display: inline-block;
+ height: 1em;
+ overflow: visible;
+ vertical-align: -0.125em;
+ }
+
+ .node .label-icon path {
+ fill: currentColor;
+ stroke: revert;
+ stroke-width: revert;
+ }
+`,"getIconStyles")}}]);
\ No newline at end of file
diff --git a/assets/js/98b2b410.e9815a9a.js b/assets/js/98b2b410.e9815a9a.js
new file mode 100644
index 00000000..73c39018
--- /dev/null
+++ b/assets/js/98b2b410.e9815a9a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8750"],{9514(e,t,n){n.r(t),n.d(t,{metadata:()=>r,default:()=>v,frontMatter:()=>s,contentTitle:()=>i,toc:()=>c,assets:()=>l});var r=JSON.parse('{"id":"sheet/read/converter","title":"Converter","description":"\x3c!--","source":"@site/docs/sheet/read/converter.md","sourceDirName":"sheet/read","slug":"/sheet/read/converter","permalink":"/docs/sheet/read/converter","draft":false,"unlisted":false,"editUrl":"https://gi [...]
\ No newline at end of file
diff --git a/assets/js/98b33ad6.c6f16b74.js b/assets/js/98b33ad6.c6f16b74.js
new file mode 100644
index 00000000..f27e6688
--- /dev/null
+++ b/assets/js/98b33ad6.c6f16b74.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1720"],{82887(e,n,T){T.r(n),T.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>R,frontMatter:()=>d,metadata:()=>a,toc:()=>r});var a=T(36656),t=T(91987),l=T(67008);let d={title:"Welcome Apache Fesod's New Committer",description:"Welcome Apache Fesod's New Committer",authors:["GOODBOY008"],tags:["opensource","apache","committer","fesod"]},i,o={authorsImageUrls:[void 0]},r=[{value:"Self-Introduction",id:"self-intro [...]
\ No newline at end of file
diff --git a/assets/js/9b316f1b.e59cb9b7.js b/assets/js/9b316f1b.e59cb9b7.js
new file mode 100644
index 00000000..643997f9
--- /dev/null
+++ b/assets/js/9b316f1b.e59cb9b7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9344"],{41313(e,s,l){l.r(s),l.d(s,{metadata:()=>t,default:()=>x,frontMatter:()=>d,contentTitle:()=>n,toc:()=>c,assets:()=>a});var t=JSON.parse('{"id":"sheet/write/sheet","title":"Sheet","description":"\x3c!--","source":"@site/docs/sheet/write/sheet.md","sourceDirName":"sheet/write","slug":"/sheet/write/sheet","permalink":"/docs/sheet/write/sheet","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/9d86e7fa.9d9199f8.js b/assets/js/9d86e7fa.9d9199f8.js
new file mode 100644
index 00000000..b9b7d18d
--- /dev/null
+++ b/assets/js/9d86e7fa.9d9199f8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3114"],{11136(e){e.exports=JSON.parse('{"tag":{"label":"announcement","permalink":"/blog/tags/announcement","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/announcement","page":1,"postsPerPage":15,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/9e4087bc.14f52c79.js b/assets/js/9e4087bc.14f52c79.js
new file mode 100644
index 00000000..f3425694
--- /dev/null
+++ b/assets/js/9e4087bc.14f52c79.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9660"],{94856(e,t,a){a.r(t),a.d(t,{default:()=>m});var r=a(91987);a(71763);var i=a(20666),s=a(66783),n=a(26221),l=a(50227),c=a(82893),d=a(52003);function h({year:e,posts:t}){let a=(0,l.i)({day:"numeric",month:"long",timeZone:"UTC"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.A,{as:"h3",id:e,children:e}),(0,r.jsx)("ul",{children:t.map(e=>{let t;return(0,r.jsx)("li",{children:(0,r.jsxs)(i.A,{to:e.metadata. [...]
\ No newline at end of file
diff --git a/assets/js/a0cc137d.e7adb6b1.js b/assets/js/a0cc137d.e7adb6b1.js
new file mode 100644
index 00000000..092a5a2d
--- /dev/null
+++ b/assets/js/a0cc137d.e7adb6b1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2796"],{58652(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var o=t(64098),i=t(91987),s=t(67008);let a={title:"Way to Go: Fesod successfully entered Apache Incubator",description:"Fesod successfully entered Apache Incubator.",tags:["announcement"]},r,c={authorsImageUrls:[]},d=[{value:"Introduction",id:"introduction",level:2},{value:"Features",id:" [...]
\ No newline at end of file
diff --git a/assets/js/a2915123.08e49acb.js b/assets/js/a2915123.08e49acb.js
new file mode 100644
index 00000000..df7b993c
--- /dev/null
+++ b/assets/js/a2915123.08e49acb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1928"],{62751(e,t,n){n.r(t),n.d(t,{metadata:()=>s,default:()=>c,frontMatter:()=>d,contentTitle:()=>o,toc:()=>l,assets:()=>i});var s=JSON.parse('{"id":"sheet/read/num-rows","title":"Rows","description":"\x3c!--","source":"@site/docs/sheet/read/num-rows.md","sourceDirName":"sheet/read","slug":"/sheet/read/num-rows","permalink":"/docs/sheet/read/num-rows","draft":false,"unlisted":false,"editUrl":"https://github.com [...]
\ No newline at end of file
diff --git a/assets/js/a3e235df.21a8b41e.js b/assets/js/a3e235df.21a8b41e.js
new file mode 100644
index 00000000..5265e6e4
--- /dev/null
+++ b/assets/js/a3e235df.21a8b41e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1417"],{54066(e,n,t){t.r(n),t.d(n,{metadata:()=>d,default:()=>a,frontMatter:()=>l,contentTitle:()=>i,toc:()=>h,assets:()=>o});var d=JSON.parse('{"id":"sheet/help/annotation","title":"Annotation","description":"\x3c!--","source":"@site/docs/sheet/help/annotation.md","sourceDirName":"sheet/help","slug":"/sheet/help/annotation","permalink":"/docs/sheet/help/annotation","draft":false,"unlisted":false,"editUrl":"http [...]
\ No newline at end of file
diff --git a/assets/js/a468a806.6870bf57.js b/assets/js/a468a806.6870bf57.js
new file mode 100644
index 00000000..1f0a897d
--- /dev/null
+++ b/assets/js/a468a806.6870bf57.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8264"],{38244(e,t,n){n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var r=n(3124),i=n(91987),o=n(67008);let a={title:"CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF",description:"Security advisory for CVE-2026-49328.",tags:["announcement","security","CVE-2026-49328"]},s,c={authorsImageUrls:[]},l=[];fu [...]
\ No newline at end of file
diff --git a/assets/js/a4b4544e.9ef558e8.js b/assets/js/a4b4544e.9ef558e8.js
new file mode 100644
index 00000000..06ddb69b
--- /dev/null
+++ b/assets/js/a4b4544e.9ef558e8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7701"],{19777(e,n,i){i.r(n),i.d(n,{metadata:()=>t,default:()=>a,frontMatter:()=>s,contentTitle:()=>c,toc:()=>d,assets:()=>l});var t=JSON.parse('{"id":"contribution","title":"Contributor Guide","description":"\x3c!--","source":"@site/community/contribution.md","sourceDirName":".","slug":"/contribution","permalink":"/community/contribution","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/ [...]
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.2ce66791.js b/assets/js/a6aa9e1f.2ce66791.js
new file mode 100644
index 00000000..b94854d2
--- /dev/null
+++ b/assets/js/a6aa9e1f.2ce66791.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7496"],{68068(e,t,r){r.r(t),r.d(t,{default:()=>p});var n=r(91987);r(71763);var a=r(13526),s=r(59326),i=r(26221),l=r(79218),o=r(63131),c=r(90982),d=r(96522),u=r(15691),m=r(3424),g=r(29204);function h(e){let t=(0,g.kJ)(e);return(0,n.jsx)(m.A,{children:(0,n.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function x(e){let{metadata:t}=e,{siteConfig:{title:r}}=(0,s.A)(),{blogDescription:a,blo [...]
\ No newline at end of file
diff --git a/assets/js/a7456010.955429ca.js b/assets/js/a7456010.955429ca.js
new file mode 100644
index 00000000..18bf62e5
--- /dev/null
+++ b/assets/js/a7456010.955429ca.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3056"],{88552(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a7bd4aaa.4e78779a.js b/assets/js/a7bd4aaa.4e78779a.js
new file mode 100644
index 00000000..addfd153
--- /dev/null
+++ b/assets/js/a7bd4aaa.4e78779a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5575"],{84697(e,n,s){s.r(n),s.d(n,{default:()=>u});var r=s(91987);s(71763);var t=s(26221),i=s(19277),o=s(36345),a=s(96522);function c(e){var n,s;let{version:i}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.A,{version:i.version,tag:(n=i.pluginId,s=i.version,`docs-${n}-${s}`)}),(0,r.jsx)(t.be,{children:i.noIndex&&(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(e){let{version:n, [...]
\ No newline at end of file
diff --git a/assets/js/a8dd066c.40602be1.js b/assets/js/a8dd066c.40602be1.js
new file mode 100644
index 00000000..125f79b1
--- /dev/null
+++ b/assets/js/a8dd066c.40602be1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6576"],{4604(e,s,l){l.r(s),l.d(s,{metadata:()=>n,default:()=>h,frontMatter:()=>t,contentTitle:()=>r,toc:()=>a,assets:()=>c});var n=JSON.parse('{"id":"sheet/write/pojo","title":"POJO","description":"\x3c!--","source":"@site/docs/sheet/write/pojo.md","sourceDirName":"sheet/write","slug":"/sheet/write/pojo","permalink":"/docs/sheet/write/pojo","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/feso [...]
\ No newline at end of file
diff --git a/assets/js/a94703ab.8152de4b.js b/assets/js/a94703ab.8152de4b.js
new file mode 100644
index 00000000..0cfc9c15
--- /dev/null
+++ b/assets/js/a94703ab.8152de4b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6785"],{65708(e,t,n){n.r(t),n.d(t,{default:()=>ea});var a=n(91987),i=n(71763),r=n(13526),s=n(26221),l=n(79218),o=n(38864),d=n(52125),c=n(66783),u=n(2737),m=n(33183);function b(){let{shown:e,scrollToTop:t}=function({threshold:e}){let[t,n]=(0,i.useState)(!1),a=(0,i.useRef)(!1),{startScroll:r,cancelScroll:s}=(0,u.gk)();return(0,u.Mq)(({scrollY:t},i)=>{let r=i?.scrollY;r&&(a.current?a.current=!1:t>=r?(s(),n(!1)):t<e [...]
\ No newline at end of file
diff --git a/assets/js/a9f50754.38c07dbf.js b/assets/js/a9f50754.38c07dbf.js
new file mode 100644
index 00000000..e26d070e
--- /dev/null
+++ b/assets/js/a9f50754.38c07dbf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6755"],{96835(t){t.exports=JSON.parse('{"tag":{"label":"committer","permalink":"/blog/tags/committer","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/committer","page":1,"postsPerPage":15,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/aba21aa0.377ad74b.js b/assets/js/aba21aa0.377ad74b.js
new file mode 100644
index 00000000..49a55c38
--- /dev/null
+++ b/assets/js/aba21aa0.377ad74b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3747"],{27093(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/abce2868.046e4693.js b/assets/js/abce2868.046e4693.js
new file mode 100644
index 00000000..a971f026
--- /dev/null
+++ b/assets/js/abce2868.046e4693.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3831"],{89717(e,s,l){l.r(s),l.d(s,{metadata:()=>d,default:()=>x,frontMatter:()=>n,contentTitle:()=>c,toc:()=>t,assets:()=>i});var d=JSON.parse('{"id":"sheet/write/head","title":"Head","description":"\x3c!--","source":"@site/docs/sheet/write/head.md","sourceDirName":"sheet/write","slug":"/sheet/write/head","permalink":"/docs/sheet/write/head","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fes [...]
\ No newline at end of file
diff --git a/assets/js/acecf23e.d61e7861.js b/assets/js/acecf23e.d61e7861.js
new file mode 100644
index 00000000..58e9f454
--- /dev/null
+++ b/assets/js/acecf23e.d61e7861.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3220"],{1912(e){e.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]);
\ No newline at end of file
diff --git a/assets/js/ae338ae9.65b84fb6.js b/assets/js/ae338ae9.65b84fb6.js
new file mode 100644
index 00000000..586d8dcc
--- /dev/null
+++ b/assets/js/ae338ae9.65b84fb6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["257"],{74380(e,n,t){t.r(n),t.d(n,{metadata:()=>s,default:()=>h,frontMatter:()=>a,contentTitle:()=>l,toc:()=>o,assets:()=>d});var s=JSON.parse('{"id":"sheet/help/core-class","title":"Core Class","description":"\x3c!--","source":"@site/docs/sheet/help/core-class.md","sourceDirName":"sheet/help","slug":"/sheet/help/core-class","permalink":"/docs/sheet/help/core-class","draft":false,"unlisted":false,"editUrl":"https [...]
\ No newline at end of file
diff --git a/assets/js/bfc739f4.30475fa6.js b/assets/js/bfc739f4.30475fa6.js
new file mode 100644
index 00000000..f28e6453
--- /dev/null
+++ b/assets/js/bfc739f4.30475fa6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["5200"],{45503(e){e.exports=JSON.parse('{"tag":{"label":"opensource","permalink":"/blog/tags/opensource","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/opensource","page":1,"postsPerPage":15,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/c15d9823.1039eb0d.js b/assets/js/c15d9823.1039eb0d.js
new file mode 100644
index 00000000..4179c96c
--- /dev/null
+++ b/assets/js/c15d9823.1039eb0d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6431"],{29328(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":15,"totalPages":1,"totalCount":6,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/c3aa4345.0c8e8137.js b/assets/js/c3aa4345.0c8e8137.js
new file mode 100644
index 00000000..f0353887
--- /dev/null
+++ b/assets/js/c3aa4345.0c8e8137.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6698"],{18005(e,n,i){i.r(n),i.d(n,{metadata:()=>t,default:()=>u,frontMatter:()=>s,contentTitle:()=>c,toc:()=>a,assets:()=>l});var t=JSON.parse('{"id":"contribution/contribute-doc","title":"Docs Contribution","description":"\x3c!--","source":"@site/community/contribution/contribute-doc.md","sourceDirName":"contribution","slug":"/contribution/contribute-doc","permalink":"/community/contribution/contribute-doc","dr [...]
\ No newline at end of file
diff --git a/assets/js/c4f5d8e4.2e47602b.js b/assets/js/c4f5d8e4.2e47602b.js
new file mode 100644
index 00000000..7cb7ca86
--- /dev/null
+++ b/assets/js/c4f5d8e4.2e47602b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4823"],{41601(e,a,t){t.d(a,{A:()=>R});var l,r,n,c,h,i,f,m,d,s,o,g,E,p,x,w,M=t(71763);function v(){return(v=Object.assign?Object.assign.bind():function(e){for(var a=1;a<arguments.length;a++){var t=arguments[a];for(var l in t)({}).hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e}).apply(null,arguments)}let R=({title:e,titleId:a,...t})=>M.createElement("svg",v({xmlns:"http://www.w3.org/2000/svg",width:1008.92,height: [...]
\ No newline at end of file
diff --git a/assets/js/c639369e.22e46e62.js b/assets/js/c639369e.22e46e62.js
new file mode 100644
index 00000000..0747c283
--- /dev/null
+++ b/assets/js/c639369e.22e46e62.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["4550"],{53747(e,t,a){a.r(t),a.d(t,{metadata:()=>n,default:()=>c,frontMatter:()=>r,contentTitle:()=>l,toc:()=>o,assets:()=>d});var n=JSON.parse('{"id":"quickstart/simple-example","title":"Simple example","description":"\x3c!--","source":"@site/docs/quickstart/example.md","sourceDirName":"quickstart","slug":"/quickstart/simple-example","permalink":"/docs/quickstart/simple-example","draft":false,"unlisted":false,"e [...]
\ No newline at end of file
diff --git a/assets/js/c72637f2.59f3e5d6.js b/assets/js/c72637f2.59f3e5d6.js
new file mode 100644
index 00000000..b05bbc66
--- /dev/null
+++ b/assets/js/c72637f2.59f3e5d6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1808"],{35704(e,t,n){n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var i=n(3124),s=n(91987),r=n(67008);let o={title:"CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF",description:"Security advisory for CVE-2026-49328.",tags:["announcement","security","CVE-2026-49328"]},a,c={authorsImageUrls:[]},d=[{val [...]
\ No newline at end of file
diff --git a/assets/js/c8d101a0.0f5d4d7c.js b/assets/js/c8d101a0.0f5d4d7c.js
new file mode 100644
index 00000000..e692bf85
--- /dev/null
+++ b/assets/js/c8d101a0.0f5d4d7c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2522"],{59251(e,n,r){r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var a=r(69888),t=r(91987),i=r(67008);let s={title:"Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite",description:"Migrate FastExcel 1.3 to Apache Fesod (Incubating) 2.0.1-incubating",authors:["bengbengbalabalabeng"],tags:["migration","fastexcel","feso [...]
\ No newline at end of file
diff --git a/assets/js/c9cac9d9.333a8a44.js b/assets/js/c9cac9d9.333a8a44.js
new file mode 100644
index 00000000..63db8c4e
--- /dev/null
+++ b/assets/js/c9cac9d9.333a8a44.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3947"],{10371(e){e.exports=JSON.parse('{"tag":{"label":"release","permalink":"/blog/tags/release","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":15,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/c9de33a5.9bebe484.js b/assets/js/c9de33a5.9bebe484.js
new file mode 100644
index 00000000..e3ff4015
--- /dev/null
+++ b/assets/js/c9de33a5.9bebe484.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["671"],{7739(e,t,i){i.r(t),i.d(t,{metadata:()=>n,default:()=>m,frontMatter:()=>r,contentTitle:()=>c,toc:()=>d,assets:()=>l});var n=JSON.parse('{"id":"contribution/commit-format","title":"Commit Format Specification","description":"\x3c!--","source":"@site/community/contribution/commit-format.md","sourceDirName":"contribution","slug":"/contribution/commit-format","permalink":"/community/contribution/commit-format" [...]
\ No newline at end of file
diff --git a/assets/js/ccc49370.a2fd741e.js b/assets/js/ccc49370.a2fd741e.js
new file mode 100644
index 00000000..975f3335
--- /dev/null
+++ b/assets/js/ccc49370.a2fd741e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6074"],{77152(e,t,n){n.d(t,{A:()=>k});var r=n(91987);n(71763);var i=n(13526),l=n(29204);function s({children:e,className:t}){return(0,r.jsx)("article",{className:t,children:e})}var a=n(20666);function o({className:e}){let{metadata:t,isBlogPostPage:n}=(0,l.e7)(),{permalink:s,title:c}=t;return(0,r.jsx)(n?"h1":"h2",{className:(0,i.A)("title_hiT9",e),children:n?c:(0,r.jsx)(a.A,{to:s,children:c})})}var c=n(66783),d=n [...]
\ No newline at end of file
diff --git a/assets/js/cfa642a3.9feab08a.js b/assets/js/cfa642a3.9feab08a.js
new file mode 100644
index 00000000..6dd1684f
--- /dev/null
+++ b/assets/js/cfa642a3.9feab08a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7660"],{97742(e,i,t){t.r(i),t.d(i,{metadata:()=>n,default:()=>m,frontMatter:()=>r,contentTitle:()=>a,toc:()=>l,assets:()=>c});var n=JSON.parse('{"id":"pmc/onboarding","title":"Onboarding","description":"\x3c!--","source":"@site/community/pmc/onboarding.md","sourceDirName":"pmc","slug":"/pmc/onboarding","permalink":"/community/pmc/onboarding","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fes [...]
\ No newline at end of file
diff --git a/assets/js/d2436a2b.8044d3c9.js b/assets/js/d2436a2b.8044d3c9.js
new file mode 100644
index 00000000..3d9b0c67
--- /dev/null
+++ b/assets/js/d2436a2b.8044d3c9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6"],{19112(e){e.exports=JSON.parse('{"version":{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","href":"/community/","label":"Join Community","docId":"index","unlisted":false},{"type":"link","href":"/community/maturity","label":"Maturity","docId":"maturity","unlisted" [...]
\ No newline at end of file
diff --git a/assets/js/d5273c26.d5850a58.js b/assets/js/d5273c26.d5850a58.js
new file mode 100644
index 00000000..2545da30
--- /dev/null
+++ b/assets/js/d5273c26.d5850a58.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9422"],{46733(M,N,D){D.r(N),D.d(N,{metadata:()=>I,default:()=>c,frontMatter:()=>T,contentTitle:()=>z,toc:()=>A,assets:()=>u});var I=JSON.parse('{"id":"brand","title":"Brand","description":"\x3c!--","source":"@site/community/brand.md","sourceDirName":".","slug":"/brand","permalink":"/community/brand","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/community/brand.md","t [...]
\ No newline at end of file
diff --git a/assets/js/d55aa8bb.224e76cb.js b/assets/js/d55aa8bb.224e76cb.js
new file mode 100644
index 00000000..213f82f2
--- /dev/null
+++ b/assets/js/d55aa8bb.224e76cb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3612"],{49885(e,n,r){r.r(n),r.d(n,{metadata:()=>d,default:()=>h,frontMatter:()=>s,contentTitle:()=>c,toc:()=>o,assets:()=>l});var d=JSON.parse('{"id":"migration/from-fastexcel","title":"From FastExcel","description":"Complete migration guide for transitioning from cn.idev FastExcel to Apache Fesod (Incubating)","source":"@site/docs/migration/from-fastexcel.md","sourceDirName":"migration","slug":"/migration/from- [...]
\ No newline at end of file
diff --git a/assets/js/d90696c9.aa49fa46.js b/assets/js/d90696c9.aa49fa46.js
new file mode 100644
index 00000000..609f327e
--- /dev/null
+++ b/assets/js/d90696c9.aa49fa46.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1706"],{4616(e,n,i){i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>l});var t=i(67933),s=i(91987),o=i(67008);let a={title:"Apache Fesod (Incubating) 2.0.1-incubating Officially Released",description:"The Apache Fesod community is pleased to announce the official release of Apache Fesod (Incubating) 2.0.1-incubating.",authors:["psxjoy"],tags:["announcement","re [...]
\ No newline at end of file
diff --git a/assets/js/db358d00.a3bb76d0.js b/assets/js/db358d00.a3bb76d0.js
new file mode 100644
index 00000000..5eafa732
--- /dev/null
+++ b/assets/js/db358d00.a3bb76d0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9082"],{70217(e,t,n){n.r(t),n.d(t,{metadata:()=>r,default:()=>h,frontMatter:()=>i,contentTitle:()=>a,toc:()=>c,assets:()=>d});var r=JSON.parse('{"id":"sheet/write/merge","title":"Merge","description":"\x3c!--","source":"@site/docs/sheet/write/merge.md","sourceDirName":"sheet/write","slug":"/sheet/write/merge","permalink":"/docs/sheet/write/merge","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/db72292f.6595767d.js b/assets/js/db72292f.6595767d.js
new file mode 100644
index 00000000..b2966bc8
--- /dev/null
+++ b/assets/js/db72292f.6595767d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1230"],{13018(e,t,n){n.r(t),n.d(t,{metadata:()=>r,default:()=>h,frontMatter:()=>s,contentTitle:()=>d,toc:()=>o,assets:()=>a});var r=JSON.parse('{"id":"sheet/read/format","title":"Format","description":"\x3c!--","source":"@site/docs/sheet/read/format.md","sourceDirName":"sheet/read","slug":"/sheet/read/format","permalink":"/docs/sheet/read/format","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/de3da009.cfb56a1e.js b/assets/js/de3da009.cfb56a1e.js
new file mode 100644
index 00000000..78ea883f
--- /dev/null
+++ b/assets/js/de3da009.cfb56a1e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1166"],{4793(e,t,i){i.r(t),i.d(t,{metadata:()=>n,default:()=>u,frontMatter:()=>s,contentTitle:()=>c,toc:()=>d,assets:()=>a});var n=JSON.parse('{"id":"contribution/code-review-guide","title":"Code Review Guidelines","description":"\x3c!--","source":"@site/community/contribution/code-review-guide.md","sourceDirName":"contribution","slug":"/contribution/code-review-guide","permalink":"/community/contribution/code-r [...]
\ No newline at end of file
diff --git a/assets/js/e0719818.50c8207c.js b/assets/js/e0719818.50c8207c.js
new file mode 100644
index 00000000..0f966ce8
--- /dev/null
+++ b/assets/js/e0719818.50c8207c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6245"],{68669(e){e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]);
\ No newline at end of file
diff --git a/assets/js/e1dda140.9b3e0229.js b/assets/js/e1dda140.9b3e0229.js
new file mode 100644
index 00000000..cb4c880e
--- /dev/null
+++ b/assets/js/e1dda140.9b3e0229.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2328"],{51405(e,t,n){n.r(t),n.d(t,{metadata:()=>r,default:()=>c,frontMatter:()=>o,contentTitle:()=>a,toc:()=>d,assets:()=>l});var r=JSON.parse('{"id":"sheet/write/spring","title":"Spring","description":"\x3c!--","source":"@site/docs/sheet/write/spring.md","sourceDirName":"sheet/write","slug":"/sheet/write/spring","permalink":"/docs/sheet/write/spring","draft":false,"unlisted":false,"editUrl":"https://github.com/ [...]
\ No newline at end of file
diff --git a/assets/js/e2f5eafd.b3e78229.js b/assets/js/e2f5eafd.b3e78229.js
new file mode 100644
index 00000000..056c1841
--- /dev/null
+++ b/assets/js/e2f5eafd.b3e78229.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["3950"],{79715(e,n,i){i.r(n),i.d(n,{metadata:()=>t,default:()=>h,frontMatter:()=>r,contentTitle:()=>o,toc:()=>l,assets:()=>d});var t=JSON.parse('{"id":"introduce","title":"Introduction","description":"\x3c!--","source":"@site/docs/introduce.md","sourceDirName":".","slug":"/","permalink":"/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/docs/introduce.md","tags":[ [...]
\ No newline at end of file
diff --git a/assets/js/ea334bcf.ae991c18.js b/assets/js/ea334bcf.ae991c18.js
new file mode 100644
index 00000000..664f606d
--- /dev/null
+++ b/assets/js/ea334bcf.ae991c18.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1487"],{51635(e,n,t){t.r(n),t.d(n,{metadata:()=>i,default:()=>x,frontMatter:()=>r,contentTitle:()=>c,toc:()=>d,assets:()=>s});var i=JSON.parse('{"id":"sheet/read/exception","title":"Exception","description":"\x3c!--","source":"@site/docs/sheet/read/exception.md","sourceDirName":"sheet/read","slug":"/sheet/read/exception","permalink":"/docs/sheet/read/exception","draft":false,"unlisted":false,"editUrl":"https://g [...]
\ No newline at end of file
diff --git a/assets/js/edc931f8.9b7cbd03.js b/assets/js/edc931f8.9b7cbd03.js
new file mode 100644
index 00000000..ec78b622
--- /dev/null
+++ b/assets/js/edc931f8.9b7cbd03.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["9059"],{63681(e,i,s){s.r(i),s.d(i,{metadata:()=>t,default:()=>h,frontMatter:()=>o,contentTitle:()=>r,toc:()=>c,assets:()=>a});var t=JSON.parse('{"id":"index","title":"Join Community","description":"\x3c!--","source":"@site/community/index.md","sourceDirName":".","slug":"/","permalink":"/community/","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/community/index.md","ta [...]
\ No newline at end of file
diff --git a/assets/js/ef8b811a.4acad354.js b/assets/js/ef8b811a.4acad354.js
new file mode 100644
index 00000000..bc4f96f8
--- /dev/null
+++ b/assets/js/ef8b811a.4acad354.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["8416"],{56600(A){A.exports=JSON.parse('{"authors":[{"name":"Dave Fisher","url":"https://github.com/dave2wave","socials":{"github":"https://github.com/dave2wave"},"imageURL":"data:image/png;base64,/9j/2wCEAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDIBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAGQAZAMBIgACEQEDEQH/xAGiAAABBQE [...]
\ No newline at end of file
diff --git a/assets/js/f81c1134.2e5c1ef5.js b/assets/js/f81c1134.2e5c1ef5.js
new file mode 100644
index 00000000..a7249866
--- /dev/null
+++ b/assets/js/f81c1134.2e5c1ef5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6607"],{77735(e){e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/2026/06/11/cve-2026-49328","metadata":{"permalink":"/blog/2026/06/11/cve-2026-49328","editUrl":"https://github.com/apache/fesod/edit/main/website/blog/2026-06-11-cve-2026-49328.md","source":"@site/blog/2026-06-11-cve-2026-49328.md","title":"CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF" [...]
\ No newline at end of file
diff --git a/assets/js/f9e23376.61c00978.js b/assets/js/f9e23376.61c00978.js
new file mode 100644
index 00000000..d7c39cad
--- /dev/null
+++ b/assets/js/f9e23376.61c00978.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["7377"],{69703(e,n,t){t.r(n),t.d(n,{metadata:()=>s,default:()=>o,frontMatter:()=>l,contentTitle:()=>r,toc:()=>d,assets:()=>c});var s=JSON.parse('{"id":"download","title":"Download","description":"\x3c!--","source":"@site/docs/download.md","sourceDirName":".","slug":"/download","permalink":"/docs/download","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fesod/edit/main/website/docs/download.md" [...]
\ No newline at end of file
diff --git a/assets/js/fae1940b.1622e20e.js b/assets/js/fae1940b.1622e20e.js
new file mode 100644
index 00000000..4599f331
--- /dev/null
+++ b/assets/js/fae1940b.1622e20e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["2268"],{74709(e,n,t){t.r(n),t.d(n,{metadata:()=>i,default:()=>u,frontMatter:()=>r,contentTitle:()=>c,toc:()=>l,assets:()=>a});var i=JSON.parse('{"id":"committer/become-committer","title":"Become A Committer","description":"\x3c!--","source":"@site/community/committer/become-committer.md","sourceDirName":"committer","slug":"/committer/become-committer","permalink":"/community/committer/become-committer","draft":f [...]
\ No newline at end of file
diff --git a/assets/js/fc8fba91.44f548a7.js b/assets/js/fc8fba91.44f548a7.js
new file mode 100644
index 00000000..3e921261
--- /dev/null
+++ b/assets/js/fc8fba91.44f548a7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["6941"],{244(e,s,t){t.r(s),t.d(s,{metadata:()=>r,default:()=>h,frontMatter:()=>i,contentTitle:()=>d,toc:()=>c,assets:()=>a});var r=JSON.parse('{"id":"sheet/advanced/password","title":"Password Protection","description":"\x3c!--","source":"@site/docs/sheet/advanced/password.md","sourceDirName":"sheet/advanced","slug":"/sheet/advanced/password","permalink":"/docs/sheet/advanced/password","draft":false,"unlisted":fa [...]
\ No newline at end of file
diff --git a/assets/js/fe9a19b4.b6351905.js b/assets/js/fe9a19b4.b6351905.js
new file mode 100644
index 00000000..24213f95
--- /dev/null
+++ b/assets/js/fe9a19b4.b6351905.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1228"],{91981(e,t,r){r.r(t),r.d(t,{metadata:()=>s,default:()=>h,frontMatter:()=>i,contentTitle:()=>a,toc:()=>c,assets:()=>d});var s=JSON.parse('{"id":"sheet/write/format","title":"Format","description":"\x3c!--","source":"@site/docs/sheet/write/format.md","sourceDirName":"sheet/write","slug":"/sheet/write/format","permalink":"/docs/sheet/write/format","draft":false,"unlisted":false,"editUrl":"https://github.com/ [...]
\ No newline at end of file
diff --git a/assets/js/ff3732e9.707cf21d.js b/assets/js/ff3732e9.707cf21d.js
new file mode 100644
index 00000000..04038af8
--- /dev/null
+++ b/assets/js/ff3732e9.707cf21d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1109"],{26244(e,l,t){t.r(l),t.d(l,{metadata:()=>n,default:()=>x,frontMatter:()=>i,contentTitle:()=>a,toc:()=>c,assets:()=>d});var n=JSON.parse('{"id":"sheet/write/style","title":"Style","description":"\x3c!--","source":"@site/docs/sheet/write/style.md","sourceDirName":"sheet/write","slug":"/sheet/write/style","permalink":"/docs/sheet/write/style","draft":false,"unlisted":false,"editUrl":"https://github.com/apach [...]
\ No newline at end of file
diff --git a/assets/js/main.79f22081.js b/assets/js/main.79f22081.js
new file mode 100644
index 00000000..c26a0097
--- /dev/null
+++ b/assets/js/main.79f22081.js
@@ -0,0 +1,38 @@
+(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([["1889"],{12060(e,t,n){"use strict";n.r(t)},93884(e,t,n){"use strict";n.r(t)},35856(e,t,n){"use strict";n.r(t)},65831(e,t,n){"use strict";n.r(t)},89883(e,t,n){"use strict";n.d(t,{mg:()=>Z,vd:()=>H});var r=n(71763),a=n(2736),o=n.n(a),i=n(34072),s=n.n(i),l=n(29597),c=n.n(l),u=n(62945),d=n.n(u);function f(){return(f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.h [...]
+document.addEventListener('DOMContentLoaded', function maybeInsertBanner() {
+ var shouldInsert = typeof window['docusaurus'] === 'undefined';
+ shouldInsert && insertBanner();
+});
+
+function insertBanner() {
+ var bannerContainer = document.createElement('div');
+ bannerContainer.id = '__docusaurus-base-url-issue-banner-container';
+ var bannerHtml = ${JSON.stringify(`
+<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">
+ <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>
+ <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>
+ <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>
+ <p>We suggest trying baseUrl = <span id="${z}" style="font-weight: bold; color: green;"></span></p>
+</div>
+`).replace(/</g,"\\<")};
+ bannerContainer.innerHTML = bannerHtml;
+ document.body.prepend(bannerContainer);
+ var suggestionContainer = document.getElementById('${z}');
+ var actualHomePagePath = window.location.pathname;
+ var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'
+ ? actualHomePagePath
+ : actualHomePagePath + '/';
+ suggestionContainer.textContent = suggestedBaseUrl;
+}
+`})})})}function B(){let{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,w.A)(),{pathname:n}=(0,f.zy)();return t&&n===e?(0,r.jsx)(M,{}):null}function $(){let{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,w.A)(),i=(0,k.Ay)(e),{htmlLang:s,direction:l}=o[a];return(0,r.jsxs)(v.A,{children:[(0,r.jsx)("html",{lang:s,dir:l}),(0,r.jsx)("title",{children:t}),(0,r.jsx)("meta",{property:"og:title",content:t}),(0,r.jsx)("meta",{name:"viewport",content:"width=dev [...]
+Available sidebar ids are:
+- ${t.map(e=>e[0]).join("\n- ")}`);return r[1]},[e,n])}function b(e,t){let n=g(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.docs),r=t.find(t=>t.id===e);if(!r){if(n.flatMap(e=>e.draftIds).includes(e))return null;throw Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map(e=>e.name).join(", ")}".
+Available doc ids are:
+- ${(0,l.sb)(t.map(e=>e.id)).join("\n- ")}`)}return r},[e,n])}function v({route:e}){let t=(0,a.zy)(),n=(0,u.r)(),r=e.routes,i=r.find(e=>(0,a.B6)(t.pathname,e));if(!i)return null;let s=i.sidebar,l=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.v)(r),sidebarName:s,sidebarItems:l}}},19277(e,t,n){"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(91987),a=n(71763),o=n(17995);let i=a.createContext(null);function s({children:e,version:t}){return(0,r.jsx)(i.Provider,{value:t,children:e})}function [...]
+Available version names:
+- ${n.map(e=>`${e.name}`).join("\n- ")}`);return{version:a,label:r?.label??a.label}};return Array.isArray(t)?t.map(e=>r(e,void 0)):Object.entries(t).map(([e,t])=>r(e,t))}}({docsPluginId:t,configs:i}),h=function({docsPluginId:e,versionItems:t}){return(0,eI.Vd)(e).map(e=>t.find(t=>t.version===e)).filter(e=>void 0!==e)[0]??t[0]}({docsPluginId:t,versionItems:p}),m=[...a,...p.map(function({version:e,label:t}){let n=eF(e,d);return{label:t,to:`${n.path}${l}${u}`,isActive:()=>e===d.activeVersion [...]
+Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:
+${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,r.jsx)(ez,{...e})},t))})}function eK({left:e,right:t}){return(0,r.jsxs)("div",{className:"navbar__inner",children:[(0,r.jsx)("div",{className:(0,o.A)(m.G.layout.navbar.containerLeft,"navbar__items"),children:e}),(0,r.jsx)("div",{className:(0,o.A)(m.G.layout.navbar.containerRight,"navbar__items navbar__items--right"),children:t})]})}function eY(){let e=(0,S.M)(),t=(0,y.p)().navbar.items,[n,a]=function(e){function t(e){return(e.position?? [...]
+Docusaurus storage APIs are not supposed to be called on the server-rendering process.
+Please only call storage APIs in effects and event handlers.`)}return{get:l,set:l,del:l,listen:l}}let c=function(e=a){if("u"<typeof window)throw Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(e){var t;return t=e,i||(console.warn(`Docusaurus browser storage is not available.
+Possible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.`,t),i=!0),null}}(t?.persistence);return null===c?s:{get:()=>{try{return c.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{let t=c.getItem(n);c.setItem(n,e),o({key:n,oldValue:t,newValue:e,storage:c})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{let e=c.getI [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.e5afd9cd.js b/assets/js/runtime~main.e5afd9cd.js
new file mode 100644
index 00000000..2f9511ff
--- /dev/null
+++ b/assets/js/runtime~main.e5afd9cd.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,f,d,b,t,r={},o={};function n(e){var a=o[e];if(void 0!==a)return a.exports;var c=o[e]={exports:{}};return r[e].call(c.exports,c,c.exports,n),c.exports}n.m=r,n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a:a}),a},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(c,f){if(1&f&&(c=this(c)),8&f||"object"==typeof c&&c&&(4&f&&c.__esModule||16&f&&"function"==typeof c.then))return c;var d=Object.create(null);n.r(d);var b= [...]
\ No newline at end of file
diff --git a/blog/2025/09/17/fesod-entered-apache-incubator/index.html b/blog/2025/09/17/fesod-entered-apache-incubator/index.html
new file mode 100644
index 00000000..d29b0f60
--- /dev/null
+++ b/blog/2025/09/17/fesod-entered-apache-incubator/index.html
@@ -0,0 +1,84 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Way to Go: Fesod successfully entered Apache Incubator | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>On September 17, 2025, Beijing time, <a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">Fesod</a> successfully passed the voting resolution
+of the Apache Foundation Incubator.
+According to the Apache Foundation <a href=https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f target=_blank rel="noopener noreferrer" class="">mailing list</a>, it
+was approved with 9 binding votes, with no abstentions or opposing
+votes, to accept Fesod into the Apache Incubator. This marked its official status as an incubation project under the
+<a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class="">Apache Software Foundation</a>, the world's largest open-source foundation. On September 25,
+2025, the Fesod repository was
+officially transferred to the Apache Software Foundation.</p>
+<!-- -->
+<p>Fesod was originally named FastExcel and was officially open-sourced on GitHub in October 2024. With continuous project
+maintenance and iteration by the community members, as well as the continuous growth of the community, now the Fesod
+project has officially been announced to join the Apache Incubator. This marks a new beginning for the Fesod project,
+indicating that open-source community collaboration will become more standardized and internationalized!</p>
+<p><img decoding=async loading=lazy alt=blog-20250917 src=/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png width=1207 height=1595 class=img_Q0Px /></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=introduction>Introduction<a href=#introduction class=hash-link aria-label="Direct link to Introduction" title="Direct link to Introduction" translate=no></a></h2>
+<p>Apache Fesod (Incubating) is a high-performance and memory-efficient Java library for reading and writing
+spreadsheet files, designed to simplify development and ensure reliability. The name fesod (pronounced <code>/ˈfɛsɒd/</code>), an
+acronym for "fast easy spreadsheet and other documents," expresses the project's origin, background, and vision.</p>
+<p>Apache Fesod (Incubating) can provide developers and enterprises with great freedom and flexibility. We plan to
+introduce more new features in the future to continually enhance user experience and tool usability. Apache Fesod (
+Incubating) is committed to being your best choice for handling spreadsheet files.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=features>Features<a href=#features class=hash-link aria-label="Direct link to Features" title="Direct link to Features" translate=no></a></h2>
+<ul>
+<li class=""><strong>High-performance Reading and Writing</strong>: Apache Fesod (Incubating) focuses on performance optimization, capable of
+efficiently handling large-scale spreadsheet data. Compared to some traditional spreadsheet processing libraries, it
+can
+significantly reduce memory consumption.</li>
+<li class=""><strong>Simplicity and Ease of Use</strong>: The library offers a simple and intuitive API, allowing developers to easily integrate
+it into projects, whether for simple spreadsheet operations or complex data processing.</li>
+<li class=""><strong>Stream Operations</strong>: Apache Fesod (Incubating) supports stream reading, minimizing the problem of loading large
+amounts of data at once. This design is especially important when dealing with hundreds of thousands or even millions
+of rows of data.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=current-development-status>Current Development Status<a href=#current-development-status class=hash-link aria-label="Direct link to Current Development Status" title="Direct link to Current Development Status" translate=no></a></h2>
+<p>The project was initiated by the original core maintainer in 2024, aiming to provide a more efficient Excel processing
+solution and ensure long-term sustainable maintenance. Since its open-source status, a small community has been
+initially established. The main repository has received a total of <strong>5.0K+</strong> stars on GitHub, has released community
+versions <strong>5</strong> times, and has <strong>20+</strong> contributors.
+We have received continuous widespread attention and support from the community, which is both a recognition of our past
+work and an expectation for our future development.</p>
+<p><img decoding=async loading=lazy alt=blog-20250917 src=/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png width=826 height=551 class=img_Q0Px /></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=why-join-the-apache-incubator>Why Join the Apache Incubator<a href=#why-join-the-apache-incubator class=hash-link aria-label="Direct link to Why Join the Apache Incubator" title="Direct link to Why Join the Apache Incubator" translate=no></a></h2>
+<p>Joining the Apache Incubator is mainly based on the following reasons:</p>
+<ul>
+<li class="">Under the guidance of the Apache Mature Open Source Foundation, the collaboration of open source projects and the
+operation of community governance will become more standardized.</li>
+<li class="">Build a more prosperous and diverse developer community. We hope to attract more outstanding developers from home and
+abroad to join, making the developer community more diverse.</li>
+<li class="">Expand the application scope and encourage its integration into more open source and commercial projects, promoting
+the development of new use cases and functions.</li>
+</ul>
+<p>Next, the community will be guided by the Apache incubator mentors to manage and operate the community in accordance
+with the concept of "Community over Code", and also ensure that every outstanding contributor can be recognized. At the
+level of open-source products, listen to user feedback, improve and optimize the product usage experience, and build
+connections with the open-source ecosystem.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=introduction-of-the-supervisor>Introduction of the Supervisor<a href=#introduction-of-the-supervisor class=hash-link aria-label="Direct link to Introduction of the Supervisor" title="Direct link to Introduction of the Supervisor" translate=no></a></h2>
+<ul>
+<li class="">tison(Champion)</li>
+<li class="">Dave Fisher</li>
+<li class="">PJ Fanning</li>
+<li class="">Huajie Wang</li>
+</ul>
+<p>Thank you all for your selfless assistance. You provided professional guidance in terms of compliance and process
+advancement. Special thanks to the project Champion, @tison. During the project's journey into the incubator, he/she led
+the entire process from the drafting stage of the proposal to discussions and ultimately to the initiation of voting,
+offering many valuable professional suggestions and guidance.</p>
+<p>We believe that with the guidance of all the mentors, the community will grow more healthily in the future.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=join-community>Join Community<a href=#join-community class=hash-link aria-label="Direct link to Join Community" title="Direct link to Join Community" translate=no></a></h2>
+<p><strong>Open Source</strong></p>
+<ul>
+<li class=""><a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+</ul>
+<p><strong>Website</strong></p>
+<ul>
+<li class=""><a href=https://fesod.apache.org/ target=_blank rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+</ul>
+<p><strong>Mailing Lists</strong></p>
+<ul>
+<li class=""><a href=mailto:dev@fesod.apache.org target=_blank rel="noopener noreferrer" class="">dev@fesod.apache.org</a></li>
+</ul></div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/blog/2025-09-17-fesod-entered- [...]
\ No newline at end of file
diff --git a/blog/2026/02/27/apache-fesod-2-0-1-incubating-released/index.html b/blog/2026/02/27/apache-fesod-2-0-1-incubating-released/index.html
new file mode 100644
index 00000000..0234169d
--- /dev/null
+++ b/blog/2026/02/27/apache-fesod-2-0-1-incubating-released/index.html
@@ -0,0 +1,79 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Apache Fesod (Incubating) 2.0.1-incubating Officially Released | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true pro [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=milestone-significance-the-first-official-asf-release>Milestone Significance: The First Official ASF Release<a href=#milestone-significance-the-first-official-asf-release class=hash-link aria-label="Direct link to Milestone Significance: The First Official ASF Release" title="Direct link to Milestone Significance: The First Official ASF Release" translate=no></a></h2>
+<p>As our "debut" in the incubator, version 2.0.1 represents a decisive step forward in embracing <strong>"The Apache Way"</strong>:</p>
+<ul>
+<li class=""><strong>Comprehensive Renaming & Compliance:</strong> We have completed the full transition from <code>FastExcel</code> to <code>Fesod</code> (including package names, class names, and documentation) to ensure the brand is fully protected under the ASF.</li>
+<li class=""><strong>Compliance Completion:</strong> We have introduced the <code>DISCLAIMER</code>, <code>NOTICE</code>, and <code>support</code> modules, and implemented automated License Header management via Spotless, fully aligning with ASF policies.</li>
+<li class=""><strong>Community Governance:</strong> All code merges and release processes were conducted through public discussion and voting on the mailing lists, reflecting the principles of openness and transparency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=key-highlights>Key Highlights<a href=#key-highlights class=hash-link aria-label="Direct link to Key Highlights" title="Direct link to Key Highlights" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=1-deep-architectural-refactoring>1. Deep Architectural Refactoring<a href=#1-deep-architectural-refactoring class=hash-link aria-label="Direct link to 1. Deep Architectural Refactoring" title="Direct link to 1. Deep Architectural Refactoring" translate=no></a></h3>
+<p>To support long-term sustainability, we have significantly optimized the project structure:</p>
+<ul>
+<li class=""><strong>Multi-module Architecture:</strong> Introduced a multi-module structure for clearer hierarchy and finer dependency management.</li>
+<li class=""><strong>Distribution Enhancement:</strong> Added the <code>fesod-distribution</code> module to standardize the description and building of distribution packages.</li>
+<li class=""><strong>JDK 25 Support:</strong> Keeping pace with the Java ecosystem, we have officially added compatibility and support for <strong>JDK 25</strong>.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=2-new-features>2. New Features<a href=#2-new-features class=hash-link aria-label="Direct link to 2. New Features" title="Direct link to 2. New Features" translate=no></a></h3>
+<p>This release introduces several practical features to enhance the flexibility of Excel processing:</p>
+<ul>
+<li class=""><strong>Enhanced Excel Processing:</strong> Added the <code>afterSheetDispose</code> lifecycle method in <code>SheetWriteHandler</code> and introduced a brand-new <strong>Header Merge Strategy</strong>.</li>
+<li class=""><strong>Legacy Format Compatibility:</strong> Gracefully handles very old Excel BIFF formats to prevent runtime crashes.</li>
+<li class=""><strong>Flexible Control:</strong> Added the <code>autoStrip</code> parameter and introduced validation for maximum Sheet name length in <code>Workbook</code> constants.</li>
+<li class=""><strong>Website Experience:</strong> Added local search functionality and Matomo analytics to the official documentation, with optimized display for mobile devices.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=3-stability--robustness>3. Stability & Robustness<a href=#3-stability--robustness class=hash-link aria-label="Direct link to 3. Stability & Robustness" title="Direct link to 3. Stability & Robustness" translate=no></a></h3>
+<p>We have invested heavily in quality assurance:</p>
+<ul>
+<li class=""><strong>Fuzz Testing:</strong> Added daily fuzz testing for Excel reading to proactively identify potential crashes when processing malformed files.</li>
+<li class=""><strong>Dependency Security:</strong> Upgraded core dependencies including Spring-core, Logback, Fastjson2, and POI (to 5.5.1) to resolve known vulnerabilities.</li>
+<li class=""><strong>CI/CD Optimization:</strong> Introduced Netlify preview deployments and automated workflows for closing stale issues, significantly improving community collaboration efficiency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=key-changes-at-a-glance>Key Changes at a Glance<a href=#key-changes-at-a-glance class=hash-link aria-label="Direct link to Key Changes at a Glance" title="Direct link to Key Changes at a Glance" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=features><strong>Features</strong><a href=#features class=hash-link aria-label="Direct link to features" title="Direct link to features" translate=no></a></h3>
+<ul>
+<li class="">Added <code>afterSheetDispose</code> method to <code>SheetWriteHandler</code>.</li>
+<li class="">Introduced Header Merge Strategy for Excel writing.</li>
+<li class="">Added GitHub Actions for Netlify preview deployments.</li>
+<li class="">Integrated <code>docusaurus-search-local</code> for official website search.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=bugfixes><strong>Bugfixes</strong><a href=#bugfixes class=hash-link aria-label="Direct link to bugfixes" title="Direct link to bugfixes" translate=no></a></h3>
+<ul>
+<li class="">Fixed NPE in the <code>WriteSheetWorkbookWriteHandler</code> class.</li>
+<li class="">Fixed broken links and incorrect code examples in the documentation.</li>
+<li class="">Updated import statements to use the shaded <code>cglib</code> package.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=refactoring><strong>Refactoring</strong><a href=#refactoring class=hash-link aria-label="Direct link to refactoring" title="Direct link to refactoring" translate=no></a></h3>
+<ul>
+<li class="">Renamed project to Fesod/FesodSheet and updated package structures to align with Apache naming conventions.</li>
+<li class="">Implemented Spotless for automated License Header management.</li>
+<li class="">Removed outdated and incorrect <code>@since</code> tags.</li>
+</ul>
+<blockquote>
+<p>For a detailed list of changes, please refer to the <a href=https://github.com/apache/fesod/releases/tag/2.0.1-incubating target=_blank rel="noopener noreferrer" class="">GitHub Release Notes</a>.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=acknowledgments>Acknowledgments<a href=#acknowledgments class=hash-link aria-label="Direct link to Acknowledgments" title="Direct link to Acknowledgments" translate=no></a></h2>
+<p>"Community Over Code" is the core philosophy of the Apache Software Foundation. We would like to thank all the developers, mentors, and community members who contributed to this release.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=new-contributors>New Contributors<a href=#new-contributors class=hash-link aria-label="Direct link to New Contributors" title="Direct link to New Contributors" translate=no></a></h3>
+<p>We would like to extend a warm welcome and a special thank you to the <strong>14 new members</strong> who made their first contribution in this release:</p>
+<blockquote>
+<p>@X-qinghai, @ngocnhan-tran1996, @YIminta, @jounghu, @wlgusqkr, @gaushon, @GOODBOY008, @ongdisheng, @harshasiddartha, @pjfanning, @liugddx, @hezhangjian, @bengbengbalabalabeng</p>
+</blockquote>
+<p>Special thanks to <strong>@delei, @psxjoy, @alaahong, @ongdisheng, @GOODBOY008</strong>, and everyone who submitted PRs and suggestions on GitHub. Your tireless efforts in renaming, compliance checking, CI optimization, and feature improvements have made Fesod's ASF debut a success.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=how-to-get-involved>How to Get Involved<a href=#how-to-get-involved class=hash-link aria-label="Direct link to How to Get Involved" title="Direct link to How to Get Involved" translate=no></a></h2>
+<p>You can download and experience the new Apache Fesod (Incubating) through the following channels:</p>
+<ul>
+<li class=""><strong>Official Website:</strong> <a href=https://fesod.apache.org/ target=_blank rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+<li class=""><strong>Source Code:</strong> <a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+<li class=""><strong>Maven Central:</strong></li>
+</ul>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>dependency</span><span [...]
+<p><strong>Join Us!</strong>
+The Apache Fesod (Incubating) community is always open to new contributors. You can reach out to us by subscribing to the mailing list at <code>dev@fesod.apache.org</code> or by submitting issues on GitHub.</p>
+<p>We look forward to growing together within the Apache Incubator!</div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/release>release</a></ul></div></div><div class="row margin [...]
\ No newline at end of file
diff --git a/blog/2026/02/27/welcome-new-committer/index.html b/blog/2026/02/27/welcome-new-committer/index.html
new file mode 100644
index 00000000..7750d30f
--- /dev/null
+++ b/blog/2026/02/27/welcome-new-committer/index.html
@@ -0,0 +1,35 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Welcome Apache Fesod's New Committer | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=htt [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=self-introduction>Self-Introduction<a href=#self-introduction class=hash-link aria-label="Direct link to Self-Introduction" title="Direct link to Self-Introduction" translate=no></a></h2>
+<p>My name is Zhongqiang Gong (GitHub: <a href=https://github.com/GOODBOY008 target=_blank rel="noopener noreferrer" class="">GOODBOY008</a>). I'm a software engineer passionate about open source and the Java ecosystem, and also an <strong>Apache Flink Committer</strong> and <strong>Apache StreamPark Committer</strong>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=first-encounter-with-apache-fesod>First Encounter with Apache Fesod<a href=#first-encounter-with-apache-fesod class=hash-link aria-label="Direct link to First Encounter with Apache Fesod" title="Direct link to First Encounter with Apache Fesod" translate=no></a></h2>
+<p>I first came across Fesod in <strong>September 2025</strong>, shortly after it entered the Apache Incubation stage. As a widely adopted Java spreadsheet processing library, it already had a solid user base — but under Apache governance, the project was brimming with room to grow. That combination of real-world impact and untapped potential drew me in, and I knew I wanted to be part of shaping its future in the open.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=my-contributions>My Contributions<a href=#my-contributions class=hash-link aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate=no></a></h2>
+<p>Since joining the community, my contributions have spanned six key areas:</p>
+<ul>
+<li class=""><strong>Branding</strong> — Drove the systematic FastExcel → FesodSheet transition across the entire codebase, from core classes and test suites to examples and user-facing error messages.</li>
+<li class=""><strong>Code Quality</strong> — Eliminated duplicate utility classes, streamlined Lombok usage, and refined test assertion patterns to improve maintainability.</li>
+<li class=""><strong>CI/CD</strong> — Introduced concurrency control, path-based filtering, and fork protection to GitHub Actions, making the pipeline faster and more cost-efficient.</li>
+<li class=""><strong>Documentation</strong> — Authored a bilingual migration guide (English & Chinese) and enhanced the documentation site's navigation structure.</li>
+<li class=""><strong>Testing & Performance</strong> — Established a shared testkit infrastructure that significantly reduced test duplication, and introduced JMH-based benchmarking for performance validation.</li>
+<li class=""><strong>Architecture</strong> — Proposed and led discussions on examples module restructuring, modern testing patterns, and a long-term performance testing framework.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=what-i-learned>What I Learned<a href=#what-i-learned class=hash-link aria-label="Direct link to What I Learned" title="Direct link to What I Learned" translate=no></a></h2>
+<p>Contributing to Apache projects taught me three things: <strong>community over code</strong> — consensus and transparency matter more than any single PR; <strong>start small, think big</strong> — my first small CI fix (<a href=https://github.com/apache/fesod/pull/664 target=_blank rel="noopener noreferrer" class="">#664</a>) led to deep infrastructure improvements; and <strong>quality compounds</strong> — every small cleanup adds up to a healthier codebase over time.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=advice-for-new-contributors>Advice for New Contributors<a href=#advice-for-new-contributors class=hash-link aria-label="Direct link to Advice for New Contributors" title="Direct link to Advice for New Contributors" translate=no></a></h2>
+<ol>
+<li class=""><strong>Just start.</strong> Find a "good first issue" and take the first step — that's the hardest part.</li>
+<li class=""><strong>Read before you write.</strong> Understand the project's architecture and conventions first.</li>
+<li class=""><strong>Communicate openly.</strong> Clear issues and PRs earn trust faster than code alone.</li>
+<li class=""><strong>Think long-term.</strong> Proposals, docs, and infrastructure improvements are contributions too.</li>
+<li class=""><strong>Be patient.</strong> Consistency matters more than speed.</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=looking-forward>Looking Forward<a href=#looking-forward class=hash-link aria-label="Direct link to Looking Forward" title="Direct link to Looking Forward" translate=no></a></h2>
+<p>Becoming a Committer is a new beginning. I'm committed to improving Fesod's code quality, mentoring new contributors, driving the benchmarking framework forward, and supporting Fesod's journey toward Apache graduation.</div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>o [...]
\ No newline at end of file
diff --git a/blog/2026/04/29/from-user-to-committer/index.html b/blog/2026/04/29/from-user-to-committer/index.html
new file mode 100644
index 00000000..be55a630
--- /dev/null
+++ b/blog/2026/04/29/from-user-to-committer/index.html
@@ -0,0 +1,30 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>From User to Committer | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apa [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=my-first-encounter-with-apache-fesod-incubating>My First Encounter with Apache Fesod (Incubating)<a href=#my-first-encounter-with-apache-fesod-incubating class=hash-link aria-label="Direct link to My First Encounter with Apache Fesod (Incubating)" title="Direct link to My First Encounter with Apache Fesod (Incubating)" translate=no></a></h2>
+<p>In my work as a Java developer, I frequently encountered the need to process complex Excel files. It was while searching for an efficient solution to this challenge that I first discovered FastExcel. It quickly became an essential tool, significantly simplifying the complexity of handling Excel data in our daily development.</p>
+<p>Later on, some exciting news broke: FastExcel was being donated to the Apache Software Foundation, officially entering the incubator and rebranding as <strong>Apache Fesod (Incubating)</strong>. At that moment, I felt the project's vitality had been elevated to a whole new level. It combined the <strong>massive influence and solid user base</strong> established during the FastExcel days with the <strong>huge, untapped potential</strong> of the Apache open-source ecosystem. Seeing such [...]
+<p>From there, I started following the community closely. I went from quietly lurking, to participating in Issue discussions, and finally submitting my very first PR (<a href=https://github.com/apache/fesod/pull/668 target=_blank rel="noopener noreferrer" class="">#668</a>).</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=my-contributions>My Contributions<a href=#my-contributions class=hash-link aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate=no></a></h2>
+<p>After the thrill of having my first PR merged, I stopped limiting myself to isolated bug fixes and started looking at the project from a more holistic perspective. My main areas of contribution have included:</p>
+<ul>
+<li class=""><strong>Building out the Documentation System</strong></li>
+<li class=""><strong>Bug Fixes</strong></li>
+<li class=""><strong>Improving the Testing Framework</strong></li>
+<li class=""><strong>Feature Enhancements</strong></li>
+<li class=""><strong>Community Engagement</strong></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=my-takeaways>My Takeaways<a href=#my-takeaways class=hash-link aria-label="Direct link to My Takeaways" title="Direct link to My Takeaways" translate=no></a></h2>
+<p>Throughout my involvement with Apache Fesod (Incubating), I've come to deeply realize that:</p>
+<ul>
+<li class=""><strong>Open source is about collaboration, not just writing code.</strong> Every single step—Issues, PRs, Code Reviews, and discussions—requires clear communication and patience.</li>
+<li class=""><strong>Small contributions can make a massive impact.</strong> Fixing a simple typo or adding a code snippet can potentially help thousands of users.</li>
+<li class=""><strong>The power of the community far exceeds that of any individual.</strong> Every discussion and every consensus reached makes the project that much better.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=looking-ahead>Looking Ahead<a href=#looking-ahead class=hash-link aria-label="Direct link to Looking Ahead" title="Direct link to Looking Ahead" translate=no></a></h2>
+<p>Becoming a Committer is by no means the finish line; rather, it is a brand-new starting point. It comes with greater responsibilities and higher expectations. I am incredibly excited to continue working alongside the community to make Apache Fesod (Incubating) even better.</div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class= [...]
\ No newline at end of file
diff --git a/blog/2026/05/07/migration-from-fastexcel-with-openrewrite/index.html b/blog/2026/05/07/migration-from-fastexcel-with-openrewrite/index.html
new file mode 100644
index 00000000..ae2be4a6
--- /dev/null
+++ b/blog/2026/05/07/migration-from-fastexcel-with-openrewrite/index.html
@@ -0,0 +1,57 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=background>Background<a href=#background class=hash-link aria-label="Direct link to Background" title="Direct link to Background" translate=no></a></h2>
+<p>FastExcel (<code>cn.idev.excel</code>) has been donated to the Apache Software Foundation and is now incubating as <strong>Apache Fesod (Incubating)</strong>. The core change is a <strong>Java package path replacement</strong> — the API, annotations, and processing logic remain identical, making this a low-risk, mechanical refactoring.</p>
+<p>For the official migration strategy, see: <a href=https://fesod.apache.org/docs/migration/from-fastexcel/ target=_blank rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></p>
+<p>Manually replacing imports file by file is tedious and error-prone. OpenRewrite provides AST-level code transformation capabilities to perform this kind of bulk migration precisely and safely.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=migration-scope>Migration Scope<a href=#migration-scope class=hash-link aria-label="Direct link to Migration Scope" title="Direct link to Migration Scope" translate=no></a></h2>
+<ol>
+<li class="">Update Maven/Gradle dependencies</li>
+<li class="">Replace deprecated class names with <code>FesodSheet</code></li>
+<li class="">Update package imports</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=writing-the-openrewrite-recipe>Writing the OpenRewrite Recipe<a href=#writing-the-openrewrite-recipe class=hash-link aria-label="Direct link to Writing the OpenRewrite Recipe" title="Direct link to Writing the OpenRewrite Recipe" translate=no></a></h2>
+<p>Create a <code>rewrite.yml</code> file in your project root:</p>
+<div class="language-yaml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-yaml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token punctuation" style=color:#393A34>---</span><span class="token plain"></span><br/></div><div class=token-line styl [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=how-it-works>How It Works<a href=#how-it-works class=hash-link aria-label="Direct link to How It Works" title="Direct link to How It Works" translate=no></a></h3>
+<p>The recipe executes steps sequentially in declaration order:</p>
+<p><strong>Step 1 — Update Dependencies</strong>: The first rule updates <code>pom.xml</code> for Maven projects; the second rule updates <code>build.gradle</code> / <code>build.gradle.kts</code> for Gradle projects. If your project uses only one build tool, the other rule is silently skipped.</p>
+<p><strong>Step 2 — Package Import Updates</strong>: <code>ChangePackage(recursive=true)</code> covers all sub-packages under <code>cn.idev.excel</code> (annotation, read, write, converters, enums, etc.) in a single rule — no need to enumerate each one individually. The second rule handles legacy code that was already partially migrated to <code>org.apache.fesod.excel</code>. After this step, imports like <code>cn.idev.excel.FastExcel</code> become <code>org.apache.fesod.sheet.FastExcel< [...]
+<p><strong>Step 3 — Entry Class Rename</strong>: Once Step 2 completes, all <code>FastExcel</code> and <code>FastExcelFactory</code> imports are unified under <code>org.apache.fesod.sheet</code>. Only two <code>ChangeType</code> rules are needed to rename them to the canonical <code>FesodSheet</code> class, automatically updating all call sites (<code>FastExcel.read()</code>, <code>FastExcel.write()</code>, etc.) and type references (variable declarations, class literals).</p>
+<p><strong>Step 4 — CGLIB String Replacement</strong>: Only affects code that references CGLIB-generated class names at runtime. Most projects don't need this step — the rule is silently skipped if there's no match.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=adding-openrewrite-to-your-project>Adding OpenRewrite to Your Project<a href=#adding-openrewrite-to-your-project class=hash-link aria-label="Direct link to Adding OpenRewrite to Your Project" title="Direct link to Adding OpenRewrite to Your Project" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=maven>Maven<a href=#maven class=hash-link aria-label="Direct link to Maven" title="Direct link to Maven" translate=no></a></h3>
+<p>Add the plugin to <code>pom.xml</code>:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>plugin</span><span clas [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=gradle-groovy>Gradle (Groovy)<a href=#gradle-groovy class=hash-link aria-label="Direct link to Gradle (Groovy)" title="Direct link to Gradle (Groovy)" translate=no></a></h3>
+<p>Add to <code>build.gradle</code>:</p>
+<div class="language-groovy codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-groovy codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">plugins {</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> id [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=gradle-kotlin>Gradle (Kotlin)<a href=#gradle-kotlin class=hash-link aria-label="Direct link to Gradle (Kotlin)" title="Direct link to Gradle (Kotlin)" translate=no></a></h3>
+<p>Add to <code>build.gradle.kts</code>:</p>
+<div class="language-kotlin codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-kotlin codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">plugins </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain">< [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=running-the-migration>Running the Migration<a href=#running-the-migration class=hash-link aria-label="Direct link to Running the Migration" title="Direct link to Running the Migration" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=preview-changes>Preview Changes<a href=#preview-changes class=hash-link aria-label="Direct link to Preview Changes" title="Direct link to Preview Changes" translate=no></a></h3>
+<p>View what the recipe would change without modifying files:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Maven</span><span class="token plain"></span><br/></div><div cla [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=apply-changes>Apply Changes<a href=#apply-changes class=hash-link aria-label="Direct link to Apply Changes" title="Direct link to Apply Changes" translate=no></a></h3>
+<p>Once satisfied with the preview, apply the changes:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Maven</span><span class="token plain"></span><br/></div><div cla [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=verify>Verify<a href=#verify class=hash-link aria-label="Direct link to Verify" title="Direct link to Verify" translate=no></a></h3>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Compile check</span><span class="token plain"></span><br/></div> [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=before-and-after>Before and After<a href=#before-and-after class=hash-link aria-label="Direct link to Before and After" title="Direct link to Before and After" translate=no></a></h2>
+<p>Before migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token import namespace" [...]
+<p>After migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token import namespace" [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=references>References<a href=#references class=hash-link aria-label="Direct link to References" title="Direct link to References" translate=no></a></h2>
+<ul>
+<li class="">Apache Fesod (Incubating) Official Migration Guide: <a href=https://fesod.apache.org/docs/migration/from-fastexcel/ target=_blank rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></li>
+<li class="">OpenRewrite Documentation: <a href=https://docs.openrewrite.org/ target=_blank rel="noopener noreferrer" class="">https://docs.openrewrite.org/</a></li>
+<li class="">OpenRewrite Recipe Reference: <a href=https://docs.openrewrite.org/recipes target=_blank rel="noopener noreferrer" class="">https://docs.openrewrite.org/recipes</a></li>
+</ul></div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/migration>migration</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fastexcel>fastexcel</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fesod>fesod</a></ul></di [...]
\ No newline at end of file
diff --git a/blog/2026/06/11/cve-2026-49328/index.html b/blog/2026/06/11/cve-2026-49328/index.html
new file mode 100644
index 00000000..2e38b82c
--- /dev/null
+++ b/blog/2026/06/11/cve-2026-49328/index.html
@@ -0,0 +1,36 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summa [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=description>Description<a href=#description class=hash-link aria-label="Direct link to Description" title="Direct link to Description" translate=no></a></h2>
+<p>Server-Side Request Forgery (SSRF) in the <code>UrlImageConverter</code> component of Apache Fesod (Incubating) <code>fesod-sheet</code> allows attackers to cause outbound network requests to internal or otherwise restricted resources via a user-supplied image URL.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=affected-modules-and-versions>Affected Modules and Versions<a href=#affected-modules-and-versions class=hash-link aria-label="Direct link to Affected Modules and Versions" title="Direct link to Affected Modules and Versions" translate=no></a></h2>
+<p>Fesod Spreadsheet (<code>fesod-sheet</code>):</p>
+<ul>
+<li class="">2.0.1-incubating</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=mitigation>Mitigation<a href=#mitigation class=hash-link aria-label="Direct link to Mitigation" title="Direct link to Mitigation" translate=no></a></h2>
+<p>Users of affected versions should upgrade to the corresponding fixed version.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Affected version(s)<th>Fix version<tbody><tr><td>2.0.1-incubating<td>2.0.2-incubating</table>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=references>References<a href=#references class=hash-link aria-label="Direct link to References" title="Direct link to References" translate=no></a></h2>
+<ul>
+<li class=""><a href=https://github.com/apache/fesod/pull/917 target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fesod/pull/917</a></li>
+<li class=""><a href=https://github.com/apache/fesod/releases/tag/2.0.2-incubating target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fesod/releases/tag/2.0.2-incubating</a></li>
+<li class=""><a href=https://fesod.apache.org/docs/download target=_blank rel="noopener noreferrer" class="">https://fesod.apache.org/docs/download</a></li>
+<li class=""><a href=https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj target=_blank rel="noopener noreferrer" class="">https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj</a></li>
+</ul></div><footer class=docusaurus-mt-lg><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class=col><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/security>security</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/cve-2026-49328>CVE-2 [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
new file mode 100644
index 00000000..cd069f71
--- /dev/null
+++ b/blog/archive/index.html
@@ -0,0 +1,4 @@
+<!doctype html><html lang=en dir=ltr class="plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Archive | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apache.org/img/logo.svg /><meta data-rh=true n [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
new file mode 100644
index 00000000..036e5548
--- /dev/null
+++ b/blog/atom.xml
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <id>https://fesod.apache.org/blog</id>
+ <title>Apache Fesod (Incubating) Blog</title>
+ <updated>2026-06-11T00:00:00.000Z</updated>
+ <generator>https://github.com/jpmonette/feed</generator>
+ <link rel="alternate" href="https://fesod.apache.org/blog"/>
+ <subtitle>Apache Fesod (Incubating) Blog</subtitle>
+ <icon>https://fesod.apache.org/img/favicon.ico</icon>
+ <entry>
+ <title type="html"><![CDATA[CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF]]></title>
+ <id>https://fesod.apache.org/blog/2026/06/11/cve-2026-49328</id>
+ <link href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328"/>
+ <updated>2026-06-11T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Security advisory for CVE-2026-49328.]]></summary>
+ <content type="html"><![CDATA[
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="description">Description<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#description" class="hash-link" aria-label="Direct link to Description" title="Direct link to Description" translate="no"></a></h2>
+<p>Server-Side Request Forgery (SSRF) in the <code>UrlImageConverter</code> component of Apache Fesod (Incubating) <code>fesod-sheet</code> allows attackers to cause outbound network requests to internal or otherwise restricted resources via a user-supplied image URL.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="affected-modules-and-versions">Affected Modules and Versions<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#affected-modules-and-versions" class="hash-link" aria-label="Direct link to Affected Modules and Versions" title="Direct link to Affected Modules and Versions" translate="no"></a></h2>
+<p>Fesod Spreadsheet (<code>fesod-sheet</code>):</p>
+<ul>
+<li class="">2.0.1-incubating</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="mitigation">Mitigation<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#mitigation" class="hash-link" aria-label="Direct link to Mitigation" title="Direct link to Mitigation" translate="no"></a></h2>
+<p>Users of affected versions should upgrade to the corresponding fixed version.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Affected version(s)</th><th>Fix version</th></tr></thead><tbody><tr><td>2.0.1-incubating</td><td>2.0.2-incubating</td></tr></tbody></table>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="references">References<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no"></a></h2>
+<ul>
+<li class=""><a href="https://github.com/apache/fesod/pull/917" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod/pull/917</a></li>
+<li class=""><a href="https://github.com/apache/fesod/releases/tag/2.0.2-incubating" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod/releases/tag/2.0.2-incubating</a></li>
+<li class=""><a href="https://fesod.apache.org/docs/download" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/download</a></li>
+<li class=""><a href="https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj" target="_blank" rel="noopener noreferrer" class="">https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj</a></li>
+</ul>]]></content>
+ <category label="announcement" term="announcement"/>
+ <category label="security" term="security"/>
+ <category label="CVE-2026-49328" term="CVE-2026-49328"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite]]></title>
+ <id>https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite</id>
+ <link href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite"/>
+ <updated>2026-05-07T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Migrate FastExcel 1.3 to Apache Fesod (Incubating) 2.0.1-incubating]]></summary>
+ <content type="html"><![CDATA[
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="background">Background<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background" translate="no"></a></h2>
+<p>FastExcel (<code>cn.idev.excel</code>) has been donated to the Apache Software Foundation and is now incubating as <strong>Apache Fesod (Incubating)</strong>. The core change is a <strong>Java package path replacement</strong> — the API, annotations, and processing logic remain identical, making this a low-risk, mechanical refactoring.</p>
+<p>For the official migration strategy, see: <a href="https://fesod.apache.org/docs/migration/from-fastexcel/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></p>
+<p>Manually replacing imports file by file is tedious and error-prone. OpenRewrite provides AST-level code transformation capabilities to perform this kind of bulk migration precisely and safely.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="migration-scope">Migration Scope<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#migration-scope" class="hash-link" aria-label="Direct link to Migration Scope" title="Direct link to Migration Scope" translate="no"></a></h2>
+<ol>
+<li class="">Update Maven/Gradle dependencies</li>
+<li class="">Replace deprecated class names with <code>FesodSheet</code></li>
+<li class="">Update package imports</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="writing-the-openrewrite-recipe">Writing the OpenRewrite Recipe<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#writing-the-openrewrite-recipe" class="hash-link" aria-label="Direct link to Writing the OpenRewrite Recipe" title="Direct link to Writing the OpenRewrite Recipe" translate="no"></a></h2>
+<p>Create a <code>rewrite.yml</code> file in your project root:</p>
+<div class="language-yaml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-yaml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></div><div class= [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="how-it-works">How It Works<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no"></a></h3>
+<p>The recipe executes steps sequentially in declaration order:</p>
+<p><strong>Step 1 — Update Dependencies</strong>: The first rule updates <code>pom.xml</code> for Maven projects; the second rule updates <code>build.gradle</code> / <code>build.gradle.kts</code> for Gradle projects. If your project uses only one build tool, the other rule is silently skipped.</p>
+<p><strong>Step 2 — Package Import Updates</strong>: <code>ChangePackage(recursive=true)</code> covers all sub-packages under <code>cn.idev.excel</code> (annotation, read, write, converters, enums, etc.) in a single rule — no need to enumerate each one individually. The second rule handles legacy code that was already partially migrated to <code>org.apache.fesod.excel</code>. After this step, imports like <code>cn.idev.excel.FastExcel</code> become <code>org.apache.fesod.sheet.FastExcel< [...]
+<p><strong>Step 3 — Entry Class Rename</strong>: Once Step 2 completes, all <code>FastExcel</code> and <code>FastExcelFactory</code> imports are unified under <code>org.apache.fesod.sheet</code>. Only two <code>ChangeType</code> rules are needed to rename them to the canonical <code>FesodSheet</code> class, automatically updating all call sites (<code>FastExcel.read()</code>, <code>FastExcel.write()</code>, etc.) and type references (variable declarations, class literals).</p>
+<p><strong>Step 4 — CGLIB String Replacement</strong>: Only affects code that references CGLIB-generated class names at runtime. Most projects don't need this step — the rule is silently skipped if there's no match.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="adding-openrewrite-to-your-project">Adding OpenRewrite to Your Project<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#adding-openrewrite-to-your-project" class="hash-link" aria-label="Direct link to Adding OpenRewrite to Your Project" title="Direct link to Adding OpenRewrite to Your Project" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="maven">Maven<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#maven" class="hash-link" aria-label="Direct link to Maven" title="Direct link to Maven" translate="no"></a></h3>
+<p>Add the plugin to <code>pom.xml</code>:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">plugi [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="gradle-groovy">Gradle (Groovy)<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#gradle-groovy" class="hash-link" aria-label="Direct link to Gradle (Groovy)" title="Direct link to Gradle (Groovy)" translate="no"></a></h3>
+<p>Add to <code>build.gradle</code>:</p>
+<div class="language-groovy codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-groovy codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token plain">plugins {</span><br></div><div class="token-line" style="color:#393A34"><span class="tok [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="gradle-kotlin">Gradle (Kotlin)<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#gradle-kotlin" class="hash-link" aria-label="Direct link to Gradle (Kotlin)" title="Direct link to Gradle (Kotlin)" translate="no"></a></h3>
+<p>Add to <code>build.gradle.kts</code>:</p>
+<div class="language-kotlin codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-kotlin codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token plain">plugins </span><span class="token punctuation" style="color:#393A34">{</span><span class [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="running-the-migration">Running the Migration<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#running-the-migration" class="hash-link" aria-label="Direct link to Running the Migration" title="Direct link to Running the Migration" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="preview-changes">Preview Changes<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#preview-changes" class="hash-link" aria-label="Direct link to Preview Changes" title="Direct link to Preview Changes" translate="no"></a></h3>
+<p>View what the recipe would change without modifying files:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Maven</span><span class="token plain"></span><br [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="apply-changes">Apply Changes<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#apply-changes" class="hash-link" aria-label="Direct link to Apply Changes" title="Direct link to Apply Changes" translate="no"></a></h3>
+<p>Once satisfied with the preview, apply the changes:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Maven</span><span class="token plain"></span><br [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="verify">Verify<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#verify" class="hash-link" aria-label="Direct link to Verify" title="Direct link to Verify" translate="no"></a></h3>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Compile check</span><span class="token plain"></ [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="before-and-after">Before and After<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#before-and-after" class="hash-link" aria-label="Direct link to Before and After" title="Direct link to Before and After" translate="no"></a></h2>
+<p>Before migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token im [...]
+<p>After migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token im [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="references">References<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no"></a></h2>
+<ul>
+<li class="">Apache Fesod (Incubating) Official Migration Guide: <a href="https://fesod.apache.org/docs/migration/from-fastexcel/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></li>
+<li class="">OpenRewrite Documentation: <a href="https://docs.openrewrite.org/" target="_blank" rel="noopener noreferrer" class="">https://docs.openrewrite.org/</a></li>
+<li class="">OpenRewrite Recipe Reference: <a href="https://docs.openrewrite.org/recipes" target="_blank" rel="noopener noreferrer" class="">https://docs.openrewrite.org/recipes</a></li>
+</ul>]]></content>
+ <author>
+ <name>Jing Yang</name>
+ <uri>https://github.com/bengbengbalabalabeng</uri>
+ </author>
+ <category label="migration" term="migration"/>
+ <category label="fastexcel" term="fastexcel"/>
+ <category label="fesod" term="fesod"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[From User to Committer]]></title>
+ <id>https://fesod.apache.org/blog/2026/04/29/from-user-to-committer</id>
+ <link href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer"/>
+ <updated>2026-04-29T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[From User to Committer]]></summary>
+ <content type="html"><![CDATA[
+<p><img decoding="async" loading="lazy" alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxp [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-first-encounter-with-apache-fesod-incubating">My First Encounter with Apache Fesod (Incubating)<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-first-encounter-with-apache-fesod-incubating" class="hash-link" aria-label="Direct link to My First Encounter with Apache Fesod (Incubating)" title="Direct link to My First Encounter with Apache Fesod (Incubating)" translate="no"></a></h2>
+<p>In my work as a Java developer, I frequently encountered the need to process complex Excel files. It was while searching for an efficient solution to this challenge that I first discovered FastExcel. It quickly became an essential tool, significantly simplifying the complexity of handling Excel data in our daily development.</p>
+<p>Later on, some exciting news broke: FastExcel was being donated to the Apache Software Foundation, officially entering the incubator and rebranding as <strong>Apache Fesod (Incubating)</strong>. At that moment, I felt the project's vitality had been elevated to a whole new level. It combined the <strong>massive influence and solid user base</strong> established during the FastExcel days with the <strong>huge, untapped potential</strong> of the Apache open-source ecosystem. Seeing such [...]
+<p>From there, I started following the community closely. I went from quietly lurking, to participating in Issue discussions, and finally submitting my very first PR (<a href="https://github.com/apache/fesod/pull/668" target="_blank" rel="noopener noreferrer" class="">#668</a>).</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-contributions">My Contributions<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-contributions" class="hash-link" aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate="no"></a></h2>
+<p>After the thrill of having my first PR merged, I stopped limiting myself to isolated bug fixes and started looking at the project from a more holistic perspective. My main areas of contribution have included:</p>
+<ul>
+<li class=""><strong>Building out the Documentation System</strong></li>
+<li class=""><strong>Bug Fixes</strong></li>
+<li class=""><strong>Improving the Testing Framework</strong></li>
+<li class=""><strong>Feature Enhancements</strong></li>
+<li class=""><strong>Community Engagement</strong></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-takeaways">My Takeaways<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-takeaways" class="hash-link" aria-label="Direct link to My Takeaways" title="Direct link to My Takeaways" translate="no"></a></h2>
+<p>Throughout my involvement with Apache Fesod (Incubating), I've come to deeply realize that:</p>
+<ul>
+<li class=""><strong>Open source is about collaboration, not just writing code.</strong> Every single step—Issues, PRs, Code Reviews, and discussions—requires clear communication and patience.</li>
+<li class=""><strong>Small contributions can make a massive impact.</strong> Fixing a simple typo or adding a code snippet can potentially help thousands of users.</li>
+<li class=""><strong>The power of the community far exceeds that of any individual.</strong> Every discussion and every consensus reached makes the project that much better.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="looking-ahead">Looking Ahead<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#looking-ahead" class="hash-link" aria-label="Direct link to Looking Ahead" title="Direct link to Looking Ahead" translate="no"></a></h2>
+<p>Becoming a Committer is by no means the finish line; rather, it is a brand-new starting point. It comes with greater responsibilities and higher expectations. I am incredibly excited to continue working alongside the community to make Apache Fesod (Incubating) even better.</p>]]></content>
+ <author>
+ <name>Jing Yang</name>
+ <uri>https://github.com/bengbengbalabalabeng</uri>
+ </author>
+ <category label="opensource" term="opensource"/>
+ <category label="apache" term="apache"/>
+ <category label="committer" term="committer"/>
+ <category label="fesod" term="fesod"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Apache Fesod (Incubating) 2.0.1-incubating Officially Released]]></title>
+ <id>https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released</id>
+ <link href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released"/>
+ <updated>2026-02-27T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[The Apache Fesod community is pleased to announce the official release of Apache Fesod (Incubating) 2.0.1-incubating.]]></summary>
+ <content type="html"><![CDATA[
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="milestone-significance-the-first-official-asf-release">Milestone Significance: The First Official ASF Release<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#milestone-significance-the-first-official-asf-release" class="hash-link" aria-label="Direct link to Milestone Significance: The First Official ASF Release" title="Direct link to Milestone Significance: The First Official ASF Release" transla [...]
+<p>As our "debut" in the incubator, version 2.0.1 represents a decisive step forward in embracing <strong>"The Apache Way"</strong>:</p>
+<ul>
+<li class=""><strong>Comprehensive Renaming & Compliance:</strong> We have completed the full transition from <code>FastExcel</code> to <code>Fesod</code> (including package names, class names, and documentation) to ensure the brand is fully protected under the ASF.</li>
+<li class=""><strong>Compliance Completion:</strong> We have introduced the <code>DISCLAIMER</code>, <code>NOTICE</code>, and <code>support</code> modules, and implemented automated License Header management via Spotless, fully aligning with ASF policies.</li>
+<li class=""><strong>Community Governance:</strong> All code merges and release processes were conducted through public discussion and voting on the mailing lists, reflecting the principles of openness and transparency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="key-highlights">Key Highlights<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#key-highlights" class="hash-link" aria-label="Direct link to Key Highlights" title="Direct link to Key Highlights" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="1-deep-architectural-refactoring">1. Deep Architectural Refactoring<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#1-deep-architectural-refactoring" class="hash-link" aria-label="Direct link to 1. Deep Architectural Refactoring" title="Direct link to 1. Deep Architectural Refactoring" translate="no"></a></h3>
+<p>To support long-term sustainability, we have significantly optimized the project structure:</p>
+<ul>
+<li class=""><strong>Multi-module Architecture:</strong> Introduced a multi-module structure for clearer hierarchy and finer dependency management.</li>
+<li class=""><strong>Distribution Enhancement:</strong> Added the <code>fesod-distribution</code> module to standardize the description and building of distribution packages.</li>
+<li class=""><strong>JDK 25 Support:</strong> Keeping pace with the Java ecosystem, we have officially added compatibility and support for <strong>JDK 25</strong>.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="2-new-features">2. New Features<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#2-new-features" class="hash-link" aria-label="Direct link to 2. New Features" title="Direct link to 2. New Features" translate="no"></a></h3>
+<p>This release introduces several practical features to enhance the flexibility of Excel processing:</p>
+<ul>
+<li class=""><strong>Enhanced Excel Processing:</strong> Added the <code>afterSheetDispose</code> lifecycle method in <code>SheetWriteHandler</code> and introduced a brand-new <strong>Header Merge Strategy</strong>.</li>
+<li class=""><strong>Legacy Format Compatibility:</strong> Gracefully handles very old Excel BIFF formats to prevent runtime crashes.</li>
+<li class=""><strong>Flexible Control:</strong> Added the <code>autoStrip</code> parameter and introduced validation for maximum Sheet name length in <code>Workbook</code> constants.</li>
+<li class=""><strong>Website Experience:</strong> Added local search functionality and Matomo analytics to the official documentation, with optimized display for mobile devices.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="3-stability--robustness">3. Stability & Robustness<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#3-stability--robustness" class="hash-link" aria-label="Direct link to 3. Stability & Robustness" title="Direct link to 3. Stability & Robustness" translate="no"></a></h3>
+<p>We have invested heavily in quality assurance:</p>
+<ul>
+<li class=""><strong>Fuzz Testing:</strong> Added daily fuzz testing for Excel reading to proactively identify potential crashes when processing malformed files.</li>
+<li class=""><strong>Dependency Security:</strong> Upgraded core dependencies including Spring-core, Logback, Fastjson2, and POI (to 5.5.1) to resolve known vulnerabilities.</li>
+<li class=""><strong>CI/CD Optimization:</strong> Introduced Netlify preview deployments and automated workflows for closing stale issues, significantly improving community collaboration efficiency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="key-changes-at-a-glance">Key Changes at a Glance<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#key-changes-at-a-glance" class="hash-link" aria-label="Direct link to Key Changes at a Glance" title="Direct link to Key Changes at a Glance" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="features"><strong>Features</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#features" class="hash-link" aria-label="Direct link to features" title="Direct link to features" translate="no"></a></h3>
+<ul>
+<li class="">Added <code>afterSheetDispose</code> method to <code>SheetWriteHandler</code>.</li>
+<li class="">Introduced Header Merge Strategy for Excel writing.</li>
+<li class="">Added GitHub Actions for Netlify preview deployments.</li>
+<li class="">Integrated <code>docusaurus-search-local</code> for official website search.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="bugfixes"><strong>Bugfixes</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#bugfixes" class="hash-link" aria-label="Direct link to bugfixes" title="Direct link to bugfixes" translate="no"></a></h3>
+<ul>
+<li class="">Fixed NPE in the <code>WriteSheetWorkbookWriteHandler</code> class.</li>
+<li class="">Fixed broken links and incorrect code examples in the documentation.</li>
+<li class="">Updated import statements to use the shaded <code>cglib</code> package.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="refactoring"><strong>Refactoring</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#refactoring" class="hash-link" aria-label="Direct link to refactoring" title="Direct link to refactoring" translate="no"></a></h3>
+<ul>
+<li class="">Renamed project to Fesod/FesodSheet and updated package structures to align with Apache naming conventions.</li>
+<li class="">Implemented Spotless for automated License Header management.</li>
+<li class="">Removed outdated and incorrect <code>@since</code> tags.</li>
+</ul>
+<blockquote>
+<p>For a detailed list of changes, please refer to the <a href="https://github.com/apache/fesod/releases/tag/2.0.1-incubating" target="_blank" rel="noopener noreferrer" class="">GitHub Release Notes</a>.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="acknowledgments">Acknowledgments<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#acknowledgments" class="hash-link" aria-label="Direct link to Acknowledgments" title="Direct link to Acknowledgments" translate="no"></a></h2>
+<p>"Community Over Code" is the core philosophy of the Apache Software Foundation. We would like to thank all the developers, mentors, and community members who contributed to this release.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="new-contributors">New Contributors<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#new-contributors" class="hash-link" aria-label="Direct link to New Contributors" title="Direct link to New Contributors" translate="no"></a></h3>
+<p>We would like to extend a warm welcome and a special thank you to the <strong>14 new members</strong> who made their first contribution in this release:</p>
+<blockquote>
+<p>@X-qinghai, @ngocnhan-tran1996, @YIminta, @jounghu, @wlgusqkr, @gaushon, @GOODBOY008, @ongdisheng, @harshasiddartha, @pjfanning, @liugddx, @hezhangjian, @bengbengbalabalabeng</p>
+</blockquote>
+<p>Special thanks to <strong>@delei, @psxjoy, @alaahong, @ongdisheng, @GOODBOY008</strong>, and everyone who submitted PRs and suggestions on GitHub. Your tireless efforts in renaming, compliance checking, CI optimization, and feature improvements have made Fesod's ASF debut a success.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="how-to-get-involved">How to Get Involved<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#how-to-get-involved" class="hash-link" aria-label="Direct link to How to Get Involved" title="Direct link to How to Get Involved" translate="no"></a></h2>
+<p>You can download and experience the new Apache Fesod (Incubating) through the following channels:</p>
+<ul>
+<li class=""><strong>Official Website:</strong> <a href="https://fesod.apache.org/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+<li class=""><strong>Source Code:</strong> <a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+<li class=""><strong>Maven Central:</strong></li>
+</ul>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">depen [...]
+<p><strong>Join Us!</strong>
+The Apache Fesod (Incubating) community is always open to new contributors. You can reach out to us by subscribing to the mailing list at <code>dev@fesod.apache.org</code> or by submitting issues on GitHub.</p>
+<p>We look forward to growing together within the Apache Incubator!</p>]]></content>
+ <author>
+ <name>Shuxin Pan</name>
+ <uri>https://github.com/psxjoy</uri>
+ </author>
+ <category label="announcement" term="announcement"/>
+ <category label="release" term="release"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Welcome Apache Fesod's New Committer]]></title>
+ <id>https://fesod.apache.org/blog/2026/02/27/welcome-new-committer</id>
+ <link href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer"/>
+ <updated>2026-02-27T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Welcome Apache Fesod's New Committer]]></summary>
+ <content type="html"><![CDATA[
+<p><img decoding="async" loading="lazy" alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxp [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="self-introduction">Self-Introduction<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#self-introduction" class="hash-link" aria-label="Direct link to Self-Introduction" title="Direct link to Self-Introduction" translate="no"></a></h2>
+<p>My name is Zhongqiang Gong (GitHub: <a href="https://github.com/GOODBOY008" target="_blank" rel="noopener noreferrer" class="">GOODBOY008</a>). I'm a software engineer passionate about open source and the Java ecosystem, and also an <strong>Apache Flink Committer</strong> and <strong>Apache StreamPark Committer</strong>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="first-encounter-with-apache-fesod">First Encounter with Apache Fesod<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#first-encounter-with-apache-fesod" class="hash-link" aria-label="Direct link to First Encounter with Apache Fesod" title="Direct link to First Encounter with Apache Fesod" translate="no"></a></h2>
+<p>I first came across Fesod in <strong>September 2025</strong>, shortly after it entered the Apache Incubation stage. As a widely adopted Java spreadsheet processing library, it already had a solid user base — but under Apache governance, the project was brimming with room to grow. That combination of real-world impact and untapped potential drew me in, and I knew I wanted to be part of shaping its future in the open.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-contributions">My Contributions<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#my-contributions" class="hash-link" aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate="no"></a></h2>
+<p>Since joining the community, my contributions have spanned six key areas:</p>
+<ul>
+<li class=""><strong>Branding</strong> — Drove the systematic FastExcel → FesodSheet transition across the entire codebase, from core classes and test suites to examples and user-facing error messages.</li>
+<li class=""><strong>Code Quality</strong> — Eliminated duplicate utility classes, streamlined Lombok usage, and refined test assertion patterns to improve maintainability.</li>
+<li class=""><strong>CI/CD</strong> — Introduced concurrency control, path-based filtering, and fork protection to GitHub Actions, making the pipeline faster and more cost-efficient.</li>
+<li class=""><strong>Documentation</strong> — Authored a bilingual migration guide (English & Chinese) and enhanced the documentation site's navigation structure.</li>
+<li class=""><strong>Testing & Performance</strong> — Established a shared testkit infrastructure that significantly reduced test duplication, and introduced JMH-based benchmarking for performance validation.</li>
+<li class=""><strong>Architecture</strong> — Proposed and led discussions on examples module restructuring, modern testing patterns, and a long-term performance testing framework.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="what-i-learned">What I Learned<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#what-i-learned" class="hash-link" aria-label="Direct link to What I Learned" title="Direct link to What I Learned" translate="no"></a></h2>
+<p>Contributing to Apache projects taught me three things: <strong>community over code</strong> — consensus and transparency matter more than any single PR; <strong>start small, think big</strong> — my first small CI fix (<a href="https://github.com/apache/fesod/pull/664" target="_blank" rel="noopener noreferrer" class="">#664</a>) led to deep infrastructure improvements; and <strong>quality compounds</strong> — every small cleanup adds up to a healthier codebase over time.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="advice-for-new-contributors">Advice for New Contributors<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#advice-for-new-contributors" class="hash-link" aria-label="Direct link to Advice for New Contributors" title="Direct link to Advice for New Contributors" translate="no"></a></h2>
+<ol>
+<li class=""><strong>Just start.</strong> Find a "good first issue" and take the first step — that's the hardest part.</li>
+<li class=""><strong>Read before you write.</strong> Understand the project's architecture and conventions first.</li>
+<li class=""><strong>Communicate openly.</strong> Clear issues and PRs earn trust faster than code alone.</li>
+<li class=""><strong>Think long-term.</strong> Proposals, docs, and infrastructure improvements are contributions too.</li>
+<li class=""><strong>Be patient.</strong> Consistency matters more than speed.</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="looking-forward">Looking Forward<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#looking-forward" class="hash-link" aria-label="Direct link to Looking Forward" title="Direct link to Looking Forward" translate="no"></a></h2>
+<p>Becoming a Committer is a new beginning. I'm committed to improving Fesod's code quality, mentoring new contributors, driving the benchmarking framework forward, and supporting Fesod's journey toward Apache graduation.</p>]]></content>
+ <author>
+ <name>Zhongqiang Gong</name>
+ <uri>https://github.com/GOODBOY008</uri>
+ </author>
+ <category label="opensource" term="opensource"/>
+ <category label="apache" term="apache"/>
+ <category label="committer" term="committer"/>
+ <category label="fesod" term="fesod"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Way to Go: Fesod successfully entered Apache Incubator]]></title>
+ <id>https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator</id>
+ <link href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator"/>
+ <updated>2025-09-17T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Fesod successfully entered Apache Incubator.]]></summary>
+ <content type="html"><![CDATA[
+<p>On September 17, 2025, Beijing time, <a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">Fesod</a> successfully passed the voting resolution
+of the Apache Foundation Incubator.
+According to the Apache Foundation <a href="https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f" target="_blank" rel="noopener noreferrer" class="">mailing list</a>, it
+was approved with 9 binding votes, with no abstentions or opposing
+votes, to accept Fesod into the Apache Incubator. This marked its official status as an incubation project under the
+<a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache Software Foundation</a>, the world's largest open-source foundation. On September 25,
+2025, the Fesod repository was
+officially transferred to the Apache Software Foundation.</p>
+<!-- -->
+<p>Fesod was originally named FastExcel and was officially open-sourced on GitHub in October 2024. With continuous project
+maintenance and iteration by the community members, as well as the continuous growth of the community, now the Fesod
+project has officially been announced to join the Apache Incubator. This marks a new beginning for the Fesod project,
+indicating that open-source community collaboration will become more standardized and internationalized!</p>
+<p><img decoding="async" loading="lazy" alt="blog-20250917" src="https://fesod.apache.org/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png" width="1207" height="1595" class="img_Q0Px"></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="introduction">Introduction<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no"></a></h2>
+<p>Apache Fesod (Incubating) is a high-performance and memory-efficient Java library for reading and writing
+spreadsheet files, designed to simplify development and ensure reliability. The name fesod (pronounced <code>/ˈfɛsɒd/</code>), an
+acronym for "fast easy spreadsheet and other documents," expresses the project's origin, background, and vision.</p>
+<p>Apache Fesod (Incubating) can provide developers and enterprises with great freedom and flexibility. We plan to
+introduce more new features in the future to continually enhance user experience and tool usability. Apache Fesod (
+Incubating) is committed to being your best choice for handling spreadsheet files.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="features">Features<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features" translate="no"></a></h2>
+<ul>
+<li class=""><strong>High-performance Reading and Writing</strong>: Apache Fesod (Incubating) focuses on performance optimization, capable of
+efficiently handling large-scale spreadsheet data. Compared to some traditional spreadsheet processing libraries, it
+can
+significantly reduce memory consumption.</li>
+<li class=""><strong>Simplicity and Ease of Use</strong>: The library offers a simple and intuitive API, allowing developers to easily integrate
+it into projects, whether for simple spreadsheet operations or complex data processing.</li>
+<li class=""><strong>Stream Operations</strong>: Apache Fesod (Incubating) supports stream reading, minimizing the problem of loading large
+amounts of data at once. This design is especially important when dealing with hundreds of thousands or even millions
+of rows of data.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="current-development-status">Current Development Status<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#current-development-status" class="hash-link" aria-label="Direct link to Current Development Status" title="Direct link to Current Development Status" translate="no"></a></h2>
+<p>The project was initiated by the original core maintainer in 2024, aiming to provide a more efficient Excel processing
+solution and ensure long-term sustainable maintenance. Since its open-source status, a small community has been
+initially established. The main repository has received a total of <strong>5.0K+</strong> stars on GitHub, has released community
+versions <strong>5</strong> times, and has <strong>20+</strong> contributors.
+We have received continuous widespread attention and support from the community, which is both a recognition of our past
+work and an expectation for our future development.</p>
+<p><img decoding="async" loading="lazy" alt="blog-20250917" src="https://fesod.apache.org/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png" width="826" height="551" class="img_Q0Px"></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="why-join-the-apache-incubator">Why Join the Apache Incubator<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#why-join-the-apache-incubator" class="hash-link" aria-label="Direct link to Why Join the Apache Incubator" title="Direct link to Why Join the Apache Incubator" translate="no"></a></h2>
+<p>Joining the Apache Incubator is mainly based on the following reasons:</p>
+<ul>
+<li class="">Under the guidance of the Apache Mature Open Source Foundation, the collaboration of open source projects and the
+operation of community governance will become more standardized.</li>
+<li class="">Build a more prosperous and diverse developer community. We hope to attract more outstanding developers from home and
+abroad to join, making the developer community more diverse.</li>
+<li class="">Expand the application scope and encourage its integration into more open source and commercial projects, promoting
+the development of new use cases and functions.</li>
+</ul>
+<p>Next, the community will be guided by the Apache incubator mentors to manage and operate the community in accordance
+with the concept of "Community over Code", and also ensure that every outstanding contributor can be recognized. At the
+level of open-source products, listen to user feedback, improve and optimize the product usage experience, and build
+connections with the open-source ecosystem.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="introduction-of-the-supervisor">Introduction of the Supervisor<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#introduction-of-the-supervisor" class="hash-link" aria-label="Direct link to Introduction of the Supervisor" title="Direct link to Introduction of the Supervisor" translate="no"></a></h2>
+<ul>
+<li class="">tison(Champion)</li>
+<li class="">Dave Fisher</li>
+<li class="">PJ Fanning</li>
+<li class="">Huajie Wang</li>
+</ul>
+<p>Thank you all for your selfless assistance. You provided professional guidance in terms of compliance and process
+advancement. Special thanks to the project Champion, @tison. During the project's journey into the incubator, he/she led
+the entire process from the drafting stage of the proposal to discussions and ultimately to the initiation of voting,
+offering many valuable professional suggestions and guidance.</p>
+<p>We believe that with the guidance of all the mentors, the community will grow more healthily in the future.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="join-community">Join Community<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#join-community" class="hash-link" aria-label="Direct link to Join Community" title="Direct link to Join Community" translate="no"></a></h2>
+<p><strong>Open Source</strong></p>
+<ul>
+<li class=""><a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+</ul>
+<p><strong>Website</strong></p>
+<ul>
+<li class=""><a href="https://fesod.apache.org/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+</ul>
+<p><strong>Mailing Lists</strong></p>
+<ul>
+<li class=""><a href="mailto:dev@fesod.apache.org" target="_blank" rel="noopener noreferrer" class="">dev@fesod.apache.org</a></li>
+</ul>]]></content>
+ <category label="announcement" term="announcement"/>
+ </entry>
+</feed>
\ No newline at end of file
diff --git a/blog/authors/index.html b/blog/authors/index.html
new file mode 100644
index 00000000..e4f9c4c4
--- /dev/null
+++ b/blog/authors/index.html
@@ -0,0 +1,4 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-authors-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Authors | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apache.org [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
\ No newline at end of file
diff --git a/blog/feed.json b/blog/feed.json
new file mode 100644
index 00000000..7929528f
--- /dev/null
+++ b/blog/feed.json
@@ -0,0 +1,101 @@
+{
+ "version": "https://jsonfeed.org/version/1",
+ "title": "Apache Fesod (Incubating) Blog",
+ "home_page_url": "https://fesod.apache.org/blog",
+ "description": "Apache Fesod (Incubating) Blog",
+ "items": [
+ {
+ "id": "https://fesod.apache.org/blog/2026/06/11/cve-2026-49328",
+ "content_html": "\n<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_PvLN\" id=\"description\">Description<a href=\"https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#description\" class=\"hash-link\" aria-label=\"Direct link to Description\" title=\"Direct link to Description\" translate=\"no\"></a></h2>\n<p>Server-Side Request Fo [...]
+ "url": "https://fesod.apache.org/blog/2026/06/11/cve-2026-49328",
+ "title": "CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF",
+ "summary": "Security advisory for CVE-2026-49328.",
+ "date_modified": "2026-06-11T00:00:00.000Z",
+ "tags": [
+ "announcement",
+ "security",
+ "CVE-2026-49328"
+ ]
+ },
+ {
+ "id": "https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite",
+ "content_html": "\n<blockquote>\n<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>\n</blockquote>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_PvLN\" id=\"background\">Background<a href=\"https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openr [...]
+ "url": "https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite",
+ "title": "Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite",
+ "summary": "Migrate FastExcel 1.3 to Apache Fesod (Incubating) 2.0.1-incubating",
+ "date_modified": "2026-05-07T00:00:00.000Z",
+ "author": {
+ "name": "Jing Yang",
+ "url": "https://github.com/bengbengbalabalabeng"
+ },
+ "tags": [
+ "migration",
+ "fastexcel",
+ "fesod"
+ ]
+ },
+ {
+ "id": "https://fesod.apache.org/blog/2026/04/29/from-user-to-committer",
+ "content_html": "\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Apache Fesod New Committer\" src=\"data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIE [...]
+ "url": "https://fesod.apache.org/blog/2026/04/29/from-user-to-committer",
+ "title": "From User to Committer",
+ "summary": "From User to Committer",
+ "date_modified": "2026-04-29T00:00:00.000Z",
+ "author": {
+ "name": "Jing Yang",
+ "url": "https://github.com/bengbengbalabalabeng"
+ },
+ "tags": [
+ "opensource",
+ "apache",
+ "committer",
+ "fesod"
+ ]
+ },
+ {
+ "id": "https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released",
+ "content_html": "\n<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>\n<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive c [...]
+ "url": "https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released",
+ "title": "Apache Fesod (Incubating) 2.0.1-incubating Officially Released",
+ "summary": "The Apache Fesod community is pleased to announce the official release of Apache Fesod (Incubating) 2.0.1-incubating.",
+ "date_modified": "2026-02-27T00:00:00.000Z",
+ "author": {
+ "name": "Shuxin Pan",
+ "url": "https://github.com/psxjoy"
+ },
+ "tags": [
+ "announcement",
+ "release"
+ ]
+ },
+ {
+ "id": "https://fesod.apache.org/blog/2026/02/27/welcome-new-committer",
+ "content_html": "\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Apache Fesod New Committer\" src=\"data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIE [...]
+ "url": "https://fesod.apache.org/blog/2026/02/27/welcome-new-committer",
+ "title": "Welcome Apache Fesod's New Committer",
+ "summary": "Welcome Apache Fesod's New Committer",
+ "date_modified": "2026-02-27T00:00:00.000Z",
+ "author": {
+ "name": "Zhongqiang Gong",
+ "url": "https://github.com/GOODBOY008"
+ },
+ "tags": [
+ "opensource",
+ "apache",
+ "committer",
+ "fesod"
+ ]
+ },
+ {
+ "id": "https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator",
+ "content_html": "\n<p>On September 17, 2025, Beijing time, <a href=\"https://github.com/apache/fesod\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Fesod</a> successfully passed the voting resolution\nof the Apache Foundation Incubator.\nAccording to the Apache Foundation <a href=\"https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">mailing list</a>, it\nwas approved with 9 binding votes, with [...]
+ "url": "https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator",
+ "title": "Way to Go: Fesod successfully entered Apache Incubator",
+ "summary": "Fesod successfully entered Apache Incubator.",
+ "date_modified": "2025-09-17T00:00:00.000Z",
+ "tags": [
+ "announcement"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 00000000..2f089afb
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,25 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Blog | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apache.org/img/logo.s [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/security>security</a><li class=tag_S0HX><a [...]
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/migration>migration</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fastexcel>fastexcel</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fesod>fesod</a></ul></div><div class="col text--right col--3"><a [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" h [...]
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</div><footer [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>opensource</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/apache>apache</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/committer>committer</a><li class=tag_S0HX><a rel=tag class="tag_dy1y [...]
+<p>On September 17, 2025, Beijing time, <a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">Fesod</a> successfully passed the voting resolution
+of the Apache Foundation Incubator.
+According to the Apache Foundation <a href=https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f target=_blank rel="noopener noreferrer" class="">mailing list</a>, it
+was approved with 9 binding votes, with no abstentions or opposing
+votes, to accept Fesod into the Apache Incubator. This marked its official status as an incubation project under the
+<a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class="">Apache Software Foundation</a>, the world's largest open-source foundation. On September 25,
+2025, the Fesod repository was
+officially transferred to the Apache Software Foundation.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a></ul></div><div class="col text--right col--3"><a aria-label="Read more about Way to Go: Fesod successfully entered Apache Incubator" href=/blog/2025/09/17/fesod-entered-apache-incubator><b>Read m [...]
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
new file mode 100644
index 00000000..7ca3bd5e
--- /dev/null
+++ b/blog/rss.xml
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+ <channel>
+ <title>Apache Fesod (Incubating) Blog</title>
+ <link>https://fesod.apache.org/blog</link>
+ <description>Apache Fesod (Incubating) Blog</description>
+ <lastBuildDate>Thu, 11 Jun 2026 00:00:00 GMT</lastBuildDate>
+ <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
+ <generator>https://github.com/jpmonette/feed</generator>
+ <language>en</language>
+ <item>
+ <title><![CDATA[CVE-2026-49328 - Apache Fesod (Incubating): Improper validation of user-supplied URLs leading to SSRF]]></title>
+ <link>https://fesod.apache.org/blog/2026/06/11/cve-2026-49328</link>
+ <guid>https://fesod.apache.org/blog/2026/06/11/cve-2026-49328</guid>
+ <pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate>
+ <description><![CDATA[Security advisory for CVE-2026-49328.]]></description>
+ <content:encoded><![CDATA[
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="description">Description<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#description" class="hash-link" aria-label="Direct link to Description" title="Direct link to Description" translate="no"></a></h2>
+<p>Server-Side Request Forgery (SSRF) in the <code>UrlImageConverter</code> component of Apache Fesod (Incubating) <code>fesod-sheet</code> allows attackers to cause outbound network requests to internal or otherwise restricted resources via a user-supplied image URL.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="affected-modules-and-versions">Affected Modules and Versions<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#affected-modules-and-versions" class="hash-link" aria-label="Direct link to Affected Modules and Versions" title="Direct link to Affected Modules and Versions" translate="no"></a></h2>
+<p>Fesod Spreadsheet (<code>fesod-sheet</code>):</p>
+<ul>
+<li class="">2.0.1-incubating</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="mitigation">Mitigation<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#mitigation" class="hash-link" aria-label="Direct link to Mitigation" title="Direct link to Mitigation" translate="no"></a></h2>
+<p>Users of affected versions should upgrade to the corresponding fixed version.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Affected version(s)</th><th>Fix version</th></tr></thead><tbody><tr><td>2.0.1-incubating</td><td>2.0.2-incubating</td></tr></tbody></table>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="references">References<a href="https://fesod.apache.org/blog/2026/06/11/cve-2026-49328#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no"></a></h2>
+<ul>
+<li class=""><a href="https://github.com/apache/fesod/pull/917" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod/pull/917</a></li>
+<li class=""><a href="https://github.com/apache/fesod/releases/tag/2.0.2-incubating" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod/releases/tag/2.0.2-incubating</a></li>
+<li class=""><a href="https://fesod.apache.org/docs/download" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/download</a></li>
+<li class=""><a href="https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj" target="_blank" rel="noopener noreferrer" class="">https://lists.apache.org/thread/c1pb5b66h02p9tlrnfbwcgcz85v16fkj</a></li>
+</ul>]]></content:encoded>
+ <category>announcement</category>
+ <category>security</category>
+ <category>CVE-2026-49328</category>
+ </item>
+ <item>
+ <title><![CDATA[Automated Migration from FastExcel 1.3.0 to Apache Fesod (Incubating) with OpenRewrite]]></title>
+ <link>https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite</link>
+ <guid>https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite</guid>
+ <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
+ <description><![CDATA[Migrate FastExcel 1.3 to Apache Fesod (Incubating) 2.0.1-incubating]]></description>
+ <content:encoded><![CDATA[
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="background">Background<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background" translate="no"></a></h2>
+<p>FastExcel (<code>cn.idev.excel</code>) has been donated to the Apache Software Foundation and is now incubating as <strong>Apache Fesod (Incubating)</strong>. The core change is a <strong>Java package path replacement</strong> — the API, annotations, and processing logic remain identical, making this a low-risk, mechanical refactoring.</p>
+<p>For the official migration strategy, see: <a href="https://fesod.apache.org/docs/migration/from-fastexcel/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></p>
+<p>Manually replacing imports file by file is tedious and error-prone. OpenRewrite provides AST-level code transformation capabilities to perform this kind of bulk migration precisely and safely.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="migration-scope">Migration Scope<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#migration-scope" class="hash-link" aria-label="Direct link to Migration Scope" title="Direct link to Migration Scope" translate="no"></a></h2>
+<ol>
+<li class="">Update Maven/Gradle dependencies</li>
+<li class="">Replace deprecated class names with <code>FesodSheet</code></li>
+<li class="">Update package imports</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="writing-the-openrewrite-recipe">Writing the OpenRewrite Recipe<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#writing-the-openrewrite-recipe" class="hash-link" aria-label="Direct link to Writing the OpenRewrite Recipe" title="Direct link to Writing the OpenRewrite Recipe" translate="no"></a></h2>
+<p>Create a <code>rewrite.yml</code> file in your project root:</p>
+<div class="language-yaml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-yaml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></div><div class= [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="how-it-works">How It Works<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no"></a></h3>
+<p>The recipe executes steps sequentially in declaration order:</p>
+<p><strong>Step 1 — Update Dependencies</strong>: The first rule updates <code>pom.xml</code> for Maven projects; the second rule updates <code>build.gradle</code> / <code>build.gradle.kts</code> for Gradle projects. If your project uses only one build tool, the other rule is silently skipped.</p>
+<p><strong>Step 2 — Package Import Updates</strong>: <code>ChangePackage(recursive=true)</code> covers all sub-packages under <code>cn.idev.excel</code> (annotation, read, write, converters, enums, etc.) in a single rule — no need to enumerate each one individually. The second rule handles legacy code that was already partially migrated to <code>org.apache.fesod.excel</code>. After this step, imports like <code>cn.idev.excel.FastExcel</code> become <code>org.apache.fesod.sheet.FastExcel< [...]
+<p><strong>Step 3 — Entry Class Rename</strong>: Once Step 2 completes, all <code>FastExcel</code> and <code>FastExcelFactory</code> imports are unified under <code>org.apache.fesod.sheet</code>. Only two <code>ChangeType</code> rules are needed to rename them to the canonical <code>FesodSheet</code> class, automatically updating all call sites (<code>FastExcel.read()</code>, <code>FastExcel.write()</code>, etc.) and type references (variable declarations, class literals).</p>
+<p><strong>Step 4 — CGLIB String Replacement</strong>: Only affects code that references CGLIB-generated class names at runtime. Most projects don't need this step — the rule is silently skipped if there's no match.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="adding-openrewrite-to-your-project">Adding OpenRewrite to Your Project<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#adding-openrewrite-to-your-project" class="hash-link" aria-label="Direct link to Adding OpenRewrite to Your Project" title="Direct link to Adding OpenRewrite to Your Project" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="maven">Maven<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#maven" class="hash-link" aria-label="Direct link to Maven" title="Direct link to Maven" translate="no"></a></h3>
+<p>Add the plugin to <code>pom.xml</code>:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">plugi [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="gradle-groovy">Gradle (Groovy)<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#gradle-groovy" class="hash-link" aria-label="Direct link to Gradle (Groovy)" title="Direct link to Gradle (Groovy)" translate="no"></a></h3>
+<p>Add to <code>build.gradle</code>:</p>
+<div class="language-groovy codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-groovy codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token plain">plugins {</span><br></div><div class="token-line" style="color:#393A34"><span class="tok [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="gradle-kotlin">Gradle (Kotlin)<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#gradle-kotlin" class="hash-link" aria-label="Direct link to Gradle (Kotlin)" title="Direct link to Gradle (Kotlin)" translate="no"></a></h3>
+<p>Add to <code>build.gradle.kts</code>:</p>
+<div class="language-kotlin codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-kotlin codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token plain">plugins </span><span class="token punctuation" style="color:#393A34">{</span><span class [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="running-the-migration">Running the Migration<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#running-the-migration" class="hash-link" aria-label="Direct link to Running the Migration" title="Direct link to Running the Migration" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="preview-changes">Preview Changes<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#preview-changes" class="hash-link" aria-label="Direct link to Preview Changes" title="Direct link to Preview Changes" translate="no"></a></h3>
+<p>View what the recipe would change without modifying files:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Maven</span><span class="token plain"></span><br [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="apply-changes">Apply Changes<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#apply-changes" class="hash-link" aria-label="Direct link to Apply Changes" title="Direct link to Apply Changes" translate="no"></a></h3>
+<p>Once satisfied with the preview, apply the changes:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Maven</span><span class="token plain"></span><br [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="verify">Verify<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#verify" class="hash-link" aria-label="Direct link to Verify" title="Direct link to Verify" translate="no"></a></h3>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Compile check</span><span class="token plain"></ [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="before-and-after">Before and After<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#before-and-after" class="hash-link" aria-label="Direct link to Before and After" title="Direct link to Before and After" translate="no"></a></h2>
+<p>Before migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token im [...]
+<p>After migration:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token im [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="references">References<a href="https://fesod.apache.org/blog/2026/05/07/migration-from-fastexcel-with-openrewrite#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no"></a></h2>
+<ul>
+<li class="">Apache Fesod (Incubating) Official Migration Guide: <a href="https://fesod.apache.org/docs/migration/from-fastexcel/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/docs/migration/from-fastexcel/</a></li>
+<li class="">OpenRewrite Documentation: <a href="https://docs.openrewrite.org/" target="_blank" rel="noopener noreferrer" class="">https://docs.openrewrite.org/</a></li>
+<li class="">OpenRewrite Recipe Reference: <a href="https://docs.openrewrite.org/recipes" target="_blank" rel="noopener noreferrer" class="">https://docs.openrewrite.org/recipes</a></li>
+</ul>]]></content:encoded>
+ <category>migration</category>
+ <category>fastexcel</category>
+ <category>fesod</category>
+ </item>
+ <item>
+ <title><![CDATA[From User to Committer]]></title>
+ <link>https://fesod.apache.org/blog/2026/04/29/from-user-to-committer</link>
+ <guid>https://fesod.apache.org/blog/2026/04/29/from-user-to-committer</guid>
+ <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
+ <description><![CDATA[From User to Committer]]></description>
+ <content:encoded><![CDATA[
+<p><img decoding="async" loading="lazy" alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxp [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-first-encounter-with-apache-fesod-incubating">My First Encounter with Apache Fesod (Incubating)<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-first-encounter-with-apache-fesod-incubating" class="hash-link" aria-label="Direct link to My First Encounter with Apache Fesod (Incubating)" title="Direct link to My First Encounter with Apache Fesod (Incubating)" translate="no"></a></h2>
+<p>In my work as a Java developer, I frequently encountered the need to process complex Excel files. It was while searching for an efficient solution to this challenge that I first discovered FastExcel. It quickly became an essential tool, significantly simplifying the complexity of handling Excel data in our daily development.</p>
+<p>Later on, some exciting news broke: FastExcel was being donated to the Apache Software Foundation, officially entering the incubator and rebranding as <strong>Apache Fesod (Incubating)</strong>. At that moment, I felt the project's vitality had been elevated to a whole new level. It combined the <strong>massive influence and solid user base</strong> established during the FastExcel days with the <strong>huge, untapped potential</strong> of the Apache open-source ecosystem. Seeing such [...]
+<p>From there, I started following the community closely. I went from quietly lurking, to participating in Issue discussions, and finally submitting my very first PR (<a href="https://github.com/apache/fesod/pull/668" target="_blank" rel="noopener noreferrer" class="">#668</a>).</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-contributions">My Contributions<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-contributions" class="hash-link" aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate="no"></a></h2>
+<p>After the thrill of having my first PR merged, I stopped limiting myself to isolated bug fixes and started looking at the project from a more holistic perspective. My main areas of contribution have included:</p>
+<ul>
+<li class=""><strong>Building out the Documentation System</strong></li>
+<li class=""><strong>Bug Fixes</strong></li>
+<li class=""><strong>Improving the Testing Framework</strong></li>
+<li class=""><strong>Feature Enhancements</strong></li>
+<li class=""><strong>Community Engagement</strong></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-takeaways">My Takeaways<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#my-takeaways" class="hash-link" aria-label="Direct link to My Takeaways" title="Direct link to My Takeaways" translate="no"></a></h2>
+<p>Throughout my involvement with Apache Fesod (Incubating), I've come to deeply realize that:</p>
+<ul>
+<li class=""><strong>Open source is about collaboration, not just writing code.</strong> Every single step—Issues, PRs, Code Reviews, and discussions—requires clear communication and patience.</li>
+<li class=""><strong>Small contributions can make a massive impact.</strong> Fixing a simple typo or adding a code snippet can potentially help thousands of users.</li>
+<li class=""><strong>The power of the community far exceeds that of any individual.</strong> Every discussion and every consensus reached makes the project that much better.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="looking-ahead">Looking Ahead<a href="https://fesod.apache.org/blog/2026/04/29/from-user-to-committer#looking-ahead" class="hash-link" aria-label="Direct link to Looking Ahead" title="Direct link to Looking Ahead" translate="no"></a></h2>
+<p>Becoming a Committer is by no means the finish line; rather, it is a brand-new starting point. It comes with greater responsibilities and higher expectations. I am incredibly excited to continue working alongside the community to make Apache Fesod (Incubating) even better.</p>]]></content:encoded>
+ <category>opensource</category>
+ <category>apache</category>
+ <category>committer</category>
+ <category>fesod</category>
+ </item>
+ <item>
+ <title><![CDATA[Apache Fesod (Incubating) 2.0.1-incubating Officially Released]]></title>
+ <link>https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released</link>
+ <guid>https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released</guid>
+ <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
+ <description><![CDATA[The Apache Fesod community is pleased to announce the official release of Apache Fesod (Incubating) 2.0.1-incubating.]]></description>
+ <content:encoded><![CDATA[
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</p>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="milestone-significance-the-first-official-asf-release">Milestone Significance: The First Official ASF Release<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#milestone-significance-the-first-official-asf-release" class="hash-link" aria-label="Direct link to Milestone Significance: The First Official ASF Release" title="Direct link to Milestone Significance: The First Official ASF Release" transla [...]
+<p>As our "debut" in the incubator, version 2.0.1 represents a decisive step forward in embracing <strong>"The Apache Way"</strong>:</p>
+<ul>
+<li class=""><strong>Comprehensive Renaming & Compliance:</strong> We have completed the full transition from <code>FastExcel</code> to <code>Fesod</code> (including package names, class names, and documentation) to ensure the brand is fully protected under the ASF.</li>
+<li class=""><strong>Compliance Completion:</strong> We have introduced the <code>DISCLAIMER</code>, <code>NOTICE</code>, and <code>support</code> modules, and implemented automated License Header management via Spotless, fully aligning with ASF policies.</li>
+<li class=""><strong>Community Governance:</strong> All code merges and release processes were conducted through public discussion and voting on the mailing lists, reflecting the principles of openness and transparency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="key-highlights">Key Highlights<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#key-highlights" class="hash-link" aria-label="Direct link to Key Highlights" title="Direct link to Key Highlights" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="1-deep-architectural-refactoring">1. Deep Architectural Refactoring<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#1-deep-architectural-refactoring" class="hash-link" aria-label="Direct link to 1. Deep Architectural Refactoring" title="Direct link to 1. Deep Architectural Refactoring" translate="no"></a></h3>
+<p>To support long-term sustainability, we have significantly optimized the project structure:</p>
+<ul>
+<li class=""><strong>Multi-module Architecture:</strong> Introduced a multi-module structure for clearer hierarchy and finer dependency management.</li>
+<li class=""><strong>Distribution Enhancement:</strong> Added the <code>fesod-distribution</code> module to standardize the description and building of distribution packages.</li>
+<li class=""><strong>JDK 25 Support:</strong> Keeping pace with the Java ecosystem, we have officially added compatibility and support for <strong>JDK 25</strong>.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="2-new-features">2. New Features<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#2-new-features" class="hash-link" aria-label="Direct link to 2. New Features" title="Direct link to 2. New Features" translate="no"></a></h3>
+<p>This release introduces several practical features to enhance the flexibility of Excel processing:</p>
+<ul>
+<li class=""><strong>Enhanced Excel Processing:</strong> Added the <code>afterSheetDispose</code> lifecycle method in <code>SheetWriteHandler</code> and introduced a brand-new <strong>Header Merge Strategy</strong>.</li>
+<li class=""><strong>Legacy Format Compatibility:</strong> Gracefully handles very old Excel BIFF formats to prevent runtime crashes.</li>
+<li class=""><strong>Flexible Control:</strong> Added the <code>autoStrip</code> parameter and introduced validation for maximum Sheet name length in <code>Workbook</code> constants.</li>
+<li class=""><strong>Website Experience:</strong> Added local search functionality and Matomo analytics to the official documentation, with optimized display for mobile devices.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="3-stability--robustness">3. Stability & Robustness<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#3-stability--robustness" class="hash-link" aria-label="Direct link to 3. Stability & Robustness" title="Direct link to 3. Stability & Robustness" translate="no"></a></h3>
+<p>We have invested heavily in quality assurance:</p>
+<ul>
+<li class=""><strong>Fuzz Testing:</strong> Added daily fuzz testing for Excel reading to proactively identify potential crashes when processing malformed files.</li>
+<li class=""><strong>Dependency Security:</strong> Upgraded core dependencies including Spring-core, Logback, Fastjson2, and POI (to 5.5.1) to resolve known vulnerabilities.</li>
+<li class=""><strong>CI/CD Optimization:</strong> Introduced Netlify preview deployments and automated workflows for closing stale issues, significantly improving community collaboration efficiency.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="key-changes-at-a-glance">Key Changes at a Glance<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#key-changes-at-a-glance" class="hash-link" aria-label="Direct link to Key Changes at a Glance" title="Direct link to Key Changes at a Glance" translate="no"></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="features"><strong>Features</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#features" class="hash-link" aria-label="Direct link to features" title="Direct link to features" translate="no"></a></h3>
+<ul>
+<li class="">Added <code>afterSheetDispose</code> method to <code>SheetWriteHandler</code>.</li>
+<li class="">Introduced Header Merge Strategy for Excel writing.</li>
+<li class="">Added GitHub Actions for Netlify preview deployments.</li>
+<li class="">Integrated <code>docusaurus-search-local</code> for official website search.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="bugfixes"><strong>Bugfixes</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#bugfixes" class="hash-link" aria-label="Direct link to bugfixes" title="Direct link to bugfixes" translate="no"></a></h3>
+<ul>
+<li class="">Fixed NPE in the <code>WriteSheetWorkbookWriteHandler</code> class.</li>
+<li class="">Fixed broken links and incorrect code examples in the documentation.</li>
+<li class="">Updated import statements to use the shaded <code>cglib</code> package.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="refactoring"><strong>Refactoring</strong><a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#refactoring" class="hash-link" aria-label="Direct link to refactoring" title="Direct link to refactoring" translate="no"></a></h3>
+<ul>
+<li class="">Renamed project to Fesod/FesodSheet and updated package structures to align with Apache naming conventions.</li>
+<li class="">Implemented Spotless for automated License Header management.</li>
+<li class="">Removed outdated and incorrect <code>@since</code> tags.</li>
+</ul>
+<blockquote>
+<p>For a detailed list of changes, please refer to the <a href="https://github.com/apache/fesod/releases/tag/2.0.1-incubating" target="_blank" rel="noopener noreferrer" class="">GitHub Release Notes</a>.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="acknowledgments">Acknowledgments<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#acknowledgments" class="hash-link" aria-label="Direct link to Acknowledgments" title="Direct link to Acknowledgments" translate="no"></a></h2>
+<p>"Community Over Code" is the core philosophy of the Apache Software Foundation. We would like to thank all the developers, mentors, and community members who contributed to this release.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id="new-contributors">New Contributors<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#new-contributors" class="hash-link" aria-label="Direct link to New Contributors" title="Direct link to New Contributors" translate="no"></a></h3>
+<p>We would like to extend a warm welcome and a special thank you to the <strong>14 new members</strong> who made their first contribution in this release:</p>
+<blockquote>
+<p>@X-qinghai, @ngocnhan-tran1996, @YIminta, @jounghu, @wlgusqkr, @gaushon, @GOODBOY008, @ongdisheng, @harshasiddartha, @pjfanning, @liugddx, @hezhangjian, @bengbengbalabalabeng</p>
+</blockquote>
+<p>Special thanks to <strong>@delei, @psxjoy, @alaahong, @ongdisheng, @GOODBOY008</strong>, and everyone who submitted PRs and suggestions on GitHub. Your tireless efforts in renaming, compliance checking, CI optimization, and feature improvements have made Fesod's ASF debut a success.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="how-to-get-involved">How to Get Involved<a href="https://fesod.apache.org/blog/2026/02/27/apache-fesod-2-0-1-incubating-released#how-to-get-involved" class="hash-link" aria-label="Direct link to How to Get Involved" title="Direct link to How to Get Involved" translate="no"></a></h2>
+<p>You can download and experience the new Apache Fesod (Incubating) through the following channels:</p>
+<ul>
+<li class=""><strong>Official Website:</strong> <a href="https://fesod.apache.org/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+<li class=""><strong>Source Code:</strong> <a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+<li class=""><strong>Maven Central:</strong></li>
+</ul>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7fYh"><pre tabindex="0" class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_S3_k"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">depen [...]
+<p><strong>Join Us!</strong>
+The Apache Fesod (Incubating) community is always open to new contributors. You can reach out to us by subscribing to the mailing list at <code>dev@fesod.apache.org</code> or by submitting issues on GitHub.</p>
+<p>We look forward to growing together within the Apache Incubator!</p>]]></content:encoded>
+ <category>announcement</category>
+ <category>release</category>
+ </item>
+ <item>
+ <title><![CDATA[Welcome Apache Fesod's New Committer]]></title>
+ <link>https://fesod.apache.org/blog/2026/02/27/welcome-new-committer</link>
+ <guid>https://fesod.apache.org/blog/2026/02/27/welcome-new-committer</guid>
+ <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
+ <description><![CDATA[Welcome Apache Fesod's New Committer]]></description>
+ <content:encoded><![CDATA[
+<p><img decoding="async" loading="lazy" alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxp [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote>
+<!-- -->
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="self-introduction">Self-Introduction<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#self-introduction" class="hash-link" aria-label="Direct link to Self-Introduction" title="Direct link to Self-Introduction" translate="no"></a></h2>
+<p>My name is Zhongqiang Gong (GitHub: <a href="https://github.com/GOODBOY008" target="_blank" rel="noopener noreferrer" class="">GOODBOY008</a>). I'm a software engineer passionate about open source and the Java ecosystem, and also an <strong>Apache Flink Committer</strong> and <strong>Apache StreamPark Committer</strong>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="first-encounter-with-apache-fesod">First Encounter with Apache Fesod<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#first-encounter-with-apache-fesod" class="hash-link" aria-label="Direct link to First Encounter with Apache Fesod" title="Direct link to First Encounter with Apache Fesod" translate="no"></a></h2>
+<p>I first came across Fesod in <strong>September 2025</strong>, shortly after it entered the Apache Incubation stage. As a widely adopted Java spreadsheet processing library, it already had a solid user base — but under Apache governance, the project was brimming with room to grow. That combination of real-world impact and untapped potential drew me in, and I knew I wanted to be part of shaping its future in the open.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="my-contributions">My Contributions<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#my-contributions" class="hash-link" aria-label="Direct link to My Contributions" title="Direct link to My Contributions" translate="no"></a></h2>
+<p>Since joining the community, my contributions have spanned six key areas:</p>
+<ul>
+<li class=""><strong>Branding</strong> — Drove the systematic FastExcel → FesodSheet transition across the entire codebase, from core classes and test suites to examples and user-facing error messages.</li>
+<li class=""><strong>Code Quality</strong> — Eliminated duplicate utility classes, streamlined Lombok usage, and refined test assertion patterns to improve maintainability.</li>
+<li class=""><strong>CI/CD</strong> — Introduced concurrency control, path-based filtering, and fork protection to GitHub Actions, making the pipeline faster and more cost-efficient.</li>
+<li class=""><strong>Documentation</strong> — Authored a bilingual migration guide (English & Chinese) and enhanced the documentation site's navigation structure.</li>
+<li class=""><strong>Testing & Performance</strong> — Established a shared testkit infrastructure that significantly reduced test duplication, and introduced JMH-based benchmarking for performance validation.</li>
+<li class=""><strong>Architecture</strong> — Proposed and led discussions on examples module restructuring, modern testing patterns, and a long-term performance testing framework.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="what-i-learned">What I Learned<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#what-i-learned" class="hash-link" aria-label="Direct link to What I Learned" title="Direct link to What I Learned" translate="no"></a></h2>
+<p>Contributing to Apache projects taught me three things: <strong>community over code</strong> — consensus and transparency matter more than any single PR; <strong>start small, think big</strong> — my first small CI fix (<a href="https://github.com/apache/fesod/pull/664" target="_blank" rel="noopener noreferrer" class="">#664</a>) led to deep infrastructure improvements; and <strong>quality compounds</strong> — every small cleanup adds up to a healthier codebase over time.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="advice-for-new-contributors">Advice for New Contributors<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#advice-for-new-contributors" class="hash-link" aria-label="Direct link to Advice for New Contributors" title="Direct link to Advice for New Contributors" translate="no"></a></h2>
+<ol>
+<li class=""><strong>Just start.</strong> Find a "good first issue" and take the first step — that's the hardest part.</li>
+<li class=""><strong>Read before you write.</strong> Understand the project's architecture and conventions first.</li>
+<li class=""><strong>Communicate openly.</strong> Clear issues and PRs earn trust faster than code alone.</li>
+<li class=""><strong>Think long-term.</strong> Proposals, docs, and infrastructure improvements are contributions too.</li>
+<li class=""><strong>Be patient.</strong> Consistency matters more than speed.</li>
+</ol>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="looking-forward">Looking Forward<a href="https://fesod.apache.org/blog/2026/02/27/welcome-new-committer#looking-forward" class="hash-link" aria-label="Direct link to Looking Forward" title="Direct link to Looking Forward" translate="no"></a></h2>
+<p>Becoming a Committer is a new beginning. I'm committed to improving Fesod's code quality, mentoring new contributors, driving the benchmarking framework forward, and supporting Fesod's journey toward Apache graduation.</p>]]></content:encoded>
+ <category>opensource</category>
+ <category>apache</category>
+ <category>committer</category>
+ <category>fesod</category>
+ </item>
+ <item>
+ <title><![CDATA[Way to Go: Fesod successfully entered Apache Incubator]]></title>
+ <link>https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator</link>
+ <guid>https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator</guid>
+ <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[Fesod successfully entered Apache Incubator.]]></description>
+ <content:encoded><![CDATA[
+<p>On September 17, 2025, Beijing time, <a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">Fesod</a> successfully passed the voting resolution
+of the Apache Foundation Incubator.
+According to the Apache Foundation <a href="https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f" target="_blank" rel="noopener noreferrer" class="">mailing list</a>, it
+was approved with 9 binding votes, with no abstentions or opposing
+votes, to accept Fesod into the Apache Incubator. This marked its official status as an incubation project under the
+<a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache Software Foundation</a>, the world's largest open-source foundation. On September 25,
+2025, the Fesod repository was
+officially transferred to the Apache Software Foundation.</p>
+<!-- -->
+<p>Fesod was originally named FastExcel and was officially open-sourced on GitHub in October 2024. With continuous project
+maintenance and iteration by the community members, as well as the continuous growth of the community, now the Fesod
+project has officially been announced to join the Apache Incubator. This marks a new beginning for the Fesod project,
+indicating that open-source community collaboration will become more standardized and internationalized!</p>
+<p><img decoding="async" loading="lazy" alt="blog-20250917" src="https://fesod.apache.org/assets/images/20250917-01-e2db1d5bffc9ab4c98ce8f55ece35090.png" width="1207" height="1595" class="img_Q0Px"></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="introduction">Introduction<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no"></a></h2>
+<p>Apache Fesod (Incubating) is a high-performance and memory-efficient Java library for reading and writing
+spreadsheet files, designed to simplify development and ensure reliability. The name fesod (pronounced <code>/ˈfɛsɒd/</code>), an
+acronym for "fast easy spreadsheet and other documents," expresses the project's origin, background, and vision.</p>
+<p>Apache Fesod (Incubating) can provide developers and enterprises with great freedom and flexibility. We plan to
+introduce more new features in the future to continually enhance user experience and tool usability. Apache Fesod (
+Incubating) is committed to being your best choice for handling spreadsheet files.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="features">Features<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features" translate="no"></a></h2>
+<ul>
+<li class=""><strong>High-performance Reading and Writing</strong>: Apache Fesod (Incubating) focuses on performance optimization, capable of
+efficiently handling large-scale spreadsheet data. Compared to some traditional spreadsheet processing libraries, it
+can
+significantly reduce memory consumption.</li>
+<li class=""><strong>Simplicity and Ease of Use</strong>: The library offers a simple and intuitive API, allowing developers to easily integrate
+it into projects, whether for simple spreadsheet operations or complex data processing.</li>
+<li class=""><strong>Stream Operations</strong>: Apache Fesod (Incubating) supports stream reading, minimizing the problem of loading large
+amounts of data at once. This design is especially important when dealing with hundreds of thousands or even millions
+of rows of data.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="current-development-status">Current Development Status<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#current-development-status" class="hash-link" aria-label="Direct link to Current Development Status" title="Direct link to Current Development Status" translate="no"></a></h2>
+<p>The project was initiated by the original core maintainer in 2024, aiming to provide a more efficient Excel processing
+solution and ensure long-term sustainable maintenance. Since its open-source status, a small community has been
+initially established. The main repository has received a total of <strong>5.0K+</strong> stars on GitHub, has released community
+versions <strong>5</strong> times, and has <strong>20+</strong> contributors.
+We have received continuous widespread attention and support from the community, which is both a recognition of our past
+work and an expectation for our future development.</p>
+<p><img decoding="async" loading="lazy" alt="blog-20250917" src="https://fesod.apache.org/assets/images/20250917-02-8ffdd34d6cbc80004f5404c95a83de58.png" width="826" height="551" class="img_Q0Px"></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="why-join-the-apache-incubator">Why Join the Apache Incubator<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#why-join-the-apache-incubator" class="hash-link" aria-label="Direct link to Why Join the Apache Incubator" title="Direct link to Why Join the Apache Incubator" translate="no"></a></h2>
+<p>Joining the Apache Incubator is mainly based on the following reasons:</p>
+<ul>
+<li class="">Under the guidance of the Apache Mature Open Source Foundation, the collaboration of open source projects and the
+operation of community governance will become more standardized.</li>
+<li class="">Build a more prosperous and diverse developer community. We hope to attract more outstanding developers from home and
+abroad to join, making the developer community more diverse.</li>
+<li class="">Expand the application scope and encourage its integration into more open source and commercial projects, promoting
+the development of new use cases and functions.</li>
+</ul>
+<p>Next, the community will be guided by the Apache incubator mentors to manage and operate the community in accordance
+with the concept of "Community over Code", and also ensure that every outstanding contributor can be recognized. At the
+level of open-source products, listen to user feedback, improve and optimize the product usage experience, and build
+connections with the open-source ecosystem.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="introduction-of-the-supervisor">Introduction of the Supervisor<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#introduction-of-the-supervisor" class="hash-link" aria-label="Direct link to Introduction of the Supervisor" title="Direct link to Introduction of the Supervisor" translate="no"></a></h2>
+<ul>
+<li class="">tison(Champion)</li>
+<li class="">Dave Fisher</li>
+<li class="">PJ Fanning</li>
+<li class="">Huajie Wang</li>
+</ul>
+<p>Thank you all for your selfless assistance. You provided professional guidance in terms of compliance and process
+advancement. Special thanks to the project Champion, @tison. During the project's journey into the incubator, he/she led
+the entire process from the drafting stage of the proposal to discussions and ultimately to the initiation of voting,
+offering many valuable professional suggestions and guidance.</p>
+<p>We believe that with the guidance of all the mentors, the community will grow more healthily in the future.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id="join-community">Join Community<a href="https://fesod.apache.org/blog/2025/09/17/fesod-entered-apache-incubator#join-community" class="hash-link" aria-label="Direct link to Join Community" title="Direct link to Join Community" translate="no"></a></h2>
+<p><strong>Open Source</strong></p>
+<ul>
+<li class=""><a href="https://github.com/apache/fesod" target="_blank" rel="noopener noreferrer" class="">https://github.com/apache/fesod</a></li>
+</ul>
+<p><strong>Website</strong></p>
+<ul>
+<li class=""><a href="https://fesod.apache.org/" target="_blank" rel="noopener noreferrer" class="">https://fesod.apache.org/</a></li>
+</ul>
+<p><strong>Mailing Lists</strong></p>
+<ul>
+<li class=""><a href="mailto:dev@fesod.apache.org" target="_blank" rel="noopener noreferrer" class="">dev@fesod.apache.org</a></li>
+</ul>]]></content:encoded>
+ <category>announcement</category>
+ </item>
+ </channel>
+</rss>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
new file mode 100644
index 00000000..b7b815f1
--- /dev/null
+++ b/blog/tags/announcement/index.html
@@ -0,0 +1,15 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>3 posts tagged with "announcement" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image con [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/security>security</a><li class=tag_S0HX><a [...]
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</div><footer [...]
+<p>On September 17, 2025, Beijing time, <a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">Fesod</a> successfully passed the voting resolution
+of the Apache Foundation Incubator.
+According to the Apache Foundation <a href=https://lists.apache.org/thread/k744v8ff22mom3bplqkjnc2qvtksj59f target=_blank rel="noopener noreferrer" class="">mailing list</a>, it
+was approved with 9 binding votes, with no abstentions or opposing
+votes, to accept Fesod into the Apache Incubator. This marked its official status as an incubation project under the
+<a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class="">Apache Software Foundation</a>, the world's largest open-source foundation. On September 25,
+2025, the Fesod repository was
+officially transferred to the Apache Software Foundation.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a></ul></div><div class="col text--right col--3"><a aria-label="Read more about Way to Go: Fesod successfully entered Apache Incubator" href=/blog/2025/09/17/fesod-entered-apache-incubator><b>Read m [...]
\ No newline at end of file
diff --git a/blog/tags/apache/index.html b/blog/tags/apache/index.html
new file mode 100644
index 00000000..dbce1c95
--- /dev/null
+++ b/blog/tags/apache/index.html
@@ -0,0 +1,11 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>2 posts tagged with "apache" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=h [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" h [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>opensource</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/apache>apache</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/committer>committer</a><li class=tag_S0HX><a rel=tag class="tag_dy1y [...]
\ No newline at end of file
diff --git a/blog/tags/committer/index.html b/blog/tags/committer/index.html
new file mode 100644
index 00000000..0328bce1
--- /dev/null
+++ b/blog/tags/committer/index.html
@@ -0,0 +1,11 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>2 posts tagged with "committer" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image conten [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" h [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>opensource</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/apache>apache</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/committer>committer</a><li class=tag_S0HX><a rel=tag class="tag_dy1y [...]
\ No newline at end of file
diff --git a/blog/tags/cve-2026-49328/index.html b/blog/tags/cve-2026-49328/index.html
new file mode 100644
index 00000000..ee804e4e
--- /dev/null
+++ b/blog/tags/cve-2026-49328/index.html
@@ -0,0 +1,5 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>One post tagged with "CVE-2026-49328" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/security>security</a><li class=tag_S0HX><a [...]
\ No newline at end of file
diff --git a/blog/tags/fastexcel/index.html b/blog/tags/fastexcel/index.html
new file mode 100644
index 00000000..0ee23044
--- /dev/null
+++ b/blog/tags/fastexcel/index.html
@@ -0,0 +1,7 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>One post tagged with "fastexcel" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image conte [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/migration>migration</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fastexcel>fastexcel</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fesod>fesod</a></ul></div><div class="col text--right col--3"><a [...]
\ No newline at end of file
diff --git a/blog/tags/fesod/index.html b/blog/tags/fesod/index.html
new file mode 100644
index 00000000..c9ed9474
--- /dev/null
+++ b/blog/tags/fesod/index.html
@@ -0,0 +1,14 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>3 posts tagged with "fesod" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=ht [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/migration>migration</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fastexcel>fastexcel</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fesod>fesod</a></ul></div><div class="col text--right col--3"><a [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" h [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>opensource</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/apache>apache</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/committer>committer</a><li class=tag_S0HX><a rel=tag class="tag_dy1y [...]
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
new file mode 100644
index 00000000..ee236ad1
--- /dev/null
+++ b/blog/tags/index.html
@@ -0,0 +1,4 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Tags | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content=https://fesod.apache.org/img/l [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
\ No newline at end of file
diff --git a/blog/tags/migration/index.html b/blog/tags/migration/index.html
new file mode 100644
index 00000000..7061cd84
--- /dev/null
+++ b/blog/tags/migration/index.html
@@ -0,0 +1,7 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>One post tagged with "migration" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image conte [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<blockquote>
+<p>This article demonstrates how to write a declarative OpenRewrite recipe that migrates your project from <code>cn.idev.excel:fastexcel:1.3.0</code> to <code>org.apache.fesod:fesod-sheet:2.0.1-incubating</code>, covering both Maven and Gradle builds.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/migration>migration</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fastexcel>fastexcel</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/fesod>fesod</a></ul></div><div class="col text--right col--3"><a [...]
\ No newline at end of file
diff --git a/blog/tags/opensource/index.html b/blog/tags/opensource/index.html
new file mode 100644
index 00000000..be535336
--- /dev/null
+++ b/blog/tags/opensource/index.html
@@ -0,0 +1,11 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>2 posts tagged with "opensource" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image conte [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<p>Hello everyone, <code>bengbengbalabalabeng</code> here. I am incredibly honored and thrilled to share some great news with you all: I recently received an official invitation to become a Committer for the <strong>Apache Fesod (Incubating)</strong> project.</p>
+<p>From starting out as an everyday user to submitting my first bug fix, and eventually diving deep into code contributions, documentation improvements, and community support—this journey has been incredibly rewarding. I'd like to take this opportunity to document my open-source adventure so far.</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" h [...]
+<p><img decoding=async loading=lazy alt="Apache Fesod New Committer" src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vu [...]
+<blockquote>
+<p>Hello everyone! It's a great honor to be invited by the Apache Fesod community to become a Committer. I'm thrilled to share my open source journey and how I got here.</p>
+</blockquote></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/opensource>opensource</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/apache>apache</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/committer>committer</a><li class=tag_S0HX><a rel=tag class="tag_dy1y [...]
\ No newline at end of file
diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html
new file mode 100644
index 00000000..3481ca61
--- /dev/null
+++ b/blog/tags/release/index.html
@@ -0,0 +1,6 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>One post tagged with "release" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image content [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p><strong>February 2026</strong> — The Apache Fesod (Incubating) community is pleased to announce the official release of <strong>Apache Fesod (Incubating) 2.0.1-incubating</strong>.</p>
+<p>This is not only a technical iteration but also a significant milestone: <strong>the first official release of Fesod since joining the Apache Software Foundation (ASF) Incubator.</strong> Over the past few months, the community has collaboratively completed extensive compliance improvements, architectural refactoring, and functional enhancements. This release marks Fesod’s readiness to embark on a new chapter of high-performance Excel processing under the ASF governance.</div><footer [...]
\ No newline at end of file
diff --git a/blog/tags/security/index.html b/blog/tags/security/index.html
new file mode 100644
index 00000000..0071fca2
--- /dev/null
+++ b/blog/tags/security/index.html
@@ -0,0 +1,5 @@
+<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>One post tagged with "security" | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image conten [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Security advisory for <strong>CVE-2026-49328</strong> regarding Server-Side Request Forgery (SSRF) in Apache Fesod (Incubating).</div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_z4op padding--none margin-left--sm"><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/announcement>announcement</a><li class=tag_S0HX><a rel=tag class="tag_dy1y tagRegular_a3LC" href=/blog/tags/security>security</a><li class=tag_S0HX><a [...]
\ No newline at end of file
diff --git a/community/brand/index.html b/community/brand/index.html
new file mode 100644
index 00000000..dbc5eb53
--- /dev/null
+++ b/community/brand/index.html
@@ -0,0 +1,10 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-brand" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Brand | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:image co [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=logo>Logo<a href=#logo class=hash-link aria-label="Direct link to Logo" title="Direct link to Logo" translate=no></a></h2>
+<p><img decoding=async loading=lazy alt=logo src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg [...]
+<p>Download: <a href=/assets/files/fesod-logo-icon-7d9995548a74a7cdc78c127b4b7bbb0a.svg target=_blank class="">SVG</a> | <a href=/assets/files/fesod-logo-icon-3285667fcb12e822454e1e8bc1296eed.png target=_blank class="">PNG</a></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=brand-logo>Brand Logo<a href=#brand-logo class=hash-link aria-label="Direct link to Brand Logo" title="Direct link to Brand Logo" translate=no></a></h2>
+<p><img decoding=async loading=lazy alt=logo src="data:image/svg+xml;base64,PCEtLQpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCm9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQpkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgpyZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCnRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg [...]
+<p>Download: <a href=/assets/files/fesod-logo-646a83f97401f116d3aaf1e395222c4c.svg target=_blank class="">SVG</a> | <a href=/assets/files/fesod-logo-e09e531bdeeb40e7484aaa6dba7f672f.png target=_blank class="">PNG</a></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/brand.md target=_blank rel="noopener noreferrer" class=them [...]
\ No newline at end of file
diff --git a/community/committer/become-committer/index.html b/community/committer/become-committer/index.html
new file mode 100644
index 00000000..a2aafda3
--- /dev/null
+++ b/community/committer/become-committer/index.html
@@ -0,0 +1,68 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-committer/become-committer" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Become A Committer | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Anyone being supportive of the community and working in any of the CoPDoC areas can become an Apache Fesod (Incubating) committer. The CoPDoC is an acronym from ASF to describe how we recognize your contributions not only by code.</p>
+<ul>
+<li class=""><strong>(Co)mmunity</strong> - You can join us via our mailing list, issue
+trackers, discussions page to interact with community members, and
+share vision and knowledge</li>
+<li class=""><strong>(P)roject</strong> - a clear vision and consensus are needed</li>
+<li class=""><strong>(Do)cumentation</strong> - without it, the stuff remains only in the minds
+of the authors</li>
+<li class=""><strong>(C)ode</strong> - discussion goes nowhere without code</li>
+</ul>
+<p>Apache Fesod (Incubating) community strives to be meritocratic. Thus, once someone has contributed sufficiently to any area of CoPDoC they can be a candidate for committer-ship and at last voted in as an Apache Fesod (Incubating) committer. Being an Apache Fesod (Incubating) committer does not necessarily mean you must commit code with your commit privilege to the codebase, it means you are committed to the Apache Fesod (Incubating) project and are productively contributing to our com [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=committer-requirements>Committer requirements<a href=#committer-requirements class=hash-link aria-label="Direct link to Committer requirements" title="Direct link to Committer requirements" translate=no></a></h2>
+<p>There are no strict rules for becoming a committer or PPMC member.
+Candidates for new committers are typically people that are active
+contributors and community members. Anyway, if the rules can be
+clarified a little bit, it can somehow clear the doubts in the minds
+of contributors and make the community more transparent, reasonable,
+and fair.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=continuous-contributions>Continuous contributions<a href=#continuous-contributions class=hash-link aria-label="Direct link to Continuous contributions" title="Direct link to Continuous contributions" translate=no></a></h3>
+<p>Committer candidates should have a decent amount of continuous
+engagements and contributions (fixing bugs, adding new features,
+writing documentation, maintaining issues boards, code review, or answering
+community questions) to Apache Fesod (Incubating).</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=quality-of-contributions>Quality of contributions<a href=#quality-of-contributions class=hash-link aria-label="Direct link to Quality of contributions" title="Direct link to Quality of contributions" translate=no></a></h3>
+<ul>
+<li class="">A solid general understanding of the project</li>
+<li class="">Well tested, well-designed, following Apache Fesod (Incubating) coding
+standards, and simple patches.</li>
+<li class="">Well-organized and detailed user-oriented documentation.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=community-involvement>Community involvement<a href=#community-involvement class=hash-link aria-label="Direct link to Community involvement" title="Direct link to Community involvement" translate=no></a></h3>
+<ul>
+<li class="">Be active, courteous, and respectful on the dev mailing list and
+help mentor newer contributors
+and users.</li>
+<li class="">Be active, courteous, and respectful on the issue tracker for
+project maintenance</li>
+<li class="">Be active, courteous, and respectful for pull requests reviewing</li>
+<li class="">Be involved in the design road map discussions with a professional
+and diplomatic approach even if there is a disagreement</li>
+<li class="">Promoting the project by writing articles or holding events</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=routine>Routine<a href=#routine class=hash-link aria-label="Direct link to Routine" title="Direct link to Routine" translate=no></a></h2>
+<ul>
+<li class="">Check the list of pull requests and issues to be processed in the community on a daily basis.
+<ul>
+<li class="">Including label issue, reply issue, close issue;</li>
+<li class="">Assign issue to the appropriate committer, namely assignee;</li>
+</ul>
+</li>
+<li class="">After a committer is assigned with an issue, the following work is required:
+<ul>
+<li class="">Estimate whether it is a long-term issue. If it is, please label it as pending;</li>
+<li class="">Add issue labels, such as bug, enhancement, discussion, etc;</li>
+<li class="">Add milestone.</li>
+</ul>
+</li>
+<li class="">Pull request that committer submits needs to add labels and milestone based on the type and release period.</li>
+<li class="">When committer reviewed and approved any pull request, committer could <code>squash and merge</code> to main branch. If there is any question you concerned about this pull request, please reply directly to the related issue.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=benefits>Benefits<a href=#benefits class=hash-link aria-label="Direct link to Benefits" title="Direct link to Benefits" translate=no></a></h2>
+<p>Every Apache Committer is eligible for a free license that grants them access to all the JetBrains IDEs such as IntelliJ IDEA, PyCharm, and other desktop tools.</p>
+<p>If you are an Apache Fesod (Incubating) Committer and still haven’t received a free JetBrains license, please use your <code>@apache.org</code> email address to <a href="https://www.jetbrains.com/shop/eform/apache?product=ALL" target=_blank rel="noopener noreferrer" class="">All Products Packs for Apache committers</a> now for the subsequent development of Apache Fesod (Incubating).</p>
+<p>If you have obtained a free JetBrains subscription but it has expired, you can reactivate all product packs for free using your <code>@apache.org</code> email address by this link and click <code>Refresh license list</code> in your JetBrains desktop tools (e.g. IntelliJ IDEA) to refresh the subscription.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/f [...]
\ No newline at end of file
diff --git a/community/committer/icla/index.html b/community/committer/icla/index.html
new file mode 100644
index 00000000..ad59da2f
--- /dev/null
+++ b/community/committer/icla/index.html
@@ -0,0 +1,64 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-committer/icla" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Sign iCLA Guide | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true p [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Apache CLA short for Apache Contributor License Agreement, the purpose of this agreement is to clearly define the terms under which intellectual property has been contributed to the ASF and thereby allow us to defend the project should there be a legal dispute regarding the software at some future time. A signed ICLA is required to be on file before an individual is given commit rights to any ASF project.</p>
+<p>The process of submitting iCLA are:</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=download>Download<a href=#download class=hash-link aria-label="Direct link to Download" title="Direct link to Download" translate=no></a></h2>
+<p>Click the link <a href=https://www.apache.org/licenses/contributor-agreements.html#clas target=_blank rel="noopener noreferrer" class="">Contributor License Agreements</a> and find iCLA under the Contributor License Agreements section.</p>
+<p><img decoding=async loading=lazy alt=iCLA src=/assets/images/icla-01-83a226e824e1b9a9d08813f21b882e31.png width=784 height=201 class=img_Q0Px /></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=fill-the-content>Fill the content<a href=#fill-the-content class=hash-link aria-label="Direct link to Fill the content" title="Direct link to Fill the content" translate=no></a></h2>
+<p><img decoding=async loading=lazy alt=iCLA src=/assets/images/icla-02-e761fe1f9d7c718f085b70b9fba8fc39.png width=858 height=398 class=img_Q0Px /></p>
+<p>Fill in the following columns in English.</p>
+<ul>
+<li class="">
+<p>Full name</p>
+<p>Please fill in your real name. The given name comes first, followed by the surname. The first letter of each should be capitalized. (Note:Leave a space between family name and last name, remember capitalize the first letter, please write family name at first.)</p>
+</li>
+<li class="">
+<p>Public name:</p>
+<p>the public name should be a real name or pen name and not a user id.</p>
+</li>
+<li class="">
+<p>Postal Address:</p>
+<p>The English address is detailed down to the house number.</p>
+</li>
+<li class="">
+<p>Country:</p>
+<p>Please fill in your country.</p>
+</li>
+<li class="">
+<p>E-mail:</p>
+<p>Please fill in your personal email address.</p>
+</li>
+<li class="">
+<p>(optional) preferred Apache id(s)</p>
+<p>You need to choose a unique Apache ID that hasn't been taken. Check <a href=https://people.apache.org/committer-index.html target=_blank rel="noopener noreferrer" class="">ASF Committers by ID</a> to see which IDs are still available.</p>
+</li>
+<li class="">
+<p>(optional) notify project:</p>
+<p>Apache Fesod (Incubating)</p>
+</li>
+</ul>
+<p>Refer to this case</p>
+<p><img decoding=async loading=lazy alt=iCLA src=/assets/images/icla-03-c8df2f12ca6b2bc591a4e73aced61280.png width=721 height=393 class=img_Q0Px /></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=sign>Sign<a href=#sign class=hash-link aria-label="Direct link to Sign" title="Direct link to Sign" translate=no></a></h2>
+<p><img decoding=async loading=lazy alt=iCLA src=/assets/images/icla-04-4925b6c82e6383ae69d9e1b0b92d2145.png width=685 height=112 class=img_Q0Px /></p>
+<ul>
+<li class="">
+<p>Please sign:</p>
+<p>Apache only accept hand-written signature or gpg signature, here we suggest choosing hand-written way. Print the document and sign your name on the paper, or use electric pen.</p>
+</li>
+<li class="">
+<p>Date: Signing Date(yyyy-MM-dd)</p>
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=send-mail>Send mail<a href=#send-mail class=hash-link aria-label="Direct link to Send mail" title="Direct link to Send mail" translate=no></a></h2>
+<p>Take a photo or scan the signed document into a PDF format, and rename it as "name-icla.pdf".</p>
+<p>Please send the email to <code>secretary@apache.org</code> and also forward it to <code>private@fesod.apache.org</code>. Attach the PDF to the email. For the email content, please refer to the following:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hello Apache,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> I am [...]
+<blockquote>
+<p>This email should include the details from the previous committer invitation correspondence. It is recommended to reply to the earlier email exchange, then modify the subject line and recipients accordingly.</p>
+</blockquote>
+<p>After waiting for some time, you will receive an email from <code>root@apache.org</code>.</p>
+<p>When you receive an email with the subject line: "Welcome to the Apache Software Foundation", congratulations! You have now obtained an Apache ID.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/committer/icla.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 [...]
\ No newline at end of file
diff --git a/community/committer/onboarding/index.html b/community/committer/onboarding/index.html
new file mode 100644
index 00000000..9797f937
--- /dev/null
+++ b/community/committer/onboarding/index.html
@@ -0,0 +1,54 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-committer/onboarding" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Onboarding | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Upon receiving an invitation email from Apache Fesod (Incubating) PPMC, a new committer should consider whether accepting.</p>
+<p>If they decide in favor, they should select "Reply All" and express their decision. Please provide the reference content of this reply email:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi, i accept. Thanks for invitation.</span><br/></div></code></pre></div></div>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=submit-cla>Submit CLA<a href=#submit-cla class=hash-link aria-label="Direct link to Submit CLA" title="Direct link to Submit CLA" translate=no></a></h2>
+<p>We require all contributors to sign a Contributor License Agreement (CLA). This step refers to <a class="" href=/community/committer/icla>Sign ICLA guide</a></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=setup-asf-account>Setup ASF Account<a href=#setup-asf-account class=hash-link aria-label="Direct link to Setup ASF Account" title="Direct link to Setup ASF Account" translate=no></a></h2>
+<p>Go to <a href=https://id.apache.org/reset/enter target=_blank rel="noopener noreferrer" class="">Apache Account Utility</a> and enter your Apache ID.</p>
+<p><img decoding=async loading=lazy alt="Reset Password" src=/assets/images/reset-passwd-e8828118db9277c6fe25a82a5a0bb3da.png width=882 height=608 class=img_Q0Px /></p>
+<p>After clicking "Send Email", a prompt will appear indicating that the email has been sent successfully. Then check your email and click the provided link to reset your password.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=link-asf-account-to-github>Link ASF Account to GitHub<a href=#link-asf-account-to-github class=hash-link aria-label="Direct link to Link ASF Account to GitHub" title="Direct link to Link ASF Account to GitHub" translate=no></a></h3>
+<p><img decoding=async loading=lazy alt="Link GitHub" src=/assets/images/link-github-d7d62b2548477c375730056807eacc89.png width=681 height=178 class=img_Q0Px /></p>
+<ol>
+<li class="">Navigate to <a href=https://gitbox.apache.org/boxer/ target=_blank rel="noopener noreferrer" class="">ASF Boxer</a> and enter your Apache ID and password.</li>
+<li class="">Click "Link GitHub username to ASF id" and follow the given instructions to link your ASF account to GitHub.</li>
+<li class="">Check your email titled "[GitHub] @asfgit has invited you to join the @apache organization" and accept the invitation.</li>
+<li class="">Wait momentarily, and the website will refresh on its own.</li>
+<li class="">(If you do not enable 2FA on GitHub) Please follow the <a href=https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication target=_blank rel="noopener noreferrer" class="">instruction</a>.</li>
+</ol>
+<p>Your Apache ID and GitHub ID will now both appear on <a href=https://gitbox.apache.org/boxer/ target=_blank rel="noopener noreferrer" class="">ASF Boxer</a>. Congrats on successfully linking your ASF account to GitHub!</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=email-settings>Email Settings<a href=#email-settings class=hash-link aria-label="Direct link to Email Settings" title="Direct link to Email Settings" translate=no></a></h2>
+<p>You cannot work directly with your Apache email address. You must set up forwarding for this address.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=receive-email>Receive Email<a href=#receive-email class=hash-link aria-label="Direct link to Receive Email" title="Direct link to Receive Email" translate=no></a></h3>
+<p>You can change your forwarding email address at <a href=https://id.apache.org/ target=_blank rel="noopener noreferrer" class="">Apache Account Utility Platform</a></p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=send-email>Send Email<a href=#send-email class=hash-link aria-label="Direct link to Send Email" title="Direct link to Send Email" translate=no></a></h3>
+<p>To send emails using your apache.org address, configure your email client to leverage the <code>mail-relay</code> service. For specifics, refer to <a href=https://infra.apache.org/committer-email.html target=_blank rel="noopener noreferrer" class="">this guide</a>.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=gmail>Gmail<a href=#gmail class=hash-link aria-label="Direct link to Gmail" title="Direct link to Gmail" translate=no></a></h3>
+<ol>
+<li class="">Open Gmail settings and select "See all settings".</li>
+<li class="">Navigate to "Accounts and Import", then locate "Send mail as".</li>
+<li class="">Click "Add another email address" and enter your name and apache.org email address.</li>
+<li class="">Input the SMTP server information:
+<ul>
+<li class="">SMTP Server: mail-relay.apache.org</li>
+<li class="">Port: 587</li>
+<li class="">Username: your apache ID</li>
+<li class="">Password: your apache password</li>
+<li class="">Secured connection using TLS</li>
+</ul>
+</li>
+<li class="">Click "Add account" and you will receive an email from Gmail that need to confirm.</li>
+</ol>
+<p><img decoding=async loading=lazy alt="Gmail Setting" src=/assets/images/gmail-setting-64fa2bef013a1817489ee6195d293a97.png width=772 height=418 class=img_Q0Px /></p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=subscribe-to-mailing-list>Subscribe to Mailing List<a href=#subscribe-to-mailing-list class=hash-link aria-label="Direct link to Subscribe to Mailing List" title="Direct link to Subscribe to Mailing List" translate=no></a></h3>
+<p>Please refer to <a class="" href=/community/#how-to-subscribe-to-a-mailing-list>Subscribe to Mailing List</a></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=enable-2fa-on-github>Enable 2FA on GitHub<a href=#enable-2fa-on-github class=hash-link aria-label="Direct link to Enable 2FA on GitHub" title="Direct link to Enable 2FA on GitHub" translate=no></a></h2>
+<p>Two-factor authentication (2FA) refers to the authentication method that combines both passport, and an object (credit card, SMS phone, token or biomarkers as fingerprint) to identify a user.
+To ensure the security of the committer’s account, we need you to enable 2FA to sign in and contribute codes on GitHub.</p>
+<p>More details, please refer to <a href=https://help.github.com/articles/requiring-two-factor-authentication-in-your-organization/ target=_blank rel="noopener noreferrer" class="">2FA</a>.</p>
+<p>For detailed operations, please refer to <a href=https://help.github.com/articles/configuring-two-factor-authentication-via-a-totp-mobile-app/ target=_blank rel="noopener noreferrer" class="">Enable Two Factor Authentication with TOTP</a>.</p>
+<p>After enabling 2FA, you need to sign in GitHub with the way of username/password + mobile phone authentication code.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/committer/onboarding.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" cla [...]
\ No newline at end of file
diff --git a/community/contribution/code-review-guide/index.html b/community/contribution/code-review-guide/index.html
new file mode 100644
index 00000000..b3fb704c
--- /dev/null
+++ b/community/contribution/code-review-guide/index.html
@@ -0,0 +1,34 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-contribution/code-review-guide" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Code Review Guidelines | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>This guide is for all committers and contributors that want to help with reviewing code contributions. Thank you for your effort - good reviews are one of the most important and crucial parts of an open source project. This guide should help the community to make reviews such that:</p>
+<ul>
+<li class="">Contributors have a good contribution experience.</li>
+<li class="">Our reviews are structured and check all important aspects of a contribution.</li>
+<li class="">We make sure to keep a high code quality in Apache Fesod (Incubating).</li>
+<li class="">We avoid situations where contributors and reviewers spend a lot of time refining a contribution that gets rejected later.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=code-review-guidelines>Code Review Guidelines<a href=#code-review-guidelines class=hash-link aria-label="Direct link to Code Review Guidelines" title="Direct link to Code Review Guidelines" translate=no></a></h2>
+<ul>
+<li class="">Always maintain a high standard of review so that the quality of the entire product can be better guaranteed.</li>
+<li class="">Changes to the architecture or the user interface need to be fully discussed by the community. This can be either in a mail group or in a GitHub issue.</li>
+<li class="">Test coverage. The added logic needs to be covered by a corresponding test. When the old code for which there is no test is changed, this requirement can be appropriately relaxed.</li>
+<li class="">Documentation. Newly added features must be documented, otherwise such code is not allowed.</li>
+<li class="">Readability of the code. If reviewers are not very clear about the logic of the code, then you can ask the contributor to explain the logic. And writing sufficient comments in the code to explain the logic is encouraged.</li>
+<li class="">Try to give a clear conclusion at the end of your comments, "approve" or "change request". If it's a minor issue, you can just leave a comment.</li>
+<li class="">Recommend to submit a "+1 Comment" rather than a "+1 Approve" to indicate that it looks good to me but I am not sure whether this part of the function is correct. It needs someone else's approve.</li>
+<li class="">Respect each other and learn from each other. Maintain a polite tone when commenting, try to give reasons for the suggestions.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=pr-review-guidelines>PR Review Guidelines<a href=#pr-review-guidelines class=hash-link aria-label="Direct link to PR Review Guidelines" title="Direct link to PR Review Guidelines" translate=no></a></h2>
+<ul>
+<li class="">Check whether the contribution is sufficiently well-described to support a good review</li>
+<li class="">The reviewer needs to perform a code-level review.</li>
+<li class="">Once a reviewer has commented on a PR, they need to keep following up on subsequent changes to that PR.</li>
+<li class="">A PR must get at least a +1 approved from committer who is not the author.</li>
+<li class="">After the first +1 to the PR, wait at least one working day before merging. The main purpose is to wait for the rest of the community to come to review.</li>
+<li class="">For architecture or user interface changes, a PR needs to get at least 3 +1's to merge.</li>
+<li class="">Regression cases and CI tests should pass before merging.</li>
+<li class="">Select "squash and merge" to merge.</li>
+<li class="">When there is a disagreement about a modification, try to discuss the resolution. If the discussion doesn't work out, it can be resolved by a vote in <code>dev@fesod.apache.org</code> by the majority rules.</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/contribution/code-review-guide.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3. [...]
\ No newline at end of file
diff --git a/community/contribution/commit-format/index.html b/community/contribution/commit-format/index.html
new file mode 100644
index 00000000..3dc220e5
--- /dev/null
+++ b/community/contribution/commit-format/index.html
@@ -0,0 +1,35 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-contribution/commit-format" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Commit Format Specification | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_imag [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>All improvements can be implemented through Pull Request (PR). Before submitting a Pull Request, please familiarise yourself with the following guidelines:</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=commit-rules>Commit Rules<a href=#commit-rules class=hash-link aria-label="Direct link to Commit Rules" title="Direct link to Commit Rules" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=commit-message>Commit Message<a href=#commit-message class=hash-link aria-label="Direct link to Commit Message" title="Direct link to Commit Message" translate=no></a></h3>
+<p>Please ensure that commit messages are clear and descriptive, use <strong>English</strong>, and do not exceed 100 characters.</p>
+<p>The following types of commit messages are allowed and must follow the following format:</p>
+<ul>
+<li class=""><strong>docs</strong>: Update documentation, e.g., <code>docs: update README.md</code></li>
+<li class=""><strong>feature/feat</strong>: New features, e.g., <code>feature: support for xxx</code></li>
+<li class=""><strong>bugfix/fix</strong>: Bug fixes, e.g., <code>fix: fix NPE in the A class</code></li>
+<li class=""><strong>refactor</strong>: Code refactoring (no functional changes), e.g., <code>refactor: optimise data processing logic</code></li>
+<li class=""><strong>style</strong>: Code formatting, e.g., <code>style: update code style</code></li>
+<li class=""><strong>test</strong>: Adding or improving tests, e.g., <code>test: add new test cases</code></li>
+<li class=""><strong>chore</strong>: Changes to the build process or auxiliary tools, e.g., <code>chore: improve issue template</code></li>
+<li class=""><strong>dependency</strong>: Modifications to third-party dependency libraries, e.g., <code>dependency: upgrade poi version to 5.4.1</code></li>
+</ul>
+<p>Avoid using vague commit messages like:</p>
+<ul>
+<li class=""><del>fixed issue</del></li>
+<li class=""><del>update code</del></li>
+</ul>
+<p>For assistance, refer to <a href=http://chris.beams.io/posts/git-commit/ target=_blank rel="noopener noreferrer" class="">How to Write a Git Commit Message</a>.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=commit-content>Commit Content<a href=#commit-content class=hash-link aria-label="Direct link to Commit Content" title="Direct link to Commit Content" translate=no></a></h3>
+<p>Each commit should contain complete and reviewable changes, ensuring:</p>
+<ul>
+<li class="">Avoid committing overly large changes.</li>
+<li class="">Each commit content is independent and can pass CI tests.</li>
+</ul>
+<p>Also, ensure the correct Git user information is configured when committing:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> config </span><span class="token parameter var [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=pr-description>PR Description<a href=#pr-description class=hash-link aria-label="Direct link to PR Description" title="Direct link to PR Description" translate=no></a></h2>
+<p>To help reviewers quickly understand the content and purpose of the PR, use the <a href=https://github.com/apache/fesod/blob/main/.github/pull_request_template.md target=_blank rel="noopener noreferrer" class="">pull_request_template</a>. A detailed description greatly improves code review efficiency.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/feso [...]
\ No newline at end of file
diff --git a/community/contribution/contribute-code/index.html b/community/contribution/contribute-code/index.html
new file mode 100644
index 00000000..2a924889
--- /dev/null
+++ b/community/contribution/contribute-code/index.html
@@ -0,0 +1,63 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-contribution/contribute-code" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Code Contribution | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><met [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>This section explains how to build project from source code and also describe how to contribute code.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=workspace-preparation>Workspace Preparation<a href=#workspace-preparation class=hash-link aria-label="Direct link to Workspace Preparation" title="Direct link to Workspace Preparation" translate=no></a></h2>
+<p>To develop this project, you need <strong>Maven 3.9 or above</strong> and <strong>JDK (Java Development Kit) 17 or above</strong>. However, you must use <strong>Java 1.8</strong> compatible language features during compilation to ensure this project can run in environments with Java 1.8 or above.</p>
+<blockquote>
+<p>You can use tools such as <a href=https://sdkman.io/ target=_blank rel="noopener noreferrer" class="">SDKMAN</a> to configure multiple versions of the Java toolchain.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=idea-settings>IDEA Settings<a href=#idea-settings class=hash-link aria-label="Direct link to IDEA Settings" title="Direct link to IDEA Settings" translate=no></a></h2>
+<p>The following guidelines are for development using <code>IntelliJ IDEA</code>. Other versions may have some minor differences. Please follow all steps carefully.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=project-settings>Project Settings<a href=#project-settings class=hash-link aria-label="Direct link to Project Settings" title="Direct link to Project Settings" translate=no></a></h3>
+<p>Set the project <a href=https://www.jetbrains.com/help/idea/project-settings-and-structure.html#language-level target=_blank rel="noopener noreferrer" class="">Language Level</a> to <code>8</code> to ensure backward compatibility.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=git-usage>Git Usage<a href=#git-usage class=hash-link aria-label="Direct link to Git Usage" title="Direct link to Git Usage" translate=no></a></h2>
+<p>Ensure that you have registered a GitHub account and follow the steps below to configure your local development environment:</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=fork-the-repository>Fork the repository<a href=#fork-the-repository class=hash-link aria-label="Direct link to Fork the repository" title="Direct link to Fork the repository" translate=no></a></h3>
+<p>Click the <code>Fork</code> button on the Fesod <a href=https://github.com/apache/fesod target=_blank rel="noopener noreferrer" class="">GitHub page</a> to copy the project to your GitHub account.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">https://github.com/</span><span class="token operator" style=color:#393A34><</span><span class="token p [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=clone-repository>Clone Repository<a href=#clone-repository class=hash-link aria-label="Direct link to Clone Repository" title="Direct link to Clone Repository" translate=no></a></h3>
+<p>Run the following command to clone the forked project to your local machine:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> clone git@github.com:</span><span class="token [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=set-upstream-repository>Set Upstream Repository<a href=#set-upstream-repository class=hash-link aria-label="Direct link to Set Upstream Repository" title="Direct link to Set Upstream Repository" translate=no></a></h3>
+<p>Set the official repository as <code>upstream</code> for easy synchronization of updates:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> remote </span><span class="token function" sty [...]
+<p>Running <code>git remote -v</code> can verify if the configuration is correct.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=new-branches-to-modify>New branches to modify<a href=#new-branches-to-modify class=hash-link aria-label="Direct link to New branches to modify" title="Direct link to New branches to modify" translate=no></a></h3>
+<p>Create a new branch to develop</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> checkout </span><span class="token parameter v [...]
+<p><strong>Note</strong>:</p>
+<ul>
+<li class="">You must create a new branch to develop features <code>git checkout -b feature-xxx</code>. It is not recommended to use the <code>main</code> branch for direct development</li>
+<li class=""><code><your_branch_name></code> name is customized for you.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=submit-code-to-remote-branch>Submit code to remote branch<a href=#submit-code-to-remote-branch class=hash-link aria-label="Direct link to Submit code to remote branch" title="Direct link to Submit code to remote branch" translate=no></a></h3>
+<p>After modifying the code locally, submit it to your own repository</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> commit </span><span class="token parameter var [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=pull-request>Pull request<a href=#pull-request class=hash-link aria-label="Direct link to Pull request" title="Direct link to Pull request" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=new-pull-request>New pull request<a href=#new-pull-request class=hash-link aria-label="Direct link to New pull request" title="Direct link to New pull request" translate=no></a></h3>
+<p>Submit changes to the remote repository, you can see a green button "Compare & pull request" on your repository page, click it.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=fill-commit-message>Fill Commit Message<a href=#fill-commit-message class=hash-link aria-label="Direct link to Fill Commit Message" title="Direct link to Fill Commit Message" translate=no></a></h3>
+<p>Please refer to <a class="" href=/community/contribution/commit-format>Commit Format Specification</a> to fill in the summary and details of the comment, and then click Create pull request to create it.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=ready-for-review>Ready for review<a href=#ready-for-review class=hash-link aria-label="Direct link to Ready for review" title="Direct link to Ready for review" translate=no></a></h3>
+<p>After successful creation, Then the community Committers will do CodeReview, and then he will discuss some details (design, implementation, performance, etc.) with you, afterward you can directly update the code in this branch according to the suggestions (no need to create a new PR). When this pr is approved, the commit will be merged into the main branch.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=branch-definition>Branch definition<a href=#branch-definition class=hash-link aria-label="Direct link to Branch definition" title="Direct link to Branch definition" translate=no></a></h2>
+<p>All contributions should be based on the <code>main</code> development branch. Additionally, there are the following branch types:</p>
+<ul>
+<li class=""><strong>release branches</strong>: Used for version releases (e.g., <code>1.1.0</code>, <code>1.1.1</code>).</li>
+<li class=""><strong>feature branches</strong>: Used for developing major features.</li>
+<li class=""><strong>hotfix branches</strong>: Used for fixing critical bugs.</li>
+</ul>
+<p>When submitting a PR, please ensure that the changes are based on the <code>main</code> branch.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=compile>Compile<a href=#compile class=hash-link aria-label="Direct link to Compile" title="Direct link to Compile" translate=no></a></h2>
+<p>Run the following command to compile</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">mvn clean </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> [...]
+<p>To speed up the build process, you can:</p>
+<ul>
+<li class="">Use <code>-DskipTests</code> to skip unit tests</li>
+<li class="">Use Maven's parallel build feature, e.g., <code>mvn clean install -DskipTests -T 1C</code></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=code-style>Code Style<a href=#code-style class=hash-link aria-label="Direct link to Code Style" title="Direct link to Code Style" translate=no></a></h2>
+<p>This project uses <a href=https://github.com/diffplug/spotless target=_blank rel="noopener noreferrer" class="">Spotless</a> as its code formatting tool. Please ensure you run the following command to automatically format your code before submitting:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">mvn spotless:apply</span><br/></div></code></pre></div></div></div><footer class="theme-doc-footer docusau [...]
\ No newline at end of file
diff --git a/community/contribution/contribute-doc/index.html b/community/contribution/contribute-doc/index.html
new file mode 100644
index 00000000..49a3df6e
--- /dev/null
+++ b/community/contribution/contribute-doc/index.html
@@ -0,0 +1,55 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-contribution/contribute-doc" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Docs Contribution | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>This document contribution guide primarily explains how to modify and contribute to the documents.</p>
+<p>The official website is built using <a href=https://docusaurus.io/ target=_blank rel="noopener noreferrer" class="">Docusaurus</a>, and the documentation is maintained in the <a href=https://github.com/apache/fesod/tree/main/website target=_blank rel="noopener noreferrer" class="">website</a> directory.Please note that whether it is for historical versions or the latest version of the docs, all modifications should be submitted as pull requests on the <code>apache/fesod</code> reposit [...]
+<p>For how to submit pull requests, please refer to</p>
+<ul>
+<li class=""><a class="" href=/community/contribution/contribute-code>Code Contribution</a></li>
+<li class=""><a class="" href=/community/contribution/commit-format>Commit Format Specification</a></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=requirements>Requirements<a href=#requirements class=hash-link aria-label="Direct link to Requirements" title="Direct link to Requirements" translate=no></a></h2>
+<ul>
+<li class=""><a href=https://nodejs.org/en/download/ target=_blank rel="noopener noreferrer" class="">Node.js</a> version 24.0 or above (which can be checked by running <code>node -v</code>). You can use <a href=https://github.com/nvm-sh/nvm target=_blank rel="noopener noreferrer" class="">nvm</a> for managing multiple Node versions on a single machine installed.</li>
+<li class="">When installing Node.js, you are recommended to check all checkboxes related to dependencies.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=directory-structure-description>Directory Structure Description<a href=#directory-structure-description class=hash-link aria-label="Direct link to Directory Structure Description" title="Direct link to Directory Structure Description" translate=no></a></h2>
+<p>Docusaurus supports I18n. The main documentation directory structure that needs to be maintained is as follows:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token builtin class-name">.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34 [...]
+<p>The directory structure for single-language documents is as follows:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token builtin class-name">.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34 [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=writing-guidelines>Writing Guidelines<a href=#writing-guidelines class=hash-link aria-label="Direct link to Writing Guidelines" title="Direct link to Writing Guidelines" translate=no></a></h2>
+<ul>
+<li class="">Use file paths with the <code>.md</code> extension</li>
+</ul>
+<div class="language-markdown codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-markdown codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token url" style=color:#36acaa>[</span><span class="token url content" style=color:#36acaa>Example</span><span [...]
+<ul>
+<li class="">Use paths relative to the docs/ directory</li>
+</ul>
+<div class="language-markdown codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-markdown codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token url" style=color:#36acaa>[</span><span class="token url content" style=color:#36acaa>Example</span><span [...]
+<ul>
+<li class="">Image files must be stored in the <code>static/img</code> directory and referenced using relative directory paths.</li>
+</ul>
+<div class="language-markdown codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-markdown codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token url" style=color:#36acaa>[</span><span class="token url content" style=color:#36acaa>img</span><span clas [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=preview-and-generate-static-files>Preview and generate static files<a href=#preview-and-generate-static-files class=hash-link aria-label="Direct link to Preview and generate static files" title="Direct link to Preview and generate static files" translate=no></a></h2>
+<p>Enter the <code>website</code> directory and execute the command</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=installation>Installation<a href=#installation class=hash-link aria-label="Direct link to Installation" title="Direct link to Installation" translate=no></a></h3>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>pnpm</span><span class="token plain"> </span><span class="token function" style=col [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=local-development>Local Development<a href=#local-development class=hash-link aria-label="Direct link to Local Development" title="Direct link to Local Development" translate=no></a></h3>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># English</span><span class="token plain"></span><br/></div><div c [...]
+<p>This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.</p>
+<blockquote>
+<p>Only one language version can be run at a time.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=buildoptional>Build(Optional)<a href=#buildoptional class=hash-link aria-label="Direct link to Build(Optional)" title="Direct link to Build(Optional)" translate=no></a></h2>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>pnpm</span><span class="token plain"> build</span><br/></div></code></pre></div></div>
+<p>This command generates static content into the <code>build</code> directory and can be served using any static contents hosting service.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=document-format-inspection>Document Format Inspection<a href=#document-format-inspection class=hash-link aria-label="Direct link to Document Format Inspection" title="Direct link to Document Format Inspection" translate=no></a></h2>
+<p>We uses <a href=https://github.com/DavidAnson/markdownlint-cli2 target=_blank rel="noopener noreferrer" class="">markdownlint-cli2</a> to check document formatting. After writing the relevant Markdown articles, you can run the following command locally to pre-check whether the Markdown formatting meets the requirements:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token builtin class-name">cd</span><span class="token plain"> website</span><br/></div><div class=token-line style=colo [...]
+<ul>
+<li class="">For formatting rules for Markdown articles you can refer to: <a href=https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md target=_blank rel="noopener noreferrer" class="">Markdown-lint-rules</a></li>
+<li class="">Markdown format configuration file in the project: <a href=https://github.com/apache/fesod/blob/main/website/.markdownlint-cli2.jsonc target=_blank rel="noopener noreferrer" class="">.markdownlint-cli2.jsonc</a></li>
+</ul>
+<hr/></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/contribution/contribute-doc.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3 [...]
\ No newline at end of file
diff --git a/community/contribution/index.html b/community/contribution/index.html
new file mode 100644
index 00000000..a4e84fd5
--- /dev/null
+++ b/community/contribution/index.html
@@ -0,0 +1,63 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-contribution" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Contributor Guide | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true p [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Welcome every user and developer in the community to become contributors. Whether it's reporting issues, improving documentation, submitting code, or providing technical support, your participation will help make it better.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=contribution-directions>Contribution Directions<a href=#contribution-directions class=hash-link aria-label="Direct link to Contribution Directions" title="Direct link to Contribution Directions" translate=no></a></h2>
+<p>There are many ways to contribute to this project:</p>
+<ul>
+<li class="">Fix typos</li>
+<li class="">Fix bugs</li>
+<li class="">Remove redundant code</li>
+<li class="">Add test cases</li>
+<li class="">Enhance functionality</li>
+<li class="">Add comments to improve code readability</li>
+<li class="">Optimize code structure</li>
+<li class="">Improve or refine documentation</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=principle>Principle<a href=#principle class=hash-link aria-label="Direct link to Principle" title="Direct link to Principle" translate=no></a></h3>
+<ul>
+<li class="">Any pull request that contributes to the improvement of the project should be encouraged.</li>
+<li class="">Before contributing a new feature, please propose and discuss it in an <code>issue</code> or <code>discussion</code>. We will not merge features that have not been discussed and confirmed.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=contribution-process>Contribution Process<a href=#contribution-process class=hash-link aria-label="Direct link to Contribution Process" title="Direct link to Contribution Process" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=find-tasks>Find tasks<a href=#find-tasks class=hash-link aria-label="Direct link to Find tasks" title="Direct link to Find tasks" translate=no></a></h3>
+<p>Find the issue you are interested in! On our GitHub repo issue list, we often publish some issues with the label <code>good first issue</code> or <code>help wanted</code>. These issues welcome the help of contributors. Among them, <code>good first issues</code> tend to have low thresholds and are suitable for beginners.</p>
+<p>Of course, if you have a good idea, you can also propose it directly on GitHub Discussion or contact with community.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=discuss>Discuss<a href=#discuss class=hash-link aria-label="Direct link to Discuss" title="Direct link to Discuss" translate=no></a></h3>
+<p>Please refer to <a class="" href=/community/feedback>Issue Feedback</a> to create an issue or discussion and endeavour to reach consensus.</p>
+<p><strong>Note</strong>: To request an issue, please note that it is not just a "please assign it to me", you need to explain your understanding of the issue, and your design, and if possible, you need to provide your POC code.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=implement>Implement<a href=#implement class=hash-link aria-label="Direct link to Implement" title="Direct link to Implement" translate=no></a></h3>
+<p>Implement the change according to the approach agreed upon in the issue.</p>
+<ul>
+<li class="">Only start working on the implementation if there is consensus on the approach (e.g. you are assigned to the ticket)</li>
+<li class="">If you are newer, can refer to <a class="" href=/community/contribution/contribute-code>Code Contribution</a> to setup a dev environment.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=review>Review<a href=#review class=hash-link aria-label="Direct link to Review" title="Direct link to Review" translate=no></a></h3>
+<p>Create the pull request and work with the reviewer.</p>
+<ul>
+<li class="">Make sure no unrelated or unnecessary reformatting changes are included.</li>
+<li class="">After submitting the PR, the CI process will be triggered. Please make sure that it has passed the CI checks.</li>
+<li class="">Please ensure that the test passing.</li>
+<li class="">Please don't resolve conversation.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=merge>Merge<a href=#merge class=hash-link aria-label="Direct link to Merge" title="Direct link to Merge" translate=no></a></h3>
+<ul>
+<li class="">A committer of project checks if the contribution fulfills the requirements and merges the code to the codebase.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=contribution-code>Contribution Code<a href=#contribution-code class=hash-link aria-label="Direct link to Contribution Code" title="Direct link to Contribution Code" translate=no></a></h2>
+<p>All improvements can be implemented through Pull Request (PR). Before submitting a Pull Request.
+Please refer to <a class="" href=/community/contribution/contribute-code>Code Contribution</a> for information on how to contribute code.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=contribution-of-test-cases>Contribution of Test Cases<a href=#contribution-of-test-cases class=hash-link aria-label="Direct link to Contribution of Test Cases" title="Direct link to Contribution of Test Cases" translate=no></a></h2>
+<p>Any contribution of test cases is encouraged, especially unit tests. It is recommended to create <code>XXXTest.java</code> files in the corresponding module's <code>test</code> directory, preferably using the <code>JUnit5</code> framework.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=contribution-document>Contribution Document<a href=#contribution-document class=hash-link aria-label="Direct link to Contribution Document" title="Direct link to Contribution Document" translate=no></a></h2>
+<p>Documentation is an important component of the project official website and serves as a vital bridge between the project and the community. Please refer to <a class="" href=/community/contribution/contribute-doc>Docs Contribution</a> for information on how to contribute document.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=other-ways-to-contribute>Other Ways to Contribute<a href=#other-ways-to-contribute class=hash-link aria-label="Direct link to Other Ways to Contribute" title="Direct link to Other Ways to Contribute" translate=no></a></h2>
+<p>Apart from directly contributing code, the following ways are also valuable support for Apache Fesod (Incubating):</p>
+<ul>
+<li class="">Answering other users' questions.</li>
+<li class="">Assisting in reviewing others' PRs.</li>
+<li class="">Providing improvement suggestions.</li>
+<li class="">Writing technical blogs to promote Apache Fesod (Incubating).</li>
+<li class="">Sharing project-related knowledge in the community.</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/contribution.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 [...]
\ No newline at end of file
diff --git a/community/feedback/index.html b/community/feedback/index.html
new file mode 100644
index 00000000..3c1d5563
--- /dev/null
+++ b/community/feedback/index.html
@@ -0,0 +1,48 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-feedback" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Feedback | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:im [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>We appreciate all the feedback and suggestions you have. If you find any bugs during use, you can submit the issue through the <a href=https://github.com/apache/fesod/issues/new/choose target=_blank rel="noopener noreferrer" class="">NEW ISSUE</a> page.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=before-submitting>Before Submitting<a href=#before-submitting class=hash-link aria-label="Direct link to Before Submitting" title="Direct link to Before Submitting" translate=no></a></h2>
+<p>Before creating a new issue, please ensure you have completed the following preparatory steps. This will help avoid duplicate work and save both your time and the maintainers' time.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=read-the-documentation>Read the Documentation<a href=#read-the-documentation class=hash-link aria-label="Direct link to Read the Documentation" title="Direct link to Read the Documentation" translate=no></a></h3>
+<ul>
+<li class="">Please read the <code>README</code> file and the official documentation in the project to see if there are any solutions to the problems mentioned.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=search-existing-issues>Search Existing Issues<a href=#search-existing-issues class=hash-link aria-label="Direct link to Search Existing Issues" title="Direct link to Search Existing Issues" translate=no></a></h3>
+<ul>
+<li class="">Visit the <a href=https://github.com/apache/fesod/issues target=_blank rel="noopener noreferrer" class="">Issue List</a> and search for keywords.</li>
+<li class="">If you find a similar issue, please <strong>comment and provide additional details</strong> under that issue instead of creating a new one.</li>
+<li class="">If an unresolved issue is closed for some reason, please <strong>comment and provide additional details</strong> to reopen it.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=update-to-the-latest-version>Update to the latest version<a href=#update-to-the-latest-version class=hash-link aria-label="Direct link to Update to the latest version" title="Direct link to Update to the latest version" translate=no></a></h3>
+<p>Please make sure you are using the latest stable version of the project or the latest code from the main branch. Many issues have been resolved in newer versions.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=creating-a-new-issue>Creating a New Issue<a href=#creating-a-new-issue class=hash-link aria-label="Direct link to Creating a New Issue" title="Direct link to Creating a New Issue" translate=no></a></h2>
+<p>If you confirm that your issue has not been reported, please submit a new issue through the <a href=https://github.com/apache/fesod/issues/new/choose target=_blank rel="noopener noreferrer" class="">NEW ISSUE</a> page.</p>
+<p><strong>Please use the issue template</strong> and provide as much information as possible, such as:</p>
+<ul>
+<li class="">Environment information (operating system, version used, etc.).</li>
+<li class="">Steps to reproduce the issue.</li>
+<li class="">Error logs or screenshots.</li>
+<li class="">Provide a minimal reproducible example.</li>
+</ul>
+<p>The following situations are appropriate for submitting a new issue:</p>
+<ul>
+<li class="">Bug reports</li>
+<li class="">New feature</li>
+<li class="">Performance issues</li>
+<li class="">Function proposals or design suggestions</li>
+<li class="">Documentation improvements</li>
+<li class="">Optimization of test coverage</li>
+<li class="">Need for technical support</li>
+<li class="">Other issues related to the project</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=notes>Notes<a href=#notes class=hash-link aria-label="Direct link to Notes" title="Direct link to Notes" translate=no></a></h2>
+<ul>
+<li class="">The title of the issue should be clear and concise, written in <strong>English</strong>, and should be no longer than 50 characters.</li>
+<li class="">Please use polite language in the issue description and content.</li>
+<li class="">Each issue should focus on a single topic, please do not combine multiple issues into one.</li>
+<li class="">Unless a specific developer has been explicitly assigned to the issue in advance, please do not arbitrarily assign it to a particular developer.</li>
+<li class="">Do not include sensitive information such as passwords, keys, server addresses, or private data in the issue.</li>
+</ul>
+<p>Thank you for contributing to the improvement of the project! Every feedback you provide is the driving force behind our progress.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/feedback.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" c [...]
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
new file mode 100644
index 00000000..bf505cd9
--- /dev/null
+++ b/community/index.html
@@ -0,0 +1,67 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-index" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Join Community | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Thank you very much for your interest in the Apache Fesod (Incubating). Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=initial-contact>Initial contact<a href=#initial-contact class=hash-link aria-label="Direct link to Initial contact" title="Direct link to Initial contact" translate=no></a></h2>
+<p>For the first time in Apache Fesod (Incubating) community, you can:</p>
+<ul>
+<li class="">Use our project and provide feedback.</li>
+<li class="">Provide us with the use-cases.</li>
+<li class="">Report bugs and submit patches.</li>
+<li class="">Contribute code, documentation.</li>
+<li class="">Subscribe to our mailing list.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=mailing-list>Mailing list<a href=#mailing-list class=hash-link aria-label="Direct link to Mailing list" title="Direct link to Mailing list" translate=no></a></h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Desc<th>Subscribe<th>Unsubscribe<th>Post<th>Archive<tbody><tr><td><a href=mailto:dev@fesod.apache.org target=_blank rel="noopener noreferrer" class="">dev@fesod.apache.org</a><td>Development related discussions<td><a href=mailto:dev-subscribe@fesod.apache.org target=_blank rel="noopener noreferrer" class="">Subscribe</a><td><a href=mailto:dev-unsubscribe@fesod.apache.org target=_blank rel="noopener noreferrer" class="">Unsubscribe</a><td><a href=mailto:dev@f [...]
+<p>Please make sure you are subscribed to the mailing list you are posting to!</p>
+<p>If you are not subscribed to the mailing list, your message will either be rejected or you won't receive the response.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=how-to-subscribe-to-a-mailing-list>How to subscribe to a mailing list<a href=#how-to-subscribe-to-a-mailing-list class=hash-link aria-label="Direct link to How to subscribe to a mailing list" title="Direct link to How to subscribe to a mailing list" translate=no></a></h3>
+<p>Before you can post a message to a mailing list, you need to subscribe to the list first.</p>
+<ol>
+<li class="">Send an email without any contents or subject to <code>listname-subscribe@fesod.apache.org</code>. (replace listname with dev or commits)</li>
+<li class="">Wait till you receive an email with the subject <code>confirm subscribe to listname@fesod.apache.org</code>. Reply to that email, without editing the subject or including any contents.</li>
+<li class="">Wait till you receive an email with the subject <code>WELCOME to listname@fesod.apache.org</code>.</li>
+</ol>
+<p>If you email us with a code snippet, make sure that:</p>
+<ul>
+<li class="">you do not link to files in external services as such files can change, get deleted or the link might break and thus make an archived email thread useless</li>
+<li class="">you paste text instead of screenshots of text</li>
+<li class="">you keep formatting when pasting code to keep the code readable</li>
+<li class="">there are enough import statements to avoid ambiguities</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=post-plain-text-mails>Post Plain Text Mails<a href=#post-plain-text-mails class=hash-link aria-label="Direct link to Post Plain Text Mails" title="Direct link to Post Plain Text Mails" translate=no></a></h3>
+<p>When posting to the mailing lists, please use plain text emails. <strong>Do not use HTML emails</strong>. HTML emails are more likely to be targeted as spam mails and rejected. It may get malformed through different mail clients and not easily readable by others.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=issues>Issues<a href=#issues class=hash-link aria-label="Direct link to Issues" title="Direct link to Issues" translate=no></a></h2>
+<p>All issues will be tracked and handled through <a href=https://github.com/apache/fesod/issues target=_blank rel="noopener noreferrer" class="">GitHub Issues</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=discussions>Discussions<a href=#discussions class=hash-link aria-label="Direct link to Discussions" title="Direct link to Discussions" translate=no></a></h2>
+<p>For development discussions and user exchanges, please use <a href=https://github.com/apache/fesod/discussions target=_blank rel="noopener noreferrer" class="">GitHub Discussions</a>.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/index.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=cur [...]
\ No newline at end of file
diff --git a/community/maturity/index.html b/community/maturity/index.html
new file mode 100644
index 00000000..b80ac5e6
--- /dev/null
+++ b/community/maturity/index.html
@@ -0,0 +1,297 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-maturity" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Maturity | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:im [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Maturity</h1></header>
+<p>The goals of this maturity model are to describe how Apache projects operate in a concise and high-level way, and to provide a basic framework that projects may choose to use to evaluate themselves.</p>
+<p>More details can be found <a href=https://community.apache.org/apache-way/apache-project-maturity-model.html target=_blank rel="noopener noreferrer" class="">Apache Project Maturity Model</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=status-of-this-assessment>Status of this assessment<a href=#status-of-this-assessment class=hash-link aria-label="Direct link to Status of this assessment" title="Direct link to Status of this assessment" translate=no></a></h2>
+<p>This assessment is evaluated during Fesod's Incubating.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=maturity-model-assessment>Maturity model assessment<a href=#maturity-model-assessment class=hash-link aria-label="Direct link to Maturity model assessment" title="Direct link to Maturity model assessment" translate=no></a></h2>
+<p>The following table is filled according to the <a href=https://community.apache.org/apache-way/apache-project-maturity-model.html target=_blank rel="noopener noreferrer" class="">Apache Maturity Model</a>. Mentors and community members are welcome to comment and modify it.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code>Code<a href=#code class=hash-link aria-label="Direct link to Code" title="Direct link to Code" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>CD10</strong><td>The project produces Open Source software for distribution to the public, at no charge.<td><strong>YES</strong> The project source code is licensed under the <code>Apache License 2.0</code>.<tr><td><strong>CD20</strong><td>Anyone can easily discover and access the project's code.<td><strong>YES</strong> The <a href=https://fesod.apache.org/ target=_b [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=licenses-and-copyright>Licenses and Copyright<a href=#licenses-and-copyright class=hash-link aria-label="Direct link to Licenses and Copyright" title="Direct link to Licenses and Copyright" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>LC10</strong><td>The Apache License, version 2.0, covers the released code.<td><strong>YES</strong> The <a href=https://github.com/apache/fesod/blob/main/LICENSE target=_blank rel="noopener noreferrer" class="">LICENSE</a> is in GitHub repository. And all source files are with APLv2 header, checked by <code>korandoru/hawkeye@v6</code>.<tr><td><strong>LC20</strong><td [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=releases>Releases<a href=#releases class=hash-link aria-label="Direct link to Releases" title="Direct link to Releases" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>RE10</strong><td>Releases consist of source code, distributed using standard and open archive formats that are expected to stay readable in the long term.<td><strong>NO</strong> Source release is distributed via <a href=https://dist.apache.org/repos/dist/release/fesod/ target=_blank rel="noopener noreferrer" class="">dist.apache.org</a> and linked from <a href=https: [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=quality>Quality<a href=#quality class=hash-link aria-label="Direct link to Quality" title="Direct link to Quality" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>QU10</strong><td>The project is open and honest about the quality of its code. Various levels of quality and maturity for various modules are natural and acceptable as long as they are clearly communicated.<td><strong>YES</strong> We encourage user to <a href=https://github.com/apache/fesod/issues target=_blank rel="noopener noreferrer" class="">report issues</a>.<tr [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=community>Community<a href=#community class=hash-link aria-label="Direct link to Community" title="Direct link to Community" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>CO10</strong><td>The project has a well-known homepage that points to all the information required to operate according to this maturity model.<td><strong>YES</strong> The <a href=https://fesod.apache.org/ target=_blank rel="noopener noreferrer" class="">official website</a> includes all information user need to run Apache Fesod (Incubating).<tr><td><strong>CO20</str [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=consensus-building>Consensus Building<a href=#consensus-building class=hash-link aria-label="Direct link to Consensus Building" title="Direct link to Consensus Building" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>CS10</strong><td>The project maintains a public list of its contributors who have decision power. The project's PPMC (Project Management Committee) consists of those contributors.<td><strong>Yes</strong> See <a href=https://fesod.apache.org/team target=_blank rel="noopener noreferrer" class="">members</a> with all PPMC members and committers.<tr><td><strong>CS20</str [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=independence>Independence<a href=#independence class=hash-link aria-label="Direct link to Independence" title="Direct link to Independence" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>IN10</strong><td>The project is independent from any corporate or organizational influence.<td><strong>YES</strong> The PPMC members and committer of Apache Fesod (Incubating) are from several different companies, and majority of them are NOT From the company that donated this project.<tr><td><strong>IN20</strong><td>Contributors act as themselves, not as representa [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=trademark-and-branding>Trademark and Branding<a href=#trademark-and-branding class=hash-link aria-label="Direct link to Trademark and Branding" title="Direct link to Trademark and Branding" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong><th><strong>Description</strong><th><strong>Status</strong><tbody><tr><td><strong>TB10</strong><td>The project uses "Apache Fesod™" as the project and software product name consistently, with appropriate trademark attributions.<td><strong>YES</strong> The project uses appropriately the trademark symbol.<tr><td><strong>IB20</strong><td>The project's primary homepage is at projectname.apache.org. When exceptions exist to use alternate domains for a [...]
\ No newline at end of file
diff --git a/community/pmc/become-pmc-member/index.html b/community/pmc/become-pmc-member/index.html
new file mode 100644
index 00000000..e6046983
--- /dev/null
+++ b/community/pmc/become-pmc-member/index.html
@@ -0,0 +1,34 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc/become-pmc-member" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Become A PPMC member | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta da [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>Anyone being supportive of the community and working in any of the CoPDoC areas can become an Apache Fesod (Incubating) PPMC member. The CoPDoC is an acronym from ASF to describe how we recognize your contributions not only by code.</p>
+<ul>
+<li class=""><strong>(Co)mmunity</strong> - You can join us via our mailing list, issue trackers, discussions page to interact with community members, and share vision and knowledge</li>
+<li class=""><strong>(P)roject</strong> - a clear vision and consensus are needed</li>
+<li class=""><strong>(Do)cumentation</strong> - without it, the stuff remains only in the minds of the authors</li>
+<li class=""><strong>(C)ode</strong> - discussion goes nowhere without code</li>
+</ul>
+<p>Apache Fesod (Incubating) community strives to be meritocratic. Thus, once someone has contributed sufficiently to any area of CoPDoC they can be a candidate for PPMC membership and at last voted in as an Apache Fesod (Incubating)
+PMC member. Being an Apache Fesod (Incubating) PPMC member does not necessarily mean you must commit code with your commit privilege to the codebase; it means you are committed to the Apache Fesod (Incubating) project and are productively contributing to our community's success.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=ppmc-member-requirements>PPMC member requirements<a href=#ppmc-member-requirements class=hash-link aria-label="Direct link to PPMC member requirements" title="Direct link to PPMC member requirements" translate=no></a></h2>
+<p>There are no strict rules for becoming a committer or PPMC member.Candidates for new PPMC member are typically people that are active contributors and community members. Anyway, if the rules can be clarified a little bit, it can somehow clear the doubts in the minds of contributors and make the community more transparent, reasonable, and fair.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=continuous-contributions>Continuous contributions<a href=#continuous-contributions class=hash-link aria-label="Direct link to Continuous contributions" title="Direct link to Continuous contributions" translate=no></a></h3>
+<p>PPMC member candidates should have a decent amount of continuous engagements and contributions (fixing bugs, adding new features, writing documentation, maintaining issues boards, code review, or answering community questions) to the Apache Fesod (Incubating).</p>
+<ul>
+<li class="">12+ months with activity and engagement.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=quality-of-contributions>Quality of contributions<a href=#quality-of-contributions class=hash-link aria-label="Direct link to Quality of contributions" title="Direct link to Quality of contributions" translate=no></a></h3>
+<ul>
+<li class="">A solid general understanding of the project</li>
+<li class="">Well tested, well-designed, following Apache Fesod coding standards, and simple patches.</li>
+<li class="">Well-organized and detailed user-oriented documentation.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=community-involvement>Community involvement<a href=#community-involvement class=hash-link aria-label="Direct link to Community involvement" title="Direct link to Community involvement" translate=no></a></h3>
+<ul>
+<li class="">Be active, courteous, and respectful on the dev mailing list and help mentor newer contributors and users.</li>
+<li class="">Be active, courteous, and respectful on the issue tracker for project maintenance</li>
+<li class="">Be active, courteous, and respectful for pull requests reviewing</li>
+<li class="">Be involved in the design road map discussions with a professional and diplomatic approach even if there is a disagreement</li>
+<li class="">Promoting the project by writing articles or holding events</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/pmc/become-pmc-member.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 [...]
\ No newline at end of file
diff --git a/community/pmc/nominate-committer/index.html b/community/pmc/nominate-committer/index.html
new file mode 100644
index 00000000..c7b77ff2
--- /dev/null
+++ b/community/pmc/nominate-committer/index.html
@@ -0,0 +1,68 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc/nominate-committer" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Nominate Committer | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta dat [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>This document mainly introduces how a PPMC member nominates a new committer.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=template>Template<a href=#template class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h2>
+<p>Note that, there are three placeholder in template should be replaced before using</p>
+<ul>
+<li class="">CANDIDATE_NAME: The full name of the candidate.</li>
+<li class="">CANDIDATE_GITHUB_ID: The GitHub id of the candidate.</li>
+<li class="">NOMINATOR: The GitHub id of the candidate.</li>
+</ul>
+<div class="theme-admonition theme-admonition-note admonition_z6k5 alert alert--secondary"><div class=admonitionHeading_IS3K><span class=admonitionIcon_EGqR><svg viewBox="0 0 14 16"><path fill-rule=evenodd d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2. [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=discuss>Discuss<a href=#discuss class=hash-link aria-label="Direct link to Discuss" title="Direct link to Discuss" translate=no></a></h2>
+<p>If any PPMC member recognize someone has met our requirements and can be the potential committer, please start a
+discussion about the candidate via sending email to: <a href=mailto:private@fesod.apache.org target=_blank rel="noopener noreferrer" class="">private@fesod.apache.org</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[DISCUSS] New committer: [CANDIDATE_NAME]</span><br/></div></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display [...]
+<p>The discussion will last at least <strong>one week</strong>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=start-a-vote>Start a vote<a href=#start-a-vote class=hash-link aria-label="Direct link to Start a vote" title="Direct link to Start a vote" translate=no></a></h2>
+<p>If the proposed candidate seems to be received positively by a majority of those responding, please start a vote about
+the candidate via sending email to: <a href=mailto:private@fesod.apache.org target=_blank rel="noopener noreferrer" class="">private@fesod.apache.org</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[VOTE] Add candidate ${CANDIDATE_NAME} as a new committer</span><br/></div></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><br/ [...]
+<p>Let the Vote thread run for <strong>one week</strong>.</p>
+<p>Note that, Voting ends one week from today, i.e.:</p>
+<ul>
+<li class=""><a href="https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD" target=_blank rel="noopener noreferrer" class="">midnight UTC on YYYY-MM-DD</a></li>
+<li class=""><a href=https://community.apache.org/newcommitter.html target=_blank rel="noopener noreferrer" class="">Apache Voting Guidelines</a></li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=close-vote>Close Vote<a href=#close-vote class=hash-link aria-label="Direct link to Close Vote" title="Direct link to Close Vote" translate=no></a></h2>
+<p>After <strong>at least 3 +1 binding vote</strong> and <strong>no veto</strong>, claim the vote result:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[RESULT] [VOTE] Add candidate ${CANDIDATE_NAME} as a new committer</span><br/></div></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=send-invitation-to-the-candidate>Send invitation to the candidate<a href=#send-invitation-to-the-candidate class=hash-link aria-label="Direct link to Send invitation to the candidate" title="Direct link to Send invitation to the candidate" translate=no></a></h2>
+<p>If the vote result is positive, send an invitation to the candidate and cc <a href=mailto:private@fesod.apache.org target=_blank rel="noopener noreferrer" class="">private@fesod.apache.org</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Invitation to become Apache Fesod (Incubating) Committer: ${CANDIDATE_NAME}</span><br/></div></code></pre> [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hello ${CANDIDATE_NAME},</span><br/></div><div class=token-line style=color:#393A34><span class="token pla [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=the-candidate-accepts-the-invitation>The candidate accepts the invitation<a href=#the-candidate-accepts-the-invitation class=hash-link aria-label="Direct link to The candidate accepts the invitation" title="Direct link to The candidate accepts the invitation" translate=no></a></h2>
+<p>If the invitation is accepted, the candidate will receive an email from the ASF.</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Invitation to become Apache Fesod (Incubating) Committer: ${CANDIDATE_NAME}</span><br/></div></code></pre> [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Welcome. Here are the next steps in becoming a project committer. After that</span><br/></div><div class=t [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=add-the-candidate-to-the-committer-list>Add the candidate to the committer list<a href=#add-the-candidate-to-the-committer-list class=hash-link aria-label="Direct link to Add the candidate to the committer list" title="Direct link to Add the candidate to the committer list" translate=no></a></h2>
+<p>After the candidate accepts the invitation and the iCLA is recorded, add the candidate to the committer list
+by <a href=https://whimsy.apache.org/roster/committee/fesod target=_blank rel="noopener noreferrer" class="">whimsy roster tools</a></p>
+<p><img decoding=async loading=lazy alt=Roster src=/assets/images/roster-add-committer-20873b578f8c3b1853cd24d52171ca44.png width=461 height=146 class=img_Q0Px /></p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=welcome-the-new-committer>Welcome the new committer<a href=#welcome-the-new-committer class=hash-link aria-label="Direct link to Welcome the new committer" title="Direct link to Welcome the new committer" translate=no></a></h2>
+<p>Send a welcome email to the new committer.</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Welcome, ${CANDIDATE_NAME}, New Committer!</span><br/></div></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hello, ${CANDIDATE_NAME},</span><br/></div><div class=token-line style=color:#393A34><span class="token pl [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=announcement>Announcement<a href=#announcement class=hash-link aria-label="Direct link to Announcement" title="Direct link to Announcement" translate=no></a></h2>
+<p>Announcing the new committer in the <a href=mailto:dev@fesod.apache.org target=_blank rel="noopener noreferrer" class="">dev@fesod.apache.org</a> mailing list.</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[ANNOUNCEMENT] New committer: ${CANDIDATE_NAME}</span><br/></div></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">The Podling Project Management Committee (PPMC) for Apache Fesod (Incubating)</span><br/></div><div class= [...]
\ No newline at end of file
diff --git a/community/pmc/onboarding/index.html b/community/pmc/onboarding/index.html
new file mode 100644
index 00000000..2facf49e
--- /dev/null
+++ b/community/pmc/onboarding/index.html
@@ -0,0 +1,22 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc/onboarding" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Onboarding | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true proper [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>This document primarily serves as a guide for new PPMC members to Apache Fesod (Incubating).</p>
+<p>Upon receiving an invitation email from Apache Fesod (Incubating) PPMC, a new PPMC member should consider whether accepting.
+If they decide in favor, they should select <strong>"Reply All"</strong> and express their decision.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=subscribe-to-private-mailing-list>Subscribe to Private Mailing List<a href=#subscribe-to-private-mailing-list class=hash-link aria-label="Direct link to Subscribe to Private Mailing List" title="Direct link to Subscribe to Private Mailing List" translate=no></a></h2>
+<ul>
+<li class="">Send email to <a href=mailto:private-subscribe@fesod.apache.org target=_blank rel="noopener noreferrer" class="">private-subscribe@fesod.apache.org</a></li>
+<li class="">You will receive an email with the subject <code>confirm subscribe to private@fesod.apache.org</code></li>
+<li class="">Reply to the email with "Confirm" in the body</li>
+</ul>
+<p>If you receive an email with the subject <code>WELCOME to private@fesod.apache.org</code>, you have successfully subscribed to the private mailing list.</p>
+<p>It's required for PPMC members to subscribe the private mailing list. The private list is only for confidential discussions that should not be made public, such as the suitability of a particular individual to become a committer or a member of the PPMC.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=dont-mix-private-and-public-lists-in-posts>Don’t mix private and public lists in posts<a href=#dont-mix-private-and-public-lists-in-posts class=hash-link aria-label="Direct link to Don’t mix private and public lists in posts" title="Direct link to Don’t mix private and public lists in posts" translate=no></a></h3>
+<ul>
+<li class="">Don’t post to both the dev and private lists. Each member of the PPMC should be on the dev list, so posting to dev is sufficient.</li>
+<li class="">Likewise, don’t post to both the Incubator general and Incubator private lists. Each member of the IPMC is on the Incubator general list, so posting to the general list is sufficient.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=read-ppmc-member-guide>Read PPMC Member Guide<a href=#read-ppmc-member-guide class=hash-link aria-label="Direct link to Read PPMC Member Guide" title="Direct link to Read PPMC Member Guide" translate=no></a></h2>
+<p>Please read <a href=https://incubator.apache.org/guides/ppmc.html target=_blank rel="noopener noreferrer" class="">PPMC GUIDE</a> to know about the general responsibilities of Project Management Committee (PMC) members in managing our project and common how-to procedures for day to day maintenance.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/e [...]
\ No newline at end of file
diff --git a/community/release/release-version/index.html b/community/release/release-version/index.html
new file mode 100644
index 00000000..f41b7944
--- /dev/null
+++ b/community/release/release-version/index.html
@@ -0,0 +1,195 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/release-version" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>How to Release | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-r [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=1-preparation>1. Preparation<a href=#1-preparation class=hash-link aria-label="Direct link to 1. Preparation" title="Direct link to 1. Preparation" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=11-release-guide>1.1 Release Guide<a href=#11-release-guide class=hash-link aria-label="Direct link to 1.1 Release Guide" title="Direct link to 1.1 Release Guide" translate=no></a></h3>
+<p>Refer to the following links to learn about ASF release guidelines:</p>
+<ul>
+<li class=""><a href=http://www.apache.org/dev/release-publishing target=_blank rel="noopener noreferrer" class="">Apache Release Guide</a></li>
+<li class=""><a href=http://www.apache.org/dev/release.html target=_blank rel="noopener noreferrer" class="">Apache Release Policy</a></li>
+<li class=""><a href=https://incubator.apache.org/guides/releasemanagement.html target=_blank rel="noopener noreferrer" class="">Apache Incubator Release</a></li>
+<li class=""><a href=http://www.apache.org/dev/publishing-maven-artifacts.html target=_blank rel="noopener noreferrer" class="">Maven Release Info</a></li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=12-pgp-signature>1.2 PGP Signature<a href=#12-pgp-signature class=hash-link aria-label="Direct link to 1.2 PGP Signature" title="Direct link to 1.2 PGP Signature" translate=no></a></h3>
+<p>If you are a <strong>first-time</strong> release manager, please refer to the <a href=https://infra.apache.org/release-signing target=_blank rel="noopener noreferrer" class="">Apache Releases Signing documentation</a> and the <a href=http://www.apache.org/dev/openpgp.html target=_blank rel="noopener noreferrer" class="">Cryptography with OpenPGP</a> guide to generate a <code>PGP</code> key, which will be used for release signing.</p>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=121-installation>1.2.1 Installation<a href=#121-installation class=hash-link aria-label="Direct link to 1.2.1 Installation" title="Direct link to 1.2.1 Installation" translate=no></a></h4>
+<p>Install the appropriate <code>GnuPG 2.x</code> for your operating system. The latest version is recommended. For example:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>apt-get</span><span class="token plain"> </span><span class="token function" style= [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=122-key-generation>1.2.2 Key Generation<a href=#122-key-generation class=hash-link aria-label="Direct link to 1.2.2 Key Generation" title="Direct link to 1.2.2 Key Generation" translate=no></a></h4>
+<p>Use your <strong><your Apache ID>@apache.org</strong> as the user identifier (USER-ID) and generate a new <code>gpg</code> key.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">gpg --full-gen-key</span><br/></div></code></pre></div></div>
+<p>Example:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">$ gpg --full-gen-key</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> [...]
+<p>Notes:</p>
+<ul>
+<li class="">Key type: Depending on the <code>gpg</code> version, use a secure key type. At least <code>RSA and RSA</code> is recommended.</li>
+<li class="">Key length: 4096 bits is recommended.</li>
+<li class="">Validity period: You may set it to never expire or set an expiration period based on your needs.</li>
+<li class="">Real name: Use your Apache ID.</li>
+<li class="">Email address: Use your Apache email.</li>
+<li class="">Comment: Add comment information.</li>
+</ul>
+<p>After confirming, enter the passphrase:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">┌─────────────────────────────────────────────────────────────┐</span><br/></div><div class=token-line sty [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=123-view-key>1.2.3 View Key<a href=#123-view-key class=hash-link aria-label="Direct link to 1.2.3 View Key" title="Direct link to 1.2.3 View Key" translate=no></a></h4>
+<p>View the key list:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">gpg --list-signatures --keyid-format LONG</span><br/></div></code></pre></div></div>
+<p>After execution, all keys on the local machine will be listed. Locate the desired key by <strong><your Apache ID>@apache.org</strong>.</p>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=124-upload-public-key>1.2.4 Upload Public Key<a href=#124-upload-public-key class=hash-link aria-label="Direct link to 1.2.4 Upload Public Key" title="Direct link to 1.2.4 Upload Public Key" translate=no></a></h4>
+<p>View key information.</p>
+<p>Example:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">$ gpg --list-signatures --keyid-format LONG</span><br/></div><div class=token-line style=color:#393A34><sp [...]
+<p>In the example above, [ <strong>85E2C3CA72D5936C</strong> ] is the <code><key-id></code> that needs to be uploaded. Upload the <strong>public key</strong> to a GPG key server.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">gpg </span><span class="token parameter variable" style=color:#36acaa>--keyserver</span><span class="token [...]
+<p><code>keys.openpgp.org</code> is a randomly chosen key server. You may also use <code>keyserver.ubuntu.com</code> or any other fully functional key server. If the command fails, you can also manually upload the public key online via <a href=https://keyserver.ubuntu.com/ target=_blank rel="noopener noreferrer" class="">OpenPGP Keyserver (ubuntu.com)</a>.</p>
+<p>After the upload (which takes about a minute), check whether the key was created successfully. If unsuccessful, you can retry uploading multiple times.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Check if the key was created successfully</span><span class="tok [...]
+<p>Example:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">$ gpg </span><span class="token parameter variable" style=color:#36acaa>--keyserver</span><span class="tok [...]
+<p>You may also visit <a href=https://keyserver.ubuntu.com/ target=_blank rel="noopener noreferrer" class="">OpenPGP Keyserver (ubuntu.com)</a>, enter the <code>key-id</code>, and click the <code>Search key</code> button to check whether a key with the corresponding name exists.</p>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=125-upload-to-github>1.2.5 Upload to GitHub<a href=#125-upload-to-github class=hash-link aria-label="Direct link to 1.2.5 Upload to GitHub" title="Direct link to 1.2.5 Upload to GitHub" translate=no></a></h4>
+<p>It is recommended to upload the GPG public key to the GitHub account linked to your Apache ID.</p>
+<ul>
+<li class="">Visit <code>https://github.com/settings/keys</code> to add your GPG key.</li>
+<li class="">If you see "Unverified" after adding the key, bind the email address used in the GPG key to your <a href=https://github.com/settings/emails target=_blank rel="noopener noreferrer" class="">GitHub account</a>.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=2-discussion>2. Discussion<a href=#2-discussion class=hash-link aria-label="Direct link to 2. Discussion" title="Direct link to 2. Discussion" translate=no></a></h2>
+<p>Send an email to the DEV mailing list to initiate a discussion for the next release.</p>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">dev@fesod.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[DISCUSS] Release Apache Fesod(Incubating) ${RELEASE_VERSION}</span><br/></div></code></pre></div></div>
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi Community,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=d [...]
+<ul>
+<li class="">${RELEASE_VERSION}: Replace with the next version number to be released.</li>
+<li class="">${RELEASE_MANAGER}: Typically the release manager for this version.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=3-material-preparation>3. Material Preparation<a href=#3-material-preparation class=hash-link aria-label="Direct link to 3. Material Preparation" title="Direct link to 3. Material Preparation" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=31-keys-file>3.1 KEYS File<a href=#31-keys-file class=hash-link aria-label="Direct link to 3.1 KEYS File" title="Direct link to 3.1 KEYS File" translate=no></a></h3>
+<p>If you are a <strong>first-time</strong> release manager or your original key has expired, please <strong>append</strong> the <strong>public key</strong> to the <strong>KEYS</strong> file in the Apache SVN project <strong>release</strong> repository. The KEYS file is maintained in a single authoritative location (the release directory) so that it stays consistent and is available on downloads.apache.org for signature verification:</p>
+<ul>
+<li class="">Release repository: <a href=https://dist.apache.org/repos/dist/release/incubator/fesod target=_blank rel="noopener noreferrer" class="">https://dist.apache.org/repos/dist/release/incubator/fesod</a></li>
+</ul>
+<p>Steps:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Check out to the local fesod-release directory</span><span class [...]
+<p>Notes:</p>
+<ul>
+<li class="">Do not directly overwrite the <code>KEYS</code> file in the repository. Only <strong>append</strong> to it.</li>
+<li class="">The <code>KEYS</code> file is maintained only in the <strong>release</strong> directory (single source of truth). Do <strong>not</strong> create a copy in the dev directory, as two copies tend to drift out of sync.</li>
+<li class="">SVN repositories require PPMC permissions. A PPMC member can assist you with the upload.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=32-pom-configuration>3.2 POM Configuration<a href=#32-pom-configuration class=hash-link aria-label="Direct link to 3.2 POM Configuration" title="Direct link to 3.2 POM Configuration" translate=no></a></h3>
+<p>Configure the local POM files to push the release to the ASF Nexus repository.</p>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=321-project-setup>3.2.1 Project Setup<a href=#321-project-setup class=hash-link aria-label="Direct link to 3.2.1 Project Setup" title="Direct link to 3.2.1 Project Setup" translate=no></a></h4>
+<p>Ensure the project's <code>pom.xml</code> file is configured as follows:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>parent</span><span clas [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=322-maven-settings>3.2.2 Maven Settings<a href=#322-maven-settings class=hash-link aria-label="Direct link to 3.2.2 Maven Settings" title="Direct link to 3.2.2 Maven Settings" translate=no></a></h4>
+<p>Configure your Apache ID and GPG key information in the local Apache Maven configuration file <code>settings.xml</code>.</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>settings</span><span cl [...]
+<p>Encryption of the configuration is recommended. Refer to the following guides:</p>
+<ul>
+<li class=""><a href=https://infra.apache.org/publishing-maven-artifacts.html target=_blank rel="noopener noreferrer" class="">Publishing Maven Releases to Maven Central Repository</a></li>
+<li class=""><a href=http://maven.apache.org/guides/mini/guide-encryption.html target=_blank rel="noopener noreferrer" class="">Maven's password encryption capabilities</a></li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=33-release-artifacts>3.3 Release Artifacts<a href=#33-release-artifacts class=hash-link aria-label="Direct link to 3.3 Release Artifacts" title="Direct link to 3.3 Release Artifacts" translate=no></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=331-pre-release-version>3.3.1 Pre-Release Version<a href=#331-pre-release-version class=hash-link aria-label="Direct link to 3.3.1 Pre-Release Version" title="Direct link to 3.3.1 Pre-Release Version" translate=no></a></h4>
+<p>For example, to release version <code>2.0.0-incubating</code>, follow these steps:</p>
+<ul>
+<li class="">Create a new branch <code>2.0.0-incubating</code> as the release branch.</li>
+<li class="">Update the version number in <code>pom.xml</code> to <code>2.0.0-incubating</code>.</li>
+<li class="">Push the RC (Release Candidate) version tag.</li>
+</ul>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Switch to the release branch</span><span class="token plain"></s [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=332-push-binary-packages>3.3.2 Push Binary Packages<a href=#332-push-binary-packages class=hash-link aria-label="Direct link to 3.3.2 Push Binary Packages" title="Direct link to 3.3.2 Push Binary Packages" translate=no></a></h4>
+<p>Compile the source code of the pre-release RC branch and push the binary packages to the <a href=https://repository.apache.org/#stagingRepositories target=_blank rel="noopener noreferrer" class="">staging repository</a>.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">mvn clean deploy -Papache-release </span><span class="token parameter variable" style=color:#36acaa>-Dskip [...]
+<p>Log in to the ASF Nexus repository with your Apache ID, locate the released version, and click <strong>Close</strong>.</p>
+<blockquote>
+<p>If the close operation fails, it is likely because the public key corresponding to the signing key cannot be retrieved from <code>keys.openpgp.org</code>. Please check via <a href=https://keyserver.ubuntu.com/ target=_blank rel="noopener noreferrer" class="">OpenPGP Keyserver (ubuntu.com)</a> yourself.</p>
+</blockquote>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=333-package-source-code>3.3.3 Package Source Code<a href=#333-package-source-code class=hash-link aria-label="Direct link to 3.3.3 Package Source Code" title="Direct link to 3.3.3 Package Source Code" translate=no></a></h4>
+<p>:::caution Note
+Do not package in your daily working directory!
+:::</p>
+<blockquote>
+<p>Local files such as <code>node_modules</code>, IDE configuration files (e.g., <code>.idea</code>, <code>.vscode</code>), or empty directories left behind after refactoring may accidentally be included in the <code>source-release.zip</code>. This can cause compliance issues (e.g., distributing unauthorized binaries) and lead to a failed vote.</p>
+</blockquote>
+<p>You <strong>must</strong> perform the release process in a <strong>freshly cloned Git repository</strong> to ensure the build artifacts are reproducible and clean.</p>
+<p><strong>Note</strong>: Do not open the source directory with an IDE (such as IntelliJ or VS Code), as it may generate configuration files or compilation caches. Run the Maven release commands directly in the terminal first.</p>
+<p>Use <code>git archive</code> to ensure the source package is clean (excluding the .git directory and other ignored files).</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> archive </span><span class="token parameter va [...]
+<blockquote>
+<p><strong>Note</strong>: The hash <code>e7546d1138d4d3a638df10193a4c29c50a7e55d8</code> here corresponds to the commit hash of tag <code>2.0.0-incubating-rc1</code>.</p>
+</blockquote>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=334-signing>3.3.4 Signing<a href=#334-signing class=hash-link aria-label="Direct link to 3.3.4 Signing" title="Direct link to 3.3.4 Signing" translate=no></a></h4>
+<p>Perform GPG signing and SHA512 checksum calculation on the generated source package.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># 1. Sign the source packages with the specified GPG key-id (.asc) [...]
+<p>After signing, you can verify locally:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Verify signatures</span><span class="token plain"></span><br/></ [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=335-upload-to-svn>3.3.5 Upload to SVN<a href=#335-upload-to-svn class=hash-link aria-label="Direct link to 3.3.5 Upload to SVN" title="Direct link to 3.3.5 Upload to SVN" translate=no></a></h4>
+<p>Upload the signed source packages to the SVN repository.</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Check out the SVN dev repository</span><span class="token plain" [...]
+<p>You need to configure your SVN user first. Alternatively, you can specify the username and password in each command line, for example:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">svn co </span><span class="token parameter variable" style=color:#36acaa>--username</span><span class="tok [...]
+<p>If certain files appear unexpectedly or errors occur, delete the relevant content, execute <code>svn delete</code>, and repeat the upload process above.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=4-community-vote>4. Community Vote<a href=#4-community-vote class=hash-link aria-label="Direct link to 4. Community Vote" title="Direct link to 4. Community Vote" translate=no></a></h2>
+<p>Each release may go through multiple rounds of voting, where RC N and Round N represent the Nth round, i.e., the Nth vote for that version.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=41-initiating-a-vote>4.1 Initiating a Vote<a href=#41-initiating-a-vote class=hash-link aria-label="Direct link to 4.1 Initiating a Vote" title="Direct link to 4.1 Initiating a Vote" translate=no></a></h3>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">dev@fesod.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN</span><br/></div></code></pre></div></div>
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi Community,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=d [...]
+<p>Replace the required content in the body with the actual <code>${RELEASE_VERSION}</code> and <code>RCN</code> round information.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=42-closing-the-vote>4.2 Closing the Vote<a href=#42-closing-the-vote class=hash-link aria-label="Direct link to 4.2 Closing the Vote" title="Direct link to 4.2 Closing the Vote" translate=no></a></h3>
+<p>After <strong>the vote has been open for at least 72 hours and has received at least 3 binding +1 votes</strong>, announce the voting results:</p>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">dev@fesod.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[RESULT][VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN</span><br/></div></code></pre></di [...]
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi Community,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=d [...]
+<p>If the vote fails, first resolve the issues raised, then prepare the materials for a new round <code>RCN</code> and initiate a new round of voting following the release process.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=5-incubator-vote>5. Incubator Vote<a href=#5-incubator-vote class=hash-link aria-label="Direct link to 5. Incubator Vote" title="Direct link to 5. Incubator Vote" translate=no></a></h2>
+<p>After the community vote has passed and concluded, a vote must be initiated on the incubator mailing list.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=51-initiating-a-vote>5.1 Initiating a Vote<a href=#51-initiating-a-vote class=hash-link aria-label="Direct link to 5.1 Initiating a Vote" title="Direct link to 5.1 Initiating a Vote" translate=no></a></h3>
+<p>Similar to initiating a community vote, but with the addition of links to the community vote threads to demonstrate that consensus has been reached within the community.</p>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">general@incubator.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN</span><br/></div></code></pre></div></div>
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=52-announcing-incubator-vote-results>5.2 Announcing Incubator Vote Results<a href=#52-announcing-incubator-vote-results class=hash-link aria-label="Direct link to 5.2 Announcing Incubator Vote Results" title="Direct link to 5.2 Announcing Incubator Vote Results" translate=no></a></h3>
+<p>After <strong>the vote has been open for at least 72 hours and has received at least 3 binding +1 votes</strong>, announce the voting results:</p>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">general@incubator.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[RESULT][VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN</span><br/></div></code></pre></di [...]
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hi Incubator PMC,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" sty [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=6-completing-the-release>6. Completing the Release<a href=#6-completing-the-release class=hash-link aria-label="Direct link to 6. Completing the Release" title="Direct link to 6. Completing the Release" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=61-migrating-source-and-binary-packages>6.1 Migrating Source and Binary Packages<a href=#61-migrating-source-and-binary-packages class=hash-link aria-label="Direct link to 6.1 Migrating Source and Binary Packages" title="Direct link to 6.1 Migrating Source and Binary Packages" translate=no></a></h3>
+<p>Log in to the Apache Nexus repository, select the previously closed <strong>orgapachefesod-XXX</strong>, and click the <code>Release</code> icon to publish.</p>
+<ol>
+<li class="">
+<p>Move the signature files, src, and bin from dev to the release path. Refer to the following command:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">svn </span><span class="token function" style=color:#d73a49>mv</span><span class="token plain"> https://di [...]
+</li>
+<li class="">
+<p>Set the previous release note as the latest release (Set as the latest release) and submit it.</p>
+</li>
+<li class="">
+<p>Update the documentation for version x.x.x on the Fesod website and add the corresponding binary and source download links.</p>
+</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=62-release-announcement>6.2 Release Announcement<a href=#62-release-announcement class=hash-link aria-label="Direct link to 6.2 Release Announcement" title="Direct link to 6.2 Release Announcement" translate=no></a></h3>
+<p>To:</p>
+<div class="language-mail codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-mail codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">announce@apache.org,dev@fesod.apache.org</span><br/></div></code></pre></div></div>
+<p>Subject:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">[ANNOUNCE] Apache Fesod(Incubating) ${RELEASE_VERSION} released</span><br/></div></code></pre></div></div>
+<p>Body:</p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Hello everyone,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style [...]
\ No newline at end of file
diff --git a/community/release/verify-release/index.html b/community/release/verify-release/index.html
new file mode 100644
index 00000000..12b644e6
--- /dev/null
+++ b/community/release/verify-release/index.html
@@ -0,0 +1,91 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/verify-release" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>How to Verify Release | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>For a detailed checklist, please refer to the official <a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist target=_blank rel="noopener noreferrer" class="">Incubator Release Checklist</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=1-download-the-release-candidate>1. Download the Release Candidate<a href=#1-download-the-release-candidate class=hash-link aria-label="Direct link to 1. Download the Release Candidate" title="Direct link to 1. Download the Release Candidate" translate=no></a></h2>
+<blockquote>
+<p><strong>Prerequisite:</strong> Ensure you have <code>gpg</code> or <code>gpg2</code> installed.</p>
+</blockquote>
+<p>:::caution Note
+Downloading may take some time depending on your network connection.
+:::</p>
+<p>Set environment variables for convenience (replace with actual versions):</p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Example: export RELEASE_VERSION=0.1.0</span><span class="token [...]
+<p>Download the artifacts:</p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Option 1: SVN checkout (Recommended)</span><span class="token [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=2-verify-compliance-and-integrity>2. Verify Compliance and Integrity<a href=#2-verify-compliance-and-integrity class=hash-link aria-label="Direct link to 2. Verify Compliance and Integrity" title="Direct link to 2. Verify Compliance and Integrity" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=21-check-package-completeness>2.1 Check Package Completeness<a href=#21-check-package-completeness class=hash-link aria-label="Direct link to 2.1 Check Package Completeness" title="Direct link to 2.1 Check Package Completeness" translate=no></a></h3>
+<p>The uploaded artifacts must contain:</p>
+<ol>
+<li class=""><strong>Source Package</strong> (Required)</li>
+<li class=""><strong>Signature file</strong> (.asc, Required)</li>
+<li class=""><strong>Hash file</strong> (.sha512, Required)</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=22-verify-gpg-signature>2.2 Verify GPG Signature<a href=#22-verify-gpg-signature class=hash-link aria-label="Direct link to 2.2 Verify GPG Signature" title="Direct link to 2.2 Verify GPG Signature" translate=no></a></h3>
+<p><strong>2.2.1 Import KEYS</strong></p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Download KEYS (kept in the release directory)</span><span clas [...]
+<p><strong>2.2.2 Trust the Public Key (Optional but Recommended)</strong></p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Find the Key ID used for this release</span><span class="token [...]
+<p><strong>2.2.3 Verify the Signature</strong></p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Verify Source Package</span><span class="token plain"></span>< [...]
+<blockquote>
+<p><strong>Success Indicator:</strong> The output must include <strong><code>Good signature</code></strong>.</p>
+</blockquote>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=23-verify-sha512-checksum>2.3 Verify SHA512 Checksum<a href=#23-verify-sha512-checksum class=hash-link aria-label="Direct link to 2.3 Verify SHA512 Checksum" title="Direct link to 2.3 Verify SHA512 Checksum" translate=no></a></h3>
+<p><strong>Mac OS / Linux:</strong></p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Verify Source Package</span><span class="token plain"></span>< [...]
+<p><strong>Windows:</strong></p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">certUtil </span><span class="token parameter variable" style=color:#36acaa>-hashfile</span><span class=" [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=3-check-source-package-content-crucial>3. Check Source Package Content (Crucial)<a href=#3-check-source-package-content-crucial class=hash-link aria-label="Direct link to 3. Check Source Package Content (Crucial)" title="Direct link to 3. Check Source Package Content (Crucial)" translate=no></a></h2>
+<p>Extract the source package:</p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>tar</span><span class="token plain"> </span><span class="token parameter variable [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=31-incubator-specific-checks>3.1 Incubator Specific Checks<a href=#31-incubator-specific-checks class=hash-link aria-label="Direct link to 3.1 Incubator Specific Checks" title="Direct link to 3.1 Incubator Specific Checks" translate=no></a></h3>
+<ul class="contains-task-list containsTaskList_TCLq">
+<li class=task-list-item><input type=checkbox disabled/> <strong>DISCLAIMER:</strong> Ensure a <code>DISCLAIMER</code> (or <code>DISCLAIMER-WIP</code>) file exists in the root directory. This is mandatory for incubating projects.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=32-asf-license-header-check-rat>3.2 ASF License Header Check (RAT)<a href=#32-asf-license-header-check-rat class=hash-link aria-label="Direct link to 3.2 ASF License Header Check (RAT)" title="Direct link to 3.2 ASF License Header Check (RAT)" translate=no></a></h3>
+<p>Run the Apache RAT (Release Audit Tool) check:</p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Run RAT check</span><span class="token plain"></span><br/></di [...]
+<p><strong>Check the report (<code>target/rat.txt</code>):</strong></p>
+<ul>
+<li class=""><strong>Unapproved Licenses:</strong> Must be <strong>0</strong>.</li>
+<li class=""><strong>Binaries:</strong> Should be <strong>0</strong> (Source packages should not contain compiled jars/classes).</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=33-compilation-verification>3.3 Compilation Verification<a href=#33-compilation-verification class=hash-link aria-label="Direct link to 3.3 Compilation Verification" title="Direct link to 3.3 Compilation Verification" translate=no></a></h3>
+<p>Ensure the source code compiles successfully.</p>
+<div class="language-shell codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-shell codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># This may take time depending on network to download dependenci [...]
+<p><strong>Checklist:</strong></p>
+<ul class="contains-task-list containsTaskList_TCLq">
+<li class=task-list-item><input type=checkbox disabled/> Build Success.</li>
+<li class=task-list-item><input type=checkbox disabled/> No unexpected binary files in the source tree.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=34-license-and-notice>3.4 License and Notice<a href=#34-license-and-notice class=hash-link aria-label="Direct link to 3.4 License and Notice" title="Direct link to 3.4 License and Notice" translate=no></a></h3>
+<p>Manually check the following files in the root directory:</p>
+<ul class="contains-task-list containsTaskList_TCLq">
+<li class=task-list-item><input type=checkbox disabled/> <strong>LICENSE:</strong> Exists and contains the Apache License 2.0.</li>
+<li class=task-list-item><input type=checkbox disabled/> <strong>NOTICE:</strong></li>
+<li class="">
+<ul>
+<li class="">Exists.</li>
+</ul>
+</li>
+<li class="">
+<ul>
+<li class="">Copyright year is current (e.g., includes 2025/2026).</li>
+</ul>
+</li>
+<li class="">
+<ul>
+<li class="">Contains required attributions for bundled dependencies (if any).</li>
+</ul>
+</li>
+<li class=task-list-item><input type=checkbox disabled/> <strong>DISCLAIMER:</strong> Exists.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=4-email-reply-templates>4. Email Reply Templates<a href=#4-email-reply-templates class=hash-link aria-label="Direct link to 4. Email Reply Templates" title="Direct link to 4. Email Reply Templates" translate=no></a></h2>
+<p>After verification, reply to the vote thread on <code>dev@fesod.apache.org</code>.</p>
+<div class="theme-admonition theme-admonition-tip admonition_z6k5 alert alert--success"><div class=admonitionHeading_IS3K><span class=admonitionIcon_EGqR><svg viewBox="0 0 12 16"><path fill-rule=evenodd d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67- [...]
+<p><strong>Template for PPMC Members:</strong></p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">+1 (binding)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=di [...]
+<p><strong>Template for Contributors (Non-PPMC):</strong></p>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">+1 (non-binding)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" styl [...]
\ No newline at end of file
diff --git a/community/security/index.html b/community/security/index.html
new file mode 100644
index 00000000..12a9c5fb
--- /dev/null
+++ b/community/security/index.html
@@ -0,0 +1,23 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-security" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Security | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:im [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<p>The Apache Software Foundation takes a rigorous stance on eliminating security issues in its software projects. Likewise, Apache Fesod (Incubating) is also vigilant and takes security issues related to its features and functionality into the highest consideration.</p>
+<p>If you have any concerns regarding Apache Fesod (Incubating)’s security, or you discover a vulnerability or potential threat, please don’t hesitate to get in touch with the <a href=http://www.apache.org/security/ target=_blank rel="noopener noreferrer" class="">Apache Security Team</a> by dropping an email at <a href=mailto:security@apache.org target=_blank rel="noopener noreferrer" class="">security@apache.org</a>.</p>
+<p>Please specify the project name as "Apache Fesod (Incubating)" in the email, and provide a description of the relevant problem or potential threat. You are also urged to recommend how to reproduce and replicate the issue.</p>
+<p>The Apache Security Team and the Apache Fesod (Incubating) community will get back to you after assessing and analyzing the findings.</p>
+<p><strong>Please note</strong> that the security issue should be reported on the security email first, before disclosing it on any public domain.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=advisories-for-dependencies>Advisories for Dependencies<a href=#advisories-for-dependencies class=hash-link aria-label="Direct link to Advisories for Dependencies" title="Direct link to Advisories for Dependencies" translate=no></a></h2>
+<p>Many organizations employ security scanning tools to identify components with known security advisories. Although we strongly recommend these tools as they can alert users to potential risks, they often generate false positives. This occurs because a vulnerable dependency may not necessarily impact Apache Fesod (Incubating) if used in a non-exploitable manner.</p>
+<p>Therefore, advisories regarding Apache Fesod (Incubating)'s dependencies are not automatically considered critical. However, if additional analysis indicates that Apache Fesod (Incubating) might be affected by a dependency's vulnerability, please report your findings privately to <a href=mailto:security@apache.org target=_blank rel="noopener noreferrer" class="">security@apache.org</a>.</p>
+<p>If a dependency advisory is identified, please:</p>
+<ol>
+<li class="">Verify if our DependencyCheck suppressions contain relevant details.</li>
+<li class="">Check our issue tracker for discussions regarding this advisory.</li>
+<li class="">Conduct your own analysis to determine whether Apache Fesod (Incubating) is affected.
+<ul>
+<li class="">If affected, report your findings privately through <a href=mailto:security@apache.org target=_blank rel="noopener noreferrer" class="">security@apache.org</a>.</li>
+<li class="">If not affected, please contribute by updating the DependencyCheck suppression list, clearly documenting why Apache Fesod (Incubating) is not impacted.</li>
+</ul>
+</li>
+</ol></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/community/security.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t [...]
\ No newline at end of file
diff --git a/docs/download/index.html b/docs/download/index.html
new file mode 100644
index 00000000..05d33697
--- /dev/null
+++ b/docs/download/index.html
@@ -0,0 +1,75 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-download" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Download | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:imag [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Download Apache Fesod (Incubating)</h1></header>
+<p>Here is the Apache Fesod (Incubating) official download page. Apache Fesod provides source releases that can be downloaded from the ASF distribution site. Binary artifacts are available through Maven Central.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=the-latest-stable-release>The Latest Stable Release<a href=#the-latest-stable-release class=hash-link aria-label="Direct link to The Latest Stable Release" title="Direct link to The Latest Stable Release" translate=no></a></h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th style=text-align:center>Version<th style=text-align:center>Date<th style=text-align:left>Download<th style=text-align:center>Release Notes<tbody><tr><td style=text-align:center>2.0.2-incubating<td style=text-align:center>2026-05-30<td style=text-align:left><a href=https://www.apache.org/dyn/closer.lua/incubator/fesod/2.0.2-incubating/apache-fesod-2.0.2-incubating-src.tar.gz target=_blank rel="noopener noreferrer" class="">apache-fesod-2.0.2-incubating-src.tar.gz</a> [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=all-archived-releases>All Archived Releases<a href=#all-archived-releases class=hash-link aria-label="Direct link to All Archived Releases" title="Direct link to All Archived Releases" translate=no></a></h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th style=text-align:center>Version<th style=text-align:center>Date<th style=text-align:left>Download<th style=text-align:center>Release Notes<tbody><tr><td style=text-align:center>2.0.1-incubating<td style=text-align:center>2026-02-11<td style=text-align:left><a href=https://www.apache.org/dyn/closer.lua/incubator/fesod/2.0.1-incubating/apache-fesod-2.0.1-incubating-src.tar.gz target=_blank rel="noopener noreferrer" class="">apache-fesod-2.0.1-incubating-src.tar.gz</a> [...]
+<p>For older releases, please check the <a href=https://archive.apache.org/dist/incubator/fesod/ target=_blank rel="noopener noreferrer" class="">archive</a>.</p>
+<p>For non-Apache releases, please check the <a href=https://repo1.maven.org/maven2/cn/idev/excel/fastexcel/ target=_blank rel="noopener noreferrer" class="">non-apache releases</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=verifying-apache-releases>Verifying Apache Releases<a href=#verifying-apache-releases class=hash-link aria-label="Direct link to Verifying Apache Releases" title="Direct link to Verifying Apache Releases" translate=no></a></h2>
+<p>Before use, please refer to this <a href=https://www.apache.org/info/verification.html target=_blank rel="noopener noreferrer" class="">official guide</a> to verify all Apache release versions, including the integrity and authenticity of source code releases.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=download-verification-files>Download Verification Files<a href=#download-verification-files class=hash-link aria-label="Direct link to Download Verification Files" title="Direct link to Download Verification Files" translate=no></a></h3>
+<p>Download the <a href=https://downloads.apache.org/incubator/fesod/KEYS target=_blank rel="noopener noreferrer" class="">project release KEYS</a> file containing the public keys used for signing releases.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=verify-signature>Verify Signature<a href=#verify-signature class=hash-link aria-label="Direct link to Verify Signature" title="Direct link to Verify Signature" translate=no></a></h3>
+<ol>
+<li class="">
+<p>Import the KEYS file to your GPG keyring:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">gpg </span><span class="token parameter variable" style=color:#36acaa>--import</span><span class="token pl [...]
+</li>
+<li class="">
+<p>Download the source release, .asc signature file, and .sha512 checksum file.</p>
+</li>
+<li class="">
+<p>Verify the GPG signature:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">gpg </span><span class="token parameter variable" style=color:#36acaa>--verify</span><span class="token pl [...]
+</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=verify-checksum>Verify Checksum<a href=#verify-checksum class=hash-link aria-label="Direct link to Verify Checksum" title="Direct link to Verify Checksum" translate=no></a></h3>
+<p>Verify the <code>SHA-512</code> checksum:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">shasum </span><span class="token parameter variable" style=color:#36acaa>-a</span><span class="token plain [...]
+<p>Or on Linux:</p>
+<div class="language-bash codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-bash codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">sha512sum </span><span class="token parameter variable" style=color:#36acaa>-c</span><span class="token pl [...]
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 00000000..4323aaf6
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,32 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-introduce" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Introduction | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Apache Fesod (Incubating)</h1></header>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=introduction>Introduction<a href=#introduction class=hash-link aria-label="Direct link to Introduction" title="Direct link to Introduction" translate=no></a></h2>
+<p><strong>Apache Fesod (Incubating)</strong> is a high-performance and memory-efficient Java library for reading and writing
+spreadsheet
+files, designed to simplify development and ensure reliability.</p>
+<p>Apache Fesod (Incubating) can provide developers and enterprises with great freedom and flexibility. We plan to
+introduce more new features in the future to continually enhance user experience and tool usability. Apache Fesod (
+Incubating) is committed to being your best choice for handling spreadsheet files.</p>
+<p>The name fesod(pronounced <code>/ˈfɛsɒd/</code>), an acronym for "fast easy spreadsheet and other documents" expresses the
+project's origin, background and vision.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=features>Features<a href=#features class=hash-link aria-label="Direct link to Features" title="Direct link to Features" translate=no></a></h3>
+<ul>
+<li class=""><strong>High-performance Reading and Writing</strong>: Apache Fesod (Incubating) focuses on performance optimization, capable of
+efficiently handling large-scale spreadsheet data. Compared to some traditional spreadsheet processing libraries, it
+can
+significantly reduce memory consumption.</li>
+<li class=""><strong>Simplicity and Ease of Use</strong>: The library offers a simple and intuitive API, allowing developers to easily integrate
+it into projects, whether for simple spreadsheet operations or complex data processing.</li>
+<li class=""><strong>Stream Operations</strong>: Apache Fesod (Incubating) supports stream reading, minimizing the problem of loading large
+amounts of data at once. This design is especially important when dealing with hundreds of thousands or even millions
+of rows of data.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=quick-example>Quick Example<a href=#quick-example class=hash-link aria-label="Direct link to Quick Example" title="Direct link to Quick Example" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=read>Read<a href=#read class=hash-link aria-label="Direct link to Read" title="Direct link to Read" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=write>Write<a href=#write class=hash-link aria-label="Direct link to Write" title="Direct link to Write" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+<div class="theme-admonition theme-admonition-tip admonition_z6k5 alert alert--success"><div class=admonitionHeading_IS3K><span class=admonitionIcon_EGqR><svg viewBox="0 0 12 16"><path fill-rule=evenodd d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67- [...]
\ No newline at end of file
diff --git a/docs/migration/from-fastexcel/index.html b/docs/migration/from-fastexcel/index.html
new file mode 100644
index 00000000..fc2686b5
--- /dev/null
+++ b/docs/migration/from-fastexcel/index.html
@@ -0,0 +1,555 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-migration/from-fastexcel" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>From FastExcel | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Migration Guide: FastExcel to Apache Fesod (Incubating)</h1></header>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
+<p>This guide provides a comprehensive roadmap for migrating applications from cn.idev FastExcel library to Apache Fesod (Incubating). Apache Fesod (Incubating) is the evolution of this project, now under the Apache Software Foundation (Incubating), offering the same high-performance Excel processing capabilities with enhanced community support and long-term sustainability.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=why-migrate>Why Migrate?<a href=#why-migrate class=hash-link aria-label="Direct link to Why Migrate?" title="Direct link to Why Migrate?" translate=no></a></h3>
+<ul>
+<li class=""><strong>Apache Software Foundation Support</strong>: Apache Fesod (Incubating) is now part of the Apache Software Foundation, ensuring long-term maintenance and community-driven development</li>
+<li class=""><strong>Seamless Transition</strong>: The API remains virtually identical, requiring minimal code changes</li>
+<li class=""><strong>Enhanced Branding</strong>: Unified naming conventions under the Apache Fesod (Incubating) umbrella</li>
+<li class=""><strong>Continued Innovation</strong>: Access to future enhancements and features under active Apache governance</li>
+<li class=""><strong>Backward Compatibility</strong>: Deprecated aliases (FastExcel) are temporarily maintained for gradual migration</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=migration-scope>Migration Scope<a href=#migration-scope class=hash-link aria-label="Direct link to Migration Scope" title="Direct link to Migration Scope" translate=no></a></h3>
+<p>This migration primarily involves:</p>
+<ol>
+<li class="">Updating Maven/Gradle dependencies</li>
+<li class="">Replacing deprecated class names with FesodSheet</li>
+<li class="">Updating package imports</li>
+<li class="">Verifying functionality through comprehensive testing</li>
+</ol>
+<p>The core API, annotations, and processing logic remain unchanged, ensuring a low-risk migration path.</p>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=migration-steps>Migration Steps<a href=#migration-steps class=hash-link aria-label="Direct link to Migration Steps" title="Direct link to Migration Steps" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=step-1-update-dependencies>Step 1: Update Dependencies<a href=#step-1-update-dependencies class=hash-link aria-label="Direct link to Step 1: Update Dependencies" title="Direct link to Step 1: Update Dependencies" translate=no></a></h3>
+<p>Replace your existing dependency with Apache Fesod (Incubating):</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Source<th>GroupId<th>ArtifactId<th>Version<tbody><tr><td><strong>cn.idev FastExcel</strong><td>cn.idev.excel<td>fastexcel<td>1.3.0<tr><td><strong>Apache Fesod (Incubating)</strong> ✅<td>org.apache.fesod<td>fesod-sheet<td>2.0.2-incubating+</table>
+<p><strong>Maven:</strong></p>
+<p>Before:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>dependency</span><span [...]
+<p>After:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>dependency</span><span [...]
+<p><strong>Gradle:</strong></p>
+<p>Before:</p>
+<div class="language-groovy codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-groovy codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">implementation 'cn.idev.excel:fastexcel:1.3.0'</span><br/></div></code></pre></div></div>
+<p>After:</p>
+<div class="language-gradle codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-gradle codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">implementation 'org.apache.fesod:fesod-sheet:2.0.2-incubating'</span><br/></div></code></pre></div></div>
+<blockquote>
+<p><strong>Note</strong>: The <code>fesod-sheet</code> module is the core module for Excel/CSV processing. It automatically includes the necessary dependencies (<code>fesod-common</code> and <code>fesod-shaded</code>).</p>
+</blockquote>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=step-2-package-import-updates>Step 2: Package Import Updates<a href=#step-2-package-import-updates class=hash-link aria-label="Direct link to Step 2: Package Import Updates" title="Direct link to Step 2: Package Import Updates" translate=no></a></h3>
+<p>Update all import statements to use the new Apache Fesod (Incubating) package structure.</p>
+<p><strong>Core Entry Classes Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.FastExcel;</code><td><code>import org.apache.fesod.sheet.FastExcel;</code><tr><td><code>import cn.idev.excel.FastExcelFactory;</code><td><code>import org.apache.fesod.sheet.FastExcelFactory;</code><tr><td><code>import cn.idev.excel.ExcelWriter;</code><td><code>import org.apache.fesod.sheet.ExcelWriter;</code><tr><td><code>import cn.idev.excel.ExcelReader;</code><td><code>import org.apache.fesod.sheet.ExcelRead [...]
+<blockquote>
+<p><strong>Note</strong>: After this phase, <code>FastExcel.read(...)</code> and <code>FastExcelFactory.writerSheet(...)</code>
+still compile — they resolve to the <code>@Deprecated</code> bridge classes in Fesod.
+Step 3 replaces them with the canonical <code>FesodSheet</code> class.</p>
+</blockquote>
+<p><strong>Read API Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.read.listener.ReadListener;</code><td><code>import org.apache.fesod.sheet.read.listener.ReadListener;</code><tr><td><code>import cn.idev.excel.read.listener.PageReadListener;</code><td><code>import org.apache.fesod.sheet.read.listener.PageReadListener;</code><tr><td><code>import cn.idev.excel.read.metadata.ReadSheet;</code><td><code>import org.apache.fesod.sheet.read.metadata.ReadSheet;</code><tr><td><code>imp [...]
+<p><strong>Write API Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.write.metadata.WriteSheet;</code><td><code>import org.apache.fesod.sheet.write.metadata.WriteSheet;</code><tr><td><code>import cn.idev.excel.write.metadata.WriteWorkbook;</code><td><code>import org.apache.fesod.sheet.write.metadata.WriteWorkbook;</code><tr><td><code>import cn.idev.excel.write.metadata.WriteTable;</code><td><code>import org.apache.fesod.sheet.write.metadata.WriteTable;</code><tr><td><code>impor [...]
+<p><strong>Write Handlers Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.write.handler.WriteHandler;</code><td><code>import org.apache.fesod.sheet.write.handler.WriteHandler;</code><tr><td><code>import cn.idev.excel.write.handler.SheetWriteHandler;</code><td><code>import org.apache.fesod.sheet.write.handler.SheetWriteHandler;</code><tr><td><code>import cn.idev.excel.write.handler.CellWriteHandler;</code><td><code>import org.apache.fesod.sheet.write.handler.CellWriteHandler;</code>< [...]
+<p><strong>Annotations Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.annotation.ExcelProperty;</code><td><code>import org.apache.fesod.sheet.annotation.ExcelProperty;</code><tr><td><code>import cn.idev.excel.annotation.ExcelIgnore;</code><td><code>import org.apache.fesod.sheet.annotation.ExcelIgnore;</code><tr><td><code>import cn.idev.excel.annotation.ExcelIgnoreUnannotated;</code><td><code>import org.apache.fesod.sheet.annotation.ExcelIgnoreUnannotated;</code><tr><td><code>imp [...]
+<p><strong>Converters Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.converters.Converter;</code><td><code>import org.apache.fesod.sheet.converters.Converter;</code><tr><td><code>import cn.idev.excel.converters.AutoConverter;</code><td><code>import org.apache.fesod.sheet.converters.AutoConverter;</code><tr><td><code>import cn.idev.excel.converters.ReadConverterContext;</code><td><code>import org.apache.fesod.sheet.converters.ReadConverterContext;</code><tr><td><code>import cn.i [...]
+<p><strong>Enums Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.enums.CellDataTypeEnum;</code><td><code>import org.apache.fesod.sheet.enums.CellDataTypeEnum;</code><tr><td><code>import cn.idev.excel.enums.CellExtraTypeEnum;</code><td><code>import org.apache.fesod.sheet.enums.CellExtraTypeEnum;</code><tr><td><code>import cn.idev.excel.enums.WriteDirectionEnum;</code><td><code>import org.apache.fesod.sheet.enums.WriteDirectionEnum;</code><tr><td><code>import cn.idev.excel.en [...]
+<p><strong>Exceptions and Metadata Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.exception.ExcelAnalysisException;</code><td><code>import org.apache.fesod.sheet.exception.ExcelAnalysisException;</code><tr><td><code>import cn.idev.excel.exception.ExcelAnalysisStopException;</code><td><code>import org.apache.fesod.sheet.exception.ExcelAnalysisStopException;</code><tr><td><code>import cn.idev.excel.exception.ExcelCommonException;</code><td><code>import org.apache.fesod.sheet.exception.ExcelCo [...]
+<p><strong>Wildcard catch-all</strong></p>
+<p>After all specific replacements above, scan for any remaining wildcard imports:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import cn.idev.excel.</code><td><code>import org.apache.fesod.sheet.</code><tr><td><code>import org.apache.fesod.excel.</code><td><code>import org.apache.fesod.sheet.</code></table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=step-3-entry-class-rename-strongly-recommended>Step 3: Entry class rename (STRONGLY RECOMMENDED)<a href=#step-3-entry-class-rename-strongly-recommended class=hash-link aria-label="Direct link to Step 3: Entry class rename (STRONGLY RECOMMENDED)" title="Direct link to Step 3: Entry class rename (STRONGLY RECOMMENDED)" translate=no></a></h3>
+<p><code>FastExcel</code> and <code>FastExcelFactory</code> compile in Fesod but are <code>@Deprecated</code> and
+<strong>will be removed in a future release</strong>. Replace all call sites with <code>FesodSheet</code>.</p>
+<p><strong>Import Replacements:</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>import org.apache.fesod.sheet.FastExcel;</code><td><code>import org.apache.fesod.sheet.FesodSheet;</code><tr><td><code>import org.apache.fesod.sheet.FastExcelFactory;</code><td><code>import org.apache.fesod.sheet.FesodSheet;</code></table>
+<p><strong>Call Site Replacements - FastExcel</strong></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>FastExcel.read()</code><td><code>FesodSheet.read()</code><tr><td><code>FastExcel.write()</code><td><code>FesodSheet.write()</code><tr><td><code>FastExcel.writerSheet()</code><td><code>FesodSheet.writerSheet()</code><tr><td><code>FastExcel.readSheet()</code><td><code>FesodSheet.readSheet()</code><tr><td><code>FastExcel.writerTable()</code><td><code>FesodSheet.writerTable()</code></table>
+<p><strong>Call Site Replacements — FastExcelFactory</strong></p>
+<p>FastExcel 1.3 shipped <code>FastExcelFactory</code> as a second entry class with an
+identical API surface. All of its static methods map directly to <code>FesodSheet</code>:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Before<th>After<tbody><tr><td><code>FastExcelFactory.read()</code><td><code>FesodSheet.read()</code><tr><td><code>FastExcelFactory.write()</code><td><code>FesodSheet.write()</code><tr><td><code>FastExcelFactory.writerSheet()</code><td><code>FesodSheet.writerSheet()</code><tr><td><code>FastExcelFactory.readSheet()</code><td><code>FesodSheet.readSheet()</code><tr><td><code>FastExcelFactory.writerTable()</code><td><code>FesodSheet.writerTable()</code></table>
+<p><strong>Type Reference Rename</strong></p>
+<p>If <code>FastExcel</code> or <code>FastExcelFactory</code> appear as a <strong>type name</strong> (not a call site),
+rename those too:</p>
+<ul>
+<li class="">Variable type: <code>FastExcel x = ...</code> → <code>FesodSheet x = ...</code></li>
+<li class="">Class literal: <code>FastExcel.class</code> → <code>FesodSheet.class</code></li>
+</ul>
+<p><code>ExcelWriter</code> and <code>ExcelReader</code> are <strong>not renamed</strong>, they keep the same class name.</p>
+<p><strong>CGLIB class name (conditional)</strong></p>
+<p>This phase only applies if the project contains code that <strong>inspects or asserts
+on generated CGLIB class names at runtime</strong>, for example in tests or serialization logic.</p>
+<p>Search all <code>.java</code> files for the string <code>ByFastExcelCGLIB</code>.
+If found, replace with <code>ByFesodCGLIB</code>.</p>
+<p>In Fesod, the naming policy is defined in
+<code>org.apache.fesod.sheet.util.BeanMapUtils.FesodSheetNamingPolicy</code> and its
+<code>getTag()</code> returns <code>ByFesodCGLIB</code>.</p>
+<p>If no file references <code>ByFastExcelCGLIB</code>, skip this phase entirely.</p>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=migration-strategies>Migration Strategies<a href=#migration-strategies class=hash-link aria-label="Direct link to Migration Strategies" title="Direct link to Migration Strategies" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=gradual-migration-recommended>Gradual Migration (Recommended)<a href=#gradual-migration-recommended class=hash-link aria-label="Direct link to Gradual Migration (Recommended)" title="Direct link to Gradual Migration (Recommended)" translate=no></a></h3>
+<p>Utilize the deprecated alias classes for a phased migration approach.</p>
+<p><strong>Phase 1: Dependency Update Only</strong></p>
+<ul>
+<li class="">Update Maven/Gradle dependency to Apache Fesod (Incubating)</li>
+<li class="">Keep using FastExcel classes (now deprecated aliases)</li>
+<li class="">Update package imports only</li>
+<li class="">Run comprehensive tests to verify compatibility</li>
+</ul>
+<p><strong>Phase 2: Class Name Migration</strong></p>
+<ul>
+<li class="">Progressively replace deprecated classes with FesodSheet</li>
+<li class="">Use IDE refactoring tools for bulk renaming</li>
+<li class="">Migrate module by module or feature by feature</li>
+<li class="">Maintain thorough test coverage throughout</li>
+</ul>
+<p><strong>Phase 3: Cleanup</strong></p>
+<ul>
+<li class="">Remove all references to deprecated classes</li>
+<li class="">Resolve deprecation warnings</li>
+<li class="">Update documentation and code comments</li>
+</ul>
+<p><strong>Benefits:</strong></p>
+<ul>
+<li class="">Lower risk through incremental changes</li>
+<li class="">Easier rollback if issues arise</li>
+<li class="">Minimal disruption to ongoing development</li>
+<li class="">Allows time for thorough testing at each phase</li>
+</ul>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=conclusion>Conclusion<a href=#conclusion class=hash-link aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate=no></a></h2>
+<p>Migrating from cn.idev FastExcel to Apache Fesod (Incubating) is a straightforward process due to the high degree of API compatibility and backward-compatible deprecated aliases. The primary effort involves updating dependency declarations and package imports, with minimal to no logic changes required.</p>
+<p>The gradual migration strategy, supported by the temporary deprecated aliases (FastExcel, FastExcelFactory), allows teams to migrate at their own pace while maintaining full functionality.</p>
+<p>By following this guide, organizations can seamlessly transition to Apache Fesod (Incubating) and benefit from the long-term sustainability and community support of the Apache Software Foundation ecosystem.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/docs/migration/from-fastexcel.md target=_blank rel="noopener noreferrer" cla [...]
\ No newline at end of file
diff --git a/docs/quickstart/guide/index.html b/docs/quickstart/guide/index.html
new file mode 100644
index 00000000..02d02684
--- /dev/null
+++ b/docs/quickstart/guide/index.html
@@ -0,0 +1,78 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-quickstart/guide" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Guide | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Installation</h1></header>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=compatibility-information>Compatibility Information<a href=#compatibility-information class=hash-link aria-label="Direct link to Compatibility Information" title="Direct link to Compatibility Information" translate=no></a></h2>
+<p>The following table lists the minimum Java language version requirements for each version of the Apache Fesod(
+Incubating) library:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Version<th>JDK Version Support Range<th>Notes<tbody><tr><td>2.0.2-incubating<td>JDK8 - JDK25<td>Apache Incubator release<tr><td>2.0.1-incubating<td>JDK8 - JDK25<td>Apache Incubator release<tr><td>2.0.0-incubating<td>JDK8 - JDK25<td>NA(not available)<tr><td>1.3.x<td>JDK8 - JDK25<td>Non-Apache release<tr><td>1.2.x<td>JDK8 - JDK21<td>Non-Apache release<tr><td>1.1.x<td>JDK8 - JDK21<td>Non-Apache release<tr><td>1.0.x<td>JDK8 - JDK21<td>Non-Apache release</table>
+<p>We strongly recommend using the latest version of Apache Fesod(Incubating), as performance optimizations, bug fixes, and
+new features
+in the latest version will enhance your experience.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=dependencies>Dependencies<a href=#dependencies class=hash-link aria-label="Direct link to Dependencies" title="Direct link to Dependencies" translate=no></a></h3>
+<p>Apache Fesod(Incubating) uses the following key dependencies:</p>
+<ul>
+<li class=""><strong>Apache POI 5.5.1</strong> - For Excel file processing</li>
+<li class=""><strong>Apache Commons CSV 1.14.1</strong> - For CSV file support</li>
+<li class=""><strong>Ehcache 3.9.11</strong> - For caching functionality</li>
+</ul>
+<blockquote>
+<p>If your project already includes POI-related components, you may need to manually exclude POI-related jar files to
+avoid version conflicts.</p>
+</blockquote>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=version-update>Version Update<a href=#version-update class=hash-link aria-label="Direct link to Version Update" title="Direct link to Version Update" translate=no></a></h2>
+<p>For detailed update logs, refer
+to <a href=https://github.com/apache/fesod/releases target=_blank rel="noopener noreferrer" class="">Details of version updates</a>. You can also find all
+available versions in the <a href=https://mvnrepository.com/artifact/org.apache.fesod/fesod-sheet target=_blank rel="noopener noreferrer" class="">Maven Central Repository</a>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=maven>Maven<a href=#maven class=hash-link aria-label="Direct link to Maven" title="Direct link to Maven" translate=no></a></h2>
+<p>If you are using Maven for project building, add the following configuration in the <code>pom.xml</code> file:</p>
+<div class="language-xml codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-xml codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token tag punctuation" style=color:#393A34><</span><span class="token tag" style=color:#00009f>dependency</span><span [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=gradle>Gradle<a href=#gradle class=hash-link aria-label="Direct link to Gradle" title="Direct link to Gradle" translate=no></a></h2>
+<p>If you are using Gradle for project building, add the following configuration in the <code>build.gradle</code> file:</p>
+<div class="language-gradle codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-gradle codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">dependencies {</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> [...]
\ No newline at end of file
diff --git a/docs/quickstart/simple-example/index.html b/docs/quickstart/simple-example/index.html
new file mode 100644
index 00000000..8afb3f30
--- /dev/null
+++ b/docs/quickstart/simple-example/index.html
@@ -0,0 +1,11 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-quickstart/simple-example" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Simple example | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-r [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=fesod-sheet-examples>Fesod Sheet Examples<a href=#fesod-sheet-examples class=hash-link aria-label="Direct link to Fesod Sheet Examples" title="Direct link to Fesod Sheet Examples" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=read-the-spreadsheet>Read the spreadsheet<a href=#read-the-spreadsheet class=hash-link aria-label="Direct link to Read the spreadsheet" title="Direct link to Read the spreadsheet" translate=no></a></h3>
+<p>Below is an example of reading a spreadsheet document:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic>// Implement the ReadListener interface to set up operations for r [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=write-the-spreadsheet>Write the spreadsheet<a href=#write-the-spreadsheet class=hash-link aria-label="Direct link to Write the spreadsheet" title="Direct link to Write the spreadsheet" translate=no></a></h3>
+<p>Below is a simple example of creating a spreadsheet document:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic>// Sample data class</span><span class="token plain"></span><br/>< [...]
\ No newline at end of file
diff --git a/docs/sheet/advanced/custom-converter/index.html b/docs/sheet/advanced/custom-converter/index.html
new file mode 100644
index 00000000..cf1c8176
--- /dev/null
+++ b/docs/sheet/advanced/custom-converter/index.html
@@ -0,0 +1,46 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/advanced/custom-converter" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Custom Converter | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><met [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Custom Converter</h1></header>
+<p>This chapter introduces how to create and register custom converters for both read and write operations.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
+<p>Fesod provides a <code>Converter</code> interface that allows you to define custom data transformation logic. Converters can be registered per-field (via annotation) or globally (via builder), and work for both reading and writing.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=creating-a-custom-converter>Creating a Custom Converter<a href=#creating-a-custom-converter class=hash-link aria-label="Direct link to Creating a Custom Converter" title="Direct link to Creating a Custom Converter" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=converter-implementation>Converter Implementation<a href=#converter-implementation class=hash-link aria-label="Direct link to Converter Implementation" title="Direct link to Converter Implementation" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=per-field-vs-global-registration>Per-Field vs. Global Registration<a href=#per-field-vs-global-registration class=hash-link aria-label="Direct link to Per-Field vs. Global Registration" title="Direct link to Per-Field vs. Global Registration" translate=no></a></h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th style=text-align:left>Approach<th style=text-align:left>Scope<th style=text-align:left>How<tbody><tr><td style=text-align:left>Per-field<td style=text-align:left>Single field only<td style=text-align:left><code>@ExcelProperty(converter = MyConverter.class)</code><tr><td style=text-align:left>Global<td style=text-align:left>All fields matching Java type + Excel type<td style=text-align:left><code>.registerConverter(new MyConverter())</code> on the builder</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=converter-resolution-priority>Converter Resolution Priority<a href=#converter-resolution-priority class=hash-link aria-label="Direct link to Converter Resolution Priority" title="Direct link to Converter Resolution Priority" translate=no></a></h3>
+<ol>
+<li class="">Field-level converter (<code>@ExcelProperty(converter = ...)</code>) — highest priority</li>
+<li class="">Builder-level converter (<code>.registerConverter(...)</code>)</li>
+<li class="">Built-in default converter — lowest priority</li>
+</ol>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=global-registration-example>Global Registration Example<a href=#global-registration-example class=hash-link aria-label="Direct link to Global Registration Example" title="Direct link to Global Registration Example" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=write-with-global-converter>Write with Global Converter<a href=#write-with-global-converter class=hash-link aria-label="Direct link to Write with Global Converter" title="Direct link to Write with Global Converter" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=read-with-global-converter>Read with Global Converter<a href=#read-with-global-converter class=hash-link aria-label="Direct link to Read with Global Converter" title="Direct link to Read with Global Converter" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
\ No newline at end of file
diff --git a/docs/sheet/advanced/large-file/index.html b/docs/sheet/advanced/large-file/index.html
new file mode 100644
index 00000000..84eafab5
--- /dev/null
+++ b/docs/sheet/advanced/large-file/index.html
@@ -0,0 +1,22 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/advanced/large-file" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Large File Writing | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta da [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Large File Writing</h1></header>
+<p>This chapter introduces how to write very large Excel files (100,000+ rows) with memory optimization.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
+<p>When exporting large datasets (e.g., database dumps, log analysis), loading all rows at once would exhaust memory. Fesod uses Apache POI's streaming API (SXSSF) internally, but temporary XML files can consume significant disk space. Enabling compression reduces disk usage at the cost of slightly more CPU.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=batch-writing-with-compressed-temp-files>Batch Writing with Compressed Temp Files<a href=#batch-writing-with-compressed-temp-files class=hash-link aria-label="Direct link to Batch Writing with Compressed Temp Files" title="Direct link to Batch Writing with Compressed Temp Files" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example>Code Example<a href=#code-example class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=architecture>Architecture<a href=#architecture class=hash-link aria-label="Direct link to Architecture" title="Direct link to Architecture" translate=no></a></h2>
+<div class="language-text codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-text codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token plain">Data (in memory, batched) Fesod POI/SXSSF</span><br/></div><div class=token-line style=col [...]
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=performance-tips>Performance Tips<a href=#performance-tips class=hash-link aria-label="Direct link to Performance Tips" title="Direct link to Performance Tips" translate=no></a></h2>
+<ul>
+<li class="">Use <code>ExcelWriter</code> (try-with-resources) for batch writing instead of loading all data with <code>doWrite()</code>.</li>
+<li class="">Enable temp file compression for disk-constrained environments.</li>
+<li class="">Tune batch size (100 rows here) based on your row width and available memory.</li>
+<li class="">Monitor temp directory size: <code>FileUtils.getPoiFilesPath()</code>.</li>
+</ul>
+<div class="theme-admonition theme-admonition-tip admonition_z6k5 alert alert--success"><div class=admonitionHeading_IS3K><span class=admonitionIcon_EGqR><svg viewBox="0 0 12 16"><path fill-rule=evenodd d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67- [...]
\ No newline at end of file
diff --git a/docs/sheet/advanced/password/index.html b/docs/sheet/advanced/password/index.html
new file mode 100644
index 00000000..78822e9c
--- /dev/null
+++ b/docs/sheet/advanced/password/index.html
@@ -0,0 +1,22 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/advanced/password" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Password Protection | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta dat [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Password Protection</h1></header>
+<p>This chapter introduces how to read and write password-protected Excel files.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
+<p>Fesod supports Excel's built-in password protection for both reading and writing. Use <code>.password("xxx")</code> on the builder to encrypt/decrypt files. For <code>.xlsx</code> output, Fesod uses Apache POI's encryption (AES-based) which can be memory-intensive for large workbooks. For legacy <code>.xls</code> files, password protection behaves as write-protection rather than full content encryption, so behavior and security guarantees differ from <code>.xlsx</code>.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=writing-with-password>Writing with Password<a href=#writing-with-password class=hash-link aria-label="Direct link to Writing with Password" title="Direct link to Writing with Password" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example>Code Example<a href=#code-example class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=reading-with-password>Reading with Password<a href=#reading-with-password class=hash-link aria-label="Direct link to Reading with Password" title="Direct link to Reading with Password" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-1>Code Example<a href=#code-example-1 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=security-notes>Security Notes<a href=#security-notes class=hash-link aria-label="Direct link to Security Notes" title="Direct link to Security Notes" translate=no></a></h2>
+<ul>
+<li class="">Excel password protection encrypts the file content, making it unreadable without the password.</li>
+<li class="">Without the correct password, reading will throw an <code>EncryptedDocumentException</code>.</li>
+<li class="">In production, avoid hardcoding passwords — use configuration files or secrets management.</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/docs/sheet/advanced/password.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0. [...]
\ No newline at end of file
diff --git a/docs/sheet/fill/index.html b/docs/sheet/fill/index.html
new file mode 100644
index 00000000..e0125aa9
--- /dev/null
+++ b/docs/sheet/fill/index.html
@@ -0,0 +1,150 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/fill/fill" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Fill | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:i [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Fill</h1></header>
+<p>This section explains how to use Fesod to fill data into files.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=placeholder-syntax>Placeholder Syntax<a href=#placeholder-syntax class=hash-link aria-label="Direct link to Placeholder Syntax" title="Direct link to Placeholder Syntax" translate=no></a></h2>
+<p>A template marks the cells to fill with <code>{}</code> placeholders. What sits inside the braces decides how
+the cell is filled:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Placeholder<th>Meaning<th>Filled by<tbody><tr><td><code>{name}</code><td>a single variable<td><code>doFill(object)</code>, <code>doFill(map)</code><tr><td><code>{.name}</code><td>the <code>name</code> property of every item of a list<td><code>doFill(list)</code>, <code>fill(list, ...)</code><tr><td><code>{data1.name}</code><td>the same, for the list named <code>data1</code><td><code>fill(new FillWrapper("data1", list), ...)</code><tr><td><code>\{name\}</code><td>esc [...]
+<p>The leading <code>.</code> is what makes a cell repeat once per item - downwards by default, or across the
+columns with <code>FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL)</code>. The text before the
+<code>.</code> names which list the items come from, so one template can hold several lists side by side.</p>
+<p>A cell may mix several placeholders with ordinary text, as in <code>{name} is {number} years old this year</code>. A placeholder the fill does not supply is cleared rather than left in the sheet: filling a
+list against <code>{name}</code>, or an object against <code>{.name}</code>, empties the cell and keeps only the text
+around it.</p>
+<p>Escaping stops the braces from being parsed, but the <code>\</code> characters are only removed when the same
+cell also holds a real placeholder. In a cell that contains nothing else, <code>\{name\}</code> is written out
+exactly as typed, backslashes included.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=simple-fill>Simple Fill<a href=#simple-fill class=hash-link aria-label="Direct link to Simple Fill" title="Direct link to Simple Fill" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Fill data into spreadsheet based on a template file using objects or Map.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=pojo-class>POJO Class<a href=#pojo-class class=hash-link aria-label="Direct link to POJO Class" title="Direct link to POJO Class" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Getter</span><span class="token plain"></span><br/></div><div class= [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=data-list>Data List<a href=#data-list class=hash-link aria-label="Direct link to Data List" title="Direct link to Data List" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token class-name">List< [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example>Code Example<a href=#code-example class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template>Template<a href=#template class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<td class=xl-chrome>E<tr><td class=xl-chrome>1<td>Name<td>Number<td>Complex<td>Ignored<td>Empty<tr><td class=xl-chrome>2<td>{name}<td>{number}<td>{name} is {number} years old<td>\{name\} ignored, {name}<td>Empty{.empty}</table>
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result>Result<a href=#result class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<td class=xl-chrome>E<tr><td class=xl-chrome>1<td>Name<td>Number<td>Complex<td>Ignored<td>Empty<tr><td class=xl-chrome>2<td>John Doe<td class=xl-num>5.2<td>John Doe is 5.2 years old<td>{name} ignored, John Doe<td>Empty</table>
+</div>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=fill-list>Fill List<a href=#fill-list class=hash-link aria-label="Direct link to Fill List" title="Direct link to Fill List" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-1>Overview<a href=#overview-1 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Fill multiple data items into a template list, supporting in-memory batch operations and file cache batch filling.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-1>Code Example<a href=#code-example-1 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template-1>Template<a href=#template-1 class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<tr><td class=xl-chrome>1<td>Name<td>Number<td>Date<tr><td class=xl-chrome>2<td>{.name}<td>{.number}<td>{.date}</table>
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result-1>Result<a href=#result-1 class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<p>Approach 1:</p>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<tr><td class=xl-chrome>1<td>Name<td>Number<td>Date<tr><td class=xl-chrome>2<td>John Doe0<td class=xl-num>5.2<td class=xl-num>2026-07-31 19:55:44<tr><td class=xl-chrome>3<td>John Doe1<td class=xl-num>5.2<td class=xl-num>2026-07-31 19:55:44<tr><td class=xl-chrome>4<td>John Doe2<td class=xl-num>5.2<td class=xl-num>2026-07-31 19:55:44<tr><td class=xl-chrome>⋮<td class=xl-muted>…<td c [...]
+</div>
+<p>Approach 2:</p>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<tr><td class=xl-chrome>1<td>Name<td>Number<td>Date<tr><td class=xl-chrome>2<td>John Doe0<td class=xl-num>5.2<td class=xl-num>2026-07-31 19:55:44<tr><td class=xl-chrome>⋮<td class=xl-muted>…<td class=xl-muted>…<td class=xl-muted>…<tr><td class=xl-chrome>11<td>John Doe9<td class=xl-num>5.2<td class=xl-num>2026-07-31 19:55:44<tr><td class=xl-chrome>12<td>John Doe0<td class=xl-num>5. [...]
+</div>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=complex-fill>Complex Fill<a href=#complex-fill class=hash-link aria-label="Direct link to Complex Fill" title="Direct link to Complex Fill" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-2>Overview<a href=#overview-2 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Fill various data types in a template, including lists and regular variables.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-2>Code Example<a href=#code-example-2 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template-2>Template<a href=#template-2 class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<tr><td class=xl-chrome>1<td><td><td>Statistics<td><tr><td class=xl-chrome>2<td><td><td>Time: {date}<td><tr><td class=xl-chrome>3<td>Name<td>Number<td>Name<td>Number<tr><td class=xl-chrome>4<td class=xl-fc-red>{.name}<td class="xl-fill-bright-green xl-num">{.number}<td>{.name}<td>{.number}<tr><td class=xl-chrome>5<td><td><td><td>Total:{total}</table>
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result-2>Result<a href=#result-2 class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<tr><td class=xl-chrome>1<td><td><td>Statistics<td><tr><td class=xl-chrome>2<td><td><td>Time: November 20, 2024<td><tr><td class=xl-chrome>3<td>Name<td>Number<td>Name<td>Number<tr><td class=xl-chrome>4<td class=xl-fc-red>John Doe0<td class="xl-fill-bright-green xl-num">5.2<td>John Doe0<td class=xl-num>5.2<tr><td class=xl-chrome>5<td class=xl-fc-red>John Doe1<t [...]
+</div>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=complex-fill-with-large-data>Complex Fill with Large Data<a href=#complex-fill-with-large-data class=hash-link aria-label="Direct link to Complex Fill with Large Data" title="Direct link to Complex Fill with Large Data" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-3>Overview<a href=#overview-3 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Optimize performance for filling large data, ensuring the template list is at the last row, and subsequent data is
+filled using <code>WriteTable</code>.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-3>Code Example<a href=#code-example-3 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template-3>Template<a href=#template-3 class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<tr><td class=xl-chrome>1<td><td><td>Statistics<td><tr><td class=xl-chrome>2<td><td><td>Time: {date}<td><tr><td class=xl-chrome>3<td>Name<td>Number<td>Name<td>Number<tr><td class=xl-chrome>4<td class=xl-fc-red>{.name}<td class="xl-fill-bright-green xl-num">{.number}<td>{.name}<td>{.number}</table>
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result-3>Result<a href=#result-3 class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<p>The file comes out the same as Complex Fill above. What changes is how it gets there. The template
+stops at the list row instead of reserving a row for <code>{total}</code>, and the total is appended afterwards
+with <code>writer.write(...)</code>, so the list can grow to any length without rows below it to push down.</p>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<tr><td class=xl-chrome>1<td><td><td>Statistics<td><tr><td class=xl-chrome>2<td><td><td>Time: November 20, 2024<td><tr><td class=xl-chrome>3<td>Name<td>Number<td>Name<td>Number<tr><td class=xl-chrome>4<td class=xl-fc-red>John Doe0<td class="xl-fill-bright-green xl-num">5.2<td>John Doe0<td class=xl-num>5.2<tr><td class=xl-chrome>5<td class=xl-fc-red>John Doe1<t [...]
+</div>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=horizontal-fill>Horizontal Fill<a href=#horizontal-fill class=hash-link aria-label="Direct link to Horizontal Fill" title="Direct link to Horizontal Fill" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-4>Overview<a href=#overview-4 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Fill list data horizontally, suitable for scenarios with dynamic column numbers.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-4>Code Example<a href=#code-example-4 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template-4>Template<a href=#template-4 class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<tr><td class=xl-chrome>1<td rowspan=4>Statistics<td>Name<td class=xl-fc-red>{.name}<tr><td class=xl-chrome>2<td>Number<td class="xl-fill-bright-green xl-num">{.number}<tr><td class=xl-chrome>3<td>Name<td>{.name}<tr><td class=xl-chrome>4<td>Number<td>{.number}<tr><td class=xl-chrome>5<td>Time: {date}<td><td></table>
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result-4>Result<a href=#result-4 class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<td class=xl-chrome>E<td class=xl-chrome>⋯<td class=xl-chrome>L<tr><td class=xl-chrome>1<td rowspan=4>Statistics<td>Name<td class=xl-fc-red>John Doe0<td class=xl-fc-red>John Doe1<td class=xl-fc-red>John Doe2<td class=xl-muted>…<td class=xl-fc-red>John Doe9<tr><td class=xl-chrome>2<td>Number<td class="xl-fill-bright-green xl-num">5.2<td class="xl-fill-bright-gr [...]
+</div>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=fill-multiple-lists-together>Fill Multiple Lists Together<a href=#fill-multiple-lists-together class=hash-link aria-label="Direct link to Fill Multiple Lists Together" title="Direct link to Fill Multiple Lists Together" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-5>Overview<a href=#overview-5 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p>Support filling multiple lists simultaneously, with prefixes to differentiate between lists.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=code-example-5>Code Example<a href=#code-example-5 class=hash-link aria-label="Direct link to Code Example" title="Direct link to Code Example" translate=no></a></h3>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=template-5>Template<a href=#template-5 class=hash-link aria-label="Direct link to Template" title="Direct link to Template" translate=no></a></h3>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<td class=xl-chrome>E<tr><td class=xl-chrome>1<td rowspan=4>Statistics<td>Name<td class=xl-fc-red>{data1.name}<td><td><tr><td class=xl-chrome>2<td>Number<td class=xl-fill-bright-green>{data1.number}<td><td><tr><td class=xl-chrome>3<td>Name<td>{data1.name}<td><td><tr><td class=xl-chrome>4<td>Number<td>{data1.number}<td><td><tr><td class=xl-chrome>5<td><td>Time: [...]
+</div>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=result-5>Result<a href=#result-5 class=hash-link aria-label="Direct link to Result" title="Direct link to Result" translate=no></a></h3>
+<ul>
+<li class=""><code>data1</code> is filled horizontally, so its ten items run across the columns from <code>C</code> to <code>L</code> on each of the four template rows.</li>
+<li class=""><code>data2</code> and <code>data3</code> are filled downwards instead, occupying <code>A</code>/<code>B</code> in rows 9 to 18 and <code>D</code>/<code>E</code> in rows 11 to 20.</li>
+<li class="">Calling <code>fill</code> again with the same list name appends to it, as in <a href=#fill-list class="">Fill List</a>.</li>
+</ul>
+<div class=xl-sheet-container>
+<table class=xl-sheet><tr><td class=xl-chrome><td class=xl-chrome>A<td class=xl-chrome>B<td class=xl-chrome>C<td class=xl-chrome>D<td class=xl-chrome>E<td class=xl-chrome>⋯<td class=xl-chrome>L<tr><td class=xl-chrome>1<td rowspan=4>Statistics<td>Name<td class=xl-fc-red>John Doe0<td class=xl-fc-red>John Doe1<td class=xl-fc-red>John Doe2<td class=xl-muted>…<td class=xl-fc-red>John Doe9<tr><td class=xl-chrome>2<td>Number<td class="xl-fill-bright-green xl-num">5.2<td class="xl-fill-bright-gr [...]
+</div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_JTGw"><a href=https://github.com/apache/fesod/edit/main/website/docs/sheet/fill/fill.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_w70Q aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1 [...]
\ No newline at end of file
diff --git a/docs/sheet/help/annotation/index.html b/docs/sheet/help/annotation/index.html
new file mode 100644
index 00000000..5b823267
--- /dev/null
+++ b/docs/sheet/help/annotation/index.html
@@ -0,0 +1,382 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/help/annotation" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Annotation | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true p [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Annotation</h1></header>
+<p>This section describes how to read annotations provided in the project.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=entity-class-annotations>Entity Class Annotations<a href=#entity-class-annotations class=hash-link aria-label="Direct link to Entity Class Annotations" title="Direct link to Entity Class Annotations" translate=no></a></h2>
+<p>Entity classes are the foundation of read and write operations. FesodSheet provides various annotations to help
+developers easily define fields and formats.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=excelproperty><code>@ExcelProperty</code><a href=#excelproperty class=hash-link aria-label="Direct link to excelproperty" title="Direct link to excelproperty" translate=no></a></h3>
+<p>Defines the column name in spreadsheet and the field name to map. Specific parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>value<td>Empty<td>Used to match the header in spreadsheet, must be fully matched. If there are multiple header rows, it will match the last row header.<tr><td>order<td>Integer.MAX_VALUE<td>Higher priority than <code>value</code>, will match the order of entities and data in spreadsheet according to the order of <code>order</code>.<tr><td>index<td>-1<td>Higher priority than <code>value</code> and <code>order</code>, [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=excelignore><code>@ExcelIgnore</code><a href=#excelignore class=hash-link aria-label="Direct link to excelignore" title="Direct link to excelignore" translate=no></a></h3>
+<p>By default, all fields will match spreadsheet. Adding this annotation will ignore the field.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=excelignoreunannotated><code>@ExcelIgnoreUnannotated</code><a href=#excelignoreunannotated class=hash-link aria-label="Direct link to excelignoreunannotated" title="Direct link to excelignoreunannotated" translate=no></a></h3>
+<p>By default, all properties without the <code>@ExcelProperty</code> annotation are involved in read/write operations. Properties
+with this annotation are not involved in read/write operations.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=datetimeformat><code>@DateTimeFormat</code><a href=#datetimeformat class=hash-link aria-label="Direct link to datetimeformat" title="Direct link to datetimeformat" translate=no></a></h3>
+<p>Date conversion: When using <code>String</code> to receive data in spreadsheet date format, this annotation will be called. The
+parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>value<td>Empty<td>Refer to <code>java.text.SimpleDateFormat</code> .<tr><td>use1904windowing<td>Automatically selected<td>In spreadsheet, time is stored as a double-precision floating-point number starting from 1900, but sometimes the default start date is 1904, so set this value to change the default start date to 1904.</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=numberformat><code>@NumberFormat</code><a href=#numberformat class=hash-link aria-label="Direct link to numberformat" title="Direct link to numberformat" translate=no></a></h3>
+<p>Number conversion, using <code>String</code> to receive data in spreadsheet number format will trigger this annotation.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>value<td>Empty<td>Refer to <code>java.text.DecimalFormat</code>.<tr><td>roundingMode<td>RoundingMode.HALF_UP<td>Set the rounding mode when formatting</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=columnwidth><code>@ColumnWidth</code><a href=#columnwidth class=hash-link aria-label="Direct link to columnwidth" title="Direct link to columnwidth" translate=no></a></h3>
+<p>Specifies the column width.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=headrowheight--contentrowheight><code>@HeadRowHeight</code> & <code>@ContentRowHeight</code><a href=#headrowheight--contentrowheight class=hash-link aria-label="Direct link to headrowheight--contentrowheight" title="Direct link to headrowheight--contentrowheight" translate=no></a></h3>
+<p>Specifies the height of the header rows (<code>@HeadRowHeight</code>) or the content rows (<code>@ContentRowHeight</code>). The
+parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>value<td>-1<td>Set the height. <code>-1</code> indicates automatic height setting.</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=headfontstyle--contentfontstyle><code>@HeadFontStyle</code> & <code>@ContentFontStyle</code><a href=#headfontstyle--contentfontstyle class=hash-link aria-label="Direct link to headfontstyle--contentfontstyle" title="Direct link to headfontstyle--contentfontstyle" translate=no></a></h3>
+<p>Customizes the font style for headers (<code>@HeadFontStyle</code>) or content data (<code>@ContentFontStyle</code>). The
+parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>fontName<td>Empty<td>The name for the font (e.g., "Arial").<tr><td>fontHeightInPoints<td>-1<td>Set font height.<tr><td>italic<td>BooleanEnum.DEFAULT<td>Whether to use italics.<tr><td>strikeout<td>BooleanEnum.DEFAULT<td>Whether to use a strikeout horizontal line through the text.<tr><td>color<td>-1<td>The color for the font. (See <code>org.apache.poi.ss.usermodel.IndexedColors</code> or <code>org.apache.poi.ss.usermo [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=headstyle--contentstyle><code>@HeadStyle</code> & <code>@ContentStyle</code><a href=#headstyle--contentstyle class=hash-link aria-label="Direct link to headstyle--contentstyle" title="Direct link to headstyle--contentstyle" translate=no></a></h3>
+<p>Customizes the cell style (borders, alignment, colors...) for header data (<code>@HeadStyle</code>) or content data (<code>@ContentStyle</code>).
+The parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>dataFormat<td>-1<td>Set the data format (must be a valid format defined at <code>org.apache.poi.ss.usermodel.BuiltinFormats</code>).<tr><td>hidden<td>BooleanEnum.DEFAULT<td>set the cell to be hidden. <strong>Note: This only takes effect if the sheet is protected.</strong><tr><td>locked<td>BooleanEnum.DEFAULT<td>Set the cell to be locked. <strong>Note: This only takes effect if the sheet is protected.</strong><tr><td [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=contentloopmerge><code>@ContentLoopMerge</code><a href=#contentloopmerge class=hash-link aria-label="Direct link to contentloopmerge" title="Direct link to contentloopmerge" translate=no></a></h3>
+<p>Defines a loop merge strategy for content cells. The parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>eachRow<td>1<td>The number of rows to include in each merge loop.<tr><td>columnExtend<td>1<td>The number of columns to extend the merge.</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=onceabsolutemerge><code>@OnceAbsoluteMerge</code><a href=#onceabsolutemerge class=hash-link aria-label="Direct link to onceabsolutemerge" title="Direct link to onceabsolutemerge" translate=no></a></h3>
+<p>Defines a one-time absolute merge region. The parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>firstRowIndex<td>-1<td>The index of the first row to merge.<tr><td>lastRowIndex<td>-1<td>The index of the last row to merge.<tr><td>firstColumnIndex<td>-1<td>The index of the first column to merge.<tr><td>lastColumnIndex<td>-1<td>The index of the last column to merge.</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=freezepane><code>@FreezePane</code><a href=#freezepane class=hash-link aria-label="Direct link to freezepane" title="Direct link to freezepane" translate=no></a></h3>
+<p>Define a freeze pane for an Excel sheet. The parameters are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name<th>Default Value<th>Description<tbody><tr><td>colSplit<td>0<td>Horizontal position of freeze pane.<tr><td>rowSplit<td>0<td>Vertical position of freeze pane.<tr><td>leftmostColumn<td>-1<td>Left column visible in right pane. By default, it's equal to <code>colSplit</code>.<tr><td>topRow<td>-1<td>Top row visible in bottom pane. By default, it's equal to <code>rowSplit</code>.</table></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top [...]
\ No newline at end of file
diff --git a/docs/sheet/help/core-class/index.html b/docs/sheet/help/core-class/index.html
new file mode 100644
index 00000000..d92fcb55
--- /dev/null
+++ b/docs/sheet/help/core-class/index.html
@@ -0,0 +1,370 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/help/core-class" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>Core Class | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true p [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>Core Classes</h1></header>
+<p>This section introduces the core classes in the project.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=overview>Overview<a href=#overview class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h2>
+<p>If you use this project for custom read/write operations, you need to understand its important concepts and classes.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=core-concepts>Core Concepts<a href=#core-concepts class=hash-link aria-label="Direct link to Core Concepts" title="Direct link to Core Concepts" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=fesodsheet>FesodSheet<a href=#fesodsheet class=hash-link aria-label="Direct link to FesodSheet" title="Direct link to FesodSheet" translate=no></a></h3>
+<p>Entry class used to start various operations</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=multiple-builders>Multiple Builders<a href=#multiple-builders class=hash-link aria-label="Direct link to Multiple Builders" title="Direct link to Multiple Builders" translate=no></a></h3>
+<p>There are corresponding Builder classes for read and write operations:</p>
+<ul>
+<li class=""><strong><code>ExcelReaderBuilder</code> and <code>ExcelWriterBuilder</code></strong>:Constructs a <code>ReadWorkbook</code> or <code>WriteWorkbook</code>, which can be
+understood as an spreadsheet object; only one spreadsheet needs to be constructed</li>
+<li class=""><strong><code>ExcelReaderSheetBuilder</code> and <code>ExcelWriterSheetBuilder</code></strong>:Constructs a <code>ReadSheet</code> or <code>WriteSheet</code> object, which can
+be understood as a page in spreadsheet; each page needs to be constructed</li>
+<li class=""><strong><code>CsvReaderBuilder</code> and <code>CsvWriterBuilder</code></strong>:Construct the CsvFormat required internally.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=readlistener>ReadListener<a href=#readlistener class=hash-link aria-label="Direct link to ReadListener" title="Direct link to ReadListener" translate=no></a></h3>
+<p>Called to handle data after each row is read</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=writehandler>WriteHandler<a href=#writehandler class=hash-link aria-label="Direct link to WriteHandler" title="Direct link to WriteHandler" translate=no></a></h3>
+<p>Called to handle data for each operation, including creating cells, creating tables, etc.</p>
+<p>All configurations are inherited. The configuration of <code>Workbook</code> will be inherited by <code>Sheet</code>, so when setting
+parameters in FesodSheet, the scope is the entire sheet before the <code>FesodSheet.sheet()</code> method, and the scope is the
+entire csv before the <code>FesodSheet.csv()</code> method.</p>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=writehandler-1>WriteHandler<a href=#writehandler-1 class=hash-link aria-label="Direct link to WriteHandler" title="Direct link to WriteHandler" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-1>Overview<a href=#overview-1 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p><code>WriteHandler</code> is an interface provided by FesodSheet for intercepting the writing process when writing to a spreadsheet
+file, allowing developers to customize operations such as setting cell styles, merging cells, adding hyperlinks,
+inserting comments, etc. By implementing <code>WriteHandler</code>, developers can have precise control over the writing process to
+meet complex business requirements.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=writehandler-interface-categories>WriteHandler Interface Categories<a href=#writehandler-interface-categories class=hash-link aria-label="Direct link to WriteHandler Interface Categories" title="Direct link to WriteHandler Interface Categories" translate=no></a></h3>
+<p>FesodSheet provides the following WriteHandler interfaces for handling different writing scenarios:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Interface Name<th>Description<tbody><tr><td><strong>CellWriteHandler</strong><td>Interceptor at the cell level, allows custom operations on cell data and styles.<tr><td><strong>RowWriteHandler</strong><td>Row-level interceptor, used to perform additional operations after row data is written.<tr><td><strong>SheetWriteHandler</strong><td>Worksheet-level interceptor, used to set worksheet-level properties (such as freeze panes, drop-down lists, etc.).</table>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=use>Use<a href=#use class=hash-link aria-label="Direct link to Use" title="Direct link to Use" translate=no></a></h3>
+<ol>
+<li class="">
+<p>Implement the corresponding <code>WriteHandler</code> interface:</p>
+<ul>
+<li class="">Choose the appropriate interface (<code>CellWriteHandler</code>, <code>RowWriteHandler</code>, or <code>SheetWriteHandler</code>).</li>
+<li class="">Implement the methods in the interface, defining custom logic in the methods.</li>
+</ul>
+</li>
+<li class="">
+<p>Register the WriteHandler:</p>
+<ul>
+<li class="">Register your custom WriteHandler when calling <code>FesodSheet.write()</code> using <code>.registerWriteHandler()</code>.</li>
+</ul>
+</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=example>Example<a href=#example class=hash-link aria-label="Direct link to Example" title="Direct link to Example" translate=no></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=set-cell-style>Set Cell Style<a href=#set-cell-style class=hash-link aria-label="Direct link to Set Cell Style" title="Direct link to Set Cell Style" translate=no></a></h4>
+<p>Set the background color to yellow and font color to blue for all content cells.</p>
+<p>Customise a <code>CellWriteHandler</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Register and Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=inserting-comments>Inserting Comments<a href=#inserting-comments class=hash-link aria-label="Direct link to Inserting Comments" title="Direct link to Inserting Comments" translate=no></a></h4>
+<p>Insert a comment for the first row, second column of the header.</p>
+<p>Customise a <code>RowWriteHandler</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Register and Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=adding-dropdown-lists>Adding Dropdown Lists<a href=#adding-dropdown-lists class=hash-link aria-label="Direct link to Adding Dropdown Lists" title="Direct link to Adding Dropdown Lists" translate=no></a></h4>
+<p>Add a dropdown list for the first column of the first two rows.</p>
+<p>Customise a <code>SheetWriteHandler</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Register and Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=readlistener-1>ReadListener<a href=#readlistener-1 class=hash-link aria-label="Direct link to ReadListener" title="Direct link to ReadListener" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-2>Overview<a href=#overview-2 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p><code>ReadListener</code> is an interface provided by FesodSheet for processing each row of data when reading a spreadsheet file.
+It is
+one of the core components of FesodSheet, allowing developers to implement custom logic to handle data rows, process
+headers, and even perform specific operations after reading is complete.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=methods>Methods<a href=#methods class=hash-link aria-label="Direct link to Methods" title="Direct link to Methods" translate=no></a></h3>
+<p><code>ReadListener</code> is a generic interface, where the generic type is the type of object to be read (e.g., <code>DemoData</code>). Its
+core methods are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Method Name<th>Description<tbody><tr><td><code>void invoke(T data, AnalysisContext context)</code><td>Triggered when a line of data is read. <code>data</code> is the parsed current line object, and <code>context</code> contains the read context information.<tr><td><code>void doAfterAllAnalysed(AnalysisContext context)</code><td>Called after all data parsing is complete, it can be used for resource release or statistical data processing.<tr><td><code>void onException [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=use-cases>Use Cases<a href=#use-cases class=hash-link aria-label="Direct link to Use Cases" title="Direct link to Use Cases" translate=no></a></h3>
+<ul>
+<li class=""><strong>Simplify code</strong>: Suitable for simple row-by-row processing, reducing control over memory and processing logic.</li>
+<li class=""><strong>Exception handling</strong>: Able to capture and handle exceptions during the reading process.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=implementation-steps>Implementation Steps<a href=#implementation-steps class=hash-link aria-label="Direct link to Implementation Steps" title="Direct link to Implementation Steps" translate=no></a></h3>
+<ol>
+<li class="">
+<p>Implement the <code>ReadListener</code> interface:</p>
+<ul>
+<li class="">Use an entity class as the generic type (e.g., <code>ReadListener<DemoData></code>).</li>
+<li class="">Implement the core methods and add data processing logic as needed.</li>
+</ul>
+</li>
+<li class="">
+<p>Register the custom <code>ReadListener</code> during reading:</p>
+<ul>
+<li class="">When calling the <code>FesodSheet.read()</code> method, pass in the custom listener instance.</li>
+</ul>
+</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=example-1>Example<a href=#example-1 class=hash-link aria-label="Direct link to Example" title="Direct link to Example" translate=no></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=process-row-data>Process Row Data<a href=#process-row-data class=hash-link aria-label="Direct link to Process Row Data" title="Direct link to Process Row Data" translate=no></a></h4>
+<p>Customise a <code>ReadListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=processing-table-headers>Processing Table Headers<a href=#processing-table-headers class=hash-link aria-label="Direct link to Processing Table Headers" title="Direct link to Processing Table Headers" translate=no></a></h4>
+<p>Customise a <code>ReadListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=handling-exceptions>Handling Exceptions<a href=#handling-exceptions class=hash-link aria-label="Direct link to Handling Exceptions" title="Direct link to Handling Exceptions" translate=no></a></h4>
+<p>Customise a <code>ReadListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=pagination>Pagination<a href=#pagination class=hash-link aria-label="Direct link to Pagination" title="Direct link to Pagination" translate=no></a></h4>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<blockquote>
+<p><strong>Note</strong>:</p>
+<ul>
+<li class=""><code>PageReadListener</code> is a convenient utility class provided by FesodSheet that supports batch processing based on
+pagination.</li>
+<li class="">The default page size is 1, which can be specified using the constructor.</li>
+</ul>
+</blockquote>
+<hr/>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=analysiseventlistener>AnalysisEventListener<a href=#analysiseventlistener class=hash-link aria-label="Direct link to AnalysisEventListener" title="Direct link to AnalysisEventListener" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-3>Overview<a href=#overview-3 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p><code>AnalysisEventListener</code> is the core listener used in FesodSheet for processing spreadsheet data. It is based on an
+event-driven
+mechanism, allowing developers to perform custom operations when reading each row of data and to perform corresponding
+processing after all data has been parsed. It is typically used for streaming large amounts of data and is suitable for
+scenarios that require processing large data volumes and performing batch operations (such as batch insertion into a
+database).</p>
+<p>Core Features:</p>
+<ul>
+<li class=""><strong>Line-by-line reading</strong>: <code>AnalysisEventListener</code> reads data from spreadsheet files line by line, executing the
+<code>invoke</code>
+method when reading each line of data, making it suitable for streaming processing.</li>
+<li class=""><strong>Memory control</strong>: You can set <code>BATCH_COUNT</code> to control the amount of data processed each time, preventing memory
+overflow.</li>
+<li class=""><strong>Batch Processing</strong>: You can cache a certain amount of data and process it in batches, suitable for scenarios with
+large data volumes.</li>
+<li class=""><strong>Event-Driven</strong>: The <code>invoke</code> method is called when reading each row of data; after all data has been read, the
+<code>doAfterAllAnalysed</code> method is called.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=methods-1>Methods<a href=#methods-1 class=hash-link aria-label="Direct link to Methods" title="Direct link to Methods" translate=no></a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Method Name<th>Description<tbody><tr><td><code>invoke(T data, AnalysisContext context)</code><td>Triggered when a line of data is read. <code>data</code> is the parsed current line object, and <code>context</code> contains the read context information.<tr><td><code>doAfterAllAnalysed(AnalysisContext context)</code><td>Called after all data parsing is complete, used for resource cleanup or post-processing of batch operations.<tr><td><code>onException(Exception except [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=use-cases-1>Use Cases<a href=#use-cases-1 class=hash-link aria-label="Direct link to Use Cases" title="Direct link to Use Cases" translate=no></a></h3>
+<ul>
+<li class=""><strong>Streaming Data Processing</strong>: For example, when reading large amounts of data, you can process the data as you read
+it, reducing memory consumption.</li>
+<li class=""><strong>Batch insertion into a database</strong>: For example, batch processing row data from spreadsheet and storing it in a
+database.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=implementation-steps-1>Implementation Steps<a href=#implementation-steps-1 class=hash-link aria-label="Direct link to Implementation Steps" title="Direct link to Implementation Steps" translate=no></a></h3>
+<ol>
+<li class="">Inherit from <code>AnalysisEventListener</code> and implement its methods.</li>
+<li class="">Pass in a custom listener during reading and register it using <code>FesodSheet.read()</code>.</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=example-2>Example<a href=#example-2 class=hash-link aria-label="Direct link to Example" title="Direct link to Example" translate=no></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=process-each-row-of-data-and-batch-import-into-the-database>Process each row of data and batch import into the database<a href=#process-each-row-of-data-and-batch-import-into-the-database class=hash-link aria-label="Direct link to Process each row of data and batch import into the database" title="Direct link to Process each row of data and batch import into the database" translate=no></a></h4>
+<p>Inherit <code>AnalysisEventListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=processing-table-headers-1>Processing Table Headers<a href=#processing-table-headers-1 class=hash-link aria-label="Direct link to Processing Table Headers" title="Direct link to Processing Table Headers" translate=no></a></h4>
+<p>You can use the <code>invokeHead</code> method to obtain header information for handling dynamic header scenarios or for
+customising header data parsing.</p>
+<p>Inherit <code>AnalysisEventListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=handling-exceptions-1>Handling Exceptions<a href=#handling-exceptions-1 class=hash-link aria-label="Direct link to Handling Exceptions" title="Direct link to Handling Exceptions" translate=no></a></h4>
+<p>The <code>onException</code> method is provided so that developers can catch exceptions during reading and handle them (e.g., log
+errors, skip error lines, etc.).</p>
+<p>Inherit <code>AnalysisEventListener</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=compared-to-readlistener>Compared to ReadListener<a href=#compared-to-readlistener class=hash-link aria-label="Direct link to Compared to ReadListener" title="Direct link to Compared to ReadListener" translate=no></a></h3>
+<p><code>AnalysisEventListener</code> and <code>ReadListener</code> are both interfaces provided by FesodSheet, designed to allow developers to
+perform customised processing when reading spreadsheet files. However, they have some key differences in terms of
+functionality and use cases.</p>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=different>Different<a href=#different class=hash-link aria-label="Direct link to Different" title="Direct link to Different" translate=no></a></h4>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Features<th><code>AnalysisEventListener</code><th><code>ReadListener</code><tbody><tr><td><strong>Interface Design</strong><td>Event-driven, processes each row of data and saves batch data<td>Callback interface, simplifies processing, suitable for simple use<tr><td><strong>Memory Control</strong><td>Controls memory usage via <code>BATCH_COUNT</code>, suitable for large data volume processing<td>No dedicated memory control, typically used for simple read operations<t [...]
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=how-to-choose>How to choose<a href=#how-to-choose class=hash-link aria-label="Direct link to How to choose" title="Direct link to How to choose" translate=no></a></h4>
+<p>Use <code>AnalysisEventListener</code>:</p>
+<ul>
+<li class="">If you need to control memory consumption, batch process data, or handle complex read logic (such as paginated reading
+or batch writing to a database).</li>
+<li class="">Suitable for processing large datasets, offering greater flexibility.</li>
+</ul>
+<p>Use <code>ReadListener</code>:</p>
+<ul>
+<li class="">If you want to simplify your code and do not have complex memory control requirements, and only need to handle the
+logic for each row of data.</li>
+<li class="">Suitable for simple spreadsheet data reading and exception handling scenarios.</li>
+</ul>
+<p>In summary, <code>ReadListener</code> is a more simplified interface suitable for simpler scenarios, while <code>AnalysisEventListener</code>
+offers greater control and scalability, making it suitable for complex data processing requirements. Developers can
+choose the appropriate listener based on their actual needs.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=converter>Converter<a href=#converter class=hash-link aria-label="Direct link to Converter" title="Direct link to Converter" translate=no></a></h2>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=overview-4>Overview<a href=#overview-4 class=hash-link aria-label="Direct link to Overview" title="Direct link to Overview" translate=no></a></h3>
+<p><code>Converter</code> is an interface provided by FesodSheet for converting data when processing spreadsheet files. It allows
+developers
+to customise operations by implementing the <code>Converter</code> interface to define custom data conversion logic.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=methods-2>Methods<a href=#methods-2 class=hash-link aria-label="Direct link to Methods" title="Direct link to Methods" translate=no></a></h3>
+<p><code>Converter</code> is a generic interface, and the generic type is the object type to be converted (such as <code>Date</code>). Its core
+methods are as follows:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Method Name<th>Description<tbody><tr><td><code>Class<?> supportJavaTypeKey()</code>*(Optional)*<td>Returns the supported Java object types.<tr><td><code>CellDataTypeEnum supportExcelTypeKey()</code>*(Optional)*<td>Returns the supported cell types, enumerated as CellDataTypeEnum.<tr><td><code>T convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration)</code> <em>(Optional)</em><td>Convert cell dat [...]
+<p>FesodSheet provides many commonly used type converters by default, which are already registered in
+<code>DefaultConverterLoader</code>.</p>
+<p>You can customise converters, but the types must not overlap with the default types. When registering types, use
+<code>ConverterKeyBuild.buildKey(converter.supportJavaTypeKey(), converter.supportExcelTypeKey())</code> as the key value.</p>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=use-cases-2>Use Cases<a href=#use-cases-2 class=hash-link aria-label="Direct link to Use Cases" title="Direct link to Use Cases" translate=no></a></h3>
+<ul>
+<li class=""><strong>Data Conversion</strong>: Convert spreadsheet data, such as converting dates to strings, converting strings to dates, etc.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=implementation-steps-2>Implementation Steps<a href=#implementation-steps-2 class=hash-link aria-label="Direct link to Implementation Steps" title="Direct link to Implementation Steps" translate=no></a></h3>
+<ol>
+<li class="">Implement the <code>Converter</code> interface and its methods.</li>
+<li class="">Pass in a custom converter when reading or writing.</li>
+</ol>
+<h3 class="anchor anchorTargetStickyNavbar_PvLN" id=example-3>Example<a href=#example-3 class=hash-link aria-label="Direct link to Example" title="Direct link to Example" translate=no></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_PvLN" id=timestampnumber-converter>TimestampNumber Converter<a href=#timestampnumber-converter class=hash-link aria-label="Direct link to TimestampNumber Converter" title="Direct link to TimestampNumber Converter" translate=no></a></h4>
+<p>Implement <code>Converter</code></p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Slf4j</span><span class="token plain"></span><br/></div><div class=t [...]
+<p>Use</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Test</span><span class="token plain"></span><br/></div><div class=to [...]
\ No newline at end of file
diff --git a/docs/sheet/help/faq/index.html b/docs/sheet/help/faq/index.html
new file mode 100644
index 00000000..d8e6958a
--- /dev/null
+++ b/docs/sheet/help/faq/index.html
@@ -0,0 +1,279 @@
+<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-sheet/help/faq" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>FAQ | Apache Fesod (Incubating)</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true property=og:ima [...]
+<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-b41")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus [...]
+<header><h1>FAQ</h1></header>
+<p>This section describes common issues that may arise when using this project.</p>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=feature-limitations>Feature Limitations<a href=#feature-limitations class=hash-link aria-label="Direct link to Feature Limitations" title="Direct link to Feature Limitations" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> What functions does FesodSheet support? What functions are not supported?</li>
+<li class=""><strong>A:</strong> FesodSheet supports efficient reading and writing operations for spreadsheet files, including support for CSV
+format.
+Unsupported functions include concurrent writing to a single file, reading and writing image macros, etc.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=choosing-write-operations>Choosing Write Operations<a href=#choosing-write-operations class=hash-link aria-label="Direct link to Choosing Write Operations" title="Direct link to Choosing Write Operations" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> When writing to spreadsheet, when should I choose the fill mode and when should I choose direct writing?</li>
+<li class=""><strong>A:</strong> For complex export content, it is recommended to use template filling; for simple format scenarios, direct
+writing is more efficient.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=lombok-annotations>Lombok Annotations<a href=#lombok-annotations class=hash-link aria-label="Direct link to Lombok Annotations" title="Direct link to Lombok Annotations" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> What is the role of Lombok annotations in using FesodSheet?</li>
+<li class=""><strong>A:</strong> Commonly used Lombok annotations in entity classes such as <code>@Getter</code>, <code>@Setter</code>, <code>@EqualsAndHashCode</code> are used
+to automatically generate getter, setter methods, equals, and hashCode methods. If you do not want to use these
+auto-generated methods, you can implement them yourself.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=field-matching>Field Matching<a href=#field-matching class=hash-link aria-label="Direct link to Field Matching" title="Direct link to Field Matching" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How to solve the problem of some fields not being read or written correctly?</li>
+<li class=""><strong>A:</strong> Ensure that the entity class fields follow the camel case naming convention, avoid using
+<code>@Accessors(chain = true)</code>, and recommend using <code>@Builder</code> instead. Also, ensure that the entity class uses the
+<code>@ExcelProperty</code> annotation to mark the fields participating in reading and writing.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=compatibility-issues>Compatibility Issues<a href=#compatibility-issues class=hash-link aria-label="Direct link to Compatibility Issues" title="Direct link to Compatibility Issues" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> What should I do if I encounter compatibility issues when using FesodSheet?</li>
+<li class=""><strong>A:</strong> Common compatibility issues include <code>NoSuchMethodException</code>, <code>ClassNotFoundException</code>, <code>NoClassDefFoundError</code>,
+etc., usually caused by jar conflicts. It is recommended to check and clean up dependencies in the project to ensure
+that the version of FesodSheet used is compatible with other libraries in the project.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=online-deployment>Online Deployment<a href=#online-deployment class=hash-link aria-label="Direct link to Online Deployment" title="Direct link to Online Deployment" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> Why are there issues in the online environment when it runs fine locally?</li>
+<li class=""><strong>A:</strong> In most cases, this is due to the lack of necessary font libraries in the online environment. You can solve
+this problem by installing font libraries (such as <code>dejavu-sans-fonts</code> and <code>fontconfig</code>) or enabling memory processing
+mode.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=concurrent-reading>Concurrent Reading<a href=#concurrent-reading class=hash-link aria-label="Direct link to Concurrent Reading" title="Direct link to Concurrent Reading" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> Why shouldn't the Listener be managed by Spring?</li>
+<li class=""><strong>A:</strong> Listeners should not be managed by Spring because this would cause the Listener to become a singleton, which
+may lead to data confusion when reading files concurrently. A new Listener instance should be created each time a file
+is read.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=performance-optimization>Performance Optimization<a href=#performance-optimization class=hash-link aria-label="Direct link to Performance Optimization" title="Direct link to Performance Optimization" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> For large files over 10M, what reading strategies does FesodSheet provide?</li>
+<li class=""><strong>A:</strong> FesodSheet supports default large file processing strategies, as well as customizable high-speed modes and
+optimization settings for high concurrency and super large files.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=writing-and-format-setting>Writing and Format Setting<a href=#writing-and-format-setting class=hash-link aria-label="Direct link to Writing and Format Setting" title="Direct link to Writing and Format Setting" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How to set cell formats?</li>
+<li class=""><strong>A:</strong> You can set cell formats by using annotations such as <code>@ContentStyle</code> on entity class properties, for example,
+numeric formats, date formats, etc.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=export-issues>Export Issues<a href=#export-issues class=hash-link aria-label="Direct link to Export Issues" title="Direct link to Export Issues" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How to resolve the issue of spreadsheet files exported cannot be opened or prompt for repair?</li>
+<li class=""><strong>A:</strong> This is usually caused by frontend frameworks or backend interceptors modifying the file stream. It is
+recommended to test local exports first, ensure the backend logic is correct, and then investigate frontend and
+network-related issues.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=large-file-reading-optimization>Large File Reading Optimization<a href=#large-file-reading-optimization class=hash-link aria-label="Direct link to Large File Reading Optimization" title="Direct link to Large File Reading Optimization" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How does FesodSheet optimize memory usage when reading large files?</li>
+<li class=""><strong>A:</strong> FesodSheet automatically determines the processing method for large files. For files with shared strings
+exceeding 5MB, a file storage strategy is used to reduce memory usage. You can enable ultra-fast mode by setting the
+<code>readCache</code> parameter, but this will increase memory consumption.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=concurrent-processing>Concurrent Processing<a href=#concurrent-processing class=hash-link aria-label="Direct link to Concurrent Processing" title="Direct link to Concurrent Processing" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How to efficiently read spreadsheet files in a high-concurrency environment?</li>
+<li class=""><strong>A:</strong> In a high-concurrency environment, you can optimize reading performance using <code>SimpleReadCacheSelector</code>. By
+setting the <code>maxUseMapCacheSize</code> and <code>maxCacheActivateBatchCount</code> parameters, you can control the cache strategy for
+shared strings, improve hit rates, and reduce file read delays.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=field-mapping>Field Mapping<a href=#field-mapping class=hash-link aria-label="Direct link to Field Mapping" title="Direct link to Field Mapping" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to handle cases where entity class fields do not match spreadsheet column names?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can use the <code>@ExcelProperty</code> annotation to specify the correspondence between entity class fields and
+spreadsheet column names. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@ExcelProperty</span><span class="token punctuation" style=color:#393 [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=data-validation>Data Validation<a href=#data-validation class=hash-link aria-label="Direct link to Data Validation" title="Direct link to Data Validation" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to validate data when reading spreadsheet data?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> Data validation logic can be implemented in the <code>ReadListener</code>. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=custom-styles>Custom Styles<a href=#custom-styles class=hash-link aria-label="Direct link to Custom Styles" title="Direct link to Custom Styles" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to customize cell styles?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can customize cell styles by implementing the <code>WriteHandler</code> interface. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=fill-mode>Fill Mode<a href=#fill-mode class=hash-link aria-label="Direct link to Fill Mode" title="Direct link to Fill Mode" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to solve the issue of fields not being replaced in fill mode?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> Using the <code>inMemory(true)</code> parameter can ensure correct field replacement. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=error-handling>Error Handling<a href=#error-handling class=hash-link aria-label="Direct link to Error Handling" title="Direct link to Error Handling" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to handle exceptions thrown during the reading process?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> Exceptions can be caught and handled in the <code>ReadListener</code>. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=dependency-conflict>Dependency Conflict<a href=#dependency-conflict class=hash-link aria-label="Direct link to Dependency Conflict" title="Direct link to Dependency Conflict" translate=no></a></h2>
+<ul>
+<li class=""><strong>Q:</strong> How to resolve dependency conflict issues?</li>
+<li class=""><strong>A:</strong> Common dependency conflicts include POI, ehcache, commons-io, etc. It is recommended to check the dependency
+tree in the project, ensure that the versions used are compatible with FesodSheet. You can use the Maven
+<code>dependency:tree</code> command to view the dependency tree.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=performance-monitoring>Performance Monitoring<a href=#performance-monitoring class=hash-link aria-label="Direct link to Performance Monitoring" title="Direct link to Performance Monitoring" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to monitor the performance of FesodSheet?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can monitor the performance of FesodSheet by enabling debug logging. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">LoggerContext</span><span class="token plain"> lc </span><span class="token operator" style=color:#39 [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=multi-sheet-reading>Multi-Sheet Reading<a href=#multi-sheet-reading class=hash-link aria-label="Direct link to Multi-Sheet Reading" title="Direct link to Multi-Sheet Reading" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to monitor the performance of FesodSheet?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can monitor the performance of FesodSheet by enabling debug logging. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+<p>Alternatively, you can get information on all sheets before reading:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">ExcelReader</span><span class="token plain"> excelReader </span><span class="token operator" style=co [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=get-total-rows>Get Total Rows<a href=#get-total-rows class=hash-link aria-label="Direct link to Get Total Rows" title="Direct link to Get Total Rows" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to get the total number of rows in a spreadsheet file?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can use <code>analysisContext.readSheetHolder().getApproximateTotalRowNumber()</code> method in the listener to get an
+approximate number of rows. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Override</span><span class="token plain"></span><br/></div><div clas [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=memory-mode>Memory Mode<a href=#memory-mode class=hash-link aria-label="Direct link to Memory Mode" title="Direct link to Memory Mode" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to use memory mode to process spreadsheet files?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> Memory mode is suitable for processing smaller files and can significantly improve processing speed. For
+example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=read-csv-files>Read CSV Files<a href=#read-csv-files class=hash-link aria-label="Direct link to Read CSV Files" title="Direct link to Read CSV Files" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to read CSV files and modify the delimiter?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can modify the delimiter of CSV files by setting <code>CsvFormat</code>. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token class-name">FesodSheet</span><span class="token punctuation" style=color:#393A34>.</span><span class="token funct [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=custom-read-listener>Custom Read Listener<a href=#custom-read-listener class=hash-link aria-label="Direct link to Custom Read Listener" title="Direct link to Custom Read Listener" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to customize the read listener?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can inherit the <code>AnalysisEventListener</code> class and implement your own logic. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=ignore-unannotated-fields-during-reading>Ignore Unannotated Fields During Reading<a href=#ignore-unannotated-fields-during-reading class=hash-link aria-label="Direct link to Ignore Unannotated Fields During Reading" title="Direct link to Ignore Unannotated Fields During Reading" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to ignore fields not annotated with <code>@ExcelProperty</code> during reading?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> Add the <code>@ExcelIgnoreUnannotated</code> annotation at the top of the class. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token annotation punctuation" style=color:#393A34>@Data</span><span class="token plain"></span><br/></div><div class=to [...]
+</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_PvLN" id=set-header-style-during-export>Set Header Style During Export<a href=#set-header-style-during-export class=hash-link aria-label="Direct link to Set Header Style During Export" title="Direct link to Set Header Style During Export" translate=no></a></h2>
+<ul>
+<li class="">
+<p><strong>Q:</strong> How to set header style during export?</p>
+</li>
+<li class="">
+<p><strong>A:</strong> You can customize the header style by implementing the <code>WriteHandler</code> interface. For example:</p>
+<div class="language-java codeBlockContainer_LbUu theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_7fYh><pre tabindex=0 class="prism-code language-java codeBlock_cSKQ thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_S3_k><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=col [...]
+</li>
+</ul>
... 14091 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fesod.apache.org
For additional commands, e-mail: commits-help@fesod.apache.org