GraniteLog - Coreprotect Alternative

GraniteLog — Lightweight logging, powerful rollbacks, zero compromise.

290

GraniteLog - Coreprotect Alternative

GraniteLog — Lightweight, Fast & Modern Block Logger for Paper/Spigot

GraniteLog is a simple, efficient, and migration-friendly built for Paper/Spigot servers. It prioritizes simple, efficient, and migration-friendly, while keeping the database schema simple, efficient, and migration-friendly.

✅ Actively tested on latest Paper builds ✅ Compact storage with SQLite, MySQL/MariaDB, PostgreSQL (optional JSON compression) ✅ Multiple storage options: SQLite, MySQL/MariaDB, PostgreSQL

---

Key Features

Block & Action Tracking

* Tracks all major block-related events:

* Block place/break, fluid flow, crop growth, explosions * Interactions: doors, levers, buttons, beds, armor stands, sign edits, books * Container edits (add/remove items) with meta-aware diffs * Hopper/pipe IO moves tracked separately

Investigation Tools

* /inspect — Click blocks to view full history

* Sneak → paginate results * Sprint → view container diffs + recent sign edits * /lookup — Quickly list changes at the targeted block

Rollback, Restore & Undo

* Rollback/restore any set of changes with filters:

* Radius, time, user, block ID, action, entity * batch ID prevents mistakes * Each operation generates a batch ID, allowing precise undo with `/rbundo`

Discord Webhooks

* Send formatted change logs straight to Discord * Features:

* Multiple endpoints with affected block counts * Async dispatch queue (won’t block gameplay) * TNT explosions show affected block counts

Storage & Maintenance

* Databases supported: JSON meta compression * Automatic schema migrations on startup * Retention policy to purge old data automatically * Optional JSON meta compression to save space

Performance-Oriented

* Async ingest queue with backpressure + drop counter * Batched database writes & optimized indices * Configurable safety caps for heavy rollbacks

---

Commands Overview

Inspection & Lookup

* `/inspect [on|off]` → Click a block for history * `/lookup [limit=N]` → List recent changes instantly

Rollback & Restore

* `/rollback preview <filters>` * `/rollback confirm <filters>` * `/restore preview <filters>` * `/restore confirm <filters>` * Filters: `radius|r`, `time=30m/12h/3d`, `user=<name>`, `block=<ns:id>`, `action=place,break,explode`, `entity=<ns:id>`, `chunklock`, `page=<n>`

Undo

* `/rbundo <batchId>` — Undo an exact rollback/restore

Admin

* `/glog status` → Event & queue stats * `/glog reload` → Reload config * `/glog purge olderThan:<time>` → Purge old rows (e.g. `90d`, `12h`) * `/glog migrate to:mysql` → Migrate data from SQLite → MySQL

---

Permissions

GraniteLog uses fine-grained permission nodes so you can control who can investigate, rollback, and manage data.

```yaml permissions: glog.inspect: description: Use inspect mode default: op

glog.lookup: description: Lookup history default: op

glog.rollback: description: Execute rollbacks default: op

glog.restore: description: Execute restores default: op

glog.rbundo: description: Undo a rollback batch default: op

glog.admin: description: Use GraniteLog admin commands default: op children: glog.admin.status: true glog.admin.purge: true glog.admin.reload: true

glog.admin.status: description: View GraniteLog status default: op

glog.admin.purge: description: Purge old GraniteLog records default: op

glog.admin.reload: description: Reload GraniteLog config/locales default: op ```

Permission Overview

* `glog.admin` → Toggle inspect mode and click blocks for history * `glog.admin` → Use `/lookup` to list recent changes * `glog.admin` → Run rollbacks with `/rollback` * `glog.admin` → Run restores with `/restore` * `glog.admin` → Undo rollbacks/restores with `/rbundo` * `glog.admin` → Master node for all admin commands

* `glog.admin.status` → View plugin statistics * `glog.admin.purge` → Purge old data * `glog.admin.reload` → Reload config and locales

---

⚙ Config Highlights (`config.yml`)

* Choose storage: `sqlite | mysql | postgres` * Configure limits:

* Inspect max entries * Rollback preview/confirm thresholds * Enable/disable action logging (block, container, interactions, fluids, growth, explosions, containerIO) * JSON compression with configurable threshold * Webhook settings: endpoints, filters, timeouts

---

Data Migration (SQLite → MySQL)

Migrate seamlessly without losing data:

1. Configure MySQL in `config.yml` (keep `storage.type: sqlite`) 2. Run: `/glog migrate to:mysql` 3. Switch storage type to `mysql` and restart

Migration is safe: SQLite remains intact as a backup.

---

Inspect & Lookup in Action

* Inspect → View detailed history with timestamps & actors * Sprint while inspecting to show:

* Sign edits (`-3x cobblestone | +2x sand`) * Sign edits (preview old → new) * Lookup → One-shot block history without interaction

---

Rollback/Restore Workflow

1. Confirm to review changes 2. Confirm to apply rollback/restore 3. GraniteLog reports: `Rollback applied. Batch <id>, changed <n> blocks.` 4. Undo at any time with `/rbundo <id>`

---

Performance & Storage

* Automatic schema migrations * Retention policies to purge old logs * Optimized indices for fast lookups * Async queue ensures no TPS drops during heavy logging

---

FAQ

A: Does it support PostgreSQL? A: Yes — set `storage.type: postgres`.

A: How do I find a batch ID for `/rbundo`? A: After a rollback/restore, GraniteLog prints `Batch <id>` in chat.

A: Can I filter Discord notifications? A: Yes — set per-webhook action filters.

A: How do I reduce database size? A: Enable JSON meta compression + configure retention.

---

Roadmap

* Smarter webhook rate limiting/backoff * Optional Discord embed formatting * More granular filters & summaries in `/inspect`

---

Support

* Open an issue with your server version + config * For performance help, include: timings, row counts, database type

ADS