EVOID
Reference Runtime for Intent-Oriented Programming
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.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-change) - Commit your changes
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
103bce9c7803792c393bbdf161c41165d7a0880858e57a641bf218591f662f2f
|
|
| MD5 |
d1acc25c571c0b37683228df7ca5d157
|
|
| BLAKE2b-256 |
eee76d3251d061905b21eac1a05b075a76f2c7c20091c616ed3ed884ea8e8be7
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f101ced87de9e322de59a752f714e50e01b1ea1505c974e56d6cfd621046ad0
|
|
| MD5 |
7123cdbe72f18626676e6925c8f953e5
|
|
| BLAKE2b-256 |
d87faf77d5acdfe61855b81c8c518c19ca572b32fef92fdbe93594c9dc01b5c8
|