chat is a free, open source collaboration & communication project written in Go and released under GPL-3.0. It has 13,508 GitHub stars, 2,078 forks and 41 open issues, and was last pushed 5 days ago. On this registry it ranks #12 of 41 tracked projects in Collaboration & Communication, with 5 head-to-head comparisons available.

What is chat?

Tinode is an open-source, full-stack instant messaging server that pairs a Go backend with native iOS, Android, web, and command-line clients, built for developers and operators who want to run or federate their own messaging platform rather than rent one.

What it is

Tinode Instant Messaging Server is a complete messaging stack. The backend is written in pure Go and licensed under GPL 3.0, with clients for Android in Java, iOS in Swift, and the web in ReactJS, plus a scriptable command line client. All clients are licensed separately under Apache 2.0. The wire transport is JSON over websocket, with long polling also available, or protobuf with gRPC. Beyond the first-party clients, gRPC client support is provided for C++, C#, Go, Java, Node, PHP, Python, Ruby, and Objective-C. The project describes itself as beta-quality software: feature-complete and stable, but probably with a few bugs or missing features.

The concrete problem it addresses is federation in instant messaging. XMPP promised that anyone would be able to spin up an IM server capable of exchanging messages with any other XMPP server in the world, and that promise was never delivered, leaving instant messengers as a collection of incompatible walled gardens resembling AOL of the late 1990s. Tinode is meant as a replacement for XMPP, not a compatible implementation: on the surface it works much like an open source WhatsApp or Telegram. Its stated goal is to deliver on XMPP's original vision with an emphasis on mobile communication, and its secondary goal is a decentralized IM platform that is much harder for governments to track and block. It explicitly is not another Slack replacement.

Key capabilities

  • JSON over websocket transport, with long polling as an alternative, and protobuf over gRPC for clients that prefer it.
  • gRPC client support spanning C++, C#, Go, Java, Node, PHP, Python, Ruby, and Objective-C.
  • Native first-party clients: Tinodios for iOS in Swift, Tindroid for Android in Java, and TinodeWeb, a ReactJS single page web app.
  • A scriptable command line client for automation and headless use.
  • Chatbot support, indicated by the project's topic list alongside chatserver and messaging-api.
  • Server configuration through the tinode.conf file, with API documentation in docs/API.md, an FAQ in docs/faq.md, and translation guidance in docs/translations.md.
  • A public hosted service at web.tinode.co and a sandbox at sandbox.tinode.co with demo accounts.

Who uses it and how

  • Teams and individuals who want to install and run a messaging server for colleagues or friends, at work or at home, rather than depend on a hosted messenger.
  • Operators pursuing the federation and decentralization goals: a server meant to exchange messages across deployments and to resist tracking and blocking, rather than isolating users in one walled garden.
  • Mobile-first deployments, using Tinodios from the iOS App Store and Tindroid from the Play Store under the package co.tinode.tindroidx, with a debug APK published on the Android releases page.
  • Developers embedding messaging into their own products, using the documented API and gRPC clients in the language of their choosing.
  • Evaluators and newcomers trying the hosted service at web.tinode.co, which requires registering an account with a valid email address.

Getting started

Follow the general instructions in INSTALL.md, or the docker-specific instructions in docker/README.md, to install and run the server; a public hosted instance is available at web.tinode.co for those who only want to use it.

How it compares

Among named tools, Tinode positions itself as a replacement for XMPP/Jabber while remaining deliberately incompatible with it, so it is not a drop-in for existing XMPP infrastructure. On the surface it behaves like an open source WhatsApp or Telegram. It states plainly that it is not building yet another Slack replacement, so it should not be evaluated as a workplace collaboration suite.

When to use it — and when not to

The server is self-described as beta-quality, so a self-hoster is operating software that is feature-complete and stable but may still carry bugs or missing features, with configuration handled through tinode.conf and support routed to a Google group, GitHub issues, or paid commercial support. Teams looking for a Slack-style workspace product should look elsewhere, since that is an explicit non-goal, and anyone needing XMPP compatibility will not find it here. The Go backend is GPL 3.0 while the clients are Apache 2.0, so organisations with licence constraints should confirm the split suits their distribution model before committing.

