Tinode: Open-source Real-time Chat Server

Tinode: Open-source Real-time Chat Server
Photo by Alexander Shatov / Unsplash

Instant messaging server. Backend in pure Go (license GPL 3.0), client-side binding in Java, Javascript, and Swift, as well as gRPC client support for C++, C#, Go, Java, Node, PHP, Python, Ruby, Objective-C, etc. (license Apache 2.0). Wire transport is JSON over websocket (long polling is also available) for custom bindings, or protobuf with gRPC.

Tinode is not XMPP/Jabber. It is not compatible with XMPP. It's meant as a replacement for XMPP. On the surface, it's a lot like open source WhatsApp or Telegram.

Tindo supports many languages that include English, Chinese, French, German, Portuguese, Russian, Spanish and more.

User Features

  • One-on-one and group messaging.
  • Video and voice calls. Voice messages.
  • Channels with unlimited number of read-only subscribers.
  • All chats are synchronized across all devices.
  • Granular access control with permissions for various actions.
  • User search/discovery.
  • Rich formatting of messages markdown-style: *style* → style, with inline images, videos, file attachments.
  • Forms and templated responses suitable for chatbots.
  • Verified/staff/untrusted account markers.
  • Message status notifications: message delivery to server; received and read notifications; typing notifications.
  • Most recent message preview in contact list.
  • Server-generated presence notifications for people, group chats.
  • Forwarding and replying to messages.
  • Editing sent messages.

Administration Features

Granular access control with permissions for various actions.

  • Support for custom authentication backends.
  • Ability to block unwanted communication server-side.
  • Anonymous users (important for use cases related to tech support over chat).
  • Plugins to extend functionality, for example, to support moderation or chatbots.
  • Scriptable command-line tool for server administration.


Performance, reliability and development

Sharded clustering with failover.

  • Storage and out of band transfer of large objects like images or document files using local file system or Amazon S3 (other storage systems can be supported with media handlers).
  • JSON or protobuf version 3 wire protocols.


Bindings for various programming languages:

  • Javascript with no external dependencies.
  • Java with dependencies on Jackson and Java-Websocket. Suitable for Android but with no Android SDK dependencies.
  • Swift with no external dependencies.
  • C/C++, C#, Go, Python, PHP, Ruby and many other languages using gRPC.


Multiple database backend

  • Choice of a database backend. Other databases can be added with by writing adapters.
  • MySQL
  • PostgreSQL
  • MongoDB
  • RethinkDB


Supported platform

License

  • GPL-3.0 License

Resources

GitHub - tinode/chat: Instant messaging platform. Backend in Go. Clients: Swift iOS, Java Android, JS webapp, scriptable command line; chatbots
Instant messaging platform. Backend in Go. Clients: Swift iOS, Java Android, JS webapp, scriptable command line; chatbots - GitHub - tinode/chat: Instant messaging platform. Backend in Go. Clients:…

Read more