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

khanhtt/chat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

396 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

About

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

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 98.7%
  • Other 1.3%