Skip to content

Repository files navigation

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

  • AI-Assisted Support — Mingo AI for technicians and Fae for end clients, both powered by streaming LLMs with real-time response delivery
  • Cross-Platform Rust Agentopenframe-client runs as a system service on Windows, macOS, and Linux; supports script execution, tool management, and self-updating via Velopack
  • Multi-Tenant Architecture — Full tenant isolation with per-tenant OAuth2 clients, RSA-signed JWTs, and TenantAwareMongoTemplate database scoping
  • Real-Time Event Streaming — Apache Kafka + NATS JetStream for device events, script execution results, and AI message chunk delivery
  • Remote Management (RMM) — Script execution (bash, PowerShell, Python, Nushell), scheduling, live commands, and compliance checking across all managed endpoints
  • Integrated Tool Management — MeshCentral, FleetMDM, and custom tool agents orchestrated through the platform
  • SSO Support — Google and Microsoft OIDC integration via the Spring Authorization Server
  • GraphQL API — Netflix DGS-powered API service with full multi-tenant scoping
  • Open Source & Self-Hostable — Deploy and extend on your own infrastructure

🏗️ 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
Loading

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

  • JDK 21 (OpenJDK 21 recommended)
  • Apache Maven 3.9+
  • Rust 1.78+ (stable) — install via rustup

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

About

Code base for OSS OpenFrame single tenant version

Resources

Contributing

Security policy

Stars

62 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages