feat: DEV-99 blog migration (#3870)
* feat: blog migration w/ fixes Co-authored-by: Prospector <prospectordev@gmail.com> * feat: add changelog button to news page * fix: lint issues * refactor: replace nuxt content with `@modrinth/blog` * feat: shared public folder * feat: try lazy loading html content * feat: rss + hide newsletter btn + blog.config.ts * feat: add new chapter modrinth servers post * fix: lint issues * fix: only generate RSS feed if changes detected * fix: utils dep * fix: lockfile dep * feat: GET /email/subscribe + subscription button * fix: lint issues * feat: articles.json for app * Made grid more responsive * fix: changes * Make margin slightly smaller in lists * Fix footer link * feat: latest news * Fix responsiveness * Remove old utm link * Update changelog * Lint --------- Co-authored-by: Prospector <prospectordev@gmail.com>
No files matched your search
@@ -188,7 +188,7 @@ async function setupApp() {
|
||||
)
|
||||
})
|
||||
|
||||
useFetch(`https://modrinth.com/blog/news.json`, 'news', true).then((res) => {
|
||||
useFetch(`https://modrinth.com/news/feed/articles.json`, 'news', true).then((res) => {
|
||||
if (res && res.articles) {
|
||||
news.value = res.articles
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
Support: https://support.modrinth.com
|
||||
Status page: https://status.modrinth.com
|
||||
Roadmap: https://roadmap.modrinth.com
|
||||
Blog and newsletter: https://blog.modrinth.com/subscribe?utm_medium=social&utm_source=discord&utm_campaign=welcome
|
||||
Blog and newsletter: https://modrinth.com/news
|
||||
API documentation: https://docs.modrinth.com
|
||||
Modrinth source code: https://github.com/modrinth
|
||||
Help translate Modrinth: https://crowdin.com/project/modrinth
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
"@modrinth/assets": "workspace:*",
|
||||
"@modrinth/ui": "workspace:*",
|
||||
"@modrinth/utils": "workspace:*",
|
||||
"@modrinth/blog": "workspace:*",
|
||||
"@pinia/nuxt": "^0.5.1",
|
||||
"@types/three": "^0.172.0",
|
||||
"@vintl/vintl": "^4.4.1",
|
||||
"@vueuse/core": "^11.1.0",
|
||||
"ace-builds": "^1.36.2",
|
||||
@@ -59,7 +61,6 @@
|
||||
"qrcode.vue": "^3.4.0",
|
||||
"semver": "^7.5.4",
|
||||
"three": "^0.172.0",
|
||||
"@types/three": "^0.172.0",
|
||||
"vue-multiselect": "3.0.0-alpha.2",
|
||||
"vue-typed-virtual-list": "^1.0.10",
|
||||
"vue3-ace-editor": "^2.2.4",
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
<script setup lang="ts">
|
||||
import { ButtonStyled } from "@modrinth/ui";
|
||||
import { MailIcon, CheckIcon } from "@modrinth/assets";
|
||||
import { ref, watchEffect } from "vue";
|
||||
import { useBaseFetch } from "~/composables/fetch.js";
|
||||
|
||||
const auth = await useAuth();
|
||||
const showSubscriptionConfirmation = ref(false);
|
||||
const subscribed = ref(false);
|
||||
|
||||
async function checkSubscribed() {
|
||||
if (auth.value?.user) {
|
||||
try {
|
||||
const { data } = await useBaseFetch("auth/email/subscribe", {
|
||||
method: "GET",
|
||||
});
|
||||
subscribed.value = data?.subscribed || false;
|
||||
} catch {
|
||||
subscribed.value = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watchEffect(() => {
|
||||
checkSubscribed();
|
||||
});
|
||||
|
||||
async function subscribe() {
|
||||
try {
|
||||
await useBaseFetch("auth/email/subscribe", {
|
||||
method: "POST",
|
||||
});
|
||||
showSubscriptionConfirmation.value = true;
|
||||
} catch {
|
||||
} finally {
|
||||
setTimeout(() => {
|
||||
showSubscriptionConfirmation.value = false;
|
||||
subscribed.value = true;
|
||||
}, 2500);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ButtonStyled v-if="auth?.user && !subscribed" color="brand" type="outlined">
|
||||
<button v-tooltip="`Subscribe to the Modrinth newsletter`" @click="subscribe">
|
||||
<template v-if="!showSubscriptionConfirmation"> <MailIcon /> Subscribe </template>
|
||||
<template v-else> <CheckIcon /> Subscribed! </template>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div class="flex gap-2">
|
||||
<ButtonStyled circular>
|
||||
<a
|
||||
v-tooltip="`Share on Bluesky`"
|
||||
:href="`https://bsky.app/intent/compose?text=${encodedUrl}`"
|
||||
target="_blank"
|
||||
>
|
||||
<BlueskyIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<a
|
||||
v-tooltip="`Share on Mastodon`"
|
||||
:href="`https://tootpick.org/#text=${encodedUrl}`"
|
||||
target="_blank"
|
||||
>
|
||||
<MastodonIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<a
|
||||
v-tooltip="`Share on X`"
|
||||
:href="`https://www.x.com/intent/post?url=${encodedUrl}`"
|
||||
target="_blank"
|
||||
>
|
||||
<TwitterIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<a
|
||||
v-tooltip="`Share via email`"
|
||||
:href="`mailto:${encodedTitle ? `?subject=${encodedTitle}&` : `?`}body=${encodedUrl}`"
|
||||
target="_blank"
|
||||
>
|
||||
<MailIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="copied ? `Copied to clipboard` : `Copy link`"
|
||||
:disabled="copied"
|
||||
class="relative grid place-items-center overflow-hidden"
|
||||
@click="copyToClipboard(url)"
|
||||
>
|
||||
<CheckIcon
|
||||
class="absolute transition-all ease-in-out"
|
||||
:class="copied ? 'translate-y-0' : 'translate-y-7'"
|
||||
/>
|
||||
<LinkIcon
|
||||
class="absolute transition-all ease-in-out"
|
||||
:class="copied ? '-translate-y-7' : 'translate-y-0'"
|
||||
/>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
BlueskyIcon,
|
||||
CheckIcon,
|
||||
LinkIcon,
|
||||
MailIcon,
|
||||
MastodonIcon,
|
||||
TwitterIcon,
|
||||
} from "@modrinth/assets";
|
||||
import { ButtonStyled } from "@modrinth/ui";
|
||||
|
||||
const props = defineProps<{
|
||||
title?: string;
|
||||
url: string;
|
||||
}>();
|
||||
|
||||
const copied = ref(false);
|
||||
const encodedUrl = computed(() => encodeURIComponent(props.url));
|
||||
const encodedTitle = computed(() => (props.title ? encodeURIComponent(props.title) : undefined));
|
||||
|
||||
async function copyToClipboard(text: string) {
|
||||
await navigator.clipboard.writeText(text);
|
||||
copied.value = true;
|
||||
setTimeout(() => {
|
||||
copied.value = false;
|
||||
}, 3000);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,50 @@
|
||||
<template>
|
||||
<div class="mx-2 p-4 !py-8 shadow-md sm:mx-8 sm:p-32">
|
||||
<div class="my-8 flex items-center justify-between">
|
||||
<h2 class="m-0 mx-auto text-3xl font-extrabold sm:text-4xl">Latest news from Modrinth</h2>
|
||||
</div>
|
||||
|
||||
<div v-if="latestArticles" class="grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] gap-4">
|
||||
<div
|
||||
v-for="(article, index) in latestArticles"
|
||||
:key="article.slug"
|
||||
:class="{ 'max-xl:hidden': index === 2 }"
|
||||
>
|
||||
<NewsArticleCard :article="article" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-2 my-8 flex w-full items-center justify-center">
|
||||
<ButtonStyled color="brand" size="large">
|
||||
<nuxt-link to="/news">
|
||||
<NewspaperIcon />
|
||||
View all news
|
||||
</nuxt-link>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { NewspaperIcon } from "@modrinth/assets";
|
||||
import { articles as rawArticles } from "@modrinth/blog";
|
||||
import { ButtonStyled } from "@modrinth/ui";
|
||||
import { ref, computed } from "vue";
|
||||
import NewsArticleCard from "./NewsArticleCard.vue";
|
||||
|
||||
const articles = ref(
|
||||
rawArticles
|
||||
.map((article) => ({
|
||||
...article,
|
||||
path: `/news/article/${article.slug}`,
|
||||
thumbnail: article.thumbnail
|
||||
? `/news/article/${article.slug}/thumbnail.webp`
|
||||
: `/news/default.jpg`,
|
||||
title: article.title,
|
||||
summary: article.summary,
|
||||
date: article.date,
|
||||
}))
|
||||
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()),
|
||||
);
|
||||
|
||||
const latestArticles = computed(() => articles.value.slice(0, 3));
|
||||
</script>
|
||||
@@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
import dayjs from "dayjs";
|
||||
|
||||
interface Article {
|
||||
path: string;
|
||||
thumbnail: string;
|
||||
title: string;
|
||||
summary: string;
|
||||
date: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
article: Article;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<nuxt-link
|
||||
:to="`${article.path}/`"
|
||||
class="active:scale-[0.99]! group flex flex-col transition-all ease-in-out hover:brightness-125"
|
||||
>
|
||||
<article class="flex h-full grow flex-col gap-4">
|
||||
<img
|
||||
:src="article.thumbnail"
|
||||
class="aspect-video w-full rounded-xl border-[1px] border-solid border-button-border object-cover"
|
||||
/>
|
||||
<div class="flex grow flex-col gap-2">
|
||||
<h3 class="m-0 text-base leading-tight group-hover:underline">
|
||||
{{ article.title }}
|
||||
</h3>
|
||||
<p v-if="article.summary" class="m-0 text-sm leading-tight">
|
||||
{{ article.summary }}
|
||||
</p>
|
||||
<div class="mt-auto text-sm text-secondary">
|
||||
{{ dayjs(article.date).format("MMMM D, YYYY") }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</nuxt-link>
|
||||
</template>
|
||||
@@ -1211,9 +1211,9 @@ const footerLinks = [
|
||||
label: formatMessage(defineMessage({ id: "layout.footer.about", defaultMessage: "About" })),
|
||||
links: [
|
||||
{
|
||||
href: "https://blog.modrinth.com",
|
||||
href: "/news",
|
||||
label: formatMessage(
|
||||
defineMessage({ id: "layout.footer.about.blog", defaultMessage: "Blog" }),
|
||||
defineMessage({ id: "layout.footer.about.news", defaultMessage: "News" }),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
||||
@@ -383,8 +383,8 @@
|
||||
"layout.footer.about": {
|
||||
"message": "About"
|
||||
},
|
||||
"layout.footer.about.blog": {
|
||||
"message": "Blog"
|
||||
"layout.footer.about.news": {
|
||||
"message": "News"
|
||||
},
|
||||
"layout.footer.about.careers": {
|
||||
"message": "Careers"
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
{{ formatProjectType(project.project_type).toLowerCase() }}. You may choose one from our
|
||||
list or provide a custom license. You may also provide a custom URL to your chosen license;
|
||||
otherwise, the license text will be displayed. See our
|
||||
<a
|
||||
href="https://blog.modrinth.com/licensing-guide/"
|
||||
<nuxt-link
|
||||
to="/news/article/licensing-guide/"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
class="text-link"
|
||||
>
|
||||
licensing guide
|
||||
</a>
|
||||
</nuxt-link>
|
||||
for more information.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import LogoAnimated from "~/components/brand/LogoAnimated.vue";
|
||||
import PrismIcon from "~/assets/images/external/prism.svg?component";
|
||||
import ATLauncher from "~/assets/images/external/atlauncher.svg?component";
|
||||
import CurseForge from "~/assets/images/external/curseforge.svg?component";
|
||||
import LatestNewsRow from "~/components/ui/news/LatestNewsRow.vue";
|
||||
|
||||
import { homePageProjects } from "~/generated/state.json";
|
||||
|
||||
@@ -873,101 +874,8 @@ useSeoMeta({
|
||||
<nuxt-link to="/legal/privacy">Privacy Policy.</nuxt-link>
|
||||
</p>
|
||||
</div>
|
||||
<div class="logo-banner">
|
||||
<svg
|
||||
v-if="$theme.active === 'light'"
|
||||
viewBox="0 0 865 512"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="light-height"
|
||||
>
|
||||
<g clip-path="url(#clip0_419_237)">
|
||||
<rect x="176" width="512" height="512" fill="url(#paint0_linear_419_237)" />
|
||||
<g opacity="0.5">
|
||||
<path
|
||||
d="M176 274.069H219.65C221.89 299.001 228.25 322.42 238.87 345.249C245.4 342.033 251.37 338.016 257.52 334.3C263.76 330.534 270.07 326.908 276.62 323.061C276.21 321.669 275.95 320.216 275.37 318.914C271.05 309.378 268.47 299.251 266.32 289.114C265.03 283.054 264.41 276.743 263.73 270.513C262.89 262.86 262.94 255.257 263.11 247.654C263.26 241.083 264.11 234.482 265.21 227.991C266.88 218.064 269.39 208.308 272.94 198.852C276.79 188.594 281.19 178.588 287.21 169.382C291.19 163.292 294.97 157.021 299.53 151.382C306.3 142.998 313.75 135.214 322.12 128.273C330.05 121.692 338.16 115.421 347.18 110.483C354.15 106.676 361.39 103.341 368.66 100.115C379.13 95.4674 390.24 92.873 401.39 90.4289C410.67 88.4055 430.03 87.3237 438.96 88.6158C438.51 95.9282 436.63 103.05 435.44 110.262C434.26 117.394 432.94 124.496 431.6 132.109C428.15 132.44 424.73 132.7 421.32 133.121C416.25 133.752 411.15 134.263 406.15 135.265C395.4 137.428 385.13 141.044 375.33 145.973C366.85 150.23 358.98 155.398 351.89 161.709C348.8 164.464 345.52 167.048 342.67 170.033C335.77 177.225 329.99 185.279 324.68 193.713C320.48 200.364 317.45 207.536 314.8 214.839C312.05 222.422 310.33 230.315 308.95 238.308C307.43 247.093 307.9 255.898 308.2 264.653C308.48 272.867 310.18 281 312.49 288.934C313.45 292.239 314.44 295.535 315.62 299.481C332.06 289.705 348.08 280.169 364.47 270.422C361.92 263.631 359.46 257.16 357.05 250.669C354.63 244.178 352.26 237.667 349.78 230.926C352.79 227.871 355.71 224.936 358.6 221.971C369.97 210.291 381.46 198.712 392.6 186.821C395.77 183.436 399.36 181.913 403.66 181.062C414.16 178.978 424.63 176.734 435.11 174.541C441.87 173.128 448.62 171.686 455.69 170.193C461.36 177.175 467.08 184.217 472.94 191.439C471.8 192.671 470.85 193.783 469.82 194.815C463 201.656 455.97 208.308 449.41 215.4C446.18 218.896 442.34 220.709 438.01 221.961C433.09 223.383 428.16 224.745 423.25 226.198C422.5 226.418 421.73 226.909 421.19 227.48C416.62 232.298 412.15 237.216 407.55 241.995C405.9 243.697 405.89 245.31 406.67 247.424C408.91 253.474 410.92 259.604 413.12 265.674C413.5 266.716 414.27 267.668 415.04 268.499C419.55 273.377 424.05 278.266 428.73 282.974C429.48 283.725 431.24 284.055 432.33 283.775C438.57 282.182 444.72 280.289 450.94 278.636C453.49 277.955 455.32 276.443 457.01 274.559C460.1 271.094 463.55 267.898 466.27 264.172C469.55 259.684 473.91 257.901 479.09 256.82C483.44 255.908 487.58 254.045 491.83 252.673C496.23 251.25 500.69 249.998 505.07 248.495C507.08 247.804 508.18 248.305 508.99 250.198C512.16 257.671 515.4 265.114 518.76 272.917C515.97 276.342 513.04 279.918 510.13 283.515C505.45 289.304 500.81 295.124 496.12 300.904C492.16 305.782 487.86 310.42 484.26 315.549C481.66 319.255 478.09 320.717 474.16 321.959C462.33 325.716 450.52 329.502 438.69 333.268C431.61 335.522 424.51 337.756 416.91 340.16C415.33 338.648 413.45 337.055 411.81 335.232C407.16 330.053 402.62 324.794 398.03 319.565C395.63 316.831 393.3 314.006 390.79 311.382C388.08 308.557 387.52 308.557 384.41 310.42C377.88 314.337 371.33 318.243 364.82 322.19C356.32 327.328 347.85 332.507 339.09 337.836C341.26 341.482 344.39 344.257 347.49 346.811C353.22 351.539 359.26 355.907 365.37 360.144C376.53 367.867 388.92 372.815 402.07 376.081C409.82 378.004 417.59 379.286 425.6 379.076C426.74 379.046 427.88 379.446 429.02 379.516C430.64 379.617 432.27 379.667 433.88 379.587C435.19 379.526 436.48 379.106 437.79 379.076C442.03 378.966 442.07 378.996 443.29 383.443C446.74 396.014 450.16 408.585 453.58 421.167C453.7 421.597 453.65 422.068 453.7 422.88C449 423.28 444.42 423.781 439.83 424.022C436.17 424.212 432.5 423.961 428.83 424.092C414.81 424.593 401.08 422.469 387.69 418.733C366.28 412.763 346.56 403.216 328.88 389.523C320.7 383.183 313.41 375.95 306.16 368.648C304.89 367.366 303.97 365.743 302.78 364.371C300.52 361.746 299.87 361.526 296.85 363.189C292.49 365.583 288.24 368.167 283.98 370.722C277.72 374.458 271.49 378.234 265.25 382.001C264.56 382.421 263.91 382.902 263.18 383.403C263.7 387.54 267.09 389.654 269.19 392.448C272.55 396.946 276.45 401.113 280.58 404.939C286.77 410.669 293.38 415.938 299.77 421.457C306.94 427.658 314.86 432.756 322.98 437.604C332.25 443.144 341.84 448.092 351.94 451.808C361.7 455.394 371.65 458.54 381.69 461.244C388.49 463.077 395.62 463.678 402.56 465.061C414.21 467.385 425.99 467.224 437.75 466.924C444.49 466.754 451.21 465.622 457.94 465.071C465.69 464.44 473.25 462.767 480.79 461.014C492.41 458.319 503.64 454.453 514.64 449.795C530.77 442.963 545.63 433.968 559.65 423.601C570.63 415.477 580.59 406.061 589.5 395.774C598.25 385.667 606.72 375.209 612.97 363.219C615.56 358.241 618.38 353.382 621.25 348.184C635.52 353.322 649.65 358.411 664.03 363.59C663.75 364.691 663.65 365.663 663.26 366.484C655.92 381.77 647.35 396.285 636.95 409.727C628.93 420.105 620.71 430.292 611.17 439.307C604.8 445.327 598.41 451.358 591.25 456.496C584.53 461.314 578.16 466.653 571.24 471.151C556.34 480.857 540.49 488.721 523.9 495.262C508.29 501.412 492.07 505.198 475Line truncated
|
||||
fill="#05CE45"
|
||||
/>
|
||||
<path
|
||||
d="M688 277.074C687.69 277.615 687.11 278.136 687.09 278.686C686.56 293.612 683.03 308.016 679.73 322.45C675.99 322.05 642.32 309.939 636.41 306.894C637.6 300.173 638.85 293.431 639.97 286.66C641.13 279.648 641.76 272.606 642.1 265.484C642.43 258.563 642.1 251.691 642.02 244.789C641.94 237.858 641.47 231.006 639.48 223.784C625.94 227.39 612.76 230.896 599.27 234.492C599.19 235.964 598.74 237.507 599.09 238.839C600.63 244.749 599.88 250.739 599.99 256.699C600.43 280.079 595.08 302.226 585.83 323.592C580.73 335.372 574.24 346.311 566.66 356.598C559.95 365.713 552.43 374.228 543.81 381.53C534.36 389.543 524.76 397.497 513.41 402.896C508.18 405.39 503.03 408.045 497.83 410.599C497.43 410.799 496.9 410.759 496.49 410.819C494.33 407.514 486.2 378.274 484.59 368.177C533.62 341.532 557.58 300.664 554.95 244.639C548.26 194.314 521.33 159.555 474.14 139.752C476.69 125.278 479.28 110.593 481.96 95.3973C486 96.7796 489.75 97.8414 493.32 99.3439C504.19 103.932 514.89 108.93 524.68 115.541C537.67 124.316 549.44 134.653 559.65 146.473C570.52 159.055 579.39 173.078 585.96 188.434C587.1 191.099 587.3 191.279 589.95 190.578C602.53 187.272 615.11 183.917 628.08 180.481C627.53 178.608 627.18 176.845 626.5 175.232C618.95 157.262 609.28 140.493 597.33 125.107C590.3 116.052 582.71 107.398 574.08 99.8448C561.23 88.6058 547.51 78.599 532.54 70.1948C521.76 64.1446 510.5 59.3665 498.93 55.3798C488.2 51.6836 477.17 48.8788 465.88 46.9756C450.75 44.4313 435.58 43.7201 420.33 44.221C414.75 44.4013 409.21 45.6033 403.63 46.004C394.2 46.6851 385.07 48.979 375.97 51.2128C367.14 53.3764 358.57 56.4516 350.19 60.0276C346.54 61.5903 342.73 62.8324 339.19 64.6053C333.26 67.5804 327.36 70.6455 321.67 74.0713C316.29 77.3068 311.08 80.8628 306.03 84.5991C300.85 88.4255 295.84 92.5124 290.96 96.7195C286.31 100.726 281.67 104.793 277.47 109.261C267.13 120.259 257.6 131.919 250.05 145.061C246.17 151.812 242.21 158.564 238.88 165.596C231.64 180.881 226.13 196.788 222.94 213.466C222.13 217.674 220.91 221.79 220.92 226.148C220.92 227.36 220.13 228.582 219.6 230.084H176C176 229.083 176 228.081 176 227.089C176.32 226.548 176.92 226.008 176.9 225.477C176.77 220.298 178.02 215.33 178.92 210.291C181.03 198.581 183.94 187.072 187.69 175.803C189.88 169.212 192.51 162.771 195.06 156.31C199.14 145.933 204.4 136.146 210.05 126.57C215.44 117.444 221.43 108.74 227.82 100.265C233.72 92.4423 240.04 84.9797 246.83 77.9879C253.05 71.5771 260.16 66.0378 266.65 59.8774C274.64 52.3046 283.78 46.2644 292.92 40.3544C303.06 33.8034 313.58 27.8033 324.82 23.0953C335.82 18.4876 346.77 13.8598 358.24 10.4941C373.31 6.07663 388.68 3.1517 404.23 1.2585C411.77 0.336948 419.45 0.136611 427.06 0.206729C436.84 0.296881 446.65 -0.714826 456.41 1.05816C463.53 2.35034 470.77 2.98141 477.92 4.14337C489.5 6.02654 500.81 9.12177 511.97 12.6778C521.29 15.6428 530.2 19.6796 539.17 23.5661C548.81 27.7432 557.74 33.1222 566.71 38.4312C572.54 41.877 577.86 46.1642 583.55 49.8705C592.62 55.7704 600.49 63.1529 608.47 70.325C615 76.1949 620.72 82.9663 626.72 89.4172C628.86 91.7211 630.91 94.1352 632.73 96.6794C638.01 104.082 643.32 111.474 648.31 119.057C655.9 130.577 662.42 142.737 667.58 155.519C673.71 170.684 679.37 186.06 682.52 202.197C683.75 208.498 685.02 214.799 685.94 221.149C686.6 225.717 686.7 230.365 687.12 234.973C687.16 235.373 687.69 235.724 687.99 236.095V277.084L688 277.074Z"
|
||||
fill="#05CE45"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
<rect y="194" width="865" height="318" fill="url(#paint1_linear_419_237)" />
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="paint0_linear_419_237"
|
||||
x1="432"
|
||||
y1="0"
|
||||
x2="432"
|
||||
y2="512"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#E7FFEF" />
|
||||
<stop offset="0.678759" stop-color="white" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_419_237"
|
||||
x1="432.5"
|
||||
y1="194"
|
||||
x2="432.5"
|
||||
y2="315.861"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#F9FFFB" stop-opacity="0" />
|
||||
<stop offset="1" stop-color="#F9FFFB" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_419_237">
|
||||
<rect x="176" width="512" height="512" rx="256" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<svg v-else viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_127_331)">
|
||||
<rect width="512" height="512" fill="url(#paint0_linear_127_331)" />
|
||||
<g style="mix-blend-mode: overlay">
|
||||
<g opacity="0.5">
|
||||
<path
|
||||
d="M0 274.069H43.65C45.89 299.001 52.25 322.42 62.87 345.249C69.4 342.033 75.37 338.016 81.52 334.3C87.76 330.534 94.07 326.908 100.62 323.061C100.21 321.669 99.95 320.216 99.37 318.914C95.05 309.378 92.47 299.251 90.32 289.114C89.03 283.054 88.41 276.743 87.73 270.513C86.89 262.86 86.94 255.257 87.11 247.654C87.26 241.083 88.11 234.482 89.21 227.991C90.88 218.064 93.39 208.308 96.94 198.852C100.79 188.594 105.19 178.588 111.21 169.382C115.19 163.292 118.97 157.021 123.53 151.382C130.3 142.998 137.75 135.214 146.12 128.273C154.05 121.692 162.16 115.421 171.18 110.483C178.15 106.676 185.39 103.341 192.66 100.115C203.13 95.4674 214.24 92.873 225.39 90.4289C234.67 88.4055 254.03 87.3237 262.96 88.6158C262.51 95.9282 260.63 103.05 259.44 110.262C258.26 117.394 256.94 124.496 255.6 132.109C252.15 132.44 248.73 132.7 245.32 133.121C240.25 133.752 235.15 134.263 230.15 135.265C219.4 137.428 209.13 141.044 199.33 145.973C190.85 150.23 182.98 155.398 175.89 161.709C172.8 164.464 169.52 167.048 166.67 170.033C159.77 177.225 153.99 185.279 148.68 193.713C144.48 200.364 141.45 207.536 138.8 214.839C136.05 222.422 134.33 230.315 132.95 238.308C131.43 247.093 131.9 255.898 132.2 264.653C132.48 272.867 134.18 281 136.49 288.934C137.45 292.239 138.44 295.535 139.62 299.481C156.06 289.705 172.08 280.169 188.47 270.422C185.92 263.631 183.46 257.16 181.05 250.669C178.63 244.178 176.26 237.667 173.78 230.926C176.79 227.871 179.71 224.936 182.6 221.971C193.97 210.291 205.46 198.712 216.6 186.821C219.77 183.436 223.36 181.913 227.66 181.062C238.16 178.978 248.63 176.734 259.11 174.541C265.87 173.128 272.62 171.686 279.69 170.193C285.36 177.175 291.08 184.217 296.94 191.439C295.8 192.671 294.85 193.783 293.82 194.815C287 201.656 279.97 208.308 273.41 215.4C270.18 218.896 266.34 220.709 262.01 221.961C257.09 223.383 252.16 224.745 247.25 226.198C246.5 226.418 245.73 226.909 245.19 227.48C240.62 232.298 236.15 237.216 231.55 241.995C229.9 243.697 229.89 245.31 230.67 247.424C232.91 253.474 234.92 259.604 237.12 265.674C237.5 266.716 238.27 267.668 239.04 268.499C243.55 273.377 248.05 278.266 252.73 282.974C253.48 283.725 255.24 284.055 256.33 283.775C262.57 282.182 268.72 280.289 274.94 278.636C277.49 277.955 279.32 276.443 281.01 274.559C284.1 271.094 287.55 267.898 290.27 264.172C293.55 259.684 297.91 257.901 303.09 256.82C307.44 255.908 311.58 254.045 315.83 252.673C320.23 251.25 324.69 249.998 329.07 248.495C331.08 247.804 332.18 248.305 332.99 250.198C336.16 257.671 339.4 265.114 342.76 272.917C339.97 276.342 337.04 279.919 334.13 283.515C329.45 289.304 324.81 295.124 320.12 300.904C316.16 305.782 311.86 310.42 308.26 315.549C305.66 319.255 302.09 320.717 298.16 321.959C286.33 325.716 274.52 329.502 262.69 333.268C255.61 335.522 248.51 337.756 240.91 340.16C239.33 338.648 237.45 337.055 235.81 335.232C231.16 330.053 226.62 324.794 222.03 319.565C219.63 316.831 217.3 314.006 214.79 311.382C212.08 308.557 211.52 308.557 208.41 310.42C201.88 314.337 195.33 318.243 188.82 322.19C180.32 327.328 171.85 332.507 163.09 337.836C165.26 341.482 168.39 344.257 171.49 346.811C177.22 351.539 183.26 355.907 189.37 360.144C200.53 367.867 212.92 372.815 226.07 376.081C233.82 378.004 241.59 379.286 249.6 379.076C250.74 379.046 251.88 379.446 253.02 379.516C254.64 379.617 256.27 379.667 257.88 379.587C259.19 379.526 260.48 379.106 261.79 379.076C266.03 378.966 266.07 378.996 267.29 383.443C270.74 396.014 274.16 408.585 277.58 421.167C277.7 421.597 277.65 422.068 277.7 422.88C273 423.28 268.42 423.781 263.83 424.022C260.17 424.212 256.5 423.961 252.83 424.092C238.81 424.592 225.08 422.469 211.69 418.733C190.28 412.763 170.56 403.216 152.88 389.523C144.7 383.183 137.41 375.95 130.16 368.648C128.89 367.366 127.97 365.743 126.78 364.371C124.52 361.746 123.87 361.526 120.85 363.189C116.49 365.583 112.24 368.167 107.98 370.722C101.72 374.458 95.49 378.234 89.25 382.001C88.56 382.421 87.91 382.902 87.18 383.403C87.7 387.54 91.09 389.654 93.19 392.448C96.55 396.946 100.45 401.113 104.58 404.939C110.77 410.669 117.38 415.938 123.77 421.457C130.94 427.658 138.86 432.756 146.98 437.604C156.25 443.144 165.84 448.092 175.94 451.808C185.7 455.394 195.65 458.54 205.69 461.244C212.49 463.077 219.62 463.678 226.56 465.061C238.21 467.385 249.99 467.224 261.75 466.924C268.49 466.754 275.21 465.622 281.94 465.071C289.69 464.44 297.25 462.767 304.79 461.014C316.41 458.319 327.64 454.453 338.64 449.795C354.77 442.964 369.63 433.968 383.65 423.601C394.63 415.477 404.59 406.061 413.5 395.774C422.25 385.667 430.72 375.209 436.97 363.219C439.56 358.241 442.38 353.382 445.25 348.184C459.52 353.322 473.65 358.411 488.03 363.59C487.75 364.691 487.65 365.663 487.26 366.484C479.92 381.77 471.35 396.285 460.95 409.727C452.93 420.105 444.71 430.292 435.17 439.307C428.8 445.327 422.41 451.358 415.25 456.496C408.53 461.314 402.16 466.653 395.24 471.151C380.34 480.857 364.49 488.721 347.9 495.262C332.29 501.412 316.07 505.198 299.79 508.774C292.91 510.287 285.7 51Line truncated
|
||||
fill="white"
|
||||
/>
|
||||
<path
|
||||
d="M512 277.074C511.69 277.615 511.11 278.136 511.09 278.686C510.56 293.612 507.03 308.016 503.73 322.45C499.99 322.05 466.32 309.939 460.41 306.894C461.6 300.173 462.85 293.431 463.97 286.66C465.13 279.648 465.76 272.606 466.1 265.484C466.43 258.563 466.1 251.691 466.02 244.789C465.94 237.858 465.47 231.006 463.48 223.784C449.94 227.39 436.76 230.896 423.27 234.492C423.19 235.964 422.74 237.507 423.09 238.839C424.63 244.749 423.88 250.739 423.99 256.699C424.43 280.079 419.08 302.226 409.83 323.592C404.73 335.372 398.24 346.311 390.66 356.598C383.95 365.713 376.43 374.228 367.81 381.53C358.36 389.543 348.76 397.497 337.41 402.896C332.18 405.39 327.03 408.045 321.83 410.599C321.43 410.799 320.9 410.759 320.49 410.819C318.33 407.514 310.2 378.274 308.59 368.177C357.62 341.532 381.58 300.664 378.95 244.639C372.26 194.314 345.33 159.555 298.14 139.752C300.69 125.278 303.28 110.593 305.96 95.3973C310 96.7796 313.75 97.8414 317.32 99.3439C328.19 103.932 338.89 108.93 348.68 115.541C361.67 124.316 373.44 134.654 383.65 146.473C394.52 159.055 403.39 173.078 409.96 188.434C411.1 191.099 411.3 191.279 413.95 190.578C426.53 187.272 439.11 183.917 452.08 180.481C451.53 178.608 451.18 176.845 450.5 175.232C442.95 157.262 433.28 140.493 421.33 125.107C414.3 116.052 406.71 107.398 398.08 99.8448C385.23 88.6058 371.51 78.599 356.54 70.1948C345.76 64.1446 334.5 59.3665 322.93 55.3798C312.2 51.6836 301.17 48.8788 289.88 46.9756C274.75 44.4313 259.58 43.7201 244.33 44.221C238.75 44.4013 233.21 45.6033 227.63 46.004C218.2 46.6851 209.07 48.979 199.97 51.2128C191.14 53.3764 182.57 56.4516 174.19 60.0276C170.54 61.5903 166.73 62.8324 163.19 64.6053C157.26 67.5804 151.36 70.6455 145.67 74.0713C140.29 77.3068 135.08 80.8628 130.03 84.5991C124.85 88.4255 119.84 92.5124 114.96 96.7195C110.31 100.726 105.67 104.793 101.47 109.261C91.13 120.259 81.6 131.919 74.05 145.061C70.17 151.812 66.21 158.564 62.88 165.596C55.64 180.881 50.13 196.788 46.94 213.466C46.13 217.674 44.91 221.79 44.92 226.148C44.92 227.36 44.13 228.582 43.6 230.084H0C0 229.083 0 228.081 0 227.089C0.32 226.548 0.92 226.008 0.9 225.477C0.77 220.298 2.02 215.33 2.92 210.291C5.03 198.581 7.94 187.072 11.69 175.803C13.88 169.212 16.51 162.771 19.06 156.31C23.14 145.933 28.4 136.146 34.05 126.57C39.44 117.444 45.43 108.74 51.82 100.265C57.72 92.4423 64.04 84.9797 70.83 77.9879C77.05 71.5771 84.16 66.0378 90.65 59.8774C98.64 52.3046 107.78 46.2644 116.92 40.3544C127.06 33.8034 137.58 27.8033 148.82 23.0953C159.82 18.4876 170.77 13.8598 182.24 10.4941C197.31 6.07663 212.68 3.1517 228.23 1.2585C235.77 0.336948 243.45 0.136611 251.06 0.206729C260.84 0.296881 270.65 -0.714826 280.41 1.05816C287.53 2.35034 294.77 2.98141 301.92 4.14337C313.5 6.02654 324.81 9.12177 335.97 12.6778C345.29 15.6428 354.2 19.6796 363.17 23.5661C372.81 27.7432 381.74 33.1222 390.71 38.4312C396.54 41.877 401.86 46.1642 407.55 49.8705C416.62 55.7705 424.49 63.1529 432.47 70.325C439 76.1949 444.72 82.9663 450.72 89.4172C452.86 91.7211 454.91 94.1352 456.73 96.6795C462.01 104.082 467.32 111.474 472.31 119.057C479.9 130.577 486.42 142.737 491.58 155.519C497.71 170.684 503.37 186.06 506.52 202.197C507.75 208.498 509.02 214.799 509.94 221.149C510.6 225.717 510.7 230.365 511.12 234.973C511.16 235.373 511.69 235.724 511.99 236.095V277.084L512 277.074Z"
|
||||
fill="white"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="paint0_linear_127_331"
|
||||
x1="256"
|
||||
y1="0"
|
||||
x2="256"
|
||||
y2="512"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#05CE45" />
|
||||
<stop offset="0.678759" stop-color="#051F10" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_127_331">
|
||||
<rect width="512" height="512" rx="256" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<div class="overlay">
|
||||
<h2 class="main-header">
|
||||
Read more about <br />
|
||||
<strong class="main-header-strong">Modrinth</strong>
|
||||
</h2>
|
||||
<a
|
||||
href="https://blog.modrinth.com/?utm_source=website&utm_source=homepage&utm_campaign=newsletter"
|
||||
class="iconified-button brand-button"
|
||||
>
|
||||
Visit the blog
|
||||
</a>
|
||||
</div>
|
||||
<div class="bg-black">
|
||||
<LatestNewsRow />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -419,109 +419,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="logo-banner">
|
||||
<svg
|
||||
v-if="$theme.active === 'light'"
|
||||
viewBox="0 0 865 512"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="light-height modrinth-icon"
|
||||
>
|
||||
<g clip-path="url(#clip0_419_237)">
|
||||
<rect x="176" width="512" height="512" fill="url(#paint0_linear_419_237)" />
|
||||
<g opacity="0.5">
|
||||
<path
|
||||
d="M176 274.069H219.65C221.89 299.001 228.25 322.42 238.87 345.249C245.4 342.033 251.37 338.016 257.52 334.3C263.76 330.534 270.07 326.908 276.62 323.061C276.21 321.669 275.95 320.216 275.37 318.914C271.05 309.378 268.47 299.251 266.32 289.114C265.03 283.054 264.41 276.743 263.73 270.513C262.89 262.86 262.94 255.257 263.11 247.654C263.26 241.083 264.11 234.482 265.21 227.991C266.88 218.064 269.39 208.308 272.94 198.852C276.79 188.594 281.19 178.588 287.21 169.382C291.19 163.292 294.97 157.021 299.53 151.382C306.3 142.998 313.75 135.214 322.12 128.273C330.05 121.692 338.16 115.421 347.18 110.483C354.15 106.676 361.39 103.341 368.66 100.115C379.13 95.4674 390.24 92.873 401.39 90.4289C410.67 88.4055 430.03 87.3237 438.96 88.6158C438.51 95.9282 436.63 103.05 435.44 110.262C434.26 117.394 432.94 124.496 431.6 132.109C428.15 132.44 424.73 132.7 421.32 133.121C416.25 133.752 411.15 134.263 406.15 135.265C395.4 137.428 385.13 141.044 375.33 145.973C366.85 150.23 358.98 155.398 351.89 161.709C348.8 164.464 345.52 167.048 342.67 170.033C335.77 177.225 329.99 185.279 324.68 193.713C320.48 200.364 317.45 207.536 314.8 214.839C312.05 222.422 310.33 230.315 308.95 238.308C307.43 247.093 307.9 255.898 308.2 264.653C308.48 272.867 310.18 281 312.49 288.934C313.45 292.239 314.44 295.535 315.62 299.481C332.06 289.705 348.08 280.169 364.47 270.422C361.92 263.631 359.46 257.16 357.05 250.669C354.63 244.178 352.26 237.667 349.78 230.926C352.79 227.871 355.71 224.936 358.6 221.971C369.97 210.291 381.46 198.712 392.6 186.821C395.77 183.436 399.36 181.913 403.66 181.062C414.16 178.978 424.63 176.734 435.11 174.541C441.87 173.128 448.62 171.686 455.69 170.193C461.36 177.175 467.08 184.217 472.94 191.439C471.8 192.671 470.85 193.783 469.82 194.815C463 201.656 455.97 208.308 449.41 215.4C446.18 218.896 442.34 220.709 438.01 221.961C433.09 223.383 428.16 224.745 423.25 226.198C422.5 226.418 421.73 226.909 421.19 227.48C416.62 232.298 412.15 237.216 407.55 241.995C405.9 243.697 405.89 245.31 406.67 247.424C408.91 253.474 410.92 259.604 413.12 265.674C413.5 266.716 414.27 267.668 415.04 268.499C419.55 273.377 424.05 278.266 428.73 282.974C429.48 283.725 431.24 284.055 432.33 283.775C438.57 282.182 444.72 280.289 450.94 278.636C453.49 277.955 455.32 276.443 457.01 274.559C460.1 271.094 463.55 267.898 466.27 264.172C469.55 259.684 473.91 257.901 479.09 256.82C483.44 255.908 487.58 254.045 491.83 252.673C496.23 251.25 500.69 249.998 505.07 248.495C507.08 247.804 508.18 248.305 508.99 250.198C512.16 257.671 515.4 265.114 518.76 272.917C515.97 276.342 513.04 279.918 510.13 283.515C505.45 289.304 500.81 295.124 496.12 300.904C492.16 305.782 487.86 310.42 484.26 315.549C481.66 319.255 478.09 320.717 474.16 321.959C462.33 325.716 450.52 329.502 438.69 333.268C431.61 335.522 424.51 337.756 416.91 340.16C415.33 338.648 413.45 337.055 411.81 335.232C407.16 330.053 402.62 324.794 398.03 319.565C395.63 316.831 393.3 314.006 390.79 311.382C388.08 308.557 387.52 308.557 384.41 310.42C377.88 314.337 371.33 318.243 364.82 322.19C356.32 327.328 347.85 332.507 339.09 337.836C341.26 341.482 344.39 344.257 347.49 346.811C353.22 351.539 359.26 355.907 365.37 360.144C376.53 367.867 388.92 372.815 402.07 376.081C409.82 378.004 417.59 379.286 425.6 379.076C426.74 379.046 427.88 379.446 429.02 379.516C430.64 379.617 432.27 379.667 433.88 379.587C435.19 379.526 436.48 379.106 437.79 379.076C442.03 378.966 442.07 378.996 443.29 383.443C446.74 396.014 450.16 408.585 453.58 421.167C453.7 421.597 453.65 422.068 453.7 422.88C449 423.28 444.42 423.781 439.83 424.022C436.17 424.212 432.5 423.961 428.83 424.092C414.81 424.593 401.08 422.469 387.69 418.733C366.28 412.763 346.56 403.216 328.88 389.523C320.7 383.183 313.41 375.95 306.16 368.648C304.89 367.366 303.97 365.743 302.78 364.371C300.52 361.746 299.87 361.526 296.85 363.189C292.49 365.583 288.24 368.167 283.98 370.722C277.72 374.458 271.49 378.234 265.25 382.001C264.56 382.421 263.91 382.902 263.18 383.403C263.7 387.54 267.09 389.654 269.19 392.448C272.55 396.946 276.45 401.113 280.58 404.939C286.77 410.669 293.38 415.938 299.77 421.457C306.94 427.658 314.86 432.756 322.98 437.604C332.25 443.144 341.84 448.092 351.94 451.808C361.7 455.394 371.65 458.54 381.69 461.244C388.49 463.077 395.62 463.678 402.56 465.061C414.21 467.385 425.99 467.224 437.75 466.924C444.49 466.754 451.21 465.622 457.94 465.071C465.69 464.44 473.25 462.767 480.79 461.014C492.41 458.319 503.64 454.453 514.64 449.795C530.77 442.963 545.63 433.968 559.65 423.601C570.63 415.477 580.59 406.061 589.5 395.774C598.25 385.667 606.72 375.209 612.97 363.219C615.56 358.241 618.38 353.382 621.25 348.184C635.52 353.322 649.65 358.411 664.03 363.59C663.75 364.691 663.65 365.663 663.26 366.484C655.92 381.77 647.35 396.285 636.95 409.727C628.93 420.105 620.71 430.292 611.17 439.307C604.8 445.327 598.41 451.358 591.25 456.496C584.53 461.314 578.16 466.653 571.24 471.151C556.34 480.857 540.49 488.721 523.9 495.262C508.29 501.412 492.07 505.198 475Line truncated
|
||||
fill="#05CE45"
|
||||
/>
|
||||
<path
|
||||
d="M688 277.074C687.69 277.615 687.11 278.136 687.09 278.686C686.56 293.612 683.03 308.016 679.73 322.45C675.99 322.05 642.32 309.939 636.41 306.894C637.6 300.173 638.85 293.431 639.97 286.66C641.13 279.648 641.76 272.606 642.1 265.484C642.43 258.563 642.1 251.691 642.02 244.789C641.94 237.858 641.47 231.006 639.48 223.784C625.94 227.39 612.76 230.896 599.27 234.492C599.19 235.964 598.74 237.507 599.09 238.839C600.63 244.749 599.88 250.739 599.99 256.699C600.43 280.079 595.08 302.226 585.83 323.592C580.73 335.372 574.24 346.311 566.66 356.598C559.95 365.713 552.43 374.228 543.81 381.53C534.36 389.543 524.76 397.497 513.41 402.896C508.18 405.39 503.03 408.045 497.83 410.599C497.43 410.799 496.9 410.759 496.49 410.819C494.33 407.514 486.2 378.274 484.59 368.177C533.62 341.532 557.58 300.664 554.95 244.639C548.26 194.314 521.33 159.555 474.14 139.752C476.69 125.278 479.28 110.593 481.96 95.3973C486 96.7796 489.75 97.8414 493.32 99.3439C504.19 103.932 514.89 108.93 524.68 115.541C537.67 124.316 549.44 134.653 559.65 146.473C570.52 159.055 579.39 173.078 585.96 188.434C587.1 191.099 587.3 191.279 589.95 190.578C602.53 187.272 615.11 183.917 628.08 180.481C627.53 178.608 627.18 176.845 626.5 175.232C618.95 157.262 609.28 140.493 597.33 125.107C590.3 116.052 582.71 107.398 574.08 99.8448C561.23 88.6058 547.51 78.599 532.54 70.1948C521.76 64.1446 510.5 59.3665 498.93 55.3798C488.2 51.6836 477.17 48.8788 465.88 46.9756C450.75 44.4313 435.58 43.7201 420.33 44.221C414.75 44.4013 409.21 45.6033 403.63 46.004C394.2 46.6851 385.07 48.979 375.97 51.2128C367.14 53.3764 358.57 56.4516 350.19 60.0276C346.54 61.5903 342.73 62.8324 339.19 64.6053C333.26 67.5804 327.36 70.6455 321.67 74.0713C316.29 77.3068 311.08 80.8628 306.03 84.5991C300.85 88.4255 295.84 92.5124 290.96 96.7195C286.31 100.726 281.67 104.793 277.47 109.261C267.13 120.259 257.6 131.919 250.05 145.061C246.17 151.812 242.21 158.564 238.88 165.596C231.64 180.881 226.13 196.788 222.94 213.466C222.13 217.674 220.91 221.79 220.92 226.148C220.92 227.36 220.13 228.582 219.6 230.084H176C176 229.083 176 228.081 176 227.089C176.32 226.548 176.92 226.008 176.9 225.477C176.77 220.298 178.02 215.33 178.92 210.291C181.03 198.581 183.94 187.072 187.69 175.803C189.88 169.212 192.51 162.771 195.06 156.31C199.14 145.933 204.4 136.146 210.05 126.57C215.44 117.444 221.43 108.74 227.82 100.265C233.72 92.4423 240.04 84.9797 246.83 77.9879C253.05 71.5771 260.16 66.0378 266.65 59.8774C274.64 52.3046 283.78 46.2644 292.92 40.3544C303.06 33.8034 313.58 27.8033 324.82 23.0953C335.82 18.4876 346.77 13.8598 358.24 10.4941C373.31 6.07663 388.68 3.1517 404.23 1.2585C411.77 0.336948 419.45 0.136611 427.06 0.206729C436.84 0.296881 446.65 -0.714826 456.41 1.05816C463.53 2.35034 470.77 2.98141 477.92 4.14337C489.5 6.02654 500.81 9.12177 511.97 12.6778C521.29 15.6428 530.2 19.6796 539.17 23.5661C548.81 27.7432 557.74 33.1222 566.71 38.4312C572.54 41.877 577.86 46.1642 583.55 49.8705C592.62 55.7704 600.49 63.1529 608.47 70.325C615 76.1949 620.72 82.9663 626.72 89.4172C628.86 91.7211 630.91 94.1352 632.73 96.6794C638.01 104.082 643.32 111.474 648.31 119.057C655.9 130.577 662.42 142.737 667.58 155.519C673.71 170.684 679.37 186.06 682.52 202.197C683.75 208.498 685.02 214.799 685.94 221.149C686.6 225.717 686.7 230.365 687.12 234.973C687.16 235.373 687.69 235.724 687.99 236.095V277.084L688 277.074Z"
|
||||
fill="#05CE45"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
<rect y="194" width="865" height="318" fill="url(#paint1_linear_419_237)" />
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="paint0_linear_419_237"
|
||||
x1="432"
|
||||
y1="0"
|
||||
x2="432"
|
||||
y2="512"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#E7FFEF" />
|
||||
<stop offset="0.678759" stop-color="white" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_419_237"
|
||||
x1="432.5"
|
||||
y1="194"
|
||||
x2="432.5"
|
||||
y2="315.861"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#F9FFFB" stop-opacity="0" />
|
||||
<stop offset="1" stop-color="#F9FFFB" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_419_237">
|
||||
<rect x="176" width="512" height="512" rx="256" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<svg
|
||||
v-else
|
||||
viewBox="0 0 512 512"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="modrinth-icon"
|
||||
>
|
||||
<g clip-path="url(#clip0_127_331)">
|
||||
<rect width="512" height="512" fill="url(#paint0_linear_127_331)" />
|
||||
<g style="mix-blend-mode: overlay">
|
||||
<g opacity="0.5">
|
||||
<path
|
||||
d="M0 274.069H43.65C45.89 299.001 52.25 322.42 62.87 345.249C69.4 342.033 75.37 338.016 81.52 334.3C87.76 330.534 94.07 326.908 100.62 323.061C100.21 321.669 99.95 320.216 99.37 318.914C95.05 309.378 92.47 299.251 90.32 289.114C89.03 283.054 88.41 276.743 87.73 270.513C86.89 262.86 86.94 255.257 87.11 247.654C87.26 241.083 88.11 234.482 89.21 227.991C90.88 218.064 93.39 208.308 96.94 198.852C100.79 188.594 105.19 178.588 111.21 169.382C115.19 163.292 118.97 157.021 123.53 151.382C130.3 142.998 137.75 135.214 146.12 128.273C154.05 121.692 162.16 115.421 171.18 110.483C178.15 106.676 185.39 103.341 192.66 100.115C203.13 95.4674 214.24 92.873 225.39 90.4289C234.67 88.4055 254.03 87.3237 262.96 88.6158C262.51 95.9282 260.63 103.05 259.44 110.262C258.26 117.394 256.94 124.496 255.6 132.109C252.15 132.44 248.73 132.7 245.32 133.121C240.25 133.752 235.15 134.263 230.15 135.265C219.4 137.428 209.13 141.044 199.33 145.973C190.85 150.23 182.98 155.398 175.89 161.709C172.8 164.464 169.52 167.048 166.67 170.033C159.77 177.225 153.99 185.279 148.68 193.713C144.48 200.364 141.45 207.536 138.8 214.839C136.05 222.422 134.33 230.315 132.95 238.308C131.43 247.093 131.9 255.898 132.2 264.653C132.48 272.867 134.18 281 136.49 288.934C137.45 292.239 138.44 295.535 139.62 299.481C156.06 289.705 172.08 280.169 188.47 270.422C185.92 263.631 183.46 257.16 181.05 250.669C178.63 244.178 176.26 237.667 173.78 230.926C176.79 227.871 179.71 224.936 182.6 221.971C193.97 210.291 205.46 198.712 216.6 186.821C219.77 183.436 223.36 181.913 227.66 181.062C238.16 178.978 248.63 176.734 259.11 174.541C265.87 173.128 272.62 171.686 279.69 170.193C285.36 177.175 291.08 184.217 296.94 191.439C295.8 192.671 294.85 193.783 293.82 194.815C287 201.656 279.97 208.308 273.41 215.4C270.18 218.896 266.34 220.709 262.01 221.961C257.09 223.383 252.16 224.745 247.25 226.198C246.5 226.418 245.73 226.909 245.19 227.48C240.62 232.298 236.15 237.216 231.55 241.995C229.9 243.697 229.89 245.31 230.67 247.424C232.91 253.474 234.92 259.604 237.12 265.674C237.5 266.716 238.27 267.668 239.04 268.499C243.55 273.377 248.05 278.266 252.73 282.974C253.48 283.725 255.24 284.055 256.33 283.775C262.57 282.182 268.72 280.289 274.94 278.636C277.49 277.955 279.32 276.443 281.01 274.559C284.1 271.094 287.55 267.898 290.27 264.172C293.55 259.684 297.91 257.901 303.09 256.82C307.44 255.908 311.58 254.045 315.83 252.673C320.23 251.25 324.69 249.998 329.07 248.495C331.08 247.804 332.18 248.305 332.99 250.198C336.16 257.671 339.4 265.114 342.76 272.917C339.97 276.342 337.04 279.919 334.13 283.515C329.45 289.304 324.81 295.124 320.12 300.904C316.16 305.782 311.86 310.42 308.26 315.549C305.66 319.255 302.09 320.717 298.16 321.959C286.33 325.716 274.52 329.502 262.69 333.268C255.61 335.522 248.51 337.756 240.91 340.16C239.33 338.648 237.45 337.055 235.81 335.232C231.16 330.053 226.62 324.794 222.03 319.565C219.63 316.831 217.3 314.006 214.79 311.382C212.08 308.557 211.52 308.557 208.41 310.42C201.88 314.337 195.33 318.243 188.82 322.19C180.32 327.328 171.85 332.507 163.09 337.836C165.26 341.482 168.39 344.257 171.49 346.811C177.22 351.539 183.26 355.907 189.37 360.144C200.53 367.867 212.92 372.815 226.07 376.081C233.82 378.004 241.59 379.286 249.6 379.076C250.74 379.046 251.88 379.446 253.02 379.516C254.64 379.617 256.27 379.667 257.88 379.587C259.19 379.526 260.48 379.106 261.79 379.076C266.03 378.966 266.07 378.996 267.29 383.443C270.74 396.014 274.16 408.585 277.58 421.167C277.7 421.597 277.65 422.068 277.7 422.88C273 423.28 268.42 423.781 263.83 424.022C260.17 424.212 256.5 423.961 252.83 424.092C238.81 424.592 225.08 422.469 211.69 418.733C190.28 412.763 170.56 403.216 152.88 389.523C144.7 383.183 137.41 375.95 130.16 368.648C128.89 367.366 127.97 365.743 126.78 364.371C124.52 361.746 123.87 361.526 120.85 363.189C116.49 365.583 112.24 368.167 107.98 370.722C101.72 374.458 95.49 378.234 89.25 382.001C88.56 382.421 87.91 382.902 87.18 383.403C87.7 387.54 91.09 389.654 93.19 392.448C96.55 396.946 100.45 401.113 104.58 404.939C110.77 410.669 117.38 415.938 123.77 421.457C130.94 427.658 138.86 432.756 146.98 437.604C156.25 443.144 165.84 448.092 175.94 451.808C185.7 455.394 195.65 458.54 205.69 461.244C212.49 463.077 219.62 463.678 226.56 465.061C238.21 467.385 249.99 467.224 261.75 466.924C268.49 466.754 275.21 465.622 281.94 465.071C289.69 464.44 297.25 462.767 304.79 461.014C316.41 458.319 327.64 454.453 338.64 449.795C354.77 442.964 369.63 433.968 383.65 423.601C394.63 415.477 404.59 406.061 413.5 395.774C422.25 385.667 430.72 375.209 436.97 363.219C439.56 358.241 442.38 353.382 445.25 348.184C459.52 353.322 473.65 358.411 488.03 363.59C487.75 364.691 487.65 365.663 487.26 366.484C479.92 381.77 471.35 396.285 460.95 409.727C452.93 420.105 444.71 430.292 435.17 439.307C428.8 445.327 422.41 451.358 415.25 456.496C408.53 461.314 402.16 466.653 395.24 471.151C380.34 480.857 364.49 488.721 347.9 495.262C332.29 501.412 316.07 505.198 299.79 508.774C292.91 510.287 285.7 51Line truncated
|
||||
fill="white"
|
||||
/>
|
||||
<path
|
||||
d="M512 277.074C511.69 277.615 511.11 278.136 511.09 278.686C510.56 293.612 507.03 308.016 503.73 322.45C499.99 322.05 466.32 309.939 460.41 306.894C461.6 300.173 462.85 293.431 463.97 286.66C465.13 279.648 465.76 272.606 466.1 265.484C466.43 258.563 466.1 251.691 466.02 244.789C465.94 237.858 465.47 231.006 463.48 223.784C449.94 227.39 436.76 230.896 423.27 234.492C423.19 235.964 422.74 237.507 423.09 238.839C424.63 244.749 423.88 250.739 423.99 256.699C424.43 280.079 419.08 302.226 409.83 323.592C404.73 335.372 398.24 346.311 390.66 356.598C383.95 365.713 376.43 374.228 367.81 381.53C358.36 389.543 348.76 397.497 337.41 402.896C332.18 405.39 327.03 408.045 321.83 410.599C321.43 410.799 320.9 410.759 320.49 410.819C318.33 407.514 310.2 378.274 308.59 368.177C357.62 341.532 381.58 300.664 378.95 244.639C372.26 194.314 345.33 159.555 298.14 139.752C300.69 125.278 303.28 110.593 305.96 95.3973C310 96.7796 313.75 97.8414 317.32 99.3439C328.19 103.932 338.89 108.93 348.68 115.541C361.67 124.316 373.44 134.654 383.65 146.473C394.52 159.055 403.39 173.078 409.96 188.434C411.1 191.099 411.3 191.279 413.95 190.578C426.53 187.272 439.11 183.917 452.08 180.481C451.53 178.608 451.18 176.845 450.5 175.232C442.95 157.262 433.28 140.493 421.33 125.107C414.3 116.052 406.71 107.398 398.08 99.8448C385.23 88.6058 371.51 78.599 356.54 70.1948C345.76 64.1446 334.5 59.3665 322.93 55.3798C312.2 51.6836 301.17 48.8788 289.88 46.9756C274.75 44.4313 259.58 43.7201 244.33 44.221C238.75 44.4013 233.21 45.6033 227.63 46.004C218.2 46.6851 209.07 48.979 199.97 51.2128C191.14 53.3764 182.57 56.4516 174.19 60.0276C170.54 61.5903 166.73 62.8324 163.19 64.6053C157.26 67.5804 151.36 70.6455 145.67 74.0713C140.29 77.3068 135.08 80.8628 130.03 84.5991C124.85 88.4255 119.84 92.5124 114.96 96.7195C110.31 100.726 105.67 104.793 101.47 109.261C91.13 120.259 81.6 131.919 74.05 145.061C70.17 151.812 66.21 158.564 62.88 165.596C55.64 180.881 50.13 196.788 46.94 213.466C46.13 217.674 44.91 221.79 44.92 226.148C44.92 227.36 44.13 228.582 43.6 230.084H0C0 229.083 0 228.081 0 227.089C0.32 226.548 0.92 226.008 0.9 225.477C0.77 220.298 2.02 215.33 2.92 210.291C5.03 198.581 7.94 187.072 11.69 175.803C13.88 169.212 16.51 162.771 19.06 156.31C23.14 145.933 28.4 136.146 34.05 126.57C39.44 117.444 45.43 108.74 51.82 100.265C57.72 92.4423 64.04 84.9797 70.83 77.9879C77.05 71.5771 84.16 66.0378 90.65 59.8774C98.64 52.3046 107.78 46.2644 116.92 40.3544C127.06 33.8034 137.58 27.8033 148.82 23.0953C159.82 18.4876 170.77 13.8598 182.24 10.4941C197.31 6.07663 212.68 3.1517 228.23 1.2585C235.77 0.336948 243.45 0.136611 251.06 0.206729C260.84 0.296881 270.65 -0.714826 280.41 1.05816C287.53 2.35034 294.77 2.98141 301.92 4.14337C313.5 6.02654 324.81 9.12177 335.97 12.6778C345.29 15.6428 354.2 19.6796 363.17 23.5661C372.81 27.7432 381.74 33.1222 390.71 38.4312C396.54 41.877 401.86 46.1642 407.55 49.8705C416.62 55.7705 424.49 63.1529 432.47 70.325C439 76.1949 444.72 82.9663 450.72 89.4172C452.86 91.7211 454.91 94.1352 456.73 96.6795C462.01 104.082 467.32 111.474 472.31 119.057C479.9 130.577 486.42 142.737 491.58 155.519C497.71 170.684 503.37 186.06 506.52 202.197C507.75 208.498 509.02 214.799 509.94 221.149C510.6 225.717 510.7 230.365 511.12 234.973C511.16 235.373 511.69 235.724 511.99 236.095V277.084L512 277.074Z"
|
||||
fill="white"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id="paint0_linear_127_331"
|
||||
x1="256"
|
||||
y1="0"
|
||||
x2="256"
|
||||
y2="512"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop stop-color="#05CE45" />
|
||||
<stop offset="0.678759" stop-color="#051F10" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_127_331">
|
||||
<rect width="512" height="512" rx="256" fill="white" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<div class="overlay">
|
||||
<h2 class="main-header">
|
||||
Read more about <br />
|
||||
<strong class="main-header-strong">Modrinth</strong>
|
||||
</h2>
|
||||
<ButtonStyled color="brand">
|
||||
<a
|
||||
href="https://blog.modrinth.com/?utm_source=website&utm_source=homepage&utm_campaign=newsletter"
|
||||
>
|
||||
<NewspaperIcon />
|
||||
Visit the blog
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<div class="bg-black">
|
||||
<LatestNewsRow />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -532,14 +431,15 @@ import {
|
||||
CompassIcon,
|
||||
LogInIcon,
|
||||
DashboardIcon,
|
||||
NewspaperIcon,
|
||||
SearchIcon,
|
||||
CalendarIcon,
|
||||
ModrinthIcon,
|
||||
} from "@modrinth/assets";
|
||||
import { ref } from "vue";
|
||||
import PrismLauncherLogo from "~/assets/images/external/prism.svg?component";
|
||||
import ATLauncherLogo from "~/assets/images/external/atlauncher.svg?component";
|
||||
import ProjectCard from "~/components/ui/ProjectCard.vue";
|
||||
import LatestNewsRow from "~/components/ui/news/LatestNewsRow.vue";
|
||||
|
||||
import { homePageProjects, homePageSearch, homePageNotifs } from "~/generated/state.json";
|
||||
|
||||
|
||||
@@ -122,8 +122,8 @@
|
||||
<h3>Creator Monetization Program data</h3>
|
||||
<p>
|
||||
When you sign up for our
|
||||
<a href="https://blog.modrinth.com/p/creator-monetization-beta">
|
||||
Creator Monetization Program</a
|
||||
<nuxt-link to="/news/article/creator-monetization-beta">
|
||||
Creator Monetization Program</nuxt-link
|
||||
>
|
||||
(the "CMP"), we collect:
|
||||
</p>
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
<script setup lang="ts">
|
||||
import { ButtonStyled } from "@modrinth/ui";
|
||||
import { RssIcon, GitGraphIcon } from "@modrinth/assets";
|
||||
import dayjs from "dayjs";
|
||||
import { articles as rawArticles } from "@modrinth/blog";
|
||||
import { computed } from "vue";
|
||||
import ShareArticleButtons from "~/components/ui/ShareArticleButtons.vue";
|
||||
import NewsletterButton from "~/components/ui/NewsletterButton.vue";
|
||||
|
||||
const config = useRuntimeConfig();
|
||||
const route = useRoute();
|
||||
|
||||
const rawArticle = rawArticles.find((article) => article.slug === route.params.slug);
|
||||
|
||||
if (!rawArticle) {
|
||||
throw createError({
|
||||
fatal: true,
|
||||
statusCode: 404,
|
||||
message: "The requested article could not be found.",
|
||||
});
|
||||
}
|
||||
|
||||
const html = await rawArticle.html();
|
||||
|
||||
const article = computed(() => ({
|
||||
...rawArticle,
|
||||
path: `/news/${rawArticle.slug}`,
|
||||
thumbnail: rawArticle.thumbnail
|
||||
? `/news/article/${rawArticle.slug}/thumbnail.webp`
|
||||
: `/news/default.jpg`,
|
||||
title: rawArticle.title,
|
||||
summary: rawArticle.summary,
|
||||
date: rawArticle.date,
|
||||
html,
|
||||
}));
|
||||
|
||||
const articleTitle = computed(() => article.value.title);
|
||||
const articleUrl = computed(() => `https://modrinth.com/news/article/${route.params.slug}`);
|
||||
|
||||
const thumbnailPath = computed(() =>
|
||||
article.value.thumbnail
|
||||
? `${config.public.siteUrl}${article.value.thumbnail}`
|
||||
: `${config.public.siteUrl}/news/default.jpg`,
|
||||
);
|
||||
|
||||
const dayjsDate = computed(() => dayjs(article.value.date));
|
||||
|
||||
useSeoMeta({
|
||||
title: () => `${articleTitle.value} - Modrinth News`,
|
||||
ogTitle: () => articleTitle.value,
|
||||
description: () => article.value.summary,
|
||||
ogDescription: () => article.value.summary,
|
||||
ogType: "article",
|
||||
ogImage: () => thumbnailPath.value,
|
||||
articlePublishedTime: () => dayjsDate.value.toISOString(),
|
||||
twitterCard: "summary_large_image",
|
||||
twitterImage: () => thumbnailPath.value,
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="page experimental-styles-within py-6">
|
||||
<div
|
||||
class="flex flex-wrap items-center justify-between gap-4 border-0 border-b-[1px] border-solid border-divider px-6 pb-6"
|
||||
>
|
||||
<nuxt-link :to="`/news`">
|
||||
<h1 class="m-0 text-3xl font-extrabold hover:underline">News</h1>
|
||||
</nuxt-link>
|
||||
<div class="flex gap-2">
|
||||
<NewsletterButton />
|
||||
<ButtonStyled circular>
|
||||
<a v-tooltip="`RSS feed`" aria-label="RSS feed" href="/news/feed/rss.xml" target="_blank">
|
||||
<RssIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular icon-only>
|
||||
<a v-tooltip="`Changelog`" href="/news/changelog" aria-label="Changelog">
|
||||
<GitGraphIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
<article class="mt-6 flex flex-col gap-4 px-6">
|
||||
<h2 class="m-0 text-2xl font-extrabold leading-tight sm:text-4xl">{{ article.title }}</h2>
|
||||
<p class="m-0 text-base leading-tight sm:text-lg">{{ article.summary }}</p>
|
||||
<div class="mt-auto text-sm text-secondary sm:text-base">
|
||||
Posted on {{ dayjsDate.format("MMMM D, YYYY") }}
|
||||
</div>
|
||||
<ShareArticleButtons :title="article.title" :url="articleUrl" />
|
||||
<img
|
||||
:src="article.thumbnail"
|
||||
class="aspect-video w-full rounded-xl border-[1px] border-solid border-button-border object-cover sm:rounded-2xl"
|
||||
:alt="article.title"
|
||||
/>
|
||||
<div class="markdown-body" v-html="article.html" />
|
||||
<h3
|
||||
class="mb-0 mt-4 border-0 border-t-[1px] border-solid border-divider pt-4 text-base font-extrabold sm:text-lg"
|
||||
>
|
||||
Share this article
|
||||
</h3>
|
||||
<ShareArticleButtons :title="article.title" :url="articleUrl" />
|
||||
</article>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page {
|
||||
> *:not(.full-width-bg),
|
||||
> .full-width-bg > * {
|
||||
max-width: 56rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.brand-gradient-bg {
|
||||
background: var(--brand-gradient-bg);
|
||||
border-color: var(--brand-gradient-border);
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.page {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
article {
|
||||
gap: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.markdown-body) {
|
||||
h1,
|
||||
h2 {
|
||||
border-bottom: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul > li:not(:last-child) {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
p {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
strong {
|
||||
color: var(--color-contrast);
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.5rem;
|
||||
@media (min-width: 640px) {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.25rem;
|
||||
@media (min-width: 640px) {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.125rem;
|
||||
@media (min-width: 640px) {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1.25rem;
|
||||
font-size: 0.875rem;
|
||||
@media (min-width: 640px) {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-brand);
|
||||
font-weight: 600;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
a {
|
||||
font-weight: 800;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
a {
|
||||
color: var(--color-contrast);
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
border: 1px solid var(--color-button-border);
|
||||
border-radius: var(--radius-md);
|
||||
@media (min-width: 640px) {
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
}
|
||||
|
||||
> img,
|
||||
> :has(img:first-child:last-child) {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow-x: auto;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
table {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,158 @@
|
||||
<script setup lang="ts">
|
||||
import { ButtonStyled } from "@modrinth/ui";
|
||||
import { ChevronRightIcon, RssIcon, GitGraphIcon } from "@modrinth/assets";
|
||||
import dayjs from "dayjs";
|
||||
import { articles as rawArticles } from "@modrinth/blog";
|
||||
import { computed, ref } from "vue";
|
||||
import NewsletterButton from "~/components/ui/NewsletterButton.vue";
|
||||
import NewsArticleCard from "~/components/ui/news/NewsArticleCard.vue";
|
||||
|
||||
const articles = ref(
|
||||
rawArticles
|
||||
.map((article) => ({
|
||||
...article,
|
||||
path: `/news/article/${article.slug}`,
|
||||
thumbnail: article.thumbnail
|
||||
? `/news/article/${article.slug}/thumbnail.webp`
|
||||
: `/news/default.jpg`,
|
||||
title: article.title,
|
||||
summary: article.summary,
|
||||
date: article.date,
|
||||
}))
|
||||
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()),
|
||||
);
|
||||
|
||||
const featuredArticle = computed(() => articles.value?.[0]);
|
||||
const config = useRuntimeConfig();
|
||||
|
||||
useSeoMeta({
|
||||
title: "Modrinth News",
|
||||
ogTitle: "Modrinth News",
|
||||
description: "Keep up-to-date on the latest news from Modrinth.",
|
||||
ogDescription: "Keep up-to-date on the latest news from Modrinth.",
|
||||
ogType: "website",
|
||||
ogImage: () => `${config.public.siteUrl}/news/thumbnail.jpg`,
|
||||
twitterCard: "summary_large_image",
|
||||
twitterImage: () => `${config.public.siteUrl}/news/thumbnail.jpg`,
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="page experimental-styles-within py-6">
|
||||
<div class="flex flex-wrap items-center justify-between gap-4 px-6">
|
||||
<div>
|
||||
<h1 class="m-0 text-3xl font-extrabold">News</h1>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<NewsletterButton />
|
||||
<ButtonStyled circular>
|
||||
<a v-tooltip="`RSS feed`" aria-label="RSS feed" href="/news/feed/rss.xml" target="_blank">
|
||||
<RssIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular icon-only>
|
||||
<a v-tooltip="`Changelog`" href="/news/changelog" aria-label="Changelog">
|
||||
<GitGraphIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="articles && articles.length">
|
||||
<div
|
||||
v-if="featuredArticle"
|
||||
class="full-width-bg brand-gradient-bg mt-6 border-0 border-y-[1px] border-solid py-4"
|
||||
>
|
||||
<nuxt-link
|
||||
:to="`${featuredArticle.path}/`"
|
||||
class="active:scale-[0.99]! group flex transition-all ease-in-out hover:brightness-125"
|
||||
>
|
||||
<article class="featured-article px-6">
|
||||
<div class="featured-image-container">
|
||||
<img
|
||||
:src="featuredArticle.thumbnail"
|
||||
class="aspect-video w-full rounded-2xl border-[1px] border-solid border-button-border object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div class="featured-content">
|
||||
<p class="m-0 font-bold">Featured article</p>
|
||||
<h3 class="m-0 text-3xl leading-tight group-hover:underline">
|
||||
{{ featuredArticle?.title }}
|
||||
</h3>
|
||||
<p class="m-0 text-lg leading-tight">{{ featuredArticle?.summary }}</p>
|
||||
<div class="mt-auto text-secondary">
|
||||
{{ dayjs(featuredArticle?.date).format("MMMM D, YYYY") }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</nuxt-link>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 px-6">
|
||||
<div class="group flex w-fit items-center gap-1">
|
||||
<h2 class="m-0 text-xl font-extrabold">More articles</h2>
|
||||
<ChevronRightIcon
|
||||
v-if="false"
|
||||
class="ml-0 h-6 w-6 transition-all group-hover:ml-1 group-hover:text-brand"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid grid-cols-[repeat(auto-fill,minmax(250px,1fr))] gap-4">
|
||||
<NewsArticleCard v-for="article in articles" :key="article.path" :article="article" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div v-else class="pt-4">Error: Articles could not be loaded.</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page {
|
||||
> *:not(.full-width-bg),
|
||||
> .full-width-bg > * {
|
||||
max-width: 56rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.brand-gradient-bg {
|
||||
background: var(--brand-gradient-bg);
|
||||
border-color: var(--brand-gradient-border);
|
||||
}
|
||||
|
||||
.featured-article {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.featured-image-container {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.featured-content {
|
||||
flex: 1;
|
||||
min-width: 16rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.featured-article {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.featured-image-container {
|
||||
order: 1;
|
||||
}
|
||||
|
||||
.featured-content {
|
||||
order: 2;
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 417 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"articles": [
|
||||
{
|
||||
"title": "A New Chapter for Modrinth Servers",
|
||||
"summary": "Modrinth Servers is now fully operated in-house by the Modrinth Team.",
|
||||
"thumbnail": "https://modrinth.com/news/article/a-new-chapter-for-modrinth-servers/thumbnail.webp",
|
||||
"date": "2025-03-13T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/a-new-chapter-for-modrinth-servers"
|
||||
},
|
||||
{
|
||||
"title": "Host your own server with Modrinth Servers — now in beta",
|
||||
"summary": "Fast, simple, reliable servers directly integrated into Modrinth.",
|
||||
"thumbnail": "https://modrinth.com/news/article/modrinth-servers-beta/thumbnail.webp",
|
||||
"date": "2024-11-03T06:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/modrinth-servers-beta"
|
||||
},
|
||||
{
|
||||
"title": "Quintupling Creator Revenue and Becoming Sustainable",
|
||||
"summary": "Announcing an update to our monetization program, creator split, and more!",
|
||||
"thumbnail": "https://modrinth.com/news/article/becoming-sustainable/thumbnail.webp",
|
||||
"date": "2024-09-13T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/becoming-sustainable"
|
||||
},
|
||||
{
|
||||
"title": "Introducing Modrinth+, a refreshed site look, and a new advertising system!",
|
||||
"summary": "Learn about this major update to Modrinth.",
|
||||
"thumbnail": "https://modrinth.com/news/article/design-refresh/thumbnail.webp",
|
||||
"date": "2024-08-21T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/design-refresh"
|
||||
},
|
||||
{
|
||||
"title": "Malware Discovery Disclosure: \"Windows Borderless\" mod",
|
||||
"summary": "Threat Analysis and Plan of Action",
|
||||
"thumbnail": "https://modrinth.com/news/article/windows-borderless-malware-disclosure/thumbnail.webp",
|
||||
"date": "2024-05-07T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/windows-borderless-malware-disclosure"
|
||||
},
|
||||
{
|
||||
"title": "A Sustainable Path Forward for Modrinth",
|
||||
"summary": "Our capital return and what’s next.",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2024-04-04T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/capital-return"
|
||||
},
|
||||
{
|
||||
"title": "Creator Update: Analytics, Organizations, Collections, and more",
|
||||
"summary": "December may be over, but we’re not done giving gifts.",
|
||||
"thumbnail": "https://modrinth.com/news/article/creator-update/thumbnail.webp",
|
||||
"date": "2024-01-06T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/creator-update"
|
||||
},
|
||||
{
|
||||
"title": "Correcting Inflated Download Counts due to Rate Limiting Issue",
|
||||
"summary": "A rate limiting issue caused inflated download counts in certain countries.",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2023-11-10T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/download-adjustment"
|
||||
},
|
||||
{
|
||||
"title": "Introducing Modrinth App Beta",
|
||||
"summary": "Changing the modded Minecraft landscape with the new Modrinth App, alongside several other major features.",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2023-08-05T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/modrinth-app-beta"
|
||||
},
|
||||
{
|
||||
"title": "(April Fools 2023) Powering up your experience: Modrinth Technologies™️ beta launch!",
|
||||
"summary": "Welcome to the new era of Modrinth. We can't wait to hear your feedback.",
|
||||
"thumbnail": "https://modrinth.com/news/article/new-site-beta/thumbnail.webp",
|
||||
"date": "2023-04-01T08:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/new-site-beta"
|
||||
},
|
||||
{
|
||||
"title": "Accelerating Modrinth's Development",
|
||||
"summary": "Our fundraiser and the future of Modrinth!",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2023-02-01T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/accelerating-development"
|
||||
},
|
||||
{
|
||||
"title": "Two years of Modrinth: a retrospective",
|
||||
"summary": "The history of Modrinth as we know it from December 2020 to December 2022.",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2023-01-07T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/two-years-of-modrinth-history"
|
||||
},
|
||||
{
|
||||
"title": "Modrinth's Anniversary Update",
|
||||
"summary": "Marking two years of Modrinth and discussing our New Year's Resolutions for 2023.",
|
||||
"thumbnail": "https://modrinth.com/news/article/two-years-of-modrinth/thumbnail.webp",
|
||||
"date": "2023-01-07T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/two-years-of-modrinth"
|
||||
},
|
||||
{
|
||||
"title": "Creators can now make money on Modrinth!",
|
||||
"summary": "Yes, you read the title correctly: Modrinth's creator monetization program, also known as payouts, is now in an open beta phase. Read on for more information!",
|
||||
"thumbnail": "https://modrinth.com/news/article/creator-monetization/thumbnail.webp",
|
||||
"date": "2022-11-12T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/creator-monetization"
|
||||
},
|
||||
{
|
||||
"title": "Modrinth's Carbon Ads experiment",
|
||||
"summary": "As a step towards implementing author payouts, we're experimenting with a couple different ad providers to see which one works the best for us.",
|
||||
"thumbnail": "https://modrinth.com/news/article/carbon-ads/thumbnail.webp",
|
||||
"date": "2022-09-08T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/carbon-ads"
|
||||
},
|
||||
{
|
||||
"title": "Plugins and Resource Packs now have a home on Modrinth",
|
||||
"summary": "A small update with a big impact: plugins and resource packs are now available on Modrinth!",
|
||||
"thumbnail": "https://modrinth.com/news/article/plugins-resource-packs/thumbnail.webp",
|
||||
"date": "2022-08-27T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/plugins-resource-packs"
|
||||
},
|
||||
{
|
||||
"title": "Changes to Modrinth Modpacks",
|
||||
"summary": "CurseForge CDN links requested to be removed by the end of the month",
|
||||
"thumbnail": "https://modrinth.com/news/article/modpack-changes/thumbnail.webp",
|
||||
"date": "2022-05-28T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/modpack-changes"
|
||||
},
|
||||
{
|
||||
"title": "Modrinth Modpacks: Now in alpha testing",
|
||||
"summary": "After over a year of development, we're happy to announce that modpack support is now in alpha testing.",
|
||||
"thumbnail": "https://modrinth.com/news/article/modpacks-alpha/thumbnail.webp",
|
||||
"date": "2022-05-15T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/modpacks-alpha"
|
||||
},
|
||||
{
|
||||
"title": "This week in Modrinth development: Filters and Fixes",
|
||||
"summary": "After a great first week since Modrinth launched out of beta, we have continued to improve the user interface based on feedback.",
|
||||
"thumbnail": "https://modrinth.com/news/article/knossos-v2.1.0/thumbnail.webp",
|
||||
"date": "2022-03-09T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/knossos-v2.1.0"
|
||||
},
|
||||
{
|
||||
"title": "Now showing on Modrinth: A new look!",
|
||||
"summary": "After months of relatively quiet development, Modrinth has released many new features and improvements, including a redesign. Read on to learn more!",
|
||||
"thumbnail": "https://modrinth.com/news/article/redesign/thumbnail.webp",
|
||||
"date": "2022-02-27T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/redesign"
|
||||
},
|
||||
{
|
||||
"title": "Beginner's Guide to Licensing your Mods",
|
||||
"summary": "Software licenses; the nitty-gritty legal aspect of software development. They're more important than you think.",
|
||||
"thumbnail": "https://modrinth.com/news/article/licensing-guide/thumbnail.webp",
|
||||
"date": "2021-05-16T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/licensing-guide"
|
||||
},
|
||||
{
|
||||
"title": "Welcome to Modrinth Beta",
|
||||
"summary": "After six months of work, Modrinth enters Beta, helping modders host their mods with ease!",
|
||||
"thumbnail": "https://modrinth.com/news/article/modrinth-beta/thumbnail.webp",
|
||||
"date": "2020-12-01T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/modrinth-beta"
|
||||
},
|
||||
{
|
||||
"title": "What is Modrinth?",
|
||||
"summary": "Hello, we are Modrinth – an open source mods hosting platform. Sounds dry, doesn't it? So let me tell you our story – and I promise, it won't be boring!",
|
||||
"thumbnail": "https://modrinth.com/news/default.jpg",
|
||||
"date": "2020-11-27T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/whats-modrinth"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,223 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
|
||||
<channel>
|
||||
<title><![CDATA[Modrinth News]]></title>
|
||||
<description><![CDATA[Keep up-to-date on the latest news from Modrinth.]]></description>
|
||||
<link>https://modrinth.com/news/</link>
|
||||
<generator>@modrinth/blog</generator>
|
||||
<lastBuildDate>Tue, 01 Jul 2025 01:57:44 GMT</lastBuildDate>
|
||||
<atom:link href="https://modrinth.com/news/feed/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<language><![CDATA[en]]></language>
|
||||
<item>
|
||||
<title><![CDATA[A New Chapter for Modrinth Servers]]></title>
|
||||
<description><![CDATA[Modrinth Servers is now fully operated in-house by the Modrinth Team.]]></description>
|
||||
<link>https://modrinth.com/news/article/a-new-chapter-for-modrinth-servers/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/a-new-chapter-for-modrinth-servers/</guid>
|
||||
<pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Over the few months, Modrinth has seen incredible interest towards our Servers product, and with significant growth, our vision for what Modrinth Servers can be has evolved alongside it. To continue striving towards our goal of providing the best place to get your own Minecraft multiplayer server, we’ve made the decision to bring our server hosting fully in-house.</p><h3>Why We're Making This Change</h3><p>Modrinth has some ambitious goals for the next year. We want to create the best possible way for all Java players play Minecraft, and to host and play their favorite modpacks and custom servers. To achieve this, it’s clear that Modrinth Servers needs to be built and scaled on our own infrastructure.</p><p>By running every aspect of our hosting platform, we gain the flexibility to tailor the experience to our community’s needs—whether that means deeper integrations with Modrinth’s ecosystem, better performance, or more innovative features. This also allows us to invest in the long-term sustainability of Modrinth Servers, ensuring that we can scale seamlessly and avoid running out of available servers stock.</p><h3>A Thank You to Pyro</h3><p>This change is purely a logistical step forward and does not reflect negatively on our partnership with <a href="https://pyro.host" rel="noopener nofollow ugc">Pyro</a>. In fact, Pyro has been an incredible partner in getting Modrinth Servers off the ground and we are very grateful for their collaboration. We completely support Pyro and their future, and we know they’re working on some exciting new products of their own, which we can’t wait to check out!</p><h3>What This Means for You</h3><p>We know you may have questions, and we want to make this transition as smooth as possible.</p><ul><li><p><strong>What part of my server was being run by Pyro?</strong></p><p>Until this point, Pyro has been responsible for the physical server machines that run your Modrinth servers. This means that they have been responsible for the hardware that powers your server, as well as the files and data for them. Moving forward, all of this will exist under Modrinth.</p></li><li><p><strong>What happens to my running servers?</strong></p><p>Your current servers will continue running, and we’ll provide a clear migration path if any action is needed on your part. You can expect a follow up soon, however our goal is to do this with 0 downtime or impact to you if possible.</p></li><li><p><strong>Will anything else change that impacts me?</strong></p><p>Modrinth Servers will remain the same great experience its has been, you likely won’t notice any changes right away. Long term, this means we’ll be able to improve both the stability of servers as well as the features that make managing your server a breeze.</p></li></ul><p>This is an exciting step toward a future where Modrinth is the go-to destination for Java Minecraft players—not just for mods and mod-packs, but for hosting and playing too. We appreciate your support and can’t wait to share more soon!</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Host your own server with Modrinth Servers — now in beta]]></title>
|
||||
<description><![CDATA[Fast, simple, reliable servers directly integrated into Modrinth.]]></description>
|
||||
<link>https://modrinth.com/news/article/modrinth-servers-beta/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/modrinth-servers-beta/</guid>
|
||||
<pubDate>Sun, 03 Nov 2024 06:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>It's been almost <em>four</em> years since we publicly launched Modrinth Beta. Today, we're thrilled to unveil a new beta release of a product we've been eagerly developing: Modrinth Servers.</p><p>Modrinth Servers aims to provide the most seamless experience for running and playing on modded servers. To make this possible, we have partnered with our friends at the server hosting provider <a href="https://pyro.host" rel="noopener nofollow ugc">Pyro</a>. Together, we've developed fully custom software that gives us a unique advantage in scaling, offering new features and integrations that other hosts couldn't dream of.</p><p>For this beta launch, <strong>all servers are US-only</strong>. Please be aware of this if you are looking to purchase a server, as it may not be optimal for users outside of North America.</p><p><img src="./panel.jpg" alt="A screenshot of the fully-custom Modrinth Servers panel integrated into Modrinth"></p><h2>What makes Modrinth Servers unique?</h2><p>We understand that entering the server hosting industry might come as a surprise given the number of existing providers. Here's what sets Modrinth Servers apart:</p><h3>The most modern hardware</h3><p>Your modpack shouldn't have to run slow. All our servers are powered by cutting-edge 2023 Ryzen 7 and Ryzen 9 CPUs with DDR5 memory. From our research, we couldn't find any other Minecraft server host offering such modern hardware at any price point, much less at our affordably low one. This ensures smooth performance even with the most demanding modpacks.</p><h3>Seamless integration with Modrinth content</h3><p>Download mods and modpacks directly from Modrinth without any hassle. This deep integration simplifies server setup and management like never before. With just a few clicks, you can have your server up and running with your favorite mods.</p><h3>Fully custom panel and backend</h3><p>Unlike most other server hosts that rely on off-the-shelf software like Multicraft or Pterodactyl, Modrinth Servers is fully custom-built from front to back. This enables higher performance and much deeper integration than is otherwise possible. Our intuitive interface makes server management a breeze, even for newcomers.</p><h3>Dedicated support</h3><p>Our team is committed to providing exceptional support. Whether you're experiencing technical issues or have questions, we're here to ensure your experience with Modrinth Servers is top-notch.</p><h3>No tricky fees or up-charges</h3><p>Modrinth Servers are offered in a very simple Small, Medium, and Large pricing model, and are priced based on the amount of RAM at $3/GB. Custom URLs, port configuration, off-site backups, and plenty of storage is included in every Modrinth Server purchase at no additional cost.</p><h2>What’s next?</h2><p>As this is a beta release, there's much more to come for Modrinth Servers:</p><ul><li><strong>Global availability:</strong> We plan to expand to more worldwide regions and offer the ability to select a region for your server, ensuring optimal performance no matter where you are.</li><li><strong>Support more types of content:</strong> We'll be adding support for plugin loaders and improving support for data packs, giving you more flexibility and functionality</li><li><strong>Social features:</strong> A friends system to make sharing invites to servers easier, streamlining sharing custom-built modpacks and servers with your community.</li><li><strong>App integration:</strong> Full integration with Modrinth App, including the ability to sync an instance with a server or friends, making collaboration seamless.</li><li><strong>Collaborative management:</strong> Give other Modrinth users access to your server panel so you can manage your server with your team.</li><li><strong>Automatic creator commissions:</strong> Creators will automatically earn a portion of server proceeds when content is installed on a Modrinth Server.</li></ul><p>And so much more... stay tuned!</p><p>We can't wait for you to try out <a href="https://modrinth.gg" rel="noopener nofollow ugc">Modrinth Servers</a> and share your feedback. This is just the beginning, and we're excited to continue improving and expanding our services to better serve the Minecraft community.</p><p><strong>From the teams at Modrinth and Pyro, with &lt;3</strong></p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Quintupling Creator Revenue and Becoming Sustainable]]></title>
|
||||
<description><![CDATA[Announcing an update to our monetization program, creator split, and more!]]></description>
|
||||
<link>https://modrinth.com/news/article/becoming-sustainable/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/becoming-sustainable/</guid>
|
||||
<pubDate>Fri, 13 Sep 2024 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Just over 3 weeks ago, we <a href="/news/article/introducing-modrinth-refreshed-site-look-new-advertising-system" rel="noopener nofollow ugc">launched</a> our new ads powered by <a href="https://www.aditude.com/" rel="noopener nofollow ugc">Aditude</a>. These ads have allowed us to improve creator revenue drastically and become sustainable. Read on for more info!</p><h2>Creator Revenue</h2><p>We’re excited to share we have been able to increase creator revenue by 5-8x what it was before!</p><p>There’s a couple changes to how revenue is distributed out to creators coming with this increase.</p><p>First, revenue is no longer entirely paid out the day they are earned. Previously, we used our own in-house advertisement deal which paid us in advance for the entire month, and we divided that among each day in the month, as the month progressed. With the switch to a more traditional ad network, we are paid on a NET 60 basis, which is fairly standard with ad networks. What this means is that some of your revenue may be pending until the ad network pays us out. Exactly how this works is explained further <a href="legal/cmp-info#pending" rel="noopener nofollow ugc">here</a>.</p><p>Second, the revenue split between Modrinth and Creators has changed. See the next section on sustainability for more on this.</p><p><img src="./abnormally-high-revenue.webp" alt="Some creators have wondered if the new revenue is a bug because it’s gone up so much!"></p><h2>Becoming Sustainable</h2><p>We have updated the Modrinth creator revenue split from 90/10 to 75/25. However, all of the increases listed above are with the new rate included, so while the percentage is lower, the overall revenue is much, much higher.</p><p>While 90% is a more remarkable figure, we changed it in order to ensure we can keep running Modrinth and continue to grow creator revenue without having to worry about losing money on operational costs.</p><p>Through these changes, we are proud to announce Modrinth is now fully sustainable with the new income, with all hosting and operational costs accounted for (including paying our developers, moderators, and support staff!) With the new revenue, users will see reduced support times and we will be able to ship bigger and better updates quicker to you all!</p><p>In an effort to be more transparent with our community than ever before, we are opening up as many of our finances as possible so you all can know how we’re doing and where all the money is going. We’re working to develop a transparency page on our website for you to view all the graphs and numbers, but it wasn’t ready in time for this blog post (for now, you can view our site-wide ad revenue in the API <a href="https://api.modrinth.com/v3/payout/platform_revenue" rel="noopener nofollow ugc">here</a>. We also plan to publish monthly transparency reports with more details about our revenue and expenses, the first of which should be available in early October, so keep an eye out for that.</p><p>For now, we can tell you that creators on Modrinth have earned a total of $160,868 on Modrinth to date (as of September 13, 2024), and here’s a graph of our revenue from the past 30 days:</p><p><img src="./revenue.webp" alt="Modrinth Advertising Revenue (last 30 days)"></p><p>We have a lot of exciting things coming up still, and of course, we greatly appreciate all of your support!</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Introducing Modrinth+, a refreshed site look, and a new advertising system!]]></title>
|
||||
<description><![CDATA[Learn about this major update to Modrinth.]]></description>
|
||||
<link>https://modrinth.com/news/article/design-refresh/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/design-refresh/</guid>
|
||||
<pubDate>Wed, 21 Aug 2024 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>We’ve got a big launch with tons of new stuff today and some important updates about Modrinth. Read on, because we have a lot to cover!</p><h2>Modrinth+</h2><p>First off, we’re launching <a href="/plus" rel="noopener nofollow ugc">Modrinth+</a>, a monthly subscription to help support Modrinth and all of the creators on it directly!</p><p>As a Modrinth+ subscriber, you will get:</p><ul><li>Ad-free browsing on the Modrinth App and website</li><li>An exclusive badge on your profile</li><li>Half of your subscription will go to creators on the site!</li><li>…and more coming soon!</li></ul><p>Pricing starts at $5/month, with discounts depending on what region you live in and if you opt for an annual plan.</p><p>We created Modrinth+ so people could help support Modrinth and creators on the site. We have no plans to paywall any content on Modrinth, and creator features will never cost money. We started Modrinth as a free and open-source platform, and we intend to keep it that way.</p><p>If you do have a few extra dollars a month and want to help support Modrinth, this is a great way to do it!</p><h2>New Site Design: Stage One</h2><p>We’re launching Stage One of Modrinth’s refreshed look to <a href="http://Modrinth.com">Modrinth.com</a> today as well. I want to stress that it’s not fully complete and we’re going to be continuing to refine and finish updating the rest of the pages over the coming weeks. However, it has enough significant usability improvements and new features that we’re launching it broadly now. Please bear with us while we work to complete it promptly!</p><p><img src="./project-page.webp" alt="A screenshot of the new project page"></p><p>Key new features include:</p><ul><li><strong>New download interface</strong> to ensure users get the correct version for the Minecraft version and mod loader they’re using</li><li><strong>New versions list</strong> page built from the ground up with a clean new look and tons of shortcuts to make navigation easier</li><li><strong>New “compatibility” widget</strong> on project pages to see what game versions, platforms, and environments each mod supports at a glance</li><li><strong>Exclusion filters</strong> in search pages</li><li>Improved support for <strong>vertical desktop displays</strong></li></ul><p>We know there will be some minor hiccups and disruptions of workflows, but we’d really appreciate it if you could gently let us know how a particular change has affected you on GitHub <a href="https://github.com/modrinth/code/issues" rel="noopener nofollow ugc">here</a> (or upvote/comment on an existing issue) rather than declaring it’s the end of the world.</p><h2>New Advertising</h2><p>In the last few months, Modrinth has grown an incredible amount. We are now serving over a petabyte of data per month (that is, 1,000 terabytes!) to over 20 million unique IP addresses. It’s almost unfathomable how large we have become since we started from nothing just four years ago.</p><p>However, with growth like this, our costs have also grown drastically—primarily in bandwidth. This, unfortunately, means that we’ve grown well beyond what a single advertiser could support.</p><p>Our original plan was to build out our own ad network (Adrinth) where we could cut out the middleman and provide highly targeted ads without the need for tracking to our gaming-specific audience. Unfortunately, we’ve grown too quickly (a very good problem to have!) and don’t have the immediate resources to do this at this time.</p><p>This leaves us with no choice but to switch to a more traditional programmatic ads setup powered by <a href="https://www.aditude.com/" rel="noopener nofollow ugc">Aditude</a> for the time being. We're not making this decision lightly, and we understand that some folks will not be happy about this change. Rest assured, we've made sure that our new ad network partner meets our requirements, such as compliance with all local regulations such as GDPR and CCPA, and that the new ads remain as unobstructive as possible with this format.</p><p>These changes bring Modrinth back to sustainability as well as conservatively increasing creator revenue by three-fold! Along with paying hosting bills, the new income will also be used for more support staff and paid team members, decreasing ticket time and speeding up our development.</p><p>We also wantLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Malware Discovery Disclosure: "Windows Borderless" mod]]></title>
|
||||
<description><![CDATA[Threat Analysis and Plan of Action]]></description>
|
||||
<link>https://modrinth.com/news/article/windows-borderless-malware-disclosure/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/windows-borderless-malware-disclosure/</guid>
|
||||
<pubDate>Tue, 07 May 2024 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>This is a disclosure of a malicious mod discovered to be hosted on the Modrinth platform. It is important to not panic or jump to conclusions, please carefully read the <a href="#am-i-affected" rel="noopener nofollow ugc">Am I Affected?</a> and <a href="#threat-summary" rel="noopener nofollow ugc">Threat Summary</a> sections.</p><h2>Am I Affected?</h2><p>If you run <strong>Windows</strong> and have downloaded a mod called &quot;<strong>Windows Borderless</strong>&quot; (specific files listed below) between May 4th, 2024 and May 6th, 2024 and have run the game with the mod installed, you are affected.</p><p><strong>IMPORTANT NOTE:</strong> This mod is called, exactly, &quot;Windows Borderless&quot;. There are other mods with similar names on Modrinth, which are <strong><em>NOT</em></strong> malware, such as &quot;Borderless Mining&quot;, &quot;Borderless&quot;, and &quot;Borderless Mining Reworked&quot;.</p><p>If you have not downloaded that mod or do not run Windows, there is no reason to believe you are at any risk. We have released a detection tool <a href="https://github.com/modrinth/oracle/releases/download/v0.0.1/ModrinthMalwareScanner.exe" rel="noopener nofollow ugc">available here</a> which can scan your mods folder for the malicious files if you wish to make sure your instance does not have the mod. The tool is also <a href="https://github.com/modrinth/oracle" rel="noopener nofollow ugc">open-source</a>.</p><p><strong>Download and run the detection tool <a href="https://github.com/modrinth/oracle/releases/download/v0.0.1/ModrinthMalwareScanner.exe" rel="noopener nofollow ugc">here</a>!</strong></p><h3>What do I do if I have used the &quot;Windows Borderless&quot; mod?</h3><p>First, delete the mod entirely from your computer.</p><p>The mod harvested data stored by many Chromium-based projects such as <strong>Google Chrome</strong>, <strong>Discord</strong>, <strong>Microsoft Edge</strong>, and many other browsers such as Opera/Opera GX, Vivaldi, Brave, Firefox and over dozen more. Included in this data may be <strong>account tokens</strong>, <strong>stored passwords</strong>, <strong>banking information</strong>, <strong>addresses</strong>, and more.</p><p>In order to protect yourself, change all of your passwords, and keep an eye out on your bank accounts and credit cards.</p><h2>Threat Summary</h2><p><strong>Exposure level:</strong> Low, ~372 distinct IPs downloaded affected files. One Discord account is alleged to have been stolen due to this.</p><p><strong>Malware severity:</strong> Medium (Discord, browser, and system info stealer, but does not self-replicate)</p><p><strong>Projects affected:</strong></p><table><thead><tr><th>Name</th><th>Project ID</th><th>Former URL</th></tr></thead><tbody><tr><td>Windows Borderless</td><td><code>ZQpQzwWE</code></td><td><code>https://modrinth.com/mod/windowsborderless</code></td></tr></tbody></table><p><strong>Files affected:</strong></p><table><thead><tr><th>Name</th><th>SHA1 Hash</th><th>Version ID</th><th>Download count</th></tr></thead><tbody><tr><td><code>windowedborderless-v0.2 - 1.20.4.jar</code></td><td><code>179b5da318604f97616b5108f305e2a8e4609484</code></td><td><code>NkTbhEmf</code></td><td>116</td></tr><tr><td><code>windowedborderless-v0.3 - 1.20.4.jar</code></td><td><code>1a1c4dcae846866c58cc1abf71fb7f7aa4e7352a</code></td><td><code>v87dk8Q7</code></td><td>15</td></tr><tr><td><code>windowedborderless-v0.4 - 1.20.+.jar</code></td><td><code>e4d55310039b965fce6756da5286b481cfb09946</code></td><td><code>pVfdgPhy</code></td><td>68</td></tr><tr><td><code>windowedborderless-v0.4 - 1.20.+.jar</code></td><td><code>2f47e57a6bedc729359ffaf6f0149876008b5cc3</code></td><td><code>Wt4RjZ49</code></td><td>119</td></tr><tr&gLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[A Sustainable Path Forward for Modrinth]]></title>
|
||||
<description><![CDATA[Our capital return and what’s next.]]></description>
|
||||
<link>https://modrinth.com/news/article/capital-return/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/capital-return/</guid>
|
||||
<pubDate>Thu, 04 Apr 2024 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Over three years ago, I started Modrinth: a new Minecraft modding platform built on community principles, a fully open-source codebase, and a focus on creators.</p><p>What started as a hobby project quickly grew into something much bigger, with over twelve thousand creators and millions of players modding their game with Modrinth! Running Modrinth quickly evolved into a full-time job as we worked to scale the platform, develop new features, and fix bugs.</p><p>As our small project that originated in the Fabric Discord server started to get more and more serious, we decided to seek funding to accelerate growth and keep up with the competition. A year and a half ago, we raised a $1.2 million <a href="/news/article/accelerating-development" rel="noopener nofollow ugc">pre-seed round</a> of investor capital. With the money, we hired full-time developers and part-time community members, some of whom have supported Modrinth since the very beginning. With all this support, we launched creator monetization, authentication, analytics, organizations, collections, the Modrinth App, and support for more project types, growing Modrinth’s user base fifteen-fold!</p><p>But, this rapid growth came at some costs. We let sustainable infrastructure for moderation slip to the back-burner since we could just hire extra moderators to compensate, and more and more of my time as the founder was taken up by things that didn’t make Modrinth better. Bugs and technical debt also gradually infected our codebase as we focused on hyper-growth over maintenance.</p><p>Alongside this, as we looked more into the future, we saw that the venture-backed cycle wouldn’t be the right path for Modrinth. Every investor invests in a company with the expectation of a return on their investment, and while all of our backers have been incredibly supportive, we wanted to be able to work on Modrinth at our own pace and terms. We’ve seen other companies in this space prioritize profits and growth at the expense of the community and creators, and we didn’t want this to happen to Modrinth.</p><p>In short, forgoing the venture route would allow us to build Modrinth independently at a sustainable pace and put our creators, community, open-source nature, and values first, without having to worry about expectations of profit or growth.</p><p>In the end, as of February 1st, 2024, I decided to return $800k in remaining investor capital back to our investors.</p><p>This decision was not an easy one, as without this funding, we would be unable to support the Modrinth team as it previously existed. With this reality, I made the difficult decision to significantly reduce the size of our team to match our goals of sustainable growth.</p><p>I also owe a huge debt of gratitude to everyone on the team affected by all of this–Emma, Wyatt, Maya, Coolbot, Jade, Carter, and Prospector–for everything they have done to help make Modrinth what it is today.</p><p>I want to take a moment to highlight each of their contributions:</p><ul><li>Emma was our lead moderator, social media manager, overall marketing lead, blog post writer, documentation maintainer, Minotaur maintainer, and support manager since joining the team in April 2021</li><li>Wyatt was a full-time backend developer that worked on our authentication system, analytics, collections, organizations, and tons of work on API v3, and more, since joining the team in February 2023</li><li>Maya was our first exclusive moderator hire, and despite a rough onboarding due to a lack of internal documentation and procedures on our side, had reviewed thousands of projects since joining the team in April 2023</li><li>Coolbot was another one of our moderators who especially helped us establish new procedures and improved internal documentation for moderators and had also reviewed thousands of projects since they joined the team in August 2023</li><li>Jade was also a moderator and had reviewed thousands of projects since joining the team in August 2023</li><li>Carter was a full-time frontend developer that worked on OAuth, analytics, collections, organizations, and more, since joining the team in October 2023</li><li>Prospector is our frontend developer and lead designer, who has been with us since September 2020 and has spearheaded multiple site redesigns, developed the frontend for core parts of the site, and more</li></ul><p>This transition was challenging, causing significant delays in project reviews and support ticket resolution, not to mention the stress for the former team. While project review and support times have returned to normal, this was not the experience we wanted for our creators or users to have. I sincerely aLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Creator Update: Analytics, Organizations, Collections, and more]]></title>
|
||||
<description><![CDATA[December may be over, but we’re not done giving gifts.]]></description>
|
||||
<link>https://modrinth.com/news/article/creator-update/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/creator-update/</guid>
|
||||
<pubDate>Sat, 06 Jan 2024 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>December may be over, but that doesn’t mean we’re done giving gifts here at Modrinth. Over the past few months, we’ve been cooking up a whole bunch of new features for everyone to enjoy. Now seems like as good of a time as ever to bring you our Creator Update! Buckle up, because this is a big one.</p><p>The headlining features include:</p><ul><li><strong>Analytics</strong> - Allowing Modrinth creators to see statistics from their projects.</li><li><strong>Organizations</strong> - Better tools to manage shared ownership over multiple projects.</li><li><strong>Collections</strong> - A system for putting together shared sets of projects, similar to Spotify playlists.</li><li><strong>New payouts system</strong> - Updates to the existing Creator Monetization Program to better serve creators around the world.</li><li><strong>New Markdown editor</strong> - Explore a complete reworking of our text editor, making it easy even for those unfamiliar with Markdown.</li><li><strong>OAuth integrations</strong> - Our own implementation of the OAuth specification, allowing external applications to “log in with Modrinth”.</li></ul><h2>Analytics</h2><p>The long-awaited addition of <strong>analytics</strong> is here for creators! You can view analytics over time for your projects, including downloads, page views, and revenue, all in an effortlessly easy-to-use dashboard.</p><p><img src="./project-analytics.jpg" alt="The analytics for a project, showing downloads, page views, and revenue, with a breakdown by country."></p><p><img src="./user-analytics.jpg" alt="A screenshot of the analytics for a user, showing multiple different projects."></p><p>The data for analytics have been collected over the course of many months. In fact, the data for revenue goes all the way back to August 2022, and the data for downloads and views back to February 2023.</p><p>You can view the analytics for an individual project by going to the settings and clicking “Analytics”. You can view analytics for all of your projects in <a href="/dashboard/analytics" rel="noopener nofollow ugc">the analytics dashboard</a>.</p><h2>Organizations</h2><p>Isn’t managing permissions across a bunch of different projects pretty tedious? We sure thought so. Just like on GitHub, you can now create organizations on Modrinth to manage permissions across multiple projects.</p><p><img src="./organizations.jpg" alt="A screenshot of the organizations section of the Modrinth dashboard."></p><p>You can create organizations from the <a href="/dashboard/organizations" rel="noopener nofollow ugc">organizations dashboard</a>. Each organization has a name, a brief summary, and an icon. Just like project members, organization members have a role, a monetization weight, and project permissions, plus permissions for the organization as a whole. Roles, monetization weights, and project permissions can be overridden on a per-project basis.</p><p><img src="./user-orgs.jpg" alt="A screenshot of a user page, with two organizations shown at the very bottom."></p><p>Unlike GitHub, usernames and organization names on Modrinth do not conflict with one another. If you want to have an organization named after yourself, feel free to do so!</p><h2>Collections</h2><p>Just like how Spotify has playlists or how Goodreads has shelves, Modrinth now has collections! Collections are lists of Modrinth projects put together for a common purpose. You can then share these collections with others to view.</p><p><img src="./collections.jpg" alt="A screenshot of the Project Odyssey suite of mods as a collection."></p><p>Your <a href="/collection/following" rel="noopener nofollow ugc">followed projects</a> now make up an automatically generated private collection, which you can access from the <a href="/dashboard/collections" rel="noopener nofollow ugc">“Your collections” section of the dashboard</a>.</p><h3>Wait… aren’t those just modpacks?</h3><p>Not quite! Modpacks are much more complex than collections. Collections are simply lists of projects. Here’s a quick comparison:</p><table><thead><tr><th>Modpacks</th><th>Collections</th></tr></thead><tbody><tr><td>Created through a launcher, such as the <a href="/app&Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Correcting Inflated Download Counts due to Rate Limiting Issue]]></title>
|
||||
<description><![CDATA[A rate limiting issue caused inflated download counts in certain countries.]]></description>
|
||||
<link>https://modrinth.com/news/article/download-adjustment/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/download-adjustment/</guid>
|
||||
<pubDate>Fri, 10 Nov 2023 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>While working on the upcoming analytics update for Modrinth, our team found an issue leading to higher download counts from specific countries. This was caused by an oversight with regards to rate limiting, or in other words, certain files being downloaded over and over again. <strong>Importantly, this did not affect creator payouts</strong>; only our analytics. Approximately 15.4% of Modrinth downloads were found to be over-counted. These duplicates have been identified and are being removed from project download counts and analytics. Read on to learn about the cause of this error and how we fixed it.</p><p>A graph of many Modrinth projects and their download counts, showing a disproportionate amount of downloads from China.</p><p><img src="./country-download-counts.jpg" alt="Notice anything out of the ordinary?"></p><p>More specifically, the issue we encountered is that the download counts from China were through the roof compared to the page view statistics.</p><p><img src="./country-page-views.jpg" alt="A graph of many Modrinth projects and their page views, showing a relatively even distribution across countries."></p><p>Upon further investigation, there was one specific launcher that was repeatedly downloading the same files from Modrinth over and over again within a very short time span.</p><p><img src="./downloads-table.jpg" alt="A table of downloads split into several parts."></p><p>Notice how the downloads in each section (delineated by the bold line) have the same path and were created within the same second.</p><p>This, to say the least, baffled us. We already had code called <a href="https://github.com/modrinth/sisyphus" rel="noopener nofollow ugc">Sisyphus</a> in place to limit the number of downloads that a single source can make over a given span of time. So what gives?</p><p>As it turns out, the issue lay in the underlying technology used by Sisyphus. It uses <a href="https://workers.cloudflare.com/" rel="noopener nofollow ugc">Cloudflare Workers</a> in order to intercept the request each time that a file is requested to be downloaded. Essentially, it acted like so:</p><ol><li>A source (whether this be a launcher, someone clicking the download button on the website, etc.) would request a file from Modrinth.</li><li>Sisyphus would take note of this source’s information, including what it requested, its IP address, and its request headers, and write it to a small database. If this source had not requested this path before, it would add one download to this file. If it had already requested it, it would not.</li><li>Sisyphus would then give the file that the source requested. It gives the file regardless of whether the download counted or not.</li></ol><p>For the most part, this system works fairly well. The main issue comes in step 2: it takes a little while for different Sisyphus instances to sync up with each other. One of the benefits of Cloudflare Workers is that the code is deployed to hundreds of different servers around the world. When multiple requests come in at the same time, they can get routed to different servers in order to allow each request to be handled faster. Cloudflare Workers, however, takes <a href="https://developers.cloudflare.com/kv/concepts/how-kv-works/#consistency" rel="noopener nofollow ugc">up to 60 seconds</a> for each server’s information to sync up with each other. A server in Australia might know that a given source has already downloaded something, but a server in Turkey might not. As a result, multiple downloads from the same source might all get counted if they are handled by different servers.</p><p>In order to fix this, we entirely rewrote Sisyphus. It still uses Cloudflare Workers, but all of the processing of step 2 has been offloaded to the main Modrinth backend. This not only speeds up downloads (even if only briefly), but also makes download counts more reliable. Over the past few days, we've already implemented the necessary adjustments. Our observations have shown that the results are significantly more consistent in their accuracy. Instead of having strange spikes in activity, the graph of new downloads now follows the expected pattern.</p><p><img src="./new-sisyphus.jpg" alt="A graph that is split up into two parts: on the left, a spiky graph with the text &quot;old sisyphus&quot;. On the right, a graph with consistent dips and peaks."></p><p>Notice the spikes on the left? Compare that to the silky-smooth sinusoidal satisfaction on the right!</p><p>To reiteraLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Introducing Modrinth App Beta]]></title>
|
||||
<description><![CDATA[Changing the modded Minecraft landscape with the new Modrinth App, alongside several other major features.]]></description>
|
||||
<link>https://modrinth.com/news/article/modrinth-app-beta/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/modrinth-app-beta/</guid>
|
||||
<pubDate>Sat, 05 Aug 2023 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>The past few months have been a bit quiet on our part, but that doesn’t mean we haven’t been working on anything. In fact, this is quite possibly our biggest update yet, bringing the much-anticipated Modrinth App to general availability, alongside several other major features. Let’s get right into it!</p><h2>Modrinth App Beta</h2><p>Most of our time has been spent working on <a href="/app" rel="noopener nofollow ugc">Modrinth App</a>. This launcher integrates tightly with the website, bringing you the same bank of mods, modpacks, data packs, shaders, and resource packs already available for download on Modrinth.</p><p>Alongside that, there are a wealth of other features for you to find, including:</p><ul><li>Full support for vanilla, Forge, Fabric, and Quilt</li><li>Full support for Windows, macOS, and Linux</li><li>Modrinth modpack importing, either through the website or through a .mrpack file</li><li>Modrinth modpack exporting to the .mrpack format to upload to the website or share with friends</li><li>Importing of instances from a variety of different launchers, including MultiMC, GDLauncher, ATLauncher, CurseForge, and Prism Launcher</li><li>The ability to update, add, and remove individual mods in a modpack</li><li>The ability to run different modded instances in parallel</li><li>The ability to view and share current and historical logs</li><li>An auto-updater to ensure the app is always up-to-date</li><li>An interactive tutorial to show you through the core features of the app</li><li>Performance through the roof, backed by Rust and Tauri (not Electron!)</li><li>Fully open-source under the GNU GPLv3 license</li></ul><p>More features will, of course, be coming in the future. This is being considered a <strong>beta release</strong>. Nonetheless, we’re still very proud of what we’ve already created, and we’re pleased to say that it’s available for download on our website <strong>right now</strong> at <a href="/app" rel="noopener nofollow ugc">https://modrinth.app</a>. Check it out, play around with it, and have fun!</p><h2>Authentication, scoped tokens, and security</h2><p>The second major thing we’re releasing today is a wide range of changes to our authentication system. Security is a top concern at Modrinth, especially following recent events in the modded Minecraft community when several individuals were compromised due to <a href="https://github.com/trigram-mrp/fractureiser/tree/main#readme" rel="noopener nofollow ugc">a virus</a>. While Modrinth was not affected directly by this attack, it provided a harrowing reminder of what we’re working with. That’s why we’re pleased to announce three major features today that will strengthen Modrinth’s security significantly: in-house authentication, two-factor authentication, and scoped personal access tokens.</p><h3>In-house authentication and two-factor authentication</h3><p><img src="./auth.jpg" alt="A screenshot of the new Modrinth sign-in page, showing options to sign in with Discord, GitHub, Microsoft, Google, Steam, GitLab, or with an email and password."></p><p>Until today, Modrinth has always used GitHub accounts exclusively for authentication. That changes now. Starting today, you can now connect your Discord, Microsoft, Google, Steam, and/or GitLab accounts to your Modrinth account. You may also forgo all six of those options and elect to use a good ol’ fashioned email and password. No problems with that! (If you’re curious, we store passwords hashed with the Argon2id method, meaning we couldn't read them even if we wanted to.)</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[(April Fools 2023) Powering up your experience: Modrinth Technologies™️ beta launch!]]></title>
|
||||
<description><![CDATA[Welcome to the new era of Modrinth. We can't wait to hear your feedback.]]></description>
|
||||
<link>https://modrinth.com/news/article/new-site-beta/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/new-site-beta/</guid>
|
||||
<pubDate>Sat, 01 Apr 2023 08:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p><strong>Update 04/02: Due to a number of (ridiculous) complaints we received such as “not being able to use the site on mobile” and “the ads are a bit much”, we have decided to halt the rollout of the beta site. Happy April 1st, everyone.</strong></p><hr><p>OwO hewwo evewyone! I'm super exdited to announth that Modwinth is getting a bwand new update! WOOHOO! But, befowe I dwelve into the detaiws, I want to apologize in advance because my grammar and spwelling might not be the best (teehee). Anyway, this new update is going to be sow awesome and is going to make Modwinth the best modding website evew!</p><p>But first, a quick message to all of our mobile users: We don't cawe about you anymore! <em>insert evil laughter here</em> We've decided to focus all of our efforts on desktop users, so we won't be supporting mobile devices anymore. If you want to use Modwinth, you'll have to buy a desktop or laptop computer! (LOL)</p><p>And that's not aww, we've also added a bunch mowe ads! Because, wet's face it, who doesn't wove ads? Am I wight? (hehe) We've added ads that will pop up evewy five seconds, so you won't miss them. And to make suwe you don't get bowed of seeing the same ad over and over again, we've made suwe to wotate them frequently. You'we welcome! UwU</p><p>Oh, and did I mention the nyew wayout and design? We've made it weally cool! YAY! We wanted to make suwe that UwU aww feel a sense of nyostalgia and weminisce about the good owd days of the intewnet. Wemembew those days when websites wooked wike they wewe made by a 5-yeaw-owd? Well, we've bwought that back! (WINKY WINK)</p><p>The Fitneshgwam Pacew Test is a multistage aewobic capabiwity test that pwogwessively gets mowe difficult as it continyues. The 20 metew pacer test will begin in 30 seconds. Nyya~ Meowmeow! Win the pacer test you must weach the othew end befowe the beep. Each time you hear the beep meow, uwu wun nyya to the othew end nya. The wun nya must be in wine with the beep. Meowmeow! The eawwier nya you wun, the mowe time you have to westa nya. If you faiw to weach the othew end befowe the beep nya meow, the test will end. So twy youw best and Gud wuck!</p><p>In suwummawy, we'we weally excited about the nyew changes and we hope UwU awe too! Modwinth is no wonger a pwace for everyone, but wather, for deskto-p users onwy. We've also added mowe ads than evew befowe and made suwe to make the wayout and design as tewwible as possibwe!</p><p>Enjoy! UwU</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Accelerating Modrinth's Development]]></title>
|
||||
<description><![CDATA[Our fundraiser and the future of Modrinth!]]></description>
|
||||
<link>https://modrinth.com/news/article/accelerating-development/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/accelerating-development/</guid>
|
||||
<pubDate>Wed, 01 Feb 2023 20:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p><strong>Update: On <a href="/news/article/capital-return" rel="noopener nofollow ugc">April 4, 2024</a> we announced that we had returned the remaining $800k in investor capital back to our investors to take a different path. <a href="/news/article/capital-return" rel="noopener nofollow ugc">Read that announcement here</a>. This article remains here for archival purposes.</strong></p><hr><p>There are over 3 billion gamers worldwide, but only a small fraction ever go further and mod the games they play. Modrinth is here to bring modding to every player on the planet—all the while allowing mod creators to make a living off of it.</p><p>Since our founding in 2020 and up until a few months ago, Modrinth has been a purely volunteer project. In the past couple months, the Modrinth team has been more productive than ever. We've released the <a href="../two-years-of-modrinth" rel="noopener nofollow ugc">Anniversary Update</a>, we're actively working on the launcher once more, and we're laying out plans for how to multiply Modrinth creator payouts.</p><p>The vision we have for the future of Modrinth is great, and right alongside that is the need for an amazing team to build out this vision. That's why we <a href="https://x.com/modrinth/status/1615416957905342472" rel="noopener nofollow ugc">recently announced</a> that <a href="https://careers.modrinth.com" rel="noopener nofollow ugc">we're hiring</a>—we've already come so far on just volunteer work, but for Modrinth to be sustainable and for its growth to be sustainable, we need to pick up the pace.</p><p>That's why we're excited to announce that we've raised a pre-seed round of funding led by <a href="https://www.makersfund.com/" rel="noopener nofollow ugc">Makers Fund</a>, with investors including <a href="https://x.com/ryanmjohnson" rel="noopener nofollow ugc">Ryan Johnson</a>, <a href="https://x.com/sthenc" rel="noopener nofollow ugc">Stephen Cole</a>, <a href="https://x.com/PimDeWitte" rel="noopener nofollow ugc">Pim de Witte</a>, <a href="https://www.linkedin.com/in/leechris1/" rel="noopener nofollow ugc">Chris Lee</a>, and <a href="https://x.com/andreas" rel="noopener nofollow ugc">Andreas Thorstensson</a> to accelerate development and expand to new horizons for Modrinth.</p><h2>What's next?</h2><p>We're thrilled to keep on building and iterating on Modrinth over the next few years. Here's a look into what we have in store over the next few months for Modrinth:</p><ul><li>A feature-packed launcher</li><li>Creator organizations (like GitHub), wikis, graphs (with playtime, views, downloads, etc)</li><li>More creator payouts, through the growth of Adrinth</li><li>Discovery/recommendation of mods (especially up-and-coming content)</li><li>Comments (with built-in moderation and spam protection)</li><li>[Redacted]</li></ul><p>Support for new games!</p><p>We are excited that we are able to build a product that will manage to grow us to sustainability and create the best modding experience for creators and users. Being able to pay ourselves and bring on new people is a big step in making that happen. There is still a lot to do, so let's get to it!</p><h2>Q&amp;A:</h2><p>We know there might be some concerns so we included a short Q&amp;A section below for some common ones. Feel free to ask in our <a href="https://discord.modrinth.com" rel="noopener nofollow ugc">Discord</a> if you have any more questions!</p><h3>Why does Modrinth need funding?</h3><p>Our main expense is and will continue to be salaries. The labor cost has always been the main bottleneck for Modrinth. Having paid employees will allow us to develop Modrinth faster, bringing Modrinth to a point of sustainability and growing the platform. For example, we're planning to release our launcher this year, and eventually we're hoping to expand into more games. Those won't be possible without having paid employees.</p><h3>Is Modrinth still community-first?</h3><p>We started and always will have the goal of creating a community-oriented, open-source modding platform. Simply put, there isn't any reason for us not to be. It's clear that the previous impersonal, corporate approaches to video game modding have not worked, andLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Two years of Modrinth: a retrospective]]></title>
|
||||
<description><![CDATA[The history of Modrinth as we know it from December 2020 to December 2022.]]></description>
|
||||
<link>https://modrinth.com/news/article/two-years-of-modrinth-history/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/two-years-of-modrinth-history/</guid>
|
||||
<pubDate>Sat, 07 Jan 2023 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Let's rewind a bit and take a look at the past two years of Modrinth's history. We've come so far from our pre-beta HexFabric days to today. A good portion of our pre-beta history can be found in the <a href="../what-is-modrinth" rel="noopener nofollow ugc">What is Modrinth</a> blog post, but Modrinth obviously is not the same platform it was two years ago.</p><h2>December 2020: Modrinth Beta begins</h2><p><img src="../modrinth-beta/new-design.jpg" alt="Modrinth's brand new design, rolling out with the launch of Beta"></p><blockquote><p>Modrinth's brand new design, rolling out with the launch of Beta</p></blockquote><p>December was the release of the initial <a href="../modrinth-beta" rel="noopener nofollow ugc">Modrinth Beta</a>, bringing a completely different interface and the ability for mods to be created for the first time. This interface has since been completely discarded, but this is what Modrinth looked like for well over a year. It's hard to believe!</p><p>December also brought the introduction of the <a href="https://github.com/modrinth/minotaur" rel="noopener nofollow ugc">Minotaur</a> Gradle plugin for the first time for upload automation. Minotaur today also looks nothing like it did when it was introduced, but it still accomplishes the same exact thing.</p><h2>January 2021: Improvements to mod uploading</h2><p>An announcement in mid-January brought several essential additions and improvements to Modrinth which we consider commonplace today. Among these were:</p><ul><li>A separate version creation page</li><li>The ability to edit and delete existing versions</li><li>The ability to delete existing mods and users</li></ul><p>January also brought the introduction of Google AdSense onto Modrinth. The eventual results, including our switch after to EthicalAds, solidified Modrinth's stance that ads should be unobtrusive and generally friendly to users.</p><h2>February-March 2021: Follows, reports, notifications, oh my!</h2><p>March brought the first introduction of the abilities to follow and report projects, as well as the automatic featuring of some versions depending on loader and Minecraft version. These systems have largely remained unchanged since their introduction, though the notification system will likely be getting a refresh come 2023.</p><h2>April-December 2021: Season of silence</h2><p>After follows, reports, and all that jazz, Modrinth largely went silent for a good while. This time period had some of the largest growth Modrinth had ever seen, and yet it seemed Modrinth's development had ground to a halt. Modrinth Team members were dropping like flies until there was a point where there was a single person on the team. What happened?</p><p>For various reasons, whether it be lack of free time or a lack of interest in Minecraft in general, people ended up leaving to pursue other things. It's not quite as apocalyptic or barren as these descriptions make it seem, but it's more fun to describe it like this.</p><p>Picking up the remnants from what others had left behind, one man was destined to continue developing for Modrinth. The one who began the whole operation in the first place, Geometrically, stood up and began developing. Thus came the development of project types, gallery images, API v2, and modpacks.</p><h2>January 2022: API v2 introduction</h2><p>Right around the corner came 2022. Perchance this would be the time for the silence to be broken? Indeed, the world would be able to hear about all that was brewing over the past few months.</p><p>Of course, this wasn't all introduced at once—it was a gradual rollout over several months. First was the introduction of v2 of Modrinth's API, allowing many breaking changes to occur, including namely the renaming of <em>mods</em> to <em>projects</em>. Wait, why was this necessary?</p><p>Up until this point, Modrinth only hosted mods. Project types, as we call them, allow projects to be given the designation of something other than <em>mod</em>; for example, <em>modpack</em> or <em>resourcepack</em>, like we have today. This simple field, alongside all of the infrastructure which was needed to support it, was the first step to allow modpacks on Modrinth.</p><h2>February 2022: Redesign</h2><p>Remember the interface introduced in December 2020? Let's scrap it! Actually, it wasn't entirely scrapped, but it got a treatment similar to the <a href="Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Modrinth's Anniversary Update]]></title>
|
||||
<description><![CDATA[Marking two years of Modrinth and discussing our New Year's Resolutions for 2023.]]></description>
|
||||
<link>https://modrinth.com/news/article/two-years-of-modrinth/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/two-years-of-modrinth/</guid>
|
||||
<pubDate>Sat, 07 Jan 2023 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Modrinth initially <a href="../modrinth-beta" rel="noopener nofollow ugc">went into beta</a> on November 30th, 2020. Just over a month ago was November 30th, 2022, marking <strong>two years</strong> since Modrinth was generally available as a platform for everyone to use. Today, we're proud to announce the Anniversary Update, celebrating both two years of Modrinth as well as the coming of the new year, and we'll be discussing our New Year's Resolutions for 2023.</p><p>Before you read this post, though, we recommend taking a look at <a href="../two-years-of-modrinth-history" rel="noopener nofollow ugc">our retrospective on Modrinth's history through 2020—2022</a>. It just wouldn't be right to take a look at the present and the future without also taking a look at our past, seeing how far we've come from our humble beginnings.</p><p>With that out of the way, this post primarily serves to announce a few of the smaller features we've been working on after the release of creator monetization. We've bundled these all together as the <strong>Anniversary Update</strong>.</p><p>Looking just at what's already done is boring, though, so we'll also be looking at what's yet to come. Modrinth's future is even brighter than any of us can imagine, so we'll be focusing on what we're gonna do in order to get to that bright future. If you've ever made <strong>New Year's Resolutions</strong>, we're going to briefly discuss our resolutions for 2023.</p><p>Without further adieu, let's get right into what's new with this new year!</p><h2>Shader packs and data packs</h2><p>The long-awaited arrival of shader packs and data packs is now here on Modrinth!</p><p>Shader packs can be viewed in the <a href="/shaders" rel="noopener nofollow ugc">shaders tab</a>. This includes shaders that support <a href="/mod/iris" rel="noopener nofollow ugc">Iris</a>, <a href="/mod/canvas" rel="noopener nofollow ugc">Canvas</a>, and OptiFine, as well as vanilla core shaders. (Even though they're installed via the resource pack system, we have decided to put Canvas and core shaders in shader packs since most users will not search in resource packs for shader packs, even if that's how they're installed.)</p><p>Data packs can be found in the <a href="/datapacks" rel="noopener nofollow ugc">data packs tab</a>. These are implemented similarly to plugins, in that projects with a mod version can also upload a data pack version (and vice versa). Additionally, data pack authors can choose to have their data packs packaged as a mod using the handy-dandy button on the site.</p><p>Data packs can optionally upload a corresponding resource pack as a separate file. We discourage bundling data files and asset files in the same zip file.</p><h2>New landing page</h2><p>The <a href="/" rel="noopener nofollow ugc">homepage</a> has been completely remade, featuring a scrolling list of random projects from Modrinth. Feel free to use this to discover new projects—just make sure you refresh occasionally, because they loop after a little while until you refresh!</p><p><img src="./landing-page.jpg" alt="A screenshot of the new homepage, with a maze background and projects scrolling across the bottom. Bold across the front is &quot;The place for Minecraft mods&quot;."></p><h2>Project overhaul for creators</h2><p>We're continuing to bring expansions to the creator dashboard introduced with monetization. The new <strong>Projects</strong> tab allows you to view all of your projects in a table and quickly access their information and settings.</p><p><a href="/dashboard/projects" rel="noopener nofollow ugc"><img src="./projects-dashboard.jpg" alt="The new Modrinth project dashboard"></a></p><p>The same page also introduces the ability to bulk-edit the external resource links without having to edit each page individually. For example, if your Discord invite expires, you used to have to edit each of your projects individually to add it back. Now you can just select the projects you want to edit the links for and edit them all at the same time!</p><p><img src="./bulk-edit.jpg" alt="A modal with several input fields for external resource links, listing multiple projects the input changes will be applied to."></p><p>Even better Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Creators can now make money on Modrinth!]]></title>
|
||||
<description><![CDATA[Yes, you read the title correctly: Modrinth's creator monetization program, also known as payouts, is now in an open beta phase. Read on for more information!]]></description>
|
||||
<link>https://modrinth.com/news/article/creator-monetization/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/creator-monetization/</guid>
|
||||
<pubDate>Sat, 12 Nov 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Yes, you read the title correctly: Modrinth's Creator Monetization Program, also known as payouts, is now in an open beta phase. All of the money that project owners have earned since August 1st is available to claim <strong>right now</strong>!</p><p>This includes even projects other than mods! Modpacks, plugins, and resource packs also generate payouts for creators to claim.</p><p>Alongside this, the frontend also got a facelift across the entire site, most notably on the settings, notifications, and user profile pages.</p><h2>Motivation</h2><p>Since the start, Modrinth has been a platform created by Minecraft content creators for Minecraft content creators. Allowing creators to earn a bit of money for their hard work and dedication to their content has been a goal since we started, and we are so incredibly ecstatic to finally be able to release this for everyone.</p><p>Whether it's used for buying coffee, paying for server costs, or to get that luxury pair of socks, we hope that creators will be able to use their payouts on whatever keeps them running. We want to encourage creators to keep making content for everyone to enjoy, with the hope that everyone will eventually be able to call Modrinth their go-to destination for Minecraft modded content.</p><h2>How it works</h2><p>For every project uploaded to Modrinth, we keep track of its page views and downloads through an internal system we call <a href="https://github.com/modrinth/ariadne" rel="noopener nofollow ugc">ariadne</a>. Through our payouts algorithm (<a href="https://github.com/modrinth/labrinth/blob/master/src/routes/admin.rs#L95" rel="noopener nofollow ugc">source code</a>), we distribute 100% of ad revenue earned from creator pages to the creators behind these projects. Project owners can decide how to split it (or how not to split it) between their team members.</p><p>Modpacks are a bit different, with revenue split 80% to the Modrinth dependencies on the pack and 20% to the modpack author. This split is subject to change and will be evaluated periodically to ensure the split is reasonably fair.</p><p>After taking the search pages into account, around 10% of the site's ad revenue ends up going to us, mainly to cover hosting and personnel expenses, and 90% to creators.</p><p>While payouts will be small at first, we're working on improving our ads system to better fund the program. We've also got big projects coming soon to continue our trajectory of making the monetization program and the site better!</p><h2>How do I earn money?</h2><p>When a project of yours on Modrinth gets approved, you are automatically enrolled into the program. You will start to incur a balance, which you can view from the <a href="https://modrinth.com/dashboard">Monetization dashboard</a>. You can claim your first payout via PayPal or Venmo as soon as you enter your credentials and have the minimum balance of 0.26 USD.</p><p>Even though the minimum is low, you will want to wait some time to allow your balance to build up before claiming. Each payment processor has its own fees which depend upon whether you're within the United States, which are detailed on the dashboard's <a href="https://modrinth.com/dashboard/revenue">revenue tab</a>.</p><p>Once you request a transfer, you may have to confirm the transfer via email if you don't already have a PayPal account. If you do not confirm using the link in the email within 30 days, or the transfer fails for whatever reason, the amount requested will be returned to your Modrinth balance, though the processor's fees may already have been deducted by that point.</p><h3>For residents outside the United States</h3><p>Since Modrinth is a US-based company, all amounts are stored, displayed, and paid out in US dollars. PayPal will convert the amount to your local currency once you begin the process of transferring from your Modrinth balance to your PayPal account.</p><p>We're aware of some extenuating circumstances for creators living in areas affected by geopolitical conflict. As such, we are looking into alternative ways to allow payouts to continue in these regions.</p><p>At the moment, there are no mechanisms in place to make your Modrinth balance expire after some time, though this is likely to be added in the future for creators who do not claim their balance after several years. Rest assured, we will have processes in place to make sure that your money doesn't go poof just because you weren't able to claim it in time.</p><h2>Frontend facelift</h2><p>The website frontLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Modrinth's Carbon Ads experiment]]></title>
|
||||
<description><![CDATA[As a step towards implementing author payouts, we're experimenting with a couple different ad providers to see which one works the best for us.]]></description>
|
||||
<link>https://modrinth.com/news/article/carbon-ads/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/carbon-ads/</guid>
|
||||
<pubDate>Thu, 08 Sep 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p><strong>Update 10/24:</strong> A month and a half ago we began testing Carbon Ads on Modrinth, and in the end, using Carbon did not work out. After disabling ads with tracking in them, the revenue was about equal to or worse than what we were generating previously with EthicalAds. Effective today, we are switching our ads provider back to EthicalAds for the time being.</p><p>As a step towards implementing author payouts, we're experimenting with a couple different ad providers to see which one works the best for us. We've been using <a href="https://www.ethicalads.io/" rel="noopener nofollow ugc">EthicalAds</a> for a long time now, but we'd like to now try out <a href="https://www.carbonads.net/" rel="noopener nofollow ugc">CarbonAds</a>.</p><p>In most respects, this is a temporary experiment, but we're hoping that Carbon will become our primary ad provider in the near future.</p><p>Over the past week and a half, we've garnered a lot of useful feedback in the <code>#devlog</code> channel of <a href="https://discord.gg/EUHuJHt" rel="noopener nofollow ugc">our Discord</a>. Over those 1,300 or so messages of open discussion and debate, there were also a lot of questions, concerns, and misconceptions. This blog post aims to address the most frequent of those.</p><h2>FAQ</h2><h3>Is Carbon GDPR and CCPA compliant?</h3><p>Yes. This was confirmed to us via email by a Carbon representative.</p><h3>Are the ads intrusive?</h3><p>No. They fall under the <a href="https://acceptableads.com/standard/" rel="noopener nofollow ugc">Acceptable Ads Standard</a>; that is, there is only ever one per page, they are less than 120 pixels tall, and they are separate and distinguishable from actual site content.</p><h3>Where did the privacy settings go?</h3><p>Alongside the introduction of Carbon, we have removed the privacy settings that we previously had. These privacy settings controlled whether PII would be sent in our internal analytics and whether you wanted personalized ads to show up. Our analytics do not contain PII and Modrinth does not show personalized ads. Both of those would be intense breaches of your privacy, opt-in or not, and Modrinth intends to respect your privacy.</p><h3>Why are you switching before you've released payouts?</h3><p>We have been using <a href="https://github.com/modrinth/ariadne" rel="noopener nofollow ugc">ariadne</a> to take note of page views and ad revenue since August 1st, 2022. While creator payouts cannot yet be claimed, all ad revenue from this date forward will be claimable once payouts are released!</p><p>Payouts are not yet done, but this switch is one of the largest things that needs to be done prior to its release.</p><h3>Why does Modrinth need to switch away from Ethical?</h3><p>There are quite a number of reasons why it's not feasible for us to continue using Ethical. In order to be fully transparent, let's go into detail about each of them.</p><h4>In-house ads</h4><p>Over half of the ads shown by Ethical are their so-called &quot;in-house ads&quot;. That is, Ethical does not have enough inventory to always be showing an ad, so instead it shows an advertisement for itself. These self-advertisements make a whopping $0 for Modrinth.</p><p>Ethical does provide an option to replace these self-advertisements with our own fallback ads, which we've done for the past month or so. However, negotiating those sorts of deals takes an excruciating amount of time, time that we would rather be spending on developing Modrinth to make it better.</p><p>Carbon allows us to have a more hands-off approach with advertising, which is most ideal for us right now.</p><h4>Poor CPM</h4><p>Ethical gives us an average of $0.24 for every thousand page views (also known as CPM) after taking into account the aforementioned in-house ads. Anyone who knows anything about the advertising business knows that this figure is abysmally low. With Modrinth getting over four million page views in a month's timespan, we make an average of less than $1000 per month with Ethical. This simply isn't sustainable for the thousands of creators on Modrinth.</p><p>While we can't quite be sure what our CPM with Carbon will be -- again, this is only a temporary experiment for now -- we have reason to believe that it will be considerably greater than what Ethical can provide.</p><h4>Network in decline</h4><p>Over the time that Modrinth has used Ethical, we haLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Plugins and Resource Packs now have a home on Modrinth]]></title>
|
||||
<description><![CDATA[A small update with a big impact: plugins and resource packs are now available on Modrinth!]]></description>
|
||||
<link>https://modrinth.com/news/article/plugins-resource-packs/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/plugins-resource-packs/</guid>
|
||||
<pubDate>Sat, 27 Aug 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>With the addition of modpacks, creating new project types has become a lot easier. Our first additions to our new system are plugins and resource packs. We'll also be working on adding datapacks, shader packs, and worlds after payouts are released.</p><p>Don't worry - this hasn't taken away an awful lot of development time from author payouts. Those are still being worked on!</p><h2>Plugins</h2><p>With plugins, we're supporting five loaders and three proxies: Bukkit, Spigot, Paper, Purpur, Sponge, BungeeCord, Waterfall, and Velocity.</p><p>Several new categories have specifically been added for plugins, though mod categories can be used for plugins and vice versa.</p><p><a href="https://modrinth.com/plugins">Go browse our plugin section!</a></p><h3>Why add plugins?</h3><p>This is a question we've received quite often since we first announced our intention to host plugins, so let's break it down a bit.</p><p>Currently, there are three main platforms on which plugins can be downloaded from: Bukkit, Spigot, and Sponge's Ore. Notice the main issue there? These sites are bound to a specific loader. This isn't inherently <em>bad</em> - however, as forks and new projects spawn, there is a noticeable lack of flexibility in what can be hosted on a given platform. For example, Spigot is unable to host plugins which specifically depend on the exclusive features provided by Paper's API. Paper's solution to this is to build their own platform, but this simply perpetuates the same problem.</p><p>The best solution here is to create a separate platform which is unbiased and flexible enough to adapt to a changing ecosystem. Modrinth is the perfect candidate for this - after all, plugins are mods under a different name, and likewise mods are plugins under a different name.</p><p>No matter the situation, authors are always allowed to upload their plugins to multiple sites. Build automation is incredibly easy to set up, especially with &quot;set it and forget it&quot; build tools such as <a href="https://github.com/modrinth/minotaur" rel="noopener nofollow ugc">Minotaur</a>.</p><h3>Will paid plugins be supported?</h3><p>No. Modrinth does not have the infrastructure to support this, and it's not currently planned. Author payouts are still being worked on.</p><h3>What about mods that have plugin versions and vice versa?</h3><p>Modrinth is taking a unique approach to this. While the search pages are separate, in reality, the backend is the same. You can select plugin loaders when creating a mod and you can select mod loaders when creating a plugin. The split only exists on the frontend so that projects like <a href="https://modrinth.com/mod/chunky">Chunky</a> can share a single page across their versions.</p><p>Plugins which also have versions for mod loaders will be displayed under the <code>/mod/</code> URL on the frontend. Plugins without mod loader versions are displayed under <code>/plugin/</code>.</p><h2>Resource packs</h2><p>The other thing we've added support for is resource packs!</p><p>Previously we hinted at Bedrock resource packs being supported in addition to Java resource packs. We've decided not to add Bedrock resource packs until we also add support for other Bedrock resources for various technical reasons.</p><p><a href="https://modrinth.com/resourcepacks">Go browse our resource pack section!</a></p><h3>Secondary categories</h3><p>Resource packs are capable of adding a wide range of different things, like fonts, sounds, and core shaders. We found that the current category system was inadequate to account for all of these, especially with the three maximum limit. Thus, we've introduced a &quot;secondary category&quot; system, for categories which don't display by default but can still be searched. These secondary categories have a limit of 255 instead of three. Please add as many secondary categories as are relevant!</p><p>On search pages, &quot;Features&quot; have been split into their own header. Where categories for resource packs can be accurately described as themes, features instead show what exactly a resource pack adds. Resolutions have also been split into their own header, though selecting a pack resolution is optional.</p><h3>What about resource packs that require a mod to function?</h3><p>Resource packs are able to set dependencies on other projects (even those which aren't resource packs), just like how modpacks are able to set dependeLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Changes to Modrinth Modpacks]]></title>
|
||||
<description><![CDATA[CurseForge CDN links requested to be removed by the end of the month]]></description>
|
||||
<link>https://modrinth.com/news/article/modpack-changes/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/modpack-changes/</guid>
|
||||
<pubDate>Sat, 28 May 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>CurseForge CDN links requested to be removed by the end of the month</p><p>Modrinth's alpha launch of modpacks has been highly successful in the nearly two weeks it has been live, with over forty packs launched to the platform. However, a number of these packs include links to download mods from CurseForge's CDN, which has caught the attention of CurseForge. On May 24th, 2022, a representative from Overwolf sent email correspondence to us demanding us to remove all modpacks and documentation that contain references to CurseForge CDN links by the end of the month. The message was vague, and didn't specify whether or not they were making a legal threat against us or not, so we responded in attempt to clarify what would happen if we chose not to comply. In response, they told us that they would &quot;consider next steps.&quot;</p><p>Modrinth has every intention of complying with their demands, despite our belief that this is a huge loss for the community. However, CurseForge's immediate &quot;next steps&quot; were to message launcher developers, requesting that they break support for Modrinth packs that contain CurseForge CDN links, and claiming to them that we outright refused to remove the packs containing the links from our platform ourselves when we did not refuse.</p><p>To be clear, Modrinth condemns the anti-competitive behaviors that CurseForge are engaging in, however, we do not wish for CurseForge or authors who have elected to opt-out of third party downloads from their platform to be our enemies. Modrinth is and will always remain a project in support of open source software, with open and free APIs for all to use, and encouraging of much needed competition and diversity in the mod hosting space.</p><p>Unfortunately, in order to comply with their request, all Modrinth modpacks must now use override JARs in place of any links to CurseForge's CDN. Specifically, CDN links to <code>edge.forgecdn.net</code> and <code>media.forgecdn.net</code> will no longer be part of the <code>.mrpack</code> <a href="https://docs.modrinth.com/docs/modpacks/format_definition/#downloads" rel="noopener nofollow ugc">specification</a>, effective today. Of course, modpack authors must ensure that they are properly licensed to redistribute any mods that are not hosted on the Modrinth platform. While this is a huge blow to modpack creators and users of our platform for now, relying on CurseForge CDN links has always been unreliable as a long-term solution, because they could choose to change the links at any time, and it leaves variables outside of our control. In the long run, packs containing mostly mods hosted on Modrinth will be better for the growth of our platform and for the stability of modpacks.</p><p>In order to use mods exclusively hosted on CurseForge as override JARs, pack creators must ensure that either of the following conditions must be met:</p><ol><li>The mod is licensed under terms that allow for redistribution. The pack author is responsible for following the terms of the license.</li><li>General or individual permission is granted from the mod author. This can be in the form of a message from the author or a statement made on a mod's project description granting permission to use it in modpacks.</li></ol><p>In order to aid in this process, Modrinth will be building a third party mod license database and automated tools that will help pack creators with the hassle that will be ensuring all of the mods in their packs are properly licensed. In addition, packs will continue to be hand-reviewed by Modrinth moderation staff and verified. Do note that in this transition time, the review process for modpack projects may experience significant delays. Authors of existing modpacks on the platform will be reached out to in order to help them convert their existing packs to compliant packs.</p><p>For those wondering, our next steps as a company are:</p><ol><li>Mod license database for Modpack authors</li><li>Creator monetization</li><li>The Modrinth launcher for downloading and creating modpacks.</li></ol>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Modrinth Modpacks: Now in alpha testing]]></title>
|
||||
<description><![CDATA[After over a year of development, we're happy to announce that modpack support is now in alpha testing.]]></description>
|
||||
<link>https://modrinth.com/news/article/modpacks-alpha/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/modpacks-alpha/</guid>
|
||||
<pubDate>Sun, 15 May 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>After over a year of development, Modrinth is happy to announce that modpack support is now in alpha testing!</p><p>What does alpha mean, exactly? Principally, it means that <strong>modpack support is still unstable</strong> and that not everything is perfect yet. However, we believe it to be complete enough that it can be released for general use and testing.</p><p>From this point forward, Modrinth has shifted development effort from modpacks to creator payouts. This long-anticipated feature means that mod developers, modpack creators, and anyone else who uploads content to Modrinth will be eligible to get the ad revenue generated from their project pages.</p><h2>Where can I find them?</h2><p>Right next to mods on the site! URLs to modpacks are the same as mods, just with <code>mod</code> replaced with <code>modpacks</code>, so you can find the search at <a href="https://modrinth.com/modpacks">https://modrinth.com/modpacks</a>.</p><p>Over a dozen modpacks have already been created by our early pack adopters, and those are available for download right now!</p><h2>Wait, so how do I download them?</h2><p>At this point in time, the only stable way to download modpacks and use them is through <a href="https://atlauncher.com" rel="noopener nofollow ugc">ATLauncher</a>. You can also install Modrinth packs if you switch to the development branch of <a href="https://multimc.org" rel="noopener nofollow ugc">MultiMC</a>. We're hoping to be supported by more launchers in the future, including our own launcher, which is still in development. Our <a href="https://docs.modrinth.com/docs/modpacks/playing_modpacks/" rel="noopener nofollow ugc">documentation for playing modpacks</a> will always have an up-to-date listing of the most popular ways to play packs.</p><h2>How do I create packs?</h2><p>You can either use <a href="https://atlauncher.com" rel="noopener nofollow ugc">ATLauncher</a> or <a href="https://github.com/packwiz/packwiz" rel="noopener nofollow ugc">packwiz</a> to create modpacks. The <a href="https://docs.modrinth.com/docs/modpacks/format_definition/" rel="noopener nofollow ugc">Modrinth format</a> is unique for our purposes, which is specifically in order to allow mods from multiple platforms to be in a pack. Our <a href="https://docs.modrinth.com/docs/modpacks/creating_modpacks/" rel="noopener nofollow ugc">documentation for creating modpacks</a> will always have an up-to-date listing of the most popular ways to create packs.</p><h2>Can I use CurseForge mods in my modpack?</h2><p>Yes! The <a href="https://docs.modrinth.com/docs/modpacks/format_definition/" rel="noopener nofollow ugc">Modrinth format</a> uses a link-based approach, meaning that theoretically, mods from any platform are usable. In practice, we are only allowing links from <strong>Modrinth</strong>, <strong>CurseForge</strong>, and <strong>GitHub</strong>. In the future, we may allow other sites.</p><h2>What happened to Theseus?</h2><p>For a while, we've been teasing Theseus, our own launcher. While lots of progress has been made on it, we haven't yet gotten it to a usable state even for alpha testing. Once we think it's usable, we will provide alpha builds -- however, for now, our main focus will be shifting to payouts, with Theseus development ramping up once that is out.</p><p>Remember: Modrinth only has a small team, and we have a lot of real-life responsibilities too. If you have experience in Rust or Svelte and would like to help out in developing it, please feel free to shoot a message in the <code>#launcher</code> channel in our <a href="https://discord.gg/EUHuJHt" rel="noopener nofollow ugc">Discord</a>.</p><h2>Conclusion</h2><p>All in all, this update is quite exciting for everyone involved. Just like with <a href="/packages/blog/articles/redesign.md" rel="noopener nofollow ugc">the redesign</a>, this is the culmination of months upon months of work, and modpack support is really a big stepping stone for what's still yet to come.</p><p>Remember: alpha means that it's still unstable! We are not expecting this release to go perfectly smoothly, but we still hope to provide the best modding experience possible. As always, the fastest and best way to get support is through our <a href="https://discord.gg/EUHuJHt" rel="noopLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[This week in Modrinth development: Filters and Fixes]]></title>
|
||||
<description><![CDATA[After a great first week since Modrinth launched out of beta, we have continued to improve the user interface based on feedback.]]></description>
|
||||
<link>https://modrinth.com/news/article/knossos-v2.1.0/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/knossos-v2.1.0/</guid>
|
||||
<pubDate>Wed, 09 Mar 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>It's officially been a bit over a week since Modrinth launched out of beta. We have continued to make improvements to the user experience on <a href="https://modrinth.com">the website</a>.</p><h2>New features</h2><p>We've added a number of new features to improve your experience.</p><h3>Click to expand gallery images</h3><p><img src="./expand-gallery.jpg" alt="The new expanding gallery images"></p><p>In the gallery page of a project, you can now click on the images to expand the image and view it more closely. You can also use the left arrow, right arrow, and Escape keyboard keys to aid navigation.</p><h3>Filters for the 'Changelog' and 'Versions' pages</h3><p><img src="./version-filters.jpg" alt="The new changelog and versions filtering options"></p><p>Versions on the Changelog and Versions page can now be filtered by mod loader and Minecraft version.</p><h3>More easily access the list of projects you follow</h3><p><img src="./following.jpg" alt="The new 'Following' button in the profile dropdown"></p><p>The link to the list of your followed projects is now listed in your profile dropdown.</p><h2>Fixes and Changes</h2><p>While new features are great, we've also been working on a bunch of bugfixes. Below is a list of some of the notable fixes, but it is not a comprehensive list.</p><ul><li>Improved the layout of the search page's search bar and options card to more dynamically adjust to screen size</li><li>Changed the tab indicator to be rounded</li><li>Changed the download icon to be more recognizable</li><li>Changed the profile dropdown caret to use an SVG instead of a text symbol for better font support</li><li>Changed the styling on text fields to be more consistent with the design language of the site</li><li>Changed the styling on disabled buttons to use an outline to reduce confusion</li><li>Changed the styling on links to be more consistent and obvious</li><li>Changed the wording of the options that move the sidebars to the right</li><li>Changed the green syntax highlighting in code blocks to match the brand color</li><li>Fixed the styling on various buttons and links that were missing hover or active states</li><li>Fixed the inconsistent rounding of the information card on the home page</li><li><a href="https://github.com/modrinth/knossos/issues/370" rel="noopener nofollow ugc">[GH-370]</a> Fixed download buttons in the changelog page</li><li><a href="https://github.com/modrinth/knossos/issues/384" rel="noopener nofollow ugc">[GH-384]</a> Fixed selecting too many Minecraft versions in the search page covering the license dropdown</li><li><a href="https://github.com/modrinth/knossos/issues/390" rel="noopener nofollow ugc">[GH-390]</a> Fixed the hover state of checkboxes not updating when clicking on the label</li><li><a href="https://github.com/modrinth/knossos/issues/393" rel="noopener nofollow ugc">[GH-393]</a> Fixed the padding of the donation link area when creating or editing a project</li><li><a href="https://github.com/modrinth/knossos/issues/394" rel="noopener nofollow ugc">[GH-394]</a> Fixed the rounding radius of dropdowns when opening upwards</li></ul><h2>Minotaur fixes</h2><p><a href="https://github.com/modrinth/minotaur" rel="noopener nofollow ugc">Minotaur</a>, our Gradle plugin, has also received a few fixes. This isn't going to be relevant to most people, but is relevant to some developers using this tool to deploy their mods.</p><ul><li>Debug mode (enabled through <code>debugMode = true</code>) allows previewing the data to be uploaded before uploading</li><li>Fix edge case with ForgeGradle due to broken publishing metadata</li><li>Fix game version detection on Fabric Loom 0.11</li><li>Fix <code>doLast</code> and related methods not being usable because the task was registered in <code>afterEvaluate</code></li></ul><p>These fixes should have been automatically pulled in, assuming you're using Minotaur <code>2.+</code>. If not, you should be upgrading to <code>2.0.2</code>.</p><p>Need a guide to migrate from Minotaur v1 to v2? Check the migration guide on the <a href=Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Now showing on Modrinth: A new look!]]></title>
|
||||
<description><![CDATA[After months of relatively quiet development, Modrinth has released many new features and improvements, including a redesign. Read on to learn more!]]></description>
|
||||
<link>https://modrinth.com/news/article/redesign/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/redesign/</guid>
|
||||
<pubDate>Sun, 27 Feb 2022 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>After months of relatively quiet development, Modrinth has released many new features and improvements, including a redesign. While we've been a bit silent recently on the website and blog, our <a href="https://discord.gg/EUHuJHt" rel="noopener nofollow ugc">Discord server</a> has activity on the daily. Join us there and follow along with the development channels for the very latest information!</p><p>For both those who aren't in the Discord and for those who are, this serves as a status update for what exactly has been going on in our silence. There have been an unparalleled amount of changes, improvements, bug fixes, and new features being worked on since April 2021, and we are incredibly excited to share them with everyone. There are still many things we're still working on, such as modpacks, but we've decided to hold back on that as there is still some fine-tuning that needs to be done on that front.</p><h2>New and improved design</h2><p>The <a href="https://github.com/modrinth/knossos" rel="noopener nofollow ugc">frontend</a> has received a considerable facelift. With designs made in part by <a href="https://modrinth.com/user/falseresync">falseresync</a> (and a sprinkle of bikeshedding), we present to you, the redesign!</p><p>As they say, a picture tells somewhere around nine-hundred odd words. As such, this section will be heavily focused on screenshots of the pages rather than long descriptions.</p><h3>Project pages</h3><p><img src="./iris.jpg" alt="The new page design, shown for Iris"></p><p><em>A beautiful project page for Iris to match its beautiful shaders</em></p><p>On project pages, much of the focus has been shifted to the extended description rather than the metadata, which has been put over on the side. We've also added an option to switch this from the left side to the right side in your user settings, if you so desire.</p><h3>Gallery</h3><p><img src="./consistency.jpg" alt="A preview of the gallery functionality"></p><p><em>Pictures... pretty!</em></p><p>Developers can now add a Gallery section on each project page! Each uploaded image or GIF can have a title and description associated with them.</p><h3>Changelog</h3><p><img src="./adorn.jpg" alt="The changelog page"></p><p><em>A changelog page for showing the difference between updates!</em></p><p>Version changelogs are automatically compiled together into a large changelog list. These are put in reverse chronological order, and are separated for Fabric and Forge versions.</p><h3>Version creation and dependencies</h3><p><img src="./version-creation.jpg" alt="The version creation page"></p><p><em>Version creation has gotten an overhaul!</em></p><p>While dependencies have existed in the backend for a while, their implementation was a bit haphazard and was never widely used due to never being in the frontend. Thus, all previous dependencies have been wiped, and they have been redone better(TM). And hey, now you can add and see dependencies in the frontend!</p><h3>Profile settings &amp; dashboard</h3><p><img src="./profile-settings.jpg" alt="The profile settings page"></p><p><em>The new settings panel for managing your profile and other visual settings</em></p><p>The dashboard has been reworked and reorganized: the &quot;My mods&quot; section has been merged into the profile page itself, and the &quot;Settings&quot; page has been split into &quot;Profile&quot; and &quot;Security&quot;. There are also options for switching the project and search information from the left side of the screen to the right.</p><p><img src="./jellysquid.jpg" alt="A user's profile"></p><p>The notifications page is also now its own page separate from the dashboard, accessible only from the header. The notifications page also has a highly-requested &quot;Clear all&quot; button.</p><p><img src="./notifications.jpg" alt="The notifications page"></p><h2>Backend changes and API v2</h2><p>There have been a number of breaking changes in this update, and as such, the API number has been bumped. The <code>/api/</code> prefix has also been removed, as it's redundant when the base API URL is <code>api.modrinth.com</code>. This means the production URL is now <cLine truncated
|
||||
onlyIf {
|
||||
System.getenv().MODRINTH_TOKEN
|
||||
}
|
||||
token = System.getenv().MODRINTH_TOKEN
|
||||
projectId = 'AABBCCDD'
|
||||
versionNumber = version
|
||||
versionName = &quot;[$project.minecraft_version] Mod Name $project.version&quot;
|
||||
releaseType = 'alpha'
|
||||
changelog = project.changelog
|
||||
uploadFile = remapJar
|
||||
addGameVersion('1.18')
|
||||
addGameVersion('1.18.1')
|
||||
addGameVersion('1.18.2')
|
||||
addLoader('fabric')
|
||||
}
|
||||
</code></pre><p>This exact same buildscript snippet, in Minotaur 2.0.0, can be written as the following:</p><pre><code class="language-groovy">modrinth {
|
||||
projectId = 'AABBCCDD'
|
||||
versionName = &quot;[$project.minecraft_version] Mod Name $project.version&quot;
|
||||
releaseType = 'alpha'
|
||||
changelog = project.changelog
|
||||
uploadFile = remapJar
|
||||
gameVersions = ['1.18', '1.18.1', '1.18.2']
|
||||
loaders = ['fabric']
|
||||
dependencies = [
|
||||
new ModDependency('P7dR8mSH', 'required') // Creates a new required dependency on Fabric API
|
||||
]
|
||||
}
|
||||
</code></pre><p>Notice how it's now in a <code>modrinth {...}</code> block instead of creating a new task. The <code>modrinth</code> task is automatically created.</p><p>The <code>loaders</code> declaration in the new version isn't even needed if you're using Fabric Loom or ForgeGradle. The project version can be detected automatically, and the token uses the <code>MODRINTH_TOKEN</code> environment variable by default now. The game version and loader listings actually make sense now, and dependencies are possible!</p><h2>More miscellanea</h2><p>Along with the major headlining features, there are also a number of smaller features, fixes, and improvements coming with the big update. Most of these need no more than a bullet to describe, so here's a bullet list of the smaller things!</p><ul><li>If you are the owner of a project, you can now transfer the ownership to another user, as long as they have already accepted an invitation to be a member. In the frontend, this can be done on the Settings page, under the &quot;Team members&quot; section.</li><li>iframes for YouTube videos are now allowed. Any iframes from elsewhere are still not allowed.</li><li>Files are now validated to ensure they contain a valid Forge or Fabric mod, or are in the correct modpack format.</li><li>When changing the status of a project, file moderators are now able to add a message (heading and body separate) to be seen by project team members.</li><li>Versions must now always have a file attached.</li><li>Projects will only be able to have <code>draft</code> status if they contain no versions. Additionally, a new <code>archived</code> status has been added.</li><li>Donation URLs have been re-enabled.</li><li>Fix: Markdown checkboxes will no longer render strangely (<a href="https://github.com/modrinth/knossos/pull/291" rel="noopener nofollow ugc">knossos#291</a>)</li><li>Fix: <a href="https://docs.modrinth.com/docs/tutorials/maven/" rel="noopener nofollow ugc">Maven</a> will no longer randomly break (<a href="https://github.com/modrinth/labrinth/pull/264" rel="noopener nofollow ugc">labrinth#264</a> and <a href="https://github.com/modrinth/labrinth/pull/252" rel="noopener nofollow ugc">labrinth#252</a>)</li><li>...and many other smaller things!</li></ul><h2>What happened to modpacks?</h2><p>We've been teasing modpacks for a long time now. While they're done for the most part, we've decided to hold back on their release for the time being. We're working hard to get those done some time soon, and there'll be another post when those are ready for general consumption.</p><h2>Conclusion and a call for developers</h2><p>In conclusion, we hope that you're excited about this update as much as we are. We believe that, with how much work has been put into this update, it has definitely been worth the wait.</p><p>On a separate note, are you looking to contribute to Modrinth? Have you got experience with Rust or Svelte? We're hiring! Please reach out to <code>Geometrically#8387</code> on Discord to apply for a position.</p><p>Thank you for reading, and may your dreams be filled with pineapples, tiny potatoes, and squirrels.</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Beginner's Guide to Licensing your Mods]]></title>
|
||||
<description><![CDATA[Software licenses; the nitty-gritty legal aspect of software development. They're more important than you think.]]></description>
|
||||
<link>https://modrinth.com/news/article/licensing-guide/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/licensing-guide/</guid>
|
||||
<pubDate>Sun, 16 May 2021 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Why do you need to license your software? What are those licenses for anyway? These questions are more important than you think</p><h2>What is a software license?</h2><p>To summarise the <a href="https://en.wikipedia.org/wiki/Software_license" rel="noopener nofollow ugc">Wikipedia article</a> on the matter, it's essentially a legal contract between you (the mod developer) and anyone who uses, copies, modifies, etc the mod or any code having to do with it. License has the power to allow people to do whatever they want, or only permit the usage of the mod in-game. However, the majority of cases lie in-between these opposites.</p><h2>So which software license should I choose?</h2><p>First and foremost, the choice of the software license is not entirely up to you, because you have to have the legal ability to do so. For instance, not all licenses are compatible with Minecraft's EULA (End-User License Agreement). Besides, if you are not the only one working on the project, you must get permission from all other contributors to your code before changing or adding a license. Please, ensure you have done so before implementing a license.</p><p>Before we can decide which one to use, however, we must establish some additional definitions. Open software licenses can be split into three main categories: <strong>public domain</strong>, <strong>permissive</strong>, and <strong>copyleft</strong>.</p><h3>Permissive license</h3><p>A permissive license is a type of license that usually gives the abilities to use, copy, modify, distribute, sell, and relicense a piece of software.</p><p>The most popular license on Modrinth, the <a href="https://cdn.modrinth.com/licenses/mit.txt" rel="noopener nofollow ugc">MIT License</a>, is a permissive license. It is an easy-to-read license designed to be used for developers, which is why it is used extensively in the Minecraft open source community.</p><p>The <a href="https://cdn.modrinth.com/licenses/apache.txt" rel="noopener nofollow ugc">Apache License 2.0</a> is also a very good permissive license to use. The main difference between it and the MIT License is that the Apache License gives an explicit patent grant, whereas patents must be registered manually with the MIT. There is also an additional clause with the Apache License, stating that any modified files must &quot;carry prominent notices&quot; of it being modified.</p><h3>Copyleft license</h3><p>A copyleft license gives to the other party specific rights usually only given to the copyright owner, under the condition that those same rights are applied to all variations of that software. These are also sometimes called &quot;viral&quot; or &quot;infectious&quot; licenses, because of the requirement to pass those rights on to derivatives.</p><p>The second most common license on Modrinth is a copyleft license: the <a href="https://cdn.modrinth.com/licenses/lgpl-3.txt" rel="noopener nofollow ugc">GNU Lesser General Public License Version 3</a> (usually <a href="https://spdx.org/licenses/LGPL-3.0-only.html" rel="noopener nofollow ugc">shortened to</a> LGPL-3.0).</p><p>Typically, when a copyleft license is wanted, the <a href="https://spdx.org/licenses/GPL-3.0-only.html" rel="noopener nofollow ugc">GPL-3.0</a> or <a href="https://spdx.org/licenses/AGPL-3.0-only.html" rel="noopener nofollow ugc">AGPL-3.0</a> would be used. However, these licenses are <strong>incompatible</strong> if linking into Minecraft, due to an issue with the difference between proprietary and free software outlined by these licenses (more information <a href="https://www.gnu.org/licenses/gpl-faq.html#GPLPlugins" rel="noopener nofollow ugc">here</a>). An exception can be added to allow linking, such as that found <a href="https://gist.github.com/wafflecoffee/588f353802a3b0ea649e4fc85f75e583" rel="noopener nofollow ugc">here</a>, but it is recommended to just use the LGPL-3.0 instead if possible.</p><h3>Public domain dedication</h3><p>A public domain dedication gives all rights to everyone who gets a copy of the software. This includes but is not limited to the ability to use, copy, modify, distribute, sell, or relicense that software. Software with a public domain dedication has no copyright holder.</p><p>The third most common license used on Modrinth is the <a href="https://cdn.modrinth.com/licenses/cc0.txt" rel="noopener nofollow ugc">CLine truncated
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[Welcome to Modrinth Beta]]></title>
|
||||
<description><![CDATA[After six months of work, Modrinth enters Beta, helping modders host their mods with ease!]]></description>
|
||||
<link>https://modrinth.com/news/article/modrinth-beta/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/modrinth-beta/</guid>
|
||||
<pubDate>Tue, 01 Dec 2020 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>After six months of work, Modrinth enters Beta, helping modders host their mods with ease!</p><p>Six months ago, in order to fill a void in the modding community, the project that would eventually become Modrinth was founded. Modrinth was created to bring change to an otherwise stagnant landscape of hosts. Today, Modrinth enters Beta, a huge step forward for Modrinth!</p><p><img src="./new-design.jpg" alt="Modrinth's brand new design, rolling out with the launch of Beta"></p><blockquote><p>Modrinth's brand new design, rolling out with the launch of Beta</p></blockquote><h2>What's new?</h2><p>If you've checked out Modrinth in the past, here's the main things you'll notice that have changed:</p><ul><li>All new clean and modern design in both light and dark modes</li><li>Mods now display download counts correctly</li><li>Mod information can now be edited in the author Dashboard</li><li>More information can be added to mods</li></ul><h2>What's next?</h2><p>Modrinth is still in beta, of course, so there will be bugs. In the coming weeks and months, we will be prioritizing fixing the issues that currently exist and continue refining the design in areas that are rough.</p><p>If you find any, please report them to the issue tracker: <a href="https://github.com/modrinth/code/issues" rel="noopener nofollow ugc">https://github.com/modrinth/code/issues</a></p><p>If you would like to chat about Modrinth, our discord is open to all here: <a href="https://discord.modrinth.com" rel="noopener nofollow ugc">https://discord.modrinth.com</a></p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[What is Modrinth?]]></title>
|
||||
<description><![CDATA[Hello, we are Modrinth – an open source mods hosting platform. Sounds dry, doesn't it? So let me tell you our story – and I promise, it won't be boring!]]></description>
|
||||
<link>https://modrinth.com/news/article/whats-modrinth/</link>
|
||||
<guid isPermaLink="false">https://modrinth.com/news/article/whats-modrinth/</guid>
|
||||
<pubDate>Fri, 27 Nov 2020 00:00:00 GMT</pubDate>
|
||||
<content:encoded><![CDATA[<p>Hello, we are Modrinth – an open source mods hosting platform. Sounds dry, doesn't it? So let me tell you our story – and I promise, it won't be boring!</p><h2>Prelude and conception</h2><p>Before Modrinth was even thought of, there already were several giant platforms for mod hosting. However, most of them were too specialized, outdated, or transitively dependent on an uncaring hegemonic 3rd party. Authors and players were always in struggle. The community had to choose 2 out of 3: inconvenience, indifference, obsolescence. Urge for better service, either new or renewed, just founded or acquired arose.</p><p>Although demand for proper competition is the seed, the germ of Modrinth, the biggest role was played by the Fabric project. It set an example of a community-powered alternative. It was democratic, FOSS, listening to the community, and welcoming contribution and 3rd party initiatives. They have shown the modding community that they can evolve and adapt, be accessible and welcoming, cooperative, and caring.</p><h2>Fabricate and HexFabric</h2><p>And, oh boy, did they connect – the demand for competition grew so high, that at some point the community just exploded with novelty. During several months, almost a dozen projects were aiming to be the second Walmart, the third IKEA, the fourth Amazon for your mods. Here beings the story of HexFabrics... – wait, what? What's that?</p><blockquote><p>HexFabric is an umbrella term for modern mod hosting technology. It got its name from Fabric, which at the point was poorly supported (if at all) by the major players on the stage. In practice, HexFabric is just a cozy Discord server, on which several projects have their deputizing channels.</p></blockquote><p>Back on track – Lots of HexFabrics were founded almost simultaneously. <a href="http://Altar.gg" rel="noopener nofollow ugc">Altar.gg</a>, Astronave, Diluv, ModForest, Minerepo... and, most importantly, Fabricate.</p><p>Fabricate began its journey as a proprietary project indexing website by a single developer – Geometrically. It remained relatively unnoticed for a couple of weeks, and then it started gaining attention. This new website has amazing search! Yup, the whole thing was primarily about making seamless, gracious, appeasing smart real-time search. The community is now intrigued.</p><h2>Becoming a team</h2><p>&quot;But this looks awful! And it's proprietary!&quot; – a few voices said. Among those voices were falseresync and MulverineX. They both had several objections to that and were pestering the original author. &quot;FOSS is the true way for community project&quot; and &quot;Just use a license to prevent others from creating instances of your work,&quot; they told.</p><p>Yet Fabricate remained proprietary for a while. However, once the pressure on the author became high, they gave up and open-sourced their work. This was the birth of Modrinth. It did not get its name for a little while longer though.</p><p>Now that Modrinth was open source, it started gaining traction. Remember falseresync and MulverineX? They joined Geometrically on the branding site, and somewhere in the middle of the brainstorming process the logo and the name were born. At the same time AppleTheGolden, Aeledfyr, and Redblueflame began contributing to the actual code of the project, which is – nowadays known to everyone – in Rust. A solo suddenly became a team, ready for whatever future holds.</p><h2>Development non-stop</h2><p>The newly born FOSS project is now evolving swiftly. Before our team arose the question: monolithic vs split app architecture. Monolithic would be easier to deploy and can serve pages quicker. The split architecture will simplify the development and allow for a feature-full user experience. The discussion was hot, and the sides were fierce. Nevertheless, the split pattern won. Now it was time to make proper backend and frontend apps.</p><p>The work first began with the backend. Aeled, Red, and Geo started detaching API methods from visuals. The team worked hard. Consequent to the API splitting from the GUI, it became getting new and exciting features. The first feature to be added was custom Modrinth mods – before that, the website only indexed the competitor's service.</p><p>However, for that to happen there had to be another step taken – migration from MongoDB to PostgreSQL. It was crucial for efficient data storage and complex relationships between projects. And the biggest propagator of that change was Apple, who introduced and successfully defended their case.</p><p>Thus, with custom mods, better yet search has been implemented. After searLine truncated
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
After Width: | Height: | Size: 64 KiB |
@@ -51,7 +51,8 @@ pub fn config(cfg: &mut ServiceConfig) {
|
||||
.service(resend_verify_email)
|
||||
.service(set_email)
|
||||
.service(verify_email)
|
||||
.service(subscribe_newsletter),
|
||||
.service(subscribe_newsletter)
|
||||
.service(get_newsletter_subscription_status),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1321,6 +1322,37 @@ pub async fn sign_up_sendy(email: &str) -> Result<(), AuthenticationError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn check_sendy_subscription(
|
||||
email: &str,
|
||||
) -> Result<bool, AuthenticationError> {
|
||||
let url = dotenvy::var("SENDY_URL")?;
|
||||
let id = dotenvy::var("SENDY_LIST_ID")?;
|
||||
let api_key = dotenvy::var("SENDY_API_KEY")?;
|
||||
|
||||
if url.is_empty() || url == "none" {
|
||||
tracing::info!(
|
||||
"Sendy URL not set, returning false for subscription check"
|
||||
);
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
let mut form = HashMap::new();
|
||||
form.insert("api_key", &*api_key);
|
||||
form.insert("email", email);
|
||||
form.insert("list_id", &*id);
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let response = client
|
||||
.post(format!("{url}/api/subscribers/subscription-status.php"))
|
||||
.form(&form)
|
||||
.send()
|
||||
.await?
|
||||
.text()
|
||||
.await?;
|
||||
|
||||
Ok(response.trim() == "Subscribed")
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Validate)]
|
||||
pub struct NewAccount {
|
||||
#[validate(length(min = 1, max = 39), regex(path = *crate::util::validate::RE_URL_SAFE))]
|
||||
@@ -2387,6 +2419,35 @@ pub async fn subscribe_newsletter(
|
||||
}
|
||||
}
|
||||
|
||||
#[get("email/subscribe")]
|
||||
pub async fn get_newsletter_subscription_status(
|
||||
req: HttpRequest,
|
||||
pool: Data<PgPool>,
|
||||
redis: Data<RedisPool>,
|
||||
session_queue: Data<AuthQueue>,
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let user = get_user_from_headers(
|
||||
&req,
|
||||
&**pool,
|
||||
&redis,
|
||||
&session_queue,
|
||||
Scopes::USER_READ,
|
||||
)
|
||||
.await?
|
||||
.1;
|
||||
|
||||
if let Some(email) = user.email {
|
||||
let is_subscribed = check_sendy_subscription(&email).await?;
|
||||
Ok(HttpResponse::Ok().json(serde_json::json!({
|
||||
"subscribed": is_subscribed
|
||||
})))
|
||||
} else {
|
||||
Ok(HttpResponse::Ok().json(serde_json::json!({
|
||||
"subscribed": false
|
||||
})))
|
||||
}
|
||||
}
|
||||
|
||||
fn send_email_verify(
|
||||
email: String,
|
||||
flow: String,
|
||||
|
||||