Thanks for considering a contribution. Monorail is intentionally small; PRs that stay focused land fastest.
git clone https://github.com/monorailphp/monorail.git
cd monorail
composer install
npm installRun the tests:
./vendor/bin/pestRun a focused test:
./vendor/bin/pest --filter=ResourceTest- PHP: run
vendor/bin/pint --dirtybefore pushing. - TypeScript/React: Prettier + ESLint are configured;
npm run lint. - Prefer small, single-purpose PRs. A new column type, filter, or widget is one PR.
Every new primitive (column, field, filter, widget, block) requires three things:
- PHP class in the appropriate
src/directory withtoArray() - React renderer in
resources/js/components/ - Test in
tests/Feature/covering the serialization
If any of the three is missing, the PR isn't complete.
- Feature tests live in
tests/Feature/; fixtures intests/Fixtures/. - Use factories, not manual
new Model()in tests. - New behavior must ship with a test. Bug fixes must ship with a regression test.
Follow Conventional Commits:
feat(tables): add ImageColumn
fix(forms): correct DatePicker timezone on save
docs(i18n): document RTL class migration
Include:
- The exact Laravel, PHP, and package version
- A minimal reproduction (a failing test is ideal)
- Expected vs. actual behavior
Open issues at https://github.com/monorailphp/monorail/issues.