diff --git a/.chglog/CHANGELOG.tpl.md b/.chglog/CHANGELOG.tpl.md
new file mode 100755
index 00000000..60a67d5b
--- /dev/null
+++ b/.chglog/CHANGELOG.tpl.md
@@ -0,0 +1,30 @@
+{{ range .Versions }}
+
+## {{ if .Tag.Previous }}[{{ .Tag.Name }}]({{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}){{ else }}{{ .Tag.Name }}{{ end }} ({{ datetime "2006-01-02" .Tag.Date }})
+
+{{ range .CommitGroups -}}
+### {{ .Title }}
+
+{{ range .Commits -}}
+* {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ end }}
+{{ end -}}
+
+{{- if .RevertCommits -}}
+### Reverts
+
+{{ range .RevertCommits -}}
+* {{ .Revert.Header }}
+{{ end }}
+{{ end -}}
+
+{{- if .NoteGroups -}}
+{{ range .NoteGroups -}}
+### {{ .Title }}
+
+{{ range .Notes }}
+{{ .Body }}
+{{ end }}
+{{ end -}}
+{{ end -}}
+{{ end -}}
\ No newline at end of file
diff --git a/.chglog/config.yml b/.chglog/config.yml
new file mode 100755
index 00000000..9c4cc408
--- /dev/null
+++ b/.chglog/config.yml
@@ -0,0 +1,36 @@
+style: github
+template: CHANGELOG.tpl.md
+info:
+ title: CHANGELOG
+ repository_url: https://github.com/FunctionStream/function-stream
+options:
+ commit_groups:
+ title_maps:
+ feat: Features
+ fix: Bug Fixes
+ perf: Performance Improvements
+ refactor: Code Refactoring
+ docs: Documentation
+ style: Styles
+ test: Tests
+ chore: Miscellaneous
+ sort_by: Custom
+ title_order:
+ - feat
+ - fix
+ - perf
+ - refactor
+ - docs
+ - style
+ - test
+ - chore
+ header:
+ pattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$"
+ pattern_maps:
+ - Type
+ - Scope
+ - Subject
+ notes:
+ keywords:
+ - BREAKING CHANGE
+ tag_filter_pattern: '^v\d+\.\d+\.\d+$'
diff --git a/.chglog/gen-chg-log.sh b/.chglog/gen-chg-log.sh
new file mode 100755
index 00000000..307d9d90
--- /dev/null
+++ b/.chglog/gen-chg-log.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Copyright 2024 Function Stream Org.
+#
+# Licensed 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.
+
+set -xe
+
+cd "$(git rev-parse --show-toplevel)"
+
+git-chglog --output CHANGELOG.md
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..e092eba0
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,75 @@
+
+
+## [v0.3.0](https://github.com/FunctionStream/function-stream/compare/v0.2.0...v0.3.0) (2024-03-13)
+
+### Features
+
+* state store ([#153](https://github.com/FunctionStream/function-stream/issues/153))
+* add http source tube ([#149](https://github.com/FunctionStream/function-stream/issues/149))
+* add sink, source and runtime config to function config ([#136](https://github.com/FunctionStream/function-stream/issues/136))
+* add grpc runtime ([#135](https://github.com/FunctionStream/function-stream/issues/135))
+
+### Tests
+
+* add tests for chan utils ([#140](https://github.com/FunctionStream/function-stream/issues/140))
+* fix flaky test for grpc_func ([#142](https://github.com/FunctionStream/function-stream/issues/142))
+
+### Bug Fixes
+
+* fix deadlock issue in grpc_func and add cors support ([#158](https://github.com/FunctionStream/function-stream/issues/158))
+* cli doesn't respect replica when creating function ([#145](https://github.com/FunctionStream/function-stream/issues/145))
+* fix race condition issues in function manager ([#141](https://github.com/FunctionStream/function-stream/issues/141))
+* fix context value setting for the function instance ([#139](https://github.com/FunctionStream/function-stream/issues/139))
+
+### Code Refactoring
+
+* improve grpc function protocol ([#147](https://github.com/FunctionStream/function-stream/issues/147))
+* improve logging ([#146](https://github.com/FunctionStream/function-stream/issues/146))
+
+### Miscellaneous
+
+* rename module ([#137](https://github.com/FunctionStream/function-stream/issues/137))
+
+
+
+## [v0.2.0](https://github.com/FunctionStream/function-stream/compare/v0.1.0...v0.2.0) (2024-02-17)
+
+### Features
+
+* add directory structure to readme and improve structure ([#132](https://github.com/FunctionStream/function-stream/issues/132))
+* support basic function operations using CLI tool ([#128](https://github.com/FunctionStream/function-stream/issues/128))
+* support pluggable queue ([#125](https://github.com/FunctionStream/function-stream/issues/125))
+* support delete function ([#3](https://github.com/FunctionStream/function-stream/issues/3))
+* add integration test and CI ([#1](https://github.com/FunctionStream/function-stream/issues/1))
+* support loading wasm file
+
+### License
+
+* update license header ([#130](https://github.com/FunctionStream/function-stream/issues/130))
+
+### Build
+
+* add license checker ([#7](https://github.com/FunctionStream/function-stream/issues/7))
+
+### Bug Fixes
+
+* fix mem queue bench doesn't show result ([#129](https://github.com/FunctionStream/function-stream/issues/129))
+
+### Performance Improvements
+
+* improve performance ([#124](https://github.com/FunctionStream/function-stream/issues/124))
+* add bench perf ([#6](https://github.com/FunctionStream/function-stream/issues/6))
+
+### Code Refactoring
+
+* use tube term instead of queue ([#134](https://github.com/FunctionStream/function-stream/issues/134))
+* abstract contube-go impl ([#131](https://github.com/FunctionStream/function-stream/issues/131))
+
+### Documentation
+
+* fix readme format ([#133](https://github.com/FunctionStream/function-stream/issues/133))
+
+
+
+## v0.1.0 (2021-06-28)
+
diff --git a/license-checker/license-checker.sh b/license-checker/license-checker.sh
index 32e87aca..ef945baf 100755
--- a/license-checker/license-checker.sh
+++ b/license-checker/license-checker.sh
@@ -13,18 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Licensed 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.
-
set -xe
cd "$(git rev-parse --show-toplevel)"
@@ -38,8 +26,8 @@ fi
$LICENSE_CHECKER -a -r -i bin,restclient,common/run.go,common/signal.go,fs/runtime/grpc/proto ./license-checker/license-header.txt . go
$LICENSE_CHECKER -a -r ./license-checker/license-header.txt . proto
-$LICENSE_CHECKER -a -r -i bin,restclient ./license-checker/license-header-sh.txt . sh yaml yml
-$LICENSE_CHECKER -a -r -i bin,restclient ./license-checker/license-header-md.txt . md
+$LICENSE_CHECKER -a -r -i bin,restclient,.chglog ./license-checker/license-header-sh.txt . sh yaml yml
+$LICENSE_CHECKER -a -r -i bin,restclient,.chglog,CHANGELOG.md ./license-checker/license-header-md.txt . md
if [[ -z $(git status -s) ]]; then
echo "No license header issues found"