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

Overview

Tinode Instant Messaging Server

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. Persistent storage is any one of RethinkDB, MySQL or MongoDB. A third-party unsupported DynamoDB adapter also exists. Other databases can be supported by writing custom adapters.

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.

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

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.

Installing and running

See general instructions or docker-specific instructions.

Getting support

Public service

A public Tinode service is now 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. Currently available in English, Simplified Chinese, Korean, Russian, Spanish. More translations are welcome.

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. Currently available in English, Simplified Chinese, Korean, Russian, Spanish. More translations are welcome.

iOS

Tinode for iOS a.k.a. Tinodios is stable and functional (source). See the screenshots below. Currently available in English, Simplified Chinese, Spanish. More translations are welcome.

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 <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.

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 platforms:
  • One-on-one and group messaging.
  • Channels with an unlimited number of read-only subscribers.
  • Sharded clustering with failover.
  • Granular access control with permissions for various actions.
  • Server-generated presence notifications for people, group chats.
  • Support for custom authentication backends.
  • 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 dependency on SwiftWebSocket.
    • C/C++, C#, Go, Python, PHP, Ruby and many other languages using gRPC.
  • Websocket, long polling, and gRPC over TCP or Unix sockets.
  • JSON or protobuf version 3 wire protocols.
  • User search/discovery.
  • Rich formatting of messages markdown-style: *style* → style.
  • Inline images, file attachments.
  • Forms and templated responses suitable for chatbots.
  • Message status notifications: message delivery to server; received and read notifications; typing notifications.
  • Ability to block unwanted communication server-side.
  • Anonymous users (important for use cases related to tech support over chat).
  • Storage and out of band transfer of large objects like video files using local file system or Amazon S3.
  • Plugins to extend functionality, for example, to enable chatbots.

Planned

  • Federation.
  • End to end encryption with OTR for one-on-one messaging and undecided method for group messaging.
  • Replying and forwarding messages.
  • Voice and video messages, location sharing.
  • Previews of attached videos, documents, links.
  • Hot standby.
  • Different levels of message persistence (from strict persistence to "store until delivered" to purely ephemeral messaging).

Translations

All client software has support for internationalization. Translations are provided on all platforms for English, Simplified Chinese, Spanish. On all but iOS: Russian, Korean, German. More translations are welcome. Particularly interested in Arabic, Vietnamese, Persian, Indonesian, Portuguese, Hindi, Bengali.

Third-Party Licenses

Screenshots

Android

Android screenshot: list of chats Android screenshot: one conversation Android screenshot: account settings

iOS

iOS screenshot: list of chats iOS screenshot: one conversation iOS screenshot: account settings

Desktop Web

Desktop web: full app

Mobile Web

Mobile web: contacts Mobile web: chat Mobile web: topic info

SEO Strings

Words 'chat' and 'instant messaging' in Chinese, Russian, Persian and a few other languages.

  • 聊天室 即時通訊
  • чат мессенджер
  • インスタントメッセージ
  • 인스턴트 메신저
  • پیام رسان فوری
  • تراسل فوري
  • Nhắn tin tức thời
  • anlık mesajlaşma sohbet
  • mensageiro instantâneo
  • pesan instan
  • mensajería instantánea
