# Changelog

Here you can discover the latest changes to the API.

### 23rd October 2026
- Added the `@plugins/dialogue` plugin, whose `sayDialogue` shows a player a line for a while, 6 seconds by default, and `clearDialogue` hides it early. See the [dialogue how-to](https://bloxd.io/docs/how-to-dialogue.md) for examples.
- The new [Dialogue Voices](https://bloxd.io/docs/dialogue-voices.md) page lists every voice preset and explains how to build a custom `SpeechSynth`. Its dialogue editor lets you start from a preset, tune the voice, type a line to hear it read out, and copy the code.
- Each docs page can now be copied as Markdown, or opened in ChatGPT or Claude to ask about it, from the buttons in its header. AI tools can also read every page as Markdown at `/docs/<page>.md`, with an index of them all at [bloxd.io/llms.txt](https://bloxd.io/llms.txt).

### 22nd October 2026
- The docs have a new home at [bloxd.io/docs](https://bloxd.io/docs), with a page for every reference, setting list, How-To and asset list, in light and dark themes and laid out for phones too.
- New pages: [Getting started](https://bloxd.io/docs/getting-started.md) explains code blocks, boards and World Code, [Snippets](https://bloxd.io/docs/snippets.md) collects short examples to copy, and [Types](https://bloxd.io/docs/types), on the site, explains every type the reference mentions.
- Press Ctrl K, or ⌘ K on a Mac, to search every method, callback, setting, guide and asset name, landing right on it.
- Methods, callbacks and settings are cards you can filter and copy from. Hover a type in a signature to see what it is, and each card links to the guides that use it and the changelog entries that mention it. Deprecated methods are marked.
- Asset pages show what each name looks like or sounds like: particle effects play live, sounds and songs play in a player with a scrubber and volume, NPC skins and poses are shown as the game draws them, and blocks and items show their textures.
- The [Icons](https://bloxd.io/docs/icons.md) page has a `CustomTextStyling` editor: add parts from a list, edit their styles and icons, and copy the code.
- Every QTE can be played on the [QTEs](https://bloxd.io/docs/qte.md) page, with its sensible defaults.
- Added the [`dialogue`](https://bloxd.io/docs/client-options/1.md#dialogue) client option! Set it to show a player a line of dialogue below the crosshair, revealed word by word in a voice, with the speaker's name above it, e.g. `api.setClientOption(playerId, "dialogue", { line: "Welcome!", speakerName: "Guide", voice: "regular" })`. Set it to `null` to hide the line.
  - `voice` takes a preset, `"soft"`, `"regular"`, `"dark"`, `"high-pitched"`, `"gruff"`, `"lively"`, `"posh"` or `"mechanical"`, or a `SpeechSynth` that sets every parameter. Leave it out for a silent line.
  - `[[Item Name]]` in a line shows that item's icon inline.

### 16th October 2026
- The damage callbacks ([`onPlayerDamagingOtherPlayer`](https://bloxd.io/docs/callbacks/2.md#onPlayerDamagingOtherPlayer), [`onPlayerDamagingMob`](https://bloxd.io/docs/callbacks/2.md#onPlayerDamagingMob), [`onMobDamagingPlayer`](https://bloxd.io/docs/callbacks/1.md#onMobDamagingPlayer), [`onMobDamagingOtherMob`](https://bloxd.io/docs/callbacks/1.md#onMobDamagingOtherMob)) now receive a last `damageInfo` argument whose `cause` says what dealt the hit: `"Melee"`, `"Projectile"`, `"Gun"`, `"Explosion"`, `"Spikes"`, `"Fall"`, `"Stomp"`, `"Thorns"` or `"Effect"`, or `null` when unknown. Use it to tell a swing of a held item from that item going off, e.g. a punch with a Mining Grenade in hand from a Mining Grenade's blast.
- [`api.attemptApplyDamage`](https://bloxd.io/docs/api-reference/1.md#attemptApplyDamage) takes an optional `damageCause`, passed on to those callbacks.

### 30th September 2026
- `interactable` now gives mobs the same interaction priority as mesh entities: `onPlayerAltAction` runs before held-item actions. Native harvesting, mounting and pet actions are disabled while the setting is true; leave it false for ordinary mob behaviour.

### 29th September 2026
- Added project schematics to World Code! Use the `+` beside "Schematics" in the Code Editor to upload a `.bloxdschem` file or choose a snapshot from your profile. Projects support up to five schematics.
- Added [`api.setChunkAsSchematic`](https://bloxd.io/docs/api-reference/4.md#setChunkAsSchematic) to replace one complete chunk, including air and block data. Positions are block coordinates selecting their containing chunks, like `copyChunk`.
- Added [`api.getSchematicDimensions()`](https://bloxd.io/docs/api-reference/3.md#getSchematicDimensions) to read a schematic's stored `[x, y, z]` dimensions, including selection padding.
- `@plugins/sessionBasedGame` maps and lobbies now accept `source: { schematic: "maps/arena.bloxdschem" }` as an alternative to a world rectangle. Maps are pasted directly and must fit the available placement and block-data budgets.
- Schematic saved from profiles are **snapshots** - you must update the schematic in the world/custom game if you edit the linked schematic otherwise.
- See the [project schematics how-to](https://bloxd.io/docs/how-to-project-schematics.md) for examples and details.

### 10th September 2026
- Added the `interactable` entity setting. Set it on a mesh entity or a mob (e.g. `api.setTargetedPlayerSettingForEveryone(eId, "interactable", true)`) to make alt actioning it count as an interaction: the alt action is consumed, so a held block isn't placed through the entity and a held throwable isn't used, and `onPlayerAltAction` fires with the entity as the target. Leave it off for decorative entities, or they will swallow player input. It also makes the entity pickable, so an entity can be `interactable` with `canAttack` off: the player's aim lands on it and interacting works, but swinging or shooting at it does nothing. On a mob it applies alongside the usual mounting and taming behaviour rather than replacing it, though there a held throwable or consumable is still used in preference to interacting.
- Entities marked `interactable` now show an interaction prompt by the crosshair while a player is looking at them, showing the key bound to the interact action (`E` by default) so players can tell which input to use. Set the new `interactionPrompt` entity setting to replace the label beside that key, e.g. `api.setTargetedPlayerSettingForEveryone(eId, "interactionPrompt", "Open Shop")`, and leave it off for the default "Interact". It takes plain text or `CustomTextStyling`, and describes what interacting does rather than which button to press, since the engine draws the key itself. Not shown on touchscreens, where a tap needs no prompt.

### 8th September 2026
- Added first-party plugins!
  - You can import helper scripts to help you from `@plugins`
    - E.g. `import { setTimeout } from "@plugins/helpers"`
  - See the [plugins how-to](https://bloxd.io/docs/how-to-plugins.md) for more information.

  - The biggest example of this is **Session-Based Game**, a helper to help you create a game with mini-matches, like Bedwars/Skywars etc.
    - `import { createGame } from "@plugins/sessionBasedGame"` to check it out
    - See the [SessionBasedGame how-to](https://bloxd.io/docs/how-to-building-a-session-based-game.md) for more information.

### 28th August 2026
- Added vehicle spawn callbacks:
    - [`onPlayerAttemptSpawnVehicle`](https://bloxd.io/docs/callbacks/2.md#onPlayerAttemptSpawnVehicle)
    - [`onWorldAttemptSpawnVehicle`](https://bloxd.io/docs/callbacks/3.md#onWorldAttemptSpawnVehicle)
    - [`onPlayerSpawnVehicle`](https://bloxd.io/docs/callbacks/3.md#onPlayerSpawnVehicle)
    - [`onWorldSpawnVehicle`](https://bloxd.io/docs/callbacks/3.md#onWorldSpawnVehicle)
    - [`onVehicleDespawned`](https://bloxd.io/docs/callbacks/3.md#onVehicleDespawned)
- Added [`onEntityDeleted`](https://bloxd.io/docs/callbacks/1.md#onEntityDeleted), called whenever any non-player entity is deleted.

### 27th August 2026
- Added [`api.attemptSpawnVehicle`](https://bloxd.io/docs/api-reference/1.md#attemptSpawnVehicle) to spawn rideable vehicles (boats, karts, cars) which players can mount with an alt action.

### 18th August 2026
- Added TypeScript support to World Code!
  - Rename your file from `index.js` to `index.ts` to use TypeScript files!
  - Import some of our types from `@bloxd`
    - E.g. `import type { PlayerId } from "@bloxd"`
  - Use your own types!
  - Type Checking is supported and errors will show if you use incorrect types.

- Multiple files are supported! Split your code across multiple files for better readability!
  - Create `.js` and `.ts` files
  - Use `import` / `export` syntax to be able to import files across between versions
  - `index.js` or `index.ts` MUST be where your callbacks are stored and cannot be imported anywhere else.
  - `require()` syntax technically works although isn't type-safe.

- Increased total code size from 64k characters to 512k characters.

- Added variations to custom games!
    - Each custom game can now have multiple variations, with `default` being the default variation.
    - [`api.getVariation`](https://bloxd.io/docs/api-reference/3.md#getVariation)
    - [`api.matchmakeToVariation`](https://bloxd.io/docs/api-reference/3.md#matchmakeToVariation)
    - See the [variations doc](https://bloxd.io/docs/how-to-variations.md) for more information.

### 11th August 2026
- Added currency API:
    - [`api.setCurrency`](https://bloxd.io/docs/api-reference/4.md#setCurrency)
    - [`api.getCurrency`](https://bloxd.io/docs/api-reference.md#getCurrency)
    - [`api.deleteCurrency`](https://bloxd.io/docs/api-reference/2.md#deleteCurrency)
    - [`api.getCurrencyAmount`](https://bloxd.io/docs/api-reference/2.md#getCurrencyAmount)
    - [`api.setCurrencyAmount`](https://bloxd.io/docs/api-reference/4.md#setCurrencyAmount)
    - [`api.giveCurrencyAmount`](https://bloxd.io/docs/api-reference/3.md#giveCurrencyAmount)
    - These currencies can be used in the `currency` field in the Shop to automatically deduct currency on purchase.
    - These can also be persisted across sessions.

### 10th August 2026
- Added to the UI Request System:
    - [`api.addUiRequestPopup`](https://bloxd.io/docs/api-reference/1.md#addUiRequestPopup)

### 7th August 2026
- Added UI Request System:
    - [`api.addUiRequest`](https://bloxd.io/docs/api-reference/1.md#addUiRequest)
    - [`api.deleteUiRequest`](https://bloxd.io/docs/api-reference/2.md#deleteUiRequest)
    - [`onUiRequestResponded`](https://bloxd.io/docs/callbacks/3.md#onUiRequestResponded)

### 20th July 2026
- New mob settings:
    - [`runningJumpInfo`](https://bloxd.io/docs/mob-settings.md#runningJumpInfo)
    - [`runningRandomFacingInfo`](https://bloxd.io/docs/mob-settings.md#runningRandomFacingInfo)
    - [`runningSlideInfo`](https://bloxd.io/docs/mob-settings.md#runningSlideInfo)
    - [`walkingJumpInfo`](https://bloxd.io/docs/mob-settings.md#walkingJumpInfo)
    - [`walkingRandomFacingInfo`](https://bloxd.io/docs/mob-settings.md#walkingRandomFacingInfo)
    - [`walkingSlideInfo`](https://bloxd.io/docs/mob-settings.md#walkingSlideInfo)

### 13th July 2026
- Added new [`bridgeInfo`](https://bloxd.io/docs/mob-settings.md#bridgeInfo) mob setting to make mobs build bridges or leave trails, e.g.:
```js
bridgeInfo: {
    blockToPlace: "Bricks",
    mustBeGrounded: false,
    yOffset: -1,
},
```

### 26th June 2026
- Added new client options for custom game UI:
    - [`middleTextTop`](https://bloxd.io/docs/client-options/2.md#middleTextTop)
    - [`headerChips`](https://bloxd.io/docs/client-options/2.md#headerChips)
- Added ProgressBar support to options that accept a CustomTextStyling
    - e.g. `["Loading", { type: "ProgressBar", progress: 0.5 }]`

### 15th June 2026
- Added new client options for adjusting the third person camera:
    - [`cameraRotationOffset`](https://bloxd.io/docs/client-options/1.md#cameraRotationOffset)
    - [`cameraPositionOffset`](https://bloxd.io/docs/client-options/1.md#cameraPositionOffset)

### 11th June 2026
- Added the ability to get and set scale for lifeforms (players, mobs)
    - [`api.getLifeformScale`](https://bloxd.io/docs/api-reference/2.md#getLifeformScale)
    - [`api.setLifeformScale`](https://bloxd.io/docs/api-reference/5.md#setLifeformScale)

- Added new block standing callbacks:
    - This is to prevent having to use `onBlockStand`, which eats into your runtime limit significantly due to its high frequency of being called
    - [`onBlockStandStart`](https://bloxd.io/docs/callbacks/1.md#onBlockStandStart)
    - [`onBlockStandStop`](https://bloxd.io/docs/callbacks/1.md#onBlockStandStop)

- Added `isReceiveDamageCooldownGlobal` [client option](https://bloxd.io/docs/client-options.md#isReceiveDamageCooldownGlobal) and [mob setting](https://bloxd.io/docs/mob-settings.md#isReceiveDamageCooldownGlobal)

### 10th June 2026
- Added [`showChatBubbles`](https://bloxd.io/docs/client-options/2.md#showChatBubbles) client option
- Added [`useRespawnButton`](https://bloxd.io/docs/client-options/2.md#useRespawnButton) client option
- Added [`multilineTextBox`](https://bloxd.io/docs/entity-settings.md#multilineTextBox) entity setting
- Added [`lobbyLeaderboardTags`](https://bloxd.io/docs/entity-settings.md#lobbyLeaderboardTags) entity setting

### 18th May 2026
- Added the ability to change the gamemode of a player
    - [`api.setPlayerGamemode`](https://bloxd.io/docs/api-reference/5.md#setPlayerGamemode)
    - [`api.getPlayerGamemode`](https://bloxd.io/docs/api-reference/3.md#getPlayerGamemode)
- Added the ability to queue text to be displayed in different places on the screen
    - [`api.queueMiddleTextLower`](https://bloxd.io/docs/api-reference/4.md#queueMiddleTextLower)
    - [`api.queueMiddleTextUpper`](https://bloxd.io/docs/api-reference/4.md#queueMiddleTextUpper)
    - [`api.queueCrosshairText`](https://bloxd.io/docs/api-reference/4.md#queueCrosshairText)
    - [`api.getQueuedStatus`](https://bloxd.io/docs/api-reference/3.md#getQueuedStatus)
    - [`api.removeFromQueue`](https://bloxd.io/docs/api-reference/4.md#removeFromQueue)

### 15th May 2026
- Significantly increased runtime limit - interrupts should be less frequent
- Added [`api.isNearInterrupt`](https://bloxd.io/docs/api-reference/3.md#isNearInterrupt)

### 12th May 2026
- Added new client option [`groundArrowPath`](https://bloxd.io/docs/client-options/2.md#groundArrowPath)

### 11th May 2026
- Added Changelog
- Added a bunch of new API Methods:
    - [`api.addCustomKillfeedMessage`](https://bloxd.io/docs/api-reference/1.md#addCustomKillfeedMessage)
    - [`api.deleteAllItems`](https://bloxd.io/docs/api-reference/2.md#deleteAllItems)
    - [`api.findItem`](https://bloxd.io/docs/api-reference/2.md#findItem)
    - [`api.findStandardChestItem`](https://bloxd.io/docs/api-reference/2.md#findStandardChestItem)
    - [`api.getEffectLevel`](https://bloxd.io/docs/api-reference/2.md#getEffectLevel)
    - [`api.getItemDropName`](https://bloxd.io/docs/api-reference/2.md#getItemDropName)
    - [`api.getItemIDsOverlappingWithPlayer`](https://bloxd.io/docs/api-reference/2.md#getItemIDsOverlappingWithPlayer)
    - [`api.getMobDbId`](https://bloxd.io/docs/api-reference/2.md#getMobDbId)
    - [`api.hasEffect`](https://bloxd.io/docs/api-reference/3.md#hasEffect)
    - [`api.preventFallDamageNextGrounding`](https://bloxd.io/docs/api-reference/3.md#preventFallDamageNextGrounding)
    - [`api.removeItemNameFromStandardChest`](https://bloxd.io/docs/api-reference/4.md#removeItemNameFromStandardChest)
    - [`api.resetCanChangeBlock`](https://bloxd.io/docs/api-reference/4.md#resetCanChangeBlock)
    - [`api.resetCanPickUpItem`](https://bloxd.io/docs/api-reference/4.md#resetCanPickUpItem)
    - [`api.setOtherEntitySettingToDefault`](https://bloxd.io/docs/api-reference/5.md#setOtherEntitySettingToDefault)
    - [`api.updateMeshParticleSystems`](https://bloxd.io/docs/api-reference/5.md#updateMeshParticleSystems)

### 7th May 2026
- Added [`api.copyChunk`](https://bloxd.io/docs/api-reference/1.md#copyChunk)
- Added [`onPlayerToggledShopMenu`](https://bloxd.io/docs/callbacks/3.md#onPlayerToggledShopMenu)

### 28th April 2026
- Doubled code block size (16000 -> 32000)
- 'Hide World Code' option renamed to 'Hide Code' and also hides code of Code Blocks
- New [docs page!](https://bloxd.io/docs)

### 23rd April 2026
- Added [`api.matchmakePlayer`](https://bloxd.io/docs/api-reference/3.md#matchmakePlayer)
- Added per-item gun stats in `customAttributes.gunStats`

### 21st April 2026
- Added database methods to write persisted data to be saved between sessions.
- There are two sections of database values:
    - Lobby
        - [`api.getLobbyDBValue`](https://bloxd.io/docs/api-reference.md#getLobbyDBValue)
        - [`api.setLobbyDBValue`](https://bloxd.io/docs/api-reference.md#setLobbyDBValue)
        - [`api.deleteLobbyDBValue`](https://bloxd.io/docs/api-reference.md#deleteLobbyDBValue)
        - [`api.deleteAllLobbyDBValues`](https://bloxd.io/docs/api-reference.md#deleteAllLobbyDBValues)
        - Writes data that is persisted to the *lobby*, whether it's a worlds lobby or a lobby within a custom game
    - Player
        - [`api.getDBValue`](https://bloxd.io/docs/api-reference.md#getDBValue)
        - [`api.setDBValue`](https://bloxd.io/docs/api-reference.md#setDBValue)
        - [`api.deletePlayerDBValue`](https://bloxd.io/docs/api-reference.md#deletePlayerDBValue)
        - [`api.deleteAllPlayerDBValues`](https://bloxd.io/docs/api-reference.md#deleteAllPlayerDBValues)
        - Writes data that is persisted to the player. For custom games, this data persists *between* lobbies

### 16th April 2026
- Added [`api.setItemStat`](https://bloxd.io/docs/api-reference/5.md#setItemStat)

### 11th April 2026
- The Code Editor now supports **collaborative editing**
    - You can now simultaneously code with your other fellow coders at the same time! Hop into a code block or World Code together to simultaneously create the best World or the best Custom Game ever!!

### 7th April 2026
- New Code Editor UI! Syntax Highlighting, Autocomplete, Error Checking, and more!

### 25th March 2026
- Increased world code size from 16000 to 64000 characters

### 24th March 2026
- Added mesh entities!
    - [`api.attemptCreateMeshEntity`](https://bloxd.io/docs/api-reference/1.md#attemptCreateMeshEntity)
    - [`api.updateMeshEntity`](https://bloxd.io/docs/api-reference/5.md#updateMeshEntity)
    - [`api.deleteMeshEntity`](https://bloxd.io/docs/api-reference/2.md#deleteMeshEntity)
- Added throwables!
    - [`api.attemptCreateThrowable`](https://bloxd.io/docs/api-reference/1.md#attemptCreateThrowable)
    - [`api.deleteThrowable`](https://bloxd.io/docs/api-reference/2.md#deleteThrowable)

### 23rd March 2026
- Added the ability to open and close chests for players, going beyond reach distance to open chests from far away
    - [`api.openChestForPlayer`](https://bloxd.io/docs/api-reference/3.md#openChestForPlayer)
    - [`api.closeChestForPlayer`](https://bloxd.io/docs/api-reference/1.md#closeChestForPlayer)

### Previous Changes
- For previous changes, see the [code-api](https://github.com/Bloxdy/code-api) repository or #dev-log in the Bloxd Discord server
