diff --git a/changelog.md b/changelog.md
index 5d5843177ab12f08de7b2748a24102ba70aeadd1..c35052dd60429703feb3cdca895580a5034d3223 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,20 @@
 # changelog
 
+## 1.16.0
+`2021-2-20`
+* `NEW` file encoding supports `ansi`
+* `NEW` completion: supports interface, see [#384](https://github.com/sumneko/lua-language-server/issues/384)
+* `NEW` `LuaDoc`: supports multiple class inheritance: `---@class Food: Burger, Pizza, Pie, Pasta`
+* `CHG` rename `table*` to `tablelib`
+* `CHG` `LuaDoc`: revert compatible with `--@`, see [#392](https://github.com/sumneko/lua-language-server/issues/392)
+* `CHG` improve performance
+* `FIX` missed syntax error `f() = 1`
+* `FIX` missed global `bit` in `LuaJIT`
+* `FIX` completion: may insert error text when continuous inputing
+* `FIX` completion: may insert error text after resolve
+* `FIX` [#349](https://github.com/sumneko/lua-language-server/issues/349)
+* `FIX` [#396](https://github.com/sumneko/lua-language-server/issues/396)
+
 ## 1.15.1
 `2021-2-18`
 * `CHG` diagnostic: `unused-local` excludes `doc.param`
diff --git a/package.json b/package.json
index 1d3d0849304cc052634dc603ab522b13de696c98..ba6600e880e50a90301bd2fc4c752da83b676709 100644
--- a/package.json
+++ b/package.json
@@ -1022,6 +1022,16 @@
                     "markdownDescription": "%config.workspace.useGitIgnore%",
                     "scope": "resource",
                     "type": "boolean"
+                },
+                "lua.runtime.fileEncoding": {
+                    "default": "utf8",
+                    "enum": [
+                        "utf8",
+                        "ansi"
+                    ],
+                    "markdownDescription": "%config.runtime.fileEncoding%",
+                    "scope": "resource",
+                    "type": "string"
                 }
             },
             "title": "Lua",
@@ -1083,5 +1093,5 @@
         "type": "git",
         "url": "https://github.com/sumneko/lua-language-server"
     },
-    "version": "1.15.1"
+    "version": "1.16.0"
 }
diff --git a/package.nls.json b/package.nls.json
index 7ea13995c01fe333b99558b838796385dc321d67..e413c16ba003d851480910b4edcd0784a5e3c6b1 100644
--- a/package.nls.json
+++ b/package.nls.json
@@ -36,6 +36,7 @@
     "config.hover.viewStringMax": "The maximum length of a hover to view the contents of a string.",
     "config.intelliSense.fastGlobal": "In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.",
     "config.intelliSense.searchDepth": "Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.",
+    "config.runtime.fileEncoding": "File encoding. The `ansi` option is only available under the `Windows` platform.",
     "config.runtime.nonstandardSymbol": "Supports non-standard symbols. Make sure that your runtime environment supports these symbols.",
     "config.runtime.path": "`package.path`",
     "config.runtime.plugin": "(Proposed) Plugin path.",
diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json
index d63ef96d7106da96e09c66360dfe79a6026610f7..bfdb17b48aee9bd646a1012073a73c0e26e26190 100644
--- a/package.nls.zh-cn.json
+++ b/package.nls.zh-cn.json
@@ -39,6 +39,7 @@
     "config.hover.viewStringMax": "悬停提示查看字符串内容时的最大长度。",
     "config.intelliSense.fastGlobal": "在对全局变量进行补全,及查看 `_G` 的悬浮提示时进行优化。这会略微降低类型推测的准确度,但是对于大量使用全局变量的项目会有大幅的性能提升。",
     "config.intelliSense.searchDepth": "设置智能感知的搜索深度。增大该值可以增加准确度,但会降低性能。不同的项目对该设置的容忍度差异较大,请自己调整为合适的值。",
