# xmpp thingies ## crates: - filamento: the client logic. handles commands and processes incoming stanzas. contains a message/user store. - lampada: the client structure. handles connection and reconnection, delegates command and incoming stanza processing to an implementor of Logic. - luz: jabber client connection and stream base types. - stanza: type definitions for converting to and from peanuts xml `Element`s for stanza parsing and composition. - jid: basic JID type, with parsing and display. #### separate: - [macaw](https://bunny.garden/macaw): gui client that utilises filamento - [peanuts](https://bunny.garden/peanuts): xml serialisation and deserialization library ## specs: - [x] rfc 6120: core - [x] rfc 6121: im - [x] rfc 7590: tls - [x] xep-0368: srv records for xmpp over tls - [ ] xep-0474: server side downgrade protection for sasl - [x] xep-0199: xmpp ping - [x] xep-0203: delayed delivery - [x] xep-0030: service discovery - [x] xep-0115: entity capabilities - [x] xep-0163: pep - [x] xep-0084: user avatar - [x] xep-0172: user nickname - [ ] xep-0280: message carbons - [ ] xep-0191: blocking - [ ] xep-0085: chat state notifications - [ ] xep-0428: fallback indication - [ ] xep-0359: unique and stable stanza ids - [ ] xep-0424: message retraction - [ ] xep-0308: last message correction - [ ] xep-0461: message replies - [ ] xep-0490: message displayed synchronization - [ ] xep-0333: displayed markers - [ ] xep-0184: message delivery receipts - [ ] xep-0012: last activity - [~] xep-0059: result set management - [x] xep-0300: use of cryptographic hash functions - [~] xep-0131: stanza headers - [ ] xep-0245: /me - [ ] xep-0313: mam - [ ] xep-0166: jingle - [ ] xep-0449: stickers - [ ] xep-0154: user profile - [ ] xep-0100: gateway interation #### user status: - [ ] xep-0107: user mood - [ ] xep-0108: user activity - [ ] xep-0118: user tune #### connection: - [ ] xep-0198: stream management - [ ] xep-0352: client state indication #### calls: - [ ] xep-0167: jingle rtp sessions - [ ] xep-0353: jingle message initiation - [ ] xep-0176: jingle ice-udp transport - [ ] xep-0320: use of dtls-srtp in jingle sessions - [ ] xep-0215: external service discovery (stun/turn) - [ ] xep-0293: jingle rtp feedback negotiation - [ ] xep-0294: jingle trp header extensions negotiation - [ ] xep-0338: jingle grouping framework - [ ] xep-0339: source-specific media attributes in jingle - [ ] privacy lists #### mix: - [ ] xep-0369: mix #### e2ee: - [ ] xep-0380: explicit message encryption - [ ] xep-0420: stanza content encryption - [ ] xep-0384: omemo - [ ] xep-0396: jingle encrypted transports omemo #### file/media sharing (further research needed): - [ ] xep-0363: http file upload - [ ] xep-0329: file information sharing - [ ] xep-0447: stateless file sharing - [ ] xep-0385: stateless inline media sharing - [ ] xep-0066: out of band data - [ ] xep-0261: jingle in-band bytestreams - [ ] xep-0234: jingle file transfer #### need more research: - [ ] message styling - [ ] xep-0071: xhtml-im - [ ] xep-0393: message styling - [ ] message routing NG #### will prioritise new spec instead of: - [ ] muc - [ ] xep-0045: muc - [ ] xep-0249: direct muc invitations - [ ] xep-0410: muc self-ping - [ ] xep-0402: pep native bookmarks - [ ] vcard legacy - [ ] xep-0292: vcard4 - [ ] xep-0398: user avatar compat - [ ] xep-0153: vcard avatars - [ ] xep-0054: vcard-temp - [ ] legacy bookmarks - [ ] xep-0048: legacy bookmarks - [ ] xep-0049: private xml storage #### pubsub: - [ ] xep-0060: pubsub - [ ] xep-0222: public data via pubsub - [ ] xep-0223: private data via pubsub #### later (nice to have): - [ ] xep-0077: in-band registration - [ ] xep-0157: contact addresses - [ ] xep-0455: service outage status - [ ] web compliance: rfc 7395, xep-0206, xep-0124, xep-0156 - [ ] mobile compliance - [ ] xep-0357: push notifications - [ ] xep-0286: mobile considerations - [ ] client connection optimisations - [ ] xep-0386: bind 2.0 - [ ] xep-0409: im routing-ng - [ ] xep-0397: instant stream resumption - [~] xep-0390: entity capabilities 2.0 - [ ] improved on-boarding - [ ] xep-0401: easy user onboarding - [ ] xep-0379: pre-authenticated roster subscription - [ ] xep-0445: pre-authenticated in-band registration - [ ] portability - [ ] xep-0227: portable import-export - [ ] xep-0283: moved - [ ] modern auth - [ ] xep-0388: extensible sasl profile (sasl 2.0) - [ ] xep-xxxx: oauth client login - [ ] xep-xxxx: client access management #### to write: - [ ] some xmpp user avatar metadata nodes published as jpeg??? - [ ] need to specify user avatar id as hexadecimal - [ ] do disco results always have to be in the right order? and can you not both have a normal and a +notify? - [ ] advanced message body (for custom emoji, styling, etc.). can opt in to mixed content in message body. base as bold, italic, underline, strikethrough, then extensible with new tags for e.g. emoji, color, size, font, chat effects. - [ ] omemo cross-signing verification or something along those lines, with a main device and linked devices. safety numbers. - [ ] better stable ids....? - [ ] better stickers/emoji xep - [ ] mix voice channels (w/ sfu) - [ ] mix guilds - [ ] pep native spaces - [ ] pinned messages - [ ] chat settings - [ ] encrypted chat history share - [ ] disappearing messages - [ ] poke - [ ] polls - [ ] privacy lists/circles - [ ] pubsub node items filter for each person