io7m | single-page | multi-page | epub | Looseleaf User Manual
Front Matter
Previous
Front Matter
Up
2. Model
Next

# 1. Introduction

1
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:

### 1.2. Features

- ACID semantics.
- 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.
- OSGi-ready
- JPMS-ready
- ISC license

3
The server does not and is unlikely to ever have the following features:

### 1.4. Non-Features

- 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 SQLite database.
- 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.

Front Matter
Previous
Front Matter
Up
2. Model
Next
io7m | single-page | multi-page | epub | Looseleaf User Manual