diff --git a/content/_img-sources/ecosystem.uxf b/content/_img-sources/ecosystem.uxf
new file mode 100644
index 0000000000..70195c4f0b
--- /dev/null
+++ b/content/_img-sources/ecosystem.uxf
@@ -0,0 +1,411 @@
+
+
+ 10
+
+ UMLGeneric
+
+ 550
+ 540
+ 200
+ 90
+
+ halign=left
+
+rippled server
+
+
+
+ Relation
+
+ 580
+ 480
+ 50
+ 80
+
+ lt=()-[WS]
+ 20.0;10.0;20.0;60.0
+
+
+ UMLGeneric
+
+ 350
+ 360
+ 170
+ 70
+
+ halign=left
+
+ripple-lib (JavaScript)
+
+
+
+ Relation
+
+ 640
+ 480
+ 90
+ 80
+
+ lt=()-[JSON-RPC]
+ 40.0;10.0;40.0;60.0
+
+
+ Relation
+
+ 420
+ 420
+ 210
+ 80
+
+ lt=)-
+ 180.0;50.0;180.0;30.0;10.0;10.0
+
+
+ UMLClass
+
+ 290
+ 90
+ 480
+ 70
+
+ Apps & Services
+(Exchanges, wallets, explorers, etc.)
+bg=white
+style=wordwrap
+transparency=0
+group=1
+
+
+
+ UMLClass
+
+ 280
+ 80
+ 480
+ 70
+
+ bg=white
+transparency=0
+group=1
+
+
+
+ Relation
+
+ 580
+ 150
+ 50
+ 350
+
+ lt=)-
+ 20.0;320.0;20.0;10.0
+
+
+ UMLGeneric
+
+ 350
+ 240
+ 130
+ 70
+
+
+halign=left
+Data API*
+
+
+
+ Relation
+
+ 360
+ 300
+ 120
+ 80
+
+ lt=[RippleAPI]-
+ 70.0;60.0;10.0;30.0;10.0;10.0
+
+
+ Relation
+
+ 360
+ 190
+ 90
+ 70
+
+ lt=()-[REST-like]
+ 40.0;10.0;40.0;50.0
+
+
+ Text
+
+ 670
+ 570
+ 50
+ 50
+
+ valign=center
+halign=center
+
+
+fontsize=7.5
+Internal
+DBs
+bg=white
+transparency=0
+customelement=
+// DB Symbol
+drawArc(0,0,width,height*2/5,0,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
+drawArc(0,0,width,height*2/5,180,180,true) fg=black //Parameters (x, y, width, height, start, extent, open)
+drawLine(0,height/5,0,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
+drawLine(width,height/5,width,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
+drawArc(0,height*3/5,width,height*2/5,180,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
+
+
+
+ UMLClass
+
+ 270
+ 70
+ 480
+ 70
+
+ bg=white
+transparency=0
+group=1
+
+
+
+ Relation
+
+ 380
+ 150
+ 50
+ 60
+
+ lt=)-
+ 20.0;30.0;20.0;10.0
+
+
+ Relation
+
+ 400
+ 150
+ 140
+ 230
+
+ lt=-
+ 10.0;210.0;120.0;180.0;120.0;10.0
+
+
+ Relation
+
+ 660
+ 150
+ 50
+ 350
+
+ lt=)-
+ 20.0;320.0;20.0;10.0
+
+
+ Text
+
+ 290
+ 250
+ 50
+ 50
+
+ valign=center
+halign=center
+
+
+fontsize=7.5
+Relational
+DBs
+bg=white
+transparency=0
+customelement=
+// DB Symbol
+drawArc(0,0,width,height*2/5,0,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
+drawArc(0,0,width,height*2/5,180,180,true) fg=black //Parameters (x, y, width, height, start, extent, open)
+drawLine(0,height/5,0,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
+drawLine(width,height/5,width,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
+drawArc(0,height*3/5,width,height*2/5,180,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
+
+
+
+ Relation
+
+ 470
+ 600
+ 120
+ 30
+
+ lt=[Peer]-[Peer]
+ 90.0;10.0;20.0;10.0
+
+
+ UMLGeneric
+
+ 300
+ 560
+ 200
+ 70
+
+ rippled servers
+(direct & indirect peers)
+halign=left
+
+
+
+ Relation
+
+ 280
+ 540
+ 220
+ 90
+
+
+ 20.0;70.0;10.0;70.0;10.0;10.0;200.0;10.0;200.0;20.0
+
+
+ Relation
+
+ 270
+ 530
+ 220
+ 90
+
+
+ 20.0;70.0;10.0;70.0;10.0;10.0;200.0;10.0;200.0;20.0
+
+
+ Relation
+
+ 330
+ 260
+ 40
+ 40
+
+
+ 10.0;20.0;20.0;20.0
+
+
+ Text
+
+ 80
+ 90
+ 160
+ 40
+
+ *Apps & Services*
+style=wordwrap
+
+
+
+ Relation
+
+ 40
+ 190
+ 830
+ 30
+
+ lt=..
+ 10.0;10.0;810.0;10.0
+
+
+ Text
+
+ 80
+ 250
+ 160
+ 40
+
+ *Middleware APIs*
+style=wordwrap
+
+
+
+ Relation
+
+ 40
+ 320
+ 830
+ 30
+
+ lt=..
+ 10.0;10.0;810.0;10.0
+
+
+ Text
+
+ 80
+ 370
+ 160
+ 40
+
+ *Programming Libraries*
+style=wordwrap
+
+
+
+ Relation
+
+ 40
+ 480
+ 830
+ 30
+
+ lt=..
+ 10.0;10.0;810.0;10.0
+
+
+ Text
+
+ 80
+ 510
+ 160
+ 70
+
+ *Peer-to-Peer Network*
+style=wordwrap
+
+
+
+ Relation
+
+ 840
+ 30
+ 30
+ 670
+
+ lt=..
+ 10.0;650.0;10.0;10.0
+
+
+ UMLClass
+
+ 270
+ 510
+ 500
+ 150
+
+ lt=.
+halign=left
+ XRP Ledger
+
+
+
+ Text
+
+ 350
+ 280
+ 130
+ 30
+
+ style=wordwrap
+fontsize=8
+*Do not use for mission-critical services.
+
+
+
diff --git a/content/concepts/introduction/software-ecosystem.md b/content/concepts/introduction/software-ecosystem.md
index a8b677cc4d..d217c49f35 100644
--- a/content/concepts/introduction/software-ecosystem.md
+++ b/content/concepts/introduction/software-ecosystem.md
@@ -4,11 +4,15 @@ The XRP Ledger is home to a deep, layered ecosystem of software projects powerin
## Stack Levels
-The [core of the XRP Ledger](#rippled-the-core-server) is a peer-to-peer network of always-on servers sharing transactions, engaging in the [consensus process](consensus.html) and processing [transactions](transaction-basics.html). Everything else in the XRP Ledger ecosystem is ultimately built on top of this peer-to-peer network, directly or indirectly.
+[](img/ecosystem.png)
-[_Programming libraries_](#programming-libraries) exist in higher level software, where they are imported directly into program code, and contain premade implementations of routines to access the XRP Ledger.
+- The [basis of the XRP Ledger](#rippled-the-core-server) is a peer-to-peer network of always-on servers sharing transactions, engaging in the [consensus process](consensus.html) and processing [transactions](transaction-basics.html). Everything else in the XRP Ledger ecosystem is ultimately built on top of this peer-to-peer network, directly or indirectly.
-[_Middleware services_](#middleware) provide indirect access to XRP Ledger data, frequently with their own data storage and processing.
+- [_Programming Libraries_](#programming-libraries) exist in higher level software, where they are imported directly into program code, and contain premade implementations of routines to access the XRP Ledger.
+
+- [_Middleware_](#middleware) provides indirect access to XRP Ledger data. Applications in this layer frequently have their own data storage and processing.
+
+- [_Apps and Services_](#apps-and-services) provide user-level interaction with the
### rippled: The Core Server
@@ -35,9 +39,23 @@ The [Data API](data-api.html) is an example of a middleware service on top of th
+
### Apps and Services
+Atop the stack is where the truly exciting things happen. Apps and services provide a way for users and devices to connect to the XRP Ledger. At this level, [exchanges list XRP](list-xrp-in-your-exchange.html), [gateways issue other currencies](become-an-xrp-ledger-gateway.html) for use in the decentralized exchange, and wallets provide user interfaces for buying, selling, or just HODLing holding XRP. Many other possibilities exist, including additional services layered even higher.
+
+A great way to build applications that are compatible with not only XRP but lots of other ways of denominating value is to use the [Interledger Protocol][] with settlement in XRP.
+
+There are numerous other examples of projects using XRP and adjacent technologies to interact with users. Ripple's enterprise customers already have the option to use XRP through [on-demand liquidity services](https://www.ripple.com/ripplenet/on-demand-liquidity/). For more examples of businesses and software built on the XRP Ledger, see [Xpring Partners](https://xpring.io/#partners) or XRPChat's excellent [Links & Resources](https://www.xrpchat.com/links/) listing.
+
+
## See Also
+- [Xpring Partners](https://xpring.io/#partners)
- [Technical FAQ](technial-faq.html)
- [XRPChat Links & Resources](https://www.xrpchat.com/links/) - Includes updated lists of gateways and exchanges, wallets and storage, apps, and more.
+
+
+{% include '_snippets/rippled-api-links.md' %}
+{% include '_snippets/tx-type-links.md' %}
+{% include '_snippets/rippled_versions.md' %}
diff --git a/img/ecosystem.png b/img/ecosystem.png
new file mode 100644
index 0000000000..1d445f95c0
Binary files /dev/null and b/img/ecosystem.png differ