All Projects → ortuman → Jackal

ortuman / Jackal

Licence: apache-2.0
Instant messaging server for the Extensible Messaging and Presence Protocol (XMPP).

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Jackal

Tigase Server
Highly optimized, extremely modular and very flexible XMPP/Jabber server
Stars: ✭ 170 (-81.09%)
Mutual labels:  chat, messaging, xmpp, jabber, iot
Ejabberd
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Stars: ✭ 5,077 (+464.74%)
Mutual labels:  chat, messaging, xmpp, jabber, iot
Mongooseim
MongooseIM is a mobile messaging platform with focus on performance and scalability
Stars: ✭ 1,387 (+54.28%)
Mutual labels:  chat, messaging, xmpp, jabber
Conversations
Conversations is an open source XMPP/Jabber client for Android
Stars: ✭ 3,965 (+341.05%)
Mutual labels:  chat, xmpp, jabber
Quickblox Ios Sdk
QuickBlox iOS SDK for messaging and video calling
Stars: ✭ 373 (-58.51%)
Mutual labels:  chat, messaging, xmpp
Quickblox Javascript Sdk
JavaScript SDK of QuickBlox cloud backend platform
Stars: ✭ 98 (-89.1%)
Mutual labels:  chat, messaging, xmpp
Blabber.im
blabber.im basiert auf Conversations und ist ein Open Source XMPP/Jabber Messenger für Android 4.1+
Stars: ✭ 124 (-86.21%)
Mutual labels:  chat, xmpp, jabber
Q Municate Ios
Q-municate iOS repository
Stars: ✭ 164 (-81.76%)
Mutual labels:  chat, messaging, xmpp
Dino
Modern XMPP ("Jabber") Chat Client using GTK+/Vala
Stars: ✭ 1,637 (+82.09%)
Mutual labels:  chat, xmpp, jabber
Jitsi
Jitsi is an audio/video and chat communicator that supports protocols such as SIP, XMPP/Jabber, IRC and many other useful features.
Stars: ✭ 3,531 (+292.77%)
Mutual labels:  chat, xmpp, jabber
Go Xmpp
Native Go XMPP library
Stars: ✭ 236 (-73.75%)
Mutual labels:  chat, xmpp, iot
Chat
Instant messaging platform. Backend in Go. Clients: Swift iOS, Java Android, JS webapp, scriptable command line; chatbots
Stars: ✭ 8,238 (+816.35%)
Mutual labels:  chat, messaging, xmpp
Rpc Websockets
JSON-RPC 2.0 implementation over WebSockets for Node.js and JavaScript/TypeScript
Stars: ✭ 344 (-61.74%)
Mutual labels:  chat, messaging, iot
Qmchatviewcontroller Ios
An elegant ready to go chat view controller for iOS applications
Stars: ✭ 75 (-91.66%)
Mutual labels:  chat, messaging, xmpp
Lurch
XEP-0384: OMEMO Encryption for libpurple.
Stars: ✭ 245 (-72.75%)
Mutual labels:  messaging, xmpp, jabber
Mnm
The legitimate email replacement — n-identity, decentralized, store-and-forward, open protocol, open source. (Server)
Stars: ✭ 162 (-81.98%)
Mutual labels:  chat, messaging, xmpp
Converse.js
Web-based XMPP/Jabber chat client written in JavaScript
Stars: ✭ 2,745 (+205.34%)
Mutual labels:  chat, xmpp, jabber
Chatsecure Ios
ChatSecure is a free and open source encrypted chat client for iOS that supports OTR and OMEMO encryption over XMPP.
Stars: ✭ 3,044 (+238.6%)
Mutual labels:  chat, messaging, xmpp
Miranda Ng
Miranda NG: Next Generation of Miranda IM
Stars: ✭ 341 (-62.07%)
Mutual labels:  xmpp, jabber
Chatkit
Android library. Flexible components for chat UI implementation with flexible possibilities for styling, customizing and data management. Made by Stfalcon
Stars: ✭ 3,496 (+288.88%)
Mutual labels:  chat, messaging

jackal

An XMPP server written in Go.

