diff --git a/crates/ide-language/src/registry.rs b/crates/ide-language/src/registry.rs
index 908d3ca5..5ceaec74 100644
--- a/crates/ide-language/src/registry.rs
+++ b/crates/ide-language/src/registry.rs
@@ -16,6 +16,7 @@ const BUILTIN: &[(&str, &str)] = &[
("cpp", include_str!("../../../languages/cpp.toml")),
("csharp", include_str!("../../../languages/csharp.toml")),
("css", include_str!("../../../languages/css.toml")),
+ ("d", include_str!("../../../languages/d.toml")),
("dart", include_str!("../../../languages/dart.toml")),
("diff", include_str!("../../../languages/diff.toml")),
("dockerfile", include_str!("../../../languages/dockerfile.toml")),
diff --git a/languages/d.toml b/languages/d.toml
new file mode 100644
index 00000000..2fcdc2cf
--- /dev/null
+++ b/languages/d.toml
@@ -0,0 +1,13 @@
+id = "d"
+name = "D"
+extensions = ["d", "di"]
+line-comment = "//"
+block-comment = ["/*", "*/"]
+indent = { tab-size = 4, insert-spaces = true }
+ui-mode = "D"
+
+[[language-servers]]
+name = "serve-d"
+command = "serve-d"
+root-markers = ["dub.json", "dub.sdl", "dub.selections.json"]
+install-hint = "Install serve-d (https://github.com/symmetryinvestments/serve-d) and expose it as `serve-d`"
diff --git a/src/ui/icons.tsx b/src/ui/icons.tsx
index bcf50a27..34163014 100644
--- a/src/ui/icons.tsx
+++ b/src/ui/icons.tsx
@@ -130,6 +130,7 @@ const ICONS = {
"file-gdscript": "openidea/fileTypes/gdscript",
"file-godot": "openidea/fileTypes/godot",
"file-gdshader": "openidea/fileTypes/gdshader",
+ "file-d": "openidea/fileTypes/d",
"file-dart": "openidea/fileTypes/dart",
"file-elixir": "openidea/fileTypes/elixir",
"file-erlang": "openidea/fileTypes/erlang",
@@ -878,6 +879,7 @@ const EXT_ICONS = table({
"file-gdscript": "gd",
"file-godot": "tscn tres godot import",
"file-gdshader": "gdshader gdshaderinc",
+ "file-d": "d di",
"file-dart": "dart",
"file-elixir": "ex exs",
"file-erlang": "erl hrl escript app.src",
diff --git a/src/ui/openidea/fileTypes/d.svg b/src/ui/openidea/fileTypes/d.svg
new file mode 100644
index 00000000..861238ca
--- /dev/null
+++ b/src/ui/openidea/fileTypes/d.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/ui/openidea/fileTypes/d_dark.svg b/src/ui/openidea/fileTypes/d_dark.svg
new file mode 100644
index 00000000..216cac95
--- /dev/null
+++ b/src/ui/openidea/fileTypes/d_dark.svg
@@ -0,0 +1,3 @@
+