Instant messaging server. Backend in pure Go (license GPL 3.0), client-side binding in Java for Android and Javascript (license Apache 2.0), persistent storage RethinkDB, JSON over websocket (long polling is also available). Tinode is meant as a replacement for XMPP. Overall it's a lot like open source WhatsApp or Telegram.
Version 0.13. This is beta-quality software: feature-complete but probably with a few bugs. Follow instructions to install and run. Read API documentation.
A javascript demo is (usually) available at https://api.tinode.co/x/example-react-js/ (source). Login as one of alice
, bob
, carol
, dave
, frank
. Password is <login>123
, e.g. login for alice
is alice123
. You can discover other users by email or phone by prefixing them with email:
or tel:
respectively. Emails are <login>@example.com
, e.g. alice@example.com
, phones are 17025550001
through 17025550009
. The demo server is reset (all data wiped) every night at 3:15 am Pacific time.
Android demo is mostly stable and functional. See screenshots below.
XMPP is a mature specification with support for a very broad spectrum of use cases developed long before mobile became important. As a result most (all?) known XMPP servers are difficult to adapt for the most common use case of a few people messaging each other from mobile devices. Tinode is an attempt to build a modern replacement for XMPP/Jabber focused on a narrow use case of instant messaging between humans with emphasis on mobile communication.
- Android and web clients.
- One-on-one messaging.
- Group messaging with currently unlimited number of members where every member's access permissions are managed individually. The maximum number of members will be limited to a reasonably high value in the future (256? configurable?).
- Topic access control with permissions for various actions.
- Server-generated presence notifications for people, topics.
- Sharded clustering with failover.
- Persistent message store, paginated message history.
- Javascript bindings with no dependencies.
- Java bindings (dependencies: jackson, nv-websocket-client). Suitable for Android but with no Android SDK dependencies.
- Websocket and long polling transport.
- JSON wire protocol.
- TLS with Letsenrypt or conventional certificates.
- User search/discovery.
- Rich formatting of messages, markdown-style: *style* → style.
- Inline images and file attachments.
- Message status notifications: message delivery to server; received and read notifications; typing notifications.
- Support for client-side caching.
- Ability to block unwanted communication server-side.
- Authentication support customizable at compile time.
- Anonymous users (important for use cases related to tech support over chat).
- Mobile push notifications using FCM.
- iOS client bindings and client.
- Video and other media transfer.
- End to end encryption with OTR for one-on-one messaging and undecided method for group messaging.
- Group messaging with unlimited number of members with bearer token access control.
- Hot standby.
- Federation.
- Different levels of message persistence (from strict persistence to "store until delivered" to purely ephemeral messaging).
- Support for binary wire protocol.
- Support for other SQL and NoSQL backends.
- Plugins to enable chat bots.