Thanks for your interest in contributing. LabFox supports four platforms from a single Flutter codebase. A bug you fix on desktop is fixed on mobile too — every contribution reaches every platform.
Source code Apache-2.0 open source — anyone may use, modify, redistribute
Desktop (Win/macOS) Free
Mobile (Android/iOS) Sold on the App Store / Play Store
Code you contribute is published under Apache-2.0 and will also ship in the paid mobile apps. Make sure you understand and accept that before contributing. If you don't, please don't contribute.
The "LabFox" name and logo are trademarks and are not covered by the Apache-2.0 license. Fork freely, but use a different name and icon. (TRADEMARK.md)
- Read AGENTS.md first. It covers the architecture, conventions, and what's off-limits. The same rules apply to humans and coding agents alike.
- Check that what you plan to work on falls inside the 1.0 scope (AGENTS.md §9).
- For any large change, discuss it in an issue before writing code.
flutter --version # 3.38.9, stable channel
flutter pub get # resolves the whole pub workspace at onceThe repository is a native pub workspace (Dart 3.6+), not a melos monorepo, so
there is no extra tool to install: one flutter pub get at the root resolves
apps/labfox and every package against a single lockfile.
dart run build_runner build --delete-conflicting-outputsIssue → Branch → Commit → Pull Request
LabFox is a GitLab client, but development happens on GitHub. The domain term inside the app is still Merge Request; only the contribution process uses Pull Request.
Branch from dev and target your pull request at dev. Nothing is committed directly to dev or main — main holds releases only.
git switch -c feat/12-mr-diff-viewer dev- Branches:
<type>/<issue-number>-<slug>— type is one offeatfixdocsrefactortestchore - Commits: Conventional Commits
e.g.
fix(gitlab_api): handle keyset pagination in project list - Link the issue from the PR description with
Closes #12 - Details:
.agents/docs/workflow.md
dart format .
flutter analyze
flutter testDon't open a PR while analyze warnings remain.
- Never pull in GPL, LGPL, or AGPL code. Once copyleft spreads, the entire project becomes GPL, which voids Apache-2.0 and blocks App Store distribution.
- New dependencies are limited to MIT, BSD, Apache-2.0, ISC, and Zlib. If you add one, update THIRD_PARTY_NOTICES.md.
- Don't copy code from other projects. Read them for reference all you like, but write the implementation yourself.
- Check fonts, icons, and images for commercial-use rights as well.
- Don't build a separate UI per platform. Branch on screen width instead:
use
LayoutBuilderplus breakpoints, notPlatform.isAndroid. This is exactly why a desktop contribution carries over to mobile. - Even for a desktop-only fix, verify that nothing breaks at mobile width (<600).
- Never leave tokens (PAT / OAuth) in logs, code, screenshots, or commits.
- When attaching logs to an issue or PR, scrub
Authorizationheaders and anyglpat-strings.
Include a Signed-off-by line in every commit.
git commit -s -m "fix(gitlab_api): handle keyset pagination"This signals your agreement to the Developer Certificate of Origin and confirms that you have the right to contribute the code. There is no separate CLA to sign.
- Keep PRs small enough to review. Anything over 1,000 lines gets a look at whether it can be split.
- Attach screenshots for UI changes — both mobile and desktop, both light and dark.
- CI must pass before anything is merged.
- Reviews may take a while; thanks for your patience.
| Bug reports | Most useful when the reproduction steps are clear |
| Self-hosted issues | Problems on different GitLab versions and configurations are hard for us to reproduce |
| Desktop UX | Windows/macOS feel, keyboard shortcuts, multi-pane layouts |
| Accessibility | Screen readers, contrast, touch targets |
| Translation | Multi-language support |
- Features outside the 1.0 scope (Wiki, Packages, Registry, Analytics, Admin, and so on)
- UI built with GitHub brand assets
- Changes that bypass the architecture (calling
GitLabClientdirectly from a widget, for example)
Open a GitHub issue with the question label, or
comment on the issue or pull request you are working on — see SUPPORT.md.
For anything that must stay private, email inquiry@sloki9637.com. Suspected vulnerabilities go through SECURITY.md instead.