Solr / SolrCloud running in high performance server - tiny, fast startup, simple to configure, easy deployment without an application server.

Overview

solr-undertow

GitHub release Maven Central CircleCI branch License Kotlin
Solr Solr Solr Solr Solr

Solr and SolrCloud running in high performance server - Tiny, fast, easy, standalone deployment, simple to configure, and without an application server. Requires JDK 1.7 or newer, Solr 4.x, 5.x, 6.x, 7.x, and 8.x. Less than 10MB download, starts instantly, performs inline or better than all application servers. Written in the Kotlin language for the JVM (a better Java, not as complex as Scala).

This application launches a Solr distribution as a standalone server running a high performance HTTP front-end based on undertow.io (the engine behind WildFly, the new JBoss). It has no features of an application server, does nothing more than load Solr servlets and also service the Admin UI. It is production-quality for a stand-alone Solr server.

Releases are available on GitHub.

Usage

Usage is simple, you only need Solr-Undertow release, a configuration file and a Solr distribution:

bin/solr-undertow <configurationFile>

Solr-Undertow releases include example configuration files, for example using the default configuration:

bin/solr-undertow example/example.conf

Then navigate your browser to http://localhost:8983/solr

Configuration

The configuration file is on the JSON like HOCON format and loaded using TypeSafe Config. So any features it supports are supported here.

A configuration file must minimally contain these settings (paths are relative to the configuration file):

solr.undertow: {
  solrHome: "./solr-home"
  solrLogs: "./solr-logs"
  tempDir: "./solr-temp"
  solrVersion: "8.5.2"
  solrWarFile: ./solr-wars/solr-${solr.undertow.solrVersion}.zip
}

In this configuration solrHome must contain at minimum solr.xml (and zoo.cfg if SolrCloud) and any pre-configured cores.

The defaults, and all configuration options can be seen in the configuration defaults file. Which include httpClusterPort: 8983, the default server port.

Configured directories are validated at startup to give clear error messages, they are checked for existance and readable/writeable attributes (depending on the directory).

Example Configuration / Directory Tree

Two example configurations are provided in the example directory:

System and Environment Properties

When System or Environment variables are used, an order of precedence is used favoring the Solr-Undertow properties over legacy property names from Solr. Note, not all variables are legal environment variables, and the use of env variables is not recommended, configuration or system properties is best. Here is the exact order of configuration overriding:

  • Solr-Undertow fully qualified System property
  • Solr legacy System property
  • Configuration File Solr-Undertow property
  • Solr-Undertow full qualified Environment variable (impossible on systems that do not allow "." in environment variable names)
  • Solr legacy Environment variable (only for variables legal on the system)

It is recommended only to use the Solr-Undertow configuration file, with occasional overrides using Solr-Undertow fully qualified property names in SOLR_UNDERTOW_OPTS environment variable. The following are the properties, Solr legacy and Solr-Undertow fully qualified:

Solr typical (legacy) Solr-Undertow Fully Qualified
jetty.port solr.undertow.httpClusterPort
zkRun solr.undertow.zkRun
zkHost solr.undertow.zkHost
solr.log solr.undertow.solrLogs
hostContext solr.undertow.solrContextPath
solr.solr.home solrHome
solr.data.dir (no equivalent, not checked, passes through to Solr)

After configuration loading, the Solr legacy system properties are reset to match the resulting configuration so that Solr configuration files with variables, and the Solr process will see them as expected.

An example using SOLR_UNDERTOW_OPTS environment variable to override configuration is below...

Other Notes

Performance Tuning

For infomation about performance tuning, read the Tuning Solr-Undertow guide.

JDK 1.7

Solr-undertow requires JDK 1.7 or newer. Do not run Solr on anything older, it isn't worth the pain of inferior garbage collectors. Oracle JDK is also prefered, Open JDK does not perform as well and at times has been incompatible.

Solr Distributions

Quick links to common Solr distributions: (these have been tested, others should also work)

