
Note: TerraInk is still in development. Every feedback is appreciated. This is a for-fun, open-source project, and community contributions are very welcome.
This project is a JavaScript reimplementation inspired by the original MapToPoster originalankur/maptoposter by Ankur Gupta (MIT license). My app is built using Bun, React, and TypeScript. It allows users to create custom city map posters with various styling options, leveraging OpenStreetMap data rendered via MapLibre and OpenFreeMap vector tiles.

All showcase images are stored in public/assets/showcase/.

bun install
bun run dev
Check .env.example for available variables. They are optional for most local work and should not be set during testing unless a specific case requires them.
bun run build
Create .env from .env.example (or set APP_PORT directly in your shell), then run:
docker compose up -d --build
This serves the app on http://localhost:7200 by default.
To change the exposed host port:
APP_PORT=80 docker compose up -d --build
$env:APP_PORT=80
docker compose up -d --build
docker compose down
docker build -t terraink:latest .
docker run -d --name terraink -p 7200:80 --restart unless-stopped terraink:latest
The contribution guidelines are meant to keep TerraInk easy to extend, review, and maintain over time. They are here to support a durable architecture, not to add unnecessary friction.
Read CONTRIBUTING.md before opening a PR.
dev and target dev only. Do not open PRs against main.This project is licensed under the MIT License - see the LICENSE file for details.
The Terraink™ name, logo, and branding assets are trademarks of the project owner.
The MIT license grants you the right to use the code, but it does not grant any rights to use the project's name or branding for your own commercial purposes or hosted services.
See TRADEMARK.md for details.
$ claude mcp add terraink \
-- python -m otcore.mcp_server <graph>