We believe that good software architecture incorporates high cohesion and loose coupling. Discover how Foliage can help you implement those principles to transform your IT infrastructure.
Observability
Foliage helps you to see your IT landscape with a unified and extensible model, which simplifies and streamlines IT integration.
AIOps
We build Foliage as a solid foundation for AI-powered automation.
How it works
Functional Graph
Application Platform
Distributed Graph Database
Features
Graph DB & Functional Graph
Graph vertices used as data storage and edges are used for connectivity and data storage between objects. Functions can be fired by incoming signals in a context of vertice, and use edges to call functions on neighbor vertices.
Information & metainfo in one
Object types, link types, connectivity, functions, and applications—all stored within the same data graph. This enables seamless linkage between data and metadata, enhancing graph traversal and signal distribution based on data types.
Distributed event bus
All signals are asynchronous events in various topics in the clusterized event bus. The event bus is persistent, and implements “exactly ones” method of signal processing
Distributed async runtime
An application's runtime comprises asynchronous functions invoked on objects, with its business logic defined through call chain declarations that implement all use cases. Functions can be distributed across different geographic locations and logical execution runtimes as needed.
Serverless stateful functions
Functions are distributed across various runtimes on network-connected computing devices without centralized management. Each stateful function instance maintains its own persistent context for storing data between calls.
Persistent storage
The function context is persistently stored in the central core cluster, enabling asynchronous retrieval and restoration in case of function or application crashes or relocations. Each function maintains a dedicated context for every object, including graph vertices.
Graph as Signal Path
Graphs are used not only as data models, but as a way to propagate signals from one object to another. Signals can traverse one or many edges, depending to edge type and attributes.
Edge runtime-friendly
Functions can be fired directly on object controllers, such as BMC, PLC, RPi, etc. Function calls routed to edge runtime running on corresponding controller.
High performance
Up to 400.000 function calls per second on a mid-powered server. Can be scaled almost linearly by clusterization.
Graph Query Language
XPath-like Query Language for graph traversal and signal Distribution, enabling graph exploration, object discovery, and traversal route specification for signal distribution.
Mutable model
Applications can concurrently run with the existing graph functional model, mutating and extending it. They can share the existing graph-based data model for communication via edges, enhancing code reuse with powerful data model recycling.
No-code platform
No-Code Function and Application Building: Logic for both functions and applications can be declared using low-code/no-code approaches. For functions, use scripts or configuration files. For applications, opt for visual or configuration-based call chains.
Web UI
Build a flexible, no-code web UI for graph observation with a template-based toolkit, utilizing graphs as data models to create interactive UIs with graph objects and links.
Weighted Signal Propagation
Weighted functional graphs for scalar, vector and tensor signals propagation, and ML applications.