forked from didirus/AstralRinth
feat: consistently format all HTML, XML, JSON, CSS, JS, TS, SQL, TOML, YAML, and Markdown files as far as possible (#4193)
* feat: consistently format all HTML, XML, JSON, CSS, JS, TS, SQL, TOML, YAML, and Markdown files * chore: deal with VS Code not being able to parse valid editorconfig syntax Sometimes I'm surprised that computers even work. * chore: get rid of IntelliJ IDE config files that should not be there These were already added to the `.gitignore` a long time ago, and now are being ignored by Prettier. * fix: rename `tooling-config` `format` script to `fix` for it to run with Turbo
This commit is contained in:
committed by
GitHub
parent
6f59f4c110
commit
1454e3351e
@@ -3,7 +3,7 @@ root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = "tab"
|
||||
indent_style = tab
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
@@ -12,7 +12,14 @@ max_line_length = 100
|
||||
[*.md]
|
||||
indent_size = 2
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{json,yml,yaml}]
|
||||
[*.toml]
|
||||
indent_size = 2
|
||||
|
||||
[*.json]
|
||||
indent_size = 2
|
||||
|
||||
# YAML requires space indentation by spec
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
@@ -1,8 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
19
.idea/code.iml
generated
19
.idea/code.iml
generated
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/apps/daedalus_client/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/packages/daedalus/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/apps/app-playground/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/apps/app/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/apps/labrinth/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/apps/labrinth/tests" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/packages/app-lib/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/packages/ariadne/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
7
.idea/discord.xml
generated
7
.idea/discord.xml
generated
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DiscordProjectSettings">
|
||||
<option name="show" value="PROJECT_FILES" />
|
||||
<option name="description" value="" />
|
||||
</component>
|
||||
</project>
|
||||
26
.idea/libraries/KotlinJavaRuntime.xml
generated
26
.idea/libraries/KotlinJavaRuntime.xml
generated
@@ -1,26 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="KotlinJavaRuntime" type="repository">
|
||||
<properties maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0" />
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0/kotlin-stdlib-jdk8-1.8.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0/kotlin-stdlib-1.8.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0/kotlin-stdlib-common-1.8.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0/kotlin-stdlib-jdk7-1.8.0.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0/kotlin-stdlib-jdk8-1.8.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0/kotlin-stdlib-1.8.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0/kotlin-stdlib-common-1.8.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0-javadoc.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0/kotlin-stdlib-jdk7-1.8.0-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0/kotlin-stdlib-jdk8-1.8.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0/kotlin-stdlib-1.8.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0/kotlin-stdlib-common-1.8.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0/kotlin-stdlib-jdk7-1.8.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/code.iml" filepath="$PROJECT_DIR$/.idea/code.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
12
.idea/vcs.xml
generated
12
.idea/vcs.xml
generated
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CommitMessageInspectionProfile">
|
||||
<profile version="1.0">
|
||||
<inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
3
.prettierignore
Normal file
3
.prettierignore
Normal file
@@ -0,0 +1,3 @@
|
||||
Cargo.lock
|
||||
pnpm-lock.yaml
|
||||
.github/**/*.png
|
||||
93
Cargo.toml
93
Cargo.toml
@@ -1,13 +1,13 @@
|
||||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"apps/app",
|
||||
"apps/app-playground",
|
||||
"apps/daedalus_client",
|
||||
"apps/labrinth",
|
||||
"packages/app-lib",
|
||||
"packages/ariadne",
|
||||
"packages/daedalus",
|
||||
"apps/app",
|
||||
"apps/app-playground",
|
||||
"apps/daedalus_client",
|
||||
"apps/labrinth",
|
||||
"packages/app-lib",
|
||||
"packages/ariadne",
|
||||
"packages/daedalus",
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
@@ -28,12 +28,10 @@ async_zip = "0.0.17"
|
||||
async-compression = { version = "0.4.27", default-features = false }
|
||||
async-recursion = "1.1.1"
|
||||
async-stripe = { version = "0.41.0", default-features = false, features = [
|
||||
"runtime-tokio-hyper-rustls",
|
||||
"runtime-tokio-hyper-rustls",
|
||||
] }
|
||||
async-trait = "0.1.88"
|
||||
async-tungstenite = { version = "0.30.0", default-features = false, features = [
|
||||
"futures-03-sink",
|
||||
] }
|
||||
async-tungstenite = { version = "0.30.0", default-features = false, features = ["futures-03-sink"] }
|
||||
async-walkdir = "2.1.0"
|
||||
base64 = "0.22.1"
|
||||
bitflags = "2.9.1"
|
||||
@@ -69,10 +67,10 @@ hickory-resolver = "0.25.2"
|
||||
hmac = "0.12.1"
|
||||
hyper = "1.6.0"
|
||||
hyper-rustls = { version = "0.27.7", default-features = false, features = [
|
||||
"http1",
|
||||
"native-tokio",
|
||||
"ring",
|
||||
"tls12",
|
||||
"http1",
|
||||
"native-tokio",
|
||||
"ring",
|
||||
"tls12",
|
||||
] }
|
||||
hyper-util = "0.1.16"
|
||||
iana-time-zone = "0.1.63"
|
||||
@@ -83,13 +81,13 @@ itertools = "0.14.0"
|
||||
jemalloc_pprof = "0.8.1"
|
||||
json-patch = { version = "4.0.0", default-features = false }
|
||||
lettre = { version = "0.11.18", default-features = false, features = [
|
||||
"builder",
|
||||
"hostname",
|
||||
"pool",
|
||||
"ring",
|
||||
"rustls",
|
||||
"rustls-native-certs",
|
||||
"smtp-transport",
|
||||
"builder",
|
||||
"hostname",
|
||||
"pool",
|
||||
"ring",
|
||||
"rustls",
|
||||
"rustls-native-certs",
|
||||
"smtp-transport",
|
||||
] }
|
||||
maxminddb = "0.26.0"
|
||||
meilisearch-sdk = { version = "0.29.1", default-features = false }
|
||||
@@ -104,30 +102,27 @@ png = "0.17.16"
|
||||
prometheus = "0.14.0"
|
||||
quartz_nbt = "0.2.9"
|
||||
quick-xml = "0.38.1"
|
||||
rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9
|
||||
rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9
|
||||
rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9
|
||||
rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9
|
||||
redis = "0.32.4"
|
||||
regex = "1.11.1"
|
||||
reqwest = { version = "0.12.22", default-features = false }
|
||||
rgb = "0.8.52"
|
||||
rust_decimal = { version = "1.37.2", features = [
|
||||
"serde-with-float",
|
||||
"serde-with-str",
|
||||
] }
|
||||
rust_decimal = { version = "1.37.2", features = ["serde-with-float", "serde-with-str"] }
|
||||
rust_iso3166 = "0.1.14"
|
||||
rust-s3 = { version = "0.35.1", default-features = false, features = [
|
||||
"fail-on-err",
|
||||
"tags",
|
||||
"tokio-rustls-tls",
|
||||
"fail-on-err",
|
||||
"tags",
|
||||
"tokio-rustls-tls",
|
||||
] }
|
||||
rusty-money = "0.4.1"
|
||||
sentry = { version = "0.42.0", default-features = false, features = [
|
||||
"backtrace",
|
||||
"contexts",
|
||||
"debug-images",
|
||||
"panic",
|
||||
"reqwest",
|
||||
"rustls",
|
||||
"backtrace",
|
||||
"contexts",
|
||||
"debug-images",
|
||||
"panic",
|
||||
"reqwest",
|
||||
"rustls",
|
||||
] }
|
||||
sentry-actix = "0.42.0"
|
||||
serde = "1.0.219"
|
||||
@@ -136,7 +131,7 @@ serde_cbor = "0.11.2"
|
||||
serde_ini = "0.2.0"
|
||||
serde_json = "1.0.142"
|
||||
serde_with = "3.14.0"
|
||||
serde-xml-rs = "0.8.1" # Also an XML (de)serializer, consider dropping yaserde in favor of this
|
||||
serde-xml-rs = "0.8.1" # Also an XML (de)serializer, consider dropping yaserde in favor of this
|
||||
sha1 = "0.10.6"
|
||||
sha1_smol = { version = "1.0.1", features = ["std"] }
|
||||
sha2 = "0.10.9"
|
||||
@@ -153,8 +148,8 @@ tauri-plugin-opener = "2.4.0"
|
||||
tauri-plugin-os = "2.3.0"
|
||||
tauri-plugin-single-instance = "2.3.2"
|
||||
tauri-plugin-updater = { version = "2.9.0", default-features = false, features = [
|
||||
"rustls-tls",
|
||||
"zip",
|
||||
"rustls-tls",
|
||||
"zip",
|
||||
] }
|
||||
tauri-plugin-window-state = "2.4.0"
|
||||
tempfile = "3.20.0"
|
||||
@@ -180,10 +175,10 @@ winreg = "0.55.0"
|
||||
woothee = "0.13.0"
|
||||
yaserde = "0.12.0"
|
||||
zip = { version = "4.3.0", default-features = false, features = [
|
||||
"bzip2",
|
||||
"deflate",
|
||||
"deflate64",
|
||||
"zstd",
|
||||
"bzip2",
|
||||
"deflate",
|
||||
"deflate64",
|
||||
"zstd",
|
||||
] }
|
||||
zxcvbn = "3.1.0"
|
||||
|
||||
@@ -230,11 +225,11 @@ wry = { git = "https://github.com/modrinth/wry", rev = "f2ce0b0" }
|
||||
|
||||
# Optimize for speed and reduce size on release builds
|
||||
[profile.release]
|
||||
opt-level = "s" # Optimize for binary size
|
||||
strip = true # Remove debug symbols
|
||||
lto = true # Enables link to optimizations
|
||||
panic = "abort" # Strip expensive panic clean-up logic
|
||||
codegen-units = 1 # Compile crates one after another so the compiler can optimize better
|
||||
opt-level = "s" # Optimize for binary size
|
||||
strip = true # Remove debug symbols
|
||||
lto = true # Enables link to optimizations
|
||||
panic = "abort" # Strip expensive panic clean-up logic
|
||||
codegen-units = 1 # Compile crates one after another so the compiler can optimize better
|
||||
|
||||
[profile.dev.package.sqlx-macros]
|
||||
opt-level = 3
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
**/dist
|
||||
*.gltf
|
||||
src/locales/
|
||||
src/assets/**/*.svg
|
||||
|
||||
1
apps/app-playground/.prettierignore
Normal file
1
apps/app-playground/.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
**/*.rs
|
||||
@@ -1,10 +1,12 @@
|
||||
{
|
||||
"name": "@modrinth/app-playground",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"dev": "cargo run",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
}
|
||||
"name": "@modrinth/app-playground",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"fix:ancillary": "prettier --check .",
|
||||
"dev": "cargo run",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
}
|
||||
}
|
||||
|
||||
2
apps/app/.prettierignore
Normal file
2
apps/app/.prettierignore
Normal file
@@ -0,0 +1,2 @@
|
||||
**/*.rs
|
||||
src/api/oauth_utils/auth_code_reply/page.html
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "theseus_gui"
|
||||
version = "1.0.0-local" # The actual version is set by the theseus-build workflow on tagging
|
||||
version = "1.0.0-local" # The actual version is set by the theseus-build workflow on tagging
|
||||
description = "The Modrinth App is a desktop application for managing your Minecraft mods"
|
||||
license = "GPL-3.0-only"
|
||||
repository = "https://github.com/modrinth/code/apps/app/"
|
||||
|
||||
@@ -1,42 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>ModrinthApp</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>modrinth</string>
|
||||
<string>modrinthscheme</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>A Minecraft mod wants to access your camera.</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>A Minecraft mod wants to access your microphone.</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>asset.localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>textures.minecraft.net</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>ModrinthApp</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>modrinth</string>
|
||||
<string>modrinthscheme</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>A Minecraft mod wants to access your camera.</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>A Minecraft mod wants to access your microphone.</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>asset.localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true />
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true />
|
||||
</dict>
|
||||
<key>textures.minecraft.net</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true />
|
||||
<key>NSIncludesSubdomains</key>
|
||||
<true />
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"identifier": "ads",
|
||||
"description": "",
|
||||
"local": false,
|
||||
"remote": {
|
||||
"urls": ["https://modrinth.com/*", "http://localhost:3000/*"]
|
||||
},
|
||||
"webviews": ["ads-window"],
|
||||
"permissions": ["ads:default"]
|
||||
"identifier": "ads",
|
||||
"description": "",
|
||||
"local": false,
|
||||
"remote": {
|
||||
"urls": ["https://modrinth.com/*", "http://localhost:3000/*"]
|
||||
},
|
||||
"webviews": ["ads-window"],
|
||||
"permissions": ["ads:default"]
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"identifier": "core",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"core:path:default",
|
||||
"core:event:default",
|
||||
"core:window:default",
|
||||
"core:app:default",
|
||||
"core:resources:default",
|
||||
"core:menu:default",
|
||||
"core:tray:default",
|
||||
"core:window:allow-create",
|
||||
"core:window:allow-maximize",
|
||||
"core:window:allow-toggle-maximize",
|
||||
"core:window:allow-unmaximize",
|
||||
"core:window:allow-minimize",
|
||||
"core:window:allow-unminimize",
|
||||
"core:window:allow-show",
|
||||
"core:window:allow-hide",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-set-decorations",
|
||||
"core:window:allow-start-dragging",
|
||||
"core:webview:allow-set-webview-zoom"
|
||||
]
|
||||
"identifier": "core",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"core:path:default",
|
||||
"core:event:default",
|
||||
"core:window:default",
|
||||
"core:app:default",
|
||||
"core:resources:default",
|
||||
"core:menu:default",
|
||||
"core:tray:default",
|
||||
"core:window:allow-create",
|
||||
"core:window:allow-maximize",
|
||||
"core:window:allow-toggle-maximize",
|
||||
"core:window:allow-unmaximize",
|
||||
"core:window:allow-minimize",
|
||||
"core:window:allow-unminimize",
|
||||
"core:window:allow-show",
|
||||
"core:window:allow-hide",
|
||||
"core:window:allow-close",
|
||||
"core:window:allow-set-decorations",
|
||||
"core:window:allow-start-dragging",
|
||||
"core:webview:allow-set-webview-zoom"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,50 +1,47 @@
|
||||
{
|
||||
"identifier": "plugins",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"dialog:allow-open",
|
||||
"dialog:allow-confirm",
|
||||
"opener:default",
|
||||
"os:allow-platform",
|
||||
"os:allow-version",
|
||||
"os:allow-os-type",
|
||||
"os:allow-family",
|
||||
"os:allow-arch",
|
||||
"os:allow-exe-extension",
|
||||
"os:allow-locale",
|
||||
"os:allow-hostname",
|
||||
"deep-link:default",
|
||||
"window-state:default",
|
||||
"window-state:allow-restore-state",
|
||||
"window-state:allow-save-window-state",
|
||||
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [
|
||||
{ "url": "https://modrinth.com/*" },
|
||||
{ "url": "https://*.modrinth.com/*" }
|
||||
]
|
||||
},
|
||||
"identifier": "plugins",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"dialog:allow-open",
|
||||
"dialog:allow-confirm",
|
||||
"opener:default",
|
||||
"os:allow-platform",
|
||||
"os:allow-version",
|
||||
"os:allow-os-type",
|
||||
"os:allow-family",
|
||||
"os:allow-arch",
|
||||
"os:allow-exe-extension",
|
||||
"os:allow-locale",
|
||||
"os:allow-hostname",
|
||||
"deep-link:default",
|
||||
"window-state:default",
|
||||
"window-state:allow-restore-state",
|
||||
"window-state:allow-save-window-state",
|
||||
|
||||
"auth:default",
|
||||
"import:default",
|
||||
"jre:default",
|
||||
"logs:default",
|
||||
"metadata:default",
|
||||
"minecraft-skins:default",
|
||||
"mr-auth:default",
|
||||
"profile-create:default",
|
||||
"pack:default",
|
||||
"process:default",
|
||||
"profile:default",
|
||||
"cache:default",
|
||||
"settings:default",
|
||||
"tags:default",
|
||||
"utils:default",
|
||||
"ads:default",
|
||||
"friends:default",
|
||||
"worlds:default"
|
||||
]
|
||||
{
|
||||
"identifier": "http:default",
|
||||
"allow": [{ "url": "https://modrinth.com/*" }, { "url": "https://*.modrinth.com/*" }]
|
||||
},
|
||||
|
||||
"auth:default",
|
||||
"import:default",
|
||||
"jre:default",
|
||||
"logs:default",
|
||||
"metadata:default",
|
||||
"minecraft-skins:default",
|
||||
"mr-auth:default",
|
||||
"profile-create:default",
|
||||
"pack:default",
|
||||
"process:default",
|
||||
"profile:default",
|
||||
"cache:default",
|
||||
"settings:default",
|
||||
"tags:default",
|
||||
"utils:default",
|
||||
"ads:default",
|
||||
"friends:default",
|
||||
"worlds:default"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"identifier": "updater",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": ["updater:default"]
|
||||
"identifier": "updater",
|
||||
"description": "",
|
||||
"local": true,
|
||||
"windows": ["main"],
|
||||
"permissions": ["updater:default"]
|
||||
}
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
{
|
||||
"name": "@modrinth/app",
|
||||
"scripts": {
|
||||
"tauri": "tauri",
|
||||
"build": "tauri build",
|
||||
"dev": "tauri dev",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tauri-apps/cli": "2.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@modrinth/app-frontend": "workspace:*",
|
||||
"@modrinth/app-lib": "workspace:*",
|
||||
"@modrinth/daedalus": "workspace:*"
|
||||
}
|
||||
"name": "@modrinth/app",
|
||||
"scripts": {
|
||||
"tauri": "tauri",
|
||||
"build": "tauri build",
|
||||
"dev": "tauri dev",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"fix:ancillary": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tauri-apps/cli": "2.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@modrinth/app-frontend": "workspace:*",
|
||||
"@modrinth/app-lib": "workspace:*",
|
||||
"@modrinth/daedalus": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,106 +1,106 @@
|
||||
document.addEventListener(
|
||||
'click',
|
||||
function (e) {
|
||||
window.top.postMessage({ modrinthAdClick: true }, 'https://modrinth.com')
|
||||
'click',
|
||||
function (e) {
|
||||
window.top.postMessage({ modrinthAdClick: true }, 'https://modrinth.com')
|
||||
|
||||
let target = e.target
|
||||
while (target != null) {
|
||||
if (target.matches('a')) {
|
||||
e.preventDefault()
|
||||
if (target.href) {
|
||||
window.top.postMessage({ modrinthOpenUrl: target.href }, 'https://modrinth.com')
|
||||
}
|
||||
break
|
||||
}
|
||||
target = target.parentElement
|
||||
}
|
||||
},
|
||||
true,
|
||||
let target = e.target
|
||||
while (target != null) {
|
||||
if (target.matches('a')) {
|
||||
e.preventDefault()
|
||||
if (target.href) {
|
||||
window.top.postMessage({ modrinthOpenUrl: target.href }, 'https://modrinth.com')
|
||||
}
|
||||
break
|
||||
}
|
||||
target = target.parentElement
|
||||
}
|
||||
},
|
||||
true,
|
||||
)
|
||||
|
||||
window.open = (url, target, features) => {
|
||||
window.top.postMessage({ modrinthOpenUrl: url }, 'https://modrinth.com')
|
||||
window.top.postMessage({ modrinthOpenUrl: url }, 'https://modrinth.com')
|
||||
}
|
||||
|
||||
function muteAudioContext() {
|
||||
if (window.AudioContext || window.webkitAudioContext) {
|
||||
const AudioContext = window.AudioContext || window.webkitAudioContext
|
||||
const originalCreateMediaElementSource = AudioContext.prototype.createMediaElementSource
|
||||
const originalCreateMediaStreamSource = AudioContext.prototype.createMediaStreamSource
|
||||
const originalCreateMediaStreamTrackSource = AudioContext.prototype.createMediaStreamTrackSource
|
||||
const originalCreateBufferSource = AudioContext.prototype.createBufferSource
|
||||
const originalCreateOscillator = AudioContext.prototype.createOscillator
|
||||
if (window.AudioContext || window.webkitAudioContext) {
|
||||
const AudioContext = window.AudioContext || window.webkitAudioContext
|
||||
const originalCreateMediaElementSource = AudioContext.prototype.createMediaElementSource
|
||||
const originalCreateMediaStreamSource = AudioContext.prototype.createMediaStreamSource
|
||||
const originalCreateMediaStreamTrackSource = AudioContext.prototype.createMediaStreamTrackSource
|
||||
const originalCreateBufferSource = AudioContext.prototype.createBufferSource
|
||||
const originalCreateOscillator = AudioContext.prototype.createOscillator
|
||||
|
||||
AudioContext.prototype.createGain = function () {
|
||||
const gain = originalCreateGain.call(this)
|
||||
gain.gain.value = 0
|
||||
return gain
|
||||
}
|
||||
AudioContext.prototype.createGain = function () {
|
||||
const gain = originalCreateGain.call(this)
|
||||
gain.gain.value = 0
|
||||
return gain
|
||||
}
|
||||
|
||||
AudioContext.prototype.createMediaElementSource = function (mediaElement) {
|
||||
const source = originalCreateMediaElementSource.call(this, mediaElement)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
AudioContext.prototype.createMediaElementSource = function (mediaElement) {
|
||||
const source = originalCreateMediaElementSource.call(this, mediaElement)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
|
||||
AudioContext.prototype.createMediaStreamSource = function (mediaStream) {
|
||||
const source = originalCreateMediaStreamSource.call(this, mediaStream)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
AudioContext.prototype.createMediaStreamSource = function (mediaStream) {
|
||||
const source = originalCreateMediaStreamSource.call(this, mediaStream)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
|
||||
AudioContext.prototype.createMediaStreamTrackSource = function (mediaStreamTrack) {
|
||||
const source = originalCreateMediaStreamTrackSource.call(this, mediaStreamTrack)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
AudioContext.prototype.createMediaStreamTrackSource = function (mediaStreamTrack) {
|
||||
const source = originalCreateMediaStreamTrackSource.call(this, mediaStreamTrack)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
|
||||
AudioContext.prototype.createBufferSource = function () {
|
||||
const source = originalCreateBufferSource.call(this)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
AudioContext.prototype.createBufferSource = function () {
|
||||
const source = originalCreateBufferSource.call(this)
|
||||
source.connect(this.createGain())
|
||||
return source
|
||||
}
|
||||
|
||||
AudioContext.prototype.createOscillator = function () {
|
||||
const oscillator = originalCreateOscillator.call(this)
|
||||
oscillator.connect(this.createGain())
|
||||
return oscillator
|
||||
}
|
||||
}
|
||||
AudioContext.prototype.createOscillator = function () {
|
||||
const oscillator = originalCreateOscillator.call(this)
|
||||
oscillator.connect(this.createGain())
|
||||
return oscillator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function muteVideo(mediaElement) {
|
||||
let count = Number(mediaElement.getAttribute('data-modrinth-muted-count') ?? 0)
|
||||
let count = Number(mediaElement.getAttribute('data-modrinth-muted-count') ?? 0)
|
||||
|
||||
if (!mediaElement.muted || mediaElement.volume !== 0) {
|
||||
mediaElement.muted = true
|
||||
mediaElement.volume = 0
|
||||
if (!mediaElement.muted || mediaElement.volume !== 0) {
|
||||
mediaElement.muted = true
|
||||
mediaElement.volume = 0
|
||||
|
||||
mediaElement.setAttribute('data-modrinth-muted-count', count + 1)
|
||||
}
|
||||
mediaElement.setAttribute('data-modrinth-muted-count', count + 1)
|
||||
}
|
||||
|
||||
if (count > 5) {
|
||||
// Video is detected as malicious, so it is removed from the page
|
||||
mediaElement.remove()
|
||||
}
|
||||
if (count > 5) {
|
||||
// Video is detected as malicious, so it is removed from the page
|
||||
mediaElement.remove()
|
||||
}
|
||||
}
|
||||
|
||||
function muteVideos() {
|
||||
document.querySelectorAll('video, audio').forEach(function (mediaElement) {
|
||||
muteVideo(mediaElement)
|
||||
document.querySelectorAll('video, audio').forEach(function (mediaElement) {
|
||||
muteVideo(mediaElement)
|
||||
|
||||
if (!mediaElement.hasAttribute('data-modrinth-muted')) {
|
||||
mediaElement.addEventListener('volumechange', () => muteVideo(mediaElement))
|
||||
if (!mediaElement.hasAttribute('data-modrinth-muted')) {
|
||||
mediaElement.addEventListener('volumechange', () => muteVideo(mediaElement))
|
||||
|
||||
mediaElement.setAttribute('data-modrinth-muted', 'true')
|
||||
}
|
||||
})
|
||||
mediaElement.setAttribute('data-modrinth-muted', 'true')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
muteVideos()
|
||||
muteAudioContext()
|
||||
muteVideos()
|
||||
muteAudioContext()
|
||||
|
||||
const observer = new MutationObserver(muteVideos)
|
||||
observer.observe(document.body, { childList: true, subtree: true })
|
||||
const observer = new MutationObserver(muteVideos)
|
||||
observer.observe(document.body, { childList: true, subtree: true })
|
||||
})
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
{
|
||||
"bundle": {
|
||||
"createUpdaterArtifacts": "v1Compatible",
|
||||
"windows": {
|
||||
"signCommand": {
|
||||
"cmd": "jsign",
|
||||
"args": [
|
||||
"sign",
|
||||
"--verbose",
|
||||
"--storetype",
|
||||
"DIGICERTONE",
|
||||
"--keystore",
|
||||
"https://clientauth.one.digicert.com",
|
||||
"--storepass",
|
||||
"env:DIGICERT_ONE_SIGNER_CREDENTIALS",
|
||||
"--tsaurl",
|
||||
"https://timestamp.sectigo.com,http://timestamp.digicert.com",
|
||||
"%1"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"features": ["updater"]
|
||||
},
|
||||
"app": {
|
||||
"security": {
|
||||
"capabilities": ["ads", "core", "plugins", "updater"]
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"updater": {
|
||||
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDIwMzM5QkE0M0FCOERBMzkKUldRNTJyZzZwSnN6SUdPRGdZREtUUGxMblZqeG9OVHYxRUlRTzJBc2U3MUNJaDMvZDQ1UytZZmYK",
|
||||
"endpoints": ["https://launcher-files.modrinth.com/updates.json"]
|
||||
}
|
||||
}
|
||||
"bundle": {
|
||||
"createUpdaterArtifacts": "v1Compatible",
|
||||
"windows": {
|
||||
"signCommand": {
|
||||
"cmd": "jsign",
|
||||
"args": [
|
||||
"sign",
|
||||
"--verbose",
|
||||
"--storetype",
|
||||
"DIGICERTONE",
|
||||
"--keystore",
|
||||
"https://clientauth.one.digicert.com",
|
||||
"--storepass",
|
||||
"env:DIGICERT_ONE_SIGNER_CREDENTIALS",
|
||||
"--tsaurl",
|
||||
"https://timestamp.sectigo.com,http://timestamp.digicert.com",
|
||||
"%1"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"features": ["updater"]
|
||||
},
|
||||
"app": {
|
||||
"security": {
|
||||
"capabilities": ["ads", "core", "plugins", "updater"]
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"updater": {
|
||||
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDIwMzM5QkE0M0FCOERBMzkKUldRNTJyZzZwSnN6SUdPRGdZREtUUGxMblZqeG9OVHYxRUlRTzJBc2U3MUNJaDMvZDQ1UytZZmYK",
|
||||
"endpoints": ["https://launcher-files.modrinth.com/updates.json"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,100 +1,100 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"build": {
|
||||
"beforeDevCommand": "pnpm turbo run dev --filter=@modrinth/app-frontend",
|
||||
"beforeBuildCommand": "pnpm turbo run build --filter=@modrinth/app-frontend",
|
||||
"frontendDist": "../app-frontend/dist",
|
||||
"devUrl": "http://localhost:1420"
|
||||
},
|
||||
"bundle": {
|
||||
"active": true,
|
||||
"category": "Game",
|
||||
"copyright": "",
|
||||
"targets": "all",
|
||||
"externalBin": [],
|
||||
"icon": ["icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"],
|
||||
"windows": {
|
||||
"nsis": {
|
||||
"installMode": "currentUser",
|
||||
"installerHooks": "./nsis/hooks.nsi"
|
||||
}
|
||||
},
|
||||
"longDescription": "",
|
||||
"macOS": {
|
||||
"entitlements": "App.entitlements",
|
||||
"exceptionDomain": "",
|
||||
"frameworks": [],
|
||||
"providerShortName": null,
|
||||
"signingIdentity": null
|
||||
},
|
||||
"shortDescription": "",
|
||||
"linux": {
|
||||
"deb": {
|
||||
"depends": []
|
||||
}
|
||||
},
|
||||
"fileAssociations": [
|
||||
{
|
||||
"ext": ["mrpack"],
|
||||
"mimeType": "application/x-modrinth-modpack+zip"
|
||||
}
|
||||
]
|
||||
},
|
||||
"productName": "Modrinth App",
|
||||
"version": "../app-frontend/package.json",
|
||||
"mainBinaryName": "Modrinth App",
|
||||
"identifier": "ModrinthApp",
|
||||
"plugins": {
|
||||
"deep-link": {
|
||||
"desktop": {
|
||||
"schemes": ["modrinth"]
|
||||
},
|
||||
"mobile": []
|
||||
}
|
||||
},
|
||||
"app": {
|
||||
"withGlobalTauri": false,
|
||||
"macOSPrivateApi": true,
|
||||
"windows": [
|
||||
{
|
||||
"titleBarStyle": "Overlay",
|
||||
"hiddenTitle": true,
|
||||
"fullscreen": false,
|
||||
"height": 800,
|
||||
"resizable": true,
|
||||
"title": "Modrinth App",
|
||||
"label": "main",
|
||||
"width": 1280,
|
||||
"minHeight": 700,
|
||||
"minWidth": 1100,
|
||||
"visible": true,
|
||||
"zoomHotkeysEnabled": false,
|
||||
"decorations": false
|
||||
}
|
||||
],
|
||||
"security": {
|
||||
"assetProtocol": {
|
||||
"scope": [
|
||||
"$APPDATA/caches/icons/*",
|
||||
"$APPCONFIG/caches/icons/*",
|
||||
"$CONFIG/caches/icons/*",
|
||||
"$APPDATA/profiles/*/saves/*/icon.png",
|
||||
"$APPCONFIG/profiles/*/saves/*/icon.png",
|
||||
"$CONFIG/profiles/*/saves/*/icon.png"
|
||||
],
|
||||
"enable": true
|
||||
},
|
||||
"capabilities": ["ads", "core", "plugins"],
|
||||
"csp": {
|
||||
"default-src": "'self' customprotocol: asset:",
|
||||
"connect-src": "ipc: http://ipc.localhost https://modrinth.com https://*.modrinth.com https://*.posthog.com https://*.sentry.io https://api.mclo.gs 'self' data: blob:",
|
||||
"font-src": ["https://cdn-raw.modrinth.com/fonts/"],
|
||||
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
|
||||
"style-src": "'unsafe-inline' 'self'",
|
||||
"script-src": "https://*.posthog.com https://tally.so/widgets/embed.js 'self'",
|
||||
"frame-src": "https://www.youtube.com https://www.youtube-nocookie.com https://discord.com https://tally.so/popup/ 'self'",
|
||||
"media-src": "https://*.githubusercontent.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"build": {
|
||||
"beforeDevCommand": "pnpm turbo run dev --filter=@modrinth/app-frontend",
|
||||
"beforeBuildCommand": "pnpm turbo run build --filter=@modrinth/app-frontend",
|
||||
"frontendDist": "../app-frontend/dist",
|
||||
"devUrl": "http://localhost:1420"
|
||||
},
|
||||
"bundle": {
|
||||
"active": true,
|
||||
"category": "Game",
|
||||
"copyright": "",
|
||||
"targets": "all",
|
||||
"externalBin": [],
|
||||
"icon": ["icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"],
|
||||
"windows": {
|
||||
"nsis": {
|
||||
"installMode": "currentUser",
|
||||
"installerHooks": "./nsis/hooks.nsi"
|
||||
}
|
||||
},
|
||||
"longDescription": "",
|
||||
"macOS": {
|
||||
"entitlements": "App.entitlements",
|
||||
"exceptionDomain": "",
|
||||
"frameworks": [],
|
||||
"providerShortName": null,
|
||||
"signingIdentity": null
|
||||
},
|
||||
"shortDescription": "",
|
||||
"linux": {
|
||||
"deb": {
|
||||
"depends": []
|
||||
}
|
||||
},
|
||||
"fileAssociations": [
|
||||
{
|
||||
"ext": ["mrpack"],
|
||||
"mimeType": "application/x-modrinth-modpack+zip"
|
||||
}
|
||||
]
|
||||
},
|
||||
"productName": "Modrinth App",
|
||||
"version": "../app-frontend/package.json",
|
||||
"mainBinaryName": "Modrinth App",
|
||||
"identifier": "ModrinthApp",
|
||||
"plugins": {
|
||||
"deep-link": {
|
||||
"desktop": {
|
||||
"schemes": ["modrinth"]
|
||||
},
|
||||
"mobile": []
|
||||
}
|
||||
},
|
||||
"app": {
|
||||
"withGlobalTauri": false,
|
||||
"macOSPrivateApi": true,
|
||||
"windows": [
|
||||
{
|
||||
"titleBarStyle": "Overlay",
|
||||
"hiddenTitle": true,
|
||||
"fullscreen": false,
|
||||
"height": 800,
|
||||
"resizable": true,
|
||||
"title": "Modrinth App",
|
||||
"label": "main",
|
||||
"width": 1280,
|
||||
"minHeight": 700,
|
||||
"minWidth": 1100,
|
||||
"visible": true,
|
||||
"zoomHotkeysEnabled": false,
|
||||
"decorations": false
|
||||
}
|
||||
],
|
||||
"security": {
|
||||
"assetProtocol": {
|
||||
"scope": [
|
||||
"$APPDATA/caches/icons/*",
|
||||
"$APPCONFIG/caches/icons/*",
|
||||
"$CONFIG/caches/icons/*",
|
||||
"$APPDATA/profiles/*/saves/*/icon.png",
|
||||
"$APPCONFIG/profiles/*/saves/*/icon.png",
|
||||
"$CONFIG/profiles/*/saves/*/icon.png"
|
||||
],
|
||||
"enable": true
|
||||
},
|
||||
"capabilities": ["ads", "core", "plugins"],
|
||||
"csp": {
|
||||
"default-src": "'self' customprotocol: asset:",
|
||||
"connect-src": "ipc: http://ipc.localhost https://modrinth.com https://*.modrinth.com https://*.posthog.com https://*.sentry.io https://api.mclo.gs 'self' data: blob:",
|
||||
"font-src": ["https://cdn-raw.modrinth.com/fonts/"],
|
||||
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
|
||||
"style-src": "'unsafe-inline' 'self'",
|
||||
"script-src": "https://*.posthog.com https://tally.so/widgets/embed.js 'self'",
|
||||
"frame-src": "https://www.youtube.com https://www.youtube-nocookie.com https://discord.com https://tally.so/popup/ 'self'",
|
||||
"media-src": "https://*.githubusercontent.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"mainBinaryName": "ModrinthApp"
|
||||
"mainBinaryName": "ModrinthApp"
|
||||
}
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
{
|
||||
"app": {
|
||||
"windows": [
|
||||
{
|
||||
"titleBarStyle": "Overlay",
|
||||
"hiddenTitle": true,
|
||||
"fullscreen": false,
|
||||
"height": 800,
|
||||
"resizable": true,
|
||||
"title": "Modrinth App",
|
||||
"width": 1280,
|
||||
"minHeight": 700,
|
||||
"minWidth": 1100,
|
||||
"visible": false,
|
||||
"zoomHotkeysEnabled": false,
|
||||
"decorations": true,
|
||||
"trafficLightPosition": {
|
||||
"x": 15.0,
|
||||
"y": 22.0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
"app": {
|
||||
"windows": [
|
||||
{
|
||||
"titleBarStyle": "Overlay",
|
||||
"hiddenTitle": true,
|
||||
"fullscreen": false,
|
||||
"height": 800,
|
||||
"resizable": true,
|
||||
"title": "Modrinth App",
|
||||
"width": 1280,
|
||||
"minHeight": 700,
|
||||
"minWidth": 1100,
|
||||
"visible": false,
|
||||
"zoomHotkeysEnabled": false,
|
||||
"decorations": true,
|
||||
"trafficLightPosition": {
|
||||
"x": 15.0,
|
||||
"y": 22.0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"$schema": "../../node_modules/turbo/schema.json",
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
// Running Clippy and tests on a Tauri application requires
|
||||
// the frontend to be built at least once first
|
||||
"lint": {
|
||||
"dependsOn": ["@modrinth/app-frontend#build"]
|
||||
},
|
||||
"test": {
|
||||
"dependsOn": ["@modrinth/app-frontend#build"]
|
||||
}
|
||||
}
|
||||
"$schema": "../../node_modules/turbo/schema.json",
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
// Running Clippy and tests on a Tauri application requires
|
||||
// the frontend to be built at least once first
|
||||
"lint": {
|
||||
"dependsOn": ["@modrinth/app-frontend#build"]
|
||||
},
|
||||
"test": {
|
||||
"dependsOn": ["@modrinth/app-frontend#build"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1
apps/daedalus_client/.prettierignore
Normal file
1
apps/daedalus_client/.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
**/*.rs
|
||||
@@ -16,7 +16,14 @@ serde_json.workspace = true
|
||||
serde-xml-rs.workspace = true
|
||||
thiserror.workspace = true
|
||||
reqwest = { workspace = true, features = ["stream", "json", "rustls-tls-native-roots"] }
|
||||
async_zip = { workspace = true, features = ["chrono", "tokio-fs", "deflate", "bzip2", "zstd", "deflate64"] }
|
||||
async_zip = { workspace = true, features = [
|
||||
"chrono",
|
||||
"tokio-fs",
|
||||
"deflate",
|
||||
"bzip2",
|
||||
"zstd",
|
||||
"deflate64",
|
||||
] }
|
||||
chrono = { workspace = true, features = ["serde"] }
|
||||
bytes.workspace = true
|
||||
rust-s3.workspace = true
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,15 @@
|
||||
{
|
||||
"name": "@modrinth/daedalus_client",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"dev": "cargo run",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
},
|
||||
"dependencies": {
|
||||
"@modrinth/daedalus": "workspace:*"
|
||||
}
|
||||
"name": "@modrinth/daedalus_client",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"fix:ancillary": "prettier --write .",
|
||||
"dev": "cargo run",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
},
|
||||
"dependencies": {
|
||||
"@modrinth/daedalus": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
||||
1
apps/docs/.prettierignore
Normal file
1
apps/docs/.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
**/*.svg
|
||||
4
apps/docs/.vscode/extensions.json
vendored
4
apps/docs/.vscode/extensions.json
vendored
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
|
||||
18
apps/docs/.vscode/launch.json
vendored
18
apps/docs/.vscode/launch.json
vendored
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -4,53 +4,53 @@ import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi'
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: 'https://docs.modrinth.com',
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'Modrinth Documentation',
|
||||
favicon: '/favicon.ico',
|
||||
editLink: {
|
||||
baseUrl: 'https://github.com/modrinth/code/edit/main/apps/docs/',
|
||||
},
|
||||
social: {
|
||||
github: 'https://github.com/modrinth/code',
|
||||
discord: 'https://discord.modrinth.com',
|
||||
'x.com': 'https://x.com/modrinth',
|
||||
mastodon: 'https://floss.social/@modrinth',
|
||||
threads: 'https://threads.net/@modrinth',
|
||||
},
|
||||
logo: {
|
||||
light: './src/assets/light-logo.svg',
|
||||
dark: './src/assets/dark-logo.svg',
|
||||
replacesTitle: true,
|
||||
},
|
||||
customCss: [
|
||||
'@modrinth/assets/styles/variables.scss',
|
||||
'@modrinth/assets/styles/inter.scss',
|
||||
'./src/styles/modrinth.css',
|
||||
],
|
||||
plugins: [
|
||||
// Generate the OpenAPI documentation pages.
|
||||
starlightOpenAPI([
|
||||
{
|
||||
base: 'api',
|
||||
label: 'Modrinth API',
|
||||
schema: './public/openapi.yaml',
|
||||
},
|
||||
]),
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
label: 'Contributing to Modrinth',
|
||||
autogenerate: { directory: 'contributing' },
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
autogenerate: { directory: 'guide' },
|
||||
},
|
||||
// Add the generated sidebar group to the sidebar.
|
||||
...openAPISidebarGroups,
|
||||
],
|
||||
}),
|
||||
],
|
||||
site: 'https://docs.modrinth.com',
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'Modrinth Documentation',
|
||||
favicon: '/favicon.ico',
|
||||
editLink: {
|
||||
baseUrl: 'https://github.com/modrinth/code/edit/main/apps/docs/',
|
||||
},
|
||||
social: {
|
||||
github: 'https://github.com/modrinth/code',
|
||||
discord: 'https://discord.modrinth.com',
|
||||
'x.com': 'https://x.com/modrinth',
|
||||
mastodon: 'https://floss.social/@modrinth',
|
||||
threads: 'https://threads.net/@modrinth',
|
||||
},
|
||||
logo: {
|
||||
light: './src/assets/light-logo.svg',
|
||||
dark: './src/assets/dark-logo.svg',
|
||||
replacesTitle: true,
|
||||
},
|
||||
customCss: [
|
||||
'@modrinth/assets/styles/variables.scss',
|
||||
'@modrinth/assets/styles/inter.scss',
|
||||
'./src/styles/modrinth.css',
|
||||
],
|
||||
plugins: [
|
||||
// Generate the OpenAPI documentation pages.
|
||||
starlightOpenAPI([
|
||||
{
|
||||
base: 'api',
|
||||
label: 'Modrinth API',
|
||||
schema: './public/openapi.yaml',
|
||||
},
|
||||
]),
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
label: 'Contributing to Modrinth',
|
||||
autogenerate: { directory: 'contributing' },
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
autogenerate: { directory: 'guide' },
|
||||
},
|
||||
// Add the generated sidebar group to the sidebar.
|
||||
...openAPISidebarGroups,
|
||||
],
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
{
|
||||
"name": "@modrinth/docs",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"lint": "astro check",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@astrojs/starlight": "^0.32.2",
|
||||
"@modrinth/assets": "workspace:*",
|
||||
"astro": "^5.4.1",
|
||||
"sharp": "^0.33.5",
|
||||
"starlight-openapi": "^0.14.0",
|
||||
"typescript": "^5.8.2"
|
||||
}
|
||||
"name": "@modrinth/docs",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"lint": "astro check",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix:ancillary": "prettier --write .",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@astrojs/starlight": "^0.32.2",
|
||||
"@modrinth/assets": "workspace:*",
|
||||
"astro": "^5.4.1",
|
||||
"sharp": "^0.33.5",
|
||||
"starlight-openapi": "^0.14.0",
|
||||
"typescript": "^5.8.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { defineCollection } from 'astro:content';
|
||||
import { docsLoader } from '@astrojs/starlight/loaders';
|
||||
import { docsSchema } from '@astrojs/starlight/schema';
|
||||
import { defineCollection } from 'astro:content'
|
||||
import { docsLoader } from '@astrojs/starlight/loaders'
|
||||
import { docsSchema } from '@astrojs/starlight/schema'
|
||||
|
||||
export const collections = {
|
||||
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||
};
|
||||
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ Modrinth allows developers to create applications which, once authorized by a Mo
|
||||
If you're familiar with OAuth 2, these are the URLs you will need:
|
||||
|
||||
| Name | URL |
|
||||
|--------------------|--------------------------------------------------|
|
||||
| ------------------ | ------------------------------------------------ |
|
||||
| Authorization page | `https://modrinth.com/auth/authorize` |
|
||||
| Token exchange | `https://api.modrinth.com/_internal/oauth/token` |
|
||||
|
||||
@@ -31,7 +31,7 @@ After you've registered your application, it is important that you take note of
|
||||
Once the user is ready to authorize your application, you need to construct a URL to redirect them to. The authorization URL for Modrinth is `https://api.modrinth.com/_internal/oauth/token`. Supply the following query parameters:
|
||||
|
||||
| Query parameter | Description |
|
||||
|-----------------|-------------------------------------------------------------------------------------------|
|
||||
| --------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `response_type` | In Modrinth this always needs to be `code`, since only code grants are supported |
|
||||
| `client_id` | The application identifier found in the settings |
|
||||
| `scope` | The permissions you need access to |
|
||||
@@ -45,7 +45,7 @@ The scope identifiers are currently best found in the backend source code locate
|
||||
The redirect URI is the endpoint on your server that will receive the code which can eventually be used to act on the user's behalf. For security reasons the redirect URI used has to be allowlisted in your application settings. The redirect will contain the following query parameters:
|
||||
|
||||
| Query parameter | Description |
|
||||
|-----------------|----------------------------------------------------|
|
||||
| --------------- | -------------------------------------------------- |
|
||||
| `code` | The code that can be exchanged for an access token |
|
||||
| `client_id` | Your client id |
|
||||
| `redirect_uri` | The redirect URI which was used |
|
||||
@@ -58,7 +58,7 @@ If you've followed the previous section on getting authorization, you should now
|
||||
In the body use these fields:
|
||||
|
||||
| Field | Description |
|
||||
|----------------|--------------------------------------------------------------|
|
||||
| -------------- | ------------------------------------------------------------ |
|
||||
| `code` | The authorization code |
|
||||
| `client_id` | Your client id, the same as in the authorization request |
|
||||
| `redirect_uri` | The redirect URI which was redirected to after authorization |
|
||||
@@ -67,7 +67,7 @@ In the body use these fields:
|
||||
If the request succeeds, you should receive a JSON payload with these fields:
|
||||
|
||||
| Field | Description |
|
||||
|----------------|------------------------------------------------------|
|
||||
| -------------- | ---------------------------------------------------- |
|
||||
| `access_token` | The access token you can use to access the API |
|
||||
| `token_type` | Currently only `Bearer` |
|
||||
| `expires_in` | The amount of seconds until the access token expires |
|
||||
@@ -77,19 +77,11 @@ To use this access token, you attach it to API requests in the `Authorization` h
|
||||
If you have any questions, you're welcome to ask in #api-development in the [Discord guild], or create a ticket on the [support portal].
|
||||
|
||||
[RFC 6749]: https://datatracker.ietf.org/doc/html/rfc6749
|
||||
|
||||
[register an application]: https://modrinth.com/settings/applications
|
||||
|
||||
[principle of least privilege]: https://en.wikipedia.org/wiki/Principle_of_least_privilege
|
||||
|
||||
[`apps/labrinth/src/models/v3/pats.rs`]: https://github.com/modrinth/code/blob/main/apps/labrinth/src/models/v3/pats.rs
|
||||
|
||||
[CSRF]: https://en.wikipedia.org/wiki/Cross-site_request_forgery
|
||||
|
||||
[Clickjacking]: https://en.wikipedia.org/wiki/Clickjacking
|
||||
|
||||
[`/user` endpoint]: https://docs.modrinth.com/api/operations/getuserfromauth/
|
||||
|
||||
[Discord guild]: https://discord.modrinth.com
|
||||
|
||||
[support portal]: https://support.modrinth.com/en/
|
||||
|
||||
@@ -2,53 +2,53 @@
|
||||
::backdrop,
|
||||
:root[data-theme='light'],
|
||||
[data-theme='light'] ::backdrop {
|
||||
--sl-font-system: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto,
|
||||
Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
--sl-font-system: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto,
|
||||
Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
|
||||
--sl-color-white: var(--color-contrast); /* “white” */
|
||||
--sl-color-gray-1: var(--color-base);
|
||||
--sl-color-gray-2: var(--color-base);
|
||||
--sl-color-gray-3: var(--color-base);
|
||||
--sl-color-gray-4: var(--color-raised-bg);
|
||||
--sl-color-gray-5: var(--color-button-bg);
|
||||
--sl-color-gray-6: var(--color-raised-bg);
|
||||
--sl-color-black: var(--color-accent-contrast);
|
||||
--sl-color-white: var(--color-contrast); /* “white” */
|
||||
--sl-color-gray-1: var(--color-base);
|
||||
--sl-color-gray-2: var(--color-base);
|
||||
--sl-color-gray-3: var(--color-base);
|
||||
--sl-color-gray-4: var(--color-raised-bg);
|
||||
--sl-color-gray-5: var(--color-button-bg);
|
||||
--sl-color-gray-6: var(--color-raised-bg);
|
||||
--sl-color-black: var(--color-accent-contrast);
|
||||
|
||||
--sl-color-accent-low: var(--color-green-highlight);
|
||||
--sl-color-accent: var(--color-brand);
|
||||
--sl-color-accent-high: var(--color-brand-highlight);
|
||||
--sl-color-accent-low: var(--color-green-highlight);
|
||||
--sl-color-accent: var(--color-brand);
|
||||
--sl-color-accent-high: var(--color-brand-highlight);
|
||||
|
||||
--sl-color-orange-low: var(--color-orange-highlight);
|
||||
--sl-color-orange: var(--color-orange);
|
||||
--sl-color-orange-high: var(--color-orange-highlight);
|
||||
--sl-color-orange-low: var(--color-orange-highlight);
|
||||
--sl-color-orange: var(--color-orange);
|
||||
--sl-color-orange-high: var(--color-orange-highlight);
|
||||
|
||||
--sl-color-green-low: var(--color-green-highlight);
|
||||
--sl-color-green: var(--color-green);
|
||||
--sl-color-green-high: var(--color-green-highlight);
|
||||
--sl-color-green-low: var(--color-green-highlight);
|
||||
--sl-color-green: var(--color-green);
|
||||
--sl-color-green-high: var(--color-green-highlight);
|
||||
|
||||
--sl-color-blue-low: var(--color-blue-highlight);
|
||||
--sl-color-blue: var(--color-blue);
|
||||
--sl-color-blue-high: var(--color-blue-highlight);
|
||||
--sl-color-blue-low: var(--color-blue-highlight);
|
||||
--sl-color-blue: var(--color-blue);
|
||||
--sl-color-blue-high: var(--color-blue-highlight);
|
||||
|
||||
--sl-color-purple-low: var(--color-purple-highlight);
|
||||
--sl-color-purple: var(--color-purple);
|
||||
--sl-color-purple-high: var(--color-purple-highlight);
|
||||
--sl-color-purple-low: var(--color-purple-highlight);
|
||||
--sl-color-purple: var(--color-purple);
|
||||
--sl-color-purple-high: var(--color-purple-highlight);
|
||||
|
||||
--sl-color-red-low: var(--color-red-highlight);
|
||||
--sl-color-red: var(--color-red);
|
||||
--sl-color-red-high: var(--color-red-highlight);
|
||||
--sl-color-red-low: var(--color-red-highlight);
|
||||
--sl-color-red: var(--color-red);
|
||||
--sl-color-red-high: var(--color-red-highlight);
|
||||
|
||||
--sl-color-text: var(--color-base);
|
||||
--sl-color-text-accent: var(--color-brand);
|
||||
--sl-color-text-invert: var(--color-accent-contrast);
|
||||
--sl-color-bg: var(--color-bg);
|
||||
--sl-color-bg-nav: var(--color-raised-bg);
|
||||
--sl-color-bg-sidebar: var(--color-raised-bg);
|
||||
--sl-color-bg-inline-code: var(--color-button-bg);
|
||||
--sl-color-bg-accent: var(--color-brand-highlight);
|
||||
--sl-color-text: var(--color-base);
|
||||
--sl-color-text-accent: var(--color-brand);
|
||||
--sl-color-text-invert: var(--color-accent-contrast);
|
||||
--sl-color-bg: var(--color-bg);
|
||||
--sl-color-bg-nav: var(--color-raised-bg);
|
||||
--sl-color-bg-sidebar: var(--color-raised-bg);
|
||||
--sl-color-bg-inline-code: var(--color-button-bg);
|
||||
--sl-color-bg-accent: var(--color-brand-highlight);
|
||||
}
|
||||
|
||||
:root[data-theme='light'],
|
||||
[data-theme='light'] ::backdrop {
|
||||
--sl-color-bg: var(--color-raised-bg);
|
||||
--sl-color-bg: var(--color-raised-bg);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict"
|
||||
"extends": "astro/tsconfigs/strict"
|
||||
}
|
||||
|
||||
@@ -3,3 +3,5 @@
|
||||
**/.output
|
||||
src/generated/**
|
||||
src/locales/**
|
||||
src/public/news/feed
|
||||
src/assets/**/*.svg
|
||||
|
||||
@@ -72,5 +72,5 @@
|
||||
"xss": "^1.0.14"
|
||||
},
|
||||
"web-types": "../../web-types.json",
|
||||
"prettier": "@modrinth/tooling-config/prettier.nuxt.config.js"
|
||||
"prettier": "@modrinth/tooling-config/frontend.prettier.config.cjs"
|
||||
}
|
||||
|
||||
@@ -1,186 +1,186 @@
|
||||
{
|
||||
"articles": [
|
||||
{
|
||||
"title": "Skins — Now in Modrinth App!",
|
||||
"summary": "Customize your look, save your favorite skins, and swap them out in a flash, all within Modrinth App.",
|
||||
"thumbnail": "https://modrinth.com/news/article/skins-now-in-modrinth-app/thumbnail.webp",
|
||||
"date": "2025-07-06T23:45:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/skins-now-in-modrinth-app"
|
||||
},
|
||||
{
|
||||
"title": "Creator Updates, July 2025",
|
||||
"summary": "Addressing recent growth and growing pains that have been affecting creators.",
|
||||
"thumbnail": "https://modrinth.com/news/default.webp",
|
||||
"date": "2025-07-02T04:20:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/creator-updates-july-2025"
|
||||
},
|
||||
{
|
||||
"title": "A Pride Month Success: Over $8,400 Raised for The Trevor Project!",
|
||||
"summary": "Reflecting on our Pride Month fundraiser campaign for LGBTQ+ youth.",
|
||||
"thumbnail": "https://modrinth.com/news/article/pride-campaign-2025/thumbnail.webp",
|
||||
"date": "2025-07-01T18:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/pride-campaign-2025"
|
||||
},
|
||||
{
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"date": "2023-02-01T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/accelerating-development"
|
||||
},
|
||||
{
|
||||
"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": "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.webp",
|
||||
"date": "2023-01-07T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/two-years-of-modrinth-history"
|
||||
},
|
||||
{
|
||||
"title": "Creators can now make money on Modrinth!",
|
||||
"summary": "Introducing the Creator Monetization Program allowing creators to earn revenue from their projects.",
|
||||
"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": "Experimenting with a different ad providers to find one which one works 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": "Continuing to improve the user interface after a great first week since Modrinth launched out of beta.",
|
||||
"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": "Releasing many new features and improvements, including a redesign!",
|
||||
"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.webp",
|
||||
"date": "2020-11-27T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/whats-modrinth"
|
||||
}
|
||||
]
|
||||
"articles": [
|
||||
{
|
||||
"title": "Skins — Now in Modrinth App!",
|
||||
"summary": "Customize your look, save your favorite skins, and swap them out in a flash, all within Modrinth App.",
|
||||
"thumbnail": "https://modrinth.com/news/article/skins-now-in-modrinth-app/thumbnail.webp",
|
||||
"date": "2025-07-06T23:45:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/skins-now-in-modrinth-app"
|
||||
},
|
||||
{
|
||||
"title": "Creator Updates, July 2025",
|
||||
"summary": "Addressing recent growth and growing pains that have been affecting creators.",
|
||||
"thumbnail": "https://modrinth.com/news/default.webp",
|
||||
"date": "2025-07-02T04:20:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/creator-updates-july-2025"
|
||||
},
|
||||
{
|
||||
"title": "A Pride Month Success: Over $8,400 Raised for The Trevor Project!",
|
||||
"summary": "Reflecting on our Pride Month fundraiser campaign for LGBTQ+ youth.",
|
||||
"thumbnail": "https://modrinth.com/news/article/pride-campaign-2025/thumbnail.webp",
|
||||
"date": "2025-07-01T18:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/pride-campaign-2025"
|
||||
},
|
||||
{
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"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.webp",
|
||||
"date": "2023-02-01T20:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/accelerating-development"
|
||||
},
|
||||
{
|
||||
"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": "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.webp",
|
||||
"date": "2023-01-07T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/two-years-of-modrinth-history"
|
||||
},
|
||||
{
|
||||
"title": "Creators can now make money on Modrinth!",
|
||||
"summary": "Introducing the Creator Monetization Program allowing creators to earn revenue from their projects.",
|
||||
"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": "Experimenting with a different ad providers to find one which one works 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": "Continuing to improve the user interface after a great first week since Modrinth launched out of beta.",
|
||||
"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": "Releasing many new features and improvements, including a redesign!",
|
||||
"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.webp",
|
||||
"date": "2020-11-27T00:00:00.000Z",
|
||||
"link": "https://modrinth.com/news/article/whats-modrinth"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
|
||||
<ShortName>Modrinth mods</ShortName>
|
||||
<Description>Search for mods on Modrinth, the open source modding platform.</Description>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
<Image width="16" height="16" type="image/x-icon">https://modrinth.com/favicon.ico</Image>
|
||||
<Url type="text/html" method="get" template="https://modrinth.com/mods?q={searchTerms}"/>
|
||||
<Developer>Rinth, Inc.</Developer>
|
||||
<Attribution>Rinth, Inc.</Attribution>
|
||||
<moz:SearchForm>https://modrinth.com/mods</moz:SearchForm>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<OpenSearchDescription
|
||||
xmlns="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:moz="http://www.mozilla.org/2006/browser/search/"
|
||||
>
|
||||
<ShortName>Modrinth mods</ShortName>
|
||||
<Description>Search for mods on Modrinth, the open source modding platform.</Description>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
<Image width="16" height="16" type="image/x-icon">https://modrinth.com/favicon.ico</Image>
|
||||
<Url type="text/html" method="get" template="https://modrinth.com/mods?q={searchTerms}" />
|
||||
<Developer>Rinth, Inc.</Developer>
|
||||
<Attribution>Rinth, Inc.</Attribution>
|
||||
<moz:SearchForm>https://modrinth.com/mods</moz:SearchForm>
|
||||
</OpenSearchDescription>
|
||||
|
||||
119
apps/labrinth/.prettierignore
Normal file
119
apps/labrinth/.prettierignore
Normal file
@@ -0,0 +1,119 @@
|
||||
**/*.rs
|
||||
**/*.svg
|
||||
.sqlx
|
||||
|
||||
# Migrations existing before Prettier formatted them shall always be ignored,
|
||||
# as any changes to them will break existing deployments
|
||||
migrations/20200716160921_init.sql
|
||||
migrations/20200717192808_Make_categories_non-null.sql
|
||||
migrations/20200722031742_initial-release-channels.sql
|
||||
migrations/20200722033157_rename-release-channels.sql
|
||||
migrations/20200722153930_version-filename.sql
|
||||
migrations/20200730223151_more-not-null.sql
|
||||
migrations/20200812183213_unique-loaders.sql
|
||||
migrations/20200928020509_states.sql
|
||||
migrations/20200928033759_edit-states.sql
|
||||
migrations/20200928053955_make-url-not-null.sql
|
||||
migrations/20200928170310_create-users.sql
|
||||
migrations/20200928195220_add-roles-to-users.sql
|
||||
migrations/20200929034101_add-author-to-versions.sql
|
||||
migrations/20201001015631_not-null-github-avatar.sql
|
||||
migrations/20201003211651_make-name-null.sql
|
||||
migrations/20201014165954_create-statuses.sql
|
||||
migrations/20201021214908_extend-game-version.sql
|
||||
migrations/20201029190804_add-game-version-datetime.sql
|
||||
migrations/20201109200208_edit-teams.sql
|
||||
migrations/20201112052516_moderation.sql
|
||||
migrations/20201122043349_more-mod-data.sql
|
||||
migrations/20201213013358_remove-member-name.sql
|
||||
migrations/20210113202021_add-descriptions.sql
|
||||
migrations/20210118161307_remove-version-access.sql
|
||||
migrations/20210129224854_dependency-types.sql
|
||||
migrations/20210201001429_reports.sql
|
||||
migrations/20210224174945_notifications.sql
|
||||
migrations/20210301041252_follows.sql
|
||||
migrations/20210509010206_project_types.sql
|
||||
migrations/20210611024943_archived-status-notifications-icon-rejection-reasons.sql
|
||||
migrations/20210718223710_gallery.sql
|
||||
migrations/20210727160151_gallery_featuring_rejection_rename.sql
|
||||
migrations/20210805044459_more_gallery_info.sql
|
||||
migrations/20210820053031_version-optimization.sql
|
||||
migrations/20220210032959_remove-categories-unique.sql
|
||||
migrations/20220220035037_remove_downloads_table.sql
|
||||
migrations/20220329182356_file-sizes.sql
|
||||
migrations/20220526040434_dep-file-names.sql
|
||||
migrations/20220725204351_more-project-data.sql
|
||||
migrations/20220801184215_banned-users.sql
|
||||
migrations/20220902025606_initial-payouts.sql
|
||||
migrations/20220928044123_payouts-scheduling.sql
|
||||
migrations/20221107171016_payouts-overhaul.sql
|
||||
migrations/20221111163753_fix-precision.sql
|
||||
migrations/20221111202802_fix-precision-again.sql
|
||||
migrations/20221116200727_flame-anvil-integration.sql
|
||||
migrations/20221126222222_spdx-licenses.sql
|
||||
migrations/20221129161609_status-types-changes.sql
|
||||
migrations/20221206221021_webhook-sent.sql
|
||||
migrations/20221217041358_ordering-galore.sql
|
||||
migrations/20221217215337_drop-body_url-changelog_url.sql
|
||||
migrations/20221223192812_file-labels.sql
|
||||
migrations/20221227010515_project-colors.sql
|
||||
migrations/20230104214503_random-projects.sql
|
||||
migrations/20230127233123_loader-gv-mod.sql
|
||||
migrations/20230221212958_queue-date.sql
|
||||
migrations/20230324202117_messaging.sql
|
||||
migrations/20230414203933_threads-fix.sql
|
||||
migrations/20230416033024_deps-project-mandatory.sql
|
||||
migrations/20230421174120_remove-threads-ref.sql
|
||||
migrations/20230502141522_minos-support.sql
|
||||
migrations/20230628180115_kill-ory.sql
|
||||
migrations/20230710034250_flows.sql
|
||||
migrations/20230711004131_2fa.sql
|
||||
migrations/20230714235551_fix-2fa-type.sql
|
||||
migrations/20230808043323_threads-index.sql
|
||||
migrations/20230808162652_gv-loader-fixes.sql
|
||||
migrations/20230816085700_collections_and_more.sql
|
||||
migrations/20230913024611_organizations.sql
|
||||
migrations/20231005230721_dynamic-fields.sql
|
||||
migrations/20231016190056_oauth_provider.sql
|
||||
migrations/20231027195838_version_ordering.sql
|
||||
migrations/20231110010322_adds_game_version_minmax.sql
|
||||
migrations/20231113104902_games_metadata.sql
|
||||
migrations/20231114175920_new-payment-methods.sql
|
||||
migrations/20231115105022_plugins_datapacks_v3.sql
|
||||
migrations/20231116112800_side_types_overhaul.sql
|
||||
migrations/20231117073600_links_overhaul.sql
|
||||
migrations/20231122230639_oauth_client_metadata.sql
|
||||
migrations/20231124070100_renaming_consistency.sql
|
||||
migrations/20231125080100_drops_mods_dp_plugins.sql
|
||||
migrations/20231130153100_loader_fields_loaders.sql
|
||||
migrations/20231205095400_remaining_loader_field_loaders.sql
|
||||
migrations/20231211184922_collections_description_nullable.sql
|
||||
migrations/20231213103100_enforces-owner-unique.sql
|
||||
migrations/20240104203711_orgs-names.sql
|
||||
migrations/20240115052708_base62-helper-functions.sql
|
||||
migrations/20240131224610_moderation_packs.sql
|
||||
migrations/20240221215354_moderation_pack_fixes.sql
|
||||
migrations/20240319195753_threads-updates.sql
|
||||
migrations/20240701213559_remove-user-names.sql
|
||||
migrations/20240702213250_subscriptions.sql
|
||||
migrations/20240907192840_raw-images.sql
|
||||
migrations/20240911044738_payouts-updates.sql
|
||||
migrations/20240923163452_charges-fix.sql
|
||||
migrations/20241121232522_friends.sql
|
||||
migrations/20241204190127_revenue_updates.sql
|
||||
migrations/20241224001114_teams-precision-fix.sql
|
||||
migrations/20250117013050_missing-primary-keys.sql
|
||||
migrations/20250519184051_shared-instances.sql
|
||||
migrations/20250523174544_project-versions-environments.sql
|
||||
migrations/20250608183828_random-project-index.sql
|
||||
migrations/20250609134334_spatial-random-project-index.sql
|
||||
migrations/20250611164523_lowercase-user-email-index.sql
|
||||
migrations/20250628213541_payout-sources-recording.sql
|
||||
migrations/20250725230041_reports-closed-status-index.sql
|
||||
migrations/20250727184120_user-newsletter-subscription-column.sql
|
||||
migrations/20250804221014_users-redeemals.sql
|
||||
migrations/20250805001654_product-prices-public.sql
|
||||
|
||||
# Prettier reformats some of the PostgreSQL-specific COPY syntax here,
|
||||
# which is very likely to break things
|
||||
fixtures/labrinth-seed-data-202508052143.sql
|
||||
@@ -76,19 +76,16 @@ thiserror.workspace = true
|
||||
either.workspace = true
|
||||
|
||||
sqlx = { workspace = true, features = [
|
||||
"runtime-tokio",
|
||||
"tls-rustls-ring",
|
||||
"postgres",
|
||||
"chrono",
|
||||
"macros",
|
||||
"migrate",
|
||||
"rust_decimal",
|
||||
"json",
|
||||
] }
|
||||
rust_decimal = { workspace = true, features = [
|
||||
"serde-with-float",
|
||||
"serde-with-str",
|
||||
"runtime-tokio",
|
||||
"tls-rustls-ring",
|
||||
"postgres",
|
||||
"chrono",
|
||||
"macros",
|
||||
"migrate",
|
||||
"rust_decimal",
|
||||
"json",
|
||||
] }
|
||||
rust_decimal = { workspace = true, features = ["serde-with-float", "serde-with-str"] }
|
||||
redis = { workspace = true, features = ["tokio-comp", "ahash", "r2d2"] }
|
||||
deadpool-redis.workspace = true
|
||||
clickhouse = { workspace = true, features = ["uuid", "time"] }
|
||||
@@ -101,7 +98,23 @@ tar.workspace = true
|
||||
sentry.workspace = true
|
||||
sentry-actix.workspace = true
|
||||
|
||||
image = { workspace = true, features = ["avif", "bmp", "dds", "exr", "ff", "gif", "hdr", "ico", "jpeg", "png", "pnm", "qoi", "tga", "tiff", "webp"] }
|
||||
image = { workspace = true, features = [
|
||||
"avif",
|
||||
"bmp",
|
||||
"dds",
|
||||
"exr",
|
||||
"ff",
|
||||
"gif",
|
||||
"hdr",
|
||||
"ico",
|
||||
"jpeg",
|
||||
"png",
|
||||
"pnm",
|
||||
"qoi",
|
||||
"tga",
|
||||
"tiff",
|
||||
"webp",
|
||||
] }
|
||||
color-thief.workspace = true
|
||||
webp.workspace = true
|
||||
|
||||
@@ -120,7 +133,10 @@ ariadne.workspace = true
|
||||
clap = { workspace = true, features = ["derive"] }
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
tikv-jemallocator = { workspace = true, features = ["profiling", "unprefixed_malloc_on_supported_platforms"] }
|
||||
tikv-jemallocator = { workspace = true, features = [
|
||||
"profiling",
|
||||
"unprefixed_malloc_on_supported_platforms",
|
||||
] }
|
||||
tikv-jemalloc-ctl = { workspace = true, features = ["stats"] }
|
||||
jemalloc_pprof = { workspace = true, features = ["flamegraph"] }
|
||||
|
||||
|
||||
@@ -1,78 +1,78 @@
|
||||
:root {
|
||||
--color-bg: #16181c;
|
||||
--color-fg: #b0bac5;
|
||||
--color-section-bg: #26292f;
|
||||
--color-bg: #16181c;
|
||||
--color-fg: #b0bac5;
|
||||
--color-section-bg: #26292f;
|
||||
|
||||
--content-width: 30%;
|
||||
--content-max-width: 300px;
|
||||
--content-padding: 1.5rem;
|
||||
--edge-rounding: 1rem;
|
||||
--content-width: 30%;
|
||||
--content-max-width: 300px;
|
||||
--content-padding: 1.5rem;
|
||||
--edge-rounding: 1rem;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
color: var(--color-fg);
|
||||
background-color: var(--color-bg);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-family:
|
||||
Inter,
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
'Segoe UI',
|
||||
Helvetica Neue,
|
||||
Helvetica,
|
||||
Oxygen,
|
||||
Ubuntu,
|
||||
Roboto,
|
||||
Cantarell,
|
||||
Fira Sans,
|
||||
Droid Sans,
|
||||
'Apple Color Emoji',
|
||||
'Segoe UI Emoji',
|
||||
Arial,
|
||||
sans-serif;
|
||||
color: var(--color-fg);
|
||||
background-color: var(--color-bg);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-family:
|
||||
Inter,
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
'Segoe UI',
|
||||
Helvetica Neue,
|
||||
Helvetica,
|
||||
Oxygen,
|
||||
Ubuntu,
|
||||
Roboto,
|
||||
Cantarell,
|
||||
Fira Sans,
|
||||
Droid Sans,
|
||||
'Apple Color Emoji',
|
||||
'Segoe UI Emoji',
|
||||
Arial,
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
.content {
|
||||
background-color: var(--color-section-bg);
|
||||
width: var(--content-width);
|
||||
max-width: var(--content-max-width);
|
||||
border-radius: var(--edge-rounding);
|
||||
padding: var(--content-padding);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
background-color: var(--color-section-bg);
|
||||
width: var(--content-width);
|
||||
max-width: var(--content-max-width);
|
||||
border-radius: var(--edge-rounding);
|
||||
padding: var(--content-padding);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.content h2 {
|
||||
margin-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-bottom: 2rem;
|
||||
border-radius: 1.5rem;
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-bottom: 2rem;
|
||||
border-radius: 1.5rem;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #4f9cff;
|
||||
text-decoration: underline;
|
||||
color: #4f9cff;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #4f9cff;
|
||||
color: #4f9cff;
|
||||
}
|
||||
|
||||
img {
|
||||
image-rendering: pixelated;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
{
|
||||
"name": "@modrinth/labrinth",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"dev": "cargo run",
|
||||
"//": "labrinth integration tests require a lot of disk space, so in the standard GitHub Actions",
|
||||
"//": "runners we must remove useless development tools from the base image, which frees up ~20 GiB.",
|
||||
"//": "The command commented out below can be used in CI to debug what is taking up space:",
|
||||
"//": "sudo du -xh --max-depth=4 / | sort -rh | curl -X POST --data-urlencode content@/dev/fd/0 https://api.mclo.gs/1/log",
|
||||
"test": "if-ci sudo rm -rf /usr/local/lib/android /usr/local/.ghcup /opt/hostedtoolcache/CodeQL /usr/share/swift && cargo nextest run --all-targets --no-fail-fast"
|
||||
}
|
||||
"name": "@modrinth/labrinth",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"fix:ancillary": "prettier --write .",
|
||||
"dev": "cargo run",
|
||||
"//": "labrinth integration tests require a lot of disk space, so in the standard GitHub Actions",
|
||||
"//": "runners we must remove useless development tools from the base image, which frees up ~20 GiB.",
|
||||
"//": "The command commented out below can be used in CI to debug what is taking up space:",
|
||||
"//": "sudo du -xh --max-depth=4 / | sort -rh | curl -X POST --data-urlencode content@/dev/fd/0 https://api.mclo.gs/1/log",
|
||||
"test": "if-ci sudo rm -rf /usr/local/lib/android /usr/local/.ghcup /opt/hostedtoolcache/CodeQL /usr/share/swift && cargo nextest run --all-targets --no-fail-fast"
|
||||
},
|
||||
"prettier": "@modrinth/tooling-config/labrinth.prettier.config.cjs"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,22 +1,22 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/auth/style.css" />
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<title>Error - Modrinth</title>
|
||||
</head>
|
||||
<head>
|
||||
<link rel="stylesheet" href="/auth/style.css" />
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<title>Error - Modrinth</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="content">
|
||||
<img src="/logo.svg" alt="Modrinth Logo" class="logo" />
|
||||
<h2>{{ code }}</h2>
|
||||
<p>An error has occurred during the authentication process.</p>
|
||||
<p>
|
||||
Try closing this window and signing in again. Join
|
||||
<a href="https://discord.modrinth.com">our Discord server</a> to get help if this error
|
||||
persists after three attempts.
|
||||
</p>
|
||||
<p><b>Debug information:</b> {{ message }}</p>
|
||||
</div>
|
||||
</body>
|
||||
<body>
|
||||
<div class="content">
|
||||
<img src="/logo.svg" alt="Modrinth Logo" class="logo" />
|
||||
<h2>{{ code }}</h2>
|
||||
<p>An error has occurred during the authentication process.</p>
|
||||
<p>
|
||||
Try closing this window and signing in again. Join
|
||||
<a href="https://discord.modrinth.com">our Discord server</a> to get help if this error
|
||||
persists after three attempts.
|
||||
</p>
|
||||
<p><b>Debug information:</b> {{ message }}</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/auth/style.css" />
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<title>Login - Modrinth</title>
|
||||
</head>
|
||||
<head>
|
||||
<link rel="stylesheet" href="/auth/style.css" />
|
||||
<link rel="icon" type="image/png" href="/favicon.ico" />
|
||||
<title>Login - Modrinth</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="content">
|
||||
<img src="{{ icon }}" alt="{{ name }}" class="logo" />
|
||||
<h2>Login Successful</h2>
|
||||
<p>Hey, {{ name }}! You can now safely close this tab.</p>
|
||||
</div>
|
||||
</body>
|
||||
<body>
|
||||
<div class="content">
|
||||
<img src="{{ icon }}" alt="{{ name }}" class="logo" />
|
||||
<h2>Login Successful</h2>
|
||||
<p>Hey, {{ name }}! You can now safely close this tab.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
119
apps/labrinth/tests/fixtures/dummy_data.sql
vendored
119
apps/labrinth/tests/fixtures/dummy_data.sql
vendored
@@ -5,10 +5,13 @@
|
||||
-- 'Friend' and 'enemy' function like 'user', but we can use them to simulate 'other' users that may or may not be able to access certain things
|
||||
-- IDs 1-5, 1-5
|
||||
INSERT INTO users (id, username, email, role) VALUES (1, 'Admin', 'admin@modrinth.com', 'admin');
|
||||
INSERT INTO users (id, username, email, role) VALUES (2, 'Moderator', 'moderator@modrinth.com', 'moderator');
|
||||
INSERT INTO users (id, username, email, role)
|
||||
VALUES (2, 'Moderator', 'moderator@modrinth.com', 'moderator');
|
||||
INSERT INTO users (id, username, email, role) VALUES (3, 'User', 'user@modrinth.com', 'developer');
|
||||
INSERT INTO users (id, username, email, role) VALUES (4, 'Friend', 'friend@modrinth.com', 'developer');
|
||||
INSERT INTO users (id, username, email, role) VALUES (5, 'Enemy', 'enemy@modrinth.com', 'developer');
|
||||
INSERT INTO users (id, username, email, role)
|
||||
VALUES (4, 'Friend', 'friend@modrinth.com', 'developer');
|
||||
INSERT INTO users (id, username, email, role)
|
||||
VALUES (5, 'Enemy', 'enemy@modrinth.com', 'developer');
|
||||
|
||||
-- Full PATs for each user, with different scopes
|
||||
-- These are not legal PATs, as they contain all scopes- they mimic permissions of a logged in user
|
||||
@@ -20,73 +23,88 @@ INSERT INTO pats (id, user_id, name, access_token, scopes, expires) VALUES (53,
|
||||
INSERT INTO pats (id, user_id, name, access_token, scopes, expires) VALUES (54, 5, 'enemy-pat', 'mrp_patenemy', $1, '2030-08-18 15:48:58.435729+00');
|
||||
|
||||
INSERT INTO loaders (id, loader) VALUES (5, 'fabric');
|
||||
INSERT INTO loaders_project_types (joining_loader_id, joining_project_type_id) VALUES (5,1);
|
||||
INSERT INTO loaders_project_types (joining_loader_id, joining_project_type_id) VALUES (5, 1);
|
||||
|
||||
INSERT INTO loaders (id, loader) VALUES (6, 'forge');
|
||||
INSERT INTO loaders_project_types (joining_loader_id, joining_project_type_id) VALUES (6,1);
|
||||
INSERT INTO loaders_project_types (joining_loader_id, joining_project_type_id) VALUES (6, 1);
|
||||
|
||||
INSERT INTO loaders (id, loader, metadata) VALUES (7, 'bukkit', '{"platform":false}'::jsonb);
|
||||
INSERT INTO loaders (id, loader, metadata) VALUES (8, 'waterfall', '{"platform":true}'::jsonb);
|
||||
INSERT INTO loaders (id, loader, metadata) VALUES (7, 'bukkit', '{"platform":false}'::JSONB);
|
||||
INSERT INTO loaders (id, loader, metadata) VALUES (8, 'waterfall', '{"platform":true}'::JSONB);
|
||||
|
||||
-- Adds dummies to mrpack_loaders
|
||||
INSERT INTO loader_field_enum_values (enum_id, value) SELECT id, 'fabric' FROM loader_field_enums WHERE enum_name = 'mrpack_loaders';
|
||||
INSERT INTO loader_field_enum_values (enum_id, value) SELECT id, 'forge' FROM loader_field_enums WHERE enum_name = 'mrpack_loaders';
|
||||
INSERT INTO loader_field_enum_values (enum_id, value)
|
||||
SELECT id, 'fabric' FROM loader_field_enums WHERE enum_name = 'mrpack_loaders';
|
||||
INSERT INTO loader_field_enum_values (enum_id, value)
|
||||
SELECT id, 'forge' FROM loader_field_enums WHERE enum_name = 'mrpack_loaders';
|
||||
|
||||
INSERT INTO loaders_project_types_games (loader_id, project_type_id, game_id) SELECT joining_loader_id, joining_project_type_id, 1 FROM loaders_project_types WHERE joining_loader_id = 5;
|
||||
INSERT INTO loaders_project_types_games (loader_id, project_type_id, game_id) SELECT joining_loader_id, joining_project_type_id, 1 FROM loaders_project_types WHERE joining_loader_id = 6;
|
||||
INSERT INTO loaders_project_types_games (loader_id, project_type_id, game_id)
|
||||
SELECT joining_loader_id, joining_project_type_id, 1
|
||||
FROM loaders_project_types
|
||||
WHERE joining_loader_id = 5;
|
||||
INSERT INTO loaders_project_types_games (loader_id, project_type_id, game_id)
|
||||
SELECT joining_loader_id, joining_project_type_id, 1
|
||||
FROM loaders_project_types
|
||||
WHERE joining_loader_id = 6;
|
||||
|
||||
-- Dummy-data only optional field, as we don't have any yet
|
||||
INSERT INTO loader_fields (
|
||||
field,
|
||||
field_type,
|
||||
optional
|
||||
) VALUES (
|
||||
'test_fabric_optional',
|
||||
'integer',
|
||||
true
|
||||
);
|
||||
INSERT INTO loader_fields_loaders(loader_id, loader_field_id)
|
||||
SELECT l.id, lf.id FROM loaders l CROSS JOIN loader_fields lf WHERE lf.field = 'test_fabric_optional' AND l.loader = 'fabric' ON CONFLICT DO NOTHING;
|
||||
INSERT INTO loader_fields
|
||||
(field, field_type, optional)
|
||||
VALUES
|
||||
('test_fabric_optional', 'integer', TRUE);
|
||||
INSERT INTO loader_fields_loaders (loader_id, loader_field_id)
|
||||
SELECT l.id, lf.id
|
||||
FROM
|
||||
loaders AS l
|
||||
CROSS JOIN loader_fields AS lf
|
||||
WHERE lf.field = 'test_fabric_optional' AND l.loader = 'fabric'
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Sample game versions, loaders, categories
|
||||
-- Game versions is '2'
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, created)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, created)
|
||||
VALUES (2, '1.20.1', '{"type":"release","major":false}', '2021-08-18 15:48:58.435729+00');
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, created)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, created)
|
||||
VALUES (2, '1.20.2', '{"type":"release","major":false}', '2021-08-18 15:48:59.435729+00');
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, created)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, created)
|
||||
VALUES (2, '1.20.3', '{"type":"release","major":false}', '2021-08-18 15:49:00.435729+00');
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, created)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, created)
|
||||
VALUES (2, '1.20.4', '{"type":"beta","major":false}', '2021-08-18 15:49:01.435729+00');
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, created)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, created)
|
||||
VALUES (2, '1.20.5', '{"type":"release","major":true}', '2061-08-18 15:49:02.435729+00');
|
||||
|
||||
-- Also add 'Ordering_Negative1' and 'Ordering_Positive100' to game versions (to test ordering override)
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, ordering)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, ordering)
|
||||
VALUES (2, 'Ordering_Negative1', '{"type":"release","major":false}', -1);
|
||||
INSERT INTO loader_field_enum_values(enum_id, value, metadata, ordering)
|
||||
INSERT INTO loader_field_enum_values (enum_id, value, metadata, ordering)
|
||||
VALUES (2, 'Ordering_Positive100', '{"type":"release","major":false}', 100);
|
||||
|
||||
INSERT INTO loader_fields_loaders(loader_id, loader_field_id)
|
||||
SELECT l.id, lf.id FROM loaders l CROSS JOIN loader_fields lf WHERE lf.field IN ('game_versions','environment') ON CONFLICT DO NOTHING;
|
||||
INSERT INTO loader_fields_loaders (loader_id, loader_field_id)
|
||||
SELECT l.id, lf.id
|
||||
FROM
|
||||
loaders AS l
|
||||
CROSS JOIN loader_fields AS lf
|
||||
WHERE lf.field IN ('game_versions', 'environment')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO categories (id, category, project_type) VALUES
|
||||
(51, 'combat', 1),
|
||||
(52, 'decoration', 1),
|
||||
(53, 'economy', 1),
|
||||
(54, 'food', 1),
|
||||
(55, 'magic', 1),
|
||||
(56, 'mobs', 1),
|
||||
(57, 'optimization', 1);
|
||||
INSERT INTO categories (id, category, project_type)
|
||||
VALUES
|
||||
(51, 'combat', 1),
|
||||
(52, 'decoration', 1),
|
||||
(53, 'economy', 1),
|
||||
(54, 'food', 1),
|
||||
(55, 'magic', 1),
|
||||
(56, 'mobs', 1),
|
||||
(57, 'optimization', 1);
|
||||
|
||||
INSERT INTO categories (id, category, project_type) VALUES
|
||||
(101, 'combat', 2),
|
||||
(102, 'decoration', 2),
|
||||
(103, 'economy', 2),
|
||||
(104, 'food', 2),
|
||||
(105, 'magic', 2),
|
||||
(106, 'mobs', 2),
|
||||
(107, 'optimization', 2);
|
||||
INSERT INTO categories (id, category, project_type)
|
||||
VALUES
|
||||
(101, 'combat', 2),
|
||||
(102, 'decoration', 2),
|
||||
(103, 'economy', 2),
|
||||
(104, 'food', 2),
|
||||
(105, 'magic', 2),
|
||||
(106, 'mobs', 2),
|
||||
(107, 'optimization', 2);
|
||||
|
||||
-- Create dummy oauth client, secret_hash is SHA512 hash of full lowercase alphabet
|
||||
INSERT INTO oauth_clients (
|
||||
@@ -105,9 +123,10 @@ VALUES (
|
||||
'4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1',
|
||||
3
|
||||
);
|
||||
INSERT INTO oauth_client_redirect_uris (id, client_id, uri) VALUES (1, 1, 'https://modrinth.com/oauth_callback');
|
||||
INSERT INTO oauth_client_redirect_uris (id, client_id, uri)
|
||||
VALUES (1, 1, 'https://modrinth.com/oauth_callback');
|
||||
|
||||
-- Create dummy data table to mark that this file has been run
|
||||
CREATE TABLE dummy_data (
|
||||
update_id bigint PRIMARY KEY
|
||||
);
|
||||
update_id BIGINT PRIMARY KEY
|
||||
);
|
||||
|
||||
@@ -18,9 +18,11 @@
|
||||
"moderation:fix": "turbo run fix --filter=@modrinth/moderation",
|
||||
"moderation:intl:extract": "pnpm run --filter=@modrinth/moderation intl:extract",
|
||||
"build": "turbo run build --continue",
|
||||
"lint": "turbo run lint --continue",
|
||||
"lint": "turbo run lint lint:ancillary --continue",
|
||||
"lint:ancillary": "prettier --check .github *.*",
|
||||
"test": "turbo run test --continue",
|
||||
"fix": "turbo run fix --continue",
|
||||
"fix": "turbo run fix fix:ancillary --continue",
|
||||
"fix:ancillary": "prettier --write .github *.*",
|
||||
"ci": "turbo run lint test --continue",
|
||||
"intl:extract": "pnpm ui:intl:extract && pnpm web:intl:extract && pnpm app:intl:extract && pnpm moderation:intl:extract"
|
||||
},
|
||||
@@ -37,5 +39,5 @@
|
||||
"readable-stream@2.3.8": "patches/readable-stream@2.3.8.patch"
|
||||
}
|
||||
},
|
||||
"prettier": "@modrinth/tooling-config/prettier.config.js"
|
||||
"prettier": "@modrinth/tooling-config/prettier.config.cjs"
|
||||
}
|
||||
|
||||
15
packages/app-lib/.prettierignore
Normal file
15
packages/app-lib/.prettierignore
Normal file
@@ -0,0 +1,15 @@
|
||||
**/*.rs
|
||||
.sqlx
|
||||
|
||||
# Migrations existing before Prettier formatted them shall always be ignored,
|
||||
# as any changes to them will break existing deployments
|
||||
migrations/20240711194701_init.sql
|
||||
migrations/20240813205023_drop-active-unique.sql
|
||||
migrations/20240930001852_disable-personalized-ads.sql
|
||||
migrations/20241222013857_feature-flags.sql
|
||||
migrations/20250318160526_protocol-versions.sql
|
||||
migrations/20250408181656_add-join-log.sql
|
||||
migrations/20250413162050_skin-selector.sql
|
||||
migrations/20250428171350_add-profile-feature-version.sql
|
||||
migrations/20250429150111_add-attached-world-data.sql
|
||||
migrations/20250514181748_skin_nametag_setting.sql
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "theseus"
|
||||
version = "1.0.0-local" # The actual version is set by the theseus-build workflow on tagging
|
||||
version = "1.0.0-local" # The actual version is set by the theseus-build workflow on tagging
|
||||
authors = ["Jai A <jaiagr+gpg@pm.me>"]
|
||||
edition.workspace = true
|
||||
|
||||
@@ -15,7 +15,14 @@ sha2.workspace = true
|
||||
url = { workspace = true, features = ["serde"] }
|
||||
uuid = { workspace = true, features = ["serde", "v4"] }
|
||||
zip.workspace = true
|
||||
async_zip = { workspace = true, features = ["chrono", "tokio-fs", "deflate", "bzip2", "zstd", "deflate64"] }
|
||||
async_zip = { workspace = true, features = [
|
||||
"chrono",
|
||||
"tokio-fs",
|
||||
"deflate",
|
||||
"bzip2",
|
||||
"zstd",
|
||||
"deflate64",
|
||||
] }
|
||||
flate2.workspace = true
|
||||
tempfile.workspace = true
|
||||
dashmap = { workspace = true, features = ["serde"] }
|
||||
@@ -51,8 +58,27 @@ indicatif = { workspace = true, optional = true }
|
||||
|
||||
async-tungstenite = { workspace = true, features = ["tokio-runtime", "tokio-rustls-webpki-roots"] }
|
||||
futures = { workspace = true, features = ["async-await", "alloc"] }
|
||||
reqwest = { workspace = true, features = ["json", "stream", "deflate", "gzip", "brotli", "rustls-tls-webpki-roots", "charset", "http2", "macos-system-configuration", "multipart"] }
|
||||
tokio = { workspace = true, features = ["time", "io-util", "net", "sync", "fs", "macros", "process"] }
|
||||
reqwest = { workspace = true, features = [
|
||||
"json",
|
||||
"stream",
|
||||
"deflate",
|
||||
"gzip",
|
||||
"brotli",
|
||||
"rustls-tls-webpki-roots",
|
||||
"charset",
|
||||
"http2",
|
||||
"macos-system-configuration",
|
||||
"multipart",
|
||||
] }
|
||||
tokio = { workspace = true, features = [
|
||||
"time",
|
||||
"io-util",
|
||||
"net",
|
||||
"sync",
|
||||
"fs",
|
||||
"macros",
|
||||
"process",
|
||||
] }
|
||||
tokio-util = { workspace = true, features = ["compat", "io", "io-util"] }
|
||||
async-recursion.workspace = true
|
||||
fs4 = { workspace = true, features = ["tokio"] }
|
||||
@@ -72,7 +98,14 @@ p256 = { workspace = true, features = ["ecdsa"] }
|
||||
rand.workspace = true
|
||||
base64.workspace = true
|
||||
|
||||
sqlx = { workspace = true, features = ["runtime-tokio", "sqlite", "macros", "migrate", "json", "uuid"] }
|
||||
sqlx = { workspace = true, features = [
|
||||
"runtime-tokio",
|
||||
"sqlite",
|
||||
"macros",
|
||||
"migrate",
|
||||
"json",
|
||||
"uuid",
|
||||
] }
|
||||
|
||||
quartz_nbt = { workspace = true, features = ["serde"] }
|
||||
hickory-resolver.workspace = true
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
{
|
||||
"name": "@modrinth/app-lib",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
}
|
||||
"name": "@modrinth/app-lib",
|
||||
"scripts": {
|
||||
"build": "cargo build --release",
|
||||
"lint": "cargo fmt --check && cargo clippy --all-targets",
|
||||
"lint:ancillary": "prettier --check .",
|
||||
"fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt",
|
||||
"fix:ancillary": "prettier --write .",
|
||||
"test": "cargo nextest run --all-targets --no-fail-fast"
|
||||
},
|
||||
"prettier": "@modrinth/tooling-config/app-lib.prettier.config.cjs"
|
||||
}
|
||||
|
||||
1
packages/ariadne/.prettierignore
Normal file
1
packages/ariadne/.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
**/*.rs
|
||||
1
packages/assets/.prettierignore
Normal file
1
packages/assets/.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
**/*.svg
|
||||
@@ -8,26 +8,26 @@ import _ArrowBigUpDashIcon from './icons/arrow-big-up-dash.svg?component'
|
||||
import _AsteriskIcon from './icons/asterisk.svg?component'
|
||||
import _BadgeCheckIcon from './icons/badge-check.svg?component'
|
||||
import _BanIcon from './icons/ban.svg?component'
|
||||
import _BellIcon from './icons/bell.svg?component'
|
||||
import _BellRingIcon from './icons/bell-ring.svg?component'
|
||||
import _BellIcon from './icons/bell.svg?component'
|
||||
import _BlocksIcon from './icons/blocks.svg?component'
|
||||
import _BoldIcon from './icons/bold.svg?component'
|
||||
import _BookIcon from './icons/book.svg?component'
|
||||
import _BookOpenIcon from './icons/book-open.svg?component'
|
||||
import _BookTextIcon from './icons/book-text.svg?component'
|
||||
import _BookIcon from './icons/book.svg?component'
|
||||
import _BookmarkIcon from './icons/bookmark.svg?component'
|
||||
import _BotIcon from './icons/bot.svg?component'
|
||||
import _BoxIcon from './icons/box.svg?component'
|
||||
import _BoxImportIcon from './icons/box-import.svg?component'
|
||||
import _BoxIcon from './icons/box.svg?component'
|
||||
import _BracesIcon from './icons/braces.svg?component'
|
||||
import _BrushCleaningIcon from './icons/brush-cleaning.svg?component'
|
||||
import _CalendarIcon from './icons/calendar.svg?component'
|
||||
import _CardIcon from './icons/card.svg?component'
|
||||
import _ChangeSkinIcon from './icons/change-skin.svg?component'
|
||||
import _ChartIcon from './icons/chart.svg?component'
|
||||
import _CheckIcon from './icons/check.svg?component'
|
||||
import _CheckCheckIcon from './icons/check-check.svg?component'
|
||||
import _CheckCircleIcon from './icons/check-circle.svg?component'
|
||||
import _CheckIcon from './icons/check.svg?component'
|
||||
import _ChevronLeftIcon from './icons/chevron-left.svg?component'
|
||||
import _ChevronRightIcon from './icons/chevron-right.svg?component'
|
||||
import _ClearIcon from './icons/clear.svg?component'
|
||||
@@ -56,13 +56,13 @@ import _EditIcon from './icons/edit.svg?component'
|
||||
import _EllipsisVerticalIcon from './icons/ellipsis-vertical.svg?component'
|
||||
import _ExpandIcon from './icons/expand.svg?component'
|
||||
import _ExternalIcon from './icons/external.svg?component'
|
||||
import _EyeIcon from './icons/eye.svg?component'
|
||||
import _EyeOffIcon from './icons/eye-off.svg?component'
|
||||
import _FileIcon from './icons/file.svg?component'
|
||||
import _EyeIcon from './icons/eye.svg?component'
|
||||
import _FileArchiveIcon from './icons/file-archive.svg?component'
|
||||
import _FileTextIcon from './icons/file-text.svg?component'
|
||||
import _FilterIcon from './icons/filter.svg?component'
|
||||
import _FileIcon from './icons/file.svg?component'
|
||||
import _FilterXIcon from './icons/filter-x.svg?component'
|
||||
import _FilterIcon from './icons/filter.svg?component'
|
||||
import _FolderArchiveIcon from './icons/folder-archive.svg?component'
|
||||
import _FolderOpenIcon from './icons/folder-open.svg?component'
|
||||
import _FolderSearchIcon from './icons/folder-search.svg?component'
|
||||
@@ -79,8 +79,8 @@ import _HashIcon from './icons/hash.svg?component'
|
||||
import _Heading1Icon from './icons/heading-1.svg?component'
|
||||
import _Heading2Icon from './icons/heading-2.svg?component'
|
||||
import _Heading3Icon from './icons/heading-3.svg?component'
|
||||
import _HeartIcon from './icons/heart.svg?component'
|
||||
import _HeartHandshakeIcon from './icons/heart-handshake.svg?component'
|
||||
import _HeartIcon from './icons/heart.svg?component'
|
||||
import _HistoryIcon from './icons/history.svg?component'
|
||||
import _HomeIcon from './icons/home.svg?component'
|
||||
import _ImageIcon from './icons/image.svg?component'
|
||||
@@ -96,13 +96,13 @@ import _LeftArrowIcon from './icons/left-arrow.svg?component'
|
||||
import _LibraryIcon from './icons/library.svg?component'
|
||||
import _LightBulbIcon from './icons/light-bulb.svg?component'
|
||||
import _LinkIcon from './icons/link.svg?component'
|
||||
import _ListIcon from './icons/list.svg?component'
|
||||
import _ListBulletedIcon from './icons/list-bulleted.svg?component'
|
||||
import _ListEndIcon from './icons/list-end.svg?component'
|
||||
import _ListOrderedIcon from './icons/list-ordered.svg?component'
|
||||
import _ListIcon from './icons/list.svg?component'
|
||||
import _LoaderIcon from './icons/loader.svg?component'
|
||||
import _LockIcon from './icons/lock.svg?component'
|
||||
import _LockOpenIcon from './icons/lock-open.svg?component'
|
||||
import _LockIcon from './icons/lock.svg?component'
|
||||
import _LogInIcon from './icons/log-in.svg?component'
|
||||
import _LogOutIcon from './icons/log-out.svg?component'
|
||||
import _MailIcon from './icons/mail.svg?component'
|
||||
@@ -113,8 +113,8 @@ import _MessageIcon from './icons/message.svg?component'
|
||||
import _MicrophoneIcon from './icons/microphone.svg?component'
|
||||
import _MinimizeIcon from './icons/minimize.svg?component'
|
||||
import _MinusIcon from './icons/minus.svg?component'
|
||||
import _MonitorIcon from './icons/monitor.svg?component'
|
||||
import _MonitorSmartphoneIcon from './icons/monitor-smartphone.svg?component'
|
||||
import _MonitorIcon from './icons/monitor.svg?component'
|
||||
import _MoonIcon from './icons/moon.svg?component'
|
||||
import _MoreHorizontalIcon from './icons/more-horizontal.svg?component'
|
||||
import _MoreVerticalIcon from './icons/more-vertical.svg?component'
|
||||
@@ -123,16 +123,16 @@ import _NoSignalIcon from './icons/no-signal.svg?component'
|
||||
import _NotepadTextIcon from './icons/notepad-text.svg?component'
|
||||
import _OmorphiaIcon from './icons/omorphia.svg?component'
|
||||
import _OrganizationIcon from './icons/organization.svg?component'
|
||||
import _PackageIcon from './icons/package.svg?component'
|
||||
import _PackageClosedIcon from './icons/package-closed.svg?component'
|
||||
import _PackageOpenIcon from './icons/package-open.svg?component'
|
||||
import _PackageIcon from './icons/package.svg?component'
|
||||
import _PaintbrushIcon from './icons/paintbrush.svg?component'
|
||||
import _PickaxeIcon from './icons/pickaxe.svg?component'
|
||||
import _PlayIcon from './icons/play.svg?component'
|
||||
import _PlugIcon from './icons/plug.svg?component'
|
||||
import _PlusIcon from './icons/plus.svg?component'
|
||||
import _RadioButtonIcon from './icons/radio-button.svg?component'
|
||||
import _RadioButtonCheckedIcon from './icons/radio-button-checked.svg?component'
|
||||
import _RadioButtonIcon from './icons/radio-button.svg?component'
|
||||
import _ReceiptTextIcon from './icons/receipt-text.svg?component'
|
||||
import _RedoIcon from './icons/redo.svg?component'
|
||||
import _ReplyIcon from './icons/reply.svg?component'
|
||||
@@ -147,8 +147,8 @@ import _ScaleIcon from './icons/scale.svg?component'
|
||||
import _ScanEyeIcon from './icons/scan-eye.svg?component'
|
||||
import _SearchIcon from './icons/search.svg?component'
|
||||
import _SendIcon from './icons/send.svg?component'
|
||||
import _ServerIcon from './icons/server.svg?component'
|
||||
import _ServerPlusIcon from './icons/server-plus.svg?component'
|
||||
import _ServerIcon from './icons/server.svg?component'
|
||||
import _SettingsIcon from './icons/settings.svg?component'
|
||||
import _ShareIcon from './icons/share.svg?component'
|
||||
import _ShieldIcon from './icons/shield.svg?component'
|
||||
@@ -177,23 +177,23 @@ import _TrashIcon from './icons/trash.svg?component'
|
||||
import _TriangleAlertIcon from './icons/triangle-alert.svg?component'
|
||||
import _UnderlineIcon from './icons/underline.svg?component'
|
||||
import _UndoIcon from './icons/undo.svg?component'
|
||||
import _UnknownIcon from './icons/unknown.svg?component'
|
||||
import _UnknownDonationIcon from './icons/unknown-donation.svg?component'
|
||||
import _UnknownIcon from './icons/unknown.svg?component'
|
||||
import _UnlinkIcon from './icons/unlink.svg?component'
|
||||
import _UnplugIcon from './icons/unplug.svg?component'
|
||||
import _UpdatedIcon from './icons/updated.svg?component'
|
||||
import _UploadIcon from './icons/upload.svg?component'
|
||||
import _UserIcon from './icons/user.svg?component'
|
||||
import _UserPlusIcon from './icons/user-plus.svg?component'
|
||||
import _UserXIcon from './icons/user-x.svg?component'
|
||||
import _UserIcon from './icons/user.svg?component'
|
||||
import _UsersIcon from './icons/users.svg?component'
|
||||
import _VersionIcon from './icons/version.svg?component'
|
||||
import _WikiIcon from './icons/wiki.svg?component'
|
||||
import _WindowIcon from './icons/window.svg?component'
|
||||
import _WorldIcon from './icons/world.svg?component'
|
||||
import _WrenchIcon from './icons/wrench.svg?component'
|
||||
import _XIcon from './icons/x.svg?component'
|
||||
import _XCircleIcon from './icons/x-circle.svg?component'
|
||||
import _XIcon from './icons/x.svg?component'
|
||||
import _ZoomInIcon from './icons/zoom-in.svg?component'
|
||||
import _ZoomOutIcon from './icons/zoom-out.svg?component'
|
||||
|
||||
|
||||
2
packages/blog/.prettierignore
Normal file
2
packages/blog/.prettierignore
Normal file
@@ -0,0 +1,2 @@
|
||||
# Autogenerated files
|
||||
compiled
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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>`
|
||||
export const html = `<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>`;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./a_new_chapter_for_modrinth_servers.content`).then((m) => m.html),
|
||||
title: 'A New Chapter for Modrinth Servers',
|
||||
summary: 'Modrinth Servers is now fully operated in-house by the Modrinth Team.',
|
||||
date: '2025-03-13T00:00:00.000Z',
|
||||
slug: 'a-new-chapter-for-modrinth-servers',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./a_new_chapter_for_modrinth_servers.content`).then(m => m.html),
|
||||
title: "A New Chapter for Modrinth Servers",
|
||||
summary: "Modrinth Servers is now fully operated in-house by the Modrinth Team.",
|
||||
date: "2025-03-13T00:00:00.000Z",
|
||||
slug: "a-new-chapter-for-modrinth-servers",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./accelerating_development.content`).then((m) => m.html),
|
||||
title: "Accelerating Modrinth's Development",
|
||||
summary: 'Our fundraiser and the future of Modrinth!',
|
||||
date: '2023-02-01T20:00:00.000Z',
|
||||
slug: 'accelerating-development',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG', '6plzAzU4'],
|
||||
thumbnail: false,
|
||||
}
|
||||
html: () => import(`./accelerating_development.content`).then(m => m.html),
|
||||
title: "Accelerating Modrinth's Development",
|
||||
summary: "Our fundraiser and the future of Modrinth!",
|
||||
date: "2023-02-01T20:00:00.000Z",
|
||||
slug: "accelerating-development",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG","6plzAzU4"],
|
||||
thumbnail: false,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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>`
|
||||
export const html = `<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>`;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./becoming_sustainable.content`).then((m) => m.html),
|
||||
title: 'Quintupling Creator Revenue and Becoming Sustainable',
|
||||
summary: 'Announcing an update to our monetization program, creator split, and more!',
|
||||
date: '2024-09-13T20:00:00.000Z',
|
||||
slug: 'becoming-sustainable',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
short_title: 'Becoming Sustainable',
|
||||
short_summary: 'Announcing 5x creator revenue and updates to the monetization program.',
|
||||
}
|
||||
html: () => import(`./becoming_sustainable.content`).then(m => m.html),
|
||||
title: "Quintupling Creator Revenue and Becoming Sustainable",
|
||||
summary: "Announcing an update to our monetization program, creator split, and more!",
|
||||
date: "2024-09-13T20:00:00.000Z",
|
||||
slug: "becoming-sustainable",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
short_title: "Becoming Sustainable",
|
||||
short_summary: "Announcing 5x creator revenue and updates to the monetization program.",
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./capital_return.content`).then((m) => m.html),
|
||||
title: 'A Sustainable Path Forward for Modrinth',
|
||||
summary: 'Our capital return and what’s next.',
|
||||
date: '2024-04-04T20:00:00.000Z',
|
||||
slug: 'capital-return',
|
||||
authors: ['MpxzqsyW'],
|
||||
thumbnail: false,
|
||||
}
|
||||
html: () => import(`./capital_return.content`).then(m => m.html),
|
||||
title: "A Sustainable Path Forward for Modrinth",
|
||||
summary: "Our capital return and what’s next.",
|
||||
date: "2024-04-04T20:00:00.000Z",
|
||||
slug: "capital-return",
|
||||
authors: ["MpxzqsyW"],
|
||||
thumbnail: false,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./carbon_ads.content`).then((m) => m.html),
|
||||
title: "Modrinth's Carbon Ads experiment",
|
||||
summary: 'Experimenting with a different ad providers to find one which one works for us.',
|
||||
date: '2022-09-08T00:00:00.000Z',
|
||||
slug: 'carbon-ads',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./carbon_ads.content`).then(m => m.html),
|
||||
title: "Modrinth's Carbon Ads experiment",
|
||||
summary: "Experimenting with a different ad providers to find one which one works for us.",
|
||||
date: "2022-09-08T00:00:00.000Z",
|
||||
slug: "carbon-ads",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./creator_monetization.content`).then((m) => m.html),
|
||||
title: 'Creators can now make money on Modrinth!',
|
||||
summary:
|
||||
'Introducing the Creator Monetization Program allowing creators to earn revenue from their projects.',
|
||||
date: '2022-11-12T00:00:00.000Z',
|
||||
slug: 'creator-monetization',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./creator_monetization.content`).then(m => m.html),
|
||||
title: "Creators can now make money on Modrinth!",
|
||||
summary: "Introducing the Creator Monetization Program allowing creators to earn revenue from their projects.",
|
||||
date: "2022-11-12T00:00:00.000Z",
|
||||
slug: "creator-monetization",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,12 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./creator_update.content`).then((m) => m.html),
|
||||
title: 'Creator Update: Analytics, Organizations, Collections, and more',
|
||||
summary: 'December may be over, but we’re not done giving gifts.',
|
||||
date: '2024-01-06T20:00:00.000Z',
|
||||
slug: 'creator-update',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: true,
|
||||
short_title: 'The Creator Update',
|
||||
short_summary: 'Adding analytics, orgs, collections, and more!',
|
||||
}
|
||||
html: () => import(`./creator_update.content`).then(m => m.html),
|
||||
title: "Creator Update: Analytics, Organizations, Collections, and more",
|
||||
summary: "December may be over, but we’re not done giving gifts.",
|
||||
date: "2024-01-06T20:00:00.000Z",
|
||||
slug: "creator-update",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: true,
|
||||
short_title: "The Creator Update",
|
||||
short_summary: "Adding analytics, orgs, collections, and more!",
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<p>Hey all,</p><p>The last few months have been quite hectic for Modrinth. We've experienced all-time highs in both traffic and new creators and have outgrown a lot of our existing systems, which has led to a lot of issues plaguing creators, especially.</p><p>The team has been super hard at work at this, and I'm really glad to announce that we've fixed most of these issues long term.</p><ol><li><p><strong>Upload issues (inputs not showing up, instability, etc)</strong></p><p>We've tracked these issues down to conflicting code between our ad provider and Modrinth's. For now, we've <strong>disabled ads for all logged in users across the site</strong> while we work on resolving these long term. Both web users and logged-in web users make a very small percentage of our ad revenue (7% for web and 0.05% for logged-in web users) so creators should see a very minimal revenue drop from this, and have a much better experience navigating and uploading to the site.</p></li><li><p><strong>Moderation and report response times</strong></p><p>Creators have had to wait, in some cases, weeks to get their projects reviewed. This is unacceptable on our part and we are actively overhauling our moderation tooling to improve the moderation experience (and lowering time spent per project). We've also hired 3 additional moderators/support staff (<strong>bringing our total to 7 and the total team to 17 people!</strong>). We're hoping to see a significant reduction in queue times over the coming weeks.</p></li><li><p><strong>Ad revenue instability</strong></p><p>While ad revenue is generally out of our control and tends to fluctuate a lot, on June 4th we noticed a sharp decrease in creator revenue (~35% less than normal levels). While our ad provider initially thought this was a display issue, after further inquiry there were 2 causes: 1) Google AdExchange falsely flagging our traffic as invalid 2) Amazon banning many gaming publishers from their network <a href="https://www.adweek.com/media/exclusive-ads-from-verizon-shell-and-others-ran-next-to-explicit-videos-on-top-android-app/" rel="noopener nofollow ugc">due to panic in the gaming ads space</a>. While the Amazon ban is now resolved, we no longer are running Google AdExchange in the desktop app due to invalid traffic issues. This will lead to a permanent revenue decrease (AdX contributed to ~20% of our ad revenue). We also updated our prebid version (the underlying tech used to run ad auctions) which has shown a measurable increase, bringing revenue back to "normal" levels. Overall, we are closely monitoring and will keep you all posted. However, despite all the issues, due to some end-of-quarter campaigns, <strong>revenue in June was an all time high, at $227k ($170k paid to creators)</strong>!</p></li><li><p><strong>Payout outages</strong></p><p>Creators should be able to withdraw their revenue at all times, but due to slow PayPal clearing times and poor planning by us, we've had multiple week long outages in withdrawals. While we do store funds 1:1, these "outages" happen because we primarily store creator funds in an FDIC-insured bank account, as we wouldn't want a PayPal/Tremendous account suspension to cause creators to lose funds. We've now set up internal reporting which should never cause this to happen again (or, if it does, drastically reduce the time payout outages happen)</p></li><li><p><strong>Platform Revenue Route</strong></p><p>Due to some unannounced breaking changes in Aditude's API, the platform revenue API was broken. It is now <a href="https://api.modrinth.com/v3/payout/platform_revenue" rel="noopener nofollow ugc">working</a>. You can also use <code>start</code> and <code>end</code> fields to filter any date range!</p></li><li><p><strong>API and Uptime</strong></p><p>We've migrated our infrastructure for the website, app, and servers to OVH over our existing non-redundant AWS system. We've hit 99.96% uptime on our API and 99.98% on Modrinth Servers!</p></li></ol><p>Thank you all for your patience! If you are having any more issues or have any questions about all of this, feel free to DM @geometrically on Discord or <a href="https://support.modrinth.com" rel="noopener nofollow ugc">start a support chat</a> and we will be happy to help!</p>`
|
||||
export const html = `<p>Hey all,</p><p>The last few months have been quite hectic for Modrinth. We've experienced all-time highs in both traffic and new creators and have outgrown a lot of our existing systems, which has led to a lot of issues plaguing creators, especially.</p><p>The team has been super hard at work at this, and I'm really glad to announce that we've fixed most of these issues long term.</p><ol><li><p><strong>Upload issues (inputs not showing up, instability, etc)</strong></p><p>We've tracked these issues down to conflicting code between our ad provider and Modrinth's. For now, we've <strong>disabled ads for all logged in users across the site</strong> while we work on resolving these long term. Both web users and logged-in web users make a very small percentage of our ad revenue (7% for web and 0.05% for logged-in web users) so creators should see a very minimal revenue drop from this, and have a much better experience navigating and uploading to the site.</p></li><li><p><strong>Moderation and report response times</strong></p><p>Creators have had to wait, in some cases, weeks to get their projects reviewed. This is unacceptable on our part and we are actively overhauling our moderation tooling to improve the moderation experience (and lowering time spent per project). We've also hired 3 additional moderators/support staff (<strong>bringing our total to 7 and the total team to 17 people!</strong>). We're hoping to see a significant reduction in queue times over the coming weeks.</p></li><li><p><strong>Ad revenue instability</strong></p><p>While ad revenue is generally out of our control and tends to fluctuate a lot, on June 4th we noticed a sharp decrease in creator revenue (~35% less than normal levels). While our ad provider initially thought this was a display issue, after further inquiry there were 2 causes: 1) Google AdExchange falsely flagging our traffic as invalid 2) Amazon banning many gaming publishers from their network <a href="https://www.adweek.com/media/exclusive-ads-from-verizon-shell-and-others-ran-next-to-explicit-videos-on-top-android-app/" rel="noopener nofollow ugc">due to panic in the gaming ads space</a>. While the Amazon ban is now resolved, we no longer are running Google AdExchange in the desktop app due to invalid traffic issues. This will lead to a permanent revenue decrease (AdX contributed to ~20% of our ad revenue). We also updated our prebid version (the underlying tech used to run ad auctions) which has shown a measurable increase, bringing revenue back to "normal" levels. Overall, we are closely monitoring and will keep you all posted. However, despite all the issues, due to some end-of-quarter campaigns, <strong>revenue in June was an all time high, at $227k ($170k paid to creators)</strong>!</p></li><li><p><strong>Payout outages</strong></p><p>Creators should be able to withdraw their revenue at all times, but due to slow PayPal clearing times and poor planning by us, we've had multiple week long outages in withdrawals. While we do store funds 1:1, these "outages" happen because we primarily store creator funds in an FDIC-insured bank account, as we wouldn't want a PayPal/Tremendous account suspension to cause creators to lose funds. We've now set up internal reporting which should never cause this to happen again (or, if it does, drastically reduce the time payout outages happen)</p></li><li><p><strong>Platform Revenue Route</strong></p><p>Due to some unannounced breaking changes in Aditude's API, the platform revenue API was broken. It is now <a href="https://api.modrinth.com/v3/payout/platform_revenue" rel="noopener nofollow ugc">working</a>. You can also use <code>start</code> and <code>end</code> fields to filter any date range!</p></li><li><p><strong>API and Uptime</strong></p><p>We've migrated our infrastructure for the website, app, and servers to OVH over our existing non-redundant AWS system. We've hit 99.96% uptime on our API and 99.98% on Modrinth Servers!</p></li></ol><p>Thank you all for your patience! If you are having any more issues or have any questions about all of this, feel free to DM @geometrically on Discord or <a href="https://support.modrinth.com" rel="noopener nofollow ugc">start a support chat</a> and we will be happy to help!</p>`;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./creator_updates_july_2025.content`).then((m) => m.html),
|
||||
title: 'Creator Updates, July 2025',
|
||||
summary: 'Addressing recent growth and growing pains that have been affecting creators.',
|
||||
date: '2025-07-02T04:20:00.000Z',
|
||||
slug: 'creator-updates-july-2025',
|
||||
authors: ['MpxzqsyW'],
|
||||
thumbnail: false,
|
||||
}
|
||||
html: () => import(`./creator_updates_july_2025.content`).then(m => m.html),
|
||||
title: "Creator Updates, July 2025",
|
||||
summary: "Addressing recent growth and growing pains that have been affecting creators.",
|
||||
date: "2025-07-02T04:20:00.000Z",
|
||||
slug: "creator-updates-july-2025",
|
||||
authors: ["MpxzqsyW"],
|
||||
thumbnail: false,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,13 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./design_refresh.content`).then((m) => m.html),
|
||||
title: 'Introducing Modrinth+, a refreshed site look, and a new advertising system!',
|
||||
summary: 'Learn about this major update to Modrinth.',
|
||||
date: '2024-08-21T20:00:00.000Z',
|
||||
slug: 'design-refresh',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
short_title: 'Modrinth+ and New Ads',
|
||||
short_summary:
|
||||
'Introducing a new ad system, a subscription to remove ads, and a redesign of the website!',
|
||||
}
|
||||
html: () => import(`./design_refresh.content`).then(m => m.html),
|
||||
title: "Introducing Modrinth+, a refreshed site look, and a new advertising system!",
|
||||
summary: "Learn about this major update to Modrinth.",
|
||||
date: "2024-08-21T20:00:00.000Z",
|
||||
slug: "design-refresh",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
short_title: "Modrinth+ and New Ads",
|
||||
short_summary: "Introducing a new ad system, a subscription to remove ads, and a redesign of the website!",
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./download_adjustment.content`).then((m) => m.html),
|
||||
title: 'Correcting Inflated Download Counts due to Rate Limiting Issue',
|
||||
summary: 'A rate limiting issue caused inflated download counts in certain countries.',
|
||||
date: '2023-11-10T20:00:00.000Z',
|
||||
slug: 'download-adjustment',
|
||||
authors: ['6plzAzU4', 'MpxzqsyW'],
|
||||
thumbnail: false,
|
||||
short_title: 'Correcting Inflated Download Counts',
|
||||
}
|
||||
html: () => import(`./download_adjustment.content`).then(m => m.html),
|
||||
title: "Correcting Inflated Download Counts due to Rate Limiting Issue",
|
||||
summary: "A rate limiting issue caused inflated download counts in certain countries.",
|
||||
date: "2023-11-10T20:00:00.000Z",
|
||||
slug: "download-adjustment",
|
||||
authors: ["6plzAzU4","MpxzqsyW"],
|
||||
thumbnail: false,
|
||||
short_title: "Correcting Inflated Download Counts",
|
||||
};
|
||||
|
||||
@@ -1,56 +1,56 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
import { article as a_new_chapter_for_modrinth_servers } from './a_new_chapter_for_modrinth_servers'
|
||||
import { article as accelerating_development } from './accelerating_development'
|
||||
import { article as becoming_sustainable } from './becoming_sustainable'
|
||||
import { article as capital_return } from './capital_return'
|
||||
import { article as carbon_ads } from './carbon_ads'
|
||||
import { article as creator_monetization } from './creator_monetization'
|
||||
import { article as creator_update } from './creator_update'
|
||||
import { article as creator_updates_july_2025 } from './creator_updates_july_2025'
|
||||
import { article as design_refresh } from './design_refresh'
|
||||
import { article as download_adjustment } from './download_adjustment'
|
||||
import { article as knossos_v2_1_0 } from './knossos_v2_1_0'
|
||||
import { article as licensing_guide } from './licensing_guide'
|
||||
import { article as modpack_changes } from './modpack_changes'
|
||||
import { article as modpacks_alpha } from './modpacks_alpha'
|
||||
import { article as modrinth_app_beta } from './modrinth_app_beta'
|
||||
import { article as modrinth_beta } from './modrinth_beta'
|
||||
import { article as modrinth_servers_beta } from './modrinth_servers_beta'
|
||||
import { article as new_site_beta } from './new_site_beta'
|
||||
import { article as plugins_resource_packs } from './plugins_resource_packs'
|
||||
import { article as pride_campaign_2025 } from './pride_campaign_2025'
|
||||
import { article as redesign } from './redesign'
|
||||
import { article as skins_now_in_modrinth_app } from './skins_now_in_modrinth_app'
|
||||
import { article as two_years_of_modrinth } from './two_years_of_modrinth'
|
||||
import { article as two_years_of_modrinth_history } from './two_years_of_modrinth_history'
|
||||
import { article as whats_modrinth } from './whats_modrinth'
|
||||
import { article as windows_borderless_malware_disclosure } from './windows_borderless_malware_disclosure'
|
||||
import { article as windows_borderless_malware_disclosure } from "./windows_borderless_malware_disclosure";
|
||||
import { article as whats_modrinth } from "./whats_modrinth";
|
||||
import { article as two_years_of_modrinth } from "./two_years_of_modrinth";
|
||||
import { article as two_years_of_modrinth_history } from "./two_years_of_modrinth_history";
|
||||
import { article as skins_now_in_modrinth_app } from "./skins_now_in_modrinth_app";
|
||||
import { article as redesign } from "./redesign";
|
||||
import { article as pride_campaign_2025 } from "./pride_campaign_2025";
|
||||
import { article as plugins_resource_packs } from "./plugins_resource_packs";
|
||||
import { article as new_site_beta } from "./new_site_beta";
|
||||
import { article as modrinth_servers_beta } from "./modrinth_servers_beta";
|
||||
import { article as modrinth_beta } from "./modrinth_beta";
|
||||
import { article as modrinth_app_beta } from "./modrinth_app_beta";
|
||||
import { article as modpacks_alpha } from "./modpacks_alpha";
|
||||
import { article as modpack_changes } from "./modpack_changes";
|
||||
import { article as licensing_guide } from "./licensing_guide";
|
||||
import { article as knossos_v2_1_0 } from "./knossos_v2_1_0";
|
||||
import { article as download_adjustment } from "./download_adjustment";
|
||||
import { article as design_refresh } from "./design_refresh";
|
||||
import { article as creator_updates_july_2025 } from "./creator_updates_july_2025";
|
||||
import { article as creator_update } from "./creator_update";
|
||||
import { article as creator_monetization } from "./creator_monetization";
|
||||
import { article as carbon_ads } from "./carbon_ads";
|
||||
import { article as capital_return } from "./capital_return";
|
||||
import { article as becoming_sustainable } from "./becoming_sustainable";
|
||||
import { article as accelerating_development } from "./accelerating_development";
|
||||
import { article as a_new_chapter_for_modrinth_servers } from "./a_new_chapter_for_modrinth_servers";
|
||||
|
||||
export const articles = [
|
||||
windows_borderless_malware_disclosure,
|
||||
whats_modrinth,
|
||||
two_years_of_modrinth,
|
||||
two_years_of_modrinth_history,
|
||||
skins_now_in_modrinth_app,
|
||||
redesign,
|
||||
pride_campaign_2025,
|
||||
plugins_resource_packs,
|
||||
new_site_beta,
|
||||
modrinth_servers_beta,
|
||||
modrinth_beta,
|
||||
modrinth_app_beta,
|
||||
modpacks_alpha,
|
||||
modpack_changes,
|
||||
licensing_guide,
|
||||
knossos_v2_1_0,
|
||||
download_adjustment,
|
||||
design_refresh,
|
||||
creator_updates_july_2025,
|
||||
creator_update,
|
||||
creator_monetization,
|
||||
carbon_ads,
|
||||
capital_return,
|
||||
becoming_sustainable,
|
||||
accelerating_development,
|
||||
a_new_chapter_for_modrinth_servers,
|
||||
]
|
||||
windows_borderless_malware_disclosure,
|
||||
whats_modrinth,
|
||||
two_years_of_modrinth,
|
||||
two_years_of_modrinth_history,
|
||||
skins_now_in_modrinth_app,
|
||||
redesign,
|
||||
pride_campaign_2025,
|
||||
plugins_resource_packs,
|
||||
new_site_beta,
|
||||
modrinth_servers_beta,
|
||||
modrinth_beta,
|
||||
modrinth_app_beta,
|
||||
modpacks_alpha,
|
||||
modpack_changes,
|
||||
licensing_guide,
|
||||
knossos_v2_1_0,
|
||||
download_adjustment,
|
||||
design_refresh,
|
||||
creator_updates_july_2025,
|
||||
creator_update,
|
||||
creator_monetization,
|
||||
carbon_ads,
|
||||
capital_return,
|
||||
becoming_sustainable,
|
||||
accelerating_development,
|
||||
a_new_chapter_for_modrinth_servers
|
||||
];
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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="../redesign/#minotaur" rel="noopener nofollow ugc">redesign post</a>.</p>`
|
||||
export const html = `<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="../redesign/#minotaur" rel="noopener nofollow ugc">redesign post</a>.</p>`;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./knossos_v2_1_0.content`).then((m) => m.html),
|
||||
title: 'This week in Modrinth development: Filters and Fixes',
|
||||
summary:
|
||||
'Continuing to improve the user interface after a great first week since Modrinth launched out of beta.',
|
||||
date: '2022-03-09T00:00:00.000Z',
|
||||
slug: 'knossos-v2.1.0',
|
||||
authors: ['Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./knossos_v2_1_0.content`).then(m => m.html),
|
||||
title: "This week in Modrinth development: Filters and Fixes",
|
||||
summary: "Continuing to improve the user interface after a great first week since Modrinth launched out of beta.",
|
||||
date: "2022-03-09T00:00:00.000Z",
|
||||
slug: "knossos-v2.1.0",
|
||||
authors: ["Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./licensing_guide.content`).then((m) => m.html),
|
||||
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.",
|
||||
date: '2021-05-16T00:00:00.000Z',
|
||||
slug: 'licensing-guide',
|
||||
authors: ['6plzAzU4', 'aNd6VJql'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./licensing_guide.content`).then(m => m.html),
|
||||
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.",
|
||||
date: "2021-05-16T00:00:00.000Z",
|
||||
slug: "licensing-guide",
|
||||
authors: ["6plzAzU4","aNd6VJql"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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 "consider next steps."</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 "next steps" 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>`
|
||||
export const html = `<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 "consider next steps."</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 "next steps" 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>`;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./modpack_changes.content`).then((m) => m.html),
|
||||
title: 'Changes to Modrinth Modpacks',
|
||||
summary: 'CurseForge CDN links requested to be removed by the end of the month',
|
||||
date: '2022-05-28T00:00:00.000Z',
|
||||
slug: 'modpack-changes',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./modpack_changes.content`).then(m => m.html),
|
||||
title: "Changes to Modrinth Modpacks",
|
||||
summary: "CurseForge CDN links requested to be removed by the end of the month",
|
||||
date: "2022-05-28T00:00:00.000Z",
|
||||
slug: "modpack-changes",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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="noopener nofollow ugc">Discord</a>.</p><p>Next stop: creator payouts!</p>`
|
||||
export const html = `<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="noopener nofollow ugc">Discord</a>.</p><p>Next stop: creator payouts!</p>`;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./modpacks_alpha.content`).then((m) => m.html),
|
||||
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.",
|
||||
date: '2022-05-15T00:00:00.000Z',
|
||||
slug: 'modpacks-alpha',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./modpacks_alpha.content`).then(m => m.html),
|
||||
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.",
|
||||
date: "2022-05-15T00:00:00.000Z",
|
||||
slug: "modpacks-alpha",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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>`
|
||||
export const html = `<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>`;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./modrinth_app_beta.content`).then((m) => m.html),
|
||||
title: 'Introducing Modrinth App Beta',
|
||||
summary:
|
||||
'Changing the modded Minecraft landscape with the new Modrinth App, alongside several other major features.',
|
||||
date: '2023-08-05T20:00:00.000Z',
|
||||
slug: 'modrinth-app-beta',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: false,
|
||||
short_title: 'Modrinth App Beta and Upgraded Authentication',
|
||||
short_summary: 'Launching Modrinth App Beta and upgrading authentication.',
|
||||
}
|
||||
html: () => import(`./modrinth_app_beta.content`).then(m => m.html),
|
||||
title: "Introducing Modrinth App Beta",
|
||||
summary: "Changing the modded Minecraft landscape with the new Modrinth App, alongside several other major features.",
|
||||
date: "2023-08-05T20:00:00.000Z",
|
||||
slug: "modrinth-app-beta",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: false,
|
||||
short_title: "Modrinth App Beta and Upgraded Authentication",
|
||||
short_summary: "Launching Modrinth App Beta and upgrading authentication.",
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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>`
|
||||
export const html = `<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>`;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./modrinth_beta.content`).then((m) => m.html),
|
||||
title: 'Welcome to Modrinth Beta',
|
||||
summary:
|
||||
'After six months of work, Modrinth enters Beta, helping modders host their mods with ease!',
|
||||
date: '2020-12-01T00:00:00.000Z',
|
||||
slug: 'modrinth-beta',
|
||||
authors: ['Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./modrinth_beta.content`).then(m => m.html),
|
||||
title: "Welcome to Modrinth Beta",
|
||||
summary: "After six months of work, Modrinth enters Beta, helping modders host their mods with ease!",
|
||||
date: "2020-12-01T00:00:00.000Z",
|
||||
slug: "modrinth-beta",
|
||||
authors: ["Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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 <3</strong></p>`
|
||||
export const html = `<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 <3</strong></p>`;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./modrinth_servers_beta.content`).then((m) => m.html),
|
||||
title: 'Host your own server with Modrinth Servers — now in beta',
|
||||
summary: 'Fast, simple, reliable servers directly integrated into Modrinth.',
|
||||
date: '2024-11-03T06:00:00.000Z',
|
||||
slug: 'modrinth-servers-beta',
|
||||
authors: ['MpxzqsyW', 'Dc7EYhxG'],
|
||||
thumbnail: true,
|
||||
short_title: 'Introducing Modrinth Servers',
|
||||
short_summary: 'Host your next Minecraft server with Modrinth.',
|
||||
}
|
||||
html: () => import(`./modrinth_servers_beta.content`).then(m => m.html),
|
||||
title: "Host your own server with Modrinth Servers — now in beta",
|
||||
summary: "Fast, simple, reliable servers directly integrated into Modrinth.",
|
||||
date: "2024-11-03T06:00:00.000Z",
|
||||
slug: "modrinth-servers-beta",
|
||||
authors: ["MpxzqsyW","Dc7EYhxG"],
|
||||
thumbnail: true,
|
||||
short_title: "Introducing Modrinth Servers",
|
||||
short_summary: "Host your next Minecraft server with Modrinth.",
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<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>`
|
||||
export const html = `<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>`;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./new_site_beta.content`).then((m) => m.html),
|
||||
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.",
|
||||
date: '2023-04-01T08:00:00.000Z',
|
||||
slug: 'new-site-beta',
|
||||
authors: [],
|
||||
thumbnail: true,
|
||||
short_title: '(April Fools 2023) Modrinth Technologies™️ beta launch!',
|
||||
short_summary: 'Power up your experience.',
|
||||
}
|
||||
html: () => import(`./new_site_beta.content`).then(m => m.html),
|
||||
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.",
|
||||
date: "2023-04-01T08:00:00.000Z",
|
||||
slug: "new-site-beta",
|
||||
authors: [],
|
||||
thumbnail: true,
|
||||
short_title: "(April Fools 2023) Modrinth Technologies™️ beta launch!",
|
||||
short_summary: "Power up your experience.",
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,11 +1,11 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const article = {
|
||||
html: () => import(`./plugins_resource_packs.content`).then((m) => m.html),
|
||||
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!',
|
||||
date: '2022-08-27T00:00:00.000Z',
|
||||
slug: 'plugins-resource-packs',
|
||||
authors: ['6plzAzU4'],
|
||||
thumbnail: true,
|
||||
}
|
||||
html: () => import(`./plugins_resource_packs.content`).then(m => m.html),
|
||||
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!",
|
||||
date: "2022-08-27T00:00:00.000Z",
|
||||
slug: "plugins-resource-packs",
|
||||
authors: ["6plzAzU4"],
|
||||
thumbnail: true,
|
||||
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||
export const html = `<p>What an incredible Pride Month! This June, we came together to support <a href="https://www.thetrevorproject.org/" rel="noopener nofollow ugc">The Trevor Project</a>, an essential organization providing crisis support and life-saving resources for LGBTQ+ young people. We are absolutely thrilled to announce that our community raised a stellar <strong>$2,395</strong>. That's not all, though — during the campaign, some donations were matched by H&M and the Trevor Project's Board of Directors up to <strong>six times</strong>, meaning the final impact of Modrinth's donations is a whopping <strong>$8,464</strong>. Our team was also in the top ten for most funds raised this year!</p><p>To put your generosity into perspective, a donation this size can fund hundreds of hours on The Trevor Project's 24/7 crisis hotline. It gives young people a lifeline in their hardest moments and supports important educational services for many others.</p><p>We couldn't have done it without you. To every person who donated, shared the post, or simply cheered us on from the sidelines — thank you. We are incredibly proud of what we've achieved together as a community.</p><p>While Pride Month provides a special opportunity to focus our efforts, the need for these critical resources continues all year long. The challenges faced by LGBTQ+ young people do not end on July 1st, and organizations like The Trevor Project require ongoing support to continue their life-saving work. If you are able, we encourage you to consider making a contribution at any time.</p><p>As part of this campaign, we also added the option to donate part of a Modrinth rewards balance to a variety of charities. This means Modrinth creators can directly use the revenue they earned from ads and <a href="/plus" rel="noopener nofollow ugc">Modrinth+</a> to donate to dozens of causes close to their heart. The Trevor Project is one option, alongside other prominent non-profits such as the American Cancer Society, St. Jude's Children's Research Hospital, Doctors Without Borders, and the Southern Poverty Law Center. You can donate your Modrinth balance to these groups and many more by clicking the "Withdraw" button on <a href="/dashboard/revenue" rel="noopener nofollow ugc">your revenue dashboard</a>.</p><p>Modrinth's June 2025 campaign will be kept for posterity at <a href="https://modrinth.com/pride">this link</a>.</p><p><strong><a href="https://www.thetrevorproject.org/" rel="noopener nofollow ugc">You can donate to The Trevor Project at any time at this link.</a></strong></p>`
|
||||
export const html = `<p>What an incredible Pride Month! This June, we came together to support <a href="https://www.thetrevorproject.org/" rel="noopener nofollow ugc">The Trevor Project</a>, an essential organization providing crisis support and life-saving resources for LGBTQ+ young people. We are absolutely thrilled to announce that our community raised a stellar <strong>$2,395</strong>. That's not all, though — during the campaign, some donations were matched by H&M and the Trevor Project's Board of Directors up to <strong>six times</strong>, meaning the final impact of Modrinth's donations is a whopping <strong>$8,464</strong>. Our team was also in the top ten for most funds raised this year!</p><p>To put your generosity into perspective, a donation this size can fund hundreds of hours on The Trevor Project's 24/7 crisis hotline. It gives young people a lifeline in their hardest moments and supports important educational services for many others.</p><p>We couldn't have done it without you. To every person who donated, shared the post, or simply cheered us on from the sidelines — thank you. We are incredibly proud of what we've achieved together as a community.</p><p>While Pride Month provides a special opportunity to focus our efforts, the need for these critical resources continues all year long. The challenges faced by LGBTQ+ young people do not end on July 1st, and organizations like The Trevor Project require ongoing support to continue their life-saving work. If you are able, we encourage you to consider making a contribution at any time.</p><p>As part of this campaign, we also added the option to donate part of a Modrinth rewards balance to a variety of charities. This means Modrinth creators can directly use the revenue they earned from ads and <a href="/plus" rel="noopener nofollow ugc">Modrinth+</a> to donate to dozens of causes close to their heart. The Trevor Project is one option, alongside other prominent non-profits such as the American Cancer Society, St. Jude's Children's Research Hospital, Doctors Without Borders, and the Southern Poverty Law Center. You can donate your Modrinth balance to these groups and many more by clicking the "Withdraw" button on <a href="/dashboard/revenue" rel="noopener nofollow ugc">your revenue dashboard</a>.</p><p>Modrinth's June 2025 campaign will be kept for posterity at <a href="https://modrinth.com/pride">this link</a>.</p><p><strong><a href="https://www.thetrevorproject.org/" rel="noopener nofollow ugc">You can donate to The Trevor Project at any time at this link.</a></strong></p>`;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user