The looseleaf server is an HTTP-accessible key/value store with a focus on minimalism, a
small footprint, and reliability. The server has the following notable features:
Atomic reads and updates for arbitrary sets of keys. An unlimited number of keys can be read, updated, and/or
deleted in a single operation that is atomic with respect to all other database operations.
Fine-grained role-based access control.
A trivial HTTP interface for easy access from shell scripts.
A strictly defined JSON protocol with a full schema.
Convenient endpoints for use with command-line tools such as
curl.
A small, easily auditable codebase with a heavy use of modularity for correctness.
An extensive automated test suite with high coverage.
A small footprint; the server is designed to run in tiny 16-32mb JVM heap configurations.
Platform independence. No platform-dependent code is included in any form, and installations can largely be
carried between platforms without changes. The database file format is also platform-independent.
Security-conscious engineering. All requests require authentication, extensive validation is performed on all
requests, and careful use is made of the Java type system to enforce invariants throughout the codebase.
Fully instrumented with OpenTelemetry
for reliable service monitoring.
Configurable fault injection for testing monitoring.
The server cannot store arbitrary binary data; keys and values are UTF-8 encoded strings.
The server's database is not a
distributed database; it is a simple local store based on the
H2
database's underlying storage engine.
Adding/removing users and roles is not dynamic. The users and roles are defined ahead of time in a single
configuration file, and the server must be restarted for changes to the configuration file to take effect. The
server is intended to be provisioned according to the principles of immutable infrastructure
and, as such, a change to the security policy is considered to be a critical infrastructure change. This
has the benefit that the server's current security policy is trivially observable in a single location, as
opposed to being part of the database's mutable state.
TLS support. Use a reverse proxy such as
nginx
to provide TLS if required.