diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue
index 5036efc8a..18a686332 100644
--- a/apps/app-frontend/src/App.vue
+++ b/apps/app-frontend/src/App.vue
@@ -84,6 +84,7 @@ import InstallToPlayModal from '@/components/ui/modal/InstallToPlayModal.vue'
import ModpackAlreadyInstalledModal from '@/components/ui/modal/ModpackAlreadyInstalledModal.vue'
import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue'
import NavButton from '@/components/ui/NavButton.vue'
+import PrideFundraiserBanner from '@/components/ui/PrideFundraiserBanner.vue'
import PromotionWrapper from '@/components/ui/PromotionWrapper.vue'
import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue'
import SplashScreen from '@/components/ui/SplashScreen.vue'
@@ -101,6 +102,7 @@ import { list } 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'
+import { hasActivePride26Midas, hasMidasBadge } from '@/helpers/user-campaigns.ts'
import {
areUpdatesEnabled,
enqueueUpdateForInstallation,
@@ -134,6 +136,7 @@ const route = useRoute()
const APP_LEFT_NAV_WIDTH = '4rem'
const APP_SIDEBAR_WIDTH = 300
const INTERCOM_BUBBLE_DEFAULT_PADDING = 20
+const PRIDE_FUNDRAISER_END_DATE = new Date('2026-07-01T00:00:00Z').getTime()
const credentials = ref()
const sidebarToggled = ref(true)
const unsubscribeSidebarToggle = themeStore.$subscribe(() => {
@@ -144,6 +147,9 @@ const forceSidebar = computed(
)
const sidebarVisible = computed(() => sidebarToggled.value || forceSidebar.value)
const hostingRouteActive = computed(() => route.path.startsWith('/hosting'))
+const prideFundraiserEnabled = computed(
+ () => themeStore.getFeatureFlag('pride_fundraiser') && Date.now() < PRIDE_FUNDRAISER_END_DATE,
+)
const hostingIntercomIdentityKey = computed(() => {
const rawServerId = route.params.id
const serverId = Array.isArray(rawServerId) ? rawServerId[0] : rawServerId
@@ -192,6 +198,12 @@ const tauriApiClient = new TauriModrinthClient({
],
})
provideModrinthClient(tauriApiClient)
+const { data: authenticatedModrinthUser } = useQuery({
+ queryKey: computed(() => ['authenticated-user', 'campaigns', credentials.value?.user?.id]),
+ queryFn: () => tauriApiClient.labrinth.users_v3.getAuthenticated(),
+ enabled: () => !!credentials.value?.session,
+ retry: false,
+})
providePageContext({
hierarchicalSidebarAvailable: ref(true),
showAds: ref(false),
@@ -676,12 +688,11 @@ async function logOut() {
await fetchCredentials()
}
-const MIDAS_BITFLAG = 1 << 0
const hasPlus = computed(
() =>
- credentials.value &&
- credentials.value.user &&
- (credentials.value.user.badges & MIDAS_BITFLAG) === MIDAS_BITFLAG,
+ !!credentials.value?.user &&
+ (hasMidasBadge(credentials.value.user) ||
+ hasActivePride26Midas(authenticatedModrinthUser.value?.campaigns?.pride_26)),
)
const showAd = computed(
@@ -1479,6 +1490,10 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
+ {{ section.infoTooltip }} +
+ +
+
+Supporters with this badge will also unlock a special Pride section in the Skin selector in the Modrinth App featuring the incredibly cute Mr. Pack in Pride-themed, exclusive Modrinth skins:
+
+
+
+### Modrinth+
+
+Donations of $5 (USD) or more will grant you with free [Modrinth+](https://modrinth.com/plus) benefits for 1 month as an additional thank-you - available to users who do not already have an active Modrinth+ subscription.
+
+## Pride Collection 2026
+
+Alongside the fundraiser, we're also launching the [Modrinth Pride Collection!](https://modrinth.com/collection/M4c3ITvd)
+
+This collection highlights projects made by and for the queer community, including mods, resource packs, modpacks, plugins, and more across Modrinth.
+
+[**You can submit projects all month long**](https://tally.so/r/GxQBbO)
+
+Throughout June, we'll be featuring selected projects from the collection across our social media alongside our usual creator spotlights. Pride is about visibility, and we want to use this month to celebrate the LGBTQIA+ creators and communities that help make Modrinth what it is.
diff --git a/packages/blog/compiled/index.ts b/packages/blog/compiled/index.ts
index 3a6b6aca2..02f29ff7e 100644
--- a/packages/blog/compiled/index.ts
+++ b/packages/blog/compiled/index.ts
@@ -27,6 +27,7 @@ import { article as new_environments } from "./new_environments";
import { article as new_site_beta } from "./new_site_beta";
import { article as plugins_resource_packs } from "./plugins_resource_packs";
import { article as pride_campaign_2025 } from "./pride_campaign_2025";
+import { article as pride_campaign_2026 } from "./pride_campaign_2026";
import { article as redesign } from "./redesign";
import { article as russian_censorship } from "./russian_censorship";
import { article as skins_now_in_modrinth_app } from "./skins_now_in_modrinth_app";
@@ -67,6 +68,7 @@ export const articles = [
new_site_beta,
plugins_resource_packs,
pride_campaign_2025,
+ pride_campaign_2026,
redesign,
russian_censorship,
skins_now_in_modrinth_app,
diff --git a/packages/blog/compiled/pride_campaign_2026.content.ts b/packages/blog/compiled/pride_campaign_2026.content.ts
new file mode 100644
index 000000000..8006b44e1
--- /dev/null
+++ b/packages/blog/compiled/pride_campaign_2026.content.ts
@@ -0,0 +1,2 @@
+// AUTO-GENERATED FILE - DO NOT EDIT
+export const html = `Pride is a time for celebration, self-expression, and community. Queer individuals are part of Modrinth at every level: across our team, our creator community, and the wider Minecraft community as a whole. We're very proud to be vocal in our support for LGBTQIA+ rights all year round.
But for many people, Pride is a celebration that comes with great risk. Recent reporting shows there's no shortage of tragedies facing LGBTQIA+ people. Threats, attacks, and even worse happen around the world - Juniper Blessing and Shyyell Diamond Sanchez-McCray, trans rights activists Zehrish Khanzadi and Bindiya Rana surviving gunfire in Pakistan, and many more cases like these are reminders that safety is not guaranteed for some members of our community.
That's why this Pride Month, Modrinth will be running a fundraiser supporting Rainbow Railroad.
Rainbow Railroad works with LGBTQIA+ people who are facing danger, helping to connect them with support, resources, and pathways to safe countries. Through their Solidarity in Pride 2026 campaign, they're raising funds to help at-risk LGBTQIA+ people access safety when staying in place is no longer an option.
You can support the fundraiser here.
When donating, please enter your Modrinth username as the Tiltify display name so we can apply any eligible rewards to your account!
We want to maximize the impact our community can make.
To help achieve this, we've committed to matching all donations 1:1 until our fundraising goal of $5,000 has been met.
This year, we will also be providing rewards as a small thank you to everyone who supports the fundraiser. Including a few limited rewards specific to this year's fundraiser!
Everyone who donates will receive a special Pride 2026 profile badge on Modrinth.

Supporters with this badge will also unlock a special Pride section in the Skin selector in the Modrinth App featuring the incredibly cute Mr. Pack in Pride-themed, exclusive Modrinth skins:

Donations of $5 (USD) or more will grant you with free Modrinth+ benefits for 1 month as an additional thank-you - available to users who do not already have an active Modrinth+ subscription.
Alongside the fundraiser, we're also launching the Modrinth Pride Collection!
This collection highlights projects made by and for the queer community, including mods, resource packs, modpacks, plugins, and more across Modrinth.
You can submit projects all month long
Throughout June, we'll be featuring selected projects from the collection across our social media alongside our usual creator spotlights. Pride is about visibility, and we want to use this month to celebrate the LGBTQIA+ creators and communities that help make Modrinth what it is.
`; diff --git a/packages/blog/compiled/pride_campaign_2026.ts b/packages/blog/compiled/pride_campaign_2026.ts new file mode 100644 index 000000000..27a52b832 --- /dev/null +++ b/packages/blog/compiled/pride_campaign_2026.ts @@ -0,0 +1,13 @@ +// AUTO-GENERATED FILE - DO NOT EDIT +export const article = { + html: () => import(`./pride_campaign_2026.content`).then(m => m.html), + title: "Pride 2026 Fundraiser: Matching up to $5,000", + summary: "Celebrating our community and working together to make a difference.", + date: "2026-06-01T16:00:00.000Z", + slug: "pride-campaign-2026", + authors: [], + unlisted: false, + thumbnail: true, + short_title: "Pride 2026 Fundraiser", + short_summary: "Celebrating our community and working together to make a difference.", +}; diff --git a/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp b/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp new file mode 100644 index 000000000..dec24a621 Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/mrpack-pride-banner.webp differ diff --git a/packages/blog/public/pride-campaign-2026/pride-badge.webp b/packages/blog/public/pride-campaign-2026/pride-badge.webp new file mode 100644 index 000000000..c72207512 Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/pride-badge.webp differ diff --git a/packages/blog/public/pride-campaign-2026/thumbnail.webp b/packages/blog/public/pride-campaign-2026/thumbnail.webp new file mode 100644 index 000000000..f8b1e231c Binary files /dev/null and b/packages/blog/public/pride-campaign-2026/thumbnail.webp differ diff --git a/packages/ui/src/components/skin/SkinButton.vue b/packages/ui/src/components/skin/SkinButton.vue index 35bf60887..0ab42911d 100644 --- a/packages/ui/src/components/skin/SkinButton.vue +++ b/packages/ui/src/components/skin/SkinButton.vue @@ -49,14 +49,14 @@ watch(