Comments
  • How to create group using CLI and add multiple user to that group

    How to create group using CLI and add multiple user to that group

    Subject of the issue

    I want to create/delete the group and add/remove multiple users to that group using CLI.

    Is this a bug report of a feature request?

    Feature request

    Your environment

    Server-side

    Your own setup:

    • platform = Windows server 2012
    • version of tinode server, e.g. 0.15.2-rc3
    • database backend = MySQL

    Client-side

    • [x] TinodeWeb/tinodejs: javascript client
      • Browser make and version.
    • [x] tn-cli
      • Python version 2.7
    • [x] Chatbot
      • Python version 2.7
    • Version of the client, e.g. 0.15.7
    question documentation 
    opened by admill1519 83
  • Cluster mode, group message sending error

    Cluster mode, group message sending error

    tinode version v0.16.5-rc1

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x70 pc=0xaf8bd1]
    
    goroutine 1645 [running]:
    main.(*Cluster).Route(0xc000074c80, 0xc0002a18c0, 0xc0002b5b13, 0x0, 0x0)
    	/Users/mike/golang/poizon/duims/cluster.go:411 +0x51
    reflect.Value.call(0xc0000be780, 0xc0000bc650, 0x13, 0xd608d2, 0x4, 0xc0001b3f08, 0x3, 0x3, 0x0, 0x0, ...)
    	/Users/mike/.gvm/gos/go1.14.1/src/reflect/value.go:460 +0x8ab
    reflect.Value.Call(0xc0000be780, 0xc0000bc650, 0x13, 0xc0001ed708, 0x3, 0x3, 0x0, 0x0, 0x0)
    	/Users/mike/.gvm/gos/go1.14.1/src/reflect/value.go:321 +0xb4
    net/rpc.(*service).call(0xc0000c1bc0, 0xc000074050, 0xc0001900c8, 0xc0001900f0, 0xc00010e380, 0xc0001d3240, 0xbbf1a0, 0xc0002a18c0, 0x16, 0xbb21e0, ...)
    	/Users/mike/.gvm/gos/go1.14.1/src/net/rpc/server.go:377 +0x17f
    created by net/rpc.(*Server).ServeCodec
    	/Users/mike/.gvm/gos/go1.14.1/src/net/rpc/server.go:474 +0x42b
    

    meesage err:

    panic: interface conversion: interface {} is []uint8, not *main.ServerComMessage
    
    goroutine 218 [running]:
    main.(*Session).rpcWriteLoop(0xc000456140)
    	/Users/mike/golang/poizon/duims/cluster.go:764 +0x60e
    created by main.(*Cluster).Master
    	/Users/mike/golang/poizon/duims/cluster.go:363 +0x46f
    2020/04/14 20:41:21 Server v0.16:/data/tinode/duims-linux:undef; pid 6511; 4 process(es)
    
    bug incomplete cannot reproduce 
    opened by hhy5861 43
  • Problems found in Android app

    Problems found in Android app

    The project looks impressing but I can not understand some things.

    Yesterday I installed Android application on 2 telephones (user1, user2) but still can not find out how both telephones can chat.

    First of all I was trying to find "user2" from first phone. I searched by username, by the 6 character code that appears in section "security", by the code that starts with "usr" and looks like this - usrUig6RtjGtH. I was not able to find the second user. I was trying it on both phones. I got message saying "Topic not found".

    Today in some way (I really didn't understand how) I found "user1" in phone 2. Sent a message to "user1". User1 got my message but can not read it. Over the conversation appeared message "No access to new messages" and below "Not available". I tried to tap the screen to see possible options but nothing appeared. After some time message that says that there is no access to new messages disappeared and I was able to send a message. When I did it, the same happened for "user1" - "no access to new messages". When I return to the conversatons list, I see "You have no chats" message. I go to "find" and under "phone contacts" I see the disappeared conversation. I open the conversation, send a message. Second user gets it, however conversation's not appear in the conversations list. User have to go to contacts to see the conversation.

    Conversation periodically appears in the conversations list and then disappears again and is accessible only via contacts section. Conversations periodically are blocke with message "No access to new messages".

    Online status and push notifications don't work correctly.

    User1 access the app, then closes the app; phone screen is off. Some 3 minutes user2 still sees that user1 is online. When user2 sends a message to the user1 during this time, there is no push notification at all and user 1 can not know that he has new messages because phone screen is off.

    When user closes the app or phone's screen if off, "online" status should disappear immediately.

    Sometimes push notification arrive but there is no sound and I can not understand the pattern how notifications work in Tinode.

    The name of received file in push notification looks uggly. It should display a thubnail of received image ir just "image", "file" as it works in all messengers, but not he file name.

    Create a group. Add 1 user. Send a message. In my phone everything ok, but in the phone of added users, there s a mark "not found" below the received group message.

    bug 
    opened by sanmiguel2019 29
  • Emergency clusterWriteLoop addProxiedSession panic error

    Emergency clusterWriteLoop addProxiedSession panic error

    2020/10/14 21:55:15 cluster: stop msg received - multi sid usrF6DZPtYyirM-node-02
    2020/10/14 21:55:15 cluster: session proxy closed usrF6DZPtYyirM-node-02
    panic: runtime error: index out of range [0] with length 0
    
    goroutine 229 [running]:
    main.(*Topic).clusterWriteLoop(0xc0005d1d40)
    	/Users/mike/golang/poizon/duinfr/dewu-chat/server/cluster.go:1137 +0xa62
    created by main.(*Topic).addProxiedSession
    	/Users/mike/golang/poizon/duinfr/dewu-chat/server/topic.go:3125 +0xb03
    

    image

    image

    bug 
    opened by hhy5861 26
  • User will be lost if tinode-mysql container will be redeployed

    User will be lost if tinode-mysql container will be redeployed

    I redeploy the tinode app container and lose all my users. Auth error 401. Existing user (database isn't deleted and container still exists and is used) can be re-registered. I think it refresh the database during update / (re-)deploy?

    Is there a way to keep the existing data / user during tinode update / redeploy?

    opened by pwFoo 25
  • [Ask Purpose of Access Control on P2P Topic]

    [Ask Purpose of Access Control on P2P Topic]

    Hello, Gene

    I have question regarding purpose of access control on P2P topic. So what is the purpose of it anyway?

    The reason why I ask this question is because I found that the purpose stated in documentation is somewhat contradict with the implementation written on code. So with this question I would like to validate what I found because I think it is very fundamental.

    In documentation (see here) I found that the purpose of it is for managing presence + banning user from initiating or continuing P2P conversation. So if there are user1 & user2 which have P2P connection, then after sometime user2 would like to block message from user1, then user2 would be just only need to remove “W” permission from user1.

    But based on current implementation it is not possible to achieve that purpose. The reason is in current implementation it is not possible to change others permission on P2P topic, it is just for setting user own permission for filtering the data retrieved by user itself (which I personally think is somewhat useless on this context).

    So in above case, user2 would only able to manage its own permission, so does with user1, so they cannot block each other in case they want to do it.

    So which purpose is true? Managing the P2P connection or just for filtering data retrieved from the context? Or maybe you have another design decision?

    Thanks a lot, Gene.

    opened by riandyrn 25
  • after user update `desc`, subscribers get old data on get requests [RESOLVED]

    after user update `desc`, subscribers get old data on get requests [RESOLVED]

    Update topics data in globals.hub.topics

    Two users have subscribed to each other. One of them updates the name in the desc field. Its subscriber receives a udp message and requests user data. In response, it receives an irrelevant name.

    Your environment

    Server-side

    • version of Tinode server [v0.18.5]
    • database backend rethinkdb
    • cluster

    Steps to reproduce

    1. subscribe
    pbx.ClientMsg{
    	Message: &pbx.ClientMsg_Sub{
    		Sub: &pbx.ClientSub{
    			Id:       "sub topic",
    			Topic:    "USER_1_ID",
    			GetQuery: &pbx.GetQuery{What: "desc"},
    		},
    	},
    }
    
    pbx.ClientMsg{
    	Message: &pbx.ClientMsg_Sub{
    		Sub: &pbx.ClientSub{
    			Id:       "sub topic",
    			Topic:    "USER_2_ID",
    			GetQuery: &pbx.GetQuery{What: "desc"},
    		},
    	},
    }
    
    1. user 2 update name
    pbx.ClientMsg{
    	Message: &pbx.ClientMsg_Set{
    		Set: &pbx.ClientSet{
    			Topic: "me",
    			Query: &pbx.SetQuery{Desc: &pbx.SetDesc{Public: []byte("{\"fn\":\"TEST\"}")}},
    		},
    	},
    }
    
    1. user 1 receive UPD message from user 2
    2. user 1 request user 2 data
    pbx.ClientMsg{
    	Message: &pbx.ClientMsg_Get{
    		Get: &pbx.ClientGet{
    			Id:    "get",
    			Query: &pbx.GetQuery{What: "desc"},
    			Topic: "USER_2_ID",
    		},
    	},
    }
    

    Expected behaviour

    User 1 gets the new name

    Actual behaviour

    User 1 gets the old name. After resubscribing and get request, user 1 gets a new name.

    Research

    Local cache not updated https://github.com/tinode/chat/blob/master/server/topic.go#L1947

    question 
    opened by BrRenat 23
  • Mongodb adapter branch (in development)

    Mongodb adapter branch (in development)

    Almost 80% of the adapter has already been done, only some complex (for me) methods and creating indexes remain. I didn't use the context (context.Background() everywhere), I just didn't figure out how to use them here.

    opened by Googlom 23
  • I can find users, but can not create new chat

    I can find users, but can not create new chat

    I did steps :

    1. download release for mysql
    2. ran mysql
    3. set the password and username of mysql in tinode.conf file
    4. ran ./init-db -data=data.json
    5. ran ./tinode
    6. visited http://localhost:6060/
    7. created two users, and found each other with tag basic:

    So far, everything is fine.

    BUT when I click the username in the list , something wrong here.

    the page show "Unnamed" and "no access to messages".

    is there a problem with my installation? Thank u.

    there are some logs below:

    2019/05/14 16:12:18 Server v0.15:/Users/zeta/workspace/tinode-re/tinode:v0.15.14; db: 'mysql'; pid 96762; 4 process(es)
    2019/05/14 16:12:18 Using config from '/Users/zeta/workspace/tinode-re/tinode.conf'
    2019/05/14 16:12:18 Running as a standalone server.
    2019/05/14 16:12:18 Restricted tags: ['email' 'tel']
    2019/05/14 16:12:18 plugins: no active plugins found
    2019/05/14 16:12:18 gRPC/1.20.0-dev server is registered at [:6061]
    2019/05/14 16:12:18 Serving static content from '/Users/zeta/workspace/tinode-re/static' at '/'
    2019/05/14 16:12:18 Large media handling enabled fs
    2019/05/14 16:12:18 stats: variables exposed at '/debug/vars'
    2019/05/14 16:12:18 Listening for client HTTP connections on [:6060]
    2019/05/14 16:12:30 ws: session started phn9EMTMtW8 1
    2019/05/14 16:12:30 in: '{"hi":{"id":"110329","ver":"0.15.14","ua":"TinodeWeb/0.15.14 (Chrome/74.0; MacIntel); tinodejs/0.15.14","lang":"zh-CN"}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid=''
    2019/05/14 16:12:30 in: '{"login":{"id":"110330","scheme":"token","secret":"fft+fI4+lG+s4excFAABAAEAchKK8Qc+DxwMRQkKZQJeS1lGZXL7rvnProxPOOLCBKQ="}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid=''
    2019/05/14 16:12:30 in: '{"sub":{"id":"110331","topic":"me","get":{"what":"sub desc"}}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:29 in: '{"sub":{"id":"110332","topic":"fnd","get":{"what":"sub tags"}}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:31 in: '{"set":{"id":"110333","topic":"fnd","desc":{"public":"ba se i"}}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:31 in: '{"get":{"id":"110334","topic":"fnd","what":"sub"}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:33 in: '{"set":{"id":"110335","topic":"fnd","desc":{"public":"basic"}}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:33 in: '{"get":{"id":"110336","topic":"fnd","what":"sub"}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:36 in: '{"set":{"id":"110337","topic":"fnd","desc":{"public":"basic:zeta"}}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    2019/05/14 16:15:36 in: '{"get":{"id":"110338","topic":"fnd","what":"sub"}}' ip='[::1]:59732' sid='phn9EMTMtW8' uid='fft-fI4-lG8'
    
    bug 
    opened by Frederic-Zhou 23
  • Feature request User based on a rest API

    Feature request User based on a rest API

    Subject of the issue

    My users are stored in my remote application, I can't access and query the database. The only way that I have to authenticate a user is to call a rest API. Is it a way to Tinode to work with an empty user table and use a rest API for users?

    Is this a bug report of a feature request?

    • [ ] Bug report
    • [x] Feature request
    feature request 
    opened by fstn 23
  • FCM: 403/404 error on notification sending

    FCM: 403/404 error on notification sending

    Subject of the issue

    Firebase Cloud Messaging notifications do not work if the recipient is authorized in a web browser (most often this happens in Chromium browsers)

    Is this a bug report of a feature request?

    • [x] Bug report

    Your environment

    Server-side

    • [x] Your own setup:
      • Ubuntu
      • version of tinode server: 0.15
      • mysql 5.7

    Client-side

    • [x] TinodeWeb/tinodejs: javascript client
      • Version: 0.15.12.
    • [x] Tindroid: Android app
      • Android API level (22).
      • Emulator: AVD nexus6 api27(Android 8.1 Google APIs); hardware (the actual device): BlackView BW2000 Android 5.1 (api level 22); minSdkVersion 21 targetSdkVersion 27

    Steps to reproduce

    1. Set the "Service account credentials" on tinode.conf
    2. Put the actual vapid key and project id from Firebase Console to frontend (FIREBASE_INIT const)
    3. Set up a manifest.json with "gcm_sender_id": "103953800507" (from official docs)
    4. Expand roles/permissions of the Firebase service account:
    • Editor
    • Firebase Admin
    • Firebase Service Management Service Agent
    • Firebase Admin SDK Administrator Service Agent
    • Firebase Rules System
    • Service Account Admin
    • Service Account Token Creator
    1. Allow notifications in browser and write outgoing message into the topic

    Expected behaviour

    Clients should receive notifications after having resolved them in the browser and received firebase-token in localstorage

    Actual behaviour

    Notifications work correctly if the client sends a message from the android to the browser (and vice versa). But Firebase does not receive a notification, when client (ua TinodeWeb/0.15:Chrome/71.0) sending an outgoing message (but it's all right on Firefox browser). This issue is mainly seen in Chromium browsers. When

    Server-side log

    fcm invalid token http error status: 404; reason: app instance has been unregistered; code: registration-token-not-registered; details: Requested entity was not found. fcm push failed http error status: 403; reason: sender id does not match regisration token; code: mismatched-credential; details: The caller does not have permission

    question 
    opened by maximbukanov 22
  • Implement the ability to change background and change dark or light theme

    Implement the ability to change background and change dark or light theme

    Like an idea add the ability to set your wallpaper (bg_messages) to users. Allow to change custom chat background (tindroid, ios). In applications, store background in the user's database.

    feature request 
    opened by piratov 0
  • Option to add/remove multiple users from a group with just one call and one response

    Option to add/remove multiple users from a group with just one call and one response

    Describe the solution you'd like

    For the { set }client to server message a new field should be added called subs, this field should be an array of objects like: [ { user: "id", mode: "modeValue"}, { user: "id", mode: "modeValue"}, { user: "id", mode: "modeValue"},...]

    For the { del } message a new field called users that is an array of objects like: users: ["id", "id", "id"] instead of user: ""

    The sub and user fields should be kept so it won't brake existing clients.

    Thank you.

    feature request 
    opened by dragos-boisteanu 0
  • Start chat by presenting and scanning QR code

    Start chat by presenting and scanning QR code

    https://groups.google.com/g/tinode/c/xYcemyHlQbI

    Describe the solution you'd like Add additional ability to search ID by QR code Show and read ID as QR code It is convenient to show the representing ID (user, group or channel) as a QR code, not only as text. Sometimes just showing a QR code with an ID is easier. Than to send a text ID as a result, it is still to be searched for in the search. QRcode will save time and make ID search easier.

    Describe alternatives you've considered Authorization by QR code or invite user inside Tinode. Follow links by QR code. Share links of various information .. groups, channels, users etc.

    Additional context As an option, add buttons (like an icon) to get a QR code next to the ID text. In the search by ID, add the ability to read from the camera (where you can add as an image) QR code.

    feature request 
    opened by piratov 0
  • ICE, STUN & TURN included

    ICE, STUN & TURN included

    If you are not requesting a feature, please post to https://groups.google.com/d/forum/tinode instead.

    Is your feature request related to a problem? Please describe. Some users will have problems installing and configuring an ICE Server or probably can't pay for that.

    Describe the solution you'd like Embedding the requirements for Audio and Video Calls can be a plus to this application.

    Describe alternatives you've considered Another option we can consider is create a separated project under tinode that cover the ICE requirement, with easy integration.

    Additional context Audio and Videocalls will be a killer feature, we can work creating a better experience deploying the solution.

    feature request 
    opened by rkgarcia 0
Releases(v0.20.4)
Owner
Tinode
Tinode
Open-IM-Server is open source instant messaging Server.Backend in Go.

Open-IM-Server is open source instant messaging Server.Backend in Go.

OpenIM Corporation 10k Dec 31, 2022
Scalable real-time messaging server in language-agnostic way

Centrifugo is a scalable real-time messaging server in language-agnostic way. Centrifugo works in conjunction with application backend written in any

Centrifugal 6.7k Jan 1, 2023
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network

?? Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network Introduction Berty i

Berty Technologies 6.4k Dec 29, 2022
command-line tool to publish, subscribe, and process messages for AMQP 0.9.1 compliant message brokers

Bunny A BSD licenced, go-powered CLI tool for publishing and subscribing to RabbitMQ

SkunkWerks GmbH 3 Sep 11, 2021
Instant messaging platform. Backend in Go and Client in Flutter

Seemer Messaging Server Instant messaging server. Backend in pure Go (license GPL 3.0), client-side binding in Flutter as well as gRPC client support

Mohammad Javad Hossieni 3 Nov 28, 2022
Instant messaging server for the Extensible Messaging and Presence Protocol (XMPP).

Instant messaging server for the Extensible Messaging and Presence Protocol (XMPP).

Miguel Ángel Ortuño 1.4k Dec 31, 2022
📋 cross-platform clipboard package that supports accessing text and image in Go (macOS/Linux/Windows/Android/iOS)

clipboard Cross platform (macOS/Linux/Windows/Android/iOS) clipboard package in Go import "golang.design/x/clipboard" Features Cross platform supports

The golang.design Initiative 315 Dec 24, 2022
Open-IM-Server is open source instant messaging Server.Backend in Go.

Open-IM-Server Open-IM-Server: Open source Instant Messaging Server Instant messaging server. Backend in pure Golang, wire transport protocol is JSON

OpenIM Corporation 10k Jan 2, 2023
Open-IM-Server is open source instant messaging Server.Backend in Go.

Open-IM-Server is open source instant messaging Server.Backend in Go.

OpenIM Corporation 10k Dec 31, 2022
The android-go project provides a platform for writing native Android apps in Go programming language.

android-go The android-go project aims to provide a platform (namely an SDK) for writing native Android apps in Go programming language. All things he

Max Kupriianov 984 Jan 5, 2023
Scalable game server framework with clustering support and client libraries for iOS, Android, Unity and others through the C SDK.

pitaya Pitaya is an simple, fast and lightweight game server framework with clustering support and client libraries for iOS, Android, Unity and others

TFG Co 1.6k Jan 2, 2023
Qt binding for Go (Golang) with support for Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly

Introduction Qt is a free and open-source widget toolkit for creating graphical user interfaces as well as cross-platform applications that run on var

null 9.6k Jan 2, 2023
End-to-end encrypted file transfer for Android. An Android Magic Wormhole client.

wormhole-william-mobile This is a Magic Wormhole client for Android. (Perhaps someday this will also support iOS). Some current limitations: Receiving

Peter Sanford 91 Jan 4, 2023
androidqf (Android Quick Forensics) helps quickly gathering forensic evidence from Android devices, in order to identify potential traces of compromise.

androidqf androidqf (Android Quick Forensics) is a portable tool to simplify the acquisition of relevant forensic data from Android devices. It is the

Nex 151 Dec 28, 2022
Wg-android - Android GUI for WireGuard

Android GUI for WireGuard Download from the Play Store This is an Android GUI fo

null 0 Feb 10, 2022
纯Go编写的IM,完全自定义协议的高性能即时通讯服务(High-performance instant messaging service with fully customizable protocol)

LiMaoIM (Everything so easy) This project is a simple and easy to use, powerful performance, simple design concept instant messaging service, fully cu

null 142 Dec 5, 2022
Simple template suitable for building a webapp backend MVP written in go

A Simple Go Project Template - Suited for Webapp MVPs A simple go project structure setup with all dependencies you need to get your MVP off the groun

El Donaldo 30 Oct 23, 2022
Jezziki-webapp - Discontinued but finished web app utilizing a golang backend and reactjs frontend

jezziki-webapp discontinued but finished web app utilizing a golang backend and

robertgro 0 Feb 12, 2022
Aes for go and java; build go fo wasm and use wasm parse java response.

aes_go_wasm_java aes for go and java; build go fo wasm and use wasm parse java response. vscode setting config settings.json { "go.toolsEnvVars":

忆年 0 Dec 14, 2021
Update-java-ca-certificates - Small utility to convert the system trust store to a system Java KeyStore

update-java-ca-certificates This small utility takes care of creating a system-w

Swisscom 7 Dec 28, 2022