diff --git a/public/index.html b/public/index.html
index ef4907f..52f17c5 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2,6 +2,7 @@
+
app
diff --git a/src/appmanager/applications/duckduckgo.js b/src/appmanager/applications/duckduckgo.js
new file mode 100644
index 0000000..e0bda9f
--- /dev/null
+++ b/src/appmanager/applications/duckduckgo.js
@@ -0,0 +1,11 @@
+import { spawnBrowser } from "../appruntime";
+
+const app = {
+ name: "duckduckgo",
+ component: null,
+ async open() {
+ await spawnBrowser("https://duckduckgo.com/");
+ }
+};
+
+export default app;
\ No newline at end of file
diff --git a/src/appmanager/appruntime.js b/src/appmanager/appruntime.js
new file mode 100644
index 0000000..8b36a7e
--- /dev/null
+++ b/src/appmanager/appruntime.js
@@ -0,0 +1,12 @@
+import env from '../env';
+
+const { spawn } = require('child_process');
+
+export function spawnBrowser(url, params=[]) {
+ return new Promise((resolve, reject) => {
+ const browserProcess = spawn(env.browserLaunch.browserBinary, [...env.browserLaunch.params, ...params, url]);
+
+ browserProcess.on("spawn", () => resolve(browserProcess));
+ browserProcess.on("error", e => reject(e));
+ });
+}
\ No newline at end of file
diff --git a/src/appmanager/provider.js b/src/appmanager/provider.js
new file mode 100644
index 0000000..2a6a44f
--- /dev/null
+++ b/src/appmanager/provider.js
@@ -0,0 +1,9 @@
+import duckduckgo from "./applications/duckduckgo";
+
+const provider = {
+ repository: [
+ duckduckgo
+ ]
+};
+
+export default provider;
\ No newline at end of file
diff --git a/src/components/AppTile.svelte b/src/components/AppTile.svelte
index a7c9d18..da02834 100644
--- a/src/components/AppTile.svelte
+++ b/src/components/AppTile.svelte
@@ -1,9 +1,13 @@
-