Skip to main content

EVOID

Reference Runtime for Intent-Oriented Programming

Python 3.12+ License Version Zero Dependencies Tests


What is IOP?

Every time you write an endpoint, you decide which database, how to cache, whether to encrypt, what priority. IOP removes that burden. Your data declares what it needs. The runtime handles how.

from evoid.web.route import Service, get, post

app = Service("my-api")

@get("/users/{user_id}")
async def get_user(user_id: int) -> dict:
    return {"id": user_id, "name": "Alice"}

@post("/payments", level="critical")
async def process_payment(amount: float) -> dict:
    return {"status": "paid", "amount": amount}

Three intent levels control infrastructure behavior:

Level Pipeline Use Case
ephemeral validate Cache, sessions, temp data
standard validate, authorize User profiles, posts
critical validate, authorize, audit, protect Payments, medical, legal

Install

uv add evoid

Zero core dependencies. Add only what you need:

evo install sqlite      # SQLite storage
evo install redis       # Redis cache
evo install pydantic    # Pydantic schema
evo install asgi        # ASGI adapter
evo install full        # Everything

Requires Python 3.12+.


Quick Start

evo init my-api
cd my-api
evo service new api
evo service run api
# Server starts at http://0.0.0.0:8000

Three Syntax Styles

All styles are IOP underneath. Pick the one that fits your team.

@route (Function-based)

from evoid.web.route import Service, get, post

app = Service("my-api")

@get("/users/{user_id}")
async def get_user(user_id: int) -> dict:
    return {"id": user_id}

@post("/users")
async def create_user(name: str, email: str) -> dict:
    return {"status": "created"}

@controller (Class-based)

from evoid.web.controller import Service, Controller, GET, POST

app = Service("my-api")

@Controller("/users")
class UserController:
    @GET("/{user_id}")
    async def get_user(self, user_id: int) -> dict:
        return {"id": user_id}

    @POST("/")
    async def create_user(self, name: str, email: str) -> dict:
        return {"status": "created"}

Native (Full Control)

from evoid import Intent, Level, add_intent

MY_INTENT = Intent(name="get_user", level=Level.STANDARD)

async def handler(intent: Intent) -> dict:
    return {"id": 1, "name": "Alice"}

add_intent(MY_INTENT, handler)

AI Agent Integration

EVOID exposes Intents as MCP tools for AI agents:

from evoid import export_schemas
from evoid.adapters.mcp import create_mcp_server

# Export schemas for AI discovery
schemas = export_schemas()

# Create MCP server
server = create_mcp_server("my-api")

Plugin System

Install Plugins

evo plug install evoid-redis           # From PyPI
evo plug install git+https://...       # From git
evo plug search cache                  # Search PyPI
evo plug list                          # List installed

Write Plugins

# evoid_plugin.json
{
    "name": "evoid-redis",
    "version": "1.0.0",
    "type": "engine",
    "entry_point": "evoid_redis:register_plugin"
}

Configuration

Python (Recommended)

# evoid_config.py
from evoid.config import config

app = config(
    service={"name": "my-api"},
    runtime={"adapter": "asgi", "port": 8000},
    engines={"storage": "redis"},
)

TOML

[service]
name = "my-api"

[runtime]
adapter = "asgi"
port = 8000

[engines]
storage = "redis"

Testing

from evoid.testing import tc
from myapp import GET_USER

def test_get_user():
    return tc(GET_USER, expect={"id": 1})
pytest tests/ -v                # Run tests
pytest tests/ --evoid-webui     # With dashboard

CLI Reference

Command Alias Description
evo init <name> i Create project
evo service new <name> s new Add service
evo service list s list / ls List services
evo service run <name> s run Run service
evo run r Run all services
evo serve sv Quick serve
evo exec <intent> e Execute intent
evo list-intents li List intents
evo list-processors lp List processors
evo install <pkg> ins Install optional dep
evo plug install <name> pl i Install plugin
evo plug search <query> pl s Search plugins
evo plug list pl l List installed
evo version v Show version

Project Structure

my-api/
  evoid_config.py       # Python config (or evoid.toml)
  shared/               # Shared code between services
  services/
    api/
      main.py           # Service code

Features

Feature Description
Intent-Driven Data declares what, runtime decides how
Zero Dependencies Core has no required packages
Python-Native Config Type-safe, composable configuration
Plugin Standard Publish plugins to PyPI with manifest
AI Agent Integration Schema export + MCP server
Plugin Lifecycle Hooks 6 events with security model
Async-Native Full async/await support
Parallel Execution Run multiple intents concurrently
Multi-Adapter ASGI, CLI, Telegram, Robyn, WebSocket
Message Bus Inter-service communication via Intents
Testing System pytest plugin with WebUI dashboard

Documentation

User docs: https://evolvebeyond.github.io/EVOID/

Architecture docs: https://deepwiki.com/EvolveBeyond/EVOID


Contributing

See CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-change)
  3. Commit your changes
  4. Push and open a Pull Request

License

Apache 2.0 — see LICENSE

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evoid-0.4.1.tar.gz (484.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evoid-0.4.1-py3-none-any.whl (85.9 kB view details)

Uploaded Python 3

File details

Details for the file evoid-0.4.1.tar.gz.

File metadata

  • Download URL: evoid-0.4.1.tar.gz
  • Upload date:
  • Size: 484.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for evoid-0.4.1.tar.gz
Algorithm Hash digest
SHA256 103bce9c7803792c393bbdf161c41165d7a0880858e57a641bf218591f662f2f
MD5 d1acc25c571c0b37683228df7ca5d157
BLAKE2b-256 eee76d3251d061905b21eac1a05b075a76f2c7c20091c616ed3ed884ea8e8be7

See more details on using hashes here.

File details

Details for the file evoid-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: evoid-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 85.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for evoid-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0f101ced87de9e322de59a752f714e50e01b1ea1505c974e56d6cfd621046ad0
MD5 7123cdbe72f18626676e6925c8f953e5
BLAKE2b-256 d87faf77d5acdfe61855b81c8c518c19ca572b32fef92fdbe93594c9dc01b5c8

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.10

2 files

0.6.9

2 files

0.6.8

2 files

0.5.0

2 files

0.4.3

2 files

This release

0.4.1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page