Version Download
4.10.4 http://archive.apache.org/dist/lucene/solr/4.10.4/solr-4.10.4.zip
5.5.2 http://archive.apache.org/dist/lucene/solr/5.5.2/solr-5.5.2.zip
6.0.1 http://archive.apache.org/dist/lucene/solr/6.0.1/solr-6.0.1.zip
6.1.0 http://archive.apache.org/dist/lucene/solr/6.1.0/solr-6.1.0.zip
6.2.0 http://archive.apache.org/dist/lucene/solr/6.2.0/solr-6.2.0.zip
6.4.2 http://archive.apache.org/dist/lucene/solr/6.4.2/solr-6.4.2.zip
6.6.2 http://archive.apache.org/dist/lucene/solr/6.6.2/solr-6.6.2.zip
7.2.1 http://archive.apache.org/dist/lucene/solr/7.2.1/solr-7.2.1.zip
7.7.1 http://archive.apache.org/dist/lucene/solr/7.7.1/solr-7.7.1.zip
8.0.0 http://archive.apache.org/dist/lucene/solr/8.0.0/solr-8.0.0.zip
8.5.2 http://archive.apache.org/dist/lucene/solr/8.0.0/solr-8.5.2.zip

Solr-Undertow supports the following patterns of distribuions:

  • A WAR file from 5.2.1 or earlier
  • A Zip full Solr distribution pre 5.2.1 that contains a WAR file in server/webapps/solr.war or example/webapps/solr.war
  • A Zip full Solr distribution post 5.2.1 that contains server/solr-webapp/webapp which is really an extracted WAR file
  • A WAR file you create by rezipping the contents of a distribution server/solr-webapp/webapp directory and naming it with .war extension.

The smallest distribution is the WAR file, which you can create, or you can remove everything else from a distribution Zip file keeping only the contents of the server/solr-webapp/webapp directory (including the path names).

For Solr 4.x you can download Solr WAR files from the Maven repository. For example Solr 4.10.4 WAR and find older versions here.

For Solr 5.x, 6.x, 7.x, and 8.x you download full ZIP file distributions from the main Solr website or from the past version archives.

Custom JVM Parameters

To set additional Java startup parameters for the VM, you can set the SOLR_UNDERTOW_OPTS environment variable before running, for example:

export SOLR_UNDERTOW_OPTS="-Xms15G -Xmx15G -XX:MaxPermSize=512m -XX:PermSize=256m"

And an example adding support for JMX:

export SOLR_UNDERTOW_OPTS="-Xms15G -Xmx15G -XX:MaxPermSize=512m -XX:PermSize=256m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9901 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

And and example of overriding settings in the configuration file from system properties, and then running:

export SOLR_UNDERTOW_OPTS="-Dsolr.undertow.httpClusterPort=8080 -Dsolr.undertow.solrHome=./solr-alt-home"
../bin/solr-undertow example.conf

Logging

Logging is via Slf4j routing to LogBack and can be configured differently than the default by providing a custom configuration file pointed to by the system property logback.configurationFile.

Solr-Undertow writes the following log files:

filename description
solr*.log Java logging, including Solr internal logging
error*.log Java logging, only log messages with level ERROR or above
access*.log HTTP access logging, see configuration defaults for more information on format

The default access log format is: %t %a %p \"%r\" %q %s %b %Dms %{o,X-Solr-QTime} ${o,X-Solr-Hits}

In order, these are described as:

macro description
%t Date and time, in Common Log Format format
%a Remote IP address
%p Local port
%U Requested URL path
%q Query string, otherwise empty string
%r First line of the request
%s HTTP status code of the response
%b Bytes sent, excluding HTTP headers, or '-' or '-1' if no bytes were sent or unknown
%D Time taken to process the request, in millis
%{o,X-Solr-QTime} Solr QTime if present in headers, Solr 4.9 and newer see https://issues.apache.org/jira/browse/SOLR-4018
%{o,X-Solr-Hits} Solr Hits if present in headers, Solr 4.9 and newer see https://issues.apache.org/jira/browse/SOLR-4018

Other available formats:

