Thank you for your interest in contributing to Commerce Link! This guide will help you get started.
The full local setup (prerequisites, Docker-based infrastructure, seeded users, run instructions) lives in the main application repository so we keep it in one place. Follow the README there:
Once your local environment is up, return here for contribution guidelines, repository structure, and coding conventions.
Several modules are published to GitHub Packages as Maven artifacts. To resolve those dependencies locally, Maven must authenticate with a Personal Access Token (PAT).
- Create a GitHub PAT with at least the
read:packagesscope. If the packages or repository are private, also grant scope that allows reading that repository (for examplerepofor private repos under classic tokens, or the equivalent for a fine-grained token on the relevant repositories). - Add a
<server>entry whoseidmatches theserver-idused for GitHub Packages in the project POMs (for CI this org usesgithub— see the shared publish workflow in this repo). - Put credentials in your user Maven settings file, typically
~/.m2/settings.xml. Do not commit tokens or check them into the repository.
Example fragment (replace the placeholders):
<settings>
<servers>
<server>
<id>github</id>
<username>YOUR_GITHUB_USERNAME</username>
<password>YOUR_GITHUB_PAT</password>
</server>
</servers>
</settings>For background on creating tokens, see Managing your personal access tokens. After saving settings.xml, run mvn clean install (or your usual Maven commands) from the project; dependency downloads from GitHub Packages should succeed.
Commerce Link is organized as separate repositories following a plugin-based architecture:
- Core:
app,starter,commons,rest-client - Plugin system:
provider-apidefinesProviderDescriptor<T>, domain APIs extend it, implementations provide concrete integrations - Provider APIs:
invoicing-api,payments-api,shipping-api,marketplace-api,supplier-api,pim-api - Implementations: e.g.,
payments-stripe,shipping-furgonetka,invoicing-fakturownia
New to CommerceLink? Look for issues labeled good first issue. These are smaller, well-scoped tasks that are a great starting point for new contributors.
- Use the Bug Report issue template
- Include steps to reproduce, expected vs actual behavior, and your environment details
- Use the Feature Request issue template
- Describe the problem you're solving, not just the solution
- Fork the repository
- Create a feature branch from
main - Make your changes following the coding conventions below
- Ensure
mvn clean compilepasses - Run existing tests:
mvn test - Submit a pull request using the PR template
This is one of the best ways to contribute. To add a new payment, shipping, invoicing, or marketplace provider:
- Create a new Maven module (e.g.,
payments-newprovider) - Add a dependency on the corresponding API module (e.g.,
payments-api) - Implement the provider interface (e.g.,
PaymentProvider) - Implement the descriptor (e.g.,
PaymentProviderDescriptor) withname(),displayName(),configurationFields(), andcreate(Map) - Register via
META-INF/services/forServiceLoaderdiscovery - Add a
README.mddescribing configuration requirements - Add a
LICENSEfile (MIT)
Use the Integration issue template to propose new integrations.
- No Logger statements — all logging goes to Sentry automatically. Use
System.out/System.erronly in rare cases. - No comments — code should be self-explanatory. Refactor instead of commenting.
- DTOs — use factory methods:
OrderDto.from(Order order) - Localization — implement
LocalizedEnuminterface. Polish is the primary language. - CSV — use
CSVLoader,CSVWriter,CSVReadyfromcommercelink-starter - Error handling —
GlobalExceptionHandlercatches common exceptions. Sentry logs errors automatically.
DynamoDB Tables: PascalCase plural (e.g., Orders, Products)
- Acronyms stay uppercase:
RMA(notRma) - No version suffixes (no
V2) - Name reflects what the table stores
DynamoDB Attributes: camelCase with specific patterns:
- Attribute names match Java field names (no shortening)
- Manufacturer codes:
mfn - Quantities:
qty - Unit prices/costs:
unitPrice,unitCost - Totals without prefix:
totalPrice,totalCost - Timestamps:
{action}At(e.g.,createdAt,orderedAt,shippedAt) - British spelling:
fulfilment(not fulfillment) - Nested documents: Java field without domain prefix (e.g.,
eventsnotdeliveryEvents)
SQS Queues: {module}-{domain}-{action}-queue[.fifo]
- Singular nouns:
ordernotorders - Verb for action:
generatenotgenerator - Example:
app-order-generate-queue
- The main
commercelinkapplication is licensed under BSL 1.1 - All other repositories are licensed under MIT
- By submitting a pull request, you agree that your contribution will be licensed under the same license as the repository
- Open a GitHub Discussion for questions
- See SUPPORT.md for more ways to get help