AI-powered text tool: translate between languages, rewrite in different styles, and transform with custom prompts - using multiple AI providers (OpenRouter, OpenAI, Anthropic, Google Gemini, DeepSeek, Groq, Mistral, xAI, and local Ollama). Runs as a desktop app (Electron) or a self-hosted web app (Docker).
- Translate - between dozens of languages, with automatic source detection
- Rewrite - fix grammar, improve clarity, formal/informal, shorten, expand, technical
- Transform - custom AI prompts; create and manage prompts, optional target language per prompt
- History - full execution history with input/output text, filtering, and export
- Models & cost - choose models from any configured provider; cost and usage dashboards with log, summaries by model/operation/day
- UI - multilingual interface (30+ languages, RTL support), fonts, ...
- Web mode - multi-user support with admin roles
- Desktop - Electron app for Windows and Linux
- Self-hosted - Docker image for amd64 & arm64 (Raspberry Pi-ready)
Once installed, see the User Guide for a full walkthrough of all features.
Read in other languages: English · Português (BR) · العربية · বাংলা · Català · 中文 (中国大陆) · 中文 (台灣) · Hrvatski · Čeština · Nederlands · English · Tagalog · Français · Deutsch · Ελληνικά · हिन्दी · Magyar · Italiano · 日本語 · jv · 한국어 · Bahasa Melayu · فارسی · Polski · Português · ਪੰਜਾਬੀ · Română · Русский · Slovenčina · Español · Kiswahili · Svenska · తెలుగు · ไทย · Türkçe · Українська · Tiếng Việt
Note on UI and documentation translations: All interface languages except the original English (UK) were translated using AI models; the wording may be imprecise or contain errors.
- Screenshots
- Quick start
- Getting an OpenRouter API key
- Configuration and environment
- Development and architecture
- Reporting issues
- Disclaimer
- License
Language selector
Translate
Transform - prompt editor
Dashboard
History
Settings - model selection
Docker (recommended for self-hosting)
docker pull ghcr.io/wsj-br/transrewrt:latest
OPENROUTER_API_KEY=sk-or-your-key docker run -d \
-p 5000:5000 \
-v transrewrt-data:/app/data \
-e OPENROUTER_API_KEY \
--name transrewrt-web \
ghcr.io/wsj-br/transrewrt:latestReplace sk-or-your-key with your OpenRouter API key (or set other provider keys; see Configuration). Open http://localhost:5000 and change the default admin password before exposing the service.
Set at least one provider key via environment (for example OPENROUTER_API_KEY for OpenRouter). Pass variables with -e or docker compose / .env so secrets are not baked into the image. Provider keys are not entered in the web UI; the server reads them from the environment.
ℹ️ NOTE
In Docker, LLM credentials are set with environment variables such asOPENROUTER_API_KEY,OPENAI_API_KEY,CEREBRAS_API_KEY, … (not in the web UI). On desktop (Electron) you configure keys in Settings → API.
Or use Docker Compose:
# download the compose file
wget https://github.com/wsj-br/transrewrt/raw/refs/heads/master/production.yml -O transrewrt.yml
# Edit the file to add your API keys (API_KEYs), or uncomment and adjust the `.env` file. Set the timezone (TZ) if necessary.
vi transrewrt.yml
# start the container
docker compose -f transrewrt.yml up -d
See Configuration for all environment variables, such as PORT, CONFIG_PATH, TZ, and LLM keys (OPENROUTER_API_KEY, OPENAI_API_KEY, …).
Server timezone (Docker)
The application user interface date and time follow the browser’s locale and timezone. For server-side behaviour (logging and similar), the container uses the TZ environment variable. The default is TZ=Europe/London.
To use another timezone, set TZ in your Compose file, for example:
environment:
- TZ=America/Sao_PauloOr pass it when running the container (Docker):
--env TZ=America/Sao_PauloOn many Linux hosts you can copy the system timezone name with:
echo TZ=\"$(</etc/timezone)\"A list of valid timezone names is maintained in the tz database (Wikipedia).
Windows
- Download the latest
Transrewrt Setup x.y.z.exefrom Releases. - Run the
.exeand follow the installer. - First run: start the app from the Start menu or desktop shortcut.
- Enter your API keys in Settings → API. You need to configure at least one provider; OpenRouter is common for free models.
ℹ️ NOTE
Windows may show one of these security warnings (normal for unsigned/indie apps):
- User Account Control (UAC): "Do you want to allow this app from an unknown publisher to make changes to your device?" → Click Yes.
- Microsoft Defender SmartScreen: "Windows protected your PC" → Click More info → Run anyway.
This happens because the app isn't signed by Microsoft or a major publisher-it's safe if downloaded from our official GitHub releases (verify checksums on the Releases page alongside each asset).
Linux
Download the .AppImage for your CPU from Releases (x64 for typical PCs, arm64 for many ARM devices, including Raspberry Pi 4+), then:
chmod +x Transrewrt-x.y.z-x64.AppImage && ./Transrewrt-x.y.z-x64.AppImageOn x86_64/amd64 use the x64 filename; on ARM64 use the ...-arm64.AppImage name.
Enter your API keys in Settings → API. You need to configure at least one provider; OpenRouter is common for free models.
Console messages: Packaged Linux builds (x64 and arm64 AppImages) suppress Node deprecation warnings in the terminal (for example the built-in punycode module). If Chromium prints GPU / EGL errors such as “GLES3 is unsupported” but the app works, you can silence them by disabling hardware acceleration:
TRANSREWRT_DISABLE_GPU=1 ./Transrewrt-x.y.z-arm64.AppImageThat applies on amd64 as well; change the filename to match your download.
On Debian/Ubuntu, you may need additional runtime libraries required by Chromium (these are often already present on full desktop installations). Run the commands below if needed:
sudo apt update
sudo apt install -y libfuse2 libgtk-3-0 libnotify4 libnss3 libnspr4 libxss1 libxtst6 xdg-utils \
xauth libatspi2.0-0 libdrm2 libgbm1 libxcb-dri3-0 libcups2 libasound2t64replace libasound2t64 with libasound2 for arm64. Minimal or custom installs may still fail with a missing .so file. Install the package named in the error message (common extras: libatk1.0-0, libatk-bridge2.0-0, libgbm1, libdrm2). In some environments, you may need to run the app using APPIMAGE_EXTRACT_AND_RUN=1 ./Transrewrt-….AppImage.
ℹ️ NOTE
macOS is not currently supported. Transrewrt is available for Windows, Linux, and Docker.
Once the app is running, see the User Guide to learn how to translate, rewrite, and transform text, manage prompts, and configure models.
Transrewrt supports multiple AI providers. OpenRouter is a popular choice because it aggregates many models under one key and offers free models.
- Sign up or log in at openrouter.ai.
- Open the Keys page and create a new key (name it, and optionally set a credit limit). You can use free models without adding credit.
- Desktop (Electron): paste keys in Settings → API. Docker: set env vars such as
OPENROUTER_API_KEY(see Quick start).
Do not use OpenRouter’s Body Builder model (openrouter/bodybuilder) for translate, rewrite, or transform: it returns JSON request payloads, not the completed text for those tasks. See Settings → Models in the User Guide.
You can also use other providers (OpenAI, Anthropic, Google Gemini, DeepSeek, Groq, Mistral, xAI, Cerebras) or run models locally with Ollama. See Configuration for the full list of supported providers and environment variables.
⚠️ WARNING
If you are using Ollama from another device, container, or service, remember to configure Ollama to allow external connections (not localhost-only).
Config file locations
| Deployment | Config location |
|---|---|
| Electron (Windows) | %APPDATA%\transrewrt\ |
| Electron (Linux) | ~/.config/transrewrt/ |
| Web / Docker | /app/data/config.json (use a volume to persist) |
Environment variables (web/Docker only; Electron uses the local config file)
| Variable | Description |
|---|---|
PORT |
Server listening port (defaults to 5000) |
CONFIG_PATH |
Path to the config file (defaults to `/app/data/config.json) |
TZ |
timezone for server-side time (logging, etc.) (defaults to Europe/London) |
OPENROUTER_API_KEY |
OpenRouter API key |
OPENAI_API_KEY |
OpenAI API key |
CEREBRAS_API_KEY |
Cerebras API key |
ANTHROPIC_API_KEY |
Anthropic API key |
GOOGLE_API_KEY |
Google Gemini API key |
DEEPSEEK_API_KEY |
DeepSeek API key |
GROQ_API_KEY |
Groq API key |
MISTRAL_API_KEY |
Mistral API key |
OLLAMA_URL |
Ollama base URL (e.g. http://host.docker.internal:11434) |
XAI_API_KEY |
xAI API key |
Configure only the providers you use. Model IDs are namespaced (openrouter/…, openai/…, cerebras/…, ollama/…, etc.).
Cost display: OpenRouter returns exact billed cost when applicable. Other providers use estimated cost from OpenRouter’s public model pricing when an OpenRouter key is available; without it, non-OpenRouter cost may show as 0. Estimates are not invoices.
Data and persistence: For Docker, mount a volume at /app/data so config.json and the SQLite database persist across container restarts. Without a volume, all data is lost when the container stops.
Web authentication:
- Default admin:
admin/transrewrt26. - Manage users in Settings → Users.
- Reset a password:
docker exec <container> reset-web-password '<username>' '<new-password>'
⚠️ WARNING
Change the default admin password immediately on any network-accessible host.
Key settings (font, models, languages, etc.) are available in the application Settings.
- Development: Setup, build, test, and deploy (Electron, Web, Docker) - see dev/DEVELOPMENT.md.
- Architecture and system overview: Folder structure, tech stack, design decisions - see dev/SYSTEM-OVERVIEW.md.
Open an issue on GitHub. Include your platform (Windows / Linux / Docker) and app version (shown in the About dialog or on the Releases page).
Product names and icons belong to their respective owners and are used for identification purposes only. This software is not affiliated with or endorsed by any of the mentioned brands.
Copyright © 2026 Waldemar Scudeller Jr.






