Framework-agnostic LTI 1.3 Advantage toolkit for Python — connect any app to any LMS.
Project description
ltitoolkit
A framework-agnostic LTI 1.3 Advantage toolkit for Python. Connect any Python application to any LTI 1.3 compliant LMS — Canvas, Moodle, Blackboard, and more — with a single dependency.
Status: early development (v0.1.0) — the vendored LTI engine is in place; the FastAPI adapter, Dynamic Registration, and token minting are being built. See
docs/PROJECT.mdfor the design rationale, capability boundaries, and roadmap.
What it does (portable — same code on every LMS)
- Launch & identity — verified OIDC/JWT launch: who the user is, which course, what role.
- LTI Advantage
- AGS — read/write grades for your tool's activities.
- NRPS — fetch the current course roster.
- Deep Linking — let instructors embed your content into a course.
- Dynamic Registration — install on a new LMS by pasting one URL (no credentials).
- Client-credentials tokens — authenticate as the tool with its own key; no user login required.
What it deliberately does not do
LTI is not a remote control for the whole LMS. Listing all courses, browsing/opening files, or creating native quizzes require each LMS's proprietary REST API and are not part of this portable core. Put that code in thin, per-LMS adapters (e.g. a Canvas adapter) built on top of the toolkit's generic token minting.
Layout
src/ltitoolkit/
├── core/ # vendored LTI 1.3 engine (PyLTI1p3, rebranded) — internal
├── fastapi/ # FastAPI adapter (Phase 2)
├── token/ # generic client-credentials token minting (Phase 4)
└── dynamic_registration/ # single-URL install (Phase 5)
Install (as a dependency)
Published via Git (no PyPI required). Pin to a tag:
pip install "git+https://github.com/CNIT-Organization/ltitoolkit.git@v0.1.0"
# with the FastAPI adapter:
pip install "ltitoolkit[fastapi] @ git+https://github.com/CNIT-Organization/ltitoolkit.git@v0.1.0"
Develop (uv)
uv sync # create the env + install runtime, fastapi extra, and dev tools
uv run pytest # tests
uv run ruff check src tests
uv run mypy src
uv build # build wheel + sdist into dist/
License
MIT. The core/ engine is a vendored copy of
PyLTI1p3 (MIT); its original license
is preserved in LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ff_ltitoolkit-0.1.0.tar.gz.
File metadata
- Download URL: ff_ltitoolkit-0.1.0.tar.gz
- Upload date:
- Size: 53.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14c24601a805fa4b586eb550d2f7bbf936d67d8ebf98d13009aa7fb6999452eb
|
|
| MD5 |
5adbb87cc51293c1533a8d70e0cefe8c
|
|
| BLAKE2b-256 |
43571eb3b31744a0a5b27eec18f1ed0bdd24055ab9c2030218ac920cc022ed95
|
File details
Details for the file ff_ltitoolkit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ff_ltitoolkit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 86.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
339afcc7cc08bd4ec3765121d7ffbe4eea91eb12e7f2c39ac2cd9266befc1b02
|
|
| MD5 |
7080927dcefb104054acc7b5b984aa40
|
|
| BLAKE2b-256 |
520f25b94d6f22506b6abbd77665d4ab03e9a3c16f8793c124c7b8fd6185d036
|