Files
Modrinth-plus/CLAUDE.md
Calum H. 381ea51cce refactor: align files tab with content tab design (#5621)
* fix: files.vue bugs before styling changes

* feat: move files tab to shared layout structure

* fix: qa

* fix: qa

* fix: bugs

* fix: lint

* fix: admonition cleanup with progress + actions

* fix: cleanup

* fix: modals

* fix: admon title

* fix: i18n standard

* fix: lint + i18n pass

* fix: remove transition

* fix: type errors

* feat: files tab in app

* fix: qa

* fix: backup item minmax

* fix: use ContentPageHeader for server panel

* fix: lint

* fix: lint

* fix: lint

* feat: page leave safety

* fix: lint

* fix: cargo fmt fix

* fix: blank in prod

* fix: content card table stuff

* Revert "fix: blank in prod"

This reverts commit 74758fe185cf85a4a20355857f889cb091b97ace.

* fix: import

* feat: browse worlds/servers flow

* fix: worlds tab parity with content tab

* fix: perf bug + shader filter pill copy

* feat: singleplayer filter

* fix: ordering

* fix: breadcrumbs

* fix: lint

* fix: qa

* feat: store server proj id when adding to a non-linked instance

* fix: lint

* fix: i18n + qa

* fix: conflict

* qa: already installed modal + placeholders not server-specific

* fix: qa

* fix: add + edit server modals

* fix: qa

* fix: security

* fix: devin flags

* fix: lint

* chore: change file to break build cache

* fix: admon

* fix: import path stuff

* feat: qa

* fix: fmt fmt idiot

---------

Signed-off-by: Calum H. <calum@modrinth.com>
2026-03-26 18:55:15 +00:00

5.5 KiB

Modrinth Monorepo

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.

Architecture

  • Monorepo tooling: Turborepo (turbo.jsonc) + pnpm workspaces (pnpm-workspace.yaml)
  • Frontend: Vue 3 / Nuxt 3, Tailwind CSS v3
  • Backend: Rust (Labrinth API), Postgres, Clickhouse
  • Indentation: Use TAB everywhere, never spaces

Apps (apps/)

App Description
frontend Main Modrinth website (Nuxt 3)
app-frontend Desktop/app frontend (Vue 3)
app Desktop/app shell (Tauri)
app-playground Testing playground for app
labrinth Backend API service
daedalus_client Daedalus client implementation
docs Documentation site (Astro)

Packages (packages/)

Package Description
ui Shared Vue component library (@modrinth/ui)
assets Styling and auto-generated icons (@modrinth/assets)
api-client API client for Nuxt, Tauri, and Node/browser
app-lib Shared app library
blog Blog system and changelog data
utils Shared utility functions (mostly deprecated)
moderation Moderation utilities
daedalus Daedalus protocol
tooling-config ESLint, Prettier, TypeScript configs
ariadne Analytics library
modrinth-log Logging utilities
modrinth-maxmind MaxMind GeoIP
modrinth-util General utilities
muralpay Payment processing
path-util Path utilities
sqlx-tracing SQLx query tracing

Pre-PR Commands

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:

Code Guidelines

Comments

  • 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.

Standards

Standards available at the @standards/ folder.