StudyDrift/lextures
StudyDrift/lextures has 62 GitHub stars and 6 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-15 04:43 UTC. Last push 2026-11-02.
What you can do
- Adaptive learning: Quizzes that adjust difficulty in real time using Item Response Theory (IRT 2PL/3PL), plus spaced-repetition review and mastery tracking.
- Course workspace: Build structured modules with TipTap-powered rich content, assignments, vibe activities (interactive AI lessons), and drag-and-drop organization.
- Teaching & grading: Calendars, gradebooks, Speed Grader, optional AI grading agent, enrollment management, and a 1:1 inbox.
- Standards-based grading: Map assignments to NGSS, CCSS, or custom standards and track mastery by objective with full audit trails.
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
The learning environment that adapts.
LearningREADME.md
OriginalLextures
The first truly adaptive learning environment
Lextures uses AI to streamline the process of course creation, quiz generation, and content management, enabling educators and learners to get to the content as quickly as possible
Lextures
Open-source learning platform for running courses end to end: structured modules, calendars, grading, and enrollments—with AI hooks when you want them—so instructors and students spend less time on tooling and more on teaching and learning. Ships a React web app, native iOS and Android clients, a Tauri desktop shell, a Go CLI, and an MCP server for AI agents.
Features
- Adaptive learning: Quizzes that adjust difficulty in real time using Item Response Theory (IRT 2PL/3PL), plus spaced-repetition review and mastery tracking.
- Course workspace: Build structured modules with TipTap-powered rich content, assignments, vibe activities (interactive AI lessons), and drag-and-drop organization.
- Teaching & grading: Calendars, gradebooks, Speed Grader, optional AI grading agent, enrollment management, and a 1:1 inbox.
- Standards-based grading: Map assignments to NGSS, CCSS, or custom standards and track mastery by objective with full audit trails.
- Communication: Course discussions, activity feed channels, and direct messaging between users.
- Notebooks: Personal and per-course notebooks with markdown, drawings, tasks, and slash commands.
- Integrations: LTI 1.3 provider/consumer (Canvas, Moodle, Blackboard); SAML 2.0, OIDC, and SCIM; Clever and ClassLink for K–12; Canvas course import and QTI; MCP for Cursor, Claude Desktop, and other AI agents.
- AI (optional): Multi-provider BYOK course-grounded tutor, quiz generation, misconception detection, and automated hint scaffolding (OpenRouter, Anthropic, OpenAI, Azure OpenAI, Bedrock, Vertex).
- 14 question types: From multiple choice and essays to live code execution and audio/video responses.
- Cross-platform clients: Web SPA, native iOS (SwiftUI) and Android (Jetpack Compose) apps, Tauri desktop, and a
lexturesCLI—all talking to the same REST API. - Accessibility: Immersive reader (read-aloud, captions, translation), accommodations engine, and WCAG-oriented UI work across web and mobile.
Repository
lextures/
├── server/ # Go API, migrations, background jobs
├── clients/
│ ├── web/ # React LMS (primary web app)
│ ├── ios/ # Native iPhone app (SwiftUI)
│ ├── android/ # Native Android app (Jetpack Compose)
│ ├── desktop/ # Tauri 2 desktop shell (wraps web)
│ ├── cli/ # lextures terminal client
│ └── mcp/ # Model Context Protocol server
├── www/ # Marketing site (lextures.com)
├── e2e/ # Playwright end-to-end tests
├── iac/ # Terraform self-host stack (AWS; other cloud modules reserved)
└── docs/ # Architecture, plans, and guides
Tech stack
| Layer | Choices |
|---|---|
| Web app | React 19, Vite 8, TypeScript 6, Tailwind CSS v4, React Router, TipTap, Vitest |
| Mobile | SwiftUI (iOS 17+), Kotlin + Jetpack Compose (Android) |
| Desktop | Tauri 2 (Rust + embedded web client) |
| CLI | Go + Cobra |
| API | Go 1.25, Chi, pgx, Argon2id passwords, JWT access tokens |
| MCP server | TypeScript stdio server in clients/mcp (Model Context Protocol) |
| Marketing site | React 19 + Vite in www/ |
| Data | PostgreSQL 16 |
| Queue | RabbitMQ (async jobs, e.g. Canvas import) |
| AI (optional) | Provider credentials (BYOK) in Settings → Intelligence → Models — see docs/ai-providers-byok.md |
For architecture notes (Compose port layout, dev vs prod web, testing conventions), see docs/ARCH.md. For where new code belongs and structural CI ratchets, see docs/ARCHITECTURE_CONVENTIONS.md.
Getting started
Quick start (Docker, recommended):
# Set first Global Admin email before anyone signs up (repo root .env or shell export)
export [email protected]
make dev # Postgres, RabbitMQ, API :8080, Vite :5173
Open http://localhost:5173 and sign up with the same email as BOOTSTRAP_ADMIN_EMAIL.
See Getting started for prerequisites, production-style Compose, promoting an existing user to Global Admin, and local development without full Docker. The marketing site also publishes Self-hosting (source: www/src/docs/self-hosting.md). Terraform layouts for single-VM deploys live in iac/.
Native mobile (optional): copy clients/mobile-dev.env.example to clients/mobile-dev.env, run bash clients/scripts/setup-mobile-dev.sh, then open clients/ios/Lextures.xcodeproj or clients/android in Android Studio. See clients/ios/README.md and clients/android/README.md.
Development
| Task | Command |
|---|---|
| Start dev stack | make dev |
| Lint all apps | make lint |
| E2E suite (Playwright) | make e2e |
| E2E against running stack | make e2e-run |
| Mobile lint + tests | make mobile |
| Build desktop app | make desktop |
| Build CLI | make cli |
Contributor setup details, env vars, and gotchas: AGENTS.md. Web client conventions (code splitting, bundle budgets): clients/web/CONTRIBUTING.md.
MCP integrations
Connect AI agents in Cursor, Claude Desktop, or any MCP client to your Lextures instance. The MCP server (clients/mcp) runs locally over stdio and calls the Lextures API with a personal access key.
Setup
Build the MCP server (from the repo root):
cd clients/mcp && npm install && npm run buildCreate an access key in the web app under Settings → Integrations. Include the MCP: Connect scope (
mcp:connect) plus any data scopes your agent needs (for examplecourses:read,courses:write,assignments:read,assignments:write,files:read,feed:read,enrollments:read). Copy the key when shown — it is only displayed once. The key’s user must also have course RBAC permission to create/edit items (item:create) for authoring tools.Add MCP config to your client. Open the project with this repository as the workspace root so
clients/mcp/dist/index.jsresolves. Example for Cursor or Claude Desktop:{ "mcpServers": { "lextures": { "command": "node", "args": ["clients/mcp/dist/index.js"], "env": { "LEXTURES_API_URL": "http://localhost:8080", "LEXTURES_API_TOKEN": "<paste-your-access-key>" } } } }- Cursor: Settings → MCP (or
.cursor/mcp.jsonin the project). - Claude Desktop:
~/.claude/claude_desktop_config.json.
The Settings → Integrations panel also provides a ready-to-copy JSON snippet with your instance’s API base URL.
- Cursor: Settings → MCP (or
Tools
| Tool | Description |
|---|---|
whoami |
Authenticated user profile |
list_courses |
Courses visible to the key (optional term filter) |
list_structure |
Course modules and items (optional kind filter) |
list_assignments |
Assignment metadata in a course |
list_quizzes |
Quiz metadata in a course |
list_content_pages |
Content page metadata in a course |
read_assignment |
Full assignment content and metadata |
read_quiz |
Full quiz (questions, settings, intro) |
read_content_page |
Content page markdown body |
create_module |
Create a course module |
create_content_page |
Create a content page (optional markdown + publish) |
update_content_page |
Update content page markdown |
create_assignment |
Create an assignment under a module |
update_assignment |
Update assignment content and settings |
create_quiz |
Create a quiz (optional questions + publish) |
update_quiz |
Modify quiz questions and delivery settings |
publish_structure_item |
Publish or unpublish any structure item |
list_content_tool_catalog |
Available content tools for a course |
get_content_tool_manifest |
Tool manifest + configSchema (e.g. inline_questions) |
list_content_tool_instances |
Tool instances (optional item filter) |
create_content_tool_instance |
Create a tool instance with settings |
update_content_tool_instance |
Update tool config / title / status |
attach_content_tool |
Create instance and embed a lex-tool fence in host markdown |
list_enrollments |
Course roster |
list_activity_feed |
Feed messages from the last N days |
list_files |
Files and folders in a course file space |
read_file |
Download a course file (text as UTF-8, binary as base64) |
Contributing
Contributions are welcome. Everyone who participates is expected to follow the Code of Conduct (Contributor Covenant 2.1).
- Fork the repository and create a branch for your change.
- Make focused commits with clear messages.
- Open a pull request describing what changed and why.
Report security issues per SECURITY.md — do not open public issues for vulnerabilities.
License
This project is licensed under the GNU Affero General Public License v3.0 — see LICENSE.
Lextures — getting to the content, faster.