Skip to main content

Python Version License One Core Dependency Status

EVOID

Reference Runtime for Intent-Oriented Programming

Data declares what, runtime decides how.

What is IOP?Quick StartAdaptersFeaturesDocsPyPI


What is IOP?

Intent-Oriented Programming — your data declares what it needs, the runtime handles how.

from evoid.native import create_service, on
from evoid import Intent, Level

app = create_service("my-api")

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

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

on(app, GET_USER, get_user)

Three intent levels control infrastructure automatically:

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

How It Works

EVOID is a runtime, not a framework. Adapters bridge the outside world:

External Event (HTTP, CLI, Telegram, WebSocket, ...)
        |
   Adapter converts event → Intent
        |
   Runtime executes Intent through Pipeline
        |
   Pipeline runs Processors (validate, authorize, audit, ...)
        |
   Result returned to Adapter → converted back to response

Adapters provide route decorators and event conversion. Services are Intent + handler registrations. Pipelines are processor chains chosen by intent level.

See How It Works for the full picture.


Quick Start

uv add evoid
evo init my-api && cd my-api
evo service run gateway    # already scaffolded, http://0.0.0.0:8000

evo service new api        # add another service (optional)
evo service run api        # http://0.0.0.0:8001

Or install optional engines:

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

Three Syntax Styles

All IOP underneath. Pick your style:

@route (function-based)

Route decorators come from the adapter. Switch adapters, same code:

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

app = Service("my-api")

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

@controller (class-based)

@GET, @POST mark routes. @Controller creates Intents from them:

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}

Native (full control)

Explicit Intent creation. Adapter-agnostic — works with any transport:

from evoid.native import create_service, on
from evoid import Intent, Level

app = create_service("my-api")

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

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

on(app, GET_USER, get_user)

Adapters

Each adapter converts its event type to Intents. Route decorators live in adapters because param extraction is adapter-specific:

Adapter Decorators Install
ASGI (HTTP) @get(path), @post(path) evoid[asgi]
Robyn @get(app, path), @post(app, path) evoid[robyn]
Telegram on(bot, event, handler) evoid[telegram]
CLI intent_from_args(cmd) built-in
MCP (AI agents) create_mcp_server(name) built-in

See Adapters for details and examples.


Features

Minimal Core Core has one required package (tomli_w)

AI Agent Integration Schema export + MCP server

Plugin System PyPI + git install

Python-Native Config Type-safe, composable

Pipeline Hooks 6 lifecycle events

Testing System pytest + WebUI dashboard

Async-Native Full async/await support

Parallel Execution gather, parallel, IntentQueue

Multi-Adapter ASGI, CLI, Telegram, WebSocket, MCP

Storage Engines Memory, SQLite, Redis, Postgres

Cache Engine LRU with TTL, Redis backend

Extend Pipelines before/after processors, pipeline override


AI Agent Integration

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

schemas = export_schemas()
server = create_mcp_server("my-api")

Plugin System

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

Configuration

Python (Recommended)

from evoid.config import config

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

TOML

[service]
name = "my-api"

[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
pytest tests/ --evoid-inspect       # With pipeline traces

Project Structure

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

Package Layout

evoid/
  core/          Intent, Pipeline, Context, Runtime, Events, MessageBus
  native/        IOP mother syntax (create_service, on)
  web/           @route and @controller syntax
  adapters/      asgi, cli, telegram, websocket, mcp, robyn
  engines/       storage, cache, auth, di, logger, metrics, schema, serializer
  processors/    Built-in processors (validate, authorize, etc.)
  config/        TOML + Python config loading
  testing/       pytest plugin + WebUI dashboard
  project/       Project scaffolding

Documentation

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

Architecture: https://deepwiki.com/EvolveBeyond/EVOID (architecture documentation that updates faster, great for contributors) Ask DeepWiki


Contributing

See CONTRIBUTING.md.

  1. Fork → Branch → Commit → PR
  2. Tests: pytest tests/ -v
  3. Lint: ruff check evoid/

License

Apache 2.0


EVOID
Built with IOP principles. Intent is the platform.

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.6.8.tar.gz (918.8 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.6.8-py3-none-any.whl (114.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: evoid-0.6.8.tar.gz
  • Upload date:
  • Size: 918.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for evoid-0.6.8.tar.gz
Algorithm Hash digest
SHA256 99852cc9a0feda77d8dfbbaeb39bdb038b66e14161d45c76e50323dc5a7eb117
MD5 9f49933f4863df69fbc1de5ad0e383d4
BLAKE2b-256 a9aa214f1ff9ed24d20f22ddd58dea17bbde5f2ec3ba450406499a38cb8379c6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: evoid-0.6.8-py3-none-any.whl
  • Upload date:
  • Size: 114.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for evoid-0.6.8-py3-none-any.whl
Algorithm Hash digest
SHA256 17705f45fb3606c98cc056a63e41b8c4503e99456eebed1e51d2a37d8dcf0292
MD5 6c5fced6646990537469df026069430c
BLAKE2b-256 971677da6edd14002a47b65ad1c01ef27af4290111a8bea8b887fc202efa8ce8

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.10

2 files

0.6.9

2 files

This release

0.6.8 This release

2 files

0.5.0

2 files

0.4.3

2 files

0.4.1

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