project readme (upstream, from github) — read inline

Tinode Instant Messaging Server

Instant messaging full stack. Backend in pure Go (license GPL 3.0), clients for Android (Java), iOS (Swift), and web (ReactJS), as well as gRPC client support for C++, C#, Go, Java, Node, PHP, Python, Ruby, Objective-C, etc (all clients licensed under Apache 2.0). Wire transport is JSON over websocket (long polling is also available) or protobuf with gRPC.

This is beta-quality software: feature-complete and stable but probably with a few bugs or missing features. Follow instructions to install and run or use one of the cloud services below. Read API documentation.

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.

Why?

The promise of XMPP was to deliver federated instant messaging: anyone would be able to spin up an IM server capable of exchanging messages with any other XMPP server in the world. Unfortunately, XMPP never delivered on this promise. Instant messengers are still a bunch of incompatible walled gardens, similar to what AoL of the late 1990s was to the open Internet.

The goal of this project is to deliver on XMPP's original vision: create a modern open platform for federated instant messaging with an emphasis on mobile communication. A secondary goal is to create a decentralized IM platform that is much harder to track and block by the governments.

An explicit NON-goal: we are not building yet another Slack replacement.

Installing and running

See general instructions or docker-specific instructions.

Getting support

Helping out

  • If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.
  • Consider buying paid support: https://tinode.co/support.html
  • If you are a software developer, send us your pull requests with bug fixes and new features.
  • If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing feature requests you find most valuable.
  • If you speak a language other than English, translate the apps into your language. You may also review and improve existing translations.
  • If you are a UI/UX expert, help us polish the app UI.
  • Use it: install it for your colleagues or friends at work or at home.

Public service

A public Tinode service is available. You can use it just like any other instant messenger. Keep in mind that demo accounts present in sandbox are not available in the public service. You must register an account using valid email in order to use the service.

Web

TinodeWeb, a single page web app, is available at https://web.tinode.co/ (source). See screenshots below.

Android

Tinode for Android a.k.a Tindroid is stable and functional (source). See the screenshots below. A debug APK is also provided for convenience.

iOS

Tinode for iOS a.k.a. Tinodios is stable and functional (source). See the screenshots below.

Demo/Sandbox

A sandboxed demo service is available at https://sandbox.tinode.co/.

Log in as one of alice, bob, carol, dave, frank. Password is 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 @example.com, e.g. [email protected], phones are +17025550001 through +17025550009.

When you register a new account you are asked for an email address to send validation code to. For demo purposes you may use 123456 as a universal validation code. The code you get in the email is also valid.

Sandbox Notes

  • The sandbox server is reset (all data wiped) every night at 3:15am 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 log out and re-login. If the database was changed, delete the app then reinstall.
  • Sandbox 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 sandbox 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.
  • The default web app loads a single minified javascript bundle and minified CSS. The un-minified version is also available at https://sandbox.tinode.co/index-dev.html
  • Docker images with the same demo are available.
  • You are welcome to test your client software against the sandbox, hack it, etc. No DDoS-ing though please.

Features

Supported

  • Multiple native platforms:
  • 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.
    • Leave notes to self, bookmark (save) messages.
    • 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.
    • Pinned chats and messages.
    • Customizable message backgrounds (wallpapers).
    • Light/dark/system UI themes.
  • Administration:
    • 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:

readme truncated — read the full docs on github

Frequently asked questions

Is chat free to use?

chat is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does chat do?

Instant messaging platform. Backend in Go. Clients: Swift iOS, Java Android, JS webapp, scriptable command line; chatbots

What is chat written in?

chat is primarily written in Go. Its source is publicly available at https://github.com/tinode/chat, and it has 13,508 GitHub stars.