Migration from seoslug¶
Overview¶
easeo is the Rust rewrite of seoslug. The core API is similar but the implementation is now Rust with Python and JavaScript bindings.
API Mapping¶
| seoslug | easeo |
|---|---|
seoslug.SEOConfig |
easeo.SEOConfig |
seoslug.SEOEntity |
easeo.SEOEntity |
seoslug.build_seo_payload(entity, route, config, overrides=None) |
same signature |
seoslug.build_seo_payload_dict() |
easeo.build_seo_payload_dict() |
seoslug.build_seo_payload_async() |
easeo.build_seo_payload_async() |
seoslug.URLPolicy |
easeo.URLPolicy |
seoslug.SchemaRegistry |
easeo.SchemaRegistry (callables supported) |
seoslug.hook / register_hook |
easeo.HookRegistry (config-scoped) |
seoslug.factories |
from_blog_post, from_product, from_faq |
seoslug.SEOError |
easeo.EaseoError |
payload["title"], payload == dict |
supported |
What Changed¶
- Rust core instead of pure Python
- Contract system added
- detrack absorbed into core
- Hooks are config-scoped only. seoslug had a global registry; easeo attaches
hooks to
SEOConfigso the builder stays pure and deterministic. SchemaRegistry.register()accepts callables. It is no longer Rust-only.- Framework adapters are separate packages
What Stays the Same¶
build_seo_payload(entity, route, config, overrides=None)signature- Deterministic output
- Framework-agnostic core
render_html(),to_dict(),hash(),etag()- Schema registry
- Dict-compatible, comparable payloads
except ValueErrorstill catches easeo errors
Installation¶
Code Changes¶
Minimal changes required:
# Old
from seoslug import SEOConfig, SEOEntity, build_seo_payload
# New
from easeo import SEOConfig, SEOEntity, build_seo_payload
The API is intentionally compatible.