PHPackages                             bnsoftware/lti-1p3-tool - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. bnsoftware/lti-1p3-tool

ActiveLibrary[API Development](/categories/api)

bnsoftware/lti-1p3-tool
=======================

A library used for building IMS-certified LTI 1.3 tool providers in PHP.

v5.2.1(3y ago)059.8k↓94.6%[1 issues](https://github.com/bnsoftware/lti-1p3-tool/issues)Apache-2.0PHP

Since Jan 13Pushed 2y agoCompare

[ Source](https://github.com/bnsoftware/lti-1p3-tool)[ Packagist](https://packagist.org/packages/bnsoftware/lti-1p3-tool)[ RSS](/packages/bnsoftware-lti-1p3-tool/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (7)Versions (53)Used By (0)

LTI 1.3 Tool Library
====================

[](#lti-13-tool-library)

THIS IS A WORK IN PROGRESS - YOU SHOULD NOT USE THIS LIBRARY AT THIS TIME!!
===========================================================================

[](#this-is-a-work-in-progress---you-should-not-use-this-library-at-this-time)

If you're looking for a solid LTI v1.3 PHP package definitely check out [packbackbooks/lti-1p3-tool](https://github.com/packbackbooks/lti-1p3-tool) created by [Packback](https://packback.io)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[](#if-youre-looking-for-a-solid-lti-v13-php-package-definitely-check-out-packbackbookslti-1p3-tool-created-by-packback)

[Test status](https://github.com/bnsoftware/lti-1-3-php-library/actions/workflows/run_tests.yml/badge.svg?branch=master)

A library used for building IMS-certified LTI 1.3 tool providers in PHP.

This library allows a tool provider (your app) to receive LTI launches from a tool consumer (i.e. LMS). It validates LTI launches and lets an application interact with services like the Names Roles Provisioning Service (to fetch a roster for an LMS course) and Assignment Grades Service (to update grades for students in a course in the LMS).

This library was forked from [packbackbooks/lti-1p3-tool](https://github.com/packbackbooks/lti-1p3-tool) created by [Packback](https://packback.io), which was in turn forked from [IMSGlobal/lti-1-3-php-library](https://github.com/IMSGlobal/lti-1-3-php-library), initially created by @MartinLenord.

Installation
------------

[](#installation)

Run:

```
composer require bnsoftware/lti-1p3-tool
```

In your code, you will now be able to use classes in the `BNSoftware\Lti1p3` namespace to access the library.

### Configure JWT

[](#configure-jwt)

Add the following when bootstrapping your app.

```
Firebase\JWT\JWT::$leeway = 5;
```

### Implement Data Storage Interfaces

[](#implement-data-storage-interfaces)

This library uses three methods for storing and accessing data: cache, cookie, and database. All three must be implemented in order for the library to work. You may create your own custom implementations so long as they adhere to the following interfaces:

- `BNSoftware\Lti1p3\Interfaces\ICache`
- `BNSoftware\Lti1p3\Interfaces\ICookie`
- `BNSoftware\Lti1p3\Interfaces\IDatabase`

View the [Laravel Implementation Guide](https://github.com/bnsoftware/lti-1-3-php-library/wiki/Laravel-Implementation-Guide) to see examples (or copy/paste the code outright). Cache and Cookie storage have legacy implementations at `BNSoftware\Lti1p3\ImsStorage\` if you do not wish to implement your own. However, you must implement your own database.

### Create a JWKS endpoint

[](#create-a-jwks-endpoint)

A JWKS (JSON Web Key Set) endpoint can be generated for either an individual registration or from an array of `KID`s and private keys.

```
use BNSoftware\Lti1p3\JwksEndpoint;

// From issuer
JwksEndpoint::fromIssuer($database, 'http://example.com')->outputJwks();
// From registration
JwksEndpoint::fromRegistration($registration)->outputJwks();
// From array
JwksEndpoint::new(['a_unique_KID' => file_get_contents('/path/to/private/key.pem')])->outputJwks();
```

Documentation
-------------

[](#documentation)

[The wiki](https://github.com/bnsoftware/lti-1-3-php-library/wiki) provides more detailed information about how to use this library, including a [Laravel Implementation Guide](https://github.com/bnsoftware/lti-1-3-php-library/wiki/Laravel-Implementation-Guide).

Contributing
------------

[](#contributing)

For improvements, suggestions or bug fixes, make a pull request or an issue. Before opening a pull request, add automated tests for your changes, ensure that all tests pass, and any linting errors are fixed.

### Testing

[](#testing)

Automated tests can be run using the command:

```
composer test
```

Linting can be run using

```
# Display linting errors
composer lint
# Automatically fix linting errors
composer lint-fix
```

###  Health Score

36

—

LowBetter than 81% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity29

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~19 days

Recently: every ~7 days

Total

51

Last Release

996d ago

Major Versions

v1.1.1 → v2.0.02021-06-24

v2.0.3 → v3.0.02021-09-22

v3.0.3 → v4.0.02021-10-29

v4.1.3 → v5.0.02022-01-18

### Community

Maintainers

![](https://www.gravatar.com/avatar/f5843cd78c035c460c79664ea436c3e5b0997fc0c4e85f58d6665a1f48f8ab9e?d=identicon)[TheOneDaveYoung](/maintainers/TheOneDaveYoung)

---

Top Contributors

[![dbhynds](https://avatars.githubusercontent.com/u/849626?v=4)](https://github.com/dbhynds "dbhynds (188 commits)")[![MartinLenord](https://avatars.githubusercontent.com/u/10765490?v=4)](https://github.com/MartinLenord "MartinLenord (98 commits)")[![TheOneDaveYoung](https://avatars.githubusercontent.com/u/33292917?v=4)](https://github.com/TheOneDaveYoung "TheOneDaveYoung (43 commits)")[![lin-brian-l](https://avatars.githubusercontent.com/u/29388364?v=4)](https://github.com/lin-brian-l "lin-brian-l (37 commits)")[![cophaso](https://avatars.githubusercontent.com/u/8699045?v=4)](https://github.com/cophaso "cophaso (25 commits)")[![pbcraig](https://avatars.githubusercontent.com/u/38537396?v=4)](https://github.com/pbcraig "pbcraig (24 commits)")[![JanHolger](https://avatars.githubusercontent.com/u/25184957?v=4)](https://github.com/JanHolger "JanHolger (23 commits)")[![pb-sobrien](https://avatars.githubusercontent.com/u/39270127?v=4)](https://github.com/pb-sobrien "pb-sobrien (22 commits)")[![zlayaAvocado](https://avatars.githubusercontent.com/u/50310535?v=4)](https://github.com/zlayaAvocado "zlayaAvocado (18 commits)")[![mattwright](https://avatars.githubusercontent.com/u/500715?v=4)](https://github.com/mattwright "mattwright (10 commits)")[![EricTendian](https://avatars.githubusercontent.com/u/498525?v=4)](https://github.com/EricTendian "EricTendian (10 commits)")[![jonahl](https://avatars.githubusercontent.com/u/10552822?v=4)](https://github.com/jonahl "jonahl (8 commits)")[![jlegault-packback](https://avatars.githubusercontent.com/u/98757291?v=4)](https://github.com/jlegault-packback "jlegault-packback (4 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")[![dmitry-viskov](https://avatars.githubusercontent.com/u/1876893?v=4)](https://github.com/dmitry-viskov "dmitry-viskov (2 commits)")[![AramayisO](https://avatars.githubusercontent.com/u/40707951?v=4)](https://github.com/AramayisO "AramayisO (2 commits)")[![Otterfan](https://avatars.githubusercontent.com/u/210404?v=4)](https://github.com/Otterfan "Otterfan (2 commits)")[![matthieutran](https://avatars.githubusercontent.com/u/22088815?v=4)](https://github.com/matthieutran "matthieutran (1 commits)")[![LMattson](https://avatars.githubusercontent.com/u/3170517?v=4)](https://github.com/LMattson "LMattson (1 commits)")[![Lokilein](https://avatars.githubusercontent.com/u/26959665?v=4)](https://github.com/Lokilein "Lokilein (1 commits)")

---

Tags

LTI

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/bnsoftware-lti-1p3-tool/health.svg)

```
[![Health](https://phpackages.com/badges/bnsoftware-lti-1p3-tool/health.svg)](https://phpackages.com/packages/bnsoftware-lti-1p3-tool)
```

###  Alternatives

[google/apiclient

Client library for Google APIs

9.8k191.4M988](/packages/google-apiclient)[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k96.9M671](/packages/laravel-socialite)[packbackbooks/lti-1p3-tool

A library used for building IMS-certified LTI 1.3 tool providers in PHP.

51438.3k2](/packages/packbackbooks-lti-1p3-tool)[wheelpros/fitment-platform-api

Magento 2 (Open Source)

12.1k1.2k](/packages/wheelpros-fitment-platform-api)[get-stream/stream

A PHP client for Stream (https://getstream.io)

1451.3M8](/packages/get-stream-stream)[agence104/livekit-server-sdk

Server-side SDK for LiveKit.

79189.9k1](/packages/agence104-livekit-server-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
