Skip to content


Repository files navigation


Build Status Maven Central Maven Central (Snapshots)

The Palace Project's Android HTTP client.


Image by Free-Photos from Pixabay

What Is This?

The contents of this repository define an API specification and an implementation of an opinionated HTTP client for the various Palace Project Android projects. It is intended to implement various policy decisions (such as problem report parsing, higher timeout values, etc) in a centralized location so that these policies can be enacted across all codebases without duplicating code.


  • Simple HTTP client interface modelled on okhttp
  • Automatic RFC7807 problem report parsing
  • Control over redirects
  • Optional integration with Chucker
  • Optional transparent handling of Library Simplified Bearer Tokens
  • Optional synchronous file downloads with MIME type checking
  • High-coverage automated test suite
  • Easily mocked, strongly-typed Kotlin API
  • API Semantic Versioning enforced with japicmp
  • Apache 2.0 license



Make sure you clone this repository with git clone --recursive. If you forgot to use --recursive, then execute:

$ git submodule init
$ git submodule update --remote --recursive

The short version: Install an Android SDK and run:

$ ./gradlew clean assembleDebug test

Please read the list of instructions below for specific details on configurations.

Android SDK

Install the Android SDK and Android Studio. We don't support the use of any other IDE at the moment.


Install a reasonably modern JDK: Java 17 is the current recommendation for Android Studio.

The JAVA_HOME environment variable must be set correctly. You can check what it is set to in most shells with echo $JAVA_HOME. If that command does not show anything, adding the following line to $HOME/.profile and then executing source $HOME/.profile or opening a new shell should suffice:

# Replace NNN with your particular version of 17.
export JAVA_HOME=/path/to/jdk17_NNN

You can verify that everything is set up correctly by inspecting the results of both java -version and javac -version:

$ java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode)


We use git flow as our basis for branching and creating releases. We highly recommend installing Git Flow AVH Edition to automate some of the work of branching and tagging. Using gitflow-avh is not required, but by automating the underlying repository operations, it eliminates the possibility of making mistakes, and keeps the various branches consistent.


The API complies with Semantic Versioning 2.0.0, and this is enforced using japicmp. The current version of the code is analyzed with respect to the previous version, and incompatible changes will require a major version increment. Please see the VERSIONING.txt file for the list of packages that are exempt from versioning rules due to being private implementation packages.


The project is heavily modularized in order to keep the separate components as loosely coupled as possible. New features should typically be implemented as new modules.

Module Description
org.librarysimplified.http.api Library Simplified HTTP client (API)
org.librarysimplified.http.bearer_token Library Simplified HTTP client (Bearer token extension)
org.librarysimplified.http.chucker Library Simplified HTTP client (Chucker extension)
org.librarysimplified.http.downloads Library Simplified HTTP client (File downloads)
org.librarysimplified.http.tests Library Simplified HTTP client (Test suite)
org.librarysimplified.http.uri_builder Library Simplified HTTP client (URI query builder)
org.librarysimplified.http.vanilla Library Simplified HTTP client (Vanilla implementation)


Copyright 2020 The New York Public Library, Astor, Lenox, and Tilden Foundations

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.