diff --git a/builtin/mainmenu/content/contentdb.lua b/builtin/mainmenu/content/contentdb.lua
index fbd94376d..147451993 100644
--- a/builtin/mainmenu/content/contentdb.lua
+++ b/builtin/mainmenu/content/contentdb.lua
@@ -623,6 +623,7 @@ end
contentdb.get_full_package_info = get_package_info("full_info", "/for-client/")
contentdb.get_package_reviews = get_package_info("reviews", "/for-client/reviews/")
+contentdb.get_package_releases = get_package_info("releases", "/releases/")
function contentdb.get_formspec_padding()
diff --git a/builtin/mainmenu/content/dlg_package.lua b/builtin/mainmenu/content/dlg_package.lua
index 500fb3f6c..ad6d01edd 100644
--- a/builtin/mainmenu/content/dlg_package.lua
+++ b/builtin/mainmenu/content/dlg_package.lua
@@ -131,6 +131,7 @@ local function get_formspec(data)
fgettext("Description"),
fgettext("Information"),
fgettext("Reviews") .. core.formspec_escape(" [" .. review_count .. "]"),
+ fgettext("Releases"),
}
local tab_body_height = bottom_buttons_y - 2.8
@@ -232,6 +233,57 @@ local function get_formspec(data)
else
table.insert_all(formspec, {"label[2,2;", fgettext("Loading..."), "]"} )
end
+ elseif current_tab == 4 then
+ if not package.releases and not data.releases_error and not data.releases_loading then
+ data.releases_loading = true
+
+ contentdb.get_package_releases(package, function(releases)
+ if not releases then
+ data.releases_error = true
+ end
+ ui.update()
+ end)
+ end
+
+ local function markup(text)
+ text = text:gsub("%*%*([^%s][^*]-[^%s])%*%*", "%1")
+ text = text:gsub("%*([^%s][^*]-[^%s])%*", "%1")
+ text = text:gsub("* ", "• ")
+ text = text:gsub("- ", "• ")
+ return text
+ end
+
+ local hypertext = {}
+ local insert = table.insert
+ if package.releases then
+ for _, def in pairs(package.releases) do
+ insert(hypertext,
+ ""..core.hypertext_escape(def.title).." ("..def.release_date:gsub("T.*", "")..")\n"..
+ fgettext("$1 downloads",
+ def.downloads)..".\n"
+ )
+
+ if def.release_notes then
+ insert(hypertext, core.hypertext_escape(
+ markup((def.release_notes
+ :gsub("