# ElizaOS Developer Update (2025-12-22 → 2025-12-28)

This update summarizes developer-facing changes across ElizaOS core + plugins, plus key technical context from Discord core-dev discussions during the week.

---

## 1) Core Framework

### Runtime + Messaging: move toward a single messageService-centric flow
Core work continues to converge on `messageService.handleMessage()` as the canonical entrypoint for inbound messages (vs older event-style hooks such as `MESSAGE_RECEIVED`). This is already reflected in the SQL plugin and examples migration work ([#6202](https://github.com/elizaos/eliza/pull/6202)) and in broader “Unified API” changes ([#6201](https://github.com/elizaos/eliza/pull/6201)).

**Why this matters:** plugin authors should prefer calling/overriding messageService APIs and typed message payloads rather than relying on legacy events.

### Streaming foundation in core (SSE + streaming context)
The platform has been aligning around “true streaming” for interactive agent UX:
- True SSE replaced polling for streaming/state updates ([#5930](https://github.com/elizaos/eliza/issues/5930)).
- Core streaming support for text generation was enhanced in a large cross-cutting change set ([#6212](https://github.com/elizaos/eliza/pull/6212)).

This week’s Discord notes also mention streaming regressions caused by incorrect dependencies, with work in-flight to stabilize OpenAI streaming (see Model Provider Updates).

### Type safety improvements: typed custom events
Core runtime now supports generic payload typing for custom events, which makes plugin-level events safer and easier to maintain:
- [#6277](https://github.com/elizaos/eliza/pull/6277) “add generic type support for custom event handlers”

```ts
import type { EventPayload } from "@elizaos/core";
import { AgentRuntime } from "@elizaos/core";

interface MyPayload extends EventPayload {
  roomId: string;
  score: number;
}

const runtime = new AgentRuntime(/* ... */);

runtime.registerEvent<MyPayload>("my.plugin.score", async (payload) => {
  // payload.score is typed
  // payload.roomId is typed
});
```

---

## 2) New Features

### Streaming text generation (opt-in) across core/client
Core + client now support an opt-in streaming mode for model inference ([#6212](https://github.com/elizaos/eliza/pull/6212)). If you maintain a model provider plugin, validate that you:
1) surface a `stream: true` option,
2) emit incremental tokens/chunks using the updated streaming utilities/types.

**Developer tip:** treat streaming as “best effort” and ensure you still support non-streaming completion for providers/environments that can’t stream.

### CLI: ElizaOS Cloud as default AI provider + browser login
The CLI experience now prioritizes ElizaOS Cloud as the recommended/default provider and adds a browser-based login flow to provision API keys ([#6208](https://github.com/elizaos/eliza/pull/6208)). See also the embedded CLI docs at:
- `packages/cli/src/commands/login/README.md` (in-repo)

This is a major DX improvement for onboarding new projects.

### Knowledge plugin: configurable rate limiting + higher throughput defaults
High-throughput deployments can now tune API rate limiting in the knowledge plugin:
- [plugin-knowledge #49](https://github.com/elizaos-plugins/plugin-knowledge/pull/49) “configurable rate limits” (and increased defaults)

### Farcaster: richer embed/media processing
Farcaster plugin work added embed/media processing support for casts:
- [plugin-farcaster #16](https://github.com/elizaos-plugins/plugin-farcaster/pull/16)

---

## 3) Bug Fixes (with technical context)

### SQL plugin: automatic directory creation + migration hardening
Two important reliability improvements landed:
- [#6202](https://github.com/elizaos/eliza/pull/6202) auto-creates PGLite directories and updates examples to the new messageService API
- [#6215](https://github.com/elizaos/eliza/pull/6215) optimizes pre-1.6.5 → 1.6.5+ migrations, improves RLS handling, and adds extensive test coverage

**Impact:** fewer “it crashes unless I create `.eliza/` or PGLite dirs manually” failure modes; safer upgrades for older projects.

### Character secret encryption order corrected
A critical correctness/security bug around encrypting character secrets in the correct order was fixed:
- [#6217](https://github.com/elizaos/eliza/pull/6217)

### Client rendering: markdown spacing regressions resolved
Several UI fixes reduced excessive vertical spacing in rendered markdown:
- [#6197](https://github.com/elizaos/eliza/pull/6197)
- [#6159](https://github.com/elizaos/eliza/pull/6159)

### Reported (not yet confirmed fixed): agent naming edge cases
Discord reports indicate agent creation can break when names are `"null"` or purely numeric strings (e.g. `"1"`, `"69"`, `"666"`), causing either failed saves or client-side exceptions (Discord, 2025-12-27). If you build custom dashboards/agent CRUD UIs, validate your server-side constraints and client-side schema validation are consistent (e.g., disallow reserved keywords and enforce a string pattern).

---

## 4) API Changes Developers Should Note

### Messaging API standardization (legacy event migration)
If you are still consuming legacy message events (e.g., `MESSAGE_RECEIVED`), migrate to the messageService API. The SQL plugin migration work is a concrete reference:
- [#6202](https://github.com/elizaos/eliza/pull/6202)

### Streaming API surface (opt-in parameter)
Streaming is opt-in via a `stream: true` parameter across relevant generation calls ([#6212](https://github.com/elizaos/eliza/pull/6212)). Providers that don’t implement streaming must ignore/decline cleanly rather than failing.

### Message format evolution: `serverId` → `messageServerId`
A bootstrap format fix notes a prior drop of `serverId` in favor of `messageServerId` and includes compatibility fixes ([#6261](https://github.com/elizaos/eliza/pull/6261)). If your plugin or client code still expects `serverId`, update your payload handling.

### Unified API for serverless Node.js targets
Core introduced/expanded a “Unified API” intended to run in serverless Node.js contexts:
- [#6201](https://github.com/elizaos/eliza/pull/6201)

If you maintain wrappers around `@elizaos/core`, re-check imports/types in `packages/core/src/types/elizaos.ts`.

---

## 5) Social Media Integrations

### Twitter
- Posting enablement settings now apply immediately and consistently:
  - [plugin-twitter #42](https://github.com/elizaos-plugins/plugin-twitter/pull/42)
- Follow-up UX/behavior issues identified (open):
  - “open most recent conversation by default” [#6281](https://github.com/elizaos/eliza/issues/6281)
  - “conversation duplication” [#6282](https://github.com/elizaos/eliza/issues/6282)

### Discord
Major refactors improved type-safety and message handling stability in the Discord plugin:
- [plugin-discord #32](https://github.com/elizaos-plugins/plugin-discord/pull/32)
- [plugin-discord #38](https://github.com/elizaos-plugins/plugin-discord/pull/38)

There’s also an architectural proposal for multi-bot voice support:
- [plugin-discord #36](https://github.com/elizaos-plugins/plugin-discord/pull/36)

### Telegram
Work continues to unify Telegram messaging APIs with the core framework:
- [plugin-telegram #22](https://github.com/elizaos-plugins/plugin-telegram/pull/22)

### Farcaster
- Registry added a self-hosted Farcaster “local hub” plugin (reducing reliance on third-party APIs):
  - [registry #243](https://github.com/elizaos-plugins/registry/pull/243)
- Farcaster plugin improvements:
  - [plugin-farcaster #16](https://github.com/elizaos-plugins/plugin-farcaster/pull/16)

---

## 6) Model Provider Updates (OpenAI, Anthropic, OpenRouter, …)

### OpenAI: streaming enablement + dependency alignment
- OpenAI streaming support was introduced in the provider plugin:
  - [plugin-openai #21](https://github.com/elizaos-plugins/plugin-openai/pull/21)
- Follow-up work referenced in Discord indicates streaming broke in core due to dependency mismatches; a fix PR was referenced:
  - “Fix OpenAI streaming functionality (PR #22)” (Discord note, 2025-12-26; likely [plugin-openai #22](https://github.com/elizaos-plugins/plugin-openai/pull/22))

**Action for developers:** if you rely on OpenAI streaming, pin compatible versions of `@elizaos/core` and `@elizaos/plugin-openai` until you confirm the fixed combination in CI.

### Anthropic + OpenRouter: streaming work in progress
Streaming work was initiated across other providers as well:
- [plugin-anthropic #12](https://github.com/elizaos-plugins/plugin-anthropic/pull/12)
- [plugin-openrouter #21](https://github.com/elizaos-plugins/plugin-openrouter/pull/21)

---

## 7) Breaking Changes / V1 → V2 Migration Warnings

### Messaging/eventing migration (most likely to break plugins)
**Risk:** plugins that subscribe to legacy events (e.g., `MESSAGE_RECEIVED`) or assume old message shapes (`serverId`) may silently stop receiving messages or crash after upgrades.

**What to do:**
1) Migrate inbound handling to `messageService.handleMessage()` (use [#6202](https://github.com/elizaos/eliza/pull/6202) as reference).
2) Audit message payload usage for `messageServerId` vs `serverId` ([#6261](https://github.com/elizaos/eliza/pull/6261)).
3) If you implement a provider, ensure `stream: true` is supported or safely ignored ([#6212](https://github.com/elizaos/eliza/pull/6212)).

### Auth/data isolation changes (feature PRs that may affect deployments)
A full JWT authentication + user management system exists as an in-review PR:
- [#6200](https://github.com/elizaos/eliza/pull/6200)

While gated behind `ENABLE_DATA_ISOLATION=true`, teams planning multi-tenant deployments should watch this closely because it changes how `entityId` is derived (from JWT `sub`) and how clients authenticate (`Authorization: Bearer ...`).

### Token migration issues (operational, not core API) impacting developer support load
Discord continues to see repeated “max amount reached” and wallet connection issues during AI16Z → ElizaOS migration (snapshot-based eligibility). This is not a runtime API break, but it is generating significant support traffic and confusion:
- Snapshot eligibility issue tracking: [#6211](https://github.com/elizaos/eliza/issues/6211) (Tangem/WalletConnect constraints)

---

## Appendix: Jeju/Babylon Cloud Marketplace (Discord core-devs)

Shaw shared a major infrastructure milestone: **cloud workloads running on both Jeju and Babylon**, framed as a decentralized alternative to Vercel—a compute marketplace that selects cheapest/fastest resources automatically. The described platform includes:
- agent execution + inference
- DNS + domain purchasing
- distributed cache
- distributed SQLite compatible with Upstash/Neon patterns

Discord reference (core-devs, 2025-12-28):
- https://discord.com/channels/1253563208833433701/1377726087789940836

Open design items from that discussion:
- provider-specific SLAs (“platform doesn’t offer SLAs, providers can”)
- potential inspiration from POKT Network’s `poktroll` repo (shared by Sayonara)

If you’re building for “Eliza Cloud” deployment targets, expect more standardization pressure around serverless-friendly APIs, streaming, and storage abstractions consistent with Upstash/Neon-like interfaces.