Console-based real-time messaging platform.

Related tags

Testing Concord
Overview

Concord

NOTE: To improve organization, Concord has been moved to the Concord Communication GitHub organization.

Open-source, independent, real-time messaging platform inspired by Discord. Here's what it can do:

  • Host your own server, on your own hardware (no "cloud" servers). All the server's data is yours; do whatever you want with it, or nothing at all.
  • Join someone else's server (with encryption between you and the server).
  • Send and receive messages in real time, in different "channels" on a server.
  • Send and receive private messages with other server members.

And here's what we have planned for the future:

  • Threads: create a spin-off thread of messages from a single source message, to keep the main chat tidy.
  • Voice communication, both in channels, and in private messages. The plan is to give all channels a configurable set of capabilities: by default all channels support text messages, but you can add voice chat support, streaming support, and more.
  • Comprehensive server permissions system. We want to make it as easy as possible to configure the server's permissions to give admins fine-grained control over what users on their server can do. To this end, we plan on adding roles that can be assigned to particular users to grant them certain permissions.
  • Emoji and formatted text support. React to a message with an emoji, and use markdown in your messages.
  • File uploads: Allow users on your server to share files with each other as attachments to messages, with a high degree of configurability, so that you can decide how to deal with all the uploaded data.
  • Plugins, bots, and automation! We want to make Concord as extensible as possible, so we plan to add first-class support for third-party plugins, and an API for developers to create bots that can participate in a server. We also want to provide admins with utilities for automating tasks without needing to know how to code (like auto-moderation, old data pruning, spam filters, etc.).
  • Opt-in discovery services, so that users can find servers without needing an invitation.

Concord Client

Client application is currently work-in-progress.

Concord Server

To start up your own server, download the latest concord-server.jar JAR file from the releases page and run it with Java (version 16 or higher). The first time you run the server with java -jar concord-server.jar, it will generate a server-config.json configuration file, and a concord-server.db database file.

Configuring the Server

You probably want to customize your server a bit. To do so, first stop your server by typing stop in the console where you started the server initially. Now you can edit server-config.json and restart the server once you're done. A description of the attributes is given below:

  • name The name of the server.
  • description A short description of what this server is for, or who it's run by.
  • port The port on which the server accepts client connections.
  • acceptAllNewClients Whether to automatically accept any new client that registers to this server. Set to false by default, meaning an administrator needs to approve any pending registration before it is complete.
  • chatHistoryMaxCount The maximum amount of chat messages that a client can request from the server at any given time. Decrease this to improve performance.
  • chatHistoryDefaultCount The default number of chat messages that are provided to clients when they join a channel, if they don't explicitly request a certain amount. Decrease this to improve performance.
  • maxMessageLength The maximum length of a message. Messages longer than this will be rejected.
  • channels Contains a list of all channels that the server uses. Each channel has an id, name, and description. It is advised that you do not add or remove channels manually! Instead, use the add-channel and remove-channel CLI commands that are available while the server is running.
  • discoveryServers A list of URLs to which this server should send its metadata for publishing. Keep this empty if you don't want your server to be publicly visible.

Server CLI

As mentioned briefly, the server supports a basic command-line-interface with some commands. You can show the commands that are available via the help command.

Each server uses a single Nitrite database to hold messages and other information.

Comments
  • Error running: SLF4J: Failed to load class

    Error running: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" and Exception in thread "main" java.net.BindException: Address already in use: bind

    Hi Andrew Lalis, please see this:

    PS D:\Downloads> java -jar .\concord-server.jar
    server-config.json does not exist. Creating it with initial values. Edit and restart to apply changes.
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Adding index on "timestamp" field to collection channel-95a19ca9-d368-4948-a49c-a269d17bb2c6
    Adding index on "senderNickname" field to collection channel-95a19ca9-d368-4948-a49c-a269d17bb2c6
    Adding index on "message" field to collection channel-95a19ca9-d368-4948-a49c-a269d17bb2c6
    Exception in thread "main" java.net.BindException: Address already in use: bind
            at java.base/sun.nio.ch.Net.bind0(Native Method)
            at java.base/sun.nio.ch.Net.bind(Net.java:555)
            at java.base/sun.nio.ch.Net.bind(Net.java:544)
            at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)
            at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)
            at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)
            at java.base/java.net.ServerSocket.<init>(ServerSocket.java:167)
            at nl.andrewl.concord_server.ConcordServer.<init>(ConcordServer.java:85)
            at nl.andrewl.concord_server.ConcordServer.main(ConcordServer.java:231)
    PS D:\Downloads> java -jar .\concord-server.jar
    Loaded configuration from server-config.json
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Exception in thread "main" java.net.BindException: Address already in use: bind
            at java.base/sun.nio.ch.Net.bind0(Native Method)
            at java.base/sun.nio.ch.Net.bind(Net.java:555)
            at java.base/sun.nio.ch.Net.bind(Net.java:544)
            at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)
            at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)
            at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)
            at java.base/java.net.ServerSocket.<init>(ServerSocket.java:167)
            at nl.andrewl.concord_server.ConcordServer.<init>(ConcordServer.java:85)
            at nl.andrewl.concord_server.ConcordServer.main(ConcordServer.java:231)
    

    I'm using in case it matters:

    openjdk 17 2021-09-14
    OpenJDK Runtime Environment Temurin-17+35 (build 17+35)
    OpenJDK 64-Bit Server VM Temurin-17+35 (build 17+35, mixed mode, sharing)
    

    Am I doing something wrong?

    opened by aderchox 2
  • Protocol support for non-java languages

    Protocol support for non-java languages

    Dear Concord maintainer,

    I would wish for a serialisation format that is friendlier to non-java languages so that I can implement my own Concord client in an inferior programming language such as Bash or Rust.

    Sincerely,

    A Concord enthusiast.

    PS nice music in your video

    opened by maxverbeek 2
  • Persistent Users

    Persistent Users

    Currently, the server interprets each new connection as a completely new, unknown user. This is annoying for things like private messages, which become inaccessible as soon as you disconnect, never to be seen again.

    For my own planning purposes, this is how I plan to implement the idea of persistent users, where a user can disconnect then reconnect to the same server.

    When connecting, for the first time, the user will receive in its ServerWelcome message a private session token. The client saves this somewhere hidden, along with the server's address. The next time the client attempts to connect to the same address, it will provide the session token in its Identification message. The server, when processing incoming Identification messages, will check for the presence of such a session token, and if it is present, the client's information (most importantly, their unique id) will be loaded from a database collection.

    Each time a client connects, the server will always generate a fresh session token, and the token which a client may have just used to connect will now be invalid.

    enhancement 
    opened by andrewlalis 0
  • Client Removal

    Client Removal

    Once connected, a Client can't leave unless the entire Server is closed. Even if the JRE of the client has stopped, the Server still lists them as there as well as the chas Users list.

    opened by Descrox 0
  • Add Support for Threads

    Add Support for Threads

    Add support for so-called "thread" channels, which are a subset of channels that follow the rules listed here:

    • A thread is uniquely identified by a single message's id.
    • It should be presented to the user when a message is known to be the starting point for a thread, so that the user has the option to navigate to that thread.
    • All messages within a thread should be stored in the same message collection as the top-level channel that contains the thread (to avoid creating a new collection for each thread, which is very inefficient).
    enhancement 
    opened by andrewlalis 0
Releases(1.0-Release)
Owner
Andrew Lalis
I sometimes make programs with computers.
Andrew Lalis
A small Private Messaging Minecraft Plugin

Project PM is a Private Messaging system Mini-Plugin Description ?? This is a test plugin, meaning I didn't really intend it for the public use, the "

ren 1 Sep 15, 2022
🎉Back end module of Sonic UI automation testing platform. Sonic-UI自动化测试平台后端模块。

?? Sonic UI automation testing platform. English | 简体中文 Background What is sonic ? Nowadays, automation testing, remote control and other technologies

Eason 1.7k Jan 1, 2023
A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs

A powerful open source test automation platform for Web Apps, Mobile Apps, and APIs. Build stable and reliable end-to-end tests @ DevOps speed.

Testsigma Technologies Inc 466 Dec 31, 2022
🎉Ultimate test automation for testing any application on any platform

boyka-java Ultimate test automation for testing any application on any platform boyka-java Setup Write conventional commits 1.

Wasiq Bhamla 52 Dec 30, 2022
Eclipse RAP Runtime (Remote Application Platform)

Eclipse RAP Runtime (Remote Application Platform) Welcome and thank you for your interest in this project. The Eclipse RAP Runtime provides a powerful

Eclipse RAP 14 Dec 15, 2022
A sample repo to help you capture JavaScript exception for automation test in Java-TestNG on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to capture JavaScript exception for automation test in Java-TestNG on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Ma

null 11 Jul 13, 2022
A sample repo to help you use relative locators for automation test in Java-TestNG on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to use relative locators for automation test in Java-TestNG on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Maven wit

null 11 Jul 13, 2022
A sample repo to help you capture performance logs in Java-TestNG using CDP on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to capture performance logs in Java-TestNG using CDP on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Maven with Homeb

null 12 Jul 13, 2022
A sample repo to help you intercept network with Java-TestNG on LambdaTest cloud. Run Selenium tests with TestNG on LambdaTest platform.

How to intercept network with Java-TestNG on LambdaTest cloud Environment Setup Global Dependencies Install Maven Or Install Maven with Homebrew (Easi

null 12 Oct 23, 2022
A sample repo to help you set geolocation for automation test in Java-TestNG on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to set geolocation for automation test in Java-TestNG on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Maven with Home

null 12 Jul 13, 2022
A sample repo to help you emulate network control using CDP in Java-TestNG automation test on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to emulate network control using CDP in Java-TestNG automation test on LambdaTest Environment Setup Global Dependencies Install Maven Or Install M

null 12 Oct 23, 2022
A sample repo to help you handle basic auth for automation test in Java-TestNG on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to handle basic auth for automation test in Java-TestNG on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Maven with Ho

null 11 Jul 13, 2022
A sample repo to help you set device mode using CDP in Java-TestNG automation test on LambdaTest. Run Selenium tests with TestNG on LambdaTest platform.

How to set device mode using CDP in Java-TestNG automation test on LambdaTest Environment Setup Global Dependencies Install Maven Or Install Maven wit

null 11 Jul 13, 2022
A sample repo to help you handle basic auth for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to handle basic auth for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - htt

null 12 Jul 13, 2022
A sample repo to help you clear browser cache with Selenium 4 Java on LambdaTest cloud. Run your Java Selenium tests on LambdaTest platform.

How to clear browser cache with Selenium 4 Java on LambdaTest cloud Prerequisites Install and set environment variable for java. Windows - https://www

null 12 Jul 13, 2022
A sample repo to help you run automation test in incognito mode in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to run automation test in incognito mode in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - htt

null 12 Jul 13, 2022
A sample repo to help you handle cookies for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to handle cookies for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - https:

null 13 Jul 13, 2022
A sample repo to help you set geolocation for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to set geolocation for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - https

null 12 Jul 13, 2022
A sample repo to help you capture JavaScript exception for automation test in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to capture JavaScript exception for automation test in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Wi

null 12 Jul 13, 2022