Lore is an open source project by Epic Games, and we welcome contributions from anyone.
Before you begin, read our Code of Conduct.
We welcome code contributions — bug fixes, features, performance improvements. The roadmap shows the big-rock themes we're working toward — a good place to find where help is wanted. There are also plenty of ways to help beyond writing code:
- Report a bug — open a GitHub Issue with steps to reproduce
- Request a feature — post in #feature-requests on Discord or open a GitHub Issue
- Improve documentation — fix typos, clarify explanations, add examples
- Triage issues — help reproduce bugs, add labels, confirm scope
- Review pull requests — read the code, test it, leave thoughtful feedback
You need the following tools installed:
- Rust — install via rustup. Lore requires the stable toolchain plus nightly for formatting.
- Python 3.13+ — required for smoke tests, with uv for dependency management.
Install the Rust toolchains:
rustup toolchain install stable
rustup toolchain install nightlyOptionally, install pre-commit to run linting automatically on each commit. CI enforces the same checks, so this is a convenience rather than a requirement:
uv tool install pre-commit
pre-commit installcargo build
cargo testTo run the same lint and format checks that CI enforces:
cargo +nightly fmt --all
cargo clippy --all-targets -- -D warnings --no-depsFor smoke tests:
uv run pytestFor anything beyond a trivial fix, open a GitHub Issue before writing code:
- Architectural decisions in a revision control system ripple widely. A brief discussion can save significant rework.
- A maintainer may already be working on the same problem.
- The change may be intentionally out of scope.
Wait for a maintainer to weigh in before investing significant effort.
For large or cross-cutting changes, check whether a Lore Enhancement Proposal is required before any code is written.
Read the full code standards in docs/developing/code-standards/ before writing your first line.
These are enforced by CI and must pass before any PR is merged:
cargo +nightly fmt --all # auto-format; run before committing
cargo clippy --all-targets -- -D warnings --no-deps # zero warnings requiredThe pre-commit hooks run these automatically if you've installed them.
Write commit messages in the imperative: "Add sparse sync for large repositories", not "Added sparse sync". Keep the subject line under 72 characters. Include a body when the why isn't obvious from the subject alone.
Reference the issue your change addresses:
Fix branch listing when remote has zero refs
When loreserver returns an empty refs list, the client panicked
instead of producing an empty result. Add a guard and a test case.
Fixes #123
Every commit must include a Signed-off-by: line. This certifies that your contribution complies with the Developer Certificate of Origin — a lightweight declaration that you have the right to submit the change under the MIT license.
Add the sign-off automatically with:
git commit -s -m "Your commit message"This appends:
Signed-off-by: Your Name <you@example.com>
Commits without a sign-off will not be merged.
Because the MIT license doesn't include an express patent grant, the DCO sign-off also carries an affirmation about patents. By signing off on your commit, you affirm that, to the best of your knowledge, your contribution doesn't infringe any patents you are aware of. Providing your sign-off is a representation about your knowledge, not a grant of any patent license.
- Fork the repository.
- Make your changes and ensure all tests pass and linting is clean.
- Add or update tests for the behavior you're changing.
- Open a pull request targeting
main. The PR description should cover:- What: what does this PR do?
- Why: what problem does it solve? Link to the GitHub Issue.
- How: a brief description of your approach, especially if non-obvious.
- Testing: how did you verify the change works?
- Every commit must include
Signed-off-by:as described above.
Keep PRs focused. One logical change per PR.
Expect at least one round of feedback before a PR is merged.
A PR requires two approvals from Maintainers to merge.
Address each piece of feedback, then re-request review. Maintainer decisions are final. If feedback isn't clear, ask.
An LEP is required before implementing any change that affects:
- The Lore wire protocol or on-disk format
- Public APIs (
loreCLI commands,lore-capi, language bindings) - Cross-cutting features that span multiple subsystems
- Any breaking change
For everything else, an Issue and PR are sufficient.
LEPs live in docs/proposals/. Copy docs/proposals/lep-template.md to a new file named YYYY-MM-DD-your-feature.md, fill it out, and open a pull request. The LEP must be accepted before implementation begins. See the LEP README for the full lifecycle and writing guidelines.
Documentation changes follow the same PR process as code. Read Lore's documentation standards in docs/developing/doc-standards/ before making significant doc changes.
Three linters keep docs consistent. See the doc-standards tooling guide for install and configuration, then run them before opening a PR:
vale <file> # Lore house style
npx markdownlint-cli2 <file> # Markdown formatting
lychee --config docs/developing/doc-standards/tools/lychee/lychee.toml docs/
# Run lychee across the whole tree, not just changed files: a moved or
# renamed page can break links in docs you didn't touch.Get help on Discord:
| Channel | Purpose |
|---|---|
#announcements |
Project news and releases |
#welcome |
Introductions — say hello |
#general |
General Lore discussion |
#support-requests |
Help with using Lore |
#feature-requests |
Ideas for future development |
#show-and-tell |
Share what you've built with Lore |
#off-topic |
Everything else |
For longer-form design discussions, open a GitHub Issue or bring the conversation to #general on Discord.
Issues tagged good-first-issue are a good starting point if you're new to the codebase. If you're unsure where to begin, ask in #support-requests.
Contributions that used AI tools (GitHub Copilot, Claude, etc.) are welcome. When you do, you must:
- Disclose which AI tools you used in the PR description.
- Review and test all AI-generated code. You remain fully responsible for its correctness, security, and license compliance.
- Write your own PR description — AI-generated PR descriptions are not accepted.
For security-sensitive changes (cryptography, authentication, authorization), disclose AI involvement early and expect closer review.
Lore is licensed under the MIT License. By submitting a pull request, you agree that your contribution may be used under that license.
All commits must include a Signed-off-by: line as described in the DCO sign-off section. This confirms your agreement with the Developer Certificate of Origin.
Preserve your own copyright on the code you contribute. For new files, add a copyright line and an SPDX identifier at the top:
// Copyright 2026 Jane Smith
// SPDX-License-Identifier: MIT
When modifying existing files, leave Epic's copyright line in place and add your own below it.
Contributed code must not introduce dependencies licensed under the GPL, LGPL, or AGPL. Their copyleft terms are incompatible with Lore's MIT license.