diff --git a/src/renderer/src/components/ManifestInfo/index.jsx b/src/renderer/src/components/ManifestInfo/index.jsx
new file mode 100644
index 0000000..1d47268
--- /dev/null
+++ b/src/renderer/src/components/ManifestInfo/index.jsx
@@ -0,0 +1,99 @@
+import React from "react"
+import * as antd from "antd"
+import { MdDownloadForOffline, MdAccountCircle, MdTag } from "react-icons/md"
+
+import "./index.less"
+
+const ManifestInfo = (props) => {
+ const [loading, setLoading] = React.useState(true)
+ const [manifest, setManifest] = React.useState(null)
+ const [error, setError] = React.useState(null)
+
+ async function handleInstall() {
+ await ipc.exec("bundle:install", props.manifest)
+
+ if (typeof props.close === "function") {
+ props.close()
+ }
+ }
+
+ async function loadManifest(url) {
+ setLoading(true)
+
+ try {
+ const result = await ipc.exec("bundle:read", url)
+
+ setManifest(JSON.parse(result))
+
+ setLoading(false)
+ } catch (error) {
+ setError(error)
+ }
+ }
+
+ React.useEffect(() => {
+ if (typeof props.manifest === "string") {
+ loadManifest(props.manifest)
+ } else {
+ setLoading(false)
+ }
+ }, [])
+
+ if (error) {
+ return
+ {manifest.description} +
+