/chat

Instant messaging server - backend in Go, client-side binding in Java and Javascript

Primary LanguageGoGNU General Public License v3.0GPL-3.0

Tinode Instant Messaging Server

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.

Why?

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.

Features

Supported

  • 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.

Planned

  • 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.

Screenshots

Android

android screenshot android screenshot

Desktop Web

Desktop web: full app

Mobile Web

Mobile web: contacts Mobile web: chat Mobile web: topic info Mobile web: start new 1:1 chat