We welcome any and all contributions to ARK, at whatever level you can manage. Here are a few suggestions, but you are welcome to suggest anything else that you think improves the community for us all!
There are quite a few ways to contribute, such as:
- Report bugs and security vulnerabilities: We use GitHub issues to keep track of known bugs and security vulnerabilities. We keep a close eye on them and update them when we have an internal fix in progress. Before you report a new issue, do your best to ensure your problem hasn't already been reported. If it has, just leave a comment on the existing issue, rather than create a new one.
- Propose a new feature: If you have new ideas for functionality then please open a GitHub issue and describe the feature you would like to see, why you need it, and how it should work.
- Review pull requests: See the repo to find open pull requests and contribute a review!
- Contribute a fix or feature: If you're interested in contributing fixes to code or documentation, first read our guidelines for contributing developers below for an explanation of how to get set up and the process you'll follow. Once you are ready to contribute, feel free to pick one of the issues and create a PR.
- Contribute to the documentation: You can help us improve the documentation online. Send us feedback as a GitHub issue or start a documentation discussion on GitHub. You are also welcome to raise a PR with a bug fix or addition to the documentation.
The ARK team pledges to foster and maintain a friendly community. We enforce a Code of Conduct to ensure every contributor is welcomed and treated with respect.
Principle 1: Team Planning and Prioritization
- Plan tickets for current and upcoming sprints as a team
- Final prioritization decisions rest with the product manager
- When possible, break out self-contained chunks of development that a wider group of developers can work on
Principle 2: Design Before Code For non-trivial changes:
- Propose design in ticket and gather team feedback
- Use RFC pull requests or spikes to share ideas
- For architectural implications, discuss with TSC (meets weekly)
- Final implementation decisions rest with technical lead
Principle 3: Spec and Test Driven Development Propose new APIs and end-to-end tests showing how proposed functionality changes system behavior and APIs.
Principle 4: Implementation
- Keep development focused on ticket requirements. If additional features or ideas arise, create new tickets and track as separate work to be prioritized by the team. Link to the original ticket.
- Use PR title prefixes (
feat:,bug:,rfc:) to ensure changelog updates, release notes generation, and semantic versioning are managed properly. - All pull requests must use conventional commit format in their titles. This is enforced by the
validate_pr_titleworkflow and is required for Automatic version determination, Changelog generation, Semantic versioning compliance - Supported commit types:
feat: New features (triggers minor version bump)fix: Bug fixes (triggers patch version bump)docs: Documentation changeschore: Maintenance tasksrefactor: Code refactoringtest: Test additions or changesci: CI/CD changesbuild: Build system changesperf: Performance improvements
- Breaking changes can be indicated with
!after the type (e.g.,feat!:) or by includingBREAKING CHANGE:in the commit body.
Principle 5: Releasing Use conventional commits and semantic versioning.
A number of languages are used in the project, due to specific goals and patterns, which vary across the stack
Golang
- Used for low-level Ark System services, which are heavily integrated into Kubernetes, example:
ark-controller - Used for low-level Ark services, which are expected to be stable, exposed internally, rarely examined by engineers unless working at the system level, and that demand high performance and concurrency, such as
postgres-memory, which is a stable low level proxy from HTTP requests to Postgres databases - Used for low-latency, high-concurrency, fast-startup interfaces, such as
fark - Strengths: idiomatic for Kubernetes, excellent for systems programming, high speed, excellent concurrency options
- Limitations: fewer engineers are familiar with the language and its idioms
Python
- Used for higher-order Ark services, where logic changes regularly, such as the
ark-apiservice - Used for higher-order Ark services, which are exposed externally, where engineers are likely to examine the code for learning purposes, such as
ark-api(which includes A2A Gateway functionality) - Specifically chosen where we want and expect contributions from a wider group in the community
- Specifically chosen when engineers who are using their own Python code to run services may want to inspect the code, such as the Langchain A2A server
- Strengths: popular and commonly understood, expressive for business logic, many examples online such Python when showing how to build AI applications
- Limitations: typically slower to start up, fewer standard idioms mean that development patterns can be inconsistent across projects without care
Node.JS / JavaScript / TypeScript
- Used for web user-interfaces, such as
ark-dashboard, where popular UI libraries such as React.JS are common - Used for CLI user-interfaces, where many engineers may want to fork and contribute, such as
ark
Libraries and SDKs currently exist for:
- Python
- Node.JS
You can help us improve the documentation online. A contribution to the docs is often the easiest way to get started contributing to the project.
In order to preview the docs locally, you can run make docs in the root of the project. This will run the documentation site with live-reload, and you can then view the docs at http://localhost:3000.
Note that any contributions you make will be under the Agents At Scale license.