Code Monkey home page Code Monkey logo

chat's Introduction

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.

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. [email protected], phones are 17025550001 through 17025550009. The demo server is reset (all data wiped) every night at 3:15 am Pacific time. If you see an error message User not found or offline, it means the server was reset while you were connected. If yu see it just reload and relogin.

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

Android demo is mostly stable and functional. See screenshots below.

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

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

chat's People

Contributors

or-else avatar pkrs avatar riandyrn avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.