Build Status Go Report Card Godoc Releases LICENSE Docker Pulls Join the chat at https://gitter.im/jackal-im/jackal

About

jackal is a free, open-source, high performance XMPP server which aims to be known for its stability, simple configuration and low resource consumption.

Features

jackal supports the following features:

  • Customizable
  • Enforced SSL/TLS
  • Stream compression (zlib)
  • Database connectivity for storing offline messages and user settings (PostgreSQL 9.5+)
  • Clustering capabilities (ectd 3.4+)
  • Expose prometheus metrics
  • Cross-platform (OS X, Linux)

Installing

Getting Started

To start using jackal, install Go 1.16+ and run the following commands:

$ go get -d github.com/ortuman/jackal
$ cd $GOPATH/src/github.com/ortuman/jackal
$ make install installctl

This will fetch the code and install jackal and jackalctl binaries into your $GOPATH/bin path.

By default the application will try to locate service configuration at config.yaml, but alternatively you can specify a custom configuration path either through command line.

$ jackal --config=/your-custom-path/your-config.yaml

or environment variable:

$ env JACKAL_CONFIG_FILE=/your-custom-path/your-config.yaml jackal

PostgreSQL database creation

Create a user and a database for that user:

CREATE ROLE jackal WITH LOGIN PASSWORD 'password';
CREATE DATABASE jackal;
GRANT ALL PRIVILEGES ON DATABASE jackal TO jackal;

Download lastest version of the PostgreSQL schema from jackal Github repository.

wget https://raw.githubusercontent.com/ortuman/jackal/master/sql/postgres.up.psql

Run the postgres script file to create database schema:

psql --user jackal --password -f sql/postgres.up.psql

Configure jackal to use PostgreSQL by editing the configuration file:

storage:
  type: pgsql
  pgsql:
    host: 127.0.0.1:5432
    user: jackal
    password: password
    database: jackal

That's it!

Your database is now ready to connect with jackal.

Creating jackal user

After completing database setup you will have to register a new user to be able to login. To do so, you can use jackal command-line tool to create a new user proving name and password.

jackalctl user add <user>:<password>

Clustering

The purpose of clustering is to be able to use several servers for fault-tolerance and scalability.

Since jackal is a distributed system, it needs a distributed data store like etcd to share its state across the entire cluster.

To properly run jackal in clustering mode make sure to add a cluster section configuration in each of your service nodes.

Here's an example of how this section should look like:

cluster:
  etcd:
    endpoints:
      - http://<etcd-host1>:<etcd-port1>
      - http://<etcd-host2>:<etcd-port2>
      ...
  port: your-cluster-node-port # default is 14369

Note the defined port value will be used to perform cluster node communication, so make sure is reachable within your internal network.

Server extensibility

The purpose of the extensibility framework is to provide an interface between jackal server and third-party external modules, thus offering the possibility of extending the functionality of the service for particular use cases. Extensibility API is almost exclusively based on gRPC and its definition can be at jackal proto definitions repository.

Here's a list of all extendable server components:

Run jackal in Docker

The Docker deployment framework supports easy installation and configuration of jackal server.

You need to have Docker installed on your system before you can use a jackal Docker image. See Install Docker for instructions.

Download the jackal Docker image from the official Docker Hub library with this command:

docker pull ortuman/jackal:latest

Start a new jackal Docker container with custom configuration.

docker run --name=jackal \
   --mount type=bind,src=/path-on-host-machine/my-custom-config.yaml,dst=/jackal/config.yaml \
   -d ortuman/jackal:latest

Supported Specifications

Join and Contribute

The jackal developer community is vital to improving jackal future releases.

Contributions of all kinds are welcome: reporting issues, updating documentation, fixing bugs, improving unit tests, sharing ideas, and any other tips that may help the jackal community.

Code of Conduct

Help us keep jackal open and inclusive. Please read and follow our Code of Conduct.

Licensing

jackal is licensed under the Apache 2 License. See LICENSE for the full license text.

Contact

If you have any suggestion or question:

Miguel Ángel Ortuño, JID: [email protected], email: [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].