diff --git a/mirai-console/build.gradle.kts b/mirai-console/build.gradle.kts
index fd393c5dc..1a896636a 100644
--- a/mirai-console/build.gradle.kts
+++ b/mirai-console/build.gradle.kts
@@ -41,6 +41,6 @@ dependencies {
     api(kotlin("serialization"))
     api(group = "com.alibaba", name = "fastjson", version = "1.2.62")
     api(group = "org.yaml", name = "snakeyaml", version = "1.25")
-    api(group = "org.ini4j", name = "ini4j", version = "0.5.4")
+    api(group = "com.moandjiezana.toml", name = "toml4j", version = "0.7.2")
     // classpath is not set correctly by IDE
 }
\ No newline at end of file
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/MiraiConsole.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/MiraiConsole.kt
index 0eedebfb7..5a65dc299 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/MiraiConsole.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/MiraiConsole.kt
@@ -267,7 +267,7 @@ object MiraiConsole {
     }
 
     object MiraiProperties {
-        var config = File("$path/mirai.yml").loadAsConfig()
+        var config = File("$path/mirai.properties").loadAsConfig()
 
         var HTTP_API_ENABLE: Boolean by config.withDefaultWrite { true }
         var HTTP_API_PORT: Int by config.withDefaultWrite { 8080 }
diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt
index f866a0994..2c6ab9523 100644
--- a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt
+++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugins/ConfigSection.kt
@@ -13,6 +13,8 @@ import com.alibaba.fastjson.JSON
 import com.alibaba.fastjson.JSONObject
 import com.alibaba.fastjson.TypeReference
 import com.alibaba.fastjson.parser.Feature
+import com.moandjiezana.toml.Toml
+import com.moandjiezana.toml.TomlWriter
 import kotlinx.serialization.*
 import org.ini4j.Wini
 import org.yaml.snakeyaml.Yaml
@@ -396,38 +398,15 @@ class YamlConfig internal constructor(file: File) : FileConfigImpl(file) {
 
 }
 
-class IniConfig internal constructor(val file: File) : FileConfigImpl(file) {
-    private val iniObj by lazy {
-        Wini(file)
-    }
-    private val rootSection
-        get() = iniObj["root"]
-
-    override fun asMap(): Map<String, Any> {
-        return JSON.parseObject<ConfigSectionImpl>(
-            JSONObject.toJSONString(rootSection),
-            object : TypeReference<ConfigSectionImpl>() {},
-            Feature.OrderedField
-        ).asMap()
-    }
-
-    override fun set(key: String, value: Any) {
-        iniObj.put("root", key, value)
-    }
-
-    override fun get(key: String): Any? {
-        return iniObj.get("root", key)
-    }
-
-    override fun save() {
-        iniObj.store()
-    }
-
+class IniConfig internal constructor(file: File) : FileConfigImpl(file) {
     override fun deserialize(content: String): ConfigSection {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        if (content.isEmpty() || content.isBlank()) {
+            return ConfigSectionImpl()
+        }
+        return ConfigSectionDelegation(Toml().read(content).toMap())
     }
 
     override fun serialize(config: ConfigSection): String {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        return TomlWriter().write(config)
     }
 }
\ No newline at end of file