Legal
What Runlix is built on
Every third-party component Runlix ships or translates, with its licence checked at the source. The list is verified by a test: an unattributed dependency does not reach a release.
Updated 2026-09-12
Runlix is not written from nothing. It stands on Apple's MLX, on a set of Rust crates, on
Avalonia, and — for the model architectures — on code translated from mlx-lm rather than
merely called.
This page mirrors the NOTICE file in the repository, and that file is not maintained by good
intentions: a test fails the build if a direct dependency of the application, its tests, or the
engine does not appear in it. An unattributed dependency does not reach a release. Every
licence below was read from the package's own metadata, not from memory.
Native code — MLX
MLX — MIT, © 2023 Apple Inc. Extracted from the mlx-metal PyPI wheel; libmlx.dylib and
mlx.metallib are redistributed inside the bundle.
mlx-c — MIT, © 2023-2024 Apple Inc. MLX's C API, compiled from source; libmlxc.dylib is
redistributed. The sources are vendored byte for byte unmodified, and our corrections live
as separate patch files — a change made in place would disappear at the first update, and
disappear silently.
Translated code — the model architectures
mlx-lm — MIT, © 2023 Apple Inc.
The architectures in the engine are ported from mlx_lm/models/. This is not copied code:
it is a translation into idiomatic Rust, and the correspondence holds at the level of whole
files rather than lines. mlx-lm also serves as the reference oracle that decides whether the
translation is correct.
| Ours | Comes from | Version |
|---|---|---|
| phi3 | mlx_lm/models/phi3.py |
mlx-lm 0.31.3 |
| llama | mlx_lm/models/llama.py |
mlx-lm 0.31.3 |
| qwen2, qwen3 | mlx_lm/models/qwen2.py |
mlx-lm 0.31.3 |
| gemma3 | mlx_lm/models/gemma3_text.py |
mlx-lm 0.31.3 |
| deepseek | mlx_lm/models/deepseek_v2.py |
mlx-lm 0.31.3 |
| RoPE | mlx_lm/models/rope_utils.py |
mlx-lm 0.31.3 |
| masks | mlx_lm/models/base.py |
mlx-lm 0.31.3 |
A frozen copy of the sources translated from lives in the repository with its version recorded, which is how the project notices when the upstream changes. Nothing else does: no compiler and no package manager will ever warn you that derived code has drifted from its origin.
The encoders for text embeddings are translated the same way, from mlx-embeddings — MIT, © Prince Canuma — and verified against it as their own oracle. They are not reachable from the application yet.
Rust crates
tokenizers — Apache-2.0, Hugging Face · minijinja and minijinja-contrib — Apache-2.0, Armin Ronacher · serde_json — MIT or Apache-2.0.
minijinja-contrib earns its place for one specific reason: chat templates are written for
Python's Jinja2 and call Python string methods on strings. Its pycompat module is what makes
them render at all.
The downloader is a separate process and carries hf-hub — Apache-2.0, Hugging Face.
Separate because hf-hub brings tokio, reqwest and hyper with it: 356 crates against the
engine's 84. The engine that .NET loads in-process stays at 84.
Transitive dependencies are recorded in the engine's lock file.
.NET packages
Avalonia and its Desktop, Fluent, Inter font, ReactiveUI, Headless and Skia packages — MIT. Microsoft.Data.Sqlite — MIT. Tmds.DBus.Protocol — MIT.
LiveMarkdown.Avalonia — Apache-2.0, from DearVa, version 1.12.2 — is vendored rather than referenced, with its full licence text alongside the sources. It renders the live Markdown of streaming answers. It brings Markdig (BSD-2-Clause) and TextMateSharp with its grammars (MIT, each bundled grammar carrying its own licence) for syntax highlighting.
Test-only: xunit (Apache-2.0), Xunit.SkippableFact (MS-PL), Microsoft.NET.Test.Sdk (MIT), and Avalonia's headless packages, which draw the interface into a PNG with no screen and no permissions.
This website
Served by ASP.NET Core on .NET 10, rendered on the server, with no JavaScript sent to your
browser. Typefaces are Newsreader, Inter and IBM Plex Mono, all under the SIL Open Font Licence,
served from this domain rather than from Google Fonts. That is why the content security
policy can be default-src 'none' with 'self': there is no external host for this site to
contact, so there is no third party to disclose.
Where Runlix comes from
Runlix grew out of the code of OllamaManager, which is frozen and still works at
github.com/alexander64/ollamanager. The roadmap explains what changed and why.