Skip to content
/ chat Public
forked from riandyrn/chat

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

License

Notifications You must be signed in to change notification settings

or-else/chat

 
 

Repository files navigation

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 http://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.
  • Basic sharded clustering.
  • Persistent message store, paginated message history.
  • Javascript bindings with no dependencies.
  • Android Java bindings (dependencies: jackson, nv-websocket-client)
  • Websocket and long polling transport.
  • JSON wire protocol.
  • User search/discovery.
  • 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.
  • Rich formatting of messages and media transfer.
  • Security: TLS for all communications plus OTR for one-on-one messaging and undecided method for group mesaging.
  • Group messaging with unlimited number of members with bearer token access control.
  • Failover/hot standby/replication.
  • 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

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 99.6%
  • Shell 0.4%