Pasting (or drag-loading, or file-uploading) several MB of text into the <textarea> would lock up the browser for seconds while it laid out millions of characters. The bottleneck is the textarea itself, not the filter pipeline (filters only run on Save). Hold above-threshold (256 KB) content in a JS-side `bufferedContent` variable and render only the first 50 lines + a banner into the textarea. The Save path uses `bufferedContent` when set, so the upload sees the full content. The textarea becomes read-only while the buffer is active; user-typed input invalidates the buffer automatically (the textarea is the source of truth in normal mode). A new `loadContent(text)` helper is the single entry point: it chooses textarea vs. buffer based on length. All call sites (clipboard read, paste-event for text, file load, text drop) route through it. Threshold is 256 KB (above which textarea rendering visibly stutters); preview is 50 lines (enough to recognise the log without choking the renderer). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Paste, share & analyse your logs
Built for Minecraft & Hytale
Features
- Share logs by pasting or uploading files
- Automatic removal of sensitive information (e.g. IP addresses)
- Short URLs for easy sharing
- Syntax highlighting
- Line numbers
- Direct links to specific lines
- Analysis and parsing using indifferentketchup/codex, forked from aternos/codex-minecraft
For developers
- Upload your logs using the API
- Add metadata to shared logs, e.g. version numbers, server ids, etc.
- Retrieve logs and their metadata from the API
- Open source and self-hostable
Self-hosting
You can self-host iblogs using Docker. A docker image is available in the GitHub Container Registry: ghcr.io/indifferentketchup/iblogs.
A MongoDB instance is also required to run iblogs.
An example docker compose files for self-hosting can be found here: docker/compose.production.yaml.
Config
You can configure iblogs by creating a config.json file in the root directory, see example.config.json or by setting
environment variables. Environment variables override settings in the config file.
Here is a list of all available config options:
| Variable / JSON Path | Default | Description |
|---|---|---|
IBLOGS_STORAGE_TTL storage.ttl |
7776000 (90d) |
Time until logs are deleted after last view |
IBLOGS_STORAGE_LIMIT_BYTES storage.limit.bytes |
10485760 (10 MiB) |
Maximum size of a log in bytes |
IBLOGS_STORAGE_LIMIT_LINES storage.limit.lines |
25000 |
Maximum number of lines in a log |
IBLOGS_MONGODB_URL mongodb.url |
"mongodb://mongo" |
MongoDB connection URL |
IBLOGS_MONGODB_DATABASE mongodb.database |
"iblogs" |
Name of the MongoDB database |
IBLOGS_ID_LENGTH id.length |
7 |
The default length for new IDs |
IBLOGS_LEGAL_ABUSE legal.abuse |
null |
Public email address to report abuse |
IBLOGS_LEGAL_IMPRINT legal.imprint |
null |
The imprint URL |
IBLOGS_LEGAL_PRIVACY legal.privacy |
null |
The privacy policy URL |
IBLOGS_FRONTEND_NAME frontend.name |
null |
Instance name (defaults to domain) |
IBLOGS_FRONTEND_COLOR_ACCENT frontend.color.accent |
#5cb85c |
The accent/primary color |
IBLOGS_FRONTEND_COLOR_BACKGROUND frontend.color.background |
#1a1a1a |
The background color |
IBLOGS_FRONTEND_COLOR_TEXT frontend.color.text |
#e8e8e8 |
The text color |
IBLOGS_FRONTEND_COLOR_ERROR frontend.color.error |
#f62451 |
The error color |
IBLOGS_WORKER_REQUESTS worker.requests |
500 |
Max requests per single worker |
There are a few more environment variables that can be set to modify the FrankenPHP/Caddy setup directly:
| Variable | Default | Description |
|---|---|---|
SERVER_NAME |
":80" |
Set the Caddy server name, set this to your domain for automatic SSL |
TRUSTED_PROXIES |
"private_ranges" |
Set trusted proxy address ranges |
FRANKENPHP_WORKERS |
16 |
The number of FrankenPHP workers |
Development setup
Prerequisites
Installation
# clone repository
git clone git@github.com:indifferentketchup/iblogs.git
# install composer dependencies
cd iblogs
composer install
# start development environment
cd dev
docker compose up
Open http://localhost in browser and enjoy.