An XMPP server licensed under the Open Source Apache License.

Overview

Openfire alt tag

Openfire CI Project Stats

About

Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber). Openfire is incredibly easy to setup and administer, but offers rock-solid security and performance.

Openfire is a XMPP server licensed under the Open Source Apache License.

Openfire - an Ignite Realtime community project.

Bug Reporting

Only a few users have access for filling bugs in the tracker. New users should:

  1. Create a Discourse account
  2. Login to a Discourse account
  3. Click on the New Topic button
  4. Choose the Openfire Dev category and provide a detailed description of the bug.

Please search for your issues in the bug tracker before reporting.

Resources

Ignite Realtime

Ignite Realtime is an Open Source community composed of end-users and developers around the world who are interested in applying innovative, open-standards-based Real Time Collaboration to their businesses and organizations. We're aimed at disrupting proprietary, non-open standards-based systems and invite you to participate in what's already one of the biggest and most active Open Source communities.

Making changes

The project uses Maven and as such should import straight in to your favourite Java IDE. The directory structure is fairly straightforward. The main code is contained in:

  • Openfire/xmppserver - a Maven module representing the core code for Openfire itself

Other folders are:

  • Openfire/build - various files use to create installers for different platforms
  • Openfire/distribution - a Maven module used to bring all the parts together
  • Openfire/documentation - the documentation hosted at igniterealtime.org
  • Openfire/i18n - files used for internationalisation of the admin interface
  • Openfire/plugins - Maven configuration files to allow the various plugins available to be built
  • Openfire/starter - a small module that allows Openfire to start in a consistent manner on different platforms

To build the complete project including plugins, run the command

./mvnw verify

However much of the time it is only necessary to make changes to the core XMPP server itself in which case the command

./mvnw verify -pl distribution -am 

will compile the core server and any dependencies, and then assemble it in to something that can be run.

Testing your changes

IntelliJ IDEA:

  1. Run -> Edit Configurations... -> Add Application
  2. fill in following values
    1. Name: Openfire
    2. Use classpath of module: starter
    3. Main class: org.jivesoftware.openfire.starter.ServerStarter
    4. VM options (adapt accordingly):
      -DopenfireHome="-absolute path to your project folder-\distribution\target\distribution-base" 
      -Xverify:none
      -server
      -Dlog4j.configurationFile="-absolute path to your project folder-\distribution\target\distribution-base\lib\log4j2.xml"
      -Dopenfire.lib.dir="-absolute path to your project folder-\distribution\target\distribution-base\lib"
      -Dfile.encoding=UTF-8
      
    5. Working directory: -absolute path to your project folder-
  3. apply

You need to execute mvnw verify before you can launch openfire.

Other IDE's:

Although your IDE will happily compile the project, unfortunately it's not possible to run Openfire from within the IDE - it must be done at the command line. After building the project using Maven, simply run the shell script or batch file to start Openfire;

./distribution/target/distribution-base/bin/openfire.sh

or

.\distribution\target\distribution-base\bin\openfire.bat

Adding -debug as the first parameter to the script will start the server in debug mode, and your IDE should be able to attach a remote debugger if necessary.

Comments
  • Migrate build process from Ant to Maven (WIP).

    Migrate build process from Ant to Maven (WIP).

    I took Guus' old Maven branch and integrated the pom.xmls into the current master, updating the dependencies (especially Jetty and Mina).

    I've also added Maven plugins to mimic partial behavior of the Ant build (copying dependencies, bin/conf folder, ...)

    This commit addresses issues OF-546.

    I reconfigured the pom.xmls to work with the existing directory structure, (instead of default src/main/java), so that the Ant build keeps working as is.

    Build succeeds with "mvn clean install -DskipTests=true".

    TODOs:

    • Restructure Openfire project as a (default) Maven project, i.e. with src/main/java folders and modules "xmppserver", "plugins", "webadmin", etc.
    • Add dbutils project, this is currently only referenced as jar.
    • Identify how the Ant build.xml works (e.g. exe generation) and migrate the missing parts of it to Maven.
    • Migrate plugins, I've only did it for the broadcast plugin to see if it works.
    • tinder.jar and i4jruntime.jar are not in Maven Central. Needs to be solved somehow.

    Please comment on ideas how to proceed from here.

    opened by sco0ter 49
  • OF-353: LDAP

    OF-353: LDAP

    Various LDAP improvements, summed up by:

    • Replace usage of String with more appropriate types to represent LDAP data.
    • Improve escaping of data.
    • Stop wrapping DNs in double-quotes.

    More details can be found in the individual commits.

    Note: I'm not sure if each individual commit leaves the code in a state that can be compiled without error.

    opened by guusdk 35
  • OF-1687: Introduce a new SystemProperty class

    OF-1687: Introduce a new SystemProperty class

    ~~This is still a work in progress, but though I'd see if there was general support for this idea before I progressed further.~~

    The idea is that a SystemProperty can represent the system properties currently accessed via JiveGlobals, stored in ofProperty. By providing a single place where they are referenced (the static method SystemProperty.getProperties()) it should be possible to incorporate their current/default values and description on the existing System Properties page.

    I'm not proposing to replace every access of JiveGlobals with this class, instead gradually migrate over time, and as more properties are migrated the System Properties page becomes more complete.

    Creating a sysprop can be done so;

            final SystemProperty<Long> property = SystemProperty.Builder.ofType(Long.class)
                .setKey("this-is-a-constrained-long-key")
                .setDefaultValue(42L)
                .setMinValue(0L)
                .setMaxValue(100L)
                .build();
    
            assertThat(longProperty.getValue(), is(42L));
            longProperty.setValue(84L);
            assertThat(longProperty.getValue(), is(84L));
    

    See the tests for examples of how to use, but as it stands the properties can be a String, Integer, Long or Duration, with a default value, description, and optional min/max values. A listener can also be supplied, which will be called whenever the property changes.

    opened by GregDThomas 22
  • OF-1890 Added support for flatting nested groups in LDAP.

    OF-1890 Added support for flatting nested groups in LDAP.

    Nested / complex / hierarchic groups are flattened. This means: if group A is member of group B, the members of group A will also be members of group B.

    Cyclic paths are detected and followed only once.

    The features is disable by default. Set property "ldap.flattenNestedGroups" to "true" to enable it.

    opened by MarcelHeckel 19
  • OF-1211 - Fix description of Broadcast disabling option in Client

    OF-1211 - Fix description of Broadcast disabling option in Client

    Currently Client Control plugin says "Allow for broadcasting of messages to specified groups or entire roster." by the option to disable Broadcasting in Spark. And it doesn't disable broadcasting option to selected users. This was fixed in Spark with SPARK-1827, so description should be updated also.

    Note: This PR will only patch EN, CZ, ES, FR and PT_BR locales. Other locale files still need to be updated accordingly.

    opened by BittyByte 18
  • OF-2116 Using range retrieval for LDAP groups on Active Directory

    OF-2116 Using range retrieval for LDAP groups on Active Directory

    this is a rebase of an old PR: https://github.com/igniterealtime/Openfire/pull/1571

    -using range retrieval on group lookups if needed -using ldap.pagedResultsSize for range pagesize

    ... cause there is a limit of 1500 see: https://docs.microsoft.com/de-de/previous-versions/windows/desktop/ldap/searching-using-range-retrieval?redirectedfrom=MSDN

    opened by mightymop 16
  • Improved CallbackOnOffline plugin

    Improved CallbackOnOffline plugin

    I've improved a bit CallbackOnOffline plugin. Things that has been changed:

    • Sending POST request instead of GET. I think POST is way more appropriate that GET, as we actually post some data.
    • Sending data in JSON body instead of query params
    • Improved logs a bit (logging all properties on start if debug is enabled)
    • Sending body of message in callback. This is main reason I updated plugin. Body of message is sent inside of JSON. Using property plugin.callback_on_offline.send_body it's possible to disable that feature. Enabled by default.
    • Updated readme and changelog

    Example JSON that is send in callback:

    {
          "token":"21uh9d1h91d",
          "from":"[email protected]",
          "to":"[email protected]",
          "body":"Message body, so what user's typed"
    }
    
    opened by k-misztal 16
  • New plugin ipfs

    New plugin ipfs

    This plugin turns openfire into a node/peer on the IPFS network It will allow a federation of openfire servers to share assets and resources Plugins can access the ipfs instance/node via the ipfs-java client library.

    opened by deleolajide 15
  • OF-1840 & OF-2286: Modification of logviewer

    OF-1840 & OF-2286: Modification of logviewer

    This drops the separation of logged message over different log files by log level. Effectively, this removes all but the all.log file, renaming that to openfire.log.

    Additionally, this commit adds ANSI-based color to the log level as printed on each line. This provides a very helpful visual hint, drawing attention to the more important log lines.

    This change introduces ANSI control characters to the log file. Native readers often can handle these (for example, 'less' has the -R option for this). It's good to remember that the log configuration can be easily modified by end users, by modifying the log4j2.xml configuration file with their own preferences (which can be used to undo this change).

    Corresponding changes have been made to the admin console. As the default ANSI coloring as applied by Log4j2 works best on a dark background, the background of the displayed log is changed to be dark.

    2021-09-03_14-13

    opened by guusdk 14
  • OF-2030: Add support for FMUC

    OF-2030: Add support for FMUC

    The changes in this PR are the result of an (ongoing) project that included the testing capabilities of @Dominic-surevine - As such, there has been a good deal of testing already gone into this PR. I do appreciate more feedback, though - especially of the code reviewing kind that Greg excels at ;)

    opened by guusdk 14
  • OF-1930: Make LocalMUCRoom more thread safe

    OF-1930: Make LocalMUCRoom more thread safe

    The field occupantsByNickname is readed from and written to without a lock:

    List<MUCRole> occupants = occupantsByNickname.get(nickname.toLowerCase());
                // Do not add new occupant with one with same nickname already exists
                if (occupants == null) {
                    occupants = new ArrayList<>();
                    occupantsByNickname.put(nickname.toLowerCase(), occupants);
    

    This pull request surround all code parts, in which this happens, with the existing write lock.

    opened by cpetzka 14
  • OF-1112: Switch to MINA for inbound S2S

    OF-1112: Switch to MINA for inbound S2S

    This is a provisional change that switches inbound s2s traffic from the old net-io implementation to the newer nio (based on MINA).

    In my limited tests, this seemed to work while setting up s2s connections, both with Dialback as with SASL External.

    More work is probably desired. I particularly want to identify all code that can now be removed (as it's replaced by this change), while unmarking code as being 'deprecated' that is not (some classes that have already been marked as being deprecated in anticipation of this change remain in use, for example to initiate outbound traffic).

    It is probably best to not remove the old implementation until after the new implementation has been released, and has proven itself. I'd like to give users an opportunity to reconfigure Openfire to use the old implementation. A similar configuration option existed when moving from the old IO to NIO for client-to-server traffic.

    MINA's 2.2 branch seems to have a change in its TLS handling that almost guarantees a deadlock when working with Stream Management. This isn't related to the change in this PR, but might be reason to move away from MINA.

    opened by guusdk 0
  • Bump postgresql from 42.4.1 to 42.4.3 in /build/ci/updater

    Bump postgresql from 42.4.1 to 42.4.3 in /build/ci/updater

    Bumps postgresql from 42.4.1 to 42.4.3.

    Changelog

    Sourced from postgresql's changelog.

    Changelog

    Notable changes since version 42.0.0, read the complete History of Changes.

    The format is based on Keep a Changelog.

    [Unreleased]

    Changed

    Added

    Fixed

    [42.5.1] (2022-11-23 10:14:59 -0500)

    Security

    • security: StreamWrapper spills to disk if setText, or setBytea sends very large Strings or arrays to the server. createTempFile creates a file which can be read by other users on unix like systems (Not macos). This has been fixed in this version fixes CVE-2022-41946 see the security advisory for more details. Reported by Jonathan Leitschuh This has been fixed in versions 42.5.1, 42.4.3 42.3.8, 42.2.27.jre7. Note there is no fix for 42.2.26.jre6. See the security advisory for work arounds.

    Fixed

    [42.5.0] (2022-08-23 11:20:11 -0400)

    Changed

    [42.4.2] (2022-08-17 10:33:40 -0400)

    Changed

    • fix: add alias to the generated getUDT() query for clarity (PR #2553)[https://github-redirect.dependabot.com/pgjdbc/pgjdbc/pull/2553]

    Added

    Fixed

    • fix: regression with GSS. Changes introduced to support building with Java 17 caused failures [Issue #2588](pgjdbc/pgjdbc#2588)
    • fix: set a timeout to get the return from requesting SSL upgrade. [PR #2572](pgjdbc/pgjdbc#2572)
    • feat: synchronize statement executions (e.g. avoid deadlock when Connection.isValid is executed from concurrent threads)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump postgresql from 42.4.1 to 42.4.3 in /xmppserver

    Bump postgresql from 42.4.1 to 42.4.3 in /xmppserver

    Bumps postgresql from 42.4.1 to 42.4.3.

    Changelog

    Sourced from postgresql's changelog.

    Changelog

    Notable changes since version 42.0.0, read the complete History of Changes.

    The format is based on Keep a Changelog.

    [Unreleased]

    Changed

    Added

    Fixed

    [42.5.1] (2022-11-23 10:14:59 -0500)

    Security

    • security: StreamWrapper spills to disk if setText, or setBytea sends very large Strings or arrays to the server. createTempFile creates a file which can be read by other users on unix like systems (Not macos). This has been fixed in this version fixes CVE-2022-41946 see the security advisory for more details. Reported by Jonathan Leitschuh This has been fixed in versions 42.5.1, 42.4.3 42.3.8, 42.2.27.jre7. Note there is no fix for 42.2.26.jre6. See the security advisory for work arounds.

    Fixed

    [42.5.0] (2022-08-23 11:20:11 -0400)

    Changed

    [42.4.2] (2022-08-17 10:33:40 -0400)

    Changed

    • fix: add alias to the generated getUDT() query for clarity (PR #2553)[https://github-redirect.dependabot.com/pgjdbc/pgjdbc/pull/2553]

    Added

    Fixed

    • fix: regression with GSS. Changes introduced to support building with Java 17 caused failures [Issue #2588](pgjdbc/pgjdbc#2588)
    • fix: set a timeout to get the return from requesting SSL upgrade. [PR #2572](pgjdbc/pgjdbc#2572)
    • feat: synchronize statement executions (e.g. avoid deadlock when Connection.isValid is executed from concurrent threads)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Add Sentry support for Issues and Performance

    Add Sentry support for Issues and Performance

    I've been working on this for a few weeks, and it'll take a lot more work, but I thought it was worth opening a Draft PR for visibility.

    Note that this is utterly useless with Sentry-SaaS unless you have deep pockets - I'm running it for my server against a self-hosted Sentry - but I'm generating a transaction per stanza, currently, as well as for S2S connections and more.

    opened by dwd 1
  • Bump hsqldb from 2.4.1 to 2.7.1 in /build/ci/updater

    Bump hsqldb from 2.4.1 to 2.7.1 in /build/ci/updater

    Bumps hsqldb from 2.4.1 to 2.7.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v4.7.4)
Owner
Ignite Realtime
Ignite Realtime is the community for the users and developers of open source Real Time Communications projects.
Ignite Realtime
Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.

Apache Camel Apache Camel is a powerful, open-source integration framework based on prevalent Enterprise Integration Patterns with powerful bean integ

The Apache Software Foundation 4.7k Dec 31, 2022
FLiP: StreamNative: Cloud-Native: Streaming Analytics Using Apache Flink SQL on Apache Pulsar

StreamingAnalyticsUsingFlinkSQL FLiP: StreamNative: Cloud-Native: Streaming Analytics Using Apache Flink SQL on Apache Pulsar Running on NVIDIA XAVIER

Timothy Spann 5 Dec 19, 2021
HornetQ is an open source project to build a multi-protocol, embeddable, very high performance, clustered, asynchronous messaging system.

HornetQ If you need information about the HornetQ project please go to http://community.jboss.org/wiki/HornetQ http://www.jboss.org/hornetq/ This file

HornetQ 245 Dec 3, 2022
An Open-Source, Distributed MQTT Message Broker for IoT.

MMQ broker MMQ broker 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序。 MMQ broker 完整支持MQTT V3.1 和 V3.1.1。 安装 MMQ broker 是跨平台的,支持 Linux、Unix、macOS

Solley 60 Dec 15, 2022
Mirror of Apache Kafka

Apache Kafka See our web site for details on the project. You need to have Java installed. We build and test Apache Kafka with Java 8, 11 and 15. We s

The Apache Software Foundation 23.9k Jan 5, 2023
Mirror of Apache RocketMQ

Apache RocketMQ Apache RocketMQ is a distributed messaging and streaming platform with low latency, high performance and reliability, trillion-level c

The Apache Software Foundation 18.5k Dec 28, 2022
Apache Pulsar - distributed pub-sub messaging system

Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API. Learn more about Pulsar at https:

The Apache Software Foundation 12.1k Jan 4, 2023
Mirror of Apache ActiveMQ

Welcome to Apache ActiveMQ Apache ActiveMQ is a high performance Apache 2.0 licensed Message Broker and JMS 1.1 implementation. Getting Started To hel

The Apache Software Foundation 2.1k Jan 2, 2023
Mirror of Apache ActiveMQ Artemis

ActiveMQ Artemis This file describes some minimum 'stuff one needs to know' to get started coding in this project. Source For details about the modify

The Apache Software Foundation 824 Dec 26, 2022
Kryptonite is a turn-key ready transformation (SMT) for Apache Kafka® Connect to do field-level 🔒 encryption/decryption 🔓 of records. It's an UNOFFICIAL community project.

Kryptonite - An SMT for Kafka Connect Kryptonite is a turn-key ready transformation (SMT) for Apache Kafka® to do field-level encryption/decryption of

Hans-Peter Grahsl 53 Jan 3, 2023
RocketMQ-on-Pulsar - A protocol handler that brings native RocketMQ protocol to Apache Pulsar

RocketMQ on Pulsar(RoP) RoP stands for RocketMQ on Pulsar. Rop broker supports RocketMQ-4.6.1 protocol, and is backed by Pulsar. RoP is implemented as

StreamNative 88 Jan 4, 2023
Dagger is an easy-to-use, configuration over code, cloud-native framework built on top of Apache Flink for stateful processing of real-time streaming data.

Dagger Dagger or Data Aggregator is an easy-to-use, configuration over code, cloud-native framework built on top of Apache Flink for stateful processi

Open DataOps Foundation 238 Dec 22, 2022
Template for an Apache Flink project.

Minimal Apache Flink Project Template It contains some basic jobs for testing if everything runs smoothly. How to Use This Repository Import this repo

Timo Walther 2 Sep 20, 2022
Open data platform based on flink. Now scaleph is supporting data integration with seatunnel on flink

scaleph The Scaleph project features data integration, develop, job schedule and orchestration and trys to provide one-stop data platform for develope

null 151 Jan 3, 2023
A project provide a shell to talk to ratis server

ratis-shell A project provide a shell to talk to ratis server how to build mvn clean package how to run Prepare a config file cp ./conf/ratis-shell-si

null 17 Dec 1, 2022
Demo project for Kafka Ignite streamer, Kafka as source and Ignite cache as sink

ignite-kafka-streamer **Description : Demo project for Kafka Ignite streamer, Kafka as source and Ignite cache as sink Step-1) Run both Zookeeper and

null 1 Feb 1, 2022
Apache Cayenne is an open source persistence framework licensed under the Apache License

Apache Cayenne is an open source persistence framework licensed under the Apache License, providing object-relational mapping (ORM) and remoting services.

The Apache Software Foundation 284 Dec 31, 2022
Tribal Trouble GNU 2 Tribal Trouble - Tribal Trouble is a realtime strategy game released by Oddlabs in 2004. In 2014 the source was released under GPL2 license. License: GNU 2, .

Tribal Trouble Tribal Trouble is a realtime strategy game released by Oddlabs in 2004. In 2014 the source was released under GPL2 license, and can be

Sune Hagen Nielsen 147 Dec 8, 2022
A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Smack About Smack is an open source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. A pure

Ignite Realtime 2.3k Dec 28, 2022