Каждый вендор — за одним контрактом.
Кеш, базы данных, vector stores, event bus, LLM и другие — всё через стабильные интерфейсы. Меняете вендора одной строчкой в конфиге; код вашего сервиса не меняется.
Что живёт за контрактом
Абстракция вендоров по категориям
Кеш, SQL и document базы, vector stores, object storage, event bus, LLM, embeddings, observability — каждая внешняя зависимость доходит до платформы через один стабильный интерфейс.
Меняйте вендора одной строчкой в конфиге
Когда нужно перейти от одного провайдера к другому, вы меняете одну запись в конфиге. Producer и consumer код в ваших сервисах остаётся таким же.
Точка расширения уже открыта
Нужен Kafka, RabbitMQ, NATS или что-то ещё, чего нет в каталоге? Пишете свой адаптер под тот же контракт — в своём репо, приватном или публичном — и он загружается идентично нашим.
Около 21 открытого адаптера сегодня
OpenAI, SQLite, MongoDB, Redis, Qdrant, Pino, Docker, локальная файловая система, git worktrees и другие. Каталог растёт открыто, и ваш может расти так же.
Multi-tenant routing встроен
Per-tenant лимиты, контроль бюджета, audit и observability — часть слоя, а не то, что каждый продукт реализует заново.
Self-hosted, open source, без чёрных ящиков
Работает на вашей инфраструктуре. Данные не покидают вашу сеть, если вы это не настроили. Каждая строка каждого адаптера доступна для аудита.
Как это работает
Ваш сервис зависит от контракта
Producer и consumer код вашего сервиса импортирует типизированный интерфейс из @kb-labs/core-platform. Никогда не импортирует SDK вендора напрямую.
→Runtime загружает адаптер
При старте runtime читает конфиг, загружает adapter-пакет по имени и привязывает его к контракту. Референсный, ваш приватный, или будущий открытый — все загружаются идентично.
→Меняете backend — код не двигается
Меняете одну строку в .kb/kb.config.json. Код вашего сервиса не меняется. Вендор под контрактом заменяется, поведение над контрактом сохраняется.
// .kb/kb.config.json — change the adapter, code stays the same
{
"platform": {
"adapters": {
"cache": "@kb-labs/adapters-redis",
"db": "@kb-labs/adapters-sqlite",
"documentDb": "@kb-labs/adapters-mongodb",
"vectorStore":"@kb-labs/adapters-qdrant",
"eventBus": "@kb-labs/adapters-eventbus-cache",
"llm": "@kb-labs/adapters-openai",
"logger": "@kb-labs/adapters-pino",
"storage": "@kb-labs/adapters-fs"
}
}
}Хватит реализовывать одну и ту же вендорную обвязку в каждом продукте.
Один слой контрактов. Адаптеры, которые вы меняете в конфиге. На том же движке, который вы устанавливаете одной командой.