openframe-oss-tenant README

The project's README from github.com/flamingo-stack/openframe-oss-tenant. As one markdown file: README.md.

OpenFrame

License

OpenFrame OSS Tenant

OpenFrame OSS Tenant is the multi-service, multi-tenant open-source foundation of the OpenFrame platform — an AI-powered MSP (Managed Service Provider) platform built by Flamingo that replaces expensive proprietary software with intelligent automation.

It integrates device management, real-time messaging, AI-assisted support (Mingo AI for technicians, Fae for clients), and event-driven automation across a polyglot microservice architecture built on Spring Boot (Java) and Rust.

OpenFrame v0.7.8: Fleet MDM Integration & Platform Architecture Deep Dive


✨ Features


🏗️ Architecture

All client traffic passes through the Spring Cloud Gateway. Backend services communicate via HTTP/GraphQL internally and asynchronously via Kafka and NATS JetStream. The Rust agent communicates exclusively over NATS.

graph TB
    subgraph Clients["Client Layer"]
        FrontendUI["openframe-frontend\n(Web UI)"]
    end

    subgraph Gateway["Edge Layer"]
        GW["Gateway Service :8081\n(Spring Cloud Gateway)"]
    end

    subgraph CoreServices["Core Services"]
        API["API Service :8080\n(Spring Boot + GraphQL)"]
        AuthServer["Auth Server :8082\n(OAuth2 / OIDC)"]
        ExtAPI["External API :8083\n(Spring Boot REST)"]
        StreamSvc["Stream Service :8085\n(Kafka Streams)"]
        ClientSvc["Client Service :8084\n(Spring Boot + NATS)"]
    end

    subgraph AgentLayer["Agent Layer"]
        OFClient["openframe-client\n(Rust System Agent)"]
    end

    subgraph DataLayer["Data Layer"]
        Mongo[("MongoDB")]
        Cassandra[("Cassandra")]
        Pinot[("Apache Pinot")]
        Redis[("Redis")]
        Kafka[("Apache Kafka")]
        NATS[("NATS JetStream")]
    end

    FrontendUI --> GW
    GW --> API
    GW --> AuthServer
    GW --> ExtAPI
    API --> Mongo
    API --> Pinot
    API --> Kafka
    StreamSvc --> Kafka
    StreamSvc --> Cassandra
    StreamSvc --> Pinot
    ClientSvc --> Mongo
    ClientSvc --> NATS
    AuthServer --> Mongo
    OFClient --> NATS
    OFClient --> API

Core Components

Component Language Port Responsibility
API Service Java / Spring Boot 3.3 8080 REST + GraphQL APIs; tickets, dialogs, AI settings, tenant management
Authorization Server Java / Spring Authorization Server 8082 Multi-tenant OAuth2/OIDC; RSA-signed JWT issuance; SSO (Google, Microsoft)
Gateway Java / Spring Cloud Gateway 8081 Security enforcement, JWT validation, routing, WebSocket proxy
External API Java / Spring Boot 8083 Rate-limited public API endpoints with API key management
Stream Service Java / Kafka Streams 8085 Real-time event normalization, enrichment, Cassandra/Pinot writes
Client Service Java / Spring Boot + NATS 8084 Agent lifecycle management, tool orchestration
openframe-client Rust — Cross-platform system agent; device registration, script execution, self-update

🚀 Quick Start

Prerequisites

Clone and Build

# 1. Clone the repository
git clone https://github.com/flamingo-stack/openframe-oss-tenant.git
cd openframe-oss-tenant

# 2. Build all backend services (Java / Spring Boot)
mvn clean install -DskipTests

# 3. Build the Rust agent
cd clients/openframe-client
OPENFRAME_VERSION=0.0.0-dev cargo build

# 4. Return to root
cd ../..

Run a Backend Service

# Start the API service
mvn spring-boot:run -pl openframe/services/openframe-api

Verify the Rust Agent

./clients/openframe-client/target/debug/openframe-client --help

Agent Doctor Check

cd clients/openframe-client
./target/debug/openframe-client doctor

Install Agent as a System Service

sudo ./target/release/openframe-client install \
  --serverUrl https://your-openframe-instance.example.com \
  --initialKey YOUR_INITIAL_KEY \
  --orgId YOUR_ORG_ID

🛠️ Technology Stack

