Intent-Oriented Programming Runtime
EVOID is the reference runtime for Intent-Oriented Programming (IOP). 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}uv add evoidOr with pip:
pip install evoidRequires Python 3.13+.
evo init my-api
cd my-api
evo service new api
evo service run apiServer starts at http://0.0.0.0:8000.
Every time you write an endpoint, you decide which database, how to cache, whether to encrypt, what priority. IOP removes that burden.
# Traditional: you tell the system HOW
def save_user(user):
encrypted = encrypt(user.email)
cache.set(f"user:{user.id}", encrypted, ttl=300)
db.insert("users", encrypted)
audit_log("user_created", user)
# IOP: you tell the system WHAT
class User(BaseModel):
name: standard(str) # Normal processing
email: critical(str) # Auto-encrypt, audit, replicate
session: ephemeral(str) # Memory only, auto-expireThree intent levels control infrastructure behavior:
| Level | Use Case | Pipeline |
|---|---|---|
ephemeral |
Cache, sessions, temp data | validate |
standard |
User profiles, posts, comments | validate, authorize |
critical |
Payments, medical records, legal | validate, authorize, audit, protect |
All styles are IOP underneath.
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"}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"}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)| Feature | Description |
|---|---|
| Intent-Driven | Data declares what, runtime decides how |
| Async-Native | Full async/await support |
| Plugin-Based | Every engine is replaceable |
| Parallel Execution | Run multiple intents concurrently |
| Microservices | Project + Service structure |
| Multi-Adapter | ASGI, CLI, Telegram, Robyn, WebSocket |
| Pipeline Extensions | Inject processors before/after routes |
| Intent-Aware Caching | Three tiers: ephemeral, standard, critical |
| Message Bus | Inter-service communication via Intents |
evo init <name> # Create project
evo service new <name> # Add service
evo service list # List services
evo service run <name> # Run service
evo sync # Sync dependencies
evo run # Run all services
evo serve # Quick serve
evo list-intents # List registered intents
evo exec <intent> # Execute intent
evo version # Show versionmy-api/
evoid.toml # Project config
shared/ # Shared code between services
services/
api/
evoid.toml # Service config
main.py # Service code
Two sources, depending on your goal:
Using EVOID? Read the user documentation:
https://evolvebeyond.github.io/EVOID/
Tutorials, API reference, syntax guides, and examples.
Contributing to EVOID? Read the architecture documentation:
https://deepwiki.com/EvolveBeyond/EVOID
Deep technical walkthrough of the codebase, design decisions, and internals.
EVOID is open source and accepts contributions.
- Read the architecture docs to understand the codebase
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-change) - Commit your changes
- Push and open a Pull Request
Apache 2.0