Skip to content
/ chat Public
forked from tinode/chat

Instant messaging server; backend in Go; Android, web command line clients; chatbots

License

Notifications You must be signed in to change notification settings

JingMeng/chat

 
 

Repository files navigation

Tinode Instant Messaging Server

Instant messaging server. Backend in pure Go (license GPL 3.0), custom client-side binding in Java and Javascript, as well as gRPC client support for C++, C#, Go, Java, Node, PHP, Python, Ruby, Objective-C (license Apache 2.0). Wire transport is JSON over websocket (long polling is also available) for custom bindings, or protobuf over plain TCP for gRPC. Persistent storage RethinkDB and MySQL (experimental). A third-party DynamoDB adapter also exists. Other databases can be supported by writing custom adapters.

Tinode is meant as a replacement for XMPP. On the surface it's a lot like open source WhatsApp or Telegram.

Version 0.14. This is beta-quality software: feature-complete but probably with a few bugs. Follow instructions to install and run. Read API documentation.

Demo

Web

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.

Android

Android demo is mostly stable and functional. See screenshots below. A debug APK is provided for convenience.

Command Line

A text-only command line client implements every possible command.

Notes

  • The demo server is reset (all data wiped) every night at 3:15 am Pacific time. An error message User not found or offline means the server was reset while you were connected. If you see it on the web, reload and relogin; on Android delete the app then reinstall.

  • User Tino is a basic chatbot which responds with a random quote to any message.

  • As generally accepted, when you register a new account you are asked for an email address. The server will send an email with a verification code to that address and you can use it to validate the account. To make things easier for testing, the server will also accept 123456 as a verification code. Remove line "debug_response": "123456" from tinode.conf to disable this option.

  • The demo server is configured to use ACME TLS implementation with hard-coded requirement for SNI. If you are unable to connect then the most likely reason is your TLS client's missing support for SNI. Use a different client.

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, web, and command line clients.
  • One-on-one messaging.
  • Group messaging with every member's access permissions managed individually. The maximum number of members is configurable (128 by default).
  • 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 external dependencies.
  • Java bindings (dependencies: jackson, nv-websocket-client). Suitable for Android but with no Android SDK dependencies.
  • Websocket, long polling, and gRPC over TCP transports.
  • JSON or protobuf version 3 wire protocols.
  • 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.
  • Plugins to enable chat bots.

Planned

  • iOS client bindings and client.
  • Options for transfer of large objects like video.
  • 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).

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; Android, web command line clients; chatbots

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 92.4%
  • Python 7.0%
  • Shell 0.6%