Layer Technology
Backend services Java 21, Spring Boot 3.3, Spring Cloud Gateway, Spring Authorization Server, Netflix DGS (GraphQL)
Endpoint agent Rust (stable), async-nats, tokio, Velopack
Event streaming Apache Kafka, Kafka Streams
Agent messaging NATS JetStream
Primary datastore MongoDB (multi-tenant, tenant-scoped)
Time-series storage Apache Cassandra
Real-time analytics Apache Pinot
Cache / sessions Redis
Shared UI library @flamingo-stack/openframe-frontend-core (npm)

📁 Repository Structure

openframe-oss-tenant/
├── openframe/
│   └── services/              # Spring Boot microservices
│       ├── openframe-api/     # Core REST + GraphQL API (port 8080)
│       ├── openframe-gateway/ # Spring Cloud Gateway (port 8081)
│       ├── openframe-authorization-server/ # OAuth2/OIDC (port 8082)
│       ├── openframe-external-api/         # Public API (port 8083)
│       ├── openframe-client/  # Agent lifecycle service (port 8084)
│       ├── openframe-stream/  # Kafka Streams (port 8085)
│       ├── openframe-management/
│       └── openframe-config/
├── clients/
│   └── openframe-client/      # Rust cross-platform agent
├── manifests/                 # Kubernetes manifests & data service configs
└── pom.xml                    # Parent Maven POM

🔧 CLI Tools

The OpenFrame CLI tools are maintained in a separate repository:


📚 Documentation

Full documentation is available in the docs/ directory:


🤝 Community

All support, feature requests, bug reports, and development discussions happen in the OpenMSP Slack community — GitHub Issues and GitHub Discussions are not used.


Built with 💛 by the Flamingo team

openframe-oss-tenant (flamingo-stack/openframe-oss-tenant)

Searching Database…

Что это такое?OpenFrame OSS Tenant — открытая мультиарендная основа OpenFrame, ИИ-платформы для MSP (поставщиков управляемых услуг), которая заменяет дорогое проприетарное RMM/саппорт-ПО интеллектуальной автоматизацией, управлением устройствами и поддержкой с помощью ИИ.
Это одно приложение или куча связанных сервисов?Это полиглотная микросервисная платформа: несколько бэкенд-сервисов Spring Boot (Java) (API, Gateway, Auth Server, Stream, Client) плюс отдельный агент для конечных точек на Rust, и всё это связано через Kafka, NATS и общие хранилища данных.
Как запустить это локально?Вы клонируете репозиторий, собираете Java-сервисы с Maven и Rust-агента с Cargo, затем запускаете отдельные бэкенд-сервисы и проверяете/устанавливаете Rust-агента как системный сервис, следуя разделу Quick Start.
Что должно быть установлено перед сборкой?Нужны JDK 21, Apache Maven 3.9+ и Rust 1.78+ (устанавливается через rustup), прежде чем вы сможете собрать любой из компонентов.
Self-hosting этого — быстрая настройка или настоящий проект?Запуск требует жонглирования семью бэкенд-сервисами плюс MongoDB, Cassandra, Apache Pinot, Redis, Kafka и NATS JetStream — единой строки Docker-compose не показано, только шаги сборки Maven/Rust для каждого сервиса, так что self-hosting требует серьёзной инфраструктурной работы.
Для кого создана эта платформа?Она создана для техников MSP, которым нужны удалённое управление, скриптинг (bash, PowerShell, Python, Nushell) и проверка соответствия на управляемых клиентских конечных точках, а также для клиентов, которых они обслуживают.
Работает ли агент конечных точек одинаково на Windows, macOS и Linux?Да, openframe-client на Rust работает как нативный системный сервис на всех трёх, выполняя скрипты, управляя инструментами и обновляясь самостоятельно через Velopack.
Как данные разделяются между разными клиентами (тенантами)?У каждого тенанта свои OAuth2-клиенты, JWT с подписью RSA и доступ к MongoDB в рамках тенанта через TenantAwareMongoTemplate, так что данные не перетекают через границы тенантов.
Что такое Mingo AI и что такое Fae?Mingo AI — ИИ-ассистент для техников MSP, а Fae — ИИ-ассистент для конечных клиентов; оба работают на потоковых LLM, которые выдают ответы в реальном времени.
Почему платформа использует и Kafka, и NATS?Apache Kafka (с Kafka Streams) обрабатывает надёжные высокообъёмные события вроде событий устройств и записей аналитики, а NATS JetStream переносит сообщения агентов с меньшей задержкой и потоковые фрагменты ответов ИИ.
Где инструменты OpenFrame CLI?Инструменты командной строки не в этом репозитории — они живут в отдельном проекте flamingo-stack/openframe-cli со своим руководством по установке и документацией.
Size
327.4 MB
Stars
1.1K
Age
1y
Commits · 90 Days