$npx skillfedfor your agent

PyLTI1p3

LTI 1.3 Advantage Tool implementation in Python

With conditionsPyPI Python ModulesReleased Nov 2022189.9K downloads / moMITPure Python

Decision gist · record as of 2026-08-14

pure-Python wheel — PyLTI1p3-2.0.0-py2.py3-none-any.whl
v2.0.0 · released 2022-11-20 · 4 runtime deps: jwcrypto, pyjwt, requests, typing-extensions

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.AI-flagged interpretation of the facts on this page — verify before relying

Before you install

  • Requires Django or Flask web framework; LTI platform must be pre-configured with tool's public/private keys and deployment IDs.
  • 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 · maintenance · safety

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

last release 2022-11-20 (1363 days) · last repo commit 2024-08-18 · 138 stars

0 known vulnerabilities (OSV.dev, 2026-08-14) · 189,876 downloads/mo, #9,921 on PyPI

Verify before relying

# 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()
  • 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.
Same gist for agents: .md · .json

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 on it.

With conditions

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

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.

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

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()

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

LicenseMIT permissive
Python supportNot specified
Install frictionLow. Pure-Python wheel
Runtime dependencies
4 packages
jwcryptopyjwtrequeststyping-extensions
MaintenanceDormant 1,363 days since the last release
Last repo commit
First released
Downloads189,876 / month, #9,921 on PyPI 30-day window, as of 2026-08-14
Known vulnerabilitiesNone known OSV.dev, checked 2026-08-14
Classifiers
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

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

Tags

Capabilities
lti 1.3 tool implementationlearning tools interoperability pythonoidc login lti platformdjango flask lti integrationlti message launch validationlti advantage service accesscanvas lms integration python
Topics
lti-integrationeducational-technologyoidc-oauth2
PyPI keywords
pyltipylti1p3ltilti1.3lti1p3djangoflask

Let your AI agent find packages like this

Example. Real query, live index.

You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.

wish › “lti 1.3 tool implementation”

  • PyLTI1p3Implements the LTI 1.3 Advantage specification for Python web…
  • aioquicaioquic implements QUIC and HTTP/3 network protocols for Python,…
  • qh3qh3 is a Python library implementing the QUIC network protocol and…

Give your agent the search over MCP, or paste the wish link into any chat.

More Python Modules packages

idna Worth it
PyPI · Python Modules · released Jun 2026

Converts domain names between Unicode and ASCII-compatible encoding (Punycode) according to IDNA 2008 and Unicode Technical Standard 46, with security validation and broader script coverage than the standard library.

Install it if you work with internationalized domain names, need to validate domains, or use HTTP clients that depend on it transitively.

BSD-3-Clausepure Python · 3.9+
1.8Bdownloads / mo
setuptools Worth it
PyPI · Python Modules · released Aug 2026

Setuptools is a Python build backend and package management tool that handles building, distributing, and installing Python packages, including support for C/C++ extension modules.

MITpure Python · 3.10+
1.6Bdownloads / mo
PyYAML Worth it
PyPI · Python Modules · released Sep 2025

PyYAML parses and emits YAML 1.1 data format, enabling serialization and deserialization of configuration files and Python objects to and from human-readable YAML text.

MITcompiled wheel · 3.8+
1.2Bdownloads / mo
pydantic Worth it
PyPI · Python Modules · released May 2026

Pydantic validates Python data structures against type hints, coercing and checking input at runtime to ensure it matches a declared schema.

MITpure Python · 3.9+
1.1Bdownloads / mo
annotated-types Worth it
PyPI · Python Modules · released Jul 2026

Provides reusable metadata objects for use with PEP-593 `typing.Annotated` to express common constraints like bounds, collection sizes, and predicates on types.

Install it if you use or build libraries that need to express type constraints in a standardized, inspectable way—or if you want to annotate your own types with…

MITpure Python · 3.10+
871.3Mdownloads / mo
typing-inspection Worth it
PyPI · Python Modules · released Aug 2026

Provides runtime tools to inspect and introspect Python type annotations, enabling programmatic examination of type hints at execution time.

MITpure Python · 3.10+
783.0Mdownloads / mo

See also flask-oidc · Flask-OpenID · django-oidc-provider · mozilla-django-oidc · Authlib · Flask-Dance · identity · uipath-llm-client · dash-auth · axioms-fastapi