finds.dev← search

// the find

tsugiproject/tsugi

★ 370 · PHP · Apache-2.0 · updated Jun 2026

Tsugi Admin, Developer, and Management Console (pls join the dev list)

Tsugi is a PHP framework for building LTI-compliant learning tools and hosting them in a multi-tenant environment. It's the admin/management console for an edtech platform that implements IMS Global standards (LTI 1.1/1.3, Common Cartridge, ContentItem). Aimed at developers who need to integrate with LMSes like Canvas, Blackboard, or Sakai without reinventing the OAuth/LTI plumbing.

- LTI implementation is genuinely thorough — covers LTI 1.1 OAuth, LTI 1.3 OIDC, Deep Linking, and Roster services, which is a non-trivial amount of spec work that most shops get wrong

- Multi-tenant key management with per-tenant secrets and a full admin UI for issuer/key approval is the right architecture for a tool marketplace — not bolted on later

- Active maintenance with a rolling deployment model (no traditional releases, cron-pulled from main) works well for a hosted service and keeps operators off stale security fixes

- Docker compose setup actually works out of the box, which is rare for PHP projects of this age and complexity

- MySQL-only for the database layer — there's no abstraction that would let you run Postgres, which limits hosting options and rules out managed PaaS offerings that don't do MySQL

- The PHP-to-Python migration mentioned in the README is aspirational vaporware right now — there's one linked text file showing a Django sample, not a real parallel implementation

- No semver releases and 'run close to main' is fine for Dr. Chuck's servers but is a real operational burden for anyone else hosting this — a breaking schema change lands the same day as a bug fix

- The repo is effectively a monorepo via git submodules (tsugi-php lib is a submodule), which means cloning, updating, and CI all have hidden complexity that isn't called out prominently in the setup docs

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →