Tinode is a modern messaging platform designed for real-time communication. It supports text, media, and file exchanges, offering features like typing indicators, read receipts, and rich-text formatting. Tinode is optimized for speed and scalability, making it suitable for both personal and professional use. It supports various messaging patterns, including one-on-one chats, group discussions, and public channels.
Key Features
- Multiple native platforms:
- Android (Java)
- iOS (Swift)
- Web (React.js)
- Scriptable command line (Python)
- 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:
- 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:
- Choice of a database backend. Other databases can be added with by writing adapters.