A comprehensive Java library ecosystem for working with geospatial tiles, cloud-optimized formats, and efficient data access.
Tileverse is a modular collection of libraries designed for building high-performance geospatial applications. It provides everything from low-level efficient data access to high-level tile format support, with a focus on cloud-native architectures and modern Java practices.
Efficient random access to byte ranges from local files, HTTP servers, and cloud storage (S3, Azure Blob, Google Cloud Storage).
Features:
- Universal API for multiple data sources
- Multi-level caching (memory + disk)
- Block alignment optimization
- Thread-safe concurrent access
- HTTP authentication support
📖 Documentation | 🚀 Quick Start
🗺️ PMTiles
Reading and writing PMTiles archives - a cloud-optimized format for map tiles.
Features:
- PMTiles v3 format support
- Hilbert curve spatial indexing
- Cloud-optimized access patterns
- Memory-efficient streaming
- Vector and raster tile support
Generic object model for defining tile pyramids and tiling schemes.
Features:
- Standard tile matrix set definitions
- Coordinate transformations
- Flexible tiling schemes
- Web Mercator, WGS84, and custom CRS support
Encoding and decoding Mapbox Vector Tiles (MVT).
Features:
- MVT format encoding/decoding
- Protocol Buffers support
- Geometry transformations
- Layer and feature manipulation
Add the Tileverse BOM to your dependencyManagement:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.tileverse</groupId>
<artifactId>tileverse-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Then add the modules you need:
<dependencies>
<!-- Range Reader with all providers -->
<dependency>
<groupId>io.tileverse.rangereader</groupId>
<artifactId>tileverse-rangereader-all</artifactId>
</dependency>
<!-- PMTiles support -->
<dependency>
<groupId>io.tileverse.pmtiles</groupId>
<artifactId>tileverse-pmtiles</artifactId>
</dependency>
<!-- Tile Pyramid model -->
<dependency>
<groupId>io.tileverse.tilematrixset</groupId>
<artifactId>tileverse-tilematrixset</artifactId>
</dependency>
<!-- Vector Tiles -->
<dependency>
<groupId>io.tileverse.vectortiles</groupId>
<artifactId>tileverse-vectortiles</artifactId>
</dependency>
</dependencies>dependencies {
implementation platform('io.tileverse:tileverse-bom:1.0-SNAPSHOT')
implementation 'io.tileverse.rangereader:tileverse-rangereader-all'
implementation 'io.tileverse.pmtiles:tileverse-pmtiles'
implementation 'io.tileverse.tilematrixset:tileverse-tilematrixset'
implementation 'io.tileverse.vectortiles:tileverse-vectortiles'
}- Geospatial Servers: Build high-performance tile servers (GeoServer, MapServer plugins)
- Cloud-Native Applications: Efficient access to tiles stored in S3, Azure, or GCS
- Map Rendering: Client and server-side map tile rendering
- Data Processing: ETL pipelines for geospatial data transformation
- Analytics: Random access to large geospatial datasets
┌─────────────────────────────────────────────────────┐
│ Applications │
│ (GeoServer, Custom Tile Servers, ETL Pipelines) │
└──────────────────────┬──────────────────────────────┘
│
▼
┌──────────────┐
│ PMTiles │
│ (Format) │
└─┬────┬─────┬─┘
│ │ │
┌───────────┘ │ └──────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌────────────┐ ┌──────────────┐
│ Vector │ │ Tile │ │Range Reader │
│ Tiles │ │ Pyramid │ │ (Data Access)│
└──────────┘ └────────────┘ └──────┬───────┘
│
┌───────┼──────┬────────┬────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────┐ ┌────┐ ┌─────┐ ┌───────┐ ┌─────┐
│File│ │HTTP│ │ S3 │ │ Azure │ │ GCS │
└────┘ └────┘ └─────┘ └───────┘ └─────┘
- Java 17+ (runtime)
- Java 21+ (development - recommended)
- Maven 3.9+ or Gradle 7.0+ (build)
Quick development commands using the included Makefile:
make help # Show all available targets
make # Build and test everything
make test # Run all tests (unit + integration)
make verify # Full verification (lint + test)
make format # Format code (Spotless + SortPOM)
make lint # Check code formatting
make clean # Clean build artifacts# Build everything
./mvnw clean install
# Run tests
./mvnw test # Unit tests
./mvnw verify # Unit + integration tests
./mvnw verify -DskipTests # Skip tests
# Run tests for specific modules
./mvnw test -pl tileverse-rangereader/core
./mvnw test -pl tileverse-pmtiles
# Code formatting
./mvnw validate # Apply formatting
./mvnw validate -Pqa # Check formatting without changes
# Generate coverage reports
./mvnw verify -pl coverage-reporttileverse/
├── tileverse-rangereader/ # Range-based data access
│ ├── core/ # Core interfaces and implementations
│ ├── s3/ # AWS S3 support
│ ├── azure/ # Azure Blob Storage support
│ ├── gcs/ # Google Cloud Storage support
│ └── all/ # Aggregator with all providers
├── tileverse-vectortiles/ # Mapbox Vector Tiles support
├── tileverse-tilematrixset/ # Tile pyramid model
├── tileverse-pmtiles/ # PMTiles format support
├── dependencies/ # BOM for dependency management
├── bom/ # BOM for Tileverse modules
└── coverage-report/ # Aggregate coverage reports
Contributions are welcome! Please feel free to submit issues and pull requests.
- Follow the existing code style (enforced by Spotless)
- Add tests for new functionality
- Update documentation as needed
- Ensure all tests pass:
make verify - Add license headers to new files
See the Contributing Guide for more details.
- Protomaps for the PMTiles specification
- Mapbox for vector tile innovations
- The geospatial open-source community
- Documentation: tileverse.io
- Issues: GitHub Issues
- Discussions: GitHub Discussions