macro description
%A Local IP Address
%B Bytes sent, excluding HTTP headers
%h Remote host name
%h Request protocol (also included in %r)
%l Remote logical username from identd (always returns '-')
%m Request method (also included in %r)
%u Remote user that was authenticated
%v Local server name
%T Time taken to process the request, in seconds
%I current Request thread name (can compare later with stacktraces)
%{i,xxx} xxx is incoming headers
%{o,xxx} xxx is outgoing response headers
%{c,xxx} xxx is a specific cookie
%{r,xxx} xxx is an attribute in the ServletRequest
%{s,xxx} xxx is an attribute in the HttpSession

You can also specify either of these prebuilt formats instead of using macros, although in Solr they may not provide as much useful information as the default format:

format string equivalent
common %h %l %u %t "%r" %s %b
combined %h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}"

HTTP IO and Worker threads

see also: Tuning Solr-Undertow

Scripting Startup / Shutdown

Solr-Undertow listens on the configured shutdown HTTP port (defaults to 9983) for a GET request, single parameter of password which must be set to a value matching the configured password.

If the a shutdown password is not configured then a 403 forbidden error will be returned. If the password does not match, a 401 unauthorized error will be return. Otherwise on success a 200 HTTP response, and on timeout or other error a 500 HTTP response (although the VM will still exit). See the configuration defaults file for the shutdown section.

An example of sending a shutdown command when port is configured as 9983 and password is diediedie (please use a better password than that!)

curl -X GET http://localhost:9983?password=diediedie

A user created example of scripting can be seen in a GIST from @magicdude4eva where the stop script properly checks exit codes, and does a kill command against the PID if the graceful shutdown request fails.

Usage as an embedded library

Solr-Undertow can be embedded in any JVM app. Include the dependency:

uy.kohesive.solr:solr-undertow:1.6.1

Then use the App (has main() static method) or Server class (more control of configuration) to start the process.

Building Your Own Binary

You may download a release under the releases here, or you can build your own binary.

./gradlew build distAll

and the resulting binaries will be under ./build/distributions as .tgz and .zip files.

Building with IntelliJ

Open the build.gradle file as a project, accept the default Gradle wrapper, and then fixup JDK to be 1.7 or newer. Be sure you have Kotlin plugin installed and that it matches the version in the Gradle build or newer, check the gradle.properties file for Kotlin version number.

Special Thanks

YourKit logo

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

