A REST API keeps translation under your control
LibreTranslate wraps Argos Translate in a Flask service with a web interface and documented HTTP endpoints. Applications can submit text for translation, ask which languages are installed, and request language detection without calling Google or Azure. The server can run offline once its packages and model files are present. That is the reason to choose it: translation data stays on infrastructure you control, subject to whatever logging, network, and access rules you configure around the service.
The API shape is easier to integrate than a raw model library. A client sends source and target codes, text, and optional settings, then receives translated text and detection details. Self-hosted API keys can grant per-user request or character allowances when rate limits are enabled. Keys are off by default, so an internet-facing deployment needs deliberate authentication, request limiting, TLS termination, and monitoring rather than a bare process bound to a public port.
Language models determine disk use and translation quality
Argos language packages are separate from the 449 MB environment our lab installed. LibreTranslate loads all available languages by default, while --load-only en,es,fr limits the set. The build-from-source guide says normal images download models on first run; an offline image can include them at build time. Disposable containers should mount the model directories or they will fetch the same files again after replacement.
Not every source and target combination has a direct model. The supported-languages guide says LibreTranslate may pivot through another language, usually English, when a direct pair is unavailable. That expands reach at the cost of another inference step and another chance to lose meaning. Before deployment, select the actual pairs your product needs, record the installed model versions, and test representative names, short labels, sentences, formatting, and domain terms for each direction.
What happened when we ran it
Our sandbox cloned commit 4ef1333 and installed 90 packages in 39 seconds. Dependencies occupied 449 MB after installation, while the checkout itself was 2.8 MB with 215 files and about 3,768 lines of source. The build completed in 4 seconds. Repository signals included 4 CI workflow files, a Compose file, no Dockerfile at the root, and no top-level tests directory. Pip-audit reported 12 known vulnerabilities.
The test command exited with code 1 after 265 seconds. Pytest reported 13 passed tests and 2 setup or collection errors out of 15, with 11 warnings. Both errors came from test_api_detect_language.py; each exceeded pytest-timeout's 120-second limit. The log does not say why detection stalled, so we will not assign a cause to models, networking, CPU, or test setup. It only establishes that commit 4ef1333 did not finish its suite in our fresh container.
The coverage summary in that run reported 50 percent across 1,517 measured statements, but coverage was not the failing gate. The two 120-second detector timeouts were. We did not start a production Gunicorn service, download every language model, measure translation latency, or score translations against a reference corpus. The 39-second install and 4-second build should not be read as time to a fully populated translation endpoint.
Production uses Gunicorn or Docker, not the basic server
The official installation guide supports Python 3.8 or newer and opens the basic service on port 5000. For production, it recommends Gunicorn or Docker to avoid memory leaks. The repository also carries Compose, Kubernetes, Helm, and CUDA routes. CUDA guidance names a 12.4.1 environment, so GPU operators need compatible NVIDIA drivers and container support rather than assuming any CUDA host will work.
Model storage and worker layout deserve a deployment test. Gunicorn can run multiple processes, while shared storage, API-key data, translation caches, and downloaded models need consistent paths. The configuration surface includes thread count, request limits, character limits, Prometheus metrics, file-translation switches, URL prefixes, and an under-attack mode. Environment variables mirror command arguments with an LT_ prefix, which makes container configuration practical but also creates enough knobs to document and pin.
Detection and short text need their own acceptance set
Open issue 971 shows a Chinese sentence submitted with source: auto and reported as Korean at 86 percent confidence. That is one submitted example, not a general accuracy benchmark, yet it matches the part of our suite that timed out: detection deserves direct scrutiny. If the caller already knows the source language from account settings or document metadata, passing it explicitly avoids making detection another dependency in the request path.
Issue 828 reports a wrong answer with low confidence for single-word translation. Other open reports concern particular proper nouns, capitalization, and language pairs. Neural translation quality changes with model and context, so an endpoint returning HTTP 200 does not prove the result is usable. A product should keep a reviewed corpus for its real inputs and rerun it whenever LibreTranslate, Argos, or any installed language package changes.
AGPL licensing fits an open service better than a closed modification
LibreTranslate uses AGPL-3.0, while the project also publishes trademark guidelines. Organizations that modify the server and provide it over a network should obtain legal advice about source-sharing duties before deployment. Using the unmodified service internally may be straightforward, but the license is materially different from permissive alternatives such as MIT or Apache-2.0. Branding rights are a separate question from code rights.
GitHub showed 16,230 stars, 124 combined issues and pull requests, and a last push on August 23, 2026. Release v1.9.6 arrived on May 26 with a Turkish UI addition, while issue activity continued through August 27. The project is active and widely watched; those signals do not clear the 12 audit findings or the two detector timeouts. Pin the service, language packages, and deployment configuration, then make translation quality part of every upgrade review.

