* fix: restore fixed render mode for logs tab
* feat: react to system theme changes in real time
When the 'System' theme is selected, listen for OS-level
prefers-color-scheme changes and update the app theme immediately,
without requiring a restart.
* Apply suggestion from @IMB11
Signed-off-by: Calum H. <hendersoncal117@gmail.com>
---------
Signed-off-by: Calum H. <hendersoncal117@gmail.com>
Co-authored-by: Calum H. <hendersoncal117@gmail.com>
Co-authored-by: Calum H. <calum@modrinth.com>
* fix: analytics events page not in admin dropdown
* pnpm prepr
* fix: add clearing date picker
* fix: date picker positioning not using rendered height
* feat: add button to view user analytics
* feat: add "Your projects" preset selection
* feat: fix revenue rounding for values under 1 and show full values for all statcards with tooltip
* fix: sum rounded value instead of raw value for tooltip total if it's under 1
* fix: show decimal in playtime statcard if under 1 hrs
* feat: disable playtime statcard for purely plugin projects
* refactor: pnpm prepr
* fix: clicking users in table in app takes you to blank page instead of website
* fix: wrong loader icon on server panel
* fix: surface var misalignment
* fix: password managers still detecting username field as something to autofill
* feat: show users on backupitem components
* feat: seperators for filter sections
* fix: lint + change remove -> revoke
* fix: copy
* feat: align copy
* fix: previous period data was included in the table
* fix: revenue displaying stale data when viewing it from different metric and grouped by 6 hour or 1 hour
* fix: remove staletime on analytics query so switching tabs does not refersh query
* feat: add monetization alert
* fix-small: missing space in tooltip
* fix: incorrect y-axis formatting for trailing decimal 0s
* fix: switching tabs resets table series selection due to other refetches
* fix: always show month first in chart tooltip
* fix: change all time start date to be project published date
* fix: increase length on project name column
* fix: unknown download source data points not showing for download source breakdown
* fix: double unknown for loader
* fix: no data on country labeling incorrectly as "Unknown" instead of "Other"
* fix: date picker number inputs showing arrows
* fix: stat card showing enormous percentage for prev period by switching it to absolute value difference after 1000%
* fix: decimal values for playtime being rounded badly, resulting in 0.04 becoming 0.0
* fix: chips having stroke
* refactor: pnpm prepr
* fix: spacing in annoucement link
* fix: legend scroll shadow on top of event tooltip
* feat: implement cancel/apply for custom timeframe range picker
* feat: implement dot for showing todays date
* feat: add max date to be today and show todays date
* feat: if ratio mode, dont show total
* feat: implement show more batching excess lines into "Other" bucket
* refactor: pnpm prepr
* feat: add pick and plop for date range start/end dates
* feat: implement reset query button
* feat: clear button to clear breakdown
* feat: more aggressively trim allowed minimum group by option
* fix: dont show project status filter when from project settings/analytics
* fix: clear selected X above number when appropriate
* feat: graph style updates and dont show year in x axis unless more than 2 year timeframe
* fix: loading state to include legend in blur
* feat: add project icon to project select
* feat: filter out draft projects from analytics
* feat: implement multiselect sections headers, project select org sections, and project options icons
* feat: implement click and drag to select date range
* feat: implement windows history for query builder
* revert: no longer switch breakdown/filter option if same category
* feat: implement showing project for project version breakdown/filter when there are multiple projects
* feat: implement modrinth sided events
* fix: border radius
* feat: implement analytics range highlight
* fix: loading state showing empty state text
* refactor: pnpm prepr
* feat: improve dropdown filter bar and multiselect performance
* fix: multiselect keyboard use
* fix: graph overflow issues
* fix: loading state text on table
* feat: implement tooltip scroll
* fix: adjust charts event tooltip
* feat: shorten time to not repeat am/pm
* feat: implement query params for graph component settings
* fix: qa
* feat: add reset timeframe button
* fix: legend colors moving between metric by determining color based on only downloads metric index
* feat: implement auto switching temporarily to group by day for renvenue metric and disable revenue metric for time range < 2 days
* fix: change to > 1 day
* fix: custom timeframe picker
* feat: implement big performance improvement for table
* feat: implement hover on legend to highlight graph
* fix: defer commit in query builder/filter and style fixes
* feat: more performance optimization to analytics dashboard state, chart, and table
* feat: add tooltip for other item
* feat: improve custom time frame range select
* feat: implement analytics events admin page
* fix: switch column order
* pnpm prepr
* feat: implement mock analytics events
* feat: improve analytics events admin page
* feat: focus title input on analytics create event modal
* fix: remove labels annoying
* feat: hook up analytics events backend
* fix: type error
* feat: reduce combobox padding
* feat: reduce padding on multiselect
* feat: add overlay scrollbar for combobox
* feat: a bunch of style fixes to combobox, multiselect and dropdown filter bar
* feat: MORE PADDING fixes
* feat: use user_agent for download source
* Revert "feat: use user_agent for download source"
This reverts commit d6dc8a99f11f94660872427796cdcf6fc93bb21d.
* fix: query filter project version lag and borked virtualization
* feat: rename breakdown "none" to "project"
* feat: implement right side checkmark for multiselect
* feat: keep crossed out legend items still shown in tooltip but also crossed out
* fix: focus styles
* fix: focus styles pt2
* feat: implement filter by top 8
* fix: preview is incorrect when selecting same date in range date picker
* feat (playtest): cross out legend items in tooltip and allow hide/show in tooltip
* feat (playtest): table component controls what graph shows
* feat: change download source to use user_agent
* feat: fix click to cross out in legend
* feat: add hover legend item to highlight line in tooltip
* fix: export csv to always be dropdown
* feat: implement breakdown = none
* performance: frontend memory reduction
* performance: reduce memory usage from project versions query by keeping only whats necessary
* fix: table checked items not in graph if 0
* feat: add shift click to select a range in table
* performance: add caching for metric types so switching between them is snappy
* performance: batch analytics requests by 15 project ids, with 150 ms delay between, so backend is happy
* feat: add analytics table search
* refactor: pnpm prepr
* fix: query filter options not coming in from analytics fetch
* feat: remove breakdown = none when there are multiple projects
* feat: improve table sorting
* feat: sort projects in project dropdown
* fix: getting project name for project versions
* fix: add loading state for filter and parallel fetch
* performance: use precomputed map for project version options to remove first hover lag
* feat: dropdown filter always open on one side and improve styles
* fix: custom time range picker being weird
* refactor: pnpm prepr
* fix: add back in batch with 300ms interval for projects to prevent backend rate limiting
* performance: only do queries to populate graph first before other analytics queries
* fix: QA polish issues around style and copy
* feat: dont show select all when its just one item in section
* fix: bugs with ratio mode and hiding chart lines
* fix: adjust padding in combobox and multiselect and fix not unfocusing when deselect
* fix: small styles
* fix: polish admin analytic events
* fix: keep scroll position with selection action row appearing when selecting one
* feat: add subheading in graph for showing N items from table
* feat: add unmonetized explaination tooltip
* performance: implement limit on how many lines can be shown in graph
* feat: mobile pass
* refactor: pnpm prepr
* add clear button
* feat: add time in analytics event and normalize date/time so its correct to timezones
* fix: padding
* feat: implement show prev period toggle
* feat: extract TimeFramePicker to packages/ui
* fix: adjust style
* feat: keep table selected persisted in query parameter
* fix: style on prev item value in legend
* fix: when breakdown switches, reset selected series
* fix: tooltip styles
* feat: change project selection to reset to show top 8 only if reconciled down to 0 items
* feat: implement show top 8 button in graph subheading
* fix: rename download type to download reason
* fix: formatting label for table
* feat: persist table sort by and sort direction
* fix: show top 8 button in graph not defaulting to top 8 for other metrics
* feat: implement prev period analytics fetch into the same current period fetch by shifting start date
* refactor: pnpm prepr
* fix: remove number if its just top 1
* fix: brief select items empty state when switch breakdown
* feat: implement format table playtime column
* feat: update export csv filename
* feat: change playtime column to display in hours
* refactor: pnpm prepr
* fix: still download type in filter
* feat: update analytics tooltip
* fix: wrong all projects icon
* feat: force legend order and graph colour for monetization
* refactor: pnpm prepr
* fix: multiselect and combobox sizes
* fix: chart icon add hover delay
* feat: (to playtest) implement multiple breakdowns
* fix: couple UX things for multiple breakdown
* fix: cannot unpin on page click
* fix: multiple breakdown legend and tooltip labels
* feat: add right side checkmark for dropdown filtr bar
* feat: enabling prev period will cross out prev for current ones already crossed out
* feat-mobile: remove drag to select time frame in graph
* feat-mobile: dropdown filter to replace dropdown for submenus on small screen
* feat-mobile: time frame picker to use different start and end date pickers for mobile
* fix-mobile: fix multiselect scroll on mobile
* feat: consolidate is mobile ref into context
* fix-mobile: combobox and multiselect scroll bug when mobile search bar open, fix timeframe picker mobile pick date, and dropdown filter bar click outside to close
* fix-mobile: smaller metric card font
* fix: dropdown filter bar scroll while search
* feat: implement project side events
* feat: implement better mobile view design for query builder
* feat: handle events overflow
* small: add select none
* feat: remove clear project and breakdown
* fix: event icon hover color
* feat: default hide project events if there are multiple projects, and default show if only 1 project
* feat: implement analytics performance updates, including facets, and v3 user projects
* feat: grey out dimmed lined on legend item hover
* feat-mobile: style fixes
* add close on select prop
* feat: add close on select for time frame picker mobile
* feat: date picker default read only
* refactor: pnpm prepr
* feat: default to projects breakdown instead of no breakdown with multiple projects
* fix-mobile: improve graph touch interactions
* small: 2 sig figs on playtime
* feat: deduplicate version uploads that have same version number and are uploaded on same day
* fix: analytics events grouping causing overflow
* feat: improve performance on analytics events grouping
* fix: tooltip expanding page width briefly
* fix: prevent double tap to zoom on inputs
* feat: add click to show chart event for mobile
* fix: toggle not having touch manipulation
* fix: chart tooltip scroll in mobile
* fix: remove project breakdownoption as it is default breakdown when none are selected
* fix: dropdown filter bar briefly empty when switching pages in mobile
* feat: keep tooltip open after drag in mobile
* fix: using plural instead of single for project breakdown
* fix: date picker scrolling page after picking date in mobile by suppressing focus
* fix: callback to Organization instead of org id
* feat: improve chart tooltip date range label formatter to be much more consistent
* feat: tap to toggle event tooltip
* fix: add user select none on graph and fix zoom into download threshold input
* fix: frontend still filtering after backend already filters
* feat: fix emptys state height content shift
* fix: qa issues
* fix: a number of qa issues
- Hide project events based on visible project legend/table selection
- Filter project status events by end status and add explicit copy for approved, private, and unlisted
- Style Modrinth analytics events with blue icon, marker, guide, and range borders
- Add scroll fade shadows to analytics chart and event tooltips
- Show previous-period date range in the chart tooltip
- Make project breakdown conditional on multiple selected projects and allow no breakdown when none are selected
- Add breakdown selection actions and fix “Group by day” copy
* feat: implement graph controls dropdown
* fix date picker typing into time input
* fix: styles in events table
* small: style
* feat: implement using new backend facets route
* feat: implement user get all projects
* performance: deter non-critical fetches to after analytics is in
* fix: refreshing causes multiple projects to do breakdown=none
* performance: cache project version options to fix lag on open sub menu
* refactor: remove chart event height being controlled by parent
* feat: update controls dropdown to have fainter border
* fix: loading bar not fading away
* fix: cannot click in graph
* feat: dont conditionally show multiselect selection actions
* fix: z-index and padding issues
* fix: project events incorrectly toggling on for first page load
* feat: remove show more and show less in legend, always show all
* fix: playtime y axis labels
* feat: improve y axis formatting for playtime and others
* feat: use tabs for game version select, and remove prev period when change breakdown or project selection
* refactor: pnpm prepr
* feat: change hidden legend items to not contribute to ratio percentages
* feat: event icon consume scroll for tooltip panel
* feat: remove gap inside chart tooltip
* feat: add gap for date picker 2 calendar view
* feat: improve analytics events grouping logic for modrinth events to be close to target
* pnpm prepr
* fix: cant click in gap in toggle
* fix: bugs around selected series from table not persisting with timeframe or filter changes
* refactor: kabab case
* refactor: split up large analytics chart and table component files into smaller components and ts modules
* fix: legend is stale after resetting query
* refactor: split up giant analytics provider with utils
* i18n pass
* revert: format number composable change
* fix: playtime was choosing y axis ticks in seconds instead of hours
* refactor: rename folder that with components to match main component name
* refactor: same rename for analytics table for consistency
* refactor: name main components to index.vue and keep folder name as component name
* refactor: pnpm prepr
* refactor: rename types
* refactor: move query builder types into types file and move components into components/analytics-dashboard
* refactor: colocate query builder url with analytics-dashboard component
* refactor: pnpm prepr:frontend
* fix: download threshold not width fit
* fix: no option to see release/all game versions in selected filter dropdown
* fix: game version dropdown width
---------
Signed-off-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* fix uri too long
* all projects route for user
* analytics facet fetching
* cache download source regexes
* filtering
* prepare
* Split up analytics metrics into separate modules
* prepare
* fix ci
* feat: Added new "Enabled" sorting button next to "Disabled"
* Updated when filter buttons show
- When all mods are disabled, only "Disabled" shows
- When all mods are enabled, only "Enabled" shows
- When there disabled and enabled mods, then only both buttons show.
* Updated when filter buttons show
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* fix: add download attribute to fix JAR files saving as ZIP in Chromium
- JAR files were downloading with a `.zip` extension in Chromium-based browsers (Chrome, Edge, Arc, Brave, Opera, Vivaldi)
- Root cause: JAR files are ZIP archives internally, so Chromium sniffs the `Content-Type` as `application/zip` and overrides the filename extension when no `download` attribute is present
- Fix: add `download="<filename>"` to all file download `<a>` tags so the browser uses the original filename from the API
* fix: add download attribute to remaining download links
Missed in initial pass: changelog page button, versions overflow
menu, settings/versions overflow menu. Also adds `download` prop
to Button and OverflowMenu to support dropdown link items.
Adds missing `getPrimaryFile` definition in changelog.vue.
---------
Co-authored-by: Mr_chank <180248271+chank-op@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* fix: shadow on nav
* feat: improve add dependency flow
* feat: update suggested dependency style
* feat: update dependency rows to use version number and update styles
* feat: implement combobox select searched text on focus
* feat: add Tabs.vue
* feat: update nav tabs to use tabs
* feat: improve project search dropdown
* fix: dependency search not clearing inbound query
* fix: combobox no options open state bug
* feat: improve dependency project and version search
* Analytics request loader and game version validation
* tweak agents
* factor tags into its own util
* lock cache refresh to avoid cache stampede
* Make analytics fields opptional
* Hide dotfiles from instance content scanning
Prevent hidden files such as .DS_Store from being treated as valid instance content.
This updates the profile scanning logic in [packages/app-lib/src/state/profiles.rs](/Users/froggy/Downloads/code-main/packages/app-lib/src/state/profiles.rs#L420) to ignore basenames that start with '.', and applies that filter consistently in both scan paths.
Signed-off-by: Corsican Frog <49497194+acorsicanfrog@users.noreply.github.com>
* Whitelist scannable instance content files
Only scan supported content archives into instance content.
Accept .jar files for mods and .zip files for datapacks, resourcepacks, and shaderpacks, after trimming the .disabled suffix.
This prevents .DS_Store and other unsupported files from appearing in the Content tab.
Signed-off-by: Corsican Frog <49497194+acorsicanfrog@users.noreply.github.com>
* Fmt
---------
Signed-off-by: Corsican Frog <49497194+acorsicanfrog@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: François-X. T. <fetch@ferrous.ch>
* feat: date picker component
* fix: month and year input padding
* fix: chevron padding issue
* feat: more padding/style fixes
* feat: implement header disabled state for min/max dates
* feat: implement dragging on start/end dates to move dates
* feat: improve selected range styles
* fix: type error
* fix: time input problems
* feat: implement 2 calendar view
* fix: white bg when dragging on a normal day
* fix: selected date background incorrectly applied
* prepr
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* feat: add dmg background
* try this?
* adjust dmg size
* one last tweak
* adjust height one more time
* adjust sizing, make image larger to be safe
* oops image missed in last commit
* smallify image
* new image
* fix offcenter highlight
* try glass text bg
* smaller glass
* Begin external projects moderator database frontend
* add copy link button
* begin project page permissions settings
* MEL database backend routes
* include filename in external files
* Hook up frontend external license page to backend
* more work on user-facing external projects stuff
* put user-facing stuff behind feature flag
* prepr
* clippy
---------
Co-authored-by: aecsocket <aecsocket@tutanota.com>
* remove unused experimental-styles-within
* remove unused styles
* more cleanup + prepr
* Refactor nearly all legacy buttons to use ButtonStyled
* prepr
* Update MC account selector to modern version
* prepr
---------
Co-authored-by: Calum H. <calum@modrinth.com>
* Fix Reports page only giving 695 reports due to Labrinth Issue
Basically, for some reason, Labrinth returns 5 less depending on the amount requested and the offset position, leading to the end of all reports, even if it's not correct.
Signed-off-by: Blodhgarm <timekeeperguild@gmail.com>
* remove constant condition
---------
Signed-off-by: Blodhgarm <timekeeperguild@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* fix: queue store stability + persistence
* fix: lint
* feat: set to draft btn
* feat: migrate to indexed db rather than local storage for moderation checklist storage (keep session + perms alone)
* fix: storage cleanup + lint
* fix: invalidation fixes
* fix: try fix email templates rendering links for variables
* fix: b is not a function
* fix: wording on modpack btn on setup type stage
* fix: respect launcher-meta info
* feat: i18n pass on creation flow modal
* fix: prefetch loader manifests
* fix: lint
* Allow filtering by project IDs in analytics route
* Download meta info in header
* add recursion limit
* Track playtime country
* fix clickhouse migrations
* fix: link to user using id instead of username
* feat: show org in project card
* fix: account for outdated documents
* refactor: use struct to store owner information
* fix: default new fields
* fix lint
* fix: upgrade server flow to skip region
* remove: previous hide region select implementation
* feat: implement skipping region select section for upgrade modal
* fix: modal not getting stripe customer and payment methods on page hard refresh
* refactor: pnpm prepr
* feat: add collapsible library groups in app
* feat: use accordion rather than custom
---------
Co-authored-by: Calum H. <calum@modrinth.com>
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* fix(query): set default query retry to 1
* fix(query): don't retry 404s and limit default retries to 3
* feat: expand status skipping checks
* feat: parallel fetch v2 and v3 in middleware
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* Initial file search impl
* Add replace functionality
* Rename to find, remove extra icon
* Put into seperate component
* Fix lint
* Change remaining search stuff to find
* Use ButtonStyled for buttons, use types from ace editor
* Make results label oriented left, add clear button to replace input
* Run fix
---------
Signed-off-by: Arthur <creeperkatze.dev@gmail.com>
Co-authored-by: Creeperkatze <178587183+Creeperkatze@users.noreply.github.com>
* fix: billing page server plan heading
* fix: matching server page spacing with instance page
* feat: update server header buttons
* feat: add show ram as bytes always on
* fix: revert to large buttons
* feat: add hostname and server states in info card
* wip: add v2 docs, routes to config, paths
* fix up path prefixes
* fix leading slashes
* fix slash route
* fix more slashes
* wip: full utopification of v2
* convert last few v2 routes to utoipa
* fix: billing page server plan heading
* fix: matching server page spacing with instance page
* feat: update server header buttons
* feat: add show ram as bytes always on
* fix: revert to large buttons
* feat: add hostname and server states in info card
* feat: add publishing checklist to project page
* fix: markdown table style and max width
* fix: teleport overflow menu bad anchoring
* start new server settings tabs
* update properties tab to match design
* better stying in general tab
* feat: add suffix input for hostname field
* implement tables for allocations and DNS records
* add tags for dns record type
* small gap adjustment
* polish advanced page
* adjust properties page hierarchy
* fix searching properties, empty state and projection radius appearing
* pnpm prepr
* update copy to match designs
* fix suffix input component
* style fixes and match heading size
* small fix
* fix search allocations placeholder
* adjust table styles
* move all installation settings helper text to below input
* update icon to use overflow menu buttons
* fix modal to be consistent
* open advanced properties when search
* remove other and custom properties, and update styles
* remove hide/show all java versions
* handle mc 26
* refactor: move server settings pages into /ui and add app ServerSettingsModal
* hook up server pages for app
* add server page header to app
* hook up server settings modal
* use large size
* fix card box shadow style
* fix hostname input for app
* fix app/website card containers
* implement external tabs for billing and admin billing
* fix save banner fixed to parent instead of page body
* remove unused prop to FriendsList causing warning in app
* fix client-only not available for app
* fix bottom cut off
* wire node auth
* implement full copy buttons
* dedup copy button tailwind styles
* fix hover class not working in @apply
* fix spacing
* fix error validation styles
* apply consistent styles and spacing
* feat: update hosting server card (#5609)
* fix type errors
* fix some stylesheets not imported for storybook
* add server listing stories
* add fix for frontend stylesheet imports
* remove props.
* convert copy code to use tailwind
* update server listing component styles
* update server info label styles
* start status/player count info label, more style updates and fixes
* add new server card buttons
* hook up server cards and implement updated styles
* hook up on download button
* fix tauri throwing error when api returns 204 No Content
* hook up purchase server modal in app
* fix upgrading state loading icon
* pnpm prepr
* filter out servers past 30 days after cancellation
* do not apply opacity on lock or spiner icons
* fix disabled server icon background
* update pending change stage
* handle known suspension states
* refactor: reduce code duplication for server listing
* update disabled state text color
* fix loading icon color
* clean up copy
* fix disabled opacity for server card
* update server listing files kept to be countdown
* implement resubscribe modal
* implement proper provisioning state for resubscribe
* fix duplicate attribute and pnpm prepr
* feat: add shared UI package auth DI
* feat: update purchase server flow (#5714)
* implement server list empty state component
* fix stories and adjust spacing
* implement select plan design refresh
* implement auth for empty server list
* use refs instead of reactive
* pnpm prepr
* fix auth usage for empty servers list
* move app auth provider setup to src/providers/setup
* pnpm prepr
* fix max height
* style fix
* fix getCreds no auth is blocking api client
* implement servers guest plan modal and signin which redirects back to modal's next step
* refactor guest plan select logic into provider
* implement sign in or create account popup
* remove force empty serverList
* add download button for suspended mod and generic
* add handling for when user logs out
* QA pass style fixes
* more consistent page styles
* fix duplicate export
* refactor: remove all fallback stuff from resubscribe modal
* implement shared download latest backup util
* i18n pass
* pnpm prepr
* fix region being selected if ping failed
* pnpm prepr
* feat: servers in app finalization (#5744)
* feat: start on shared console implementation into logs and overview pages
* fix: terminal gap issues
* feat: swap word wrap for full screen
* fix: stats cards alignment
* fix: stats
* feat: fix console clear + remove copy
* fix: lint
* fix: use reset not clear
* feat: shared server header & overview page for app and website (#5736)
* feat: implement shared server header for app and website
* feat: implement wrapped overview page with shared composable and hook it up
* pnpm prepr
* fix: bugs
* qa: cleanup
* feat: root.vue shared layout
* feat: delete old options pages + fix discovery frontend
* fix: discovery
* fix: misc style/layout issues
* fix page padding
* fix: modal height jankiness
* feat: implement server install content in app and server setup modal with DI
* fix: spacing
* remove servers in app feature flag
* Revert "remove servers in app feature flag"
This reverts commit 86e284c4bdd6fa42c3c8fbaf1efbec41f4d1c6d2.
* fix: qa
* feat: remove legacy components from apps/frontend/src/components/ui/servers
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* qa pass (#5738)
* fix: qa
* feat: qa
* fix: server icon fetch fails due to global node auth race condition overriding each other
* fix: lint
* fix: server icon upload/sync and centralize logic
* fix: server settings modal not closing for server reset
* fix: better server sorting
* feat: copy address in server listing card
* fix: notification panel in modal and when overlapping with action bar
* fix: empty server list empty state flashing when refresh, fixed by adding isReady auth flag
* feat: use floating action bar for save banner
* fix: saving state in save bar
* fix: edit server icon styling
* fix: confirm modal to have consistent buttons
* feat: loading animation for server panel + caching improvements for app
* pnpm prepr
* feat: search page deduplication (#5754)
* fix: action bar behind modal
* fix: remove warning modal for stopping
* fix: server cards states
* we hate webkit we hate webkit
* fix: update allocation creation to not use modal
* fix: properties tab spacing and styles
* feat: add files tab copy
* fix: advanced properties icon
* fix: remove back to all servers link
* feat: add files tab link in copy
* fix: server header styles to be consistent with instance
* fix: add header icons back
* feat: update instance settings icon to be consistent
* fix: icon container
* feat: upload state persistence across tabs
* fix: server labels text wrapping
* fix: use surface-5 border
* fix: loading spinner showing with onboarding below
* feat: new server button shows purchase modal in website
* fix: billing page not showing quarterly interval
* fix: server downgrade not showing updated subscription notification
* fix: server settings invalidate saved state and remove server context provider since its already provided in the page
* pnpm prepr
* add stripe publishable key to app build
* feat: console highlighting
* fix: rename servers title to modrinth hosting
* feat: search fix
* fix: qa/styles
* fix: ip click active and remove power dont ask again
* fix: qa
* feat: highlighting fix console
* fix: disable conflicts action
* fix: error dismiss bug
* feat: modal clarification
* fix: files perms issue
* fix: lint
* feat: modal fix
* enable show uptime
* fix: add loading state to edit server icon
* fix: notification panel take in has sidebar from settings
* fix: consistency pass on app settings
* fix: consistency pass on instance settings
* pnpm prepr
* fix: nagivate to billing button in app to go to website
* fix: stripe return url in app causing app to open modrinth.com in tauri
* refactor: better show polling UI code
* fix: new server polling comparison to use server ids instead of length
* fix: buttonstyled story
* fix: button styling
* fix: content.vue regression
* feat: project url redirects
* fix: breadcrumbs
* fix: purchase with newly added card
* fix: console ordering problems
* fix: app-frontend missing env config and staging environment
* fix: log syncing for instances and server panel accidentally
* fix: QA issues
* fix: server page loading state
* fix: stats card logic
* fix: lint
* fix: qa
* fix: console height padding
* fix: terminal padding + loading indicator
* feat: update medal server listing styling
* fix: no upgrade button for medal server listing in app
* fix: go to overview instead of content tab after onboarding
* fix: qa
* fix: teleport modals to body
* fix: logs tab + qa
* fix: local storage for user preferences
* fix: qa loading indic
* feat: considitonal debug and trace
* fix: jump to top on install bug
* feat: swap out server hard drive icon to server stack icon
* feat: servers in app feature flag default true
* fix: highlight row ufll
* fix: webkit thing onto a tag
* fix: input field
* fix: clear fix
* fix: lint
* fix: fmt
* feat: improve share modal and bring it back for sharing log
* pnpm prepr
* fix: menu overflowing
* feat: remove servers in app feature flag
* fix: server stat charts no longer showing color
* fix: library nav no primary state
* fix: better modal height and width
* fix: highlighting bugs
* fix: empty states
* fix: delay import to fix overview page slow load on MacOS
* fix: medal server listing too bright on light mode
* fix: admon analysis + fix logs
* fix: bug
* fix: clear purchase intent from sign-in after closing modal
* performance: improve server manage stats loading by splitting reactivity
* fix: deploy + admon + disable highlighting
* fix: clippy
---------
Co-authored-by: tdgao <mr.trumgao@gmail.com>
Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
* feat: temp wrangler
* fix: lint
* fix: logs upload
* fix: console empty state and admon regressions
* fix: fields
* feat: log deleting + prefetch for Logs.vue
* feat: move delete before share
* feat: clear endpoint
* feat: we ball!
---------
Co-authored-by: Calum H. <calum@modrinth.com>
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* add clarifying comments to ad webview code
* properly manage adview show/hiding
* check if webviews manage visibility on Windows
* comment out testing code
* add clarifying comments
* fix: wrong lock field
* fix: install_stage locking up due to previous failure stored as stale snapshot
* fix: Error when updating instance
Fixes#5671
* fix: prepr
* fix cmp info revenue not showing #5610
* fix use head referencing undefined
* fix new PAT not pushed to list and use new modal
* remove flex wrap in header nav
* fix: content filtering client only
* fix: browse content bug
Fixes#5570
* fix: Applying Mods & Updates filters at the same time doesn't work
Fixes#5602
* fix: Browsing content: going back resets filters and installed state
Fixes#5598
* fix: Mod tile background flickers when toggling enabled/disabled state
Fixes#5600
* fix: Overhaul of "Content" tab on instances broke a lot
Fixes#5567
* fix: Latest App update replacing all mods icons with a datapack/rescourcepack
Fixes#5556
* fix: billing page api-client ditch useBaseFetch
* fix: remove org icon from project card items
* fix: lint
* Translate and sort server filters
* Set team_members to unknown[]
* Additional fixes after merge
* Additional translations
* Replace "IP" with "server address"
* Prioritize English and user language
* fix(navigation): use replaceState for project filters to prevent history pollution
* fix: add replace prop to NavTabs and enable it on project and discover pages
* style: run pnpm run fix on affected files
* enable NavTabs replace prop on collection, user, and org pages
* fix: guard project middleware on client
* fix: lint
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
* refactor: most places with useAsyncData replaced with tanstack query
* refactor report list and report view
* refactor organization page to use tanstack query
* fix types
* refactor collection page and include proper loading state
* fix followed projects proper loading state
* fix 404 handling
* fix organization loading and 404 states
* pnpm prepr
* refactor: remove useAsyncData on newsletter button
* refactor: remove useAsyncData on auth globals fetch
* refactor: settings/billing/index.vue to useQuery instead of useAsyncData
* refactor: user page to remove useAsyncData
* pnpm prepr
* fix reports pages
* fix notifications page
* fix billing page cannot read properties of null and prop warnings
* fix refresh causing 404 by removing useBaseFetch and use api-client
* fix stale data after removing organization from project
* pnpm prepr
* fix news erroring in build
* fix: project page loads header only after content
* fix: user page tanstack problems (start on migrating away from useBaseFetch)
* fix: start swapping useBaseFetch usages to api-client
* Revert "fix: start swapping useBaseFetch usages to api-client"
This reverts commit 3df3fab11d535159132b1288dd7cacc38282b553.
* fix: remove debug logging
* fix: lint
---------
Co-authored-by: Calum H. <calum@modrinth.com>
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* fix: PATs editing bug #4908
* fix: gallery edit do not do falsy check on title and description
* feat: add aspect ratio on gallery images
* change aspect ratio to 16:9
* fix: mobile nav bar #5580
* use css::after instead for navbar fix
* adjust after content to fix thin line
* add save area inset for transform
* start multiselect component
* update styles
* small fix
* fix padding and styles
* add border bottom on sticky items
* add border bottom to search as well
* fix select all showing line
* use multi-select component for languages field
* add no options story for empty state
* refactor: remove vue-multiselect, replace with either our own combobox and multiselect
* pnpm prepr
* pnpm prepr
* fix combobox in transfer organization
* fix: migrate old cache entries for CachedFileUpdate
* feat: toggle goofy fix + switch version reimpl in app and panel
* fix: multimc detection
* fix: add tie breaker for sorting
* feat: toggle hover state
* fix: lint
* start multiselect component
* update styles
* small fix
* fix padding and styles
* add border bottom on sticky items
* add border bottom to search as well
* fix select all showing line
* use multi-select component for languages field
* add no options story for empty state
* fix height
* Revert "Implement Labrinth Canary API flag (#5531)"
This reverts commit 3b21944a75.
* Use Labrinth-Canary header instead of cookie for API canary
* prepr
* fix rebase
* Improve ping impl to bring parity to app lib impl
* Fix issue with new impl
* fix labrinth compile
* wip: why do servers not provide server info..
* Fix ping impl overriding port
* fix theseus_gui
* remove unneeded recursion lmit
* fix: add server to instance modal opens slow
* fix: creators section org doesnt display for project pages in app
* feat: separate modpacks and servers tabs in instances library
* initial elasticsearch impl
* working elastic cluster
* replace SearchError with ApiError for preparation of search backend
* start factoring meili out to trait
* move meili to backend
* update routes to use search backend trait
* wip
* Update projects.rs
* search backend is only init'd once in config
* wip
* wip: backend agnostic
* change search internal routes to delegate to backend
* initial elasticsearch impl
* fix filtering
* elastic impl
* refactor indexing into its own module
* clean up elastic code
* fix ci
* fix tests
* fix elastic health check
* fix up env rebase
* fix compile
* dummy commit to update github pr
* Fix rebase
* Elastic basic https auth
* Fix duplicate projects showing up
* Fix up tests
* Replace search `ApiErrors` with `eyre::Reports`, propagate background task errors
* clean up agents files
* make index chunk size configurable
* make `match_phrase` in elastic case-insensitive
* use current/next indices and swap between them
* test case for error body
* Fix failing case
* da merge
* factor out common stuff from search backends
* allow fetching hit metadata from search results
* allow customising elasticsearch search config
* bit of docs
* add mappings to indices for elastic
* Implement Typesense
* wip
* fix up some sort fields stuff
* use different approach to filterable field sets
* remove a bunch of search fields which weren't used for filtering
* bucket text matches
* Bucketing by text_match for typesense
* fix tombi lint
* fix some sentry errors and dont prioritise 2+ term matches
* tweak ts query settings
* expose some more search settings
* query sort changes
* small fixes
* should fix pagination stuff
* fix healthcheck maybe
* ragebait ci
* tests
* tests
* revert environment
* Improve Intl formatting
* Additional fixes
* Fixed formatters were not updated on locale change
* Fixed formatNumber was not updated on locale change
* Additional formatting and fixes after merge
* Run prepr:frontend
* Remove `'` in icon map
* Run `pnpm install`
* fix: lint + import
* Additional fixes
---------
Co-authored-by: Calum H. <calum@modrinth.com>
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* "feat(collections): fix sorting logic and add URL persistence"
* fix(navigation): use replaceState for project filters to prevent history pollution
* Revert "fix(navigation): use replaceState for project filters to prevent history pollution"
This reverts commit 3924855fafcf2921056e31b7606a143de01ed6a6.
* fix: lint + devin
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* fix(navigation): use replaceState for project filters to prevent history pollution
* fix: add replace prop to NavTabs and enable it on project and discover pages
* style: run pnpm run fix on affected files
* enable NavTabs replace prop on collection, user, and org pages
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* Various typo fixes and clearups
As reported on Crowdin.
* touch up wording on the environments
* lint
* roll back describes + lint
* fix extra "usd" in some languages in the hosting marketing page
* fix: lint + devin pass
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* Harden minecraft-server-play analytics
* Verify based on mc token
* Fail for non-server projects
* Nitpicks and factor out HTTP client
* Allow passing old minecraft_uuid field for clients
* Remove server play analytics test since it relies on auth against Minecraft API which I don't want to mock :(
* Switch to using hasJoined for uuid validation
* Fix formatting
* Fix sessionserver status code
* Ensure profile name and queried username matches
* replace some wrap_request_errs with internal errs
* add HTTP client into web::Data
* short timeout on client-side session join query
* further fixes
* sqlx prepare
* fix clippy
---------
Co-authored-by: Creeperkatze <178587183+Creeperkatze@users.noreply.github.com>
Co-authored-by: aecsocket <aecsocket@tutanota.com>
* Ensure newest published versions get sorted at the top
* fix issue with querying
* sort by correct fields depending on server/not server project
* sqlx prepare
* Vendor async-minecraft-ping and fix servers returning protocol version -1
* Don't have automod reject server projects
* fmt
* Add region to search facets
* remove AMP .github
* fix: tags in project settings to have icons and ordered correctly
* fix copy in project list layout settings
* fix tag item in header navigation
* adjust ping ranges
* add handle click tag
* fix: dont show offline in project page for draft status
* move tags above creators in app
* preload server project page on load and optimize queries
* add server project card to organization page
* fix minecraft_java_server label
* pnpm prepr
* have user option in project create modal be circle
* feat: implement better mobile project page view
* disable summary line clamp for servers
* fix: unlink instance doesnt update instance
* increase icon upload size
* small fix on button size
* improve how server ping info loads
* remove unnecessary pings for instance page
* fix order of computing dependency diff
* remove linked_project_id from world, use name+address to match for managed world instead
* pnpm prepr
* hide duplicate worlds with same domain name in worlds list
* add install content warning for server instance
* increase summary max width
* add handling for server projects for bulk editing links
* implement include user unlisted projects in published modpack select
* pnpm prepr
* filter to only user unlisted status
* add bad link warnings
* fix modpack tags appearing in server
* cargo fmt
* identical links nag + use V3 more
* updater status alerts
* identity verification msg for servers
* private use msg for server projects
* fix newlines in some messages
* Tweak + add description messages
* tweak status alerts
* flinks for summary messages
* Rule 4 msgs for servers
* account for some jank
* fixes
* Project Type placeholder
* update locales
* add button for rejecting pay to play servers
* update country to region
* add lowercase option for project type placeholders
* update link of article to the published url
* prepr
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* feat: start on blogpost
* feat: images for post
* fix: grammar + prerender news + changelog
* feat: add discovery in app vid
* fix lint
* rename new blog md to match title
* fix assets directories
* remove left over compiled files
* update thumbnail
---------
Co-authored-by: tdgao <mr.trumgao@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Tweak search sorting
* Tweak search sorting
* fix ping impl
* remove port field, add server regions
* fix compile
* fix tests
* update frontend banner upload size limit
* feat: use server project region instead of country
* remove java and bedrock port in frontend
* add helper text
* allow filtering by if server is online
* add server status online offline filter
* use region in instance
* pre-collapse status in app discovery
* pnpm prepr
* remove server discovery flag
* add servers into mobile nav tabs
* parse port from address if present
---------
Co-authored-by: tdgao <mr.trumgao@gmail.com>
* fixes
* #[serde(untagged)] my BEHATED (still kinda broken)
* remove unused hasContent ref
* clean up code in fetch instance
* ping 3 times for average latency
* fix: pinging to be more accurate
TCP_NODELAY — Set on the TCP stream right after connect, preventing Nagle's algorithm from buffering the small ping packet (could save up to ~40ms)
Instant over Utc::now() — Switched to monotonic std::time::Instant for timing, which is more precise and designed for measuring elapsed time (still using chrono just for the ping magic value)
* delete useFetch util and just use native fetch
* rename worlds until functions for more clarity
* fix lint
* fix cache.rs logic
* make backend ping use both impls
* Add optional timeout to server ping
* fix gallery appearing in nav with no items
* remove EU countries and add EU option for server country
* add uk to europe
---------
Co-authored-by: aecsocket <aecsocket@tutanota.com>
* ping queue with tests
* mc ping server info + timeout
* sqlx prepare
* tombi fmt
* tombi fmt
* allow querying server ping data
* fix shear
* wip: resolve comments with pings
* Switch to Redis for server pings
* tombi fmt
* fix compile error
* clear cache on project ping, add server store link
* Schema changes
* Improve server messages for app pinging
* synthetic server project version for search indexing
* wip: clean up server ping, background tasks
* fix migration to sync with main, propagate background task errors
* wip: server modpack content query, components in search
* wip: massive component query refactor
* fix more defaults stuff
* sqlx
* fix serde deser flatten
* fix search indexing not showing fields
* remove leftover prompt
* fix import
* add diff detection for version dependencies without version_id/project_id
* move servers tab to end
* hide app nav tabs if only one tab
* fix undefined property
* on click link for server side bar info
* show recommended & supported versions for vanilla
* fix how install.js installs instance with modpack content title instead of server project title and dont fetch icon when installing to existing instance
* use large play button instance
* show update success instead of launching right into the game
* add global installing server project state
* add comment
* small change: open discover to modpack
* implement ping server projects for latency in app
* add projectV3 to nag context for moderation package
* fix play server project button when instance is launched
* add ping to project header
* wip: server verified plays
* server verified plays compiling
* queue up server plays in batches
* report server plays improved in frontend
* fixes to tracking server joins
* fix: server project detection to do loose null check
* fix server projects showing license
* fix empty server info card
* fix server projects links title
* Fix backend impl for server player count analytics
* fix: allow for links to be set to empty
* hook up server recent plays
* cargo sqlx prepare
* add project sidebar stories
* feat: update project sidebar server info card to new design
* update server project header and project card
* feat: add hide label for project cards
* feat: add tags sidebar card
* small fix to keep color consistent
* fix: remove required content tab from server project page
* many small fixes
* handle locking server instance content
* fix hiding modal after saving server compatibility version
* copy content card item and table from content tab update branch
* fix nav tabs active tag
* fix switching between server instance vs regular instance persisted invalid state
* fix a lot of the bugginess of navtabs when theres hidden/shown tabs between instances. match frontend nav tabs
* hook up backend searchfor frontend in websiet
* fix: server project card tags
* hook up search v3 in app backend for app frontend
* Don't return missing components in project query
* Add game versions to server filters
* move reporting server joins to backend
* send account UUID along with server play analytics
* update java server ping schema
* feat: implement use server search for search sorting and filter facets
* pnpm prepr
* fix game version filter facet
* fix: allow java and bedrock addresses to be deleted
* feat: hook up languages
* Default deserialize `ProjectSerial`
* feat: show server project tags
* small fix on languages multi select
* also default java server content
* fix: update compatibility modal not closing after successful upload
* remove play button in website discovery for servers
* reenable fence in app backend
* update online/offline tag
* add online status indicator pulsing
* revert pulsing
* disable link for custom modpack project and show tooltip
* change modpack to modded type
* update ip address entire button to be clickable
* polish server info card styles
* make offline tag red and properly hook up online tag
* move server related settings into own tab
* fix setting project compatibility resets unsaved changes
* fix javaServerPatchaData wiping content field
* updates to compatibility card, add download button and display supported versions better
* fix unsaved changes popup for tags
* remove console.log
* fix incorrect project type in projects in dashboard
* fix: savable.ts to reset currentValues to data() after save
* upload server banner as gallery image with title == "__mc_server_banner__" and filter it from frontend gallery
* fix error handling and helper text copy
* ensure gallery banners are filtered in app backend gallery display
* add grouped filters for search
* add query params for server search
* feat: deep linking to open server project page then open install to play
* fix search in app frontend
* fix: server project showing offline
* fix: profile create error app backend
Here's what was happening and the fix:
Root cause: In create.rs:107, profile_create assumed the icon_path parameter was always a local filename relative to the caches directory. It did caches_dir().join(icon) which produced a path like ...\caches\https://staging-cdn.modrinth.com/... — the colons in https:// are illegal in Windows paths (OS error 123).
The frontend's installServerProject and createVanillaInstance in install.js:290 both pass project.icon_url (a full URL) directly as the icon parameter.
Fix: Modified profile_create to detect when the icon parameter is a URL (starts with http:// or https://). When it is, it downloads the icon via fetch(), extracts the filename from the URL path, and passes the downloaded bytes and filename to set_icon() which hashes and caches it properly. The existing local-file path continues to work as before.
* pass undefined instead of unknown for modpack content modal
* fix: wrong way to determine offline status
* delete required content page placeholder
* fix: redirect running function instead of passing function
* add in wiki page
* fix diffs which have unknown project/filename
* pnpm prepr
* feat: add handling for "stop" instance state for server project card and page play button
* fix updating modpack shouldn't launch right into game
* small fix on external icon
* fix refresh search causing infinite rerender i.e. maximum call stack size exceeded
watch(route) → watch(() => [route.query.i, route.query.ai, route.path]) (line 102): The deep watch on the entire Vue Router route object was the most likely cause of the stack overflow. Vue Router's route object contains matched records with component definitions and other deeply nested structures. Deep-watching it triggers recursive traversal on every route change (including those from router.replace() inside refreshSearch()). Now it only watches the specific properties that updateInstanceContext() actually needs.
ref → shallowRef for serverHits and serverPings (line 189-190): The v3 search results can be deeply nested objects (minecraft_java_server.ping.data, content, etc.). Using shallowRef prevents Vue from creating deep reactive proxies on these objects, which is consistent with how results already uses shallowRef on line 295.
Re-entrance guard + try/catch on refreshSearch() (line 310): The watcher calls refreshSearch() without awaiting, so state changes during the async execution could trigger the watcher again, causing concurrent calls. The guard prevents overlapping calls, and the try/catch ensures loading.value = false is always reached (fixing the infinite loading).
* don't require auth token for logging server play
* fetch latest server player count from redis instead of search doc
* remove components. in search facet
* Category and search sort fixes
* add logging for refreshSearch in browse.vue
* fix: use windows.history.replace instead of router.replace due to vue production bug and remove logs
* fix: server refresh search reactivity
* fix: type errors
* conquer the type errors in Browse.vue
* update search input background
* fix tags location
* slight change to color
* feat: add linked to modpack project for regular modpack instances
* feat: installation tab updates
* fix: copy ip missing hover effect
* feat: implement category and countries negative filters
* fix servers tab label in profile page
* implement add server to instance
* feat: implement allow editing server instances
* update installation settings to handle vanilla server instance case
* hide servers tab when installing content to instance
* add sorting for user installed content to be top of list in content
* update categories filters from one group filter card to separate filters cards
* add active scale
* fix offline server showing online
* update language display
* update tooltip
* hide navtabs if theres only one tab
* fix: modpack content name truncate in project card
* feat: add server projects to moderation queue
* update redirect middleware no longer needs projectV3
* update comment
* fix: server tags labels
* feat: add the mf icons finally
* Revert "update redirect middleware no longer needs projectV3"
This reverts commit 1289cb52869185abe1481dfb6b0c00c0233bf59e.
* fix open in browser
* revert any handling for handling base linked modpack content for content tab
* update instance online players to be client ping
* fix showing modpack/loader version for server instance in installation settings
* server projects are not marked as modpacks
* skip license check for server projects
* feat: add the concept of linked worlds for server instances and keep in sync with server project
* fix: router.push doesn't add history state, use nagivateTo instead
* fix: get server modpack content wrong link
* update some categories to default collapse
* small fixes
* optional languages & bedrock
* move creator below tags
* sort linked worlds to be first
* add red orange and green ping variants
* bring back content tab
* add download button in required content in app
* fix: server info card loading
* fix: brief flash of normal project before server project stuff loads in
* misc fixes
* invalidate project v3
* fix unused imports
* Quick pass for moderation related changes (#5429)
* filter certain nags out from server projects.
* move add-links nag to links.ts
* first few server related nags
* moderation checklist groundwork
* Prevent undefined stage from appearing on servers.
* add projectV3 to shouldShow callback
* Filter buttons by server project type
* fix, revert private use msg, adjust server & link nags
* starting tags + servers msg
* fix no projectV3
* fix: router.push doesn't add history state, use nagivateTo instead
* Tags nag works with servers now
* support servers' v3 exclusive links
* reupload, and status messages + nag tweaks.
* fixes
* Update tags.vue warning for server projects.
* don't suggest adding a bedrock IP
* Tweak phrasing on servers alert msg
---------
Signed-off-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
Co-authored-by: tdgao <mr.trumgao@gmail.com>
Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
* only show unique tags in project card
* add projectV3 to cache purge
* fix type: add projectV3 to cache purge
* update caching behaviour for installing
* max 3 plays per user
* accept date_modified and date_created for sorting
* add locking environment filter for server instance and update copy
* custom pack button only shows when needed (#5444)
* expose server pinging route to frontend
* feat: add server field validation with pinging on unfocus
* improve pinging logs
* try another pinging crate
* small fixes
* prefill published project id for updating published project
* fix running app bar for mac
* cargo sqlx prepare
* fix app login avatar
* pnpm prepr
* fix download menu for mac
* FIX CI
* fix lint errors
* cargo fmt
* fix toml
* fix more lint
* add server copy
* more lint
* fix any types
* also ping unlisted and private servers
* fix lint
* remove option for showTypeSelector
* fix cannot read user from undefined
* pnpm prepr
* update pinging to make it better
* update copy
* fix login cache issue
* add project select default icon
* fix: minecraft_java_server not redirecting
* pnpm prepr
* fix required content card in project page for custom modpack
* fix app project cards custom modpacks
* update pre-collapsed for app frontend
* don't send server projects to discord webhook
* add lock icon to linked world managed by server project
* pnpm prepr
* make automod msgs on server projects private
* fix pagination for server projects tab
* fix recent plays copy
* fix sync linked world with server project
* pnpm prepr
* add 0.11.0 changelog
* update date
---------
Signed-off-by: Truman Gao <106889354+tdgao@users.noreply.github.com>
Co-authored-by: aecsocket <aecsocket@tutanota.com>
Co-authored-by: coolbot <76798835+coolbot100s@users.noreply.github.com>
* fix FK violation when inserting rows into `notifications_deliveries`
* add test for FK violation when inserting into notifications_deliveries
* sqlx prepare
* add migration to prevent stale notifications from being dequeued all at once upon fix
* Revert "add migration to prevent stale notifications from being dequeued all at once upon fix"
This reverts commit 446f398752bbddb632196a549501f9ce0b2da67f.
* fix: session refresh works as intended now
* use code-defined defaults for expires and session_expires
* fix sqlx
* database migration drop defaults
* run fmt
* remove comment in migration
Signed-off-by: Xander <xander@isxander.dev>
---------
Signed-off-by: Xander <xander@isxander.dev>
* Don't enter project into tech review if no new traces
* Send tech review exited message if files are deleted
* change PATCH /issue-detail/{id} to batch update details
* Fix sorting
* store delphi jar in backend
* show jar in tech review card
* improve jar display in frontend
* Fix live/in review label for tech review cards
* sqlx prepare
* polish: decode segments + code qual fix
* fix: skip first seg
* fix: only slice if needed
* Fix tech rev card styling
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* wip: better env var reading
* move most env vars to env.rs
* migrate more env vars
* more migration
* more migrations
* More migration
* 🦀 dotenvy is gone (almost)
* 🦀 dotenvy is gone 🦀
* Fix mural source account env var handling
* Remove defaults from admin key vars
* dummy commit to update github pr
* fix ci
* handle modpack upload with no loaders
* restrict loaders for modpack
* actually, dont allow modpack loaders to be editable
* revert loader picker changes
* fixmodrinth/code#5243: detect file data on multi-part uploads
* fix return early not making handlingNewFiles = false
---------
Co-authored-by: Calum H. <calum@modrinth.com>
* fix: dev-741 currency exchanging bug
* fix: remove redundant balance available check
* fix: lint/fmt
* fix: #5245
* fix: hide max if it's less than min
* Workflow changes
* Propagate app_identifier via State
* Remove old updater stuff
* Remove patch file
* Remove unused binding
* Fix application loading
* Don't sign windows binaries by default
* Remove the damn emojis
* Figure out where windows artifacts are
* Fix windows artifacts
* fix: environment not showing when has mod loaders
* fix: weird snapshot format by only grouping consecutive tags with 3 or more
* fix: 26.1 snapshots not grouped properly in mc version picker
* remove debug console.log
* feat: base content card component
* fix: tooltips + colors
* feat: fix orgs
* feat: add ContentModpackCard
* fix: extract types
* feat: selection v-model
* add show icon in selected for combobox with stories
* feat: add project combobox
* clean up project combobox
* feat: start install to play modal
* fix: events
* feat: figma alignments
* feat: migrate toggle to tailwind
* fix: row borders
* feat: disabled state
* feat: virtual list impl for card table based on window scroll
* fix: lint
* feat: virtualization + smaller contentcard items
* feat: fix gap + border issues on last elm
* fix: use TeleportOverflowMenu
* fix: hasUpdate type
* fix: fallback to svg if src is invalid on avatar component
* fix: storybook
* feat: start on updater modal
* feat: finish content updater modal
* feat: i18n pass
* remove install to play modal from ui package
* pnpm prepr
* feat: reusable table component
* feat: add column width prop for table and fix stories
* feat: add table overflow menu story example
* feat: add surface-1.5 and use in table
* chore: export table in index
* fix: allow more loose typing on columns
* feat: update table component to derive key from column instead of data
* feat: surface 1.5 for oled + refactor story for contentcardtable + yeet sorting funcs
* fix: lint
* feat: add no padding story for new modal
---------
Signed-off-by: Calum H. <contact@cal.engineer>
Co-authored-by: tdgao <mr.trumgao@gmail.com>
* Make tags translatable, move icons to frontend, a few other things
* Migrate more things
* fix import
* more import fixes
* export tag-messages
* lint
* fix: project data saving not visually shown immediately
* feat: useSavable improvements
* feat: migrate where possible to useSavable
* fix: gitignore
* feat: use es-toolkit
- Implemented `info_listener` in `events.js` to listen for 'info' events and handle payloads.
- Added `emit_info` function in `emit.rs` to emit 'info' events with a message payload.
- Defined `InfoPayload` struct in `mod.rs` to structure the data for 'info' events.
- Integrated `emit_info` calls in the Minecraft launch logic to provide feedback on account types.
- Introduced a new offline icon in SVG format and removed outdated pirate icons from assets.
- Updated asset index to include the new offline icon and removed references to deleted icons.
* feat: show update available notif for modrinth app in linux
* remove changelog button
* update copy
* pnpm prepr
* add restart app changelog
* pnpm prepr
* use env var to check for updates are disabled
* update copy
* pnpm prepr
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* feat: ssr fixes
* feat: lazy load non-core data
* feat: ssr timing debugging
* feat: go back to all parallel
* feat: migrate to DI + set up mutators
* feat: remove double get versions request, only call v3
* refactor: [version].vue page to use composition API and typescript
* feat: gallery.vue start
* fix: remove left behind console log
* fix: type issues + gallery
* fix: versionsummary modal + version page direct join
* fix: projectRaw guard
* fix: currentMember val fix
* fix: actualProjectType
* fix: vers summary link same page
* fix: lint
---------
Co-authored-by: tdgao <mr.trumgao@gmail.com>
* feat: make hosting marketing page translatable, part 1
* format what we've got so far
* lint and fix locale setting
* the rest of the owl, almost
still one more message in MedalPlanPromotion that's a bit annoying because of all the inline styles
* finishing touches
some things just shouldn't be questioned, i guess. that's two for two on issues that occur even though i seem to have done everything right. i give up
* whoops, that's literal
* get back in the span, you
* fix typo + lint
* and now it works
* one more fix
* feat: filtering + sorting alignment
* polish: malicious summary modal changes
* feat: better filter row using floating panel
* fix: re-enable request
* fix: lint
* polish: jump back to files tab qol
* feat: scroll to top of next card when done
* fix: show lock icon on preview msg
* feat: download no _blank
* feat: show also marked in notif
* feat: auto expand if only one class in the file
* feat: proper page titles
* fix: text-contrast typo
* fix: lint
* feat: QA changes
* feat: individual report page + more qa
* fix: back btn
* fix: broken import
* feat: quick reply msgs
* fix: in other queue filter
* fix: caching threads wrongly
* fix: flag filter
* feat: toggle enabled by default
* fix: dont make btns opacity 50
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Implement replied/unreplied filter for tech review
* project status filter
* wip: issue type filter
* correct filter field
* wip: break up tech review query
* Improve tech review query
* Get tech review working more properly
* Add get single project reports endpoint
* Write to many Meilisearch write addrs
* Keep client results ordered
* Attach Read Meilisearch client to actix data
* Load balanced meilisearch Compose profile
* Nginx config (round_robin)
* Fix nginx
* Meilisearch + nginx in same net
* Fix env vars example
* Fix env example again
* Fix env again
* Use try_collect with FuturesOrdered
* maybe fix remove_documents
* Clippy
* fix: dont remount components for project page every time route changes
* remove ts from macro
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* update dependencies step to show when cannot detect suggested dependencies
* rollback environment to previous copy
* implement disable close when uploading in modal
* pnpm prepr
* update add files copy and go to next step on just one file
* rename and reorder stages
* add metadata stage and update details stage
* implement files inside metadata stage
* use regular prettier instead of prettier eslint
* remove changelog stage config
* save button on details stage
* update edit buttons in versions table
* add collapse environment selector
* implement dependencies list in metadata step
* move dependencies into provider
* add suggested dependencies to metadata stage
* pnpm prepr
* fix unused var
* Revert "add collapse environment selector"
This reverts commit f90fabc7a57ff201f26e1b628eeced8e6ef75865.
* hide resource pack loader only when its the only loader
* fix no dependencies for modpack
* add breadcrumbs with hide breadcrumb option
* wider stages
* add proper horizonal scroll breadcrumbs
* fix titles
* handle save version in version page
* remove box shadow
* add notification provider to storybook
* add drop area for versions to drop file right into page
* fix mobile versions table buttons overflowing
* pnpm prepr
* fix drop file opening modal in wrong stage
* implement invalid file for dropping files
* allow horizontal scroll on breadcrumbs
* update infer.js as best as possible
* add create version button uploading version state
* add extractVersionFromFilename for resource pack and datapack
* allow jars for datapack project
* detect multiple loaders when possible
* iris means compatible with optifine too
* infer environment on loader change as well
* add tooltip
* prevent navigate forward when cannot go to next step
* larger breadcrumb click targets
* hide loaders and mc versions stage until files added
* fix max width in header
* fix add files from metadata step jumping steps
* define width in NewModal instead
* disable remove dependency in metadata stage
* switch metadata and details buttons positions
* fix remove button spacing
* do not allow duplicate suggested dependencies
* fix version detection for fabric minecraft version semvar
* better verion number detection based on filename
* show resource pack loader but uneditable
* remove vanilla shader detection
* refactor: break up large infer.js into ts and modules
* remove duplicated types
* add fill missing from file name step
* pnpm prepr
* fix neoforge loader parse failing and not adding neoforge loader
* add missing pack formats
* handle new pack format
* pnpm prepr
* add another regex where it is version in anywhere in filename
* only show resource pack or data pack options for filetype on datapack project
* add redundant zip folder check
* reject RP and DP if has redundant folder
* fix hide stage in breadcrumb
* add snapshot group key in case no release version. brings out 26.1 snapshots
* pnpm prepr
* open in group if has something selected
* fix resource pack loader uneditable if accidentally selected on different project type
* add new environment tags
* add unknown and not applicable environment tags
* pnpm prepr
* use shared constant on labels
* use ref for timeout
* remove console logs
* remove box shadow only for cm-content
* feat: xhr upload + fix wrangler prettierignore
* fix: upload content type fix
* fix dependencies version width
* fix already added dependencies logic
* add changelog minheight
* set progress percentage on button
* add legacy fabric detection logic
* lint
* small update on create version button label
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Worker migration
* Deploy on pnpm changes
* Specify package manager
* Manually bump Wrangler to 4.54
* Get rid of useless Wranglers worker
* I take it back
* Set account ID
* Fix preview alias
* feat: use workers api key
* feat: try fix
* fix: missing imports
* fix: again
* fix: only run push workflow on main or prod
* feat: remove store id?
* Populate secret store IDs
* Use correct key name
* Fix setting PREVIEW variable
* Inject variables from wrangler into shell
* Inject variables from wrangler into shell
* Add git- prefix to preview-alias
* No need to use environments now
* fix: remove test as it's covered by staging deploy
---------
Co-authored-by: Michael H. <michael@iptables.sh>
* fix hydration error in moderation queue
* disabled moderation button when no projects
* fix circular prop type issue
* Make moderation checklist clientonly
* Change input mode and types and modes for sign-in form
-Added the inputmode of "email" to tell mobile browsers to change to the email keyboard for username/email input
-Added the inputmode of "numeric" to tell mobile browsers to change to the numeric keyboard for 2fa input (https://www.w3schools.com/TAgs/att_inputmode.asp)
-Changed two-factor code input type to "numeric" to provide a greater hint to autofill that this is where they should fill in 2fa codes
Signed-off-by: MIfoodie <94649676+MIfoodie@users.noreply.github.com>
* Clean up whitespace in sign-in.vue that I accidently added :)
Removed extra whitespace before the Google authentication link.
Signed-off-by: MIfoodie <94649676+MIfoodie@users.noreply.github.com>
* Change input type from 'number' to 'text'
Signed-off-by: MIfoodie <94649676+MIfoodie@users.noreply.github.com>
---------
Signed-off-by: MIfoodie <94649676+MIfoodie@users.noreply.github.com>
Co-authored-by: Calum H. <contact@cal.engineer>
* add a throttle on populate jump back in list
* Revert "add a throttle on populate jump back in list"
This reverts commit b3e7f51b34936dd7487a51f2dab7170af19706cf.
* only allow populate jump back in list to run 3x on linux
* add temp debug logs
* Revert "add temp debug logs"
This reverts commit 8c5ec42fa3b48f11a416555ae7b366e44fa42b54.
* only allow 3x refresh limit for worlds list as well
* Provide more specific payout method names on frontend
Been getting a lot of confused tickets recently of people withdrawing to PayPal but then not recognizing what "Tremendous" means. This should clarify things.
* feat: improve icons + names for withdrawals
* Update apps/frontend/src/components/ui/dashboard/RevenueTransaction.vue
Co-authored-by: Emma Alexia <emma@modrinth.com>
Signed-off-by: Calum H. <hendersoncal117@gmail.com>
* fix: icons
* fix: object cover
* feat: icons for crypto + bank
* fix: remove empty null
* fix: qa
---------
Signed-off-by: Calum H. <hendersoncal117@gmail.com>
Co-authored-by: Calum H. <contact@cal.engineer>
* update reports message to the correct support bubble color
* update checklist to direct to new settings pages and use v3 env info
* fix: project v2 + v3 in moderation checklist funcs
* Split environment stage if project uses mixed environments.
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* add edit versions dropdown menu
* implement improved edit version with individual edit stages
* make changelog bigger
* update button styles
* remove hover button when hover on row
* bring editing versions back to project settings
* bring back gallery edit and upload in project page
* fix progress value
* fix admonition import
* fix v3 upload for modpacks
* fix modpack loader display for editing version and better open edit/create modal handling
* fix currentMember prop
* fix modpack loader displaying incorrectly
* fix max length
* fix version url after making an edit to version and fix delete
* small max height fix
* hide edit dependencies for modpack
* pnpm run fix
* fix import
* add tooltip
* update icons
* update copy and create version button style
This would conflict with the flattened kind: PaymentRequestMetadataKind
enum, which itself is internally tagged with "type", leading to two
"type" fields being serialized, confusing the deserializer.
Deserialization would fail, be silenced in the stripe webhook and lead
to the incorrect region being assigned to a server.
* start modal, working show modal
* add stages and implement MultiModalStage component
* add project versions context and add file button
* implement add files stage
* export interfaces
* move MultiStageModal to /base
* small update to file input
* add version types to api-client
* wrap version namespace under v3
* implement add details stage fields and loaders component
* start create MC versions stage
* implement changelog stage and bring width into a per stage concern
* implement loader picker with grouping
* improve grouping and sorting for loader picker
* use chips component
* small updaets
* fix loader icon color
* componentize mc version picker
* initial version of shift click to select range
* use newModal for markdown editor
* start add dependencies stage with search
* implement showing mod options in search
* componentize modselect and add version/dependency relation select
* hide version and dependency relation when no project selected
* fix project facet search
* implement api-client versions requests
* fix search api request facet type to be string
* fix new modal outer container scroll
* implement add dependency stage
* fix parse error
* add placeholders
* fix types
* update dependency row styles
* small change
* fix the types on manage versions to be correct with labrinth request bodies
* fix create version file parts
* use draft version ref in flow and implement proper file handlling
* use draft version ref for mc versions select
* implement reactive modal state and conditionally disabled next buttons
* ensure all data is using draftVersion ref
* remove shift click to select range since it sucks
* fix up add dependencies stage state/types
* small fixes
* implement adding dependencies connected to api calls and make adding dependencies work
* add final create version button config
* start create version backend call and bring versions table to project settings
* set add files stage width
* remove version file upload in project page
* small fix
* fix create version api call
* implement error handling
* implement mc versions search
* implement showing all mc versions
* small fix
* implement prefill data
* add success notification
* add cancel button
* add new dropzone file input
* run pnpm run fix
* add tailwind preset in ui package
* polish file version row
* fix modal widths
* hide added versions when no versions added
* implement add loaders stage
* implement small chips and small fixes
* implement grouping for all releases
* implement new all releases grouping
* implement better shift click for version select
* small fixes
* fix search input style
* delete versions provider and start project type inferring
* implement getting project type
* add versions empty state, add folder up icon and pnpm run fix
* implement create version in project versions table
* update side nav
* implement dynamic create version flow depending on project type and detected data
* add id to stages and fix calling setStage not working
* move added loaded out of loader picker
* remove selected and detected MC versions
* add loading message to dependency search and fix dependency type always being "required"
* fix components in ref
* fix width on dropdown
* implement toggle all mc versions based on state of last in range
* fix mc version text colour
* do proper clean up
* update loaders to use tag item
* update UI to use TagItem and better match styles
* handle detected data when setting primary file
* add progress bar
* hide progress bar for non-progress stage
* add loading state on submit
* properly cache dependencies projects/versions
* pnpm run fix
* add dragover show purple border on dropzone file input
* better handle added dependencies
* move versions in side nav
* implement adding file type
* fix api body format for file type
* implement working edit existing version
- working add/remove file
- working edit version details
* a step towards proper versions refresh
* add gallery to project settings
* actually figured out refresh versions
* move checklist into settings page
* remove editing version from version page and add button to versions table in project settings
* remove edit and delete buttons from gallery in project page
* add empty state messages for project page
* add default scroll bar styles
* implement support for new file types
* remove edit from dropdown in project page versions table
* redirect to settings page
* move changelog to row with actions
* fix overflow on added dependencies
* fix redirect
* update scroll styles
* implement add environment stage (create and modify version not persisting environment to backend)
* small style fixes
* small spacing fix
* small style fixes
* add a flag for loading dependency projects
* address PR comments
* fix modrinth ui imports
* use magic keys instead of window.addeventlistener
* add spacing in bottom of settings page
* useDebounceFn from vue
* fix inconsistent stroke
* persist scroll through
* fix remove button
* fix api fields
* fix version file dropdown: hide primary option in edit mode and fix setting initial value
* fix links in nags
* implement skipped field for skipping steps instead of mutating stages array's elements
* implement suggested dependencies components
* implement suggested dependencies api call
* refactor cached get project and get version calls
* always hide environments
* update links
* set scroll in 10ms
* update links
* fix links pt2
* fix shadow
* fix progress bar
* dont include mc versions in suggested versions finder
* fix text overflow styles
* use tooltip
* fix change version name api
* implement set environment api call
* delete unused vue pages
* implement detected environment, edit environment step, and fix showing loaders in details for no loader projects
* small fix
* no loaders project wrong check
* fix not having 'minecraft' loader for resource pack
* implement updating existing files file type
* move add minecraft loader outside try catch
* add datapack to have environment
* fix being able to select duplicate MC versions
* remove datapack project from environment
* fix version fetch
* fix having detected environment not properly skipping step
* only add detected data when primary file changes
* fix unknown environemtn
* implement gallery and versions have moved admonition
* update project page for creator view
* small copy update
* merge fixes
* pnpm run fix
* fix checkmark squished
* fix version type can be deselected
* refactor: DI context + better typed MultistageModal
* fix type import
* Misc QA fixes
* fix allowed file types with no project type
* implement new add files stage
* fix versiosn header with new pagination
* hide buttons when no files for add file stage
* use prettier formatter
* allow signature file types
* add detecting primary file
* fix progress bar in firefox
* fix environment not correctly being hidden/shown
* remove environment missing nag
* temp bring back environment page
* remove delete version action from project page
* replace "continue" next button label with actual next step
* fix types
* pnpm run fix
* move supplementary files alert up and update border radius style on dropzone
* copy updates
* small update on version num placeholder
* update placeholder
* make timeout on upload routes 2 minutes
* fix lint issues
* run pnpm intl:extract
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* Refactor search page, migrate to /discover/
* Add NormalPage component for common layouts, refactor Collections page as an example, misc ui pkg cleanup
* intl:extract
* lint
* lint
* remove old components
* Refactor search page, migrate to /discover/
* Add NormalPage component for common layouts, refactor Collections page as an example, misc ui pkg cleanup
* intl:extract
* lint
* lint
* remove old components
* wip: affiliate payouts again
* Implement affiliate payout queue
* Deactivate subscription affiliations on cancellation
* Remove a test that never compiled in the first place
* Update sqlx cache
* address some PR comments
* more comments
* wip: handle refund charges
* cargo sqlx prepare
* Address PR comments
* cargo sqlx prepare
* Add auth servers unreachable warning to app
* Check auth status every 5 minutes
* Use admonition in auth server warning
* feat: tanstack
* Fix auth server reachability query
* Format
* intl extract
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
* Fix DEV-466, Fixes#4692 as well as a bunch of other poor contrast and inconsistency issues in light mode. Adds shadows to buttons and makes scrollbar gutter stable.
* lintttt & only do scrollbar gutter on website
* try to fix following hydration issue
* try another clientonly approach
* fix home page link animation
* lint
* remove dropdown style from checkbox & improve shadow consistency
* liiiint
* wip: gotenberg
* Generate and provide supporting docs for Mural payouts
* Correct docs
* shear
* update cargo lock because r-a complains otherwise
* Remove local Gotenberg queue and use Redis instead
* Store platform_id in database correctly
* Address PR comments
* Fix up CI
* fix rebase
* Add timeout to default env vars
* Account list is not scrollable
Fixes#4688
* Selecting Glitch in the log Screen
Fixes#4687 by explicitly defining the buffer
* When sorting or grouping your instance, the option you choose does not get saved
Fixes#4647
* use label prop to specify specific local storage for grid display state
* Implement persistent filters on mods page
Fixes#4517
* fix lint errors
* update schemastore links
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* fix: negative value stuff
* fix: mobile responsiveness for modal min-w
* feat: better error handling on withdraw
* fix: empty state positioning + svg sizing
* fix: title case -> sentence case
* fix: re-add virtual visa under gift cards
* fix: hide <1% segments
* wip: muralpay integration
* Basic Mural Pay API bindings
* Fix clippy
* use dotenvy in muralpay example
* Refactor payout creation code
* wip: muralpay payout requests
* Mural Pay payouts work
* Fix clippy
* add mural pay fees API
* Work on payout fee API
* Fees API for more payment methods
* Fix CI
* Temporarily disable Venmo and PayPal methods from frontend
* wip: counterparties
* Start on counterparties and payment methods API
* Mural Pay multiple methods when fetching
* Don't send supported_countries to frontend
* Add countries to muralpay fiat methods
* Compile fix
* Add exchange rate info to fees endpoint
* Add fees to premium Tremendous options
* Add delivery email field to Tremendous payouts
* Add Tremendous product category to payout methods
* Add bank details API to muralpay
* Fix CI
* Fix CI
* Remove prepaid visa, compute fees properly for Tremendous methods
* Add more details to Tremendous errors
* Add fees to Mural
* Payout history route and bank details
* Re-add legacy PayPal/Venmo options for US
* move the mural bank details route
* Add utoipa support to payout endpoints
* address some PR comments
* add CORS to new utoipa routes
* Immediately approve mural payouts
* Add currency support to Tremendous payouts
* Currency forex
* add forex to tremendous fee request
* Add Mural balance to bank balance info
* Add more Tremendous currencies support
* Transaction payouts available use the correct date
* Address my own review comment
* Address PR comments
* Change Mural withdrawal limit to 3k
* maybe fix tremendous gift cards
* Change how Mural minimum withdrawals are calculated
* Tweak min/max withdrawal values
---------
Co-authored-by: Calum H. <contact@cal.engineer>
Co-authored-by: Alejandro González <me@alegon.dev>
* Begin affiliates frontend
* Significant work on hooking up affiliates ui
* Clean up server nodes menu
* affiliates work
* update affiliate time
* oops
* fix local import
* fix local import x2
* remove line in dashboard
* lint
* Decouple project deletion from thread deletion
* Allow a thread to exist without a project
* attempt 2
* Modify migration to set orphaned threads' mods to NULL instead of removing constraint entirely
* Use mod PAT for mod threads
* Fix inconsistent PAT display order
Closes#4661
* Fix side effect in computed property
* Fix lint
---------
Co-authored-by: Calum H. <contact@cal.engineer>
* feat: split wrapper command on linux
* feat: use code from #3900
* feat: also use shlex on Windows
* feat: add a version number to global settings
* feat(app): add settings v2, where wrapper command are split
* Expose utilities for setting up the database
* Expose migrator directly
* Make some test utils publicly accessible
* expose migrator
* more test fixture utils
* more test fixture utils
* more test fixture utils
* fix
* fix lint
* feat: blog
* feat: creator withdraw overhaul blog
* fix: bullet points
* fix: title
* fix: blog
* feat: autoplay on scroll & fix encoding of videos
* fix: class on first video
* fix: authors + summary + title
* fix: title + summary
* fix: lint
* fix: rev page mp4
* update formatting + phrasing
* some more formatting changes
* unify hr colors
* update opening line
* update blog time
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Update 1-app-bug.yml
Signed-off-by: Prospector <6166773+Prospector@users.noreply.github.com>
* update the rest of the templates
* Update issue template formatting further
* Disable blank issue + get rid of some contact links
* fix issue location id
* more updates
---------
Signed-off-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Update ad placeholders to new green graphic
* Remove rounded corners from app ad frame
* Improve web ad placeholder styling
* Revamp app sidebar to match mockups more closely, greatly improve friends UX, fix up context menus and typify shit
* only show overflow on hover
* lint
* intl:extract
* clean up the inline code in FriendsSection
* Clearer error on TIN mismatch
* Remove ctoken code (how did that end up there)
* polish: frontend for TIN/SSN mismatch
* fix: lint
* polish: only banner + change text
* fix: logic
* fix: lint
---------
Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
While researching and fixing other issue, it caught my attention that we
are embedding a library patches JSON file from the PrismLauncher meta
repository. However, since we copied that file, a new revision of it was
published with patches that improve compatibility with Apple Silicon
macOS platforms.
These changes update such a file and, perhaps most importantly, add a
comment explaining the provenance and licensing of such a file.
I made a typo on PR https://github.com/modrinth/code/pull/4426 by making
the corresponding SQL query filter by projects with an unexisting
`public` status, instead of `approved`. During my testing, I used the
`archived` status, so I didn't notice it back then.
* Reapply "refactor(app): reduce tech debt by eliminating `wry` fork (#4500)"
This reverts commit 2535156dac.
* test: temporarily replace ad link by something with sound
* Revert "test: temporarily replace ad link by something with sound"
This reverts commit 74bb7eecb7cc7b17ccfd6b2e20c24eeec38ac363.
* Reapply "test: temporarily replace ad link by something with sound"
This reverts commit f1b0e9f2c4a30f789099048e98ffa91ff376f571.
* test: also disable ads init muting script for good measure
* Revert "test: also disable ads init muting script for good measure"
This reverts commit 4ac7a81e1780f13c976d033c420bfe1d5db9c298.
* Revert "Reapply "test: temporarily replace ad link by something with sound""
This reverts commit c5f1b9f242f5c7f56b40f21b586e8b484c7eb3c5.
* Taplo and typos in CI
* Clean up Cargo.toml files
* Fix CI
* Fix CI
* Run typos in CI
* Loosen typos a bit
* Fix typos
* Fix taplo
* Switch to Tombi
* Fix Tombi errors
* Remove unused typos config
* Tombi fmt
* Remove extraneous cargo fmt
* fix typos
* start with analytics v2
* the big ass SQL query™
* downloads and views analytics working
* Implement analytics bucketing API
* allow filtering by monetization
* Use a new format for project metrics and bucketing
* revenue API works
* Add country data to analytics API
* Add checks for number of slices and time slice resolution
* work on docs
* wip: fix tests and add docs
* Fix tests
* Fix tests
* Uncomment crates
* feat: frontend CLAUDE.md (#4433)
* Slight tweaks to time slicing logic
* More tweaks
* Fix error messages
* Fix sqlx cache
---------
Co-authored-by: Calum H. <contact@cal.engineer>
* feat: surface variables & gradients
* feat: text vars
* fix: lint
* chore: remove L from surface vars
* fix: fully remove L from surface vars
---------
Co-authored-by: --global <--global>
* Mark transactions with unresolvable addresses as unresolved
* Add customer_name + customer_id to anrok transactions
* Increase rate of Anrok syn
* Remove timer from update_tax_transactions
* chore: query cache, clippy, fmt
PR #4270 modified the internal `fetch` function used by the application
to download version artifacts in a way that 4xx HTTP errors also caused
an abnormal return, instead of just 5xx errors. That was a good change,
but it had the unintended side effect of exposing our faulty logic
elsewhere of trying to download non-native JAR library artifacts when
only native artifacts are appropriate, at least according to the
PrismLauncher source code I've read. Such a download always returned a
404 error, but because such error was considered successful, a dummy
library file was still created and things worked seemingly fine.
These changes bring the Modrinth App behavior in this regard more in
line with PrismLauncher's, avoiding downloading non-native artifacts for
dependencies that have native artifacts available. (Reference:
https://github.com/PrismLauncher/PrismLauncher/blob/8b5e91920dda7324ad3db98f56b209bba0f4e57d/launcher/minecraft/Library.cpp#L163)
I've tested these changes to work successfully with a variety of old
vanilla and modded Minecraft versions.
Fixes#4464.
PR #3960 reverted the Cranelift usage introduced in #4388 due to its
codegen not being up to standard when compiling some pieces of code
under some platforms. However, it didn't revert the switch to a nightly
Rust toolchain, which is now unnecessary, and produces unnecessary drift
between what's declared in the `rust-toolchain.toml` and the Docker
image manifests, causing inefficiencies.
These changes bring back the usage of stable Rust for the time being to
correct those inefficiencies.
* tweak(path-util): addendum to #4482
These changes improve on those introduced in #4482 in two ways:
- The serialization logic for `SafeRelativeUtf8UnixPathBuf` now more
closely mirrors the deserialization checks, reducing the chance that a
generated path will fail to deserialize. While unlikely in practice,
catching such theoretical cases earlier improves the experience for
users and developers.
- After deeper testing on a clean Windows 10 VM, I found that reserved
device names can have both an extension and an alternate data stream
appended, not just one or the other. These changes handle that case
more gracefully.
* chore: fix typos, add tests
* fix(path-util): extend `SafeRelativeUtf8UnixPathBuf` contract to allow `.` components
While quite useless, they were accepted by previous app versions, the
`.mrpack` specification does not forbid them, and they do not pose
security issues, so accept them for backwards compatibility.
* Use price's currency rather than inferred stripe currency in PaymentIntent
* Correctly convert to stripe::Currency
* Include original currency code in error message
Maybe this will work? I dunno but users are still saying they're getting errors deleting accs. In theory it shouldn't matter if the transaction all gets committed at the same time, though, right? I can't really test this so I would like someone to tell me whether this will actually make a difference.
Co-authored-by: François-X. T <fetch@ferrous.ch>
* Replace actix tracing with custom error tracing
* Fix logging
* wip: JSON logging
* Use LABRINTH_FORMAT to change to JSON output
* sqlx fix?
* CI fix
* Add tracing span info to HTTP requests
* Merge Result and Option error wrapping
* Add http.authorized to tracing
This is a follow-up to PR #4426. I initially didn't consider the
organizations an user belongs to as worth hiding, but given that user
profiles can be public, I suppose there technically is a way to exploit
them for SEO abuse. Overall, it also seems more consistent to hide them
here too.
`cargo sqlx prepare` should be run in the directory of the crate that
contains the database queries instead, as that's what we're documenting
and have standarized on.
* Make theseus capable of logging messages from the `log` crate
* Move update checking entirely into JS and open a modal if an update is available
* Fix formatjs on Windows and run formatjs
* Add in the buttons and body
* Fix lint
* Show update size in modal
* Fix update not being rechecked if the update modal was directly dismissed
* Slight UI tweaks
* Fix lint
* Implement skipping the update
* Implement the Update Now button
* Implement updating at next exit
* Turn download progress into an error bar on failure
* Restore 5 minute update check instead of 30 seconds
* Fix PendingUpdateData being seen as a unit struct
* Fix lint
* Make CI also lint updater code
* feat: create AppearingProgressBar component
* feat: polish update available modal
* feat: add error handling
* Open changelog with tauri-plugin-opener
* Run intl:extract
* Update completion toasts (#3978)
* Use single LAUNCHER_USER_AGENT constant for all user agents
* Fix build on Mac
* Request the update size with HEAD instead of GET
* UI tweaks
* lint
* Fix lint
* fix: hide modal header & add "Hide update reminder" button w/ tooltip
* Run intl:extract
* fix: lint issues
* fix: merge issues
* notifications.js no longer exists
* Add metered network checking
* Add a timeout to macOS is_network_metered
* Fix tauri.conf.json
* vibe debugging
* Set a dispatch queue
* Have a popup that asks you if you'd like to disable automatic file downloads if you're on a metered network
* Move UpdateModal to modal package
* Fix lint
* Add a toggle for automatic downloads
* Fix type
Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
Signed-off-by: Josiah Glosson <soujournme@gmail.com>
* Redo updating UI and experience
* lint
* fix unlistener issue
* remove unneeded translation keys
* Fix expose issue
* temp disable cranelift, tweak some messages
* change version back
* Clean up App.vue
* move toast to top right
* update reload icon
* Fixed the bug!!!!!!!!!!!!
* improve messages
* intl:extract
* Add liquid glass icon file
* not you!
* use dependency injection
* lint on apple icon
* Fix imports, move download size to button
* change update check back to 5 mins
* lint + move to providers
* intl:extract
---------
Signed-off-by: Cal H. <hendersoncal117@gmail.com>
Signed-off-by: Josiah Glosson <soujournme@gmail.com>
Co-authored-by: Calum <calum@modrinth.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: Cal H. <hendersoncal117@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
* Only update the PaymentMethod ID if not using placeholder ID
* comment
* Create Anrok transactions for all charges
* Fix comment
* Prefer using payment method's address rather than customer address
* chore: query cache, clippy, fmt
* Retrieve stripe address from PM
* chore: query cache, clippy, fmt
* fmt
* bring back the query cache
* Better address retrieval for updating tax amounts, always update tax_last_updated
* chore: query cache, clippy, fmt
* Don't set PM in ctoken interactive session for new PIs
* draft: layout for alert
* feat: simplify
* feat: remove dummy data
* fix: lint and widths
* feat: use chips rather than dropdown select
* feat: remove gap from admonition header v body
* Revert "feat: remove gap from admonition header v body"
This reverts commit 46cce52799bc3ac24825a73ca4add18e0acad3c1.
* fix: niche fixes
* feat: update for new backend structure
* fix: i18n
* Only update the PaymentMethod ID if not using placeholder ID
* comment
* Create Anrok transactions for all charges
* Fix comment
* Prefer using payment method's address rather than customer address
* chore: query cache, clippy, fmt
* Retrieve stripe address from PM
* chore: query cache, clippy, fmt
* fmt
* bring back the query cache
* chore(labrinth): set `DELPHI_URL` to a valid default in `.env.local`
* feat(labrinth): make orgs not publicly visible until they meet some conditions
* Revert "Org disabled frontend (#4424)"
This reverts commit 2492b11ec0.
* changelog: update for re-enabling organization creation
* chore: run `sqlx prepare`
* chore(labrinth): tweak tests to work with new org changes
* tweak: apply @triphora's suggestion
Co-authored-by: Emma Alexia <emma@modrinth.com>
Signed-off-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
* tweak: document `is_visible_organization` relationship with `Project#is_searchable`
---------
Signed-off-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
Co-authored-by: Emma Alexia <emma@modrinth.com>
* Only update the PaymentMethod ID if not using placeholder ID
* comment
* Create Anrok transactions for all charges
* Fix comment
* Prefer using payment method's address rather than customer address
* chore: query cache, clippy, fmt
* "Submit for review" button translation
* Fix invitation message in the code
* Run web:fix
* Run intl:extract
---------
Co-authored-by: Calum H. <contact@cal.engineer>
* Switch to nightly + cranelift
* Fail on warnings only in CI
* Fix check errors
* Don't use mold on Linux to fix CI
* Pin nightly toolchain and add default rustup components
* Fix another CI thing
* PR comment
* Initial affiliate codes implementation
* some more docs to codes
* sqlx prepare
* Address PR comments
* Address more PR comments
* fix clippy
* Switch to using Json<T> for type-safe responses
* Some new notification types
* Fix error
* Use existing DB models rather than inline queries
* Fix template fillout
* Fix ModerationThreadMessageReceived
* Insert more notifications, fix some formatting
* chore: query cache, clippy, fmt
* chore: query cache, clippy, fmt
* Use outer transactions to insert notifications instead of creating a new one
* Join futures
* Slack webhook for payout alerts
* add PAYOUT_ALERT_SLACK_WEBHOOK to check_env_vars
* Fix commit
* Fix webhook format
* Add new env vars in .env.local
* Rename env vars, fire webhook on error
* Fix compilation
* Clippy
* Fix CI
* Add env vars to .env.docker-compose
* Fix error when trying to delete user with uploaded images
`{"error":"database_error","description":"Database Error: Error while interacting with the database: error returned from database: update or delete on table \"users\" violates foreign key constraint \"uploaded_images_owner_id_fkey\" on table \"uploaded_images\""}`
* Update certain things to use Ghost instead of deleting entirely
* Fix mistake
* Make it slightly clearer that the app is in beta and add linux disclaimer. Also changed the way Modrinth App was being referred to as a regular noun instead of a proper noun
* i18n for app page
* update home page to use ~content
* Improve project page performance by removing unnecessary slow request for featured versions
* Allow existing featured versions users to continue using it with deprecation warning.
* Fix redirect from project ID
* improve fix
* improve accessibility of environment selector
* lint
* fix mobile accessibility of project settings and improve message for those without permission
* disable envs when multiple + lint
This reconciles a couple of differences between the frontend and backend regarding gallery image uploads.
- Frontend: The frontend thought that the limit should be 500 MiB for gallery images. This is obviously not right. It has been updated to 5 MiB.
- Backend: The backend has been rejecting anything between 2 MiB and 5 MiB, but this is inconsistent with prior usage, where the limit used to be 5 MiB. It has been updated to allow anything under 5 MiB.
Fixes#4291
* Ensure that fetch errors are properly propagated
* Handle user not found errors better in add_friend
* Cargo fmt
* Introduce new LabrinthError returnable by fetch_advanced
* Allow enter key to send a friend request
These changes add a layered hook to the `markdown-it` renderer rules to
resolve `<img>` element `src` attributes and `<a>` element `href`
attributes to a path-absolute relative URL, to ensure that such URLs
always point to the same resource URL even when the URL the current
resource is being viewed from changes.
This fixes an issue with relative links and image source URLs being
broken when a blog post was watched from a URL that lacked a trailing
slash, as web browsers adjust the path relative URLs are resolved from
depending on whether such character is present, and we didn't account
for that.
While at it, I've rebuilt all the blog posts and their associated RSS
feed.
* New envs frontend
* lint fix
* Add blog post, user-facing changes, dashboard warning, project page member warning, and migration reviewing. maybe some other misc stuff
* lint
* lint
* ignore .data in .prettierignore
* i18n as fuck
* fix proj page
* Improve news markdown rendering
* improve phrasing of initial paragraph
* Fix environments not reloading after save
* index.ts instead of underscored name
* shrink-0 back on these icons
* Fix and unify version selection when installing mods
* Update version list filters to match install version selection logic
* Fix lint issues
---------
Co-authored-by: Cal H. <contact@cal.engineer>
* Revert "Revert "feat: medal promotion on servers page (#4117)""
This reverts commit 2e6cff7efc.
* Revert "Revert "update changelog""
This reverts commit b2ff2d8737.
* Revert "Revert "turn off medal promo""
This reverts commit eaa4b44a16.
* Revert "Revert "Revert "turn off medal promo"""
This reverts commit 76d0ef03e7.
* Revert "Revert "fix medal thing showing up for everyone""
This reverts commit ee8c47adcb.
* New medal colors
* Update medal server listings
* Upgrade modal enhancements & more medal consistency
* undo app promo changes
* Only apply medal promo with flag on
* remove unneessary files
* lint
* disable medal flag
* Reapply "Implement a more robust IPC system between the launcher and client (#4159)"
This reverts commit e25d726da4.
* Put game JAR and theseus JAR ahead of other JARs in classpath
* Fix 1.17-1.20 Forge by forcefully removing Multi-Release manifest entry
* Fix formatting
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* remove "experimental" color vars, remove conflicting styles from frontend-specific css
* lint
---------
Co-authored-by: Cal H. <hendersoncal117@gmail.com>
* 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
* Multiple billing fixes
- Fix the open charge not having its amount + interval updated after
promoting the expiring subscription
- Fix proration rate being miscalculated (assumed the current
subscription interval was always monthly)
- Fix the open charge's interval and amount being updated on PATCH
/subscription/:id even if the payment intent was never confirmed
* Appease clippy
* Update apps/labrinth/src/routes/internal/billing.rs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com>
---------
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat: surveys
* make assigned and dismissed users fields optional
* fix: set required CSP sources for Tally forms to show up
* make only attempt on windows, temp bypass requirements
* fix: lint issues
* Add prompt for survey prior to popup
* lint
* hide ads when survey is open
---------
Signed-off-by: Cal H. <hendersoncal117@gmail.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: Cal H. <hendersoncal117@gmail.com>
Co-authored-by: IMB11 <calum@modrinth.com>
* Implement a more robust IPC system between the launcher and client
* Clippy fix and cargo fmt
* Switch to cached JsonReader with LENIENT parsing to avoid race conditions
* Make RPC send messages in lines
* Try to bind to either IPv4 or IPv6 and communicate version
* Move message handling into a separate function to avoid too much code in a macro
* feat: set up typed nag (validators) system
* feat: start on frontend impl
* fix: shouldShow issues
* feat: continue work
* feat: re add submitting/re-submit nags
* feat: start work implementing validation checks using new nag system
* fix: links page + add more validations
* feat: tags validations
* fix: lint issues
* fix: lint
* fix: issues
* feat: start on i18nifying nags
* feat: impl intl
* fix: minecraft title clause update
* fix: locale issues
* refactor: inline i18n
* fix: summary char min
* fix: issues
* Rephrase a few core nags
* Modify character limit numbers
* Remove redundant sentanceEnders check to reduce false positive.
* Description nag rephrasing and tweaks
* Tweak links nags adding project type checking for source publication check, make description nag tonally consistent.
* fix: description nag
* bump source publication nag to warn until additional files can be checked.
* refactor link checking helper functions, prevent misuse of dsc links, prevent link shortener usage, check if source required licensed projects have additional files, bump this check back to required.
* Correct plugin project type checking
* fix: lint issues
* update links.ts
* feat: key + sort nags by type
* Tweak core and description nag titles, change image accessability nag logic.
* feat: update readme
* updates to tags checking and rest of the nag titles
* fix locale
* fix: formatjs
* fix tags warning, and link shorteners and misused discord warnings to link settings page, reword some warnings.
* correct vocabulary for resolutions tags warning and sort tags list in resolution tags nag
* lint fix
* fix method typo
* Add nag for summary formatting.
* Check for link shorteners in donation links
* add Gallery requirement nag for shaders and most resource packs
* update index.json
---------
Signed-off-by: IMB11 <hendersoncal117@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: coolbot100s <76798835+coolbot100s@users.noreply.github.com>
* feat(labrinth): support STMP servers with no auth credentials
* feat: set up Mailpit SMTP server as part of our Docker Compose services swarm
* chore(docker-compose): fix healthcheck for mail service
* feat(docker-compose): enable SpamAssassin integration through Postmark
Unlike spinning up yet another container, this requires no
configuration, and is good and simple enough for a funny little feature
developers may occassionally use with non-confidential messages.
* feat(docker-compose): give all containers a name
* fix(docker-compose): fix healthcheck for clickhouse container
For some reason, its CMD form always returned a healthcheck error, at
least in Podman.
* fix(editorconfig): address formatting regression for YAML files introduced in 8af65f58d9
* fix: frontend temp editorconfig change
* fix(editorconfig): add more extensions that use 2 spaces indentation
---------
Co-authored-by: Calum H. (IMB11) <hendersoncal117@gmail.com>
* Make Windows app installations per-user once again
* Add ShellExecuteWait credit
* Properly remove old shortcuts
* With *an* admin prompt
* Explicitly set installMode to currentUser
* chore(docs/labrinth): remove unnecessary trailing spaces in lines
These don't serve an useful purpose, and overall the Markdown source
looks less tidy with them.
* chore: replace Labrinth -> labrinth
* Change "Billing" link on dashboard for admins
Requires an archon change before merging
* change order
* steal changes from prospector's old PR
supersedes #3234
Co-authored-by: Prospector <prospectordev@gmail.com>
* lint?
---------
Co-authored-by: Prospector <prospectordev@gmail.com>
* Implement direct server joining for 1.6.2 through 1.19.4
* Implement direct server joining for versions before 1.6.2
* Ignore methods with a $ in them
* Run intl:extract
* Improve code of MinecraftTransformer
* Support showing last played time for profiles before 1.7
* Reorganize QuickPlayVersion a bit to prepare for singleplayer
* Only inject quick play checking in versions where it's needed
* Optimize agent some and fix error on NeoForge
* Remove some code for quickplay singleplayer support before 1.20, as we can't reasonably support that with an agent
* Invert the default hasServerQuickPlaySupport return value
* Remove Play Anyway button
* Fix "Server couldn't be contacted" on singleplayer worlds
* Fix "Jump back in" section not working
* oop, all commas!
* Only show slug stuff when needed.
* Move status alerts to top of message, getting rid of separators.
* redist libs message altered, and now shows on plugins too
* Update versions.ts
remove unnecessary import
Signed-off-by: coolbot <76798835+coolbot100s@users.noreply.github.com>
* Tweak summary formatting msg
* Update license messages to use flink
* reorder link text to match the settings page
* add Description clarity button
---------
Signed-off-by: coolbot <76798835+coolbot100s@users.noreply.github.com>
* Detection of protocol versions before 18w47b
* Refactor old_protocol_versions into protocol_version
* Ping servers closer to how a client of an instance's version would ping a server
* Allow pinging legacy servers from a modern profile in the same way a modern client would
* Ping 1.4.2 through 1.5.2 like a Vanilla client in those versions would when in such an instance
* Typo correction
* show optimization button when present in additional categories
* add more formatted link shortcuts
* Add info text to env info stage
* Only show gallery relevancy button when relevant.
* add unsupported project type message to versions stage
* Fix misuse of slug message.
* Update unsupported_project.md
* lint fix
* Hopefully fix collection visibility once and for all
Follow up to #3408 and #3864
* Use same unlisted approach for collections as is used for projects
* Allow modification of failed charges on admin billing page
Allows cancelling a failed subscription and forcing another charge attempt
* use addNotification
* fix(app-frontend): do not emit exceptions when no loaders are available
* refactor(app): simplify Microsoft login code without functional changes
* feat(app): external browser auth flow for Modrinth account login
* chore: address Clippy lint
* chore(app/oauth_utils): simplify `handle_reply` error handling according to review
* chore(app-lib): simplify `Url` usage out of MC auth module
Fixes#1485
Also fixes an issue where email_verified was being set to true regardless of whether the oauth provider provides an email (thus indicating that a null email is verified)
* fix text in license and links stages, change a license option to conditional
* remove unused project definition
* Switch markdown to use <br />
---------
Co-authored-by: Prospector <prospectordev@gmail.com>
* starting on new checklist implementation
Change default shouldShow behavior for stages.
add new messages and stages.
Change some existing stage logic.
Add placeholder var for the rules.
Co-Authored-By: @coolbot100s
* misc fixes + corrections
* Add clickable link previews to links stage
* Correct mislabeled title message and add new title messages
* Change message formatting, use rules variable, correct wip desc and title 1.8 messages, add tags buttons
* More applications of rules placeholder
* Add new status alerts stage
* change order of statusAlerts
* Update title related messages, add navigation based vars
* Overhaul Links stage and add new messages.
* Set message weights, add some disables
* message.mds now obey lint >:(
* fixed links text message formatting and changed an icon
* Combine title and slug stages
* Add more info to some stages and properly case stage ids
* tweak summary text formatting
* Improved tags stage info and more navigation placeholders
* redo reupload stage, more navigation placeholders, licensing stage improvements, versions stage improvements, status alerts stage improvements
* Allow modpack permissions stage to appear again by adding a dummy button.
* Update modpack permissions guidance
* fix: blog path issues
* fix: lint issues
* fix license stage text formatting
* Improve license stage
* feat: move links into one md file to be cleaner
* Update packages/moderation/data/stages/links.ts
Signed-off-by: IMB11 <hendersoncal117@gmail.com>
---------
Signed-off-by: IMB11 <hendersoncal117@gmail.com>
Co-authored-by: IMB11 <hendersoncal117@gmail.com>
Co-authored-by: IMB11 <calum@modrinth.com>
We standarized on using `rustls` as a TLS implementation across the
monorepo, which is written in Rust and has better ergonomics,
integration with the Rust ecosystem, and consistent behavior among
platforms. However, the Labrinth Clickhouse client was the last
remaining exception to this, using the native, OS-provided TLS
implementation, which on Linux is OpenSSL and requires developers and
Docker images to install OpenSSL development packages to build Labrinth,
in addition to introducing an additional runtime dependency to Labrinth.
Let's make the process of building Labrinth slightly simpler by
switching such client to `rustls` as well, which results in finally
using the same TLS implementation for everything, a simplified build and
distribution process, less transitive dependencies, and potentially
smaller binaries (since `rustls` was already being pulled in for, e.g.,
the SMTP client).
* feat: add security.txt
Security.txt is a well-known (pun intended) file among security researchers, so they don't have to go scavenging for your security information. More information is available on [securitytxt.org](https://securitytxt.org/).
I've set the following values:
- The email to contact with issues, `jai@modrinth.com`. This is the email stated in the security policy. If you wish to not include it here due to spam, you should also not have it as a `mailto` link in the security policy.
- Expiry is set to 2030. By this time Modrinth has become the biggest Minecraft mod distributor, and having expanded into other games. By this time they should also have updated this file.
- English is the preferred language
- The file is located at modrinth.com/.well-known/security.txt
- The security policy is at https://modrinth.com/legal/security
The following values have been left unset:
- PGP key, not sure where this would be located, if there is one
- Acknowledgments. Modrinth does currently not have a site for thanks
- Hiring, as it wants security-related positions
- CSAF, a Common Security Advisory Framework ?
* fix(docs): reduce security.txt expiry
This addresses a concern where the security.txt has a long expiration date. Someone could treat this as "use this until then", which we don't want since it's a long time. The specification recommends no longer than one year, as it is to mark as stale.
From the RFC:
> The "Expires" field indicates the date and time after which the data contained in the "security.txt" file is considered stale and should not be used (as per Section 5.3). The value of this field is formatted according to the Internet profiles of [ISO.8601-1] and [ISO.8601-2] as defined in [RFC3339]. It is RECOMMENDED that the value of this field be less than a year into the future to avoid staleness.
Signed-off-by: Erb3 <49862976+Erb3@users.noreply.github.com>
* fix(frontend): extend security.txt expiry
It takes so long to merge the PR :(
Signed-off-by: Erb3 <49862976+Erb3@users.noreply.github.com>
* docs(frontend) careers link in security.txt
Signed-off-by: Erb3 <49862976+Erb3@users.noreply.github.com>
---------
Signed-off-by: Erb3 <49862976+Erb3@users.noreply.github.com>
Co-authored-by: Erb3 <49862976+Erb3@users.noreply.github.com>
* fix(theseus-gui): fix sort/group by game version
In the Library, game version 1.8.9 is sorted/grouped after 1.20 because
the default sorting sorts 2 < 8
therefore localeCompare(with numeric=true) is needed, it detects 8 < 20
and puts the versions in the correct order.
* lint
---------
Co-authored-by: Prospector <prospectordev@gmail.com>
* feat: only initialize batch renderer if needed & head storage
* feat: support webp storage of skin renders if supported (falls back to png if not)
* fix: performance improvements with cache loading+saving
* fix: mirrored skins + remove cape model for embedded cape
* feat: antialiasing
* fix: leg jumping & store fbx's for reference
* fix: lint issues
* fix: lint issues
* feat: tweaks to radial spotlight
* fix: app nav btn colors
* ci(theseus-build): ensure only relevant bundle artifacts are uploaded
Tauri leaves behind quite a bit of intermediate garbage in these target
folders, even when building with no build cache.
* ci(theseus-release): fix typo in RPM package URL generation
* ci(theseus-build): generate shorter and more user-friendly commit build versions
* dist(docker): add `.dockerignore` as symlink to `.gitignore`
This ensures that no files outside of version control are transferred to
the Docker build context for Labrinth and Daedalus images, which
significantly improves build speed (if a `target` directory is already
present) and build reproducibility.
* chore(dist/docker): simplify out unneeeded statements, move `SQLX_OFFLINE` env var setting to build command itself
The latter approach ensures that developers building the image locally
don't forget to set `SQLX_OFFLINE`, too.
* dist(docker): add `curl` package to Labrinth image
description: Add a new API endpoint module to packages/api-client from an OpenAPI schema. Use when adding new backend endpoints, creating API client modules, or when an openapi.yml is provided.
argument-hint: <path-to-openapi.yml>
---
Refer to the standard: @standards/frontend/ADDING_API_MODULES.md
## Steps
1.**Read the OpenAPI schema** at `$ARGUMENTS` — identify the endpoints, request/response shapes, and path parameters.
2.**Read the standard above** for naming conventions, type rules, and the module registration pattern.
3.**Determine the service and version** — the URL path prefix tells you which service directory and version namespace to use (e.g. `/v3/projects` → `labrinth/v3/`).
4.**Define types in `types.ts`** — types must match the API response 1:1. Use the OpenAPI schema as the source of truth. Do not reshape or rename fields.
5.**Create the module class** — extend `BaseModule`, implement each endpoint as a method. Use the correct HTTP verb and request options pattern from the standard.
6.**Register in `MODULE_REGISTRY`** — add the module entry so it's auto-instantiated on the client.
7.**Export types** from the service's barrel `index.ts`.
8.**Verify** — check that the module compiles and the types are accessible from `@modrinth/api-client`.
description: Convert a page to the cross-platform page system so it works in both the website and the desktop app. Use when moving a page into packages/ui/src/layouts/, creating shared or wrapped layouts, or setting up DI contracts for platform abstraction.
argument-hint: <path-to-page>
---
Refer to the standards: @standards/frontend/CROSS_PLATFORM_PAGES.md and @standards/frontend/DEPENDENCY_INJECTION.md
## Steps
1.**Read the target page** at `$ARGUMENTS` and understand its data sources, mutations, and navigation.
2.**Read the standards above** to understand the shared vs wrapped distinction and the DI pattern.
3.**Decide the category:**
- **Wrapped** (`layouts/wrapped/`) — if the page uses the same API source on both platforms (e.g. web requests, not Tauri plugins). Just move the page component into `packages/ui` and import it from both frontends.
- **Shared** (`layouts/shared/`) — if the page has different data-fetching logic per platform (e.g. website uses `api-client`, app uses Tauri `invoke`). Requires a DI contract.
4.**For shared layouts:**
- Define a DI contract interface in `providers/` capturing all platform-specific operations.
- Create the layout component that injects the context and handles all UI logic.
- Extract reusable stateful logic (search, filtering, selection) into `composables/`.
- Implement the contract separately in each frontend (`apps/frontend/`, `apps/app-frontend/`).
5.**For wrapped pages:**
- Move the page component into `packages/ui/src/layouts/wrapped/` matching the route structure.
- Replace any platform-specific imports with shared utilities.
- Import and render the wrapped page from both frontends as a simple component.
- If the layout uses TanStack Query for initial route paint with `ReadyTransition` / `useReadyState`, each platform route shell must call `ensureQueryData` for those queries with matching keys and fetchers — see **Platform route shells: prefetch with `ensureQueryData`** in `standards/frontend/CROSS_PLATFORM_PAGES.md`.
6.**Verify** the page renders correctly by checking for missing imports and that all DI contracts are satisfied.
description: Use the Figma MCP server to translate a Figma design into a Vue page or component layout. Use when the user provides a Figma URL, asks to implement a design, or wants to draft a page layout from Figma.
argument-hint: <figma-url>
---
Refer to the standard: @standards/frontend/FIGMA_MCP_USAGE.md
Also read @packages/ui/CLAUDE.md for color token mapping and component conventions.
## Steps
1.**Parse the Figma URL** from `$ARGUMENTS` — extract the `fileKey` and `nodeId`. Convert `-` to `:` in the node ID.
2.**Read the standards above** for the available tools, adaptation rules, and color usage.
3.**Call `get_design_context`** with the extracted `nodeId` and `fileKey`, using `clientLanguages: "typescript,html,css"` and `clientFrameworks: "vue"`. This is always the first tool to call.
5.**Adapt the output to the Modrinth codebase:**
- Map Figma color variables to `surface-*` / `text-*` tokens — never use Figma's aliased names directly.
- Check `packages/ui/src/components/` for existing components that match elements in the design (buttons, cards, modals, inputs, etc.).
- Check `packages/assets/styles/variables.scss` for tokens not exposed in Figma.
- Match spacing values exactly from the design.
6.**Use `get_screenshot`** if you need a closer visual reference of specific nodes.
7.**Use `get_variable_defs`** to verify which design tokens are applied to ambiguous elements.
8.**Build the component** as a Vue SFC using Tailwind classes and the project's existing component library.
description: Perform an i18n localization pass on changed files or a pull request, converting hard-coded English strings to the @modrinth/ui i18n system. Use when internationalizing a set of changes, reviewing a PR for untranslated strings, or converting a specific component.
argument-hint: [file-path-or-pr-number]
---
Refer to the standard: @standards/frontend/INTERNATIONALIZATION.md
## Steps
1.**Identify the scope of changes:**
- If `$ARGUMENTS` is a PR number, run `gh pr diff $ARGUMENTS` to get the changed files.
- If `$ARGUMENTS` is a file path, use that directly.
- If no argument, check `git diff` for uncommitted changes.
2.**Read the standard above** for the message definition pattern, ICU format rules, and `IntlFormatted` usage.
3.**Filter to Vue SFCs** — only `.vue` files need i18n passes. Skip non-component files.
description: Review the latest changelog entry in packages/blog/changelog.ts against the project's changelog style guide and flag bullets that need rewriting. Use when checking a freshly added changelog entry before opening a PR, or when the user asks to review/lint the latest changelog.
argument-hint: [product?]
---
Refer to the standard: @standards/maintaining/CHANGELOG.md
## Steps
1.**Locate the latest entry:**
- Open `packages/blog/changelog.ts`.
- The latest entries are at the top of the `VERSIONS` array.
- If `$ARGUMENTS` specifies a product (`web`, `hosting`, `app`), review the most recent entry for that product. Otherwise, review the most recent entry overall, plus any sibling entries sharing the same `date` (coordinated releases ship together).
2.**Read the standard above** in full before reviewing. The bullet rules, section/verb agreement, and "Don't" list are the source of truth.
3.**Check the entry shell:**
-`date` is a valid ISO 8601 timestamp.
-`product` is one of `web`, `hosting`, `app`.
-`version` is present for `app` entries and omitted for `web`/`hosting`.
- Section headings use `## Added`, `## Changed`, `## Fixed`, `## Security` (or a featured-release linked heading). Flag legacy `## Improvements`.
4.**Review each bullet** against the standard. For each bullet, check:
- Voice/tense matches the section heading.
- Opening verb agrees with its section.
- Describes observable behavior, not implementation.
- Specific enough to identify the surface (names the tab/page/modal).
- One sentence, ends with a period, sentence case.
- No filler ("issue with", "issue where", "various", "some"), no vague intensifiers, no apologies, no PR/commit references (unless crediting a third-party contributor with a linked GitHub profile).
- Not a duplicate sub-fix of a bigger change already listed.
5.**Report findings** as a short list grouped by entry. For each problem bullet, show the original line and a suggested rewrite. If the entry is clean, say so explicitly. Do not edit the file unless the user asks - this skill is a review pass, not a rewrite pass.
6.**If the user then asks to apply fixes**, edit `packages/blog/changelog.ts` directly using the suggested rewrites. Preserve tab indentation and template literal formatting.
description: Convert a page or component from useAsyncData/manual ref patterns to TanStack Query for server state management. Use when migrating data fetching to useQuery/useMutation, adding cache invalidation, or replacing useAsyncData with TanStack Query.
argument-hint: <path-to-file>
---
Refer to the standard: @standards/frontend/FETCHING_DATA.md
## Steps
1.**Read the target file** at `$ARGUMENTS` and identify all data-fetching patterns: `useAsyncData`, `useFetch`, manual `ref()` + `await`, or `onMounted` fetch calls.
2.**Read the standard above** for the query/mutation patterns, query key conventions, and optimistic update approach.
3.**Convert queries:**
- Replace `useAsyncData` / `useFetch` / manual fetches with `useQuery`.
- Use the `api-client` via `injectModrinthClient()` for the `queryFn`.
- Design query keys with the `['resource', 'version', ...params]` convention.
- Use `computed` query keys for reactive parameters.
- Use the `enabled` option for conditional queries that depend on other data.
4.**Convert mutations:**
- Replace manual `try/catch` + `ref` patterns with `useMutation`.
- Add `onSuccess` handlers that invalidate or update related query caches.
- Consider optimistic updates for UI-critical mutations (follow the pattern in the standard).
5.**Clean up:**
- Remove manual loading/error `ref()`s that are now handled by TanStack Query's return values (`isPending`, `isError`, `error`).
- Remove manual `onMounted` fetch calls.
- Ensure SSR compatibility — queries in Nuxt pages are automatically awaited during SSR.
6.**Verify** the page still renders correctly and that cache invalidation triggers re-fetches where expected.
You are given a Nuxt/Vue single-file component (.vue). Your task is to convert every hard-coded natural-language string in the <template> into our localization system using vue-i18n with utilities from `@modrinth/ui`.
Please follow these rules precisely:
1. Identify translatable strings
- Scan the <template> for all user-visible strings (inner text, alt attributes, placeholders, button labels, etc.). Do not extract dynamic expressions (like {{ user.name }}) or HTML tags. Only extract static human-readable text.
- There may be strings within the <script> block, e.g dropdown option labels, notifications etc.
2. Create message definitions
- In the <script setup> block, import `defineMessage` or `defineMessages` from `@modrinth/ui`.
- For each extracted string, define a message with a unique `id` (use a descriptive prefix based on the component path, e.g. `auth.welcome.long-title`) and a `defaultMessage` equal to the original English string.
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
name:'Merge Queue CI Check Skipper'
description:'Outputs `skip-check` as `true` if this is running as part of merge queue checks and the same checks have already been executed in the PR itself.'
inputs:
secret:
description:'Optional GitHub Secret that can access branch protection rules using the administration:read permission'
if [[ "$targetBranchHead" != "${{ steps.extract-pr-info.outputs.commitId }}" ]]; then
echo "'${{ steps.extract-pr-info.outputs.targetBranchName }}' branch commit ID does not match PR commit ID. This Merge Queue run was not head of the queue when it was enqueued. Setting CAN_SKIP_CHECKS to false."
console.log("secret input not set, assuming all checks have passed. Ensure 'Require status checks to pass before merging' is enabled, or provide a secret with administration:read.");
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This is the Modrinth monorepo — it contains all Modrinth projects, both frontend and backend. When entering a project, either to edit or analyse, you should read it's CLAUDE.md.
Run these from the **root** folder before opening a pull request - do not run these after each prompt the user gives you, only run when asked, ask the user a question if they want to run it if the user indicates that they are about to create a pull request.
- **Website:** `pnpm prepr:frontend:web`
- **App frontend:** `pnpm prepr:frontend:app`
- **Frontend libs:** `pnpm prepr:frontend:lib`
- **All frontend (app+web):** `pnpm prepr`
- **Labrinth (backend):** See `apps/labrinth/CLAUDE.md`
The website and app `prepr` commands
## Dev Commands
- **Website:** `pnpm web:dev` (copy `.env` template in `apps/frontend/` first)
- **App:** `pnpm app:dev` (copy `.env` template in `packages/app-lib/` first)
- **Storybook (packages/ui):** `pnpm storybook`
## Project-Specific Instructions
Each project may have its own `CLAUDE.md` with detailed instructions:
- [`apps/labrinth/AGENTS.md`](apps/labrinth/AGENTS.md) — Backend API
- DO NOT use "heading" comments like: `=== Helper methods ===`.
- Use doc comments, but avoid inline comments unless ABSOLUTELY necessary for clarity. Code should aim to be self documenting!
## Bash Guidelines
### Output handling
- DO NOT pipe output through `head`, `tail`, `less`, or `more`
- NEVER use `| head -n X` or `| tail -n X` to truncate output
- IMPORTANT: Run commands directly without pipes when possible
- IMPORTANT: If you need to limit output, use command-specific flags (e.g. `git log -n 10` instead of `git log | head -10`)
- ALWAYS read the full output — never pipe through filters
### General
- Do not create new non-source code files (e.g. Bash scripts, SQL scripts) unless explicitly prompted to
- For Frontend, when doing lint checks, only use the `prepr` commands, do not use `typecheck` or `tsc` etc.
- Types in `@modrinth/utils` are considered highly outdated, if a component needs them, check if you can switch said component to use types from `packages/api-client`
- When provided problems, do not say "I didn't introduce these problems" (shifting the blame/effort) - just fix them.
## Edit Tool - Whitespace Handling (CLAUDE ONLY)
The Read tool uses `→` to mark where line numbers end and file content begins.
**Rule:** Copy the EXACT whitespace that appears after the `→` marker.
- Whatever appears between `→` and the code text is what's actually in the file
- That whitespace must be used EXACTLY in Edit tool's old_string
- Don't count arrows, don't interpret - just copy what's after the `→`
**Example:**
14→ private byte tag;
For Edit, use: ` private byte tag;` (copy everything after →, including the two tabs)
**If Edit fails:** Stop and explain the problem. Do not attempt sed/awk/bash workarounds.
**IMPORTANT**: Trust the Read tool output. Copy what's after `→` into Edit immediately. DO NOT verify with sed/od/grep first - that's wasting time and the instructions already tell you to stop if Edit fails, not to pre-verify.
All packages in this repository are licensed under their respective licenses. For more information, refer to the LICENSE file in each package.
For detailed information, consult each package's COPYING.md file, if available.
For detailed information, consult each package's COPYING.md, LICENSE.txt, or LICENSE file, if available.
## Modrinth Branding
The use of Modrinth branding elements, including but not limited to the wrench-in-labyrinth logo, the landing image, and any variations thereof, is strictly prohibited without explicit written permission from Rinth, Inc. This includes trademarks, logos, or other branding elements.
## AstralRinth • Empowering Your Minecraft Adventure
Welcome to AR • Fork of Modrinth, the ultimate game launcher designed to enhance your Minecraft experience through the Modrinth platform and their API. Whether you're a graphical interface enthusiast, or a developer integrating Modrinth projects, Theseus core is your gateway to a new level of Minecraft gaming.
## **AstralRinth • Empowering Your Minecraft Experience**
## About Software
Introducing AstralRinth, a specialized variant of Theseus dedicated to implementing offline authorization for an even more flexible and user-centric Minecraft Modrinth experience. Roam the Minecraft realms without the constraints of online authentication, thanks to AstralRinth.
**AstralRinth** — a powerful fork of Modrinth, reimagined to enhance your Minecraft journey. Whether you're a GUI enthusiast or a developer building with Modrinth’s API, **Theseus Core** is your launchpad into a new era of Minecraft gameplay.
## AR • Unlocking Minecraft's Boundless Horizon
Dive into the extraordinary world of AstralRinth, a fork of the original project with a unique focus on providing a free trial experience for Minecraft, all without the need for a license. Currently boasting:
## **About the Software**
# Install instructions
- To install our application, you need to download a file for your operating system from our available releases or development builds • [Download variants here](https://git.astralium.su/didirus/AstralRinth/releases)
- After you have downloaded the required executable file or archive, then open it
**AstralRinth** is a dedicated branch of the Modrinth (a.k.a Theseus) project, focused on **offline authentication**, offering you more flexibility and control. Play Minecraft without the need for constant online verification — a user-first approach to modern modded gaming.
### Downloadable file extensions
-`.msi` format for Windows OS system _(Supported popular latest versions of Microsoft Windows)_
-`.dmg` format for MacOS system _(Works on Macos Ventura / Sonoma / Sequoia, but it should be works on older OS builds)_
-`.deb` format for Linux OS systems _(Since there are quite a few distributions, we do not guarantee
---
### Installation subjects
- Builds in releases that are signed with the following prefixes are not recommended for installation and may contain errors:
-`dev`
-`nightly`
-`dirty`
-`dirty-dev`
-`dirty-nightly`
-`dirty_dev`
-`dirty_nightly`
- Auto-updating takes place through parsing special versions from releases, so we also distribute clean types of `.msi, .dmg and .deb`
# Install Instructions
To install the launcher:
1. Visit the [releases page](https://git.astralium.su/didirus/AstralRinth/releases) to download the correct version for your system.
2. Run the downloaded file or extract and launch it, depending on the format.
| `.msi` | Windows | Supported on all recent Windows versions (10/11) |
| `.dmg` | macOS | Works on Ventura, Sonoma, Sequoia, Tahoe _(may also support older versions)_ |
| `.deb` | Linux | Basic support; compatibility may vary by distribution |
### Installation Warnings
Avoid using builds with these prefixes — they may be unstable or experimental:
-`dev`
-`nightly`
-`dirty`
-`dirty-dev`
-`dirty-nightly`
-`dirty_dev`
-`dirty_nightly`
---
# Features
### Featured enhancement in AR
- AstralRinth offers a range of authorization options, giving users the flexibility to log in with valid licenses or even a pirate account without auth credentials breaks (_Unlike MultiMC Cracked and similar software_). Experience Minecraft on your terms, breaking free from traditional licensing constraints (_Popular in Russian Federation_).
> _The launcher provides an opportunity to use the well-known Modrinth, but with an improved user experience._
### Easy to use
- Using the launcher is intuitive, any user can figure it out.
## Included exclusive features
### Update notifies
-We have implemented notifications about the release of new updates on our Git. The launcher can also download them for you and try to install them.
- No ads in the entire launcher.
-Custom `.svg` vector icons for a distinct UI.
- Improved compatibility with both licensed and pirate accounts.
- Use **official microsoft accounts** or **offline/pirate accounts**.
- Supports license-free access for testing or personal use.
- No dependence on official authentication services.
- Discord Rich Presence integration:
- Dynamic status messages.
- In-game timer and AFK counter.
- Strict disabling of statistics and other Modrinth metrics.
- Optimized archive/package size.
- Integrated update fetcher for seamless version management.
- Built-in update alerts for new versions posted on Git Astralium.
- Automatic download and installation capabilities.
- The official account skin system is managed by ely.by
- Offline accounts must install AuthLib through the instance settings
### Enhancements
- Custom .SVG vectors for a personalized touch.
- Improved compatibility for both pirate and licensed accounts.
- Beautiful Discord RPC with random messages while playing, along with an in-game timer and AFK counter.
- Forced disabling of statistics collection (modrinch metrics) with a hard patch from AstralRinth, ensuring it remains deactivated regardless of the configuration setting.
- Removal of advertisements from all launcher views.
- Optimization of packages (archives).
- Integrated update fetching feature
---
# Getting Started
To begin your AstralRinth adventure, follow these steps:
1.**Download Your OS Version**: Head over to our [releases page](https://git.astralium.su/didirus/AstralRinth/releases/) to find the right file for your operating system.
- **Choosing the Correct File**: Ensure you select the file that matches your OS requirements.
2.**Authentication**: Log in with a valid license or, for testing, try using a pirate account to see AstralRinth in action.
3.**Launch Minecraft**: Start your journey by launching Minecraft through AstralRinth and enjoy the adventures that await.
-**Choosing java installation**: The launcher will try to automatically detect the recommended JVM version for running the game, but you can configure everything in the launcher settings.
To begin using AstralRinth:
1.**Download Latest Release**
- Go to the [releases page](https://git.astralium.su/didirus/AstralRinth/releases)
- [How to choose a file](#downloadable-file-extensions)
-[How to choose a release](#installation-warnings)
2.**Log in or create new offline account**
- Use your official Microsoft account (MSA), or test using a non-licensed account (Offline).
3.**Launch Minecraft**
- Start Minecraft from the launcher.
- The launcher will auto-detect the recommended JVM version.
- You can also configure Java manually in the settings.
---
# Disclaimer
- AstralRinth is a project intended for experimentation and educational purposes only. It does not endorse or support piracy, and users are encouraged to obtain valid licenses for a fully-supported Minecraft experience.
- Users are reminded to respect licensing agreements and support the developers of Minecraft.
The source code of the theseus repository is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE). However, some files listed below are licensed under a different license.
The source code of Modrinth App's frontend is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE). However, some files listed below are licensed under a different license.
## Modrinth logo
The use of Modrinth branding elements, including but not limited to the wrench-in-labyrinth logo, the landing image, and any variations thereof, is strictly prohibited without explicit written permission from Rinth, Inc. This includes trademarks, logos, or other branding elements.
'Permanently deletes an instance from your device, including your worlds, configs, and all installed content. Be careful, as once you delete a instance there is no way to recover it.',
'Permanently deletes an instance from your device, including your worlds, configs, and all installed content. Be careful, as once you delete a instance there is no way to recover it.',
errorMatchers:['Failed to deserialize response to JSON during step RefreshOAuthToken:'],
whatHappened:
'Your saved Microsoft sign-in token has expired or was revoked, so Modrinth App cannot refresh your Minecraft session.',
stepsToFix:[
'Sign out of the affected Minecraft account in Modrinth App',
'Sign in to the account again',
'Once the new sign-in finishes, try launching Minecraft again',
],
},
{
errorMatchers:['Failed to deserialize response to JSON during step SisuAuthenticate:'],
whatHappened:
'Xbox services rejected the first sign-in response. This is most often caused by your system clock or time zone being out of sync.',
stepsToFix:[
'Open your system date and time settings',
'Turn on automatic time zone and automatic time, if available',
'Use the sync option in your system settings to synchronize the clock',
'Restart Modrinth App',
'Try signing in again',
],
},
{
matches:(message)=>
message.includes('Failed to deserialize response to JSON during step MinecraftToken:')&&
message.includes('429 Too Many Requests'),
whatHappened:
'Microsoft or Minecraft temporarily blocked the sign-in request because there were too many recent attempts.',
stepsToFix:[
'Wait about an hour before trying again',
'Restart Modrinth App after waiting',
'Try signing in once more',
'If the same message appears, wait longer before retrying so the temporary limit can clear',
],
},
{
matches:(message)=>
message.includes('Failed to deserialize response to JSON during step MinecraftToken:')&&
/Status Code: 5\d\d/.test(message),
whatHappened:
"Minecraft's authentication service is returning a server error, so Modrinth App cannot finish signing you in right now.",
stepsToFix:[
'Wait a few minutes and try signing in again',
'Check <a href="https://support.xbox.com/xbox-live-status">Xbox Status</a> for current service issues',
'Try signing in with the <a href="https://www.minecraft.net/en-us/download">official Minecraft Launcher</a> to confirm whether Minecraft sign-in is also affected there',
'If the service is healthy and this keeps happening, contact support with the debug information below',
],
},
{
errorMatchers:['Failed to fetch player profile'],
whatHappened:
'Minecraft services could not return a Java Edition profile for this account. This most often happens when the game was purchased recently, the Java profile has not finished being created, or the wrong Microsoft account is being used.',
stepsToFix:[
'Sign in with the <a href="https://www.minecraft.net/en-us/download">official Minecraft Launcher</a>',
'Launch Minecraft: Java Edition once from the official launcher',
'Wait up to an hour if the purchase or profile setup was recent',
'Make sure you are using the Microsoft account that owns Minecraft. See <a href="https://support.modrinth.com/en/articles/9409136-finding-the-right-xbox-account">Finding the right Xbox account</a> for help',
'Try signing in to Modrinth App again',
],
},
{
matches:(message)=>
message.includes('error sending request for url (')&&
[
'minecraft.net',
'minecraftservices.com',
'mojang.com',
'xbox.com',
'xboxlive.com',
'live.com',
].some((domain)=>message.includes(domain)),
whatHappened:
'Modrinth App could not connect to a Microsoft, Xbox, or Minecraft service needed for sign-in. This is usually caused by a local network, DNS, proxy, firewall, hosts file, VPN, or antivirus issue.',
stepsToFix:[
'Restart Modrinth App and try signing in again',
'Check that your internet connection is working',
'Allow Modrinth App through your firewall, antivirus, proxy, VPN, and hosts file rules',
'Try a different network or temporarily disable VPN/proxy software if you use one',
'If routing or DNS is the issue, a service like Cloudflare WARP can sometimes help',
],
},
{
errorCode:'2148916222',
whatHappened:
'Your Minecraft/Xbox Live account requires age verification to comply with UK regulations. You must complete this before signing in.',
stepsToFix:[
'Go to the <a href="https://www.minecraft.net/en-us/login">Minecraft Login</a> page and sign in',
'Follow the instructions to verify your age',
'Once verified, try signing in again',
'For additional help, visit <a href="https://support.xbox.com/en-GB/help/family-online-safety/online-safety/UK-age-verification">UK age verification on Xbox</a>',
],
},
{
errorCode:'2148916233',
whatHappened:"This account doesn't have an Xbox profile set up or doesn't own Minecraft.",
stepsToFix:[
'Make sure Minecraft is purchased on this account',
'Visit <a href="https://www.minecraft.net/en-us/login">Minecraft Login</a> and sign in',
'Complete Xbox profile setup if prompted',
'Once finished, try signing in again',
],
},
{
errorCode:'2148916235',
whatHappened:"Xbox Live isn't available in your region, so sign-in is blocked.",
stepsToFix:[
'Xbox services must be supported in your country before you can sign in',
'Check <a href="https://www.xbox.com/en-US/regions">Xbox Availability</a> for supported regions',
],
},
{
errorCode:'2148916236',
whatHappened:'This account requires adult verification under South Korean regulations.',
stepsToFix:[
'Visit <a href="https://www.xbox.com">Xbox</a> and sign in',
'Complete the identity verification process',
'Once finished, try signing in again',
],
},
{
errorCode:'2148916237',
whatHappened:'This account requires adult verification under South Korean regulations.',
stepsToFix:[
'Visit <a href="https://www.xbox.com">Xbox</a> and sign in',
'Complete the identity verification process',
'Once finished, try signing in again',
],
},
{
errorCode:'2148916238',
whatHappened:'This account is underage and not linked to a Microsoft family group.',
stepsToFix:[
'Review the <a href="https://help.minecraft.net/hc/en-us/articles/4408968616077">Family Setup Guide</a>',
'Join or create a family group as instructed',
'Once finished, try signing in again',
],
},
{
errorCode:'2148916227',
whatHappened:'This account was suspended for violating Xbox Community Standards.',
stepsToFix:[
'Visit <a href="https://support.xbox.com">Xbox Support</a> and review the enforcement details',
'Submit an appeal if one is available',
],
},
{
errorCode:'2148916229',
whatHappened:"This account is restricted and doesn't have permission to play online.",
stepsToFix:[
'Have a guardian sign in to <a href="https://account.microsoft.com/family/">Microsoft Family</a>',
'Update online play permissions',
'Once finished, try signing in again',
],
},
{
errorCode:'2148916234',
whatHappened:"This account hasn't accepted Xbox's Terms of Service.",
stepsToFix:[
'Visit <a href="https://www.xbox.com">Xbox</a> and sign in',
'Accept the Terms if prompted',
'Once finished, try signing in again',
],
},
{
errorMatchers:['Failed to deserialize response to JSON during step XstsAuthorize:'],
whatHappened:
'Xbox services rejected the request to authorize this account for Minecraft services, but did not return a specific account restriction that Modrinth App recognizes.',
stepsToFix:[
'Sign in with the <a href="https://www.minecraft.net/en-us/download">official Minecraft Launcher</a>',
'Complete any prompts shown by Microsoft, Xbox, or Minecraft',
'Try signing in to Modrinth App again',
'If the official launcher also fails, follow the error shown there or contact Xbox Support',
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.