Contributing and reference8 of 12
Licence
On this page
Kotoba is MIT. The full text is in LICENSE, and the copyright line reads Copyright (c) 2026
Kotoba contributors.
What MIT lets you do
Use it, copy it, change it, merge it into something else, publish it, sublicense it, and sell it. There is no revenue threshold, no non-commercial clause and no "open core" tier. Kotoba has exactly one edition, and this is it.
The one condition: the copyright notice and the permission notice must travel with the software, in
copies and in substantial portions of it. Ship the LICENSE file.
And the usual: no warranty, no liability. It is provided as is.
Using it commercially
Nothing in the MIT licence stops you. Build a product on it, run it for clients, keep your changes private, charge for the result.
Three things that are not MIT questions but come up in the same breath:
- The model provider is a separate contract. Your calls go to OpenAI or xAI (or an OpenAI-compatible endpoint you choose) under their terms, not this licence.
- ElevenLabs is a separate contract for speech, on the same footing.
- Live2D has its own terms, and one of them is a revenue threshold. See below — it is the one that catches people.
Third parties
THIRD_PARTY_NOTICES.md is the authoritative record. This page summarises it; where the two disagree,
that file is right.
The file exists because the Python package carries the frontend already compiled. Third-party JavaScript therefore travels inside the wheel even though its sources do not, and minification strips almost every banner comment those packages ship. A notice that only survives by accident is not a notice, so the licence texts in that file are reproduced by hand.
Nothing on the Python side is vendored: every Python dependency is installed from its own published package with its own licence intact, so no notice is owed there.
The inventory
The frontend's runtime dependency tree is 239 packages, and every one is listed, because any of
them may be compiled into the bundle in whole or in part. Over-inclusion is the safe direction, so
nothing is pruned by hand — build tooling appears in the list even though the wheel ships compiled
output with no node_modules beside it.
| Licence | Packages |
|---|---|
| MIT | 216 |
| ISC | 12 |
| Apache-2.0 | 5 |
| BSD-3-Clause | 3 |
| Apache-2.0 and BSD-3-Clause | 1 |
| 0BSD | 1 |
| CC-BY-4.0 | 1 |
That block is generated by scripts/licenses.py from the real dependency tree, and
api/tests/test_the_notices_are_not_kept_by_hand.py re-runs the generator and fails if the file has
drifted. A list that long, kept by hand, is a list that is quietly wrong. Two further tests check that
no copyright line was invented — a package's own statement is reproduced, or nothing is — and that no
package in the runtime tree is missing from the file. Measured: those checks pass.
Notable individual obligations, all recorded in full in the notices file:
- Apache-2.0 —
livekit-client,@livekit/protocol,@livekit/mutex,@swc/helpers,baseline-browser-mapping. The LiveKit packages arrive through the ElevenLabs browser SDK, which uses LiveKit for the WebRTC call. None ships aNOTICEfile, so section 4(d) adds nothing. - BSD-3-Clause —
webrtc-adapter, and the varint codec inside@bufbuild/protobuf. - The FXAA shader inside pixi.js carries its own BSD notice. pixi.js itself is MIT; that one shader is not.
- ISC —
earcut, and eleven others.
Live2D — the part that trips people
Two different things, with two different answers.
No Live2D model ships. Not one. Models belong to their authors, and the good ones — Live2D's own free samples included — forbid redistribution. Committing one here would republish somebody else's work under this repository's licence. So:
public/models/is gitignored and must stay that way.- Models live on the user's machine, in
~/.kotoba/models/. - The browser's first-run screen offers to fetch the free sample onto your machine, with its licence terms shown first. The repository never carries one.
scripts/build_web.pyrefuses to build if it finds a.moc3or.model3.jsonanywhere underpublic/, following symlinks.
The Cubism runtime does ship, and it is allowed to. Two pieces:
- Live2D Cubism Core —
public/live2dcubismcore.min.js, redistributed under the Live2D Proprietary Software Licence Agreement as "Redistributable Code". Its own header states the terms. - Live2D Cubism Web Framework — Copyright © Live2D Inc., used under the Live2D Open Software
License Agreement. It
arrives compiled inside
pixi-live2d-display'scubism4bundle rather than as a file of its own, and minification removes the source headers, which is why the notice is recorded by hand.
Two consequences for anyone redistributing Kotoba:
- The Framework may be distributed only as part of a work that also ships Live2D's own runtime, which is the Cubism Core above. Do not strip one and keep the other.
- Live2D asks any business whose annual gross revenue exceeds 10,000,000 JPY to hold a separate Cubism SDK Release License. That threshold is about the redistributor, not about this repository. If you are a company over it and you redistribute Kotoba, that licence is yours to obtain.
Using Kotoba yourself is not redistribution.
Where the licence lives in the package
api/pyproject.toml declares license = "MIT" and license-files = ["LICENSE", "THIRD_PARTY_NOTICES.md"] — the texts, not just the name, because MIT asks that the notice travel and
the bundled JavaScript carries an Apache-2.0 obligation of its own.
Those two files sit at the repository root. A manifest cannot reach outside its own directory, so the
build backend copies them into api/ on every wheel, sdist and editable build. The copies are not kept
in the repository — they would drift — and api/tests/test_packaged_data.py holds them byte-identical
when both exist. A build that can find neither the original nor a copy refuses, rather than
producing an unlicensed wheel.
Credits
The agent patterns underneath — a personality file, persistent memory, modular tools — are adapted from Hermes Agent, which is MIT. None of its code is used; only its ideas, reworked for something voice-first with a face.
