You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.0 KiB

GoRicochet Build Status Go Report Card Coverage Status

GoRicochet is an experimental implementation of the Ricochet Protocol in Go.


  • A simple API that you can use to build Automated Ricochet Applications
  • A suite of regression tests that test protocol compliance.

Building an Automated Ricochet Application

Below is a simple echo bot, which responds to any chat message. You can also find this code under examples/echobot

            package main

            import (

            type EchoBotService struct {

            // Always Accept Contact Requests
            func (ts *EchoBotService) IsKnownContact(hostname string) bool {
                    return true

            func (ts *EchoBotService) OnContactRequest(oc *goricochet.OpenConnection, channelID int32, nick string, message string) {
                    ts.StandardRicochetService.OnContactRequest(oc, channelID, nick, message)
                    oc.AckContactRequestOnResponse(channelID, "Accepted")

            func (ebs *EchoBotService) OnChatMessage(oc *goricochet.OpenConnection, channelID int32, messageId int32, message string) {
                    log.Printf("Received Message from %s: %s", oc.OtherHostname, message)
                    oc.AckChatMessage(channelID, messageId)
                    if oc.GetChannelType(6) == "none" {
                    oc.SendMessage(6, message)

            func main() {
                    ricochetService := new(EchoBotService)
                    ricochetService.Listen(ricochetService, 12345)

Each automated ricochet service can extend of the StandardRicochetService. From there certain functions can be extended to fully build out a complete application.

Currently GoRicochet does not establish a hidden service, so to make this service available to the world you will have to set up a hidden service

Security and Usage Note

This project is experimental and has not been independently reviewed. If you are looking for a quick and easy way to use ricochet please check out Ricochet Protocol.