+    "config.runtime.fileEncoding": "文件编码,`ansi` 选项只在 `Windows` 平台下有效。",
     "config.runtime.nonstandardSymbol": "支持非标准的符号。请务必确认你的运行环境支持这些符号。",
     "config.runtime.path": "`package.path`",
     "config.runtime.plugin": "(实验)插件路径。",
diff --git a/package/build.lua b/package/build.lua
index ba804c7adb5e917ae316b202c77157dbd35af9d5..38c5273995ca9f2eac92a1a4ce8b55ebb4dfaa92 100644
--- a/package/build.lua
+++ b/package/build.lua
@@ -1,6 +1,6 @@
 local json = require 'json-beautify'
 
-local VERSION = "1.15.1"
+local VERSION = "1.16.0"
 
 local package = require 'package.package'
 local fsu     = require 'fs-utility'
diff --git a/publish.lua b/publish.lua
index 43960def7ae477580f3bb69d30b5200a7495e555..6811dea7ff48111fac6f932db4d8da29812163ba 100644
--- a/publish.lua
+++ b/publish.lua
@@ -203,9 +203,13 @@ for i = 5, 0, -1 do
 end
 
 local function shell(command)
-    command.cwd    = out
     command.stdout = true
     command.stderr = true
+    local show = {}
+    for _, c in ipairs(command) do
+        show[#show+1] = tostring(c)
+    end
+    print(table.concat(show, ' '))
     local p, err = subprocess.shell(command)
     if not p then
         error(err)
@@ -219,6 +223,7 @@ local vsix = ROOT / 'publish' / ('lua-' .. version .. '.vsix')
 shell {
     'vsce', 'package',
     '-o', vsix,
+    cwd = out,
 }
 
 shell {
@@ -243,6 +248,7 @@ shell {
 
 shell {
     'vsce', 'publish',
+    cwd = out,
 }
 
 local ovsxToken = fsu.loadFile(ROOT / 'ovsx-token')
diff --git a/server b/server
index 068c105b3347f37da940e61bcd7daa7e3d7d5a03..ebbf09bb27bf54168701f92af51ca774205b77d0 160000
--- a/server
+++ b/server
@@ -1 +1 @@
-Subproject commit 068c105b3347f37da940e61bcd7daa7e3d7d5a03
+Subproject commit ebbf09bb27bf54168701f92af51ca774205b77d0
diff --git a/setting/schema-zh-cn.json b/setting/schema-zh-cn.json
index 6955216cbbcb08c5af19b0523687929a271422e2..2edfced0169267fa1d3b7e5e12381c32a12e8029 100644
--- a/setting/schema-zh-cn.json
+++ b/setting/schema-zh-cn.json
@@ -1006,6 +1006,16 @@
             "markdownDescription": "忽略 `.gitignore` 中列举的文件。",
             "scope": "resource",
             "type": "boolean"
+        },
+        "lua.runtime.fileEncoding": {
+            "default": "utf8",
+            "enum": [
+                "utf8",
+                "ansi"
+            ],
+            "markdownDescription": "文件编码,`ansi` 选项只在 `Windows` 平台下有效。",
+            "scope": "resource",
+            "type": "string"
         }
     },
     "title": "setting",
diff --git a/setting/schema.json b/setting/schema.json
index 9104eab43ebcd9231c2ed4e638c554e31e4941ef..c66a18372b20f5e418cdf94f8ade7dfe9a3bf297 100644
--- a/setting/schema.json
+++ b/setting/schema.json
@@ -1006,6 +1006,16 @@
             "markdownDescription": "Ignore files list in `.gitignore` .",
             "scope": "resource",
             "type": "boolean"
+        },
+        "lua.runtime.fileEncoding": {
+            "default": "utf8",
+            "enum": [
+                "utf8",
+                "ansi"
+            ],
+            "markdownDescription": "File encoding. The `ansi` option is only available under the `Windows` platform.",
+            "scope": "resource",
+            "type": "string"
         }
     },
     "title": "setting",