diff --git a/.github/workflows/algolia-crawler.yml b/.github/workflows/algolia-crawler.yml
index cd5ee4b..1572ee7 100644
--- a/.github/workflows/algolia-crawler.yml
+++ b/.github/workflows/algolia-crawler.yml
@@ -31,4 +31,4 @@ jobs:
crawler-api-key: ${{ secrets.CRAWLER_API_KEY }}
algolia-app-id: ${{ secrets.ALGOLIA_APP_ID }}
algolia-api-key: ${{ secrets.ALGOLIA_API_KEY }}
- site-url: 'https://modding.resonite.net'
\ No newline at end of file
+ site-url: 'https://modding.resonite.net'
diff --git a/.prettierignore b/.prettierignore
index e88fe36..10514ae 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,2 +1,3 @@
pnpm-lock.yaml
pnpm-workspace.yaml
+src/content/docs/reference
diff --git a/astro.config.mjs b/astro.config.mjs
index 0617b0c..4654b54 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -51,24 +51,22 @@ export default defineConfig({
{
label: 'Getting Started',
translations: { en: 'Getting Started' },
- items: [
- { translations: { en: 'Installation' }, slug: 'getting-started/installation' },
- { translations: { en: 'Your First Mod' }, slug: 'getting-started/first-mod' },
- { translations: { en: 'Troubleshooting' }, slug: 'getting-started/troubleshooting' },
- ],
+ autogenerate: { directory: 'getting-started' },
+ },
+ {
+ label: 'Creating a Mod',
+ translations: { en: 'Creating a Mod' },
+ autogenerate: { directory: 'creating-a-mod' },
},
{
label: 'Guides',
translations: { en: 'Guides' },
- items: [
- { translations: { en: 'Mod Development Basics' }, slug: 'guides/mod-basics' },
- { translations: { en: 'Debugging Mods' }, slug: 'guides/debugging' },
- ],
+ autogenerate: { directory: 'guides' },
},
{
label: 'Recipes',
translations: { en: 'Recipes' },
- items: [],
+ autogenerate: { directory: 'recipes' },
},
{
label: 'Reference',
@@ -79,10 +77,7 @@ export default defineConfig({
{
label: 'Resources',
translations: { en: 'Resources' },
- items: [
- { translations: { en: 'Tools & Utilities' }, slug: 'resources/tools' },
- { translations: { en: 'Links & Community' }, slug: 'resources/links' },
- ],
+ autogenerate: { directory: 'resources' },
},
],
components: {
diff --git a/docfx.json b/docfx.json
index 4331c72..445d5f7 100644
--- a/docfx.json
+++ b/docfx.json
@@ -6,7 +6,9 @@
{
"files": [
"BepInEx.Preloader.Core/BepInEx.Preloader.Core.csproj",
- "BepInEx.Core/BepInEx.Core.csproj"
+ "BepInEx.Core/BepInEx.Core.csproj",
+ "Runtimes/NET/BepInEx.NET.Common/BepInEx.NET.Common.csproj",
+ "Runtimes/NET/BepInEx.NET.CoreCLR/BepInEx.NET.CoreCLR.csproj"
],
"exclude": ["**/bin/**", "**/obj/**"]
}
@@ -15,8 +17,8 @@
"shouldSkipMarkup": false,
"disableGitFeatures": false,
"disableDefaultFilter": false,
- "categoryLayout": "flattened",
- "namespaceLayout": "flattened",
+ "categoryLayout": "nested",
+ "namespaceLayout": "nested",
"memberLayout": "separatePages",
"properties": {
"TargetFramework": "net9.0"
diff --git a/package.json b/package.json
index 5dea996..d80db2e 100644
--- a/package.json
+++ b/package.json
@@ -16,17 +16,17 @@
"@astrojs/starlight": "^0.35.2",
"@astrojs/starlight-docsearch": "^0.6.0",
"@astrojs/svelte": "^7.1.0",
- "astro": "^5.6.1",
- "sharp": "^0.34.2",
+ "astro": "^5.13.5",
+ "sharp": "^0.34.3",
"starlight-theme-rapide": "^0.5.1",
- "svelte": "^5.38.2",
+ "svelte": "^5.38.6",
"typescript": "^5.9.2"
},
"devDependencies": {
- "oxlint": "^1.12.0",
+ "oxlint": "^1.14.0",
"oxlint-tsgolint": "^0.0.4",
"prettier": "3.6.2",
"prettier-plugin-astro": "0.14.1",
- "vite": "^7.1.3"
+ "vite": "^7.1.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d4bdecc..372e696 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,35 +10,35 @@ importers:
dependencies:
'@astrojs/mdx':
specifier: ^4.3.4
- version: 4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ version: 4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
'@astrojs/starlight':
specifier: ^0.35.2
- version: 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ version: 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
'@astrojs/starlight-docsearch':
specifier: ^0.6.0
- version: 0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)
+ version: 0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)
'@astrojs/svelte':
specifier: ^7.1.0
- version: 7.1.0(@types/node@24.3.0)(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.2)(typescript@5.9.2)
+ version: 7.1.0(@types/node@24.3.0)(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.6)(typescript@5.9.2)
astro:
- specifier: ^5.6.1
- version: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
+ specifier: ^5.13.5
+ version: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
sharp:
- specifier: ^0.34.2
+ specifier: ^0.34.3
version: 0.34.3
starlight-theme-rapide:
specifier: ^0.5.1
- version: 0.5.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))
+ version: 0.5.1(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))
svelte:
- specifier: ^5.38.2
- version: 5.38.2
+ specifier: ^5.38.6
+ version: 5.38.6
typescript:
specifier: ^5.9.2
version: 5.9.2
devDependencies:
oxlint:
- specifier: ^1.12.0
- version: 1.12.0
+ specifier: ^1.14.0
+ version: 1.14.0(oxlint-tsgolint@0.0.4)
oxlint-tsgolint:
specifier: ^0.0.4
version: 0.0.4
@@ -49,8 +49,8 @@ importers:
specifier: 0.14.1
version: 0.14.1
vite:
- specifier: ^7.1.3
- version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
+ specifier: ^7.1.4
+ version: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
packages:
@@ -675,43 +675,43 @@ packages:
cpu: [x64]
os: [win32]
- '@oxlint/darwin-arm64@1.12.0':
- resolution: {integrity: sha512-Pv+Ho1uq2ny8g2P6JgQpaIUF1FHPL32DfOlZhKqmzDT3PydtFvZp/7zNyJE3BIXeTOOOG1Eg12hjZHMLsWxyNw==}
+ '@oxlint/darwin-arm64@1.14.0':
+ resolution: {integrity: sha512-rcTw0QWeOc6IeVp+Up7WtcwdS9l4j7TOq4tihF0Ud/fl+VUVdvDCPuZ9QTnLXJhwMXiyQRWdxRyI6XBwf80ncQ==}
cpu: [arm64]
os: [darwin]
- '@oxlint/darwin-x64@1.12.0':
- resolution: {integrity: sha512-kNXPH/7jXjX4pawrEWXQHOasOdOsrYKhskA1qYwLYcv/COVSoxOSElkQtQa+KxN5zzt3F02kBdWDndLpgJLbLQ==}
+ '@oxlint/darwin-x64@1.14.0':
+ resolution: {integrity: sha512-TWFSEmyl2/DN4HoXNwQl0y/y3EXFJDctfv5MiDtVOV1GJKX80cGSIxMxXb08Q3CCWqteqEijmfSMo5TG8X1H/A==}
cpu: [x64]
os: [darwin]
- '@oxlint/linux-arm64-gnu@1.12.0':
- resolution: {integrity: sha512-U7NETs02K55ZyDlgdhx4lWeFYbkUKcL+YcG+Ak70EyEt/BKIIVt4B84VdV1JzC71FErUipDYAwPJmxMREXr4Sg==}
+ '@oxlint/linux-arm64-gnu@1.14.0':
+ resolution: {integrity: sha512-N1FqdKfwhVWPpMElv8qlGqdEefTbDYaRVhdGWOjs/2f7FESa5vX0cvA7ToqzkoXyXZI5DqByWiPML33njK30Kg==}
cpu: [arm64]
os: [linux]
- '@oxlint/linux-arm64-musl@1.12.0':
- resolution: {integrity: sha512-e4Pb2eZu3V2BsiX4t4gyv9iJ8+KRT6bkoWM5uC9BLX7edsVchwLwL6LB2vPYusYdPPrxdjlFCg6ni+9wlw7FbQ==}
+ '@oxlint/linux-arm64-musl@1.14.0':
+ resolution: {integrity: sha512-v/BPuiateLBb7Gz1STb69EWjkgKdlPQ1NM56z+QQur21ly2hiMkBX2n0zEhqfu9PQVRUizu6AlsYuzcPY/zsIQ==}
cpu: [arm64]
os: [linux]
- '@oxlint/linux-x64-gnu@1.12.0':
- resolution: {integrity: sha512-qJK98Dj/z7Nbm0xoz0nCCMFGy0W/kLewPzOK5QENxuUoQQ6ymt7/75rXOuTwAZJ6JFTarqfSuMAA0pka6Tmytw==}
+ '@oxlint/linux-x64-gnu@1.14.0':
+ resolution: {integrity: sha512-gUTp8KIrSYt97dn+tRRC3LKnH4xlHKCwrPwiDcGmLbCxojuN9/H5mnIhPKEfwNuZNdoKGS/ABuq3neVyvRCRtQ==}
cpu: [x64]
os: [linux]
- '@oxlint/linux-x64-musl@1.12.0':
- resolution: {integrity: sha512-jNeltpHc1eonSev/bWKipJ7FI6+Rc7EXh6Y7E0pm8e95sc1klFA29FFVs3FjMA6CCa+SRT0u0nnNTTAtf2QOiQ==}
+ '@oxlint/linux-x64-musl@1.14.0':
+ resolution: {integrity: sha512-DpN6cW2HPjYXeENG0JBbmubO8LtfKt6qJqEMBw9gUevbyBaX+k+Jn7sYgh6S23wGOkzmTNphBsf/7ulj4nIVYA==}
cpu: [x64]
os: [linux]
- '@oxlint/win32-arm64@1.12.0':
- resolution: {integrity: sha512-T3fpNZJ3Q9YGgJTKc1YyvGoomSXnrV5mREz0QACE06zUzfS8EWyaYc/GN17FhHvQ4uQk/1xLgnM6FPsuLMeRhw==}
+ '@oxlint/win32-arm64@1.14.0':
+ resolution: {integrity: sha512-oXxJksnUTUMgJ0NvjKS1mrCXAy1ttPgIVacRSlxQ+1XHy+aJDMM7I8fsCtoKoEcTIpPaD98eqUqlLYs0H2MGjA==}
cpu: [arm64]
os: [win32]
- '@oxlint/win32-x64@1.12.0':
- resolution: {integrity: sha512-2eC4XQ1SMM2z7bCDG+Ifrn5GrvP6fkL0FGi4ZwDCrx6fwb1byFrXgSUNIPiqiiqBBrFRMKlXzU9zD6IjuFlUOg==}
+ '@oxlint/win32-x64@1.14.0':
+ resolution: {integrity: sha512-iRYy2rhTQKFztyx0jtNMRBnFpzsRwFdjWQ7sKKzJpmbijA3Tw3DCqlGT7QRgoVRF0+X/ccNGvvsrgMohPVfLeQ==}
cpu: [x64]
os: [win32]
@@ -999,8 +999,8 @@ packages:
peerDependencies:
astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
- astro@5.13.2:
- resolution: {integrity: sha512-yjcXY0Ua3EwjpVd3GoUXa65HQ6qgmURBptA+M9GzE0oYvgfuyM7bIbH8IR/TWIbdefVUJR5b7nZ0oVnMytmyfQ==}
+ astro@5.13.5:
+ resolution: {integrity: sha512-XmBzkl13XU97+n/QiOM5uXQdAVe0yKt5gO+Wlgc8dHRwHR499qhMQ5sMFckLJweUINLzcNGjP3F5nG4wV8a2XA==}
engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
@@ -1750,10 +1750,15 @@ packages:
resolution: {integrity: sha512-KFWVP+VU3ymgK/Dtuf6iRkqjo+aN42lS1YThY6JWlNi1GQqm7wtio/kAwssqDhm8kP+CVXbgZAtu1wgsK4XeTg==}
hasBin: true
- oxlint@1.12.0:
- resolution: {integrity: sha512-tBQ9aB00aYLlGXE21WJHnKQAI8xoi2V6Eiz/WvGV7FwU9YLYuNOurEEVbfoS5u0ODX8GLvGWj1fdHh5Rb74Kkw==}
+ oxlint@1.14.0:
+ resolution: {integrity: sha512-oo0nq3zF9hmgATGc9esoMahLuEESOodUxEDeHDA2K7tbYcSfcmReE9G2QNppnq9rOSQHLTwlMtzGAjjttYaufQ==}
engines: {node: '>=8.*'}
hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.1.5'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
p-limit@6.2.0:
resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
@@ -2030,8 +2035,8 @@ packages:
svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
- svelte@5.38.2:
- resolution: {integrity: sha512-iAcp/oFAWauVSGILdD67n7DiwgLHXZzWZIdzl7araRxu72jUr7PFAo2Iie7gXt0IbnlYvhxCb9GT3ZJUquO3PA==}
+ svelte@5.38.6:
+ resolution: {integrity: sha512-ltBPlkvqk3bgCK7/N323atUpP3O3Y+DrGV4dcULrsSn4fZaaNnOmdplNznwfdWclAgvSr5rxjtzn/zJhRm6TKg==}
engines: {node: '>=18'}
tiny-inflate@1.0.3:
@@ -2240,8 +2245,8 @@ packages:
yaml:
optional: true
- vite@7.1.3:
- resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
+ vite@7.1.4:
+ resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -2492,12 +2497,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@astrojs/mdx@4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))':
+ '@astrojs/mdx@4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))':
dependencies:
'@astrojs/markdown-remark': 6.3.6
'@mdx-js/mdx': 3.1.0(acorn@8.15.0)
acorn: 8.15.0
- astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
+ astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
es-module-lexer: 1.7.0
estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5
@@ -2521,9 +2526,9 @@ snapshots:
stream-replace-string: 2.0.0
zod: 3.25.76
- '@astrojs/starlight-docsearch@0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)':
+ '@astrojs/starlight-docsearch@0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)':
dependencies:
- '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ '@astrojs/starlight': 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
'@docsearch/css': 3.9.0
'@docsearch/js': 3.9.0(@algolia/client-search@5.36.0)(search-insights@2.17.3)
transitivePeerDependencies:
@@ -2533,17 +2538,17 @@ snapshots:
- react-dom
- search-insights
- '@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))':
+ '@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))':
dependencies:
'@astrojs/markdown-remark': 6.3.6
- '@astrojs/mdx': 4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ '@astrojs/mdx': 4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
'@astrojs/sitemap': 3.5.0
'@pagefind/default-ui': 1.3.0
'@types/hast': 3.0.4
'@types/js-yaml': 4.0.9
'@types/mdast': 4.0.4
- astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
- astro-expressive-code: 0.41.3(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
+ astro-expressive-code: 0.41.3(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
bcp-47: 2.1.0
hast-util-from-html: 2.0.3
hast-util-select: 6.0.4
@@ -2566,12 +2571,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@astrojs/svelte@7.1.0(@types/node@24.3.0)(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.2)(typescript@5.9.2)':
+ '@astrojs/svelte@7.1.0(@types/node@24.3.0)(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.6)(typescript@5.9.2)':
dependencies:
- '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
- astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
- svelte: 5.38.2
- svelte2tsx: 0.7.42(svelte@5.38.2)(typescript@5.9.2)
+ '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
+ astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
+ svelte: 5.38.6
+ svelte2tsx: 0.7.42(svelte@5.38.6)(typescript@5.9.2)
typescript: 5.9.2
vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
transitivePeerDependencies:
@@ -2987,28 +2992,28 @@ snapshots:
'@oxlint-tsgolint/win32-x64@0.0.4':
optional: true
- '@oxlint/darwin-arm64@1.12.0':
+ '@oxlint/darwin-arm64@1.14.0':
optional: true
- '@oxlint/darwin-x64@1.12.0':
+ '@oxlint/darwin-x64@1.14.0':
optional: true
- '@oxlint/linux-arm64-gnu@1.12.0':
+ '@oxlint/linux-arm64-gnu@1.14.0':
optional: true
- '@oxlint/linux-arm64-musl@1.12.0':
+ '@oxlint/linux-arm64-musl@1.14.0':
optional: true
- '@oxlint/linux-x64-gnu@1.12.0':
+ '@oxlint/linux-x64-gnu@1.14.0':
optional: true
- '@oxlint/linux-x64-musl@1.12.0':
+ '@oxlint/linux-x64-musl@1.14.0':
optional: true
- '@oxlint/win32-arm64@1.12.0':
+ '@oxlint/win32-arm64@1.14.0':
optional: true
- '@oxlint/win32-x64@1.12.0':
+ '@oxlint/win32-x64@1.14.0':
optional: true
'@pagefind/darwin-arm64@1.3.0':
@@ -3133,25 +3138,25 @@ snapshots:
dependencies:
acorn: 8.15.0
- '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))':
+ '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
+ '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
debug: 4.4.1
- svelte: 5.38.2
- vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
+ svelte: 5.38.6
+ vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
transitivePeerDependencies:
- supports-color
- '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))':
+ '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
+ '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
debug: 4.4.1
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
- svelte: 5.38.2
- vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
- vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
+ svelte: 5.38.6
+ vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
+ vitefu: 1.1.1(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))
transitivePeerDependencies:
- supports-color
@@ -3255,12 +3260,12 @@ snapshots:
astring@1.9.0: {}
- astro-expressive-code@0.41.3(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)):
+ astro-expressive-code@0.41.3(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)):
dependencies:
- astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
+ astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)
rehype-expressive-code: 0.41.3
- astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2):
+ astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2):
dependencies:
'@astrojs/compiler': 2.12.2
'@astrojs/internal-helpers': 0.7.2
@@ -4492,16 +4497,16 @@ snapshots:
'@oxlint-tsgolint/win32-arm64': 0.0.4
'@oxlint-tsgolint/win32-x64': 0.0.4
- oxlint@1.12.0:
+ oxlint@1.14.0(oxlint-tsgolint@0.0.4):
optionalDependencies:
- '@oxlint/darwin-arm64': 1.12.0
- '@oxlint/darwin-x64': 1.12.0
- '@oxlint/linux-arm64-gnu': 1.12.0
- '@oxlint/linux-arm64-musl': 1.12.0
- '@oxlint/linux-x64-gnu': 1.12.0
- '@oxlint/linux-x64-musl': 1.12.0
- '@oxlint/win32-arm64': 1.12.0
- '@oxlint/win32-x64': 1.12.0
+ '@oxlint/darwin-arm64': 1.14.0
+ '@oxlint/darwin-x64': 1.14.0
+ '@oxlint/linux-arm64-gnu': 1.14.0
+ '@oxlint/linux-arm64-musl': 1.14.0
+ '@oxlint/linux-x64-gnu': 1.14.0
+ '@oxlint/linux-x64-musl': 1.14.0
+ '@oxlint/win32-arm64': 1.14.0
+ '@oxlint/win32-x64': 1.14.0
oxlint-tsgolint: 0.0.4
p-limit@6.2.0:
@@ -4893,9 +4898,9 @@ snapshots:
space-separated-tokens@2.0.2: {}
- starlight-theme-rapide@0.5.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))):
+ starlight-theme-rapide@0.5.1(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))):
dependencies:
- '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
+ '@astrojs/starlight': 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))
stream-replace-string@2.0.0: {}
@@ -4936,14 +4941,14 @@ snapshots:
dependencies:
s.color: 0.0.15
- svelte2tsx@0.7.42(svelte@5.38.2)(typescript@5.9.2):
+ svelte2tsx@0.7.42(svelte@5.38.6)(typescript@5.9.2):
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
- svelte: 5.38.2
+ svelte: 5.38.6
typescript: 5.9.2
- svelte@5.38.2:
+ svelte@5.38.6:
dependencies:
'@jridgewell/remapping': 2.3.5
'@jridgewell/sourcemap-codec': 1.5.5
@@ -5107,7 +5112,7 @@ snapshots:
jiti: 2.5.1
lightningcss: 1.30.1
- vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1):
+ vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@@ -5125,9 +5130,9 @@ snapshots:
optionalDependencies:
vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
- vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)):
+ vitefu@1.1.1(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)):
optionalDependencies:
- vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
+ vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)
web-namespaces@2.0.1: {}
diff --git a/src/components/Card.astro b/src/components/Card.astro
index f2791f1..72ba87b 100644
--- a/src/components/Card.astro
+++ b/src/components/Card.astro
@@ -1,12 +1,10 @@
---
import { Icon } from '@astrojs/starlight/components';
import type { StarlightIcon } from '@astrojs/starlight/types';
-
interface Props {
icon?: StarlightIcon;
title: string;
}
-
const { icon, title } = Astro.props;
---
@@ -17,7 +15,6 @@ const { icon, title } = Astro.props;
-
diff --git a/src/components/CardGrid.astro b/src/components/CardGrid.astro
new file mode 100644
index 0000000..0462240
--- /dev/null
+++ b/src/components/CardGrid.astro
@@ -0,0 +1,38 @@
+---
+interface Props {
+ stagger?: boolean;
+}
+
+const { stagger = false } = Astro.props;
+---
+
+
+
+
diff --git a/src/content/docs/creating-a-mod/creating-a-project.mdx b/src/content/docs/creating-a-mod/creating-a-project.mdx
new file mode 100644
index 0000000..a141dd2
--- /dev/null
+++ b/src/content/docs/creating-a-mod/creating-a-project.mdx
@@ -0,0 +1,187 @@
+---
+title: Creating a Project
+description: Set up a new Resonite BepInEx mod project using the official template.
+sidebar:
+ order: 1
+---
+
+import { LinkCard, LinkButton, FileTree } from '@astrojs/starlight/components';
+
+Creating a mod for Resonite is simple using the official BepInEx template. This guide covers installing the template, generating a project, and configuring it for development.
+
+## Installing
+
+.NET templates must be installed before they can be used. This means that when you install the template, it doesn't create a new project for you, but you will get the ability to do that.
+
+Once you have the template installed, you don't need to install it again, through it's a good idea to update it if there are updates.
+
+
+ See the BepInEx Template repository
+
+
+:::caution
+You must use .NET SDK 9 or newer. Older versions are unsupported.
+:::
+
+### From NuGet (Recommended)
+
+Install the template from the Resonite modding NuGet feed:
+
+```bash
+dotnet new install BepInEx.Templates::2.0.0-be.* --nuget-source https://nuget-modding.resonite.net/v3/index.json
+```
+
+### Manual Install
+
+If you're contributing to the template or prefer manual installation:
+
+1. Clone or download [this repository](https://github.com/ResoniteModding/BepInEx.Templates)
+2. Navigate to the `BepInEx.Templates` folder
+3. Run:
+
+```bash
+cd BepInEx.Templates
+dotnet new install .
+```
+
+To update:
+
+```bash
+git pull
+dotnet new install . --force
+```
+
+To uninstall:
+
+```bash
+dotnet new uninstall .
+```
+
+Once installed, the template will be available as `BepInEx 6 Resonite Plugin` with the short name `bep6resonite`.
+
+## Creating a New Mod
+
+Run the following command in your Resonite modding directory:
+
+:::note
+By default, the first value in `--authors` is used as your Thunderstore team name. If this doesn't match your actual Thunderstore team, you'll need to manually update the `namespace` field in `thunderstore.toml`.
+
+A Thunderstore "team" is simply the author name your mods are published under - it can be just your username.
+
+Create your Thunderstore team here: https://thunderstore.io/settings/teams/create/
+:::
+
+```bash
+dotnet new bep6resonite --name MyPluginName --authors "MyName" --packageId net.myname.mypluginmame --repositoryUrl "https://github.com/myuser/mymod"
+```
+
+This will create a new folder called `MyPluginName` with your mod's project.
+
+### Template Options
+
+You can customize your project with these options:
+
+- `-ve|--version` - Plugin version (default: 1.0.0)
+- `-au|--authors` - Comma-separated list of plugin authors (default: YourName)
+- `-r|--repositoryUrl` - Repository URL (auto-generated as `https://github.com/[FirstAuthor]/[ProjectName]` if empty)
+- `-p|--packageId` - Package ID (auto-generated as `[FirstAuthor].[ProjectName]` if empty)
+- `-g|--gitInit` - Initialize a git repository (default: true)
+
+:::tip
+Use `dotnet new bep6resonite --help` to see all available options.
+:::
+
+## Project Structure
+
+This example demonstrates creating a project with the template:
+
+```bash
+~/Workspace/Resonite$ dotnet new bep6resonite -n ResoniteMod
+The template "BepInEx 6 Resonite Plugin (.NET 9, Thunderstore Ready)" was created successfully.
+```
+
+After creation, you'll see helpful next steps instructions. Now let's look at the project structure:
+
+```bash
+~/Workspace/Resonite$ cd ResoniteMod/
+```
+
+The file structure in `ResoniteMod/` should look like this:
+
+
+- .gitignore
+- CHANGELOG.md
+- Directory.Build.targets
+- icon.png
+- LICENSE
+- README.md
+- ResoniteMod.sln
+- thunderstore.toml
+- .config/
+ - dotnet-tools.json
+- src/
+ - ResoniteMod/
+ - Plugin.cs
+ - ResoniteMod.csproj
+
+
+Key points:
+
+- Your mod code is in `./src//`
+- `Directory.Build.targets` file defines `PackTS` target, see the [Packaging and Publishing](/creating-a-mod/packaging-and-publishing) guide
+- `.sln` is your project solution
+
+The project is configured so that it's easy to add new projects into your project solution. Even if you don't need that, it's good to follow this standard project structure.
+
+### Post-Creation Setup
+
+After creating your project, the template provides helpful instructions:
+
+1. **Set up game path**: Either set `ResonitePath` environment variable or update `GamePath` in the .csproj
+2. **Review metadata**: Update project metadata in the .csproj file (Version, Authors, etc.)
+3. **Replace TODOs**: Search for `TODO` comments in the generated template and replace them with your actual values
+4. **Build**: Run `dotnet build` - this automatically copies the plugin to BepInEx/plugins folder
+
+### Automatic Game Path Detection
+
+The template automatically finds your Resonite installation:
+
+1. First checks the `ResonitePath` environment variable
+2. Falls back to Steam installation paths
+3. Uses NuGet package for game references if local install not found
+
+### Build Configuration
+
+Your plugin metadata is automatically generated from `.csproj` properties:
+
+- `PackageID` → Plugin GUID
+- `Product` → Plugin Name
+- `Version` → Plugin Version
+- `Authors` → Plugin Authors
+- `RepositoryUrl` → Repository URL
+
+### Thunderstore Packaging
+
+The template includes built-in Thunderstore packaging support. Your project comes with:
+
+- `thunderstore.toml` - Package configuration
+- `icon.png` - Your mod's icon (replace with your own 256x256 image)
+- Build targets for creating and publishing packages
+
+For detailed packaging and publishing instructions, see the [Packaging and Publishing](/creating-a-mod/packaging-and-publishing) guide.
+
+
+
+
diff --git a/src/content/docs/creating-a-mod/initial-setup.mdx b/src/content/docs/creating-a-mod/initial-setup.mdx
new file mode 100644
index 0000000..feaa205
--- /dev/null
+++ b/src/content/docs/creating-a-mod/initial-setup.mdx
@@ -0,0 +1,70 @@
+---
+title: Initial Setup
+description: Learn to set up your environment to get started with making Resonite mods!
+sidebar:
+ order: 0
+---
+
+import { LinkCard, Tabs, TabItem, Steps } from '@astrojs/starlight/components';
+
+Modding might sound complicated, but it's much easier if you start with the right mindset and a simple mod.
+
+## Install the Requirements
+
+Before you can start modding Resonite, you'll need to install two essential tools:
+
+- **.NET SDK 9.0** – _This is needed so you can compile C# code._
+ - [Download .NET here](https://dotnet.microsoft.com/en-us/download)
+- **IDE** – _This is where you'll write and build your code. Choosing one can depend on your preferences and system._
+ - [Visual Studio Code](https://code.visualstudio.com) (A lightweight, fast, and highly customizable editor with a wide range of extensions.)
+ - [Visual Studio](https://visualstudio.microsoft.com/vs/community/) (A powerful, feature-rich IDE widely used for C# and .NET development.)
+ - [Rider](https://www.jetbrains.com/rider/#) (A full-featured, IDE optimized for C# and .NET development.)
+
+Now that you have .NET and an IDE, we can move on to creating your first mod.
+
+:::caution
+This guide will not cover setting up your IDE. If you're stuck at this point, try watching a video tutorial.
+:::
+
+## Installing BepInEx
+
+You'll need BepInEx (via BepisLoader) installed to develop mods. Follow our [installation guide](/getting-started/installation/) to set it up using either:
+
+- **Mod Manager** (recommended) - Easy automatic installation
+- **Manual installation** - For custom configurations
+
+:::note[Console Window]
+If you've used BepInEx before, you may notice the console window doesn't appear — this is disabled by default in BepisLoader.
+
+You can enable the console by opening `BepInEx/config/BepInEx.cfg` and in the `[Logging.Console]` section, setting `Enabled = true`
+:::
+
+## Installing a Decompiler
+
+:::note
+This step is optional but highly recommended if you want to understand or debug Resonite's code.
+:::
+
+A decompiler allows you to inspect the game’s internal code. This helps you discover useful classes and methods that can be modified using Harmony.
+
+You only need one decompiler. Recommended options:
+
+- [ILSpy](https://github.com/icsharpcode/ILSpy) (best decompilation)
+ - [ILSpyCmd](https://github.com/icsharpcode/ILSpy/tree/master/ICSharpCode.ILSpyCmd) (CLI option)
+ - [ilspy-vscode](https://github.com/icsharpcode/ilspy-vscode) (Visual Studio Code extension)
+- [dnSpy](https://github.com/dnSpyEx/dnSpy)
+- [dotPeek](https://www.jetbrains.com/decompiler/#)
+
+:::caution
+Many of these options are not natively supported on Linux. [ILSpyCmd](https://github.com/icsharpcode/ILSpy/tree/master/ICSharpCode.ILSpyCmd) is recommended in this case as it can output a full C# project which can be viewed in any IDE, which for pure C# viewing can be a better experience than any other option. If you are using Visual Studio Code, [ilspy-vscode](https://github.com/icsharpcode/ilspy-vscode) can be used for viewing IL, although a standalone app would be better for this.
+
+An [ILSpy Avalonia frontend](https://github.com/icsharpcode/AvaloniaILSpy) also exists that supports Linux, however it doesn't seem to be maintained as of writing and is buggy.
+:::
+
+You’re now ready to move on:
+
+
diff --git a/src/content/docs/creating-a-mod/packaging-and-publishing.mdx b/src/content/docs/creating-a-mod/packaging-and-publishing.mdx
new file mode 100644
index 0000000..938fc05
--- /dev/null
+++ b/src/content/docs/creating-a-mod/packaging-and-publishing.mdx
@@ -0,0 +1,244 @@
+---
+title: Packaging and Publishing
+description: Step 3 of making a mod is publishing it!
+sidebar:
+ order: 3
+---
+
+import { LinkCard, FileTree } from '@astrojs/starlight/components';
+
+The most preferred way to publish Resonite mods is through [Thunderstore](https://thunderstore.io/c/resonite/).
+
+Before uploading your mod, you need to have built it into a `.dll`.
+
+## Packaging With TCLI
+
+The [Resonite BepInEx Template](https://github.com/ResoniteModding/BepInEx.Templates) comes with Thunderstore packaging built-in, using [TCLI](https://github.com/thunderstore-io/thunderstore-cli).
+
+If you used the template, you have two options for building packages:
+
+### Using TCLI directly
+
+```bash
+dotnet tcli build
+```
+
+### Using the PackTS target
+
+```bash
+dotnet build -c Release -t:PackTS -v d
+```
+
+The PackTS target will automatically build your mod and create a Thunderstore package in one step. The built package will be found at `./build/`.
+
+:::note
+You can learn about different build options with `dotnet build --help`.
+`-c` is short for `--configuration`, `-t` is short for `--target`, and `-v d` is `--verbosity detailed`.
+:::
+
+### Publishing with PackTS target
+
+The PublishTS property will build, package, and publish to Thunderstore all in one command:
+
+```bash
+# Set environment variable first
+export TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # Linux/Mac
+# or
+set TCLI_AUTH_TOKEN=YOUR_API_TOKEN # Windows CMD
+# or
+$env:TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # PowerShell
+
+# Then run the build
+dotnet build -c Release -t:PackTS -p:PublishTS=true
+```
+
+:::note
+When using the PackTS target with PublishTS, authentication only works via environment variable. The `--token` flag is not supported with this method. There's an [open issue](https://github.com/thunderstore-io/thunderstore-cli/issues/105) to add `.env` file support for easier token management.
+:::
+
+### Publishing with TCLI directly
+
+```bash
+# Using --token flag
+dotnet tcli publish --token YOUR_API_TOKEN
+
+# Or use environment variable (see above)
+dotnet tcli publish
+```
+
+### Authentication
+
+A Thunderstore API token is required to publish packages with TCLI. To acquire an API token:
+
+1. Log in to [thunderstore.io](https://thunderstore.io)
+2. Navigate to your team page: Settings → Teams → [Your team name]
+3. From the left sidebar, select **Service Accounts**
+4. Select **Add service account** and fill the name of the account into the form
+5. The API token is shown on the following confirmation page
+
+:::caution
+Save your API token immediately - it's only shown once! Keep it secret and never commit it to version control.
+:::
+
+An API token is required only for the publish command. There's two ways to configure it:
+
+1. Set it as `TCLI_AUTH_TOKEN` environment variable (e.g. for GitHub Actions)
+2. Pass it as a parameter to the command: `tcli publish --token tss_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
+
+If both methods are used, the command parameter takes precedence.
+
+Once you have the ZIP package, you can jump straight into [Uploading to Thunderstore](#uploading-to-thunderstore)!
+
+## Manual Packaging
+
+Create a new folder. Here we want to create a few files and one folder.
+Your new mod folder should look like this:
+
+
+- LICENSE (optional)
+- manifest.json
+- README.md
+- CHANGELOG.md (optional)
+- icon.png
+- plugins
+ - YourMod
+ - YourMod.dll
+ - YourMod.pdb (optional)
+
+
+### `manifest.json`
+
+Your manifest is crucial — without it, your mod won't work on Thunderstore.
+
+Here’s an example of what it should look like:
+
+```json title="manifest.json"
+{
+ "name": "Your_mod_name",
+ "version_number": "1.0.0",
+ "website_url": "https://resonitemodding.github.io",
+ "description": "A mod description",
+ "dependencies": ["ResoniteModding-BepisLoader-1.3.1"]
+}
+```
+
+The manifest is fragile. Use this tool to validate it:
+[Thunderstore Manifest Validator](https://thunderstore.io/tools/manifest-v1-validator/)
+
+**Notes:**
+
+- Underscores in `name` will appear as spaces on the site.
+- `version_number` must increase with every release.
+- `website_url` is optional, but linking your source page is recommended. (e.g. Github)
+- You can include any number of dependencies.
+
+**Example with dependencies:**
+
+```json title="manifest.json"
+{
+ ...
+ "dependencies": [
+ "ResoniteModding-BepisLoader-1.3.1",
+ "ResoniteModding-BepisLocaleLoader-1.0.0"
+ ]
+}
+```
+
+Dependency strings can be found on the individual mod’s page on Thunderstore.
+
+### `README.md` & `CHANGELOG.md`
+
+- `README.md` becomes your mod’s description on Thunderstore.
+- `CHANGELOG.md` is optional, but useful for showing update history.
+
+Both files support Markdown formatting. Helpful resource: [Markdown Cheat Sheet](https://www.markdownguide.org/cheat-sheet/)
+
+### `icon.png`
+
+Your icon must be exactly **256x256** pixels.
+
+Transparency is supported, although if used, it is recommended the icon has clear borders that work with any background color as icons might be displayed in a variety of themes (e.g. with 3rd party mod managers).
+
+APNG is technically valid, but only the first frame will currently be displayed on the site.
+
+### LICENSE
+
+Choosing a license can feel overwhelming, but here’s a simple guide:
+
+1. **Do you want others to use your code in their mods?**
+2. **Do you want credit for your work?**
+3. **Do you care if others use it in commercial/closed-source projects?**
+
+Common license options:
+
+- **MIT License** — Very permissive. Others can reuse your code with attribution, even commercially.
+- **GPL-3.0** — Requires others to also open-source their projects if they use your code.
+- **CC0 / Unlicense** — No rights reserved. Anyone can use your code however they want, no credit needed.
+
+Generate one here: [choosealicense.com](https://choosealicense.com/)
+
+:::tip
+If you're unsure, **MIT** is a safe and popular choice for mods.
+:::
+
+:::danger
+Not including a LICENSE file means your mod defaults to **All Rights Reserved** — others cannot legally use, share, or remix it.
+:::
+
+### Making a ZIP
+
+Now zip up your contents.
+
+**Do NOT zip the folder itself.**
+Instead, select all files inside and compress them.
+
+On Windows:
+
+- Select all files
+- Right-click → Send to → Compressed (zipped) folder
+
+## Uploading to Thunderstore
+
+To upload a mod, first create a Thunderstore team by logging in and going here:
+https://thunderstore.io/settings/teams/create/
+
+:::tip
+Once a mod is uploaded, your Thunderstore team **cannot** be deleted or renamed — choose carefully!
+:::
+
+Then go to: [Thunderstore Upload Page](https://thunderstore.io/c/resonite/create/)
+
+- Upload your `.zip`
+- Select your team
+- Choose **Resonite** as the community
+- Select relevant categories
+- Submit!
+
+If your mod is NSFW, make sure to mark it.
+
+:::caution
+Uploaded packages can not be deleted, but they can be deprecated which will hide the package. To fully delete a package, you must reach out to Thunderstore staff.
+:::
+:::danger
+Skipping steps can cause your mod upload to fail.
+If it's rejected by moderation, visit the `#rejected-uploads` channel in the Discord server to appeal.
+:::
+
+## Discord Mod Releases
+
+Want that shiny **Mod Developer** role in the [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm)?
+
+Here's how to get it:
+
+1. Join the server
+2. Go to `#mod-development` channel
+3. Mention that you want the Mod Developer role and link your published mod
+4. Wait for the role to be assigned
+
+Once you have the Mod Developer role, you can advertise your mod in the `#resonite-mod-releases` channel to let the community know about your creation!
+
+
diff --git a/src/content/docs/creating-a-mod/updating.mdx b/src/content/docs/creating-a-mod/updating.mdx
new file mode 100644
index 0000000..be87380
--- /dev/null
+++ b/src/content/docs/creating-a-mod/updating.mdx
@@ -0,0 +1,60 @@
+---
+title: Updating Your Package
+description: Step 4 of making a mod is updating it!
+sidebar:
+ order: 4
+---
+
+You have published your mod, great! But now you want to update it, but it's not obvious how to do so.
+
+To update your mod, you need to simply change the version number in the Thunderstore package and upload the package, and it will be uploaded as a new version.
+
+## Updating Version (TCLI)
+
+If you used the [Resonite Modding BepInEx Template](https://github.com/ResoniteModding/BepInEx.Templates), you can update the `Version` property in your `csproj` file:
+
+```xml title="csproj" {7} del="1.0.0" ins="1.1.0"
+
+
+
+ netstandard2.1
+ com.github.YourAccount.ModName
+ ModName
+ 1.0.01.1.0
+
+ ...
+
+
+```
+
+This property is used in the template when calling [TCLI](https://github.com/thunderstore-io/thunderstore-cli) to build or publish the package so the package always gets the correct version:
+
+```xml title="Directory.Build.targets" "Version"
+
+ ...
+
+ ...
+
+
+
+```
+
+## Updating Version Manually
+
+Edit your `manifest.json` file and change the version number:
+
+```json title="manifest.json" {3} del="1.0.0" ins="1.1.0"
+{
+ "name": "Your_mod_name",
+ "version_number": "1.0.01.1.0",
+ "website_url": "https://resonitemodding.github.io",
+ "description": "A mod description",
+ "dependencies": []
+}
+```
+
+Then, rezip the mod like before and upload it! Super duper simple!
+
+:::caution
+The mod must be under the same community and team! You do not need to fill in the tags.
+:::
diff --git a/src/content/docs/creating-a-mod/writing-code.mdx b/src/content/docs/creating-a-mod/writing-code.mdx
new file mode 100644
index 0000000..5370d24
--- /dev/null
+++ b/src/content/docs/creating-a-mod/writing-code.mdx
@@ -0,0 +1,111 @@
+---
+title: Writing Code
+description: Step 2 of making a mod is coding it!
+sidebar:
+ order: 2
+---
+
+import { LinkCard, LinkButton, FileTree } from '@astrojs/starlight/components';
+
+:::note
+Make sure you have [created a project](/creating-a-mod/creating-a-project). Once you have a project, you can start coding!
+:::
+
+You should have a project that looks like this:
+
+
+- .gitignore
+- CHANGELOG.md
+- Directory.Build.targets
+- icon.png
+- LICENSE
+- README.md
+- ResoniteMod.sln
+- thunderstore.toml
+- .config/
+ - dotnet-tools.json
+- src/
+ - ResoniteMod/
+ - Plugin.cs
+ - ResoniteMod.csproj
+
+
+:::tip
+The `Plugin.cs` file contains your code while the `csproj` files are for build configuration. You can look inside all of the files and look for comments that explain what everything does.
+:::
+
+Open the project in your IDE of choice where the `.sln` file is, and then open the `Plugin.cs` file. It should look something like this:
+
+```cs title="Plugin.cs"
+using BepInEx;
+using BepInEx.Logging;
+using BepInEx.NET.Common;
+using BepInExResoniteShim;
+
+namespace ResoniteMod;
+
+[ResonitePlugin(PluginMetadata.GUID, PluginMetadata.NAME, PluginMetadata.VERSION, PluginMetadata.AUTHORS, PluginMetadata.REPOSITORY_URL)]
+[BepInDependency(BepInExResoniteShim.PluginMetadata.GUID, BepInDependency.DependencyFlags.HardDependency)]
+public class Plugin : BasePlugin
+{
+ internal static new ManualLogSource? Log;
+
+ public override void Load()
+ {
+ // Plugin startup logic
+ Log = base.Log;
+ Log.LogInfo($"Plugin {PluginMetadata.GUID} is loaded!");
+ }
+}
+
+```
+
+This is a very basic BepInEx 6 plugin.
+
+Work in progress documentation, more will be added. For now, for more info, see BepInEx's own documentation:
+
+
+ Creating a new plugin project—Plugin structure
+
+
+You can also follow the links to learn more about each thing mentioned:
+
+
+ Logging: lethal.wiki
+
+
+ Custom Configs: lethal.wiki
+
+
+ Patching Code: lethal.wiki
+
+
+For patching/hooking methods, you can use [MonoMod](https://github.com/MonoMod/MonoMod) or [HarmonyX](https://github.com/BepInEx/HarmonyX). See [lethal.wiki](https://lethal.wiki/dev/fundamentals/patching-code) for more in-depth introductions on using them.
+
+:::note
+[MonoDetour](https://github.com/MonoDetour/MonoDetour) is also an option for hooking, but it's in pre-release state and therefore is not fit for production usage yet. You can find its documentation at https://monodetour.github.io/
+:::
+
+All of these libraries are compatible with each other as HarmonyX and MonoDetour simply use MonoMod.RuntimeDetour under the hood.
+
+## Writing Your First Patch
+
+work in progress.
+
+
diff --git a/src/content/docs/getting-started/first-mod.mdx b/src/content/docs/getting-started/first-mod.mdx
deleted file mode 100644
index 1da8a84..0000000
--- a/src/content/docs/getting-started/first-mod.mdx
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Your First Mod
-description: Step-by-step guide to creating your first Resonite mod
----
-
-work in progress
-
-## Next Steps
-
-- Join the [Discord community](https://discord.gg/vCDJK9xyvm) for help
diff --git a/src/content/docs/getting-started/installation.mdx b/src/content/docs/getting-started/installation.mdx
index 03b68a8..4117ab5 100644
--- a/src/content/docs/getting-started/installation.mdx
+++ b/src/content/docs/getting-started/installation.mdx
@@ -1,11 +1,15 @@
---
-title: Installation Guide
+title: Installation
description: Get started with Resonite modding using mod managers
+sidebar:
+ order: 1
---
-import { Card, CardGrid, LinkButton } from '@astrojs/starlight/components';
+import { LinkButton, Tabs, TabItem } from '@astrojs/starlight/components';
+import Card from '@components/Card.astro';
+import CardGrid from '@components/CardGrid.astro';
-Get started with Resonite modding by installing a mod manager. BepisLoader will be installed automatically as a dependency when you install your first mod.
+Get started with Resonite modding by installing a mod loader. **BepisLoader** is the recommended and most widely supported option - it will be installed automatically when you use a mod manager.
## Using a Mod Manager (Recommended)
@@ -58,18 +62,111 @@ Only use manual installation if you need custom configurations or are developing
If you need manual control:
-1. **Download** [BepisLoader-full.zip](https://github.com/art0007i/BepisLoader/releases/latest)
-2. **Extract** directly into your Resonite folder (next to `Resonite.exe`)
-3. **Launch Resonite** - you should see BepInEx logs in the console
+1. **Download** BepisLoader from [Thunderstore](https://thunderstore.io/c/resonite/p/ResoniteModding/BepisLoader/) or [GitHub releases](https://github.com/ResoniteModding/BepisLoader/releases/latest)
+2. **Extract** the ZIP file
+3. **Copy** the contents of the `BepInExPack` folder to your Resonite installation root directory
+4. **Launch Resonite** - BepInEx will generate configuration files on first run
-**File locations:** (it may vary based on your Steam library location)
+**Find your Resonite folder:**
+- Via Steam: `Steam > Library > Resonite > Manage > Browse local files`
- **Windows**: `C:\Program Files (x86)\Steam\steamapps\common\Resonite`
-- **Linux**: `~/.local/share/Steam/steamapps/common/Resonite`
+- **Linux**: `~/.steam/steam/steamapps/common/Resonite`
+
+## Alternative Mod Loaders
+
+While BepisLoader is the recommended option (and the only one supported on Thunderstore), there are other mod loaders available for Resonite:
+
+
+
+
+**BepisLoader** - Lightweight and modular loader
+
+- Based on mature BepInEx framework (used by many games)
+- Full Thunderstore support (massive modding repository)
+- Windows: Uses [HookFxr](https://github.com/ResoniteModding/hookfxr) to inject
+- Linux: Modifies LinuxBootstrap.sh to load BepisLoader.dll
+- Lightweight core with features added via libraries:
+ - [BepisLocaleLoader](https://github.com/ResoniteModding/BepisLocaleLoader) for localization
+ - [BepisModSettings](https://github.com/ResoniteModding/BepisModSettings) for in-game config UI
+- Simple and flexible for developers
+
+[GitHub Repository](https://github.com/ResoniteModding/BepisLoader)
+
+
+
+
+**ResoniteModLoader (RML)** - The original basic mod loader
+
+- Fork of [NeosModLoader](https://github.com/neos-modding-group/NeosModLoader) from NeosVR days
+- Oldest and most established in the Resonite community
+- Largest existing mod ecosystem for Resonite
+- Very basic - no advanced features
+- Uses Resonite's official `-LoadAssembly` plugin loader (no injection)
+- JSON manifest system for mod discovery
+- Supported by Resolute mod manager
+
+Installation: Place DLL in Libraries folder and add launch option
+
+[GitHub Repository](https://github.com/resonite-modding-group/ResoniteModLoader) | [Resolute Manager](https://github.com/Gawdl3y/Resolute)
+
+
+
+
+**MonkeyLoader** - Feature-heavy all-in-one loader
+
+- Everything built-in: hot reloading, localization, pre-patching
+- Windows: Uses [HookFxr](https://github.com/ResoniteModding/hookfxr) to inject
+- Linux: Modifies LinuxBootstrap.sh to load MonkeyLoader
+- Opinionated development workflow
+- Requires NuGet registry for distribution (still WIP)
+- GamePack system for extensibility
+- More complex setup and development
+
+Installation: Download MonkeyLoader and Resonite GamePack ZIP, extract to Resonite folder
+
+[GitHub Repository](https://github.com/MonkeyModdingTroop/MonkeyLoader)
+
+
+
+
+## Mod Loader Comparison
+
+| Feature | BepisLoader | ResoniteModLoader | MonkeyLoader |
+| ------------------------- | --------------------- | --------------------- | --------------------------- |
+| **Philosophy** | Lightweight & modular | Basic & minimal | Feature-heavy all-in-one |
+| **Release Status** | Newest | Oldest | Recent |
+| **Ecosystem Size** | Growing rapidly | Large | Small |
+| **Thunderstore Support** | ✅ | ❌ | ❌ |
+| **Mod Distribution** | Thunderstore, Manual | JSON manifest, Manual | ~~NuGet~~ (Planned), Manual |
+| **Windows Hooking** | HookFxr | `-LoadAssembly` | HookFxr |
+| **Linux Hooking** | Bootstrap script | `-LoadAssembly` | Bootstrap script |
+| **Installation Method** | Mod managers, Manual | Manual | Manual |
+| **Mod Manager** | ✅ r2modman, Gale | ✅ Resolute | ❌ |
+| **In-game Config UI** | ✅ Via libraries | ✅ Via libraries | ✅ Built-in |
+| **Harmony Patching** | ✅ | ✅ | ✅ |
+| **Pre-patching** | ✅ | ❌ | ✅ |
+| **Hot Reloading** | ❌ Planned | ✅ Via libraries | ✅ Built-in |
+| **Localization** | ✅ Via libraries | ❌ | ✅ Built-in |
+| **Dependency Management** | ✅ Via Thunderstore | ✅ Via Resolute | ❌ Manual |
+| **Developer Experience** | Simple & flexible | Very basic | Complex & opinionated |
+| **Learning Curve** | Easy | Easy | Steep |
+
+:::tip[Why BepisLoader?]
+BepisLoader is recommended for new users because:
+
+- **Thunderstore integration** - Access to a massive, established mod repository
+- **Mod manager support** - Easy installation and updates with r2modman/Gale
+- **BepInEx foundation** - Built on proven technology used across many games
+- **Works alongside RML** - Can use both BepisLoader and RML mods together
+
+Note: BepisLoader and ResoniteModLoader can be used side-by-side! This gives you access to both Thunderstore mods (via BepisLoader) and the existing RML mod ecosystem. Only BepisLoader mods are managed through Thunderstore mod managers.
+:::
## Next Steps
-Now that you have a mod manager installed:
+Now that you have a mod loader installed:
-- [Create your first mod](/getting-started/first-mod/) to start coding
+- [Use mods](/getting-started/using-mods/) from the community
+- [Create your first mod](/creating-a-mod/initial-setup/) to start developing
- [Browse mods on Thunderstore](https://thunderstore.io/c/resonite/) to find existing mods
diff --git a/src/content/docs/getting-started/overview.mdx b/src/content/docs/getting-started/overview.mdx
new file mode 100644
index 0000000..dd79c79
--- /dev/null
+++ b/src/content/docs/getting-started/overview.mdx
@@ -0,0 +1,72 @@
+---
+title: Overview
+description: Your guide to using and creating mods for Resonite
+sidebar:
+ order: 0
+---
+
+import { LinkCard } from '@astrojs/starlight/components';
+import CardGrid from '@components/CardGrid.astro';
+import { LinkButton } from '@astrojs/starlight/components';
+
+Welcome to the Resonite Modding Wiki! Whether you want to **use mods** to enhance your Resonite experience or **create your own mods**, this wiki has you covered.
+
+## I want to use mods
+
+If you're looking to install and use mods created by the community:
+
+
+
+
+
+
+
+## I want to create mods
+
+Ready to develop your own mods for Resonite?
+
+
+
+
+
+
+
+
+
+
+
+## Community & Resources
+
+
diff --git a/src/content/docs/getting-started/troubleshooting.mdx b/src/content/docs/getting-started/troubleshooting.mdx
index 2c030b7..8da1bde 100644
--- a/src/content/docs/getting-started/troubleshooting.mdx
+++ b/src/content/docs/getting-started/troubleshooting.mdx
@@ -1,10 +1,57 @@
---
-title: Troubleshooting Guide
-description: Solutions to common Resonite modding issues
+title: Troubleshooting
+description: Solutions to common Resonite modding issues\
+sidebar:
+ order: 3
---
This guide covers solutions to common problems when setting up and using Resonite mods.
-## Common Issues
+## Mod Loading Issues
-work in progress
+### Mods not loading?
+
+- Check BepInEx console for errors
+- Verify all dependencies are installed
+- Ensure mod is compatible with your Resonite version
+- Check that the mod files are in the correct folder (`BepInEx/plugins/`)
+
+### Performance problems?
+
+- Disable mods one by one to find the culprit
+- Check mod descriptions for known issues
+- Some mods may conflict with each other
+- Monitor RAM and CPU usage
+
+### Game crashes?
+
+- Remove recently added mods
+- Check for mod updates
+- Verify game files through Steam
+- Check crash logs in `BepInEx/LogOutput.log`
+
+## Getting Help
+
+### Where to get support
+
+- Check the mod's Thunderstore page for documentation
+- Ask in [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm)
+- Search for existing issues on the mod's GitHub or other platforms
+- Check the mod's README for known issues
+
+### Information to provide when asking for help
+
+- Your Resonite version
+- List of installed mods and versions
+- Error messages from BepInEx console
+- Steps to reproduce the issue
+
+## Safety Reminders
+
+:::caution
+
+- Only download mods from Thunderstore or trusted sources
+- Be cautious with mods requesting unusual permissions
+- Avoid new or unreviewed mods if you're unsure they can be trusted
+- Some mods may impact game performance
+ :::
diff --git a/src/content/docs/getting-started/using-mods.mdx b/src/content/docs/getting-started/using-mods.mdx
new file mode 100644
index 0000000..563bab7
--- /dev/null
+++ b/src/content/docs/getting-started/using-mods.mdx
@@ -0,0 +1,142 @@
+---
+title: Using Mods
+description: Find, install, and manage mods for Resonite
+sidebar:
+ order: 2
+---
+
+import { LinkCard, Tabs, TabItem } from '@astrojs/starlight/components';
+import CardGrid from '@components/CardGrid.astro';
+import { LinkButton } from '@astrojs/starlight/components';
+
+This guide covers everything you need to know about using mods in Resonite after you've [installed BepisLoader](/getting-started/installation/).
+
+## Finding Mods
+
+### Thunderstore Repository
+
+Resonite mods are hosted on Thunderstore, a community mod repository:
+
+
+ Browse Resonite Mods on Thunderstore
+
+
+### Evaluating Mods
+
+Before installing, check:
+
+- **Last Updated** - Is it actively maintained?
+- **Downloads & Likes** - Popular mods are usually well-tested
+- **Dependencies** - What other mods are required?
+
+## Installing Mods
+
+
+
+
+If you're using Gale or r2modmanPlus:
+
+1. **Browse** the mod list in your manager
+2. **Click Install** on the mods you want
+3. **Dependencies** are handled automatically
+4. **Launch Resonite** through the manager
+
+
+
+
+For manual installation:
+
+1. **Download** the mod from Thunderstore
+2. **Extract** the ZIP file
+3. **Copy files** to your Resonite installation:
+ - Most mods → `BepInEx/plugins/`
+ - Preloader patches → `BepInEx/patchers/`
+4. **Install dependencies** manually if needed
+
+
+
+
+## Managing Your Mods
+
+### Mod Locations
+
+```
+Resonite/
+├── BepInEx/
+│ ├── plugins/ # Most mods go here
+│ ├── patchers/ # Preloader patches
+│ └── config/ # Mod configuration files
+```
+
+### Configuring Mods
+
+Many mods have configuration options in `BepInEx/config/`:
+
+1. **Open** the `.cfg` file in a text editor
+2. **Modify settings** as needed
+3. **Save** the file
+4. **Restart Resonite** if needed (some mods can reload configs dynamically)
+
+:::tip
+Some mods automatically reload when their config changes - no restart needed!
+:::
+
+### Updating Mods
+
+
+
+
+- Click **Check for Updates** in your manager
+- **Update all** or select specific mods
+- Manager handles everything automatically
+
+
+
+
+1. Check for updates:
+ - Mod's Thunderstore page
+ - Check `#resonite-mod-releases` channel in [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm)
+ - GitHub releases page
+ - Other distribution platforms
+2. Download the new version
+3. Replace old files in `BepInEx/plugins/`
+4. Update any dependencies if needed
+
+
+
+
+### Disabling/Removing Mods
+
+**To disable temporarily:**
+
+- In mod manager: Toggle the mod off
+- Manual: Move the mod file out of `BepInEx/plugins/`
+
+**To remove completely:**
+
+- In mod manager: Uninstall the mod
+- Manual: Delete from `BepInEx/plugins/` and optionally from `BepInEx/config/`
+
+## Using Profiles
+
+Mod managers allow you to create different profiles for different mod setups. You can switch between profiles to quickly change your entire mod configuration - useful for testing, different situations like being in VR or Desktop, or keeping a clean vanilla setup.
+
+## Having Issues?
+
+If you're experiencing problems with your mods, check out our [Troubleshooting Guide](/getting-started/troubleshooting/) for solutions to common issues.
+
+## Next Steps
+
+
+
+
+
+
diff --git a/src/content/docs/guides/configuration.mdx b/src/content/docs/guides/configuration.mdx
new file mode 100644
index 0000000..a81d00d
--- /dev/null
+++ b/src/content/docs/guides/configuration.mdx
@@ -0,0 +1,17 @@
+---
+title: Custom Config
+description: Create mod configurations for your mods
+sidebar:
+ order: 2
+---
+
+import { LinkCard } from '@astrojs/starlight/components';
+
+work in progress.
+
+
diff --git a/src/content/docs/guides/debugging.mdx b/src/content/docs/guides/debugging.mdx
deleted file mode 100644
index d5c9d1e..0000000
--- a/src/content/docs/guides/debugging.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Debugging & Development Environment
-description: Set up your development environment and learn debugging techniques for Resonite mods
----
-
-This guide covers setting up your development environment and debugging techniques for Resonite mod development.
-
-work in progress
diff --git a/src/content/docs/guides/dependancy.mdx b/src/content/docs/guides/dependancy.mdx
new file mode 100644
index 0000000..9b1deb9
--- /dev/null
+++ b/src/content/docs/guides/dependancy.mdx
@@ -0,0 +1,8 @@
+---
+title: Dependancies
+description: --
+sidebar:
+ order: 5
+---
+
+work in progress.
diff --git a/src/content/docs/guides/hot-reload.mdx b/src/content/docs/guides/hot-reload.mdx
new file mode 100644
index 0000000..3db1842
--- /dev/null
+++ b/src/content/docs/guides/hot-reload.mdx
@@ -0,0 +1,8 @@
+---
+title: Hot Reloading
+description: --
+sidebar:
+ order: 6
+---
+
+work in progress.
diff --git a/src/content/docs/guides/logging.mdx b/src/content/docs/guides/logging.mdx
new file mode 100644
index 0000000..b18e29f
--- /dev/null
+++ b/src/content/docs/guides/logging.mdx
@@ -0,0 +1,17 @@
+---
+title: Logging
+description: Logging is a very useful debugging tool for developers. You can look at the console or the log file to see if everything ran correctly, or if errors occured.
+sidebar:
+ order: 1
+---
+
+import { LinkCard } from '@astrojs/starlight/components';
+
+work in progress.
+
+
diff --git a/src/content/docs/guides/mod-basics.mdx b/src/content/docs/guides/mod-basics.mdx
deleted file mode 100644
index 497c9cc..0000000
--- a/src/content/docs/guides/mod-basics.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Mod Development Basics
-description: Core concepts and best practices for Resonite mod development
----
-
-This guide covers essential concepts for developing Resonite mods with BepInEx.
-
-work in progress
diff --git a/src/content/docs/guides/patching.mdx b/src/content/docs/guides/patching.mdx
new file mode 100644
index 0000000..c1e7693
--- /dev/null
+++ b/src/content/docs/guides/patching.mdx
@@ -0,0 +1,8 @@
+---
+title: Patching
+description: --
+sidebar:
+ order: 3
+---
+
+work in progress.
diff --git a/src/content/docs/guides/prepatching.mdx b/src/content/docs/guides/prepatching.mdx
new file mode 100644
index 0000000..2de7822
--- /dev/null
+++ b/src/content/docs/guides/prepatching.mdx
@@ -0,0 +1,8 @@
+---
+title: Prepatching
+description: --
+sidebar:
+ order: 4
+---
+
+work in progress.
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
index e6a47bc..3ba3a50 100644
--- a/src/content/docs/index.mdx
+++ b/src/content/docs/index.mdx
@@ -1,46 +1,76 @@
---
title: Welcome to Resonite Modding
-description: Your comprehensive guide to modding Resonite with BepInEx
+description: Your comprehensive guide to using and creating mods for Resonite
template: splash
hero:
- tagline: Learn how to create, install, and manage mods for Resonite using BepInEx and BepisLoader
+ tagline: The complete resource for mod users and developers - Install mods to enhance your experience or create your own
image:
file: ../../../public/assets/favicon.svg
actions:
- - text: Get Started
+ - text: I Want to Use Mods
link: /getting-started/installation/
- icon: right-arrow
+ icon: rocket
variant: primary
- - text: View on GitHub
- link: https://github.com/ResoniteModding
- icon: external
+ - text: I Want to Create Mods
+ link: /creating-a-mod/initial-setup/
+ icon: pencil
variant: secondary
---
-import { CardGrid, LinkButton, Badge, Tabs, TabItem } from '@astrojs/starlight/components';
+import { LinkButton, Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import Card from '@components/Card.astro';
+import CardGrid from '@components/CardGrid.astro';
import { Icon } from '@astrojs/starlight/components';
-## Quick Start
+## For Mod Users
-
- Set up your Resonite modding environment with BepisLoader and BepInEx.
+
+ Set up the mod loader to run community mods in Resonite.
- Get Started
+ Installation Guide
-
- Create your first Resonite mod with our step-by-step tutorial.
- Learn More (WIP)
+
+ Find, install, configure, and manage your mods.
+
+ Complete Guide
+
+
+
+ Explore community-created mods on Thunderstore.
+
+ Visit Thunderstore
+
+
+
+ Fix common issues with mod installation and usage.
+
+ Get Help
+
+
+
+
+## For Mod Developers
+
+
+
+ Configure your development environment for creating mods.
+
+ Setup Guide
+
-
- Find code snippets and patterns for common modding tasks.
- Browse Recipes (WIP)
+
+ Step-by-step tutorial to build your first Resonite mod.
+
+ Start Coding
+
-
- BepInEx documentation.
- Browse Docs
+
+ Share your creation with the Resonite community.
+
+ Publishing Guide
+
@@ -55,7 +85,11 @@ import { Icon } from '@astrojs/starlight/components';
Contribute to BepisLoader development
-
+
View on GitHub
diff --git a/src/content/docs/resources/faq.mdx b/src/content/docs/resources/faq.mdx
new file mode 100644
index 0000000..9ee27b1
--- /dev/null
+++ b/src/content/docs/resources/faq.mdx
@@ -0,0 +1,8 @@
+---
+title: Frequently Asked Questions
+description: --
+sidebar:
+ order: 1
+---
+
+work in progress.
diff --git a/src/content/docs/resources/links.mdx b/src/content/docs/resources/links.mdx
index b27c46c..6650b13 100644
--- a/src/content/docs/resources/links.mdx
+++ b/src/content/docs/resources/links.mdx
@@ -10,13 +10,15 @@ import { Card, CardGrid, LinkButton, Badge, Icon } from '@astrojs/starlight/comp
- [Steam Page](https://store.steampowered.com/app/2519830/Resonite/)
- [Website](https://resonite.com/)
- [Official Wiki](https://wiki.resonite.com/)
+- [Mod and Plugin Policy](https://resonite.com/policies/ModAndPlugin.html)
- [Yellow Dog Man Studios](https://yellowdogman.com/)
+- [Official Discord](https://discord.gg/resonite)
## Community
### Discord Servers
-- [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) - Primary modding community
+- [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) - Primary modding discord
### Forums & Discussion
diff --git a/src/content/docs/resources/tools.mdx b/src/content/docs/resources/tools.mdx
deleted file mode 100644
index c3e6220..0000000
--- a/src/content/docs/resources/tools.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Tools & Utilities
-description: Essential tools and utilities for Resonite mod development
----
-
-This page covers the essential tools and utilities you'll need for effective Resonite mod development.
-
-work in progress
diff --git a/src/content/docs/resources/translating.mdx b/src/content/docs/resources/translating.mdx
new file mode 100644
index 0000000..026e86d
--- /dev/null
+++ b/src/content/docs/resources/translating.mdx
@@ -0,0 +1,8 @@
+---
+title: Contributing Translations
+description: --
+sidebar:
+ order: 2
+---
+
+work in progress.
diff --git a/src/styles/theme.css b/src/styles/theme.css
index 75874c3..b578512 100644
--- a/src/styles/theme.css
+++ b/src/styles/theme.css
@@ -77,3 +77,63 @@ sl-doc-search {
}
}
}
+
+/* table scrolling */
+.sl-markdown-content {
+ table {
+ display: block;
+ overflow-x: auto;
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ -webkit-overflow-scrolling: touch;
+ touch-action: pan-x pan-y;
+
+ & thead,
+ & tbody {
+ min-width: 100%;
+ }
+
+ & th,
+ & td {
+ white-space: nowrap;
+ padding: 0.5rem 0.75rem;
+ vertical-align: top;
+ border-bottom: 1px solid var(--sl-color-gray-5);
+ text-align: left;
+ }
+
+ & th {
+ background: var(--sl-color-gray-6);
+ font-weight: 600;
+ border-bottom: 2px solid var(--sl-color-gray-4);
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+
+ & .wrap,
+ & .text-wrap {
+ white-space: normal;
+ word-break: break-word;
+ min-width: 150px;
+ }
+
+ @media (max-width: 768px) {
+ & th,
+ & td {
+ padding: 0.375rem 0.5rem;
+ font-size: 0.875rem;
+ }
+ }
+
+ @media (max-width: 480px) {
+ & th,
+ & td {
+ padding: 0.25rem 0.375rem;
+ font-size: 0.8rem;
+ min-width: 60px;
+ }
+ }
+ }
+}