|
| 1 | +== XMPP Client Library |
| 2 | + |
| 3 | +To communicate via XMPP from the client via Websockets or Bosh an existing client library shall be used to benefit from an existing implementation. |
| 4 | + |
| 5 | +Primarily, the following aspects are relevant for the decision, ordered by priority: |
| 6 | + |
| 7 | +. Community Support: How well is the project maintained |
| 8 | +. Plugin API: Is it easy to create or replace existing plugins |
| 9 | +. TypeScript binding: Are there existing TypeScript bindings? |
| 10 | + |
| 11 | +=== Considered Options |
| 12 | + |
| 13 | +* stanza.io |
| 14 | +* strophe.js |
| 15 | + |
| 16 | +=== Decision Outcome |
| 17 | + |
| 18 | +Chosen option: stanza.io, because it offers solid community support and provides a clean plugin API with minimal dependencies. |
| 19 | +Although strophe.js has a more active community, some plugins have dependencies on jQuery and are implemented in CoffeeScript. |
| 20 | +That is the main reason why we selected stanza.io over strophe.js. |
| 21 | + |
| 22 | +To fully benefit from TypeScript, we could implement the TypeScript bindings. https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html[] |
| 23 | + |
| 24 | +=== Evaluations of the Options |
| 25 | + |
| 26 | +==== stanza.io |
| 27 | + |
| 28 | +. Community Support |
| 29 | + * > 20 Contributors |
| 30 | + * primarily maintained by one person |
| 31 | + * Project receives frequent updates since 2014 |
| 32 | + * Used by 40 Repos and 3 Packages (2018-04-10) |
| 33 | + * > 10 Pull-Requests closed/merged since 2017-01-01 |
| 34 | +. Plugin API |
| 35 | + * New plugins can easily be added |
| 36 | + * Existing plugins can be replaced |
| 37 | +. TypeScript binding |
| 38 | + * No TypeScript bindings exist |
| 39 | + |
| 40 | +==== strophe.js |
| 41 | + |
| 42 | +. Community Support (only core repository) |
| 43 | + * > 50 Contributors |
| 44 | + * minor fixes in the last year by different contributors |
| 45 | + * Project regularly updated since 2008 |
| 46 | + * Used by >90 Repos and >20 Packages (2018-04-10) |
| 47 | + * > 25 Pull-Requests closed/merged since 2017-01-01 |
| 48 | +. Plugin API |
| 49 | + * Some Plugins depend on jQuery |
| 50 | + * Minimal core allows to add and replace existing plugins simply |
| 51 | + * Many plugins are written in CoffeeScript (whereas the core is in JavaScript) |
| 52 | +. TypeScript binding |
| 53 | + * Bindings for the core exist (not tested!), see https://www.npmjs.com/package/@types/strophe[@types/strophe on NPM] |
0 commit comments