skillfed

PyLTI1p3

LTI 1.3 Advantage Tool implementation in Python

pylti1p3 v2.0.0 189.9K downloads/30d#9,921 on PyPI138
Permissive license MIT DORMANT released

What it is and what it does

PyLTI1p3 is a Python library that implements the LTI 1.3 Advantage standard, allowing you to build learning tools that integrate with educational platforms like Canvas. It handles the two-step LTI launch flow: first an OIDC login request to the platform, then a signed message launch back to your tool. The library provides ready-made adapters for Django and Flask, abstracting away the cryptographic validation and OIDC protocol details.

You configure the tool with issuer settings (auth endpoints, keys, deployment IDs) either via JSON files, Python dictionaries, or—in Django—via the admin UI. Once configured, you instantiate OIDCLogin or MessageLaunch objects bound to the incoming request, call redirect() or get_launch_data(), and the library handles JWT validation, key fetching, and claim extraction. It also provides convenience methods to check launch type and access to LTI services like Assignments & Grades and Names & Roles.

Use it for:

  • Build a custom learning tool that launches from Canvas or other LTI-compliant platforms with automatic user authentication.
  • Integrate grade passback and assignment submission handling via LTI Advantage services without implementing the protocol yourself.
  • Deploy the same tool across multiple LMS instances by configuring multiple issuers and client IDs in a single application.
  • Validate and extract user/course context from LTI launch messages to personalize tool behavior per institution.
  • Implement deep linking to allow instructors to select and embed tool content directly into course materials.

Worth the install?

AI-flagged interpretation of the facts on this page — verify before relying

Implements the LTI 1.3 Advantage specification for Python web applications, providing OIDC login and message launch handling with built-in adapters for Django and Flask.

Yes, if you are building an LTI 1.3 tool for Django or Flask and can accept dormant maintenance. The library is production-stable, has no known vulnerabilities, and handles the complex LTI protocol correctly. However, verify compatibility with your target LMS versions and be prepared to fork or patch if critical issues arise post-2022, since the original maintainer is not actively releasing updates.

Install

pylti1p3 on PyPI

pip

pip install pylti1p3

uv

uv add pylti1p3

poetry

poetry add pylti1p3

Installing PyLTI1p3

Before you install

Low install friction with only four runtime dependencies (jwcrypto, pyjwt, requests, typing-extensions). However, the package is dormant—last release was 2022-11-20 and last commit 2024-08-18—so it receives no active maintenance despite being marked Production/Stable.

License in practice

MIT license (permissive) means you can use, modify, and distribute this package freely in commercial and private projects with minimal restrictions.

Quickstart

# Install
pip install PyLTI1p3

# Django example
from pylti1p3.contrib.django import DjangoOIDCLogin, DjangoMessageLaunch
from pylti1p3.tool_config import ToolConfDict

tool_conf = ToolConfDict(settings)
oidc_login = DjangoOIDCLogin(request, tool_conf)
oidc_login.redirect(launch_url)

message_launch = DjangoMessageLaunch(request, tool_conf)
launch_data = message_launch.get_launch_data()

Requires Django or Flask web framework; LTI platform must be pre-configured with tool's public/private keys and deployment IDs.

Verify before relying

  • Whether the package works with LMS platforms released after 2022-11-20 without issues.
  • Current compatibility with Python 3.12+ (classifiers list only up to 3.11).
  • Whether dormant status means security patches will be applied if vulnerabilities are discovered.

Package facts

License MIT (permissive)
Python support not specified
Install friction low — pure-Python wheel
Runtime dependencies 4 — jwcrypto, pyjwt, requests, typing-extensions
Maintenance dormant — 1,363 days since the last release
Last repo commit
First released
Downloads 189,876/month — #9,921 on PyPI (30-day window, as of 2026-08-14)
Known vulnerabilities none known (OSV.dev, checked 2026-08-14)

Evidence: PyLTI1p3-2.0.0-py2.py3-none-any.whl

Keywords: pylti, pylti1p3, lti, lti1.3, lti1p3, django, flask

Development Status :: 5 - Production/StableEnvironment :: Web EnvironmentFramework :: DjangoFramework :: FlaskIntended Audience :: DevelopersIntended Audience :: Information TechnologyLicense :: OSI Approved :: MIT LicenseOperating System :: OS IndependentProgramming Language :: PythonProgramming Language :: Python :: 3Programming Language :: Python :: 3 :: OnlyProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.6Programming Language :: Python :: 3.7Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9Topic :: Internet :: WWW/HTTPTopic :: Internet :: WWW/HTTP :: Dynamic ContentTopic :: Internet :: WWW/HTTP :: WSGITopic :: SecurityTopic :: Software Development :: Libraries :: Application FrameworksTopic :: Software Development :: Libraries :: Python Modules

Tags

lti 1.3 tool implementationlearning tools interoperability pythonoidc login lti platformdjango flask lti integrationlti message launch validationlti advantage service accesscanvas lms integration python
lti-integrationeducational-technologyoidc-oauth2

More Python Modules packages