diff --git a/common/markdown.py b/common/markdown.py
deleted file mode 100755
index 30c5bc2c09..0000000000
--- a/common/markdown.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from typing import List
-
-HTML_REPLACEMENTS = [
- (r'&', r'&'),
- (r'"', r'"'),
-]
-
-
-def parse_markdown(text: str, tab_length: int = 2) -> str:
- lines = text.split("\n")
- output: List[str] = []
- list_level = 0
-
- def end_outstanding_lists(level: int, end_level: int) -> int:
- while level > end_level:
- level -= 1
- output.append("")
- if level > 0:
- output.append("")
- return end_level
-
- for i, line in enumerate(lines):
- if i + 1 < len(lines) and lines[i + 1].startswith("==="): # heading
- output.append(f"
{line}
")
- elif line.startswith("==="):
- pass
- elif line.lstrip().startswith("* "): # list
- line_level = 1 + line.count(" " * tab_length, 0, line.index("*"))
- if list_level >= line_level:
- list_level = end_outstanding_lists(list_level, line_level)
- else:
- list_level += 1
- if list_level > 1:
- output[-1] = output[-1].replace("", "")
- output.append("")
- output.append(f"- {line.replace('*', '', 1).lstrip()}
")
- else:
- list_level = end_outstanding_lists(list_level, 0)
- if len(line) > 0:
- output.append(line)
-
- end_outstanding_lists(list_level, 0)
- output_str = "\n".join(output) + "\n"
-
- for (fr, to) in HTML_REPLACEMENTS:
- output_str = output_str.replace(fr, to)
-
- return output_str
diff --git a/common/tests/test_markdown.py b/common/tests/test_markdown.py
deleted file mode 100755
index 9ac67f7e50..0000000000
--- a/common/tests/test_markdown.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python3
-from markdown_it import MarkdownIt
-import os
-import unittest
-
-from common.basedir import BASEDIR
-from common.markdown import parse_markdown
-
-
-class TestMarkdown(unittest.TestCase):
- # validate that our simple markdown parser produces the same output as `markdown_it` from pip
- def test_current_release_notes(self):
- self.maxDiff = None
-
- with open(os.path.join(BASEDIR, "RELEASES.md")) as f:
- for r in f.read().split("\n\n"):
-
- # No hyperlink support is ok
- if '[' in r:
- continue
-
- self.assertEqual(MarkdownIt().render(r), parse_markdown(r))
-
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/release/files_common b/release/files_common
index d3ab5db65d..7dfafcb26c 100644
--- a/release/files_common
+++ b/release/files_common
@@ -26,7 +26,6 @@ common/ffi_wrapper.py
common/file_helpers.py
common/logging_extra.py
common/numpy_fast.py
-common/markdown.py
common/params.py
common/params_pyx.pyx
common/xattr.py
diff --git a/selfdrive/updated.py b/selfdrive/updated.py
index 8c2dfbd1fb..19dba9825e 100755
--- a/selfdrive/updated.py
+++ b/selfdrive/updated.py
@@ -33,9 +33,9 @@ import time
import threading
from pathlib import Path
from typing import List, Tuple, Optional
+from markdown_it import MarkdownIt
from common.basedir import BASEDIR
-from common.markdown import parse_markdown
from common.params import Params
from selfdrive.hardware import TICI, HARDWARE
from selfdrive.swaglog import cloudlog
@@ -126,7 +126,7 @@ def set_params(new_version: bool, failed_count: int, exception: Optional[str]) -
with open(os.path.join(FINALIZED, "RELEASES.md"), "rb") as f:
r = f.read().split(b'\n\n', 1)[0] # Slice latest release notes
try:
- params.put("ReleaseNotes", parse_markdown(r.decode("utf-8")))
+ params.put("ReleaseNotes", MarkdownIt().render(r.decode("utf-8")))
except Exception:
params.put("ReleaseNotes", r + b"\n")
except Exception: