# ElizaOS Developer Update - Week of July 21-23, 2025

## 1. Core Framework

### EventTarget Migration
- Replaced Node.js EventEmitter with Bun's native EventTarget API in core messaging systems for improved performance and runtime compatibility ([#5609](https://github.com/elizaOS/eliza/pull/5609))
- Added backward compatibility layers to maintain EventEmitter patterns ([#5612](https://github.com/elizaOS/eliza/pull/5612), [#5613](https://github.com/elizaOS/eliza/pull/5613))
- Fixed type safety issues by replacing `any` with `unknown` and explicit function types ([#5611](https://github.com/elizaOS/eliza/pull/5611))

### Service Type System
- Introduced standardized service interfaces with a `getServicesByType()` method ([#5565](https://github.com/elizaOS/eliza/pull/5565))
- Added support for multiple services per type for better extensibility
- Implemented comprehensive type definitions for browser, email, PDF, transcription, and other service types

### Module Loading Architecture
- Enhanced ModuleLoader system with local-first guarantees for consistent module resolution ([#5629](https://github.com/elizaOS/eliza/pull/5629))
- Fixed critical issues where plugins weren't loading in npm-deployed versions ([#5624](https://github.com/elizaOS/eliza/pull/5624))
- Improved CLI delegation to prefer local installations over global ones

### Action Chaining Implementation
- Added new action chaining capability for sequential execution with managed state ([#5436](https://github.com/elizaOS/eliza/pull/5436))
- Fixed critical bugs in action chaining implementation ([#5490](https://github.com/elizaOS/eliza/pull/5490))
- Added `callback` mechanism for sending intermediate messages to users

## 2. New Features

### Plugin Quick Starter Template
- Added a new `plugin-quick-starter` template for backend-only plugin development ([#5589](https://github.com/elizaOS/eliza/pull/5589))
- Streamlined template focuses on core functionality without frontend overhead
- Example implementation:

```typescript
// Example minimal plugin with the new quick-starter template
import { Plugin, Runtime } from "@elizaos/core";

export default class MyPlugin implements Plugin {
  name = "my-plugin";
  
  async init(runtime: Runtime) {
    // Register custom actions
    runtime.registerAction({
      name: "MY_CUSTOM_ACTION",
      description: "Performs a custom operation",
      handler: async (state) => {
        // Action implementation
        return { success: true, data: "Operation completed" };
      }
    });
  }
}
```

### Forms Plugin
- Implemented a full forms plugin to serve as a dependent service for other plugins ([#5487](https://github.com/elizaOS/eliza/pull/5487))
- Added form creation, updating, and cancellation actions
- Provided comprehensive test coverage for database persistence and validation ([#5489](https://github.com/elizaOS/eliza/pull/5489))

### Image Generation Action
- Added a new `generateImageAction` to the agent pipeline ([#5446](https://github.com/elizaOS/eliza/pull/5446))
- Enables agents to generate images based on conversational context using ModelType.IMAGE
- Fixed media rendering issues by removing `crossOrigin="anonymous"` from MediaContent component

### V1 to V2 Character Conversion
- Implemented automatic V1 to V2 character conversion during JSON import ([#5536](https://github.com/elizaOS/eliza/pull/5536))
- Detects V1 character format and handles plugin mapping to V2 equivalents
- Example plugin mapping:

```typescript
const PROVIDER_TO_PLUGIN_MAPPING: Record<string, string> = {
  "openai": "@elizaos/plugin-openai",
  "anthropic": "@elizaos/plugin-anthropic",
  "llama_local": "@elizaos/plugin-ollama",
  // Additional mappings...
};
```

## 3. Bug Fixes

### Critical CLI Issues
- Fixed `.elizadb` inheritance bug in nested project creation ([#5618](https://github.com/elizaOS/eliza/pull/5618))
- Resolved plugin installation failures for AI models during project creation ([#5335](https://github.com/elizaOS/eliza/pull/5335))
- Fixed graceful shutdown for dev server on Cmd+C (SIGINT/SIGTERM) ([#5562](https://github.com/elizaOS/eliza/pull/5562))
- Added automatic building for the `elizaos start` command ([#5504](https://github.com/elizaOS/eliza/pull/5504))

### Plugin and Agent Behavior
- Fixed JSONB insert failures in SQL base by properly stringifying content and metadata ([#5628](https://github.com/elizaOS/eliza/pull/5628))
- Addressed database migration service registration issues with proper advisory lock acquisition ([#5572](https://github.com/elizaOS/eliza/pull/5572))
- Prevented undefined model usage restoration in training plugin ([#5660](https://github.com/elizaOS/eliza/pull/5660))

### Windows Compatibility
- Fixed plugin loading failures on Windows ([#5416](https://github.com/elizaOS/eliza/pull/5416), [#5437](https://github.com/elizaOS/eliza/pull/5437))
- Resolved path normalization and localhost resolution issues
- Enhanced module loading to work consistently across platforms

## 4. API Changes

### XML Prompt Format Migration
- Completed migration from JSON to XML format for all prompts across the codebase ([#5623](https://github.com/elizaOS/eliza/pull/5623))
- Improves LLM response reliability and parsing
- New format example:

```xml
<response>
  <thought>User is asking about Bitcoin price movements</thought>
  <actions>REPLY</actions>
  <providers>KNOWLEDGE</providers>
  <text>Bitcoin is currently trading at $62,453, up 2.3% in the last 24 hours...</text>
</response>
```

### Prompt Language Refinements
- Updated LLM provider selection prompt to reduce unnecessary provider use ([#5526](https://github.com/elizaOS/eliza/pull/5526))
- Improved prompt to enforce correct code block formatting ([#5525](https://github.com/elizaOS/eliza/pull/5525))
- Clarified prompt exclusivity for IGNORE action ([#5528](https://github.com/elizaOS/eliza/pull/5528))

### DatabaseMigrationService Changes
- Fixed advisory lock acquisition in migration service ([#5572](https://github.com/elizaOS/eliza/pull/5572))
- Resolved issues with custom plugin schema migrations 
- Added proper error handling with ActionResult type structure

## 5. Social Media Integrations

### Twitter Plugin Updates
- Added post examples to default Eliza character for Twitter posting functionality ([#5652](https://github.com/elizaOS/eliza/pull/5652))
- Updated documentation for Twitter plugin
- Fixed issues with Twitter plugin client initialization errors (#31) and SQL database insertion errors (#39)

### Telegram Plugin Customization
- Guidance provided for implementing custom buttons in Telegram plugin to trigger blockchain token transfers
- Solution involves updating plugin-telegram to handle button callbacks and use Markup.button
- Required implementation of message handlers in plugin-bootstrap or custom creation of a message handler plugin

### Discord Discussions
- Several users reported being active in integrating Discord with their agents
- Documentation improvements for Discord setup planned

## 6. Model Provider Updates

### Ollama Integration
- Made Ollama plugin conditional based on OLLAMA_API_ENDPOINT configuration ([#5594](https://github.com/elizaOS/eliza/pull/5594))
- Improved model selection logic during project creation
- Fixed Ollama plugin configuration to only include it as a fallback if no other LLM plugin exists ([#5587](https://github.com/elizaOS/eliza/pull/5587))

### Google Generative AI
- Fixed Google Generative AI plugin installation during project creation ([#5503](https://github.com/elizaOS/eliza/pull/5503))
- Updated package name from incorrect `@elizaos/plugin-google-ai` to correct `@elizaos/plugin-google-genai`

### New Models Available
- Added support for Qwen3-Coder, a new 480B parameter coding model on OpenRouter
- Plugin compatibility updates for various model providers

## 7. Breaking Changes

### V1 to V2 Migration
- Character format has changed significantly; use the new V1 to V2 character converter for importing legacy characters ([#5536](https://github.com/elizaOS/eliza/pull/5536))
- Plugin names have changed from provider-based (e.g., "openai") to package-based (e.g., "@elizaos/plugin-openai")
- Legacy provider references in character files will need updating

### Event System Changes
- EventEmitter replaced with EventTarget API ([#5609](https://github.com/elizaOS/eliza/pull/5609))
- Code using the old event system may need updates, although backward compatibility is maintained
- Changes primarily affect internal messaging systems and may impact custom plugins using these systems directly

### Module Resolution
- Enhanced ModuleLoader with local-first guarantees changes module resolution behavior ([#5629](https://github.com/elizaOS/eliza/pull/5629))
- Plugins relying on specific module resolution paths may need updating
- Global plugin installations now prevented to avoid conflicts between projects