aecsocket
67e1743d6c
Flatten facets response format, remove detailed route ( #6244 )
...
* Flatten facets response format
* delete test file
2026-05-29 23:22:08 +02:00
aecsocket
62cedab6dd
Analytics faceting fixes ( #6243 )
2026-05-29 22:46:51 +02:00
aecsocket
99611d22c7
Filter out invalid loaders in analytics, fix query bug ( #6241 )
...
* should fix bucketing query bug
* Filter out invalid loaders, fix query bug
* fixes
2026-05-29 12:46:59 -07:00
aecsocket
527f2f800b
Analytics faceting return count, improve performance ( #6229 )
2026-05-28 17:58:19 +00:00
aecsocket
ec49a3b051
Move all-projects route to specific user scope ( #6220 )
...
* Move all-projects route to specific user scope
* ci
* ci flaky test
* fmt
2026-05-28 14:41:57 +00:00
aecsocket
64edf2ddeb
Improve analytics performance, analytics faceting ( #6180 )
...
* 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
2026-05-27 00:01:13 +00:00
aecsocket
5727e156ed
Fetch project analytics events on analytics get ( #6143 )
...
* Fetch project analytics events
* fix
* post-query ua bucketing
* fmt
2026-05-22 18:32:33 +00:00
aecsocket
71dee4de40
Add modpacks with external files filter to moderation queue ( #6155 )
...
* simplify query
* make it a tristate
* external deps count
2026-05-21 20:21:54 +00:00
aecsocket
f106dc580f
Restrict what tokens can be used for auth init flows ( #6137 )
2026-05-19 15:45:58 +00:00
aecsocket
244c263e40
Implement analytics marker events ( #6090 )
...
* Analytics events
* prepare
* change route prefix
* update route return
* Add mod launcher analytics
* more UA strings
* fix ci
* caching on analytics events
* Return parent modpack versions for playtime queries
* sqlx prepare
* fmt
* dummy fixtures
2026-05-19 13:06:04 +00:00
François-Xavier Talbot
b72bc18a6b
Add moderator notes to users & organizations ( #6094 )
...
* Moderator notes
* Use macros
* Improve queries
* Query cache
* Accept missing If-Match if no existing note
* Undo v2 compat changes
* Fix tests
* Remove CONSTRAINT CHECK on moderation_notes
* Respect 1-indexing on moderation_notes.version default in DB migration
* Remove double Option
* .body("") -> .finish()
* .remove() -> .get().clone()
* cloned
* Review comments
* moderation_notes everywhere
2026-05-16 16:30:36 +00:00
aecsocket
cee942dcef
Fix file version updates not considering visibility ( #6105 )
2026-05-16 16:18:18 +00:00
aecsocket
e5bbd9d409
Remove non-Typesense search backends, add default env vars ( #6082 )
...
* Remove non-Typesense search backends, add default env vars
* shear
* remove some default keys
2026-05-13 17:15:37 +00:00
aecsocket
1ddbae40b7
Re-enable summary weight in search ( #5871 )
...
* re-enable summary weighting in search
* prioritize tokens/drop tokens thresh
2026-05-12 12:14:45 +00:00
aecsocket
ca1b36efde
Analytics request loader and game version validation ( #6064 )
...
* 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
2026-05-11 14:45:50 +00:00
aecsocket
a5417e0851
Fix new analytics backend bucketing and revenue ( #6052 )
...
* Fix analytics backend QA items
* cargo prepare
2026-05-10 10:57:24 +00:00
Michael H.
22415a4cc6
fix: check edited member, not editor, for org owner permission guard ( #6024 )
...
fix: check edited member, not editor, for org owner permission guard (#1400 )
2026-05-07 14:59:05 +00:00
aecsocket
e8dc3c3150
Add update download reason to analytics ( #6023 )
...
* Add download reason to analytics
* mark modpack updates as actual updates in analytics
* fmt
2026-05-07 13:07:20 +00:00
aecsocket
2f311643a0
Expose new analytics data in backend route ( #5982 )
...
* Expose more analytics data in backend
* Adjust fetch analytics body
* fix
* fix
2026-05-04 16:33:26 +00:00
Prospector
e13a89dd72
External projects moderator database ( #5692 )
...
* 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 >
2026-05-04 16:31:37 +00:00
Calum H.
8a72ee9968
fix(backend): moderation locking logic fix ( #5979 )
...
* fix(backend): moderation locking logic fix
* fix: clippy
2026-05-03 18:29:05 +00:00
Michael H.
678f8049e3
fix: labrinth memory leaks ( #5980 )
2026-05-03 20:01:56 +02:00
Arthur
f857d19aee
feat(backend): remove server play analytics fallback ( #5884 )
...
Remove server play analytics fallback
2026-05-03 12:50:23 +00:00
Michael H.
5b59e39a8a
chore: improve actions performance and security practices ( #5970 )
...
* chore: bump actions and pin versions
* build: switch to blacksmith
* fix: use rust-toolchain stable
* build: improve pnpm store caching
* chore: remove emoji from workflows
* fix: run prepare job on blacksmith
* chore: kebab case id
* build: add concurrency groups to limit duplicate jobs
* build: switch around node setup and pnpm setup task
* chore: bump to nodejs 24, fix pnpm caching
* fix: enable corepack
* fix: concurrency deadlock in frontend preview
* fix: approve build scripts
* fix: just don't cancel concurrent previews
* build: remove pnpm setup action everywhere
* build: cache apt packages
* build: yet another attempt at fixing concurrency
* build: lower runner type for frontend deploy
* fix: eslint not existing
* build: add sccache to turbo-ci
* fix: correct nextest pkg
* fix: turbo ignoring sccache
* revert me: test labrinth tests
* Revert "revert me: test labrinth tests"
This reverts commit def5cc19183d5c0fe3b6f3c03635d73bb59bd312.
* build: compile app before docker build
* build: lower runner types
* build: remove docker inline caching
* build: try mold on labrinth
* build: tweak labrinth prod build profile
* fix: app windows builds and caching
* fix: tombi format cargo.toml
* fix: swap ping test to cubecraft to avoid CI flakiness
* typos fix
---------
Co-authored-by: aecsocket <aecsocket@tutanota.com >
2026-05-03 14:18:31 +02:00
aecsocket
9403462915
Update to rustc 1.95.0 ( #5962 )
...
* Update to rustc 1.95.0
* fmt
2026-05-01 19:39:14 +00:00
François-Xavier Talbot
264aade726
Use AWS SDK ( #5959 )
2026-05-01 09:58:26 +00:00
Calum H.
620894aecb
feat: backups page cleanup before worlds ( #5844 )
...
* feat: card alignment + fix modals
* feat: change admon title in restore alert modal
* fix: lint
* feat: backups queue api into api-client
* feat: impl backup queue api endpoints into frontend
* feat: ack fix
* feat: bulk actions
* feat: bulk delete impl
* fix: lint
* fix: align error states
* fix: transition group
* feat: ready for qa
* fix: lint
* feat: qa
* feat: stacked admonitions component
* fix: issues with stacking
* feat: hook up admonition stacking + fix app csp for staging kyros nodes
* fix: logs.vue
* qa: close stack on admonitions click
* fix: all problems with stacked admonitions
* qa: admonition cleanup and copy overhaul draft
* fix: qa issues padding
* fix: padding bug
* feat: qa
* fix: intercom in app csp bug
* fix: positioning intercom
* feat: loading overlay on top of console + admon consistency changes
* feat: scroll indicator fade in backup delete modal + admon timestamp fix
* feat: move action bar behind modal
* fix: lint + i18n
* fix: server ping spam on filter (cache but clear on unmount)
* fix: 1 admon fade in flicker issue
* chore: temp staging undo
* qa: changes
* fix: lint
* chore: revert staging to use staging
* fix: scoping
2026-04-27 19:03:48 +00:00
Calum H.
a2eed001b2
fix: tech review bugs ( #5919 )
...
* fix: root files not appearing as JIJ & pass/fail remaining doesn’t update the flags from other files
* feat: revert back to lazy loading sources
* feat: try fix checklist freezing up/unclickable + project_type filter
* fix: 10 classes then lazy load
2026-04-27 16:33:39 +00:00
aecsocket
e8be67d41f
Fix how analytics writes are serialized ( #5926 )
2026-04-27 14:25:57 +02:00
aecsocket
e3d6a498d0
Track new analytics metrics in backend ( #5895 )
...
* Allow filtering by project IDs in analytics route
* Download meta info in header
* add recursion limit
* Track playtime country
* fix clickhouse migrations
2026-04-24 15:43:25 +00:00
Sychic
6862cf5ab2
Show orgs in project card when a project is owned by an org ( #5892 )
...
* 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
2026-04-23 17:32:19 +00:00
Sychic
77e4c41480
fix(teams): accept username in edit member endpoint ( #5852 )
...
* fix(teams): accept username in edit member endpoint
* fix: remove unused import
* fix: use context to wrap error
* refactor: use context for error handling in edit_team_member
* fix: remove unused import
* fix: wrap database errors as internall errors
* fix: properly wrap errors
2026-04-21 13:47:49 +00:00
Sychic
d1b122fb21
fix(maven): return escaped summary for project description ( #5839 )
...
* fix(maven): return escaped summary for project description
* build: add quickxml to labrinth
* fix(maven): use quickxml to escape xml special chars
2026-04-19 14:58:32 +00:00
François-Xavier Talbot
281bf066de
Fix typo lint ( #5860 )
2026-04-19 04:40:41 +00:00
Calum H.
2236dd8ade
fix: moderation locking fixes ( #5843 )
...
* fix: moderation locking fixes
* fix: lint
* wip: override always available
* fix: newmodal base z
* fix: cargo fmt
2026-04-18 18:55:33 +00:00
aecsocket
546b117437
Tweak token prioritization in Typesense ( #5776 )
...
* Tweak toke prioritization in typesense
* tweaks
* allow configuring max_candidates
* tweak max_candidates
* final changes
2026-04-15 19:45:41 +00:00
aecsocket
f12bd7b4b8
Add utoipa info for v2 routes ( #5775 )
...
* 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
2026-04-15 13:25:35 +00:00
aecsocket
a9c417d1d1
Switch from Swagger to Scalar for OpenAPI docs ( #5766 )
...
* Switch from Swagger to Scalar for OpenAPI docs
* remove old comments
2026-04-07 22:14:26 +00:00
aecsocket
da48a12551
Only mark servers as offline if they fail pings 3+ times ( #5664 )
...
* wip: online status fix
* use INCR
* properly clear cache
2026-03-26 06:34:20 +00:00
aecsocket
3c5bd0756d
Index search by original and split title ( #5589 )
...
* Index search by original and split title
* better normalization of title/author names for indexing
* replace println with warn
* fix test
2026-03-20 04:01:19 +00:00
aecsocket
3b604cfdc0
Get AutoMod to ignore .rpo files ( #5616 )
2026-03-19 00:16:30 +00:00
aecsocket
31b541007d
Revert "Unify server pinging implementations between app and backend ( #5510 )" ( #5558 )
2026-03-13 13:58:57 -07:00
Truman Gao
b2d40af9cd
feat: confirm transfer project/org modals ( #5532 )
...
* feat: implement confirm transfer project/org modals
* pnpm prepr
* update warning banner copy
* update warning banner again
2026-03-13 18:56:32 +00:00
aecsocket
455a4f527d
Add title stemming to typesense ( #5553 )
2026-03-13 17:03:54 +00:00
aecsocket
d14360aba5
Unify server pinging implementations between app and backend ( #5510 )
...
* 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
2026-03-13 16:21:09 +00:00
aecsocket
991b4d8c13
Fix Typesense tests ( #5541 )
...
* Fix Typesense tests
* fix
* add back author
* Split project title and authors by words and index on that
* clippy
2026-03-13 13:34:51 +00:00
Calum H.
ba06c89a0e
fix: content tab fixes ( #5543 )
...
* fix: search again
* fix: navigation bug
* fix: switch to stable key for toggle disable
* feat: inline backup slow warning icon
* fix: qa
* feat: fix installation state
2026-03-12 23:52:55 +01:00
Calum H.
7d92e4ec7f
feat: content tab rewrite for worlds ( #5136 )
...
* feat: base content card component
* fix: tooltips + colors
* feat: fix orgs
* feat: base content tab internals rewrite
* feat: fix invalidmodal
* feat: add ContentModpackCard
* fix: extract types
* draft: layout
* feat: unlink modal
* feat: impl content tab
* fix: lint
* fix: toggling
* temp: disable updating stuff
* feat: selection v-model
* feat: bulk selection
* feat: mods tab rough draft
* feat: use fuse.js
* feat: add project combobox
* clean up project combobox
* feat: start install to play modal
* fix: events
* feat: use v-on
* feat: bulk actions + fix floating action bar width
* 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: use ContentCardTable + ContentCardItems
* feat: fix gap + border issues on last elm
* feat: cleanup + use proper searching
* fix: use TeleportOverflowMenu
* 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
* feat: impl modal
* feat(app): backend changes for content tab refactor (#5237 )
* feat: include_changelog=false for updater modal
* fix: hash overrides
* feat: update checking for modpack
* feat: qa
* feat: modpack content modal
* fix: padding in table to match modals + tightness
* fix: lint
* feat: delete modal
* feat: fix toggle bugs
* fix: prepr
* fix: duplicate messages
* qa: full width search
* qa: use bg-surface-1.5
* qa: animation for filter pills
* qa: standardize hover colors
* fix: border-[1px] is border
* qa: mass de-select actually mass selecting
* qa: match figma designs for floating action bar
* qa: modal fixes
* q: modal fixes x2
* fix: table border
* qa: confirm modals
* qa: modal alignment
* qa: re-add stuck heading + dedupe logic
* qa: dedupe virtual scrolling + remove dead components
* qa: responsiveness for content table + link fixes
* qa: version column link, tooltips + lint fixes
* qa: instance busy protections
* fix: installation freeze bug
* chore: remove old mods page
* refactor: deduplicate layout
* chore: delete old content page(s)
* qa
* qa
* qa
* feat: sort btn - to iterate
* fix: ml
* feat: date added
* fix: lint
* fix: formatting.ts removal
* feat: get_dependencies_as_content_items
* qa: final QA changes
* refactor: deduplicate + polish content.rs
* feat: hook up content.vue with v1
* feat: hide v1 content api behind frontend feature flag
* fix: query keys + copy on empty state
* chore: i18n pass
* feat: reimpl unlink + upload endpoint
* feat: use bulk endpoints v1
* fix: lint
* fix: flags
* fix: responsiveness via container queries
* fix: lint
* qa: 1
* qa: fixes
* qa: fix ssr issues with browse content
* qa: header page divider
* qa: modals
* fix: prepr
* fix: issues
* fix: lint
* fix: toggle v1 ff
* qa: 5
* qa: delete modal copy
* feat: creation flow modals (#5383 )
* refactor: delete content v0 usages + impl
* feat: qa + fixes
* feat: installing banner using state event
* feat: fix modpack card bugs + filtering issues
* refactor: delete backups v0 api module
* feat: v1 servers GET endpoint
* fix: backups
* feat: swap to kyros upload v1 addon
* fix: use tanstack for loader.vue
* feat: finish install from discovery modal
* qa: bug fixes
* feat: set up installation settings
* fix: lint
* fix: typos
* fix: bugs
* fix: disable inline content
* feat: content tab improvements — upload UX, installation settings, and client-only indicators
Upload cancellation and navigation guard:
- Add ConfirmLeaveModal that prompts when navigating away during upload
- Cancel in-flight XHR uploads when user confirms leaving the page
- Add beforeunload handler to warn on browser/tab close during upload
- Track uploadedBytes/totalBytes in UploadState for progress display
- Replace Collapsible with Transition for upload progress admonition
- Show byte progress and percentage in upload banner
- Clamp upload progress to prevent exceeding 100%
Installation settings (server.properties):
- Add KnownPropertiesFields and PropertiesFields types to Archon types
- Add buildProperties() to creation flow context to collect gamemode,
difficulty, seed, world type, structures, and generator settings
- Pass properties through installContent on onboarding, discovery, and
ServerSetupModal flows
Server setup and discovery flow improvements:
- Migrate ServerSetupModal from servers_v0.reinstall to content_v1.installContent
- Replace loaderApiNames lookup with toApiLoader() helper
- Remove eraseDataOnInstall toggle — always use soft_override: false
- Simplify modpack install on discovery page to use first available version
and route through creation flow modal for both onboarding and non-onboarding
- Differentiate post-install navigation: content page for onboarding,
loader options for existing servers
Modpack update flow:
- Replace updateModpack() call with installContent() using soft_override: true
to support version selection in the content updater modal
Client-only mod indicators:
- Add environment field to AddonVersion (reuses Labrinth.Projects.v3.Environment)
- Add environment to ContentItem and isClientOnly to ContentCardTableItem
- Show orange TriangleAlertIcon with tooltip on client-only mods in content table
- Add "Client-only" filter pill to content filtering (controlled via
showClientOnlyFilter on ContentManagerContext)
- Apply client-only indicators in both ContentPageLayout and ModpackContentModal
Misc:
- Add CLAUDE.md note about using prepr commands for lint checks
- Export ConfirmLeaveModal from instances barrel
* fix: piping
* fix: switch content disable for linked server instances
* feat: client only filter
* fix: prepr
* feat: hasUpdate shape update
* feat: bulk update endpoint impl for content in panel
* feat: websocket state impl again with new phases
* fix: ws
* fix: use timeout fn for sync admon + fix content card layout scroll for browsers with overflow anchor bug
* fix: qa bugs
* fix: lint, a11y and i18n
* refactor: set up layouts folder properly
* fix: linked data cache stuff + lint
* feat: move installationsettings to shared layout
* fix: lint
* fix: issues
* feat: temp fuck staging up
* fix: lockfile
* fix: data sync issues on loader.vue
* fix: lint
* Hide shader configuration files from content list (#5499 )
* feat: workaround search problem + split out reset
* fix: qa
* fix: changelog not showing on first open
* fix: qa + optimistic updating improvements
* fix: prepr+lint
* fix: qa
* feat: qa
* fix: lint
* fix: lint
* fix: build
* fix: build
* fix: type errors
* fix: fade and JAVA_HOME passthrough
* feat: qa
* feat: impl diff shit
* fix: qa
* fix: app qa
* feat: update diff modal
* fix: endpoint
* fix: qa
* fix: qa
* fix: use bulk in modpack modal
* feat: abort signal impl + fix issues
* fix: diff modal trunc
* feat: qa
* fix: qa
* feat: tooltip content tab
* fix: prepr
* fix: dismiss on settings btn
* feat: qa
* feat: dont clear handlers on disconnect
* fix: lint
* fix: wrangler + introduce staging-archon env file
---------
Signed-off-by: Calum H. <calum@modrinth.com >
Co-authored-by: tdgao <mr.trumgao@gmail.com >
Co-authored-by: Artyom Ezri <61311568+Artezon@users.noreply.github.com >
2026-03-12 13:24:32 -07:00
aecsocket
f0224dfff7
Search backend refactor with typesense impl ( #5528 )
...
* 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
2026-03-12 18:58:55 +01:00
aecsocket
1c1683adb6
Fix various user/project deletion queries ( #5511 )
2026-03-12 12:46:39 +00:00