Thanks for your interest in improving this library! Contributions of all sizes are welcome — bug reports, documentation fixes, new examples, and code.
- 🐛 Report a bug — open an issue using the Bug Report template.
- 💡 Request a feature — open an issue using the Feature Request template.
- 📝 Improve docs or examples — these are especially appreciated and easy to start with.
- 🔧 Fix a bug or add a feature — see the workflow below.
- Free Pascal 3.2.2 or later
- Lazarus 3.6.0 or later (provides
lazbuild) - No external dependencies
Build the package:
lazbuild package/lazarus/threadpool_fp.lpkOr compile a single example directly with FPC:
fpc -Fu./src examples/SimpleDemo/SimpleDemo.lprlazbuild tests/TestRunner.lpi
# Windows
./tests/TestRunner.exe -a -p --format=plain
# Linux / macOS
./tests/TestRunner -a -p --format=plainAll tests should pass before you submit a change. The full suite can take a few minutes to run because some tests exercise high task volumes.
CI runs the package build, the test suite, and all examples on Linux and Windows for every pull request — please make sure your branch is green.
- Use
{$mode objfpc}{$H+}{$J-}at the top of new units and programs. - Match the existing formatting: two-space indentation,
PascalCasefor types/methods, and a descriptive comment for non-obvious logic. - Filenames must match the
unitidentifier's casing exactly (e.g. unitThreadPool.Simplelives inThreadPool.Simple.pas). This keeps the library compiling on case-sensitive filesystems like Linux. - Keep the library dependency-free (FCL only).
- Fork the repo and create a branch off
main(e.g.feat/adaptive-threadsorfix/queue-overflow). - Make your change, including tests and/or an example where it makes sense.
- Run the test suite locally and make sure it passes.
- Update
CHANGELOG.mdand any relevant docs indocs/. - Open a pull request describing what changed and why.
For anything sensitive, please email the maintainer rather than opening a public issue.
Thank you for helping make this library better! 🙏