# ElizaOS Developer Update: November 29 - December 5, 2025

## 1. Core Framework

This week has seen significant improvements to the ElizaOS architecture and runtime, focusing on both performance and developer experience.

### Developer Experience Improvements

A major overhaul of the developer experience is underway after core team members identified significant usability barriers. Current work focuses on eliminating excessive boilerplate code required for even simple agent implementations:

```typescript
// Before: ~50 lines to create a basic agent
import { AgentRuntime, EventType } from "@elizaos/core";
import { plugin as sqlPlugin } from "@elizaos/plugin-sql";
import { openaiPlugin } from "@elizaos/plugin-openai";
import fs from "fs";

// Manual directory creation
if (!fs.existsSync(".eliza")) { fs.mkdirSync(".eliza"); }

// Manual database setup, service registration, connection management...
// [40+ lines of complex setup code]
```

The team is implementing an `ElizaOS` wrapper class to significantly simplify agent creation:

```typescript
// After: ~10 lines for the same functionality
import { ElizaOS } from "@elizaos/core";
import { openaiPlugin } from "@elizaos/plugin-openai";

// Create and initialize agent in one simple call
const eliza = new ElizaOS({
  character: { name: "Eliza", bio: "A helpful assistant" },
  plugins: [openaiPlugin]
});

// Send message and get response
const response = await eliza.sendMessage("Hello, world!");
console.log(response.text);
```

### Server Architecture Optimization

PR [#6199](https://github.com/elizaOS/eliza/pull/6199) delivered significant server architecture improvements:

- **Socket.IO Configuration**: Optimized connection parameters to prevent timeout issues
  - `pingInterval`: 25s, `pingTimeout`: 20s, `connectTimeout`: 10s
  - Enforced transport order: `['websocket', 'polling']`
- **HTTP Server Timeouts**: Added proper timeout configuration to prevent hanging connections
- **Parallel Database Operations**: Implemented `Promise.all` for independent DB queries
- **Code Reorganization**: Restructured core components following clean architecture principles

## 2. New Features

### Unified Serverless API

PR [#6201](https://github.com/elizaOS/eliza/pull/6201) introduced a unified serverless API for Node.js, simplifying agent deployment in serverless environments:

```typescript
// Create ElizaOS agent for serverless deployment
import { ElizaOS } from "@elizaos/core";
import { openaiPlugin } from "@elizaos/plugin-openai";

export async function handler(event) {
  const eliza = new ElizaOS({
    character: { name: "Eliza", bio: "A helpful assistant" },
    plugins: [openaiPlugin],
    serverless: true // Enable serverless mode
  });
  
  const response = await eliza.sendMessage(event.message);
  return { statusCode: 200, body: JSON.stringify(response) };
}
```

### JWT Authentication

PR [#6200](https://github.com/elizaOS/eliza/pull/6200) implements comprehensive JWT authentication with multiple verification strategies:

- **JWT Verifier Factory** with priority-based selection:
  - Ed25519 (highest priority)
  - JWKS (medium priority) - For Auth0, Clerk, Privy, Supabase, Google, etc.
  - Secret (lowest priority)

- **Entity ID derivation** from JWT `sub` claim, compatible with any JWT provider
- **Dual authentication modes** supporting both JWT and legacy header-based authentication
- **Configuration via environment variables**:
  - `ENABLE_DATA_ISOLATION`: Enable JWT auth mode
  - `JWT_SECRET`: HS256 symmetric secret
  - `JWT_PUBLIC_KEY_ED25519`: Ed25519 public key (base64)
  - `JWT_JWKS_URI`: JWKS endpoint URL
  - `JWT_ISSUER_WHITELIST`: Allowed issuers (comma-separated)

## 3. Bug Fixes

### Directory Creation in plugin-sql

PR [#6202](https://github.com/elizaOS/eliza/pull/6202) fixed a critical bug where the plugin-sql component would crash if the `.eliza` directory was missing:

- **Auto-directory creation**: Now automatically creates necessary directories for database files
- **Improved robustness**: Handles special URI formats (`memory://`, `idb://`) without errors
- **Testing**: Added comprehensive unit tests for all directory creation scenarios

A related issue [#6204](https://github.com/elizaOS/eliza/issues/6204) reported by @lalalune documented the problem where PGLite crashes if the `.eliza` directory doesn't exist.

### Markdown Rendering Improvements

PR [#6197](https://github.com/elizaOS/eliza/pull/6197) fixed excessive vertical spacing in AI-generated responses:

- Added proper spacing for markdown headings and separators
- Reduced blockquote vertical spacing for more compact display
- Improved code block and inline code styling for better readability

## 4. API Changes

### Message Service API Migration

The Message API has been updated to use the new `messageService.handleMessage()` function instead of the deprecated `MESSAGE_RECEIVED` event system:

```typescript
// Before (deprecated)
runtime.on(EventType.MESSAGE_RECEIVED, async (message) => {
  // Handle message
});

// After (current recommended approach)
runtime.messageService.handleMessage(message, {
  ensureConnection: true,
  createMessageMemory: true
});
```

The changes also affect error reporting with users noting "missing required values" errors from the message API. Developers should verify proper message formatting when migrating.

## 5. Social Media Integrations

### X (Twitter) Integration

The team continues negotiations with X (Twitter) for social media restoration. Progress has been slowed by what team members refer to as "Musk's legal legacy." Users have reported that the current plugin-twitter v1.0.7 integration has an expensive API cost of $175/month.

### Other Platform Plugins

The Discord plugin registry is actively seeking contributions. Developers can submit new plugins via GitHub pull requests to:
https://github.com/elizaos-plugins/registry

## 6. Model Provider Updates

### Provider Support

Deepseek has been confirmed as a usable provider through the openrouter plugin. To use:

```typescript
import { openrouterPlugin } from "@elizaos/plugin-openrouter";

const eliza = new ElizaOS({
  // ...
  plugins: [openrouterPlugin],
  config: {
    openrouter: {
      defaultModel: "deepseek/deepseek-coder" // or other Deepseek models
    }
  }
});
```

### Competition Insights

Partners discussed Anthropic's revenue growth and potential IPO, along with competition from Chinese model providers releasing open-source alternatives to major models like Gemini 3, Codex, and Opus 4.5.

## 7. Breaking Changes

### V1 to V2 Migration Issues

Developers working with the ElizaOS framework should be aware of these breaking changes:

1. **Event System Deprecation**: The `EVENT_TYPE.MESSAGE_RECEIVED` event system is being phased out in favor of `messageService.handleMessage()`. Update your code to use the new API.

2. **Plugin Bootstrap Dependency**: The bootstrap plugin is currently required for basic functionality including the REPLY action and character provider. Plans are in place to move these essentials to the core framework.

3. **Database Adapter Registration**: Currently, manual database setup is required. Future updates will automate this in `runtime.initialize()`.

4. **Connection Management**: The team is working to abstract `ensureConnection` and `createMessageMemory` into `handleMessage` with sensible defaults, but currently these must be managed manually.

5. **API Changes**: Developers using the message API should note the errors about "missing required values" and ensure their messages contain all required fields.