Observed since 20 Oct, 20:53 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Management utilities and headless testing tools for the AethelLib Bedrock framework.
"Built at 3am. Tested in production. Regretted nothing."
AethelLib is a hard-coded shield for people who want to build things that don't crash the server every time a player joins. It's a stable foundation that handles the messy data-cleanup so you don't have to.
I wrote this because I was tired. Tired of Map leaks. Tired of the Database choking the engine at peak load. Tired of Mojang breaking the API every update and watching six months of work become a runtime error.
So I built the last framework I'll ever need for Bedrock. And now it's yours.
Never written a Bedrock addon before? That's fine. Here's all you need to know:
Minecraft Bedrock lets you write JavaScript to control the game server. Events, players, items, economy — all of it. AethelLib is the toolkit that makes that NOT a nightmare.
Before you touch anything, you need:
class is, you're fineOnce you have that? Clone the repo, drop it in your server's behavior_packs folder, and you're docked.
We use the Stable Proxy Pattern.
YOUR CODE → Kernel → Minecraft API
You talk to the Kernel. The Kernel talks to Minecraft. When Minecraft's API changes — and it will, it always does, I've seen things — you only fix the Kernel. Your game logic stays 100% the same.
The boot sequence runs in 3 phases so nothing blows up during startup:
| Phase | File | What happens |
|---|---|---|
| Phase 0 | early.js | Registries only. No heavy deps. No circular imports. |
| Phase 1 | core.js | All services registered into the Kernel. |
| Phase 2 | services.js | Background workers, staggered every 100 ticks to protect TPS. |
Why staggered? Because I learned the hard way what happens when you boot 12 systems simultaneously on server start. The server did not enjoy it. The players did not enjoy it. I did not enjoy it.
Got a custom system? Don't dump it in main.js. I will find you. Dock it so it's globally accessible and doesn't become someone else's circular dependency at 2am.
import { Kernel } from "./core/Kernel.js";
class MyEpicSystem {
constructor() {
this.version = "1.0.0";
}
doCoolStuff() {
/* your logic here */
}
}
// Register it once — Kernel holds the reference forever
Kernel.register("epic", new MyEpicSystem());
// Access it from anywhere in your pack. No imports. No coupling.
const epic = Kernel.get("epic");
epic.doCoolStuff();
⚡︎
Kernel.get()returnsnullif the service doesn't exist. Check for it. I'm not responsible for your null pointer exceptions.
Real commands with auto-complete and namespaces. No more chat-listener hacks that break every update.
import { Kernel } from "./core/Kernel.js";
Kernel.get("commandRegistry").register({
name: "ping",
description: "Check if the heartbeat is alive",
usage: "/ae:ping",
permission: "essentials.basic",
category: "utility",
execute(_data, player, _args) {
player.sendMessage("PONG");
}
});
Commands auto-register into the Ghost Interpreter, which handles parsing, permission checks, and namespacing. You write the logic. The Kernel handles the rest.
You don't want to dock stuff directly in the kernel files? Smart. Follow the Industrial Isolation Protocol:
scripts/plugins/ and create a dedicated folder for your plugin.MyPlugin.js) inside your folder. This handles your imports and registrations — same pattern as main.js but for your stuff only.scripts/plugins/PluginLoader.js.// PluginLoader.js — add your line here
await import("./MyPlugin/MyPlugin.js")
Why bother? Because when AethelLib updates, your plugin survives. Zero merge conflicts in the kernel. Keep the core clean, keep the plugins dirty. ︎∞
These aren't suggestions. They're hard-won lessons written in server crashes and lost player data.
Keep it Tiny — Files over 120 lines get refactored. Or don't. I'm a rule, not your dad. (But seriously — your future self will find you, and he will be exhausted and angry.)
Zero-Bypass — Use the Kernel methods. Going rogue is fun until the engine updates and your clever hack becomes a paperweight. The Kernel exists to absorb that pain. Let it.
Clean Your Trash — Use the sharded DB. Use the cache. If the Watchdog kills the server because your buffers are bloated, I am not helping you. I warned you. It's right here. You're reading it.
The Vibe Check — If it works, it's "Industrial Peak." If it crashes, it's an "Advanced Feature Request." There is no in-between.
Pure Command Supremacy — UI is for the weak. (It's actually because I'm bad at building UIs. But also the commands are cleaner. Both things are true.)
AethelLib: Built so you can actually enjoy modding. While breaking things. While crying a little.
— Wladyslaw18, somewhere at 3am, probably
Developers can run and debug script commands directly from the server console/stdin without joining the game.
Commands are dispatched using /scriptevent ae:test_cmd.
scriptevent ae:test_cmd listwarpscriptevent ae:test_cmd setwarp <name>scriptevent ae:test_cmd warp <name>scriptevent ae:test_cmd delwarp <name>scriptevent ae:test_cmd calc <expression>watch.ps1 runs a background thread to forward host terminal input directly to BDS.[Scripting] [error] to ensure they bypass watcher output filters.Licensed under AGPL v3.0 with a special exception: you may link AethelLib to your proprietary plugins and keep your custom addon code private, but any direct modifications to AethelLib's core framework must be open-sourced and contributed back under the AGPL.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.1 | 9 Jun 2026 | 0 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 20:53 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d91103d1b6fd444abfc31f0d8d0977b7daa5fda1c66857741292a282f61a22b9