love2d/love
LÖVE is an awesome 2D game framework for Lua.
Mixed signals — read the receipts
worst of 4 axesnon-standard license (Other); no tests detected
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 5d ago
- ✓12 active contributors
- ✓Other licensed
Show 4 more →Show less
- ✓CI configured
- ⚠Concentrated ownership — top contributor handles 67% of recent commits
- ⚠Non-standard license (Other) — review terms
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/love2d/love)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/love2d/love on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: love2d/love
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/love2d/love shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Mixed signals — read the receipts
- Last commit 5d ago
- 12 active contributors
- Other licensed
- CI configured
- ⚠ Concentrated ownership — top contributor handles 67% of recent commits
- ⚠ Non-standard license (Other) — review terms
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live love2d/love
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/love2d/love.
What it runs against: a local clone of love2d/love — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in love2d/love | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | Last commit ≤ 35 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of love2d/love. If you don't
# have one yet, run these first:
#
# git clone https://github.com/love2d/love.git
# cd love
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of love2d/love and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "love2d/love(\\.git)?\\b" \\
&& ok "origin remote is love2d/love" \\
|| miss "origin remote is not love2d/love (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 35 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~5d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/love2d/love"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
LÖVE is a cross-platform 2D game framework that lets developers write games in Lua and run them on Windows, macOS, Linux, Android, and iOS. It provides a unified C++/Lua API for graphics, audio, input, and physics, eliminating the need to rewrite game code for different platforms. The core strength is rapid prototyping and accessibility—games are written in Lua scripts that call into a battle-tested C++ engine. Monolithic C++ engine (src/ likely, inferred from 31M C++ LOC) with Lua FFI bindings, cross-platform abstraction via CMake (CMakeLists.txt as root), platform-specific code isolated by OS (platform/unix/, extra/windows/, extra/nsis/ for Windows installer templates). Testing lives in testing/ as a self-contained LÖVE project that exercises the full API. Release assets, docs, and CI templates in .github/, extra/, and platform/.
👥Who it's for
Indie game developers and students who want to build 2D games quickly in Lua without wrestling with low-level graphics APIs or platform-specific code. Contributors include C++ engine developers maintaining the core, Lua framework designers, and platform specialists (Android/iOS/macOS maintainers).
🌱Maturity & risk
Highly mature and actively maintained. The project has decades of history (Mercurial→Git), ships stable binary releases with a documented main branch for next major versions and patch branches for current releases, includes a comprehensive test suite in testing/, and runs CI on every commit via GitHub Actions (.github/workflows/main.yml). Clear verdict: production-ready with active development.
Very low risk for a stable framework. The codebase is mostly C++ (31M LOC) with Lua bindings (674K LOC), dependencies are pinned via CMake find modules (extra/cmake/), and the project explicitly rejects AI-generated contributions. Main risk is platform-specific issues (iOS/Android support requires specialized expertise), but the CI matrix and release branches mitigate this. Single-maintainer risk is minimal given the established team and structured release cycle.
Active areas of work
Actively developing the next major release on the main branch with nightly CI builds (.github/workflows/main.yml). Patch releases are backported to version-specific branches. The wiki (referenced but not in-repo) is the live documentation source. Recent work includes maintaining cross-platform parity, evidenced by platform-specific packaging (Debian control files in platform/unix/debian/, Windows RC files in extra/windows/).
🚀Get running
git clone https://github.com/love2d/love.git
cd love
mkdir build
cmake -B build -S. --install-prefix $PWD/prefix
cmake --build build --target install -j$(nproc)
./prefix/bin/love testing # Run the test suite
On *nix systems with CMake 3.16+; Windows users should follow megasource instructions (https://github.com/love2d/megasource).
Daily commands:
After install: love /path/to/game (runs a .love file or directory). For development: love testing runs the built-in test suite. No 'dev server'—LÖVE is a runtime, not a web framework.
🗺️Map of the codebase
- CMakeLists.txt: Root build configuration; defines compilation flags, finds dependencies (SDL2, Vorbis, Harfbuzz, LuaJIT), and orchestrates the entire build across platforms.
- .github/workflows/main.yml: CI/CD pipeline; runs automated tests, builds binaries for Windows/macOS/Linux, and gates commits—essential to understand before committing platform-specific code.
- extra/cmake/FindSDL2.cmake: Dependency resolver for SDL2 (input/windowing); customized for LÖVE's use case and reveals how platform abstraction works.
- platform/unix/debian/control.in: Debian package metadata; shows how the project ships on Linux and what runtime dependencies are declared.
- testing/: Self-contained test suite; the canonical way to verify API correctness and a model for how to use LÖVE itself.
- extra/resources/: Bundled assets (fonts, images) used by the engine; understanding fallback assets is crucial for graphics initialization.
🛠️How to make changes
Graphics changes: src/modules/graphics/ (inferred from C++ mass). Lua API surface: Lua binding stubs in src/modules/ subfolders. Platform ports: platform/{unix,windows}/ and extra/windows/, extra/nsis/ for OS-specific code. Tests: testing/ is a full LÖVE project—add new tests as Lua files. Build config: CMakeLists.txt and extra/cmake/ find modules. Packaging: platform/unix/debian/ for DEB, extra/nsis/ for Windows MSI.
🪤Traps & gotchas
Out-of-tree builds required: In-tree builds are forbidden by CMake config (see comment in Makefile/CMakeLists.txt); always create a separate build/ directory. CMake version: Pre-3.16 doesn't support --install-prefix flag; must use -DCMAKE_INSTALL_PREFIX= instead. LuaJIT pinning: The find module (extra/cmake/FindLuaJIT.cmake) is strict; system Lua won't work—builds require LuaJIT. Test suite is a .love project: testing/ must be run with the newly built love binary, not a system one. Platform-specific gotchas: Android/iOS builds have separate tool chains not in main CMakeLists.txt (likely in platform/ subdirs or separate docs); Windows requires megasource (prebuilt dependency bundle) rather than hunting down Visual C++, CMake, SDL2, etc. manually.
💡Concepts to learn
- Immediate Mode Graphics API — LÖVE's graphics calls (love.graphics.draw, setColor, etc.) are submitted per frame without retained state; understanding this pattern is essential to avoid performance traps and stale rendering bugs.
- Lua C API / FFI Binding — The bridge between Lua scripts and the C++ engine uses LuaJIT FFI; contributors modifying the API surface must understand how Lua types map to C++ and how errors propagate.
- Cross-Platform Abstraction Layer — LÖVE abstracts SDL2, OpenGL, and platform-specific code (Windows GDI, X11, Cocoa); knowing where these boundaries are prevents platform-specific bugs from leaking into core logic.
- Asset Streaming & Loading Pipeline — Games load images, sounds, and fonts at runtime; LÖVE's deferred loading (lazy initialization) and format auto-detection (Vorbis, Theora) are non-trivial and affect memory/performance.
- OpenGL State Machine — LÖVE wraps OpenGL for rendering; understanding stateful calls (glBindTexture, glUseProgram) and state leaks is crucial for graphics bugs and shader integration.
- In-Tree Build Prohibition — CMake config forbids building in the source directory; this prevents accidental commits of build artifacts and is enforced by the CI. Understanding why (cleanliness, multiple configs) prevents frustration.
- Test Suite as Runnable .love Project — Testing is not unit-test-only; the test suite (testing/) is a full LÖVE game that exercises APIs end-to-end. This pattern reveals integration requirements and validates the entire stack.
🔗Related repos
defold/defold— Alternative 2D game engine (proprietary but open-source Lua VM) with similar cross-platform reach; direct competitor in rapid prototyping space.raysan5/raylib— Minimal C library for 2D/3D graphics and input; often used in tandem with or as an alternative to LÖVE for developers preferring C over Lua.love2d/love-experiments— Official experimental branch repo mentioned in README; where major redesigns and breaking changes are tested before merging to main.love2d/megasource— Prebuilt Windows dependency bundle (SDL2, CMake, MSVC, LuaJIT, Vorbis, etc.); required for Windows builds and maintained by the same team.LuaJIT/LuaJIT— The Lua runtime underlying LÖVE; understanding FFI mechanics and performance tuning requires familiarity with LuaJIT's implementation.
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add CMake FindLuaJIT.cmake validation and LuaJIT version constraint testing
The repo has extra/cmake/FindLuaJIT.cmake but there's no CI workflow testing different LuaJIT versions or validating the find module works correctly across platforms. This is critical since LÖVE depends on LuaJIT and build failures due to version mismatches affect all developers. Adding a GitHub Actions workflow to test CMake configuration against multiple LuaJIT versions (e.g., 2.0.5, 2.1-beta) would catch compatibility issues early.
- [ ] Create .github/workflows/cmake-luajit-test.yml to test CMake builds with multiple LuaJIT versions
- [ ] Test FindLuaJIT.cmake module finds and validates LuaJIT correctly on Linux, macOS, and Windows runners
- [ ] Add validation that CMakeLists.txt properly uses the found LuaJIT version and fails gracefully on version mismatches
- [ ] Document expected LuaJIT versions in a new CMAKE_REQUIREMENTS.md file
Add platform-specific integration tests for audio/graphics dependencies
LÖVE supports Windows, macOS, Linux, Android, and iOS with complex dependencies (SDL2, Vorbis, Theora, ModPlug, Harfbuzz). While extra/cmake/ has FindX.cmake files, there are no automated tests verifying these dependencies are actually found and linked correctly. This leads to hard-to-debug runtime failures. Adding platform-specific CI jobs that compile minimal test binaries using each dependency would catch linker errors before release.
- [ ] Create .github/workflows/dependency-validation.yml with matrix jobs for Windows/Linux/macOS
- [ ] Add minimal test source files in src/test/cmake/ that exercise each dependency (e.g., test_sdl2.cpp, test_vorbis.cpp)
- [ ] Configure each test to compile against the dependency using CMake and verify runtime availability
- [ ] Add a DEPENDENCY_MATRIX.md documenting minimum versions for Vorbis, Theora, ModPlug, Harfbuzz, etc.
Create platform-specific packaging validation in CI for NSIS, Debian, and Xcode outputs
The repo has platform-specific packaging config (extra/nsis/ for Windows, platform/unix/debian/ for Linux, platform/xcode/ for macOS) but no CI validation that these actually produce working packages. The debian/, nsis/, and xcode/ directories suggest complex build artifacts that could silently fail during packaging. Adding CI jobs that validate package creation and structure would prevent broken releases.
- [ ] Extend .github/workflows/main.yml with jobs to build NSIS installer (Windows), Debian package (Linux), and Xcode bundle (macOS)
- [ ] Validate NSIS output: verify .exe structure and icon embedding from extra/windows/love.rc and extra/nsis/*.bmp
- [ ] Validate Debian package: verify .deb structure, metadata from platform/unix/debian/control.in, and man page from platform/unix/love.6
- [ ] Validate Xcode bundle: verify .app structure, icon assets from platform/xcode/Images.xcassets/, and Info.plist generation
- [ ] Document packaging build steps in a new PACKAGING.md file
🌿Good first issues
- Add missing test coverage for audio subsystems: testing/ exists but likely lacks exhaustive tests for Vorbis/Theora playback edge cases (seek behavior, format detection). A junior can add Lua test scripts in testing/ that exercise these without touching C++.
- Document the CMake find module pattern: extra/cmake/FindHarfbuzz.cmake, FindVorbis.cmake etc. are custom; a contributor could add inline comments or a small README explaining how to add a new dependency and why each flag is set, lowering the bar for future port maintainers.
- Unify platform-specific code comments: platform/unix/ and extra/windows/ have OS-specific logic (e.g., window creation, file paths) that could benefit from architecture doc comments linking to platform abstraction points. A junior could survey the codebase and add 'See also: src/modules/window/sdl_window.cpp' style comments.
⭐Top contributors
Click to expand
Top contributors
- @slime73 — 67 commits
- @MikuAuahDark — 8 commits
- @BytesHaven — 6 commits
- @musshorn — 5 commits
- @sarodz — 3 commits
📝Recent commits
Click to expand
Recent commits
7bdef86— fix love.graphics.newBuffer not requiring locations for vertex buffer formats. (slime73)db54893— mac/iOS: fix build (slime73)f542481— vulkan/metal: fix Shader:send(name, DataObject) truncating the data in some cases. (slime73)6fbc7eb— Merge pull request #2309 from shelvacu-forks/patch-async-setposition (slime73)5ede9f9— Merge pull request #2312 from MartinCornelius/tests/graphics-resetProjection (slime73)3094e20— tests(graphics): add resetProjection test (MartinCornelius)5f34b8d— opengl: fix buffer:clear causing an opengl error with some drivers (slime73)f898443— minor grammar improvement in pull request template (slime73)b1dba59— lua.window.setPosition: add param waitForSync (shelvacu)347006f— android: fix compilation (slime73)
🔒Security observations
The LÖVE game framework repository shows a relatively secure posture for an open-source project. No critical vulnerabilities were identified in the visible file structure. The codebase appears to follow standard practices for a C/C++ and Lua project. However, several improvements are recommended: 1) Establish a clear security policy and vulnerability disclosure process, 2) Conduct a full review of CMakeLists.txt and build configuration for compiler security flags, 3) Verify the integrity of embedded resources (fonts, icons), and 4) Ensure all dependencies are regularly audited. The absence of obvious hardcoded secrets, SQL queries, or web vulnerabilities is positive. The multi-platform support (Windows, macOS, Linux, Android, iOS) suggests the project has multiple security considerations, which appear to be well-managed through standard practices.
- Low · Missing Security Policy —
Repository root. The repository does not appear to have a SECURITY.md or security policy document for responsible vulnerability disclosure. This makes it difficult for security researchers to report issues responsibly. Fix: Create a SECURITY.md file with clear vulnerability disclosure guidelines and contact information for reporting security issues responsibly. - Low · CMake Configuration Review Recommended —
CMakeLists.txt. The CMakeLists.txt file is present but not provided for review. CMake configurations can introduce security risks through improper compiler flags, unsafe dependency handling, or misconfigured build options. Fix: Review CMakeLists.txt to ensure: 1) Security flags are enabled (e.g., -fstack-protector-strong), 2) Dependencies are properly validated, 3) No hardcoded paths or credentials, 4) Proper error handling in build scripts. - Low · Compressed Font Resources —
extra/resources/NotoSans-Regular.ttf.gzip. The NotoSans-Regular.ttf.gzip file is a gzipped resource. While likely legitimate, ensure that embedded font files are sourced from trustworthy origins and haven't been modified. Fix: Verify the source and integrity of embedded font resources. Consider using checksums or package verification to ensure resources haven't been tampered with. - Low · Windows Resource Files Present —
extra/windows/love.rc, extra/windows/love.ico. Windows .rc and .ico files are present. While typically safe, these files are sometimes exploited for code injection during build processes. Fix: Ensure build system properly validates and sanitizes resource files. Use trusted tools for creating and modifying .rc files. Implement checksum verification in the build pipeline.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.