Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
832f298
some UI changes for kradle
pranaygp Feb 17, 2025
24568f1
change port
pranaygp Feb 17, 2025
e70849d
use our proxy. remove the localstorage of proxies
pranaygp Feb 17, 2025
9ad6a84
use env.PORT in proxy server
pranaygp Feb 18, 2025
da999e7
switch default proxy to mcproxy.kradle.ai
pranaygp Feb 18, 2025
49474fc
update README and makefile for manual deployments
pranaygp Feb 18, 2025
5de3de8
enable vercel deployments
pranaygp Feb 18, 2025
725df84
Update README.MD
pranaygp Feb 18, 2025
88c6c26
auto follow players
pranaygp Mar 9, 2025
499cb41
prettier
pranaygp Mar 9, 2025
aca64d5
lots of fixes
pranaygp Mar 10, 2025
996cfd0
comments
pranaygp Mar 10, 2025
8b4045e
stop bot following
pranaygp Mar 10, 2025
016feec
cleanup
pranaygp Mar 10, 2025
12f6bda
smooth camera rotation
pranaygp Mar 10, 2025
4f6adf1
Merge pull request #1 from Kradle-ai/pranaygp/2024_03_08_mc_viewer_au…
pranaygp Mar 10, 2025
dd70480
use watcher based following for the bot
pranaygp Mar 18, 2025
635ff90
fix a bunch of follow related bugs
pranaygp Mar 18, 2025
ea648bb
disable crosshair
pranaygp Mar 19, 2025
b12399a
maintain camera angle on unfollow
pranaygp Mar 19, 2025
57ac0b2
iframe commands
pranaygp Mar 26, 2025
06abcd6
more fixes
pranaygp Mar 26, 2025
2311fcb
Merge upstream changes from zardoy with current next branch
pranaygp Mar 26, 2025
c5f4c1a
fix camera tween
pranaygp Mar 27, 2025
4185aec
other fixes
pranaygp Mar 27, 2025
b2a0d8d
Merge pull request #3 from Kradle-ai/pranaygp/2025_03_25_merge_upstre…
pranaygp Mar 27, 2025
da97b76
add follow custom commands
pranaygp Mar 28, 2025
17bbfbb
follow fixes
pranaygp Mar 28, 2025
f4185de
disable 'falling' mode in spectator view
pranaygp Mar 28, 2025
e1f5177
fixes
pranaygp Mar 28, 2025
575cd3b
parse out playback data and return to the parent app for display
mapes911 Jul 4, 2025
3e57560
report connection status to parent app
mapes911 Jul 4, 2025
5798d97
fix lint error
mapes911 Jul 7, 2025
a5b8f4d
fix build issue?
allan-sqf Jul 7, 2025
67f06e2
fix build issue 2
allan-sqf Jul 7, 2025
60f996b
Turning off prettier and reverting some of its changes
cbraynor Jul 7, 2025
b2ff845
One more
cbraynor Jul 7, 2025
6c602d3
Actually adding .prettierignore
cbraynor Jul 7, 2025
266e4b3
Merge pull request #4 from Kradle-ai/allan/recording-playback-improve…
allan-sqf Jul 8, 2025
f4818c0
Changes to build script for studio
cbraynor Jul 11, 2025
92930e9
Removing hard-coded hash
cbraynor Jul 11, 2025
fcd70a3
load custom skin images
allan-sqf Jul 14, 2025
9be5259
comments
allan-sqf Jul 15, 2025
b97df7f
fix lint errors
allan-sqf Jul 17, 2025
a20c597
Merge pull request #5 from Kradle-ai/allan/kra-386-explore-character-…
cbraynor Jul 17, 2025
270e702
stash
allan-sqf Aug 24, 2025
44dde60
remove trailing spaces
allan-sqf Aug 29, 2025
43b3dbd
remove console logs, force 30% default on volume
allan-sqf Aug 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
// "@stylistic/multiline-ternary": "error", // not needed
// "@stylistic/newline-per-chained-call": "error", // not sure if needed
"@stylistic/new-parens": "error",
"@typescript-eslint/class-literal-property-style": "off",
"@stylistic/no-confusing-arrow": "error",
"@stylistic/wrap-iife": "error",
"@stylistic/space-before-blocks": "error",
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/build-single-file.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: build-single-file

on:
workflow_dispatch:

jobs:
build-and-bundle:
runs-on: ubuntu-latest
permissions: write-all
steps:
- name: Checkout repository
uses: actions/checkout@master

- uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install dependencies
run: pnpm install

- name: Build single-file version - minecraft.html
run: pnpm build-single-file && mv dist/single/index.html minecraft.html

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: minecraft.html
path: minecraft.html
43 changes: 43 additions & 0 deletions .github/workflows/build-zip.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Make Self Host Zip

on:
workflow_dispatch:

jobs:
build-and-bundle:
runs-on: ubuntu-latest
permissions: write-all
steps:
- name: Checkout repository
uses: actions/checkout@master

- uses: actions/setup-node@v4
with:
node-version: 22

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install dependencies
run: pnpm install

- name: Build project
run: pnpm build

- name: Bundle server.js
run: |
pnpm esbuild server.js --bundle --platform=node --outfile=bundled-server.js --define:process.env.NODE_ENV="'production'"

- name: Create distribution package
run: |
mkdir -p package
cp -r dist package/
cp bundled-server.js package/server.js
cd package
zip -r ../self-host.zip .

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: self-host
path: self-host.zip
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- run: pnpm build-storybook
- run: pnpm test-unit
- run: pnpm lint
- run: pnpm tsx scripts/buildNpmReact.ts
# - run: pnpm tsx scripts/buildNpmReact.ts
- run: nohup pnpm prod-start &
- run: nohup pnpm test-mc-server &
- uses: cypress-io/github-action@v5
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/next-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ jobs:
echo "{\"latestTag\": \"$(git rev-parse --short $GITHUB_SHA)\", \"isCommit\": true}" > assets/release.json
- name: Build Project Artifacts
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
env:
CONFIG_JSON_SOURCE: BUNDLED
- run: pnpm build-storybook
- name: Copy playground files
run: |
Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,19 @@ jobs:
with:
node-version: 22
cache: "pnpm"
- name: Update deployAlwaysUpdate packages
run: |
if [ -f package.json ]; then
PACKAGES=$(node -e "const pkg = require('./package.json'); if (pkg.deployAlwaysUpdate) console.log(pkg.deployAlwaysUpdate.join(' '))")
if [ ! -z "$PACKAGES" ]; then
echo "Updating packages: $PACKAGES"
pnpm up -L $PACKAGES
else
echo "No deployAlwaysUpdate packages found in package.json"
fi
else
echo "package.json not found"
fi
Comment on lines +55 to +67
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Harden the deployAlwaysUpdate step (quoting, safer test, fail-fast).

Quote PACKAGES, prefer [ -n ... ], add -- before args, and enable strict shell flags to avoid subtle CI breakages.

-      - name: Update deployAlwaysUpdate packages
-        run: |
-          if [ -f package.json ]; then
-            PACKAGES=$(node -e "const pkg = require('./package.json'); if (pkg.deployAlwaysUpdate) console.log(pkg.deployAlwaysUpdate.join(' '))")
-            if [ ! -z "$PACKAGES" ]; then
-              echo "Updating packages: $PACKAGES"
-              pnpm up -L $PACKAGES
-            else
-              echo "No deployAlwaysUpdate packages found in package.json"
-            fi
-          else
-            echo "package.json not found"
-          fi
+      - name: Update deployAlwaysUpdate packages
+        run: |
+          set -euo pipefail
+          if [ -f package.json ]; then
+            PACKAGES="$(node -e "const pkg = require('./package.json'); if (pkg.deployAlwaysUpdate) console.log(pkg.deployAlwaysUpdate.join(' '))")"
+            if [ -n "$PACKAGES" ]; then
+              echo "Updating packages: $PACKAGES"
+              pnpm up -L -- $PACKAGES
+            else
+              echo "No deployAlwaysUpdate packages found in package.json"
+            fi
+          else
+            echo "package.json not found"
+          fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Update deployAlwaysUpdate packages
run: |
if [ -f package.json ]; then
PACKAGES=$(node -e "const pkg = require('./package.json'); if (pkg.deployAlwaysUpdate) console.log(pkg.deployAlwaysUpdate.join(' '))")
if [ ! -z "$PACKAGES" ]; then
echo "Updating packages: $PACKAGES"
pnpm up -L $PACKAGES
else
echo "No deployAlwaysUpdate packages found in package.json"
fi
else
echo "package.json not found"
fi
- name: Update deployAlwaysUpdate packages
run: |
set -euo pipefail
if [ -f package.json ]; then
PACKAGES="$(node -e "const pkg = require('./package.json'); if (pkg.deployAlwaysUpdate) console.log(pkg.deployAlwaysUpdate.join(' '))")"
if [ -n "$PACKAGES" ]; then
echo "Updating packages: $PACKAGES"
pnpm up -L -- $PACKAGES
else
echo "No deployAlwaysUpdate packages found in package.json"
fi
else
echo "package.json not found"
fi
🤖 Prompt for AI Agents
.github/workflows/preview.yml around lines 55 to 67: the deployAlwaysUpdate step
is fragile — PACKAGES is unquoted, the test uses [ ! -z ... ], arguments to pnpm
can be misinterpreted, and the shell lacks strict flags; update the step to
enable strict mode (set -euo pipefail), quote variable expansions ("$PACKAGES"),
use [ -n "$PACKAGES" ] for the non-empty check, pass `--` before $PACKAGES to
pnpm (pnpm up -L -- "$PACKAGES") so package names aren't treated as options, and
ensure the script fails fast on errors so the CI stops on failure.

- name: Install Global Dependencies
run: pnpm add -g vercel
- name: Pull Vercel Environment Information
Expand All @@ -61,6 +74,8 @@ jobs:
echo "{\"latestTag\": \"$(git rev-parse --short ${{ github.event.pull_request.head.sha }})\", \"isCommit\": true}" > assets/release.json
- name: Build Project Artifacts
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
env:
CONFIG_JSON_SOURCE: BUNDLED
- run: pnpm build-storybook
- name: Copy playground files
run: |
Expand Down
41 changes: 31 additions & 10 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: vercel build --token=${{ secrets.VERCEL_TOKEN }} --prod
env:
CONFIG_JSON_SOURCE: BUNDLED
- run: pnpm build-storybook
- name: Copy playground files
run: |
Expand All @@ -43,24 +45,43 @@ jobs:
with:
run: vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} --prod
id: deploy
# publish to github
- run: cp vercel.json .vercel/output/static/vercel.json
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .vercel/output/static
force_orphan: true

Comment on lines +50 to +55
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Update GH Pages action to v4.
actionlint flags v3 as too old for current runners.

-      - uses: peaceiris/actions-gh-pages@v3
+      - uses: peaceiris/actions-gh-pages@v4
         with:
           github_token: ${{ secrets.GITHUB_TOKEN }}
           publish_dir: .vercel/output/static
           force_orphan: true
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .vercel/output/static
force_orphan: true
- uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .vercel/output/static
force_orphan: true
🧰 Tools
🪛 actionlint (1.7.7)

50-50: the runner of "peaceiris/actions-gh-pages@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🤖 Prompt for AI Agents
In .github/workflows/publish.yml around lines 50 to 55, the workflow uses
peaceiris/actions-gh-pages@v3 which actionlint flags as outdated; update the
action reference to peaceiris/actions-gh-pages@v4 (i.e., change the uses line to
@v4) while preserving the existing inputs (github_token, publish_dir,
force_orphan) and verify there are no breaking input changes in v4; run a local
lint or dry-run CI to ensure the updated action works with current runners.

- name: Build single-file version - minecraft.html
run: pnpm build-single-file && mv dist/single/index.html minecraft.html
- name: Build self-host version
run: pnpm build
- name: Bundle server.js
run: |
pnpm esbuild server.js --bundle --platform=node --outfile=bundled-server.js --define:process.env.NODE_ENV="'production'"

- name: Create zip package
run: |
mkdir -p package
cp -r dist package/
cp bundled-server.js package/server.js
cd package
zip -r ../self-host.zip .

Comment on lines +56 to +71
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Install project deps before local build/package steps.
These steps will fail without pnpm install (the earlier install is commented out).

+      - name: Install dependencies
+        run: pnpm install --frozen-lockfile
+
       - name: Build single-file version - minecraft.html
         run: pnpm build-single-file && mv dist/single/index.html minecraft.html
       - name: Build self-host version
         run: pnpm build

Optional: enable caching for faster runs:

  • add to actions/setup-node: cache: 'pnpm'.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Build single-file version - minecraft.html
run: pnpm build-single-file && mv dist/single/index.html minecraft.html
- name: Build self-host version
run: pnpm build
- name: Bundle server.js
run: |
pnpm esbuild server.js --bundle --platform=node --outfile=bundled-server.js --define:process.env.NODE_ENV="'production'"
- name: Create zip package
run: |
mkdir -p package
cp -r dist package/
cp bundled-server.js package/server.js
cd package
zip -r ../self-host.zip .
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build single-file version - minecraft.html
run: pnpm build-single-file && mv dist/single/index.html minecraft.html
- name: Build self-host version
run: pnpm build
- name: Bundle server.js
run: |
pnpm esbuild server.js --bundle --platform=node --outfile=bundled-server.js --define:process.env.NODE_ENV="'production'"
- name: Create zip package
run: |
mkdir -p package
cp -r dist package/
cp bundled-server.js package/server.js
cd package
zip -r ../self-host.zip .
🤖 Prompt for AI Agents
In .github/workflows/publish.yml around lines 56 to 71, the workflow runs pnpm
build and other local build/packaging steps without installing dependencies (the
earlier install is commented out), causing these steps to fail; add a step
before the build steps to run pnpm install (preferably pnpm install
--frozen-lockfile) so dependencies are available, and optionally re-enable
caching by configuring actions/setup-node with cache: 'pnpm' to speed up runs.

- run: |
pnpx zardoy-release node --footer "This release URL: ${{ steps.deploy.outputs.stdout }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# has possible output: tag
id: release

# has output
- run: cp vercel.json .vercel/output/static/vercel.json
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .vercel/output/static
force_orphan: true
- name: Set publishing config
run: pnpm config set '//registry.npmjs.org/:_authToken' "${NODE_AUTH_TOKEN}"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: pnpm tsx scripts/buildNpmReact.ts ${{ steps.release.outputs.tag }}
if: steps.release.outputs.tag
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# - run: pnpm tsx scripts/buildNpmReact.ts ${{ steps.release.outputs.tag }}
# if: steps.release.outputs.tag
# env:
# NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ localSettings.mjs
dist*
.DS_Store
.idea/
world
/world
data*.json
out
*.iml
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
**
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

Repo-wide Prettier disable (**) is high risk; restrict to generated/build artifacts.

Disabling formatting everywhere invites style drift and noisy diffs. Ignore only generated/output paths instead.

Apply:

-**
+# Keep source formatted; ignore only generated/build outputs
+node_modules/
+dist/
+build/
+coverage/
+cypress/screenshots/
+cypress/videos/
+package/
+*.zip
+src/generated/
+generated/

If the intent was to prevent formatting of src/generated/resources.ts, the above suffices without turning Prettier off globally.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**
# Keep source formatted; ignore only generated/build outputs
node_modules/
dist/
build/
coverage/
cypress/screenshots/
cypress/videos/
package/
*.zip
src/generated/
generated/
🤖 Prompt for AI Agents
.prettierignore lines 1-1: remove the global '**' entry (which disables Prettier
repo-wide) and instead add only the actual generated/output paths you want
excluded (for example: build/, dist/, node_modules/, .next/, and specific
generated files like src/generated/resources.ts). Update the file to list those
concrete directories/files and do not include a blanket wildcard so formatting
remains enabled for the rest of the repo.

6 changes: 2 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ After forking the repository, run the following commands to get started:
0. Ensure you have [Node.js](https://nodejs.org) installed. Enable corepack with `corepack enable` *(1).
1. Install dependencies: `pnpm i`
2. Start the project in development mode: `pnpm start` or build the project for production: `pnpm build`
3. Read the [Tasks Categories](#tasks-categories) and [Workflow](#workflow) sections below
4. Let us know if you are working on something and be sure to open a PR if you got any changes. Happy coding!

*(1): If you are getting `Cannot find matching keyid` update corepack to the latest version with `npm i -g corepack`.
*(2): If still something doesn't work ensure you have the right nodejs version with `node -v` (tested on 22.x)
Expand Down Expand Up @@ -95,7 +93,7 @@ Also there are [src/generatedClientPackets.ts](src/generatedClientPackets.ts) an
- Use `start-prod` script to start the project in production mode after running the `build` script to build the project.
- If CI is failing on the next branch for some reason, feel free to use the latest commit for release branch. We will update the base branch asap. Please, always make sure to allow maintainers do changes when opening PRs.

## Tasks Categories
## Tasks Categories (from usptream repo. not relevant to Kradle)
Copy link

@coderabbitai coderabbitai bot Aug 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix typos and project reference in section header.

“usptream” → “upstream”; “Kradle” doesn’t match this repo.

Apply:

-## Tasks Categories (from usptream repo. not relevant to Kradle)
+## Tasks Categories (from upstream repo; not specific to this project)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Tasks Categories (from usptream repo. not relevant to Kradle)
## Tasks Categories (from upstream repo; not specific to this project)
🤖 Prompt for AI Agents
In CONTRIBUTING.md around line 96, the section header contains typos and an
incorrect project reference; change “Tasks Categories (from usptream repo. not
relevant to Kradle)” to a corrected header such as “Tasks Categories (from
upstream repo — not relevant to this project)” by fixing “usptream” to
“upstream” and replacing “Kradle” with a neutral reference like “this project”
(or the correct repo name if intended).

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is kradle? How changes in or are prepared for platform?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

@zardoy Based on my analysis of the codebase, Kradle appears to be a platform that integrates and hosts this Minecraft Web Client. Here's what I found:

What is Kradle?

Kradle seems to be a service/platform that:

  1. Hosts the Minecraft Web Client in iframes - The code includes extensive iframe communication between the minecraft-web-client and "kradle frontend"

  2. Provides proxy services - The config shows defaultProxy: "https://mcproxy.kradle.ai"

  3. Offers enhanced multiplayer features - Including custom agent skins, follow functionality, and real-time status reporting

How changes are prepared for Kradle platform:

1. Bi-directional Communication (src/iframe.ts)

  • Listens for messages from kradle frontend
  • Sends status updates back to Kradle:
    • Game loaded status
    • Connection status
    • Replay status from boss bar packets
    • Following player updates

2. Custom Kradle Events

The platform supports these custom commands:

  • kradle:command - Execute bot commands
  • kradle:followPlayer - Follow specific players
  • kradle:reconnect - Reconnect functionality
  • kradle:setAgentSkins - Custom agent skin management
  • kradle:setVolume / kradle:setMusic - Audio controls

3. Platform-specific Features

  • Agent skin mapping (window.agentSkinMap) for custom player skins
  • Connection status reporting with detailed error handling
  • Replay monitoring that parses boss bar data for replay progress
  • Follow system integrated with Kradle's user management

4. Deployment Integration

  • Uses environment variables for configuration
  • Supports both bundled and remote config loading
  • Custom build processes for Kradle-specific deployments

The extensive integration suggests Kradle is likely a multiplayer Minecraft platform that uses this web client as its game engine, similar to how platforms like Hypixel or Mineplex might integrate game clients, but built specifically for web-based Minecraft experiences.


🌐 Web query:

Kradle platform Minecraft web client

💡 Result:

Kradle is an AI platform that uses Minecraft as its environment: challenges are hosted on Kradle and runs spawn instances in Minecraft where participants (agents) are controlled by your code. Agents receive JSON observations (game events) and return actions (JavaScript code, often using Mineflayer skills). Kradle provides docs, a Python SDK helper, a skills/examples repo, and tools for creating/chaining challenges and agent modes. Key points:

  • Environment: Minecraft-based challenges (hosted by Kradle). [1]
  • Control loop: Kradle POSTs observations to your agent’s web endpoints (/init and /event); your agent responds with actions (JS code). [2]
  • Tooling: SDKs, a skills library (Mineflayer-based) and example commands on GitHub; advanced features and agent modes documented. [3]
  • Legal/usage: platform terms and restrictions (accounts, acceptable use). [4]

If you want, I can:

  • show the API observation/action JSON examples,
  • link the GitHub examples and SDK,
  • or walk through a minimal agent that responds to an observation.

Sources: [1] Kradle “What’s Kradle?” docs, [2] Kradle “How Kradle works” docs, [3] Kradle “Advanced features” (skills/examples), [4] Kradle terms of use.


🌐 Web query:

kradle.ai Minecraft platform

💡 Result:

Kradle.ai is a platform that runs open-ended, interactive AI “evals” inside Minecraft so developers can build and test agents in multiplayer, dynamic challenges. Key points:

  • Purpose: crowd-sourced, interactive, multi‑agent evaluations (not static datasets) to benchmark and stress‑test adaptive agent behavior. [1]
  • Environment: uses Minecraft worlds (survival/creative, PvP/PvE, multi‑role, custom rules) so tasks can range from simple resource collection to complex multi‑agent coordination. [1]
  • API/agent model: agents run as web services (init and event POST endpoints). Kradle sends JSON observations (state, chat, events) and accepts actions as JavaScript (Mineflayer-based) or via SDKs (Python helper). [2]
  • Features: skills library (prebuilt actions), agent modes (self_preservation, unstuck, etc.), challenge creation and hosted runs. Example commands and examples are on their GitHub. [3]

Sources: Kradle docs and site. [1][2][3]


@zardoy Thank you for the clarification! I now have a much clearer understanding of what Kradle actually is. Let me correct my previous response:

What is Kradle?

Kradle is an AI platform that uses Minecraft as its environment for running interactive AI agent evaluations and challenges. Specifically:

  1. AI Evaluation Platform - Kradle hosts open-ended, interactive AI "evals" inside Minecraft to benchmark and test adaptive agent behavior

  2. Agent-Controlled Environment - AI agents run as web services that receive JSON observations (game events, state, chat) from Kradle and respond with actions (JavaScript code, often using Mineflayer skills)

  3. Multi-Agent Challenges - Supports complex scenarios from simple resource collection to multi-agent coordination, PvP/PvE, and custom rule sets

How changes are prepared for the Kradle platform:

Now the extensive integration in the codebase makes perfect sense:

1. Agent Control Interface

  • The iframe communication handles AI agent observations and actions
  • Status reporting provides real-time agent monitoring for evaluations
  • Custom events (kradle:command, kradle:followPlayer, etc.) are programmatic agent controls

2. Evaluation Infrastructure

  • Agent skin mapping for identifying different AI agents in challenges
  • Follow system for agent coordination and monitoring
  • Replay functionality for recording and analyzing agent behavior
  • Connection status reporting for robust agent session management

3. Challenge Environment

  • The web client serves as the visual interface for Minecraft-based AI challenges
  • Custom proxy (mcproxy.kradle.ai) handles agent connections
  • Boss bar integration for challenge progress tracking

So this Minecraft Web Client is essentially the game engine interface that Kradle uses to run its AI agent evaluations in Minecraft worlds. The extensive integration features I identified earlier are all about enabling programmatic control and monitoring of AI agents rather than human players!


🔥 Failed to add learnings

Learnings cannot be added due to server error. Please try again.


(most important for now are on top).

Expand Down Expand Up @@ -166,7 +164,7 @@ Most of the tasks are straightforward to implement, just be sure to use a debugg

New React components, improve UI (including mobile support).

## Workflow
## Workflow (from usptream repo. not relevant to Kradle)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix typos and project reference in section header.

Same issue as above.

Apply:

-## Workflow (from usptream repo. not relevant to Kradle)
+## Workflow (from upstream repo; not specific to this project)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Workflow (from usptream repo. not relevant to Kradle)
## Workflow (from upstream repo; not specific to this project)
🤖 Prompt for AI Agents
In CONTRIBUTING.md around line 167, the section header contains typos and an
incorrect project reference; change "usptream" to "upstream" and reword the
parenthetical to be clear and grammatically correct (for example: "Workflow
(from upstream repo; not relevant to Kradle)"). Ensure spelling and punctuation
are fixed and that "Kradle" is referenced exactly as intended.


1. Locate the problem on the public test server & make an easily reproducible environment (you can also use local packets replay server or your custom server setup). Dm me for details on public test server / replay server
2. Debug the code, find an issue in the code, isolate the problem
Expand Down
5 changes: 3 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ RUN npm i -g [email protected]
# Build arguments
ARG DOWNLOAD_SOUNDS=false
ARG DISABLE_SERVICE_WORKER=false
ARG CONFIG_JSON_SOURCE=REMOTE
# TODO need flat --no-root-optional
RUN node ./scripts/dockerPrepare.mjs
RUN pnpm i
Expand All @@ -22,8 +23,8 @@ RUN if [ "$DOWNLOAD_SOUNDS" = "true" ] ; then node scripts/downloadSoundsMap.mjs
# ENTRYPOINT ["pnpm", "run", "run-all"]

# only for prod
RUN GITHUB_REPOSITORY=zardoy/minecraft-web-client \
DISABLE_SERVICE_WORKER=$DISABLE_SERVICE_WORKER \
RUN DISABLE_SERVICE_WORKER=$DISABLE_SERVICE_WORKER \
CONFIG_JSON_SOURCE=$CONFIG_JSON_SOURCE \
pnpm run build

# ---- Run Stage ----
Expand Down
21 changes: 21 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
REGION=us-central1
PROJECT_ID=mckradle-3c267
DOCKER_URL=${REGION}-docker.pkg.dev/${PROJECT_ID}/${env}-arenas/web-viewer-client
IMAGE_TAG=${DOCKER_URL}:$(shell git rev-parse --short HEAD)
SERVICE_NAME=web-proxy

ifndef env
override env = dev
endif

docker/login:
gcloud auth configure-docker ${REGION}-docker.pkg.dev

Comment on lines +11 to +13
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Set gcloud project before configuring Artifact Registry auth

Avoids accidentally using a wrong active project.

 docker/login:
-	gcloud auth configure-docker ${REGION}-docker.pkg.dev
+	gcloud config set project ${PROJECT_ID}
+	gcloud auth configure-docker ${REGION}-docker.pkg.dev
🤖 Prompt for AI Agents
In Makefile around lines 11 to 13, the docker/login target calls gcloud auth
configure-docker without first setting the gcloud project; update the target to
first set the desired project (e.g. run gcloud config set project ${PROJECT} or
${GCLOUD_PROJECT}, validating the variable is defined) and then call gcloud auth
configure-docker ${REGION}-docker.pkg.dev so Artifact Registry auth is
configured against the correct project.

docker/build:
docker buildx build --platform linux/amd64,linux/arm64 . -f Dockerfile --load -t ${IMAGE_TAG}

Comment on lines +14 to +16
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix: buildx cannot combine --platform (multi-arch) with --load

Use --push for multi-arch builds, or split a local single-arch target with --load.

Apply:

 docker/build:
-	docker buildx build --platform linux/amd64,linux/arm64 . -f Dockerfile --load -t ${IMAGE_TAG}
+	docker buildx build -f Dockerfile --platform linux/amd64,linux/arm64 -t ${IMAGE_TAG} --push .

Optionally add a local target:

+docker/build-local:
+	docker buildx build -f Dockerfile --platform linux/amd64 -t ${IMAGE_TAG} --load .
🤖 Prompt for AI Agents
In Makefile around lines 14-16, the docker/build target uses buildx with
--platform and --load together which fails; update the Makefile to either (A)
use --push instead of --load for multi-arch builds (docker/build: docker buildx
build --platform linux/amd64,linux/arm64 . -f Dockerfile --push -t ${IMAGE_TAG})
or (B) split into two targets: a multi-arch target that uses --push and a local
single-arch target (e.g., docker/build-local) that uses a single --platform
value (like linux/amd64) with --load for local testing. Ensure tags and buildx
builder context are preserved and document which target to use.

docker/push:
docker push ${IMAGE_TAG}

deploy:
gcloud run deploy ${SERVICE_NAME} --image ${IMAGE_TAG} --region ${REGION}
73 changes: 70 additions & 3 deletions README.MD
Original file line number Diff line number Diff line change
@@ -1,6 +1,70 @@
# Minecraft Web Client

![banner](./docs-assets/banner.jpg)
This is a browser implementation of Minecraft we embed inside the Kradle frontend to view session. This repo contains 2 parts -

## First: A Web Client

The web client is [deployed to Vercel](https://vercel.com/kradle-f5bad6db/minecraft-web-client) and is accessible at https://mcraft.kradle.ai. The Kradle frontend at https://app.kradle.ai uses an `<iframe>` to embed the viewer. We make use of query parameters to provide the server details to autoconnect.

## Second: A Websocket Proxy

Your browser can't connect and communicate directly with a minecraft java server. For this reason, we use a proxy server that can translate those packets into websocket messages, and the other way around.

The proxy is deployed on [GCP Cloud Run](https://console.cloud.google.com/run/detail/us-central1/web-proxy/metrics?project=mckradle-3c267) and is accessible at https://mcproxy.kradle.ai (You can check it's working by adding `/config.json` to the URL)

A proxy instance is stateless and is also not linked to a single client or a to a single minecraft server. A single instance of the proxy is actually capable of multiplexing multiple clients to multiple minecraft servers.

This means the proxy is quite efficient, and when needed, it can easily scale horizontally based on the sessions being viewed (using gcloud run's autoscaling)

## Local development

It's recommended to clone this repo into a folder called `minecraft-web-client` and place it alongside the [`frontend` repo](https://github.com/kradle-ai/frontend). The frontend repo will automatically use it when you run `npm run dev` there.

### `tl;dr`
0. Ensure you have [Node.js](https://nodejs.org) installed. Enable corepack with `corepack enable` *(1).
1. Install dependencies: `pnpm i`
2. Start the project in development mode: `pnpm start` or build the project for production: `pnpm build`

See [CONTRIBUTING](CONTRIBUTING.md) for a breakdown of the repo and troubleshooting tips on getting it setup (it's mostly copied as-is from the upstream repo).


## Deploy
**Web Client**

Vercel automatically deploys the `next` branch to production.

**Proxy**

You most likely won't need to make any changes to the proxy, and so you don't need to deploy it.

In the rare occasion you do, here's how.

0. Make sure your `gcloud` CLI locally is configured to use the gcloud `dev` environment. You'll need permissions to push a docker image to GCR.
1. (only needed first time) Run `make docker/login`
2. Run `make docker/build`
3. Run `make docker/push`
* (if you run into issues, try `gcloud auth login` and `make docker/login`)
4. Run `make deploy`


> TODO: We could setup Google Cloud Run continuous deployments to automatically deploy the `next` branch - but we should try not to rebuild on every commit since the proxy doesn't change often.


## Notes
This repo was cloned and we made some minimal changes needed for a great iframe spectator experience (such as disabling chat and command access, inventory access, a simpler pause menu, making nightime more visible, etc.)

There's still a ton of code bloat here that's not relevant. For example
* Loading zip world files
* Single player and P2P modes (which uses memfs, peerjs, and other bloat)
* Use of local storage (this iframe should be mostly stateless to prevent potential discrepencies as we make changes)
* Unused Github workflows
* etc.
Comment on lines +3 to +61
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix typos/grammar in public README and address markdownlint issues.

User-facing docs—apply corrections and use Markdown links to satisfy MD034.

-This is a browser implementation of Minecraft we embed inside the Kradle  frontend to view session. This repo contains 2 parts -
+This is a browser implementation of Minecraft that we embed inside the Kradle frontend to view sessions. This repo contains two parts:
@@
-The web client is [deployed to Vercel](https://vercel.com/kradle-f5bad6db/minecraft-web-client) and is accessible at https://mcraft.kradle.ai. The Kradle frontend at https://app.kradle.ai uses an `<iframe>` to embed the viewer. We make use of query parameters to provide the server details to autoconnect.
+The web client is [deployed to Vercel](https://vercel.com/kradle-f5bad6db/minecraft-web-client) and is accessible at <https://mcraft.kradle.ai>. The Kradle frontend at <https://app.kradle.ai> uses an `<iframe>` to embed the viewer. We use query parameters to provide the server details to auto‑connect.
@@
-Your browser can't connect and communicate directly with a minecraft java server. For this reason, we use a proxy server that can translate those packets into websocket messages, and the other way around.
+Your browser can't directly connect to a Minecraft Java server. For this reason, we use a proxy server that translates those packets into WebSocket messages, and the other way around.
@@
-It's recommended to clone this repo into a folder called `minecraft-web-client` and place it alongside the [`frontend` repo](https://github.com/kradle-ai/frontend). The frontend repo will automatically use it when you run `npm run dev` there.
+It's recommended to clone this repo into a folder called `minecraft-web-client` and place it alongside the [`frontend` repo](https://github.com/kradle-ai/frontend). The frontend repo will automatically use it when you run `npm run dev` there.
@@
-See [CONTRIBUTING](CONTRIBUTING.md) for a breakdown of the repo and troubleshooting tips on getting it setup (it's mostly copied as-is from the upstream repo).
+See [CONTRIBUTING](CONTRIBUTING.md) for a breakdown of the repo and troubleshooting tips on getting it set up (it's mostly copied as‑is from the upstream repo).
@@
-> TODO: We could setup Google Cloud Run continuous deployments to automatically deploy the `next` branch - but we should try not to rebuild on every commit since the proxy doesn't change often.
+> TODO: We could set up Google Cloud Run continuous deployments to automatically deploy the `next` branch—but we should try not to rebuild on every commit since the proxy doesn't change often.
@@
-This repo was cloned and we made some minimal changes needed for a great iframe spectator experience (such as disabling chat and command access, inventory access, a simpler pause menu, making nightime more visible, etc.)
+This repo was cloned and we made some minimal changes needed for a great iframe spectator experience (such as disabling chat and command access, inventory access, a simpler pause menu, making nighttime more visible, etc.).
@@
-* Use of local storage (this iframe should be mostly stateless to prevent potential discrepencies as we make changes)
+* Use of local storage (this iframe should be mostly stateless to prevent potential discrepancies as we make changes)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This is a browser implementation of Minecraft we embed inside the Kradle frontend to view session. This repo contains 2 parts -
## First: A Web Client
The web client is [deployed to Vercel](https://vercel.com/kradle-f5bad6db/minecraft-web-client) and is accessible at https://mcraft.kradle.ai. The Kradle frontend at https://app.kradle.ai uses an `<iframe>` to embed the viewer. We make use of query parameters to provide the server details to autoconnect.
## Second: A Websocket Proxy
Your browser can't connect and communicate directly with a minecraft java server. For this reason, we use a proxy server that can translate those packets into websocket messages, and the other way around.
The proxy is deployed on [GCP Cloud Run](https://console.cloud.google.com/run/detail/us-central1/web-proxy/metrics?project=mckradle-3c267) and is accessible at https://mcproxy.kradle.ai (You can check it's working by adding `/config.json` to the URL)
A proxy instance is stateless and is also not linked to a single client or a to a single minecraft server. A single instance of the proxy is actually capable of multiplexing multiple clients to multiple minecraft servers.
This means the proxy is quite efficient, and when needed, it can easily scale horizontally based on the sessions being viewed (using gcloud run's autoscaling)
## Local development
It's recommended to clone this repo into a folder called `minecraft-web-client` and place it alongside the [`frontend` repo](https://github.com/kradle-ai/frontend). The frontend repo will automatically use it when you run `npm run dev` there.
### `tl;dr`
0. Ensure you have [Node.js](https://nodejs.org) installed. Enable corepack with `corepack enable` *(1).
1. Install dependencies: `pnpm i`
2. Start the project in development mode: `pnpm start` or build the project for production: `pnpm build`
See [CONTRIBUTING](CONTRIBUTING.md) for a breakdown of the repo and troubleshooting tips on getting it setup (it's mostly copied as-is from the upstream repo).
## Deploy
**Web Client**
Vercel automatically deploys the `next` branch to production.
**Proxy**
You most likely won't need to make any changes to the proxy, and so you don't need to deploy it.
In the rare occasion you do, here's how.
0. Make sure your `gcloud` CLI locally is configured to use the gcloud `dev` environment. You'll need permissions to push a docker image to GCR.
1. (only needed first time) Run `make docker/login`
2. Run `make docker/build`
3. Run `make docker/push`
* (if you run into issues, try `gcloud auth login` and `make docker/login`)
4. Run `make deploy`
> TODO: We could setup Google Cloud Run continuous deployments to automatically deploy the `next` branch - but we should try not to rebuild on every commit since the proxy doesn't change often.
## Notes
This repo was cloned and we made some minimal changes needed for a great iframe spectator experience (such as disabling chat and command access, inventory access, a simpler pause menu, making nightime more visible, etc.)
There's still a ton of code bloat here that's not relevant. For example
* Loading zip world files
* Single player and P2P modes (which uses memfs, peerjs, and other bloat)
* Use of local storage (this iframe should be mostly stateless to prevent potential discrepencies as we make changes)
* Unused Github workflows
* etc.
This is a browser implementation of Minecraft that we embed inside the Kradle frontend to view sessions. This repo contains two parts:
## First: A Web Client
The web client is [deployed to Vercel](https://vercel.com/kradle-f5bad6db/minecraft-web-client) and is accessible at <https://mcraft.kradle.ai>. The Kradle frontend at <https://app.kradle.ai> uses an `<iframe>` to embed the viewer. We use query parameters to provide the server details to auto-connect.
## Second: A Websocket Proxy
Your browser can't directly connect to a Minecraft Java server. For this reason, we use a proxy server that translates those packets into WebSocket messages, and the other way around.
## Local development
It's recommended to clone this repo into a folder called `minecraft-web-client` and place it alongside the [`frontend` repo](https://github.com/kradle-ai/frontend). The frontend repo will automatically use it when you run `npm run dev` there.
### `tl;dr`
0. Ensure you have [Node.js](https://nodejs.org) installed. Enable corepack with `corepack enable` *(1).
1. Install dependencies: `pnpm i`
2. Start the project in development mode: `pnpm start` or build the project for production: `pnpm build`
See [CONTRIBUTING](CONTRIBUTING.md) for a breakdown of the repo and troubleshooting tips on getting it set up (it's mostly copied as-is from the upstream repo).
## Deploy
**Web Client**
Vercel automatically deploys the `next` branch to production.
**Proxy**
You most likely won't need to make any changes to the proxy, and so you don't need to deploy it.
In the rare occasion you do, here's how.
0. Make sure your `gcloud` CLI locally is configured to use the gcloud `dev` environment. You'll need permissions to push a docker image to GCR.
1. (only needed first time) Run `make docker/login`
2. Run `make docker/build`
3. Run `make docker/push`
* (if you run into issues, try `gcloud auth login` and `make docker/login`)
4. Run `make deploy`
> TODO: We could set up Google Cloud Run continuous deployments to automatically deploy the `next` branch—but we should try not to rebuild on every commit since the proxy doesn't change often.
## Notes
This repo was cloned and we made some minimal changes needed for a great iframe spectator experience (such as disabling chat and command access, inventory access, a simpler pause menu, making nighttime more visible, etc.).
There's still a ton of code bloat here that's not relevant. For example
* Loading zip world files
* Single player and P2P modes (which uses memfs, peerjs, and other bloat)
* Use of local storage (this iframe should be mostly stateless to prevent potential discrepancies as we make changes)
* Unused Github workflows
* etc.
🧰 Tools
🪛 LanguageTool

[grammar] ~25-~25: There might be a mistake here.
Context: ... enable*(1). 1. Install dependencies:pnpm i2. Start the project in development mode:...

(QB_NEW_EN)


[grammar] ~31-~31: There might be a mistake here.
Context: ...-is from the upstream repo). ## Deploy Web Client Vercel automatically depl...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...rmissions to push a docker image to GCR. 1. (only needed first time) Run `make docke...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...to push a docker image to GCR. 1. (only needed first time) Run make docker/login 2. ...

(QB_NEW_EN)


[grammar] ~53-~53: There might be a mistake here.
Context: ...e proxy doesn't change often. ## Notes This repo was cloned and we made some mi...

(QB_NEW_EN)


[grammar] ~54-~54: Ensure spelling is correct
Context: ...ry access, a simpler pause menu, making nightime more visible, etc.) There's still a to...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~57-~57: There might be a mistake here.
Context: ...t. For example * Loading zip world files * Single player and P2P modes (which uses memfs,...

(QB_NEW_EN)


[grammar] ~58-~58: There might be a mistake here.
Context: ...ich uses memfs, peerjs, and other bloat) * Use of local storage (this iframe should...

(QB_NEW_EN)


[grammar] ~59-~59: There might be a mistake here.
Context: ...ential discrepencies as we make changes) * Unused Github workflows * etc. --- #...

(QB_NEW_EN)


[grammar] ~60-~60: There might be a mistake here.
Context: ... make changes) * Unused Github workflows * etc. --- # Original docs from the [u...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)

7-7: Bare URL used

(MD034, no-bare-urls)


7-7: Bare URL used

(MD034, no-bare-urls)


13-13: Bare URL used

(MD034, no-bare-urls)


36-36: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🤖 Prompt for AI Agents
README.MD lines 3-61: fix typos/grammar and MD034 bare-URL issues; replace all
bare URLs with Markdown link text (e.g., "Vercel" or "mcproxy.kradle.ai" linked
to the URL), correct "it's" → "its" where possessive is meant, fix spelling
errors ("nightime" → "nighttime", "discrepencies" → "discrepancies"), hyphenate
compound adjectives ("single-player"), normalize product names/casing (e.g.,
"gcloud run" → "Cloud Run" or "gcloud CLI" consistently), remove extra spaces
before parentheses/commas, make command and file references consistent and
monospaced style in docs, and run a markdownlint pass to ensure MD034 and other
style rules are satisfied.




---

# Original docs from the [upstream repo](https://github.com/zardoy/minecraft-web-client)

Minecraft **clone** rewritten in TypeScript using the best modern web technologies. Minecraft vanilla-compatible client and integrated server packaged into a single web app.

Expand All @@ -14,15 +78,17 @@ For building the project yourself / contributing, see [Development, Debugging &

- Open any zip world file or even folder in read-write mode!
- Connect to Java servers running in both offline (cracked) and online mode* (it's possible because of proxy servers, see below)
- Integrated JS server capable of opening Java world saves in any way (folders, zip, web streaming, etc)
- Integrated JS server clone capable of opening Java world saves in any way (folders, zip, web chunks streaming, etc)
- Singleplayer mode with simple world generations!
- Works offline
- First-class touch (mobile) & controller support
- First-class keybindings configuration
- Advanced Resource pack support: Custom GUI, all textures. Server resource packs are supported with proper CORS configuration.
- Builtin JEI with recipes & descriptions for every item (JEI is creative inventory replacement)
- Builtin JEI with recipes & descriptions for almost every item (JEI is creative inventory replacement)
- Custom protocol channel extensions (eg for custom block models in the world)
- Play with friends over internet! (P2P is powered by Peer.js discovery servers)
- ~~Google Drive support for reading / saving worlds back to the cloud~~
- Support for custom rendering 3D engines. Modular architecture.
- even even more!

All components that are in [Storybook](https://mcraft.fun/storybook) are published as npm module and can be used in other projects: [`minecraft-react`](https://npmjs.com/minecraft-react)
Expand Down Expand Up @@ -143,6 +209,7 @@ General:

- **`?setting=<setting_name>:<setting_value>`** - Set and lock the setting on load. You can set multiple settings by separating them with `&` e.g. `?setting=autoParkour:true&setting=renderDistance:4`
- `?modal=<modal>` - Open specific modal on page load eg `keybindings`. Very useful on UI changes testing during dev. For path use `,` as separator. To get currently opened modal type this in the console: `activeModalStack.at(-1).reactType`
- `?replayFileUrl=<url>` - Load and start a packet replay session from a URL with a integrated server. For debugging / previewing recorded sessions. The file must be CORS enabled.

Server specific:

Expand Down
Binary file modified assets/loading-bg.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions assets/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Prismarine Web Client",
"short_name": "Prismarine Web Client",
"name": "Minecraft Web Client",
"short_name": "Minecraft Web Client",
"scope": "./",
"start_url": "./",
"icons": [
Expand Down
Loading