From 648d57dae5531a0b05eb524e774e85eaae15b461 Mon Sep 17 00:00:00 2001 From: DJCheesusReal <134006619+DJCheesusReal@users.noreply.github.com> Date: Sun, 17 May 2026 17:10:16 +0100 Subject: [PATCH] Add modrinth://launch deep link to start a profile Support external profile launching via modrinth://launch/{profile_path} for integrations such as Stream Deck. Co-authored-by: Cursor --- apps/app-frontend/src/App.vue | 4 +++- packages/app-lib/src/api/handler.rs | 4 ++++ packages/app-lib/src/event/mod.rs | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue index 1939fa8787..8a65395b05 100644 --- a/apps/app-frontend/src/App.vue +++ b/apps/app-frontend/src/App.vue @@ -98,7 +98,7 @@ import { get_user, get_version } from '@/helpers/cache.js' import { command_listener, warning_listener } from '@/helpers/events.js' import { cancelLogin, get as getCreds, login, logout } from '@/helpers/mr_auth.ts' import { create_profile_and_install_from_file } from '@/helpers/pack' -import { list } from '@/helpers/profile.js' +import { list, run } from '@/helpers/profile.js' import { mergeUrlQuery, parseModrinthLink } from '@/helpers/project-links.ts' import { get as getSettings, set as setSettings } from '@/helpers/settings.ts' import { get_opening_command, initialize_state } from '@/helpers/state' @@ -796,6 +796,8 @@ async function handleCommand(e) { source: 'CreationModalFileDrop', }) } + } else if (e.event === 'LaunchProfile') { + await run(e.path).catch(handleError) } else if (e.event === 'InstallServer') { await router.push(`/project/${e.id}`) await playServerProject(e.id).catch(handleError) diff --git a/packages/app-lib/src/api/handler.rs b/packages/app-lib/src/api/handler.rs index 500aaeb385..16a9a9fd03 100644 --- a/packages/app-lib/src/api/handler.rs +++ b/packages/app-lib/src/api/handler.rs @@ -28,6 +28,10 @@ pub async fn handle_url(sublink: &str) -> crate::Result { Some(("server", id)) => { CommandPayload::InstallServer { id: id.to_string() } } + // /launch/{id} - Launches a profile + Some(("launch", id)) => CommandPayload::LaunchProfile { + path: id.to_string(), + }, _ => { emit_warning(&format!( "Invalid command, unrecognized path: {sublink}" diff --git a/packages/app-lib/src/event/mod.rs b/packages/app-lib/src/event/mod.rs index f570d78a9a..1f642466a4 100644 --- a/packages/app-lib/src/event/mod.rs +++ b/packages/app-lib/src/event/mod.rs @@ -212,6 +212,9 @@ pub enum CommandPayload { InstallServer { id: String, }, + LaunchProfile { + path: String, + }, RunMRPack { // run or install .mrpack path: PathBuf,