Comments
  • Undertow startup fails in Windows environment

    Undertow startup fails in Windows environment

    Hello,

    I´m facing the following error during undertow startup: Illegal character in opaque part at index 11: jar:file:C:\Dev\servers\solr-undertow-1.0.14\example\solr-wars\solr-4.10.2.war

    The cause is the ** char in the war URI. I think Undertow can´t handle it?

    Bellow, follow the prompt logs: C:\Dev\servers\solr-undertow-1.0.14>bin\solr-undertow.bat example/example.conf 2014-12-01 18:26:47,358 [main] WARN SolrServer - Solr + Undertow = small server, happy days, fast, and maybe other cool things. 2014-12-01 18:26:47,360 [main] WARN SolrServer - Starting SolrServer 2014-12-01 18:26:47,364 [main] INFO SolrServer - Validating configuration from: C:\Dev\servers\solr-undertow-1.0.14\example\example.conf 2014-12-01 18:26:47,574 [main] INFO SolrServer - === [ Config File settings from: C:\Dev\servers\solr-undertow-1.0.14\example\example.conf ] === 2014-12-01 18:26:47,574 [main] INFO SolrServer - zkRun: false 2014-12-01 18:26:47,575 [main] INFO SolrServer - zkHost: 2014-12-01 18:26:47,577 [main] INFO SolrServer - httpClusterPort: 8983 2014-12-01 18:26:47,579 [main] INFO SolrServer - httpHost: 0.0.0.0 2014-12-01 18:26:47,580 [main] INFO SolrServer - httpIoThreads: 0 (no setting, using default) 2014-12-01 18:26:47,582 [main] INFO SolrServer - httpWorkerThreads: 0 (no setting, using default) 2014-12-01 18:26:47,586 [main] INFO SolrServer - activeRequestLimits: 2014-12-01 18:26:47,586 [main] INFO SolrServer - solrHome: C:\Dev\servers\solr-4.10.2\solr-4.10.2 2014-12-01 18:26:47,587 [main] INFO SolrServer - solrLogs: C:\Dev\servers\solr-undertow-1.0.14\example.\solr-logs 2014-12-01 18:26:47,589 [main] INFO SolrServer - tempDir: C:\Dev\servers\solr-undertow-1.0.14\example.\solr-temp 2014-12-01 18:26:47,590 [main] INFO SolrServer - solrVersion: 4.10.2 2014-12-01 18:26:47,592 [main] INFO SolrServer - solrWarFile: C:\Dev\servers\solr-undertow-1.0.14\example.\solr-wars\solr-4.10.2.war 2014-12-01 18:26:47,595 [main] INFO SolrServer - solrContextPath: /solr 2014-12-01 18:26:47,596 [main] INFO SolrServer - === [ END CONFIG ] === 2014-12-01 18:26:47,598 [main] WARN SolrServer - Extracting WAR file: C:\Dev\servers\solr-undertow-1.0.14\example.\solr-wars\solr-4.10.2.war 2014-12-01 18:26:47,614 [main] ERROR SolrServer - Server unhandled exception during startup 'Illegal character in opaque part at index 11: jar:file:C:\Dev\servers\solr-undertow-1.0.14\example.\solr-w ars\solr-4.10.2.war' java.lang.IllegalArgumentException: Illegal character in opaque part at index 11: jar:file:C:\Dev\servers\solr-undertow-1.0.14\example.\solr-wars\solr-4.10.2.war at java.net.URI.create(URI.java:859) ~[na:1.7.0_11] at org.bremeld.solr.undertow.Server.deployWarFileToCache(SolrUndertow.kt:107) ~[solr-undertow-1.0.14.jar:na] at org.bremeld.solr.undertow.Server.run(SolrUndertow.kt:52) ~[solr-undertow-1.0.14.jar:na] at org.bremeld.solr.undertow.UndertowPackage$App$d7d28faa.main(App.kt:40) [solr-undertow-1.0.14.jar:na] at org.bremeld.solr.undertow.UndertowPackage.main(Unknown Source) [solr-undertow-1.0.14.jar:na] Caused by: java.net.URISyntaxException: Illegal character in opaque part at index 11: jar:file:C:\Dev\servers\solr-undertow-1.0.14\example.\solr-wars\solr-4.10.2.war at java.net.URI$Parser.fail(URI.java:2829) ~[na:1.7.0_11] at java.net.URI$Parser.checkChars(URI.java:3002) ~[na:1.7.0_11] at java.net.URI$Parser.parse(URI.java:3039) ~[na:1.7.0_11] at java.net.URI.(URI.java:595) ~[na:1.7.0_11] at java.net.URI.create(URI.java:857) ~[na:1.7.0_11] ... 4 common frames omitted Server unhandled exception during startup 'Illegal character in opaque part at index 11: jar:file:C:\Dev\servers\solr-undertow-1.0.14\example.\solr-wars\solr-4.10.2.war'

    Thanx

    opened by garrydias 25
  • v1.5.0 does not work with solr-5.4.0.zip - ClassNotFoundException

    v1.5.0 does not work with solr-5.4.0.zip - ClassNotFoundException

    Getting the following error on v1.5.0:

    2016-01-21 11:13:16.630 [      main] [          ] WARN  SolrServer -   jar:file:/home/prodza/undertow/solr-wars/solr-5.4.0.zip
    2016-01-21 11:13:16.731 [      main] [          ] WARN  SolrServer -   jar:file:/home/prodza/undertow/solr-wars/solr-5.4.0.zip!/solr-5.4.0/server/solr-webapp/webapp
    2016-01-21 11:13:17.541 [      main] [          ] ERROR SolrServer - Server unhandled exception during startup 'org.apache.solr.servlet.ZookeeperInfoServlet'
    java.lang.ClassNotFoundException: org.apache.solr.servlet.ZookeeperInfoServlet
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_72]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_72]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_72]
        at org.bremeld.solr.undertow.Server.buildSolrServletHandler(SolrUndertow.kt:334) ~[solr-undertow-1.5.0.jar:na]
        at org.bremeld.solr.undertow.Server.run(SolrUndertow.kt:79) ~[solr-undertow-1.5.0.jar:na]
        at org.bremeld.solr.undertow.AppKt.main(App.kt:42) [solr-undertow-1.5.0.jar:na]
        at org.bremeld.solr.undertow.UndertowPackage.main(Unknown Source) [solr-undertow-1.5.0.jar:na]
    

    The extracted jars for 5.4.0 do not contain the servlet:

    find -name "*.jar" | xargs -n 1 jar tf | grep -i ZookeeperInfo
    

    However 5.2.1 does:

    [prodza@zasolrm01 lib]$ find -name "*.jar" | xargs -n 1 jar tf | grep -i ZookeeperInfo
    org/apache/solr/servlet/ZookeeperInfoServlet$FilterType.class
    org/apache/solr/servlet/ZookeeperInfoServlet$PageOfCollections.class
    org/apache/solr/servlet/ZookeeperInfoServlet$PagedCollectionSupport.class
    org/apache/solr/servlet/ZookeeperInfoServlet$ZKPrinter.class
    org/apache/solr/servlet/ZookeeperInfoServlet.class
    
    opened by magicdude4eva 9
  • Look at tuning options / scripts provided by user

    Look at tuning options / scripts provided by user

    Look at incorporating as examples, or documentation these scripts provided by user @magicdude4eva

    https://gist.github.com/magicdude4eva/3b5fec150fbcaafdc34c

    enhancement help wanted 
    opened by apatrida 9
  • Graceful shutdown on SIGTERM

    Graceful shutdown on SIGTERM

    Shutting down gracefully does not appear to allow Solr to do a graceful shutdown.

    After upgrading to Solr 5.1.0, running in solr-undertow, the ephemeral znode is not removed from Zookeeper until zkclientTimeout is reached.

    Previously... when using Solr 4, running in Tomcat, the ephemeral znode would be immediately removed from Zookeeper when Tomcat shutdown.

    bug 
    opened by andy-s-clark 4
  • Question about logging

    Question about logging

    Basically, is there a way to get the Solr console logging display to show the logs? I cant figure out how to get that to work... The logs are setup fine and I can view them from cmdline and whatnot, but the console just spins forever when you click the logging tab

    opened by heathprovost 3
  • Add shutdown port, so can receive a shutdown request via HTTP GET

    Add shutdown port, so can receive a shutdown request via HTTP GET

    Added this, with default configuration:

      # Shutdown options
      shutdown: {
         httpPort: 9983
         httpHost: "0.0.0.0"
         # if password is not set, shutdown is not enabled.  Make this a secure password!
         password: ""
         gracefulDelay: "30s"
      }
    

    If password is not configured, shutdown port will reject the request.

    from the updated README:

    Restart / Shutdown

    Solr-Undertow listens on the configured shutdown HTTP port (defaults to 9983) for a GET request, single parameter of password which must be set to a value matching the configured password.

    If the a shutdown password is not configured then a 403 forbidden error will be returned. If the password does not match, a 401 unauthorized error will be return. Otherwise on success a 200 HTTP response, and on timeout or other error a 500 HTTP response (although the VM will still exit). See the configuration defaults file for the shutdown section.

    enhancement 
    opened by apatrida 3
  • Support for shutdown/restart commands

    Support for shutdown/restart commands

    Why can undertow not support shutdown/restart functions as supported in Jboss CLI - i.e.

    jboss-cli.sh --connect --command=:shutdown jboss-cli.sh -c "/:shutdown()" jboss-cli.sh -c /:shutdown jboss-cli.sh -c :shutdown jboss-cli.sh -c ":shutdown(restart=true)"

    Undertow supports shutdown hooks - this guy has done it: http://blog.progs.be/704/executable-jar-with-embedded-web-server

    enhancement 
    opened by magicdude4eva 3
  • Added HTTP Compression Support

    Added HTTP Compression Support

    Very minor change, should have no effect on existing users. Setting httpCompression to true in config file will enable standard HTTP compression of servlet responses.

    opened by heathprovost 2
  • Environment variables should be overridden by config file values

    Environment variables should be overridden by config file values

    Expected behaviour is:

    • Solr legacy environment variables are overridden by config file values
    • config file values are overridden by System property values

    Instead environment variables are winning over configuration file variables.

    opened by apatrida 2
  • Http Compression?

    Http Compression?

    Please consider adding standard http compression support to solr-undertow. We are using it currently and its excellent for our use case short of this one feature.

    opened by heathprovost 1
  • Classloader is parent first, which means child classes aren't as isolated as possible.

    Classloader is parent first, which means child classes aren't as isolated as possible.

    Change class loader for Solr to be child overrides parent, to allow more container style isolation of loaded classes (and avoid conflicts with any classes used in Solr-Undertow).

    bug 
    opened by apatrida 1
  • Solr 8.11.2 support?

    Solr 8.11.2 support?

    Just wondering if this is maybe being looked at... We would very much like to be able to backup/restore to S3 repositories, which was added in 8.10. I tried to get this to work as is, but there is some kind of issue with loading org.restlet.ext.servlet.ServerServlet and I have not figure out what it is...

    12:15:14 - Server unhandled exception during startup 'org.restlet.ext.servlet.ServerServlet'
    java.lang.ClassNotFoundException: org.restlet.ext.servlet.ServerServlet
            at java.lang.ClassLoader.findClass(ClassLoader.java:523)
            at uy.kohesive.solr.undertow.ChildFirstClassloader.findClass(CustomClassloader.kt:36)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
            at uy.kohesive.solr.undertow.ChildFirstClassloader.loadClass(CustomClassloader.kt:22)
            at uy.kohesive.solr.undertow.ChildFirstClassloader.loadClass(CustomClassloader.kt:27)
            at uy.kohesive.solr.undertow.Server.buildSolrServletHandler(SolrUndertow.kt:367)
            at uy.kohesive.solr.undertow.Server.run(SolrUndertow.kt:80)
            at uy.kohesive.solr.undertow.App$Companion.main(App.kt:50)
            at uy.kohesive.solr.undertow.App.main(App.kt)
    Server unhandled exception during startup 'org.restlet.ext.servlet.ServerServlet'
    
    opened by heathprovost 1
  • Support Bootstrapping Solr by downloading WAR

    Support Bootstrapping Solr by downloading WAR

    add a solr-undertow --bootstrap 4.10.2 path/for/war command to download the WAR file

    possibly also sold-undertow --bootstrap configFile.conf to download the WAR where it should go based on current configuration (which also contains version number).

    or both.

    Need to support download locations for maven repo for 4.x, and for 5.x from the tar.gz distribution

    enhancement 
    opened by apatrida 0
  • Add request limiting by local port

    Add request limiting by local port

    depends on #4, when we have multiple port listeners

    We can therefore apply rate and request limiting on that port. For example, the cluster port should not be rate limited as a whole because internal cluster communication should be untouched. Another port could be added for the query load balancer and rate limited to protect the system, another port for updates (that do not use zkHost as locator, or another for just the admin UI. The default port is the Solr cluster communication port.

    enhancement 
    opened by apatrida 0
  • Add Basic Auth support

    Add Basic Auth support

    Same as for SSL support, it would have to be a different listener so it does not interfere with cluster communication, which still leaves the original open. It is better if a proxy in front provides the SSL or auth support (ningx, load balancer, etc)

    enhancement wontfix 
    opened by apatrida 0
  • Add SSL support

    Add SSL support

    If SSL support, then have to keep the main cluster port for inter-cluster communication, and SSL only for external connections. Not sure it makes sense. Likely an outside server (ningx, load balancer) should provide the SSL and not this server.

    enhancement wontfix 
    opened by apatrida 0
Releases(v1.8.0-RC-4)
Owner
Kohesive
A kohesive set of Kotlin libraries
Kohesive
A high performance dex deobfuscator library.

DexKit-Android README|中文文档 This repository update has been terminated, Please use DexKit in the future, it's easier to use. A high performance dex deo

null 39 Oct 9, 2022
Running Axon Server in Testcontainers tests.

Axon Server TestContainer Running axon server in testcontainers tests. Idea Run an Axon Server docker container from within your (junit) tests. Usage

holixon 3 Nov 21, 2022
A Kotlin/Java library to connect directly to an Android device without an adb binary or an ADB server

dadb Blog Post: Our First Open-Source Project A Kotlin/Java library to connect directly to an Android device without an adb binary or an ADB server de

mobile.dev 791 Dec 20, 2022
Tiny library to ease the use of environment variables with support for .env files

asimov/environment Tiny library to ease the use of environment variables with support for .env files. Installation Gradle (Kotlin) repositories {

Nicolas Bottarini 1 Jan 8, 2022
Easy app for managing your files without ads, respecting your privacy & security

Simple File Manager Can also be used for browsing root files and SD card content. You can easily rename, copy, move, delete and share anything you wis

Simple Mobile Tools 1.2k Dec 29, 2022
Simulate the running route of each player on the playground, and can be timed with a stopwatch

PathView (Simulate the running route of each player on the playground, and can be timed with a stopwatch) Generally speaking, high frequency and dense

Old Driver 5 Jun 11, 2022
Learn how to make an app designed for single-screen devices shine when running on foldable and dual-screen devices

dcberlin21-workshop Make your app shine om foldable devices with the samples we have here. Related links SDK open-source code SDK samples (Kotlin) App

Cesar Valiente 3 Oct 26, 2021
Kotlin dropwizard app running on Java 11. With Guice injection loaded.

hello world How to start the hello world application Run mvn clean install to build your application Start application with java -jar target/dropwizar

null 0 Nov 24, 2021
KotlinDL - High-level Deep Learning Framework written in Kotlin and inspired by Keras

Оригинальный репозиторий https://github.com/JetBrains/KotlinDL KotlinDL: High-le

Temur Yunusov 1 Feb 4, 2022
A simple textfield for adding quick notes without ads.

Simple Notes A simple textfield for adding quick notes. Need to take a quick note of something to buy, an address, or a startup idea? Then this is the

Simple Mobile Tools 670 Dec 31, 2022
Remove MIUI's performance limit, run app at maximum FPS

MIUI 性能救星 移除 MIUI 对应用的性能限制,以最高帧率运行应用 介绍 本模块旨在用各种方式提升系统运行应用的性能。 目前支持的功能: 对指定应用解除 MIUI 系统 "电量与性能" 应用云控限制屏幕刷新率 "电量与性能" 应用会根据前台应用情况,限制应用的运行帧数。

null 48 Jan 1, 2023
Browse your memories without any interruptions with this photo and video gallery

Simple Gallery Simple Gallery Pro is a highly customizable lightweight gallery loved by millions of people for its great user experience. Organize and

Simple Mobile Tools 2.8k Jan 8, 2023
DSL for JPA Criteria API without generated metamodel and reflection.

Kotlin JDSL Kotlin JDSL is DSL for JPA Criteria API without generated metamodel and reflection. It helps you write a JPA query like writing an SQL sta

LINE 379 Jan 7, 2023
Send Whatsapp Message Without Saving Mobile Number

Send Whatsapp Message Without Saving Mobile Number In this project i created the

THANGADURAI SELVARAJ 2 Apr 22, 2022
Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any type of design pattern

What is Kotlin Extension Function ? Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any ty

mohsen 21 Dec 3, 2022
A multifunctional Android RAT with GUI based Web Panel without port forwarding.

AIRAVAT A multifunctional Android RAT with GUI based Web Panel without port forwarding. Features Read all the files of Internal Storage Download Any M

The One And Only 336 Dec 27, 2022
Quickly rotate screen on Android devices without second thought

Useful uitlity for ONYX BOOX Eink devices. It provides several quick actions to be added in top system panel

Daniel Kao 21 Jan 3, 2023
An Android Image compress library, reduce's the size of the image by 90% without losing any of its pixels.

Image Compressor An Android image compress library, image compressor, is small and effective. With very little or no image quality degradation, a comp

Vinod Baste 11 Dec 23, 2022