@startuml
skinparam backgroundcolor #f0ffff
skinparam titleBorderRoundCorner 15
skinparam titleBorderThickness 1
skinparam titleBorderColor DarkBlue
skinparam titleBackgroundColor Aqua-CadetBlue
skinparam titleFontSize 18
skinparam legendBackgroundColor Beige

title Topl Ecosystem
node "Bifrost (blockchain node)" as bifrost %lighten("LightGreen", 15) {
  component "Smart\nContract\nExecution" as execution #lightgreen
  component "Tetra\n(blockchain protocol)" as tetra #business
  component "Dion\n(blockchain protocol)" as dion #lightgreen

  interface "Dion\nAPI" as dion_api #lightgreen
  interface "Tetra\nAPI" as tetra_api #business

  component "levelDB" as ledger #LightCyan

  component "Brambl\n(client\nlibrary)" as b1 #lightgreen
  ledger -- dion
  ledger -- tetra
  ledger - execution
}

node "Ribn (wallet)" as ribn %lighten("LightGreen", 15) {
  component "Annulus\n(Web app\nBlockchain\nExplorer)" as annulus #lightgreen

  component SDK #LightYellow {
    component "Brambl\n(client\nlibrary)" as b2 #lightgreen
  }
}

SDK - dion_api
SDK - tetra_api
ribn -[hidden] bifrost

node "DAML\n(inbound integration\nwith databases and other blochains)" as DAML #LightYellow {
  component "Brambl (client library)" as b3 #lightgreen
}
dion_api -- DAML
tetra_api -- DAML

dion -- dion_api
tetra -- tetra_api

node "Genus (outbound transaction\nand block propagation)" as Genus %lighten("LightYellow", 2) {
  component "Chain Replicator" as replicator #LightYellow {
    component "Brambl\n(client\nlibrary)" as b4 #lightgreen
  }
  component "Transaction Extractor" as extractor #LightYellow
  interface "Genus\nsubscription\nAPI" as subscription #pink
  interface "Genus\ntransaction\nAPI" as genus_api #LightYellow
  interface "Genus\nblock\nAPI" as block_api #pink
  database "MongoDb\ntransaction\nmirror" as MongoDb #LightCyan
  database "Graph\ndatabase\nblock mirror" as gdb #LightCyan
  component subscription_manager #LightYellow {
    component RabitMQ  #LightCyan
    component Kafka  #LightCyan
    component "Other JMS\nmessage queue"  #LightCyan
  }
  subscription -- subscription_manager
  replicator -- gdb
  replicator - extractor
  extractor -- MongoDb
  subscription_manager - MongoDb
}

dion_api -- replicator
tetra_api -- replicator

annulus -- genus_api
annulus -- block_api
block_api -- replicator
genus_api -- extractor
execution -[hidden] DAML

legend bottom left
  | Color | Status |
  | <#LightGreen>| Exists now |
  | <#business>| Under development |
  | <#pink> | Future |
  | <#lightCyan> | Externally Sourced |
end legend
@enduml