TypeScript SDK
Run a managed local server with Node.js 22+. Use Effect or Promises to control it.
bun add @soulfiremc/sdk effect @effect/platformimport { AccountTypeCredentials } from "@soulfiremc/sdk";
import { SoulFire } from "@soulfiremc/sdk/node/promise";
await using soulfire = await SoulFire.install();
const name = "Hello World";
const existing = (await soulfire.instances()).find(
(item) => item.friendlyName === name,
);
const instance = existing
? soulfire.instance(existing.id)
: await soulfire.createInstance(name);
const username = "SoulFireBot";
let botId = (await instance.bots()).find(
(item) => item.accountName === username,
)?.profileId;
if (!botId) {
for await (const result of instance.loginCredentials({
service: AccountTypeCredentials.OFFLINE,
payload: [username],
})) {
if (
result.data.case === "oneSuccess" &&
result.data.value.account
) {
await instance.addAccounts([result.data.value.account]);
botId = result.data.value.account.profileId;
}
}
}
if (!botId) throw new Error("Could not create an offline bot");
const bot = instance.bot(botId);
await bot.start();
await bot.waitForOnline();
await bot.chat.send("Hello from SoulFire");