diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 00000000..29ddd3bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,51 @@ +name: Bug report +description: Report an issue that should be fixed +labels: ["bug"] +body: + - type: textarea + id: description + attributes: + label: Description + description: Describe the bug you encountered + placeholder: What happened? + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + description: How can we reproduce this issue? + placeholder: | + 1. + 2. + 3. + validations: + required: false + + - type: textarea + id: screenshot-or-link + attributes: + label: Screenshot and/or share link + description: Run `/share` to get a share link, or attach a screenshot + placeholder: Paste link or drag and drop screenshot here + validations: + required: false + + - type: input + id: os + attributes: + label: Operating System + description: what OS are you using? + placeholder: e.g., macOS 26.0.1, Ubuntu 22.04, Windows 11 + validations: + required: false + + - type: input + id: terminal + attributes: + label: Terminal + description: what terminal are you using? + placeholder: e.g., iTerm2, Ghostty, Alacritty, Windows Terminal + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..459ce25d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: 💬 Discord Community + url: https://discord.gg/opencode + about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question. diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 00000000..92e6c475 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,20 @@ +name: 🚀 Feature Request +description: Suggest an idea, feature, or enhancement +labels: [discussion] +title: "[FEATURE]:" + +body: + - type: checkboxes + id: verified + attributes: + label: Feature hasn't been suggested before. + options: + - label: I have verified this feature I'm about to request hasn't been suggested before. + required: true + + - type: textarea + attributes: + label: Describe the enhancement you want to request + description: What do you want to change or add? What are the benefits of implementing this? Try to be detailed so we can understand your request better :) + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 00000000..2310bfcc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,11 @@ +name: Question +description: Ask a question +labels: ["question"] +body: + - type: textarea + id: question + attributes: + label: Question + description: What's your question? + validations: + required: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..1b8f0da0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,71 @@ +# Contributing to OpenCode + +We want to make it easy for you to contribute to OpenCode. Here are the most common type of changes that get merged: + +- Bug fixes +- Additional LSPs / Formatters +- Improvements to LLM performance +- Support for new providers +- Fixes for environment-specific quirks +- Missing standard behavior +- Documentation improvements + +However, any UI or core product feature must go through a design review with the core team before implementation. + +> [!IMPORTANT] +> We do not accept PRs for core features. + +Take a look at recent git history to understand what usually lands. + +If you are unsure if a PR would be accepted, feel free to ask a maintainer or look for issues with either of the following labels: + +- `help wanted` +- `bug` + +> [!NOTE] +> PRs that ignore these guardrails will likely be closed. + +Want to take on an issue? Leave a comment and a maintainer may assign it to you unless it is something we are already working on. + +## Developing OpenCode + +- Requirements: Bun 1.3+, Go 1.24.x. +- Install dependencies and start the dev server from the repo root: + + ```bash + bun install + bun dev + ``` + +- Core pieces: + - `packages/opencode`: OpenCode core business logic & server. + - `packages/tui`: The TUI code, written in Go (will be removed soon in favor of [opentui](https://github.com/sst/opentui)) + - `packages/plugin`: Source for `@opencode-ai/plugin` + +> [!NOTE] +> After touching `packages/opencode/src/server/server.ts`, the OpenCode team must regenerate the Stainless SDK before any client updates merge. + +## Pull Request Expectations + +- Try to keep pull requests small and focused. +- Link relevant issue(s) in the description +- Explain the issue and why your change fixes it +- Avoid having verbose LLM generated PR descriptions +- Before adding new functions or functionality, ensure that such behavior doesn't already exist elsewhere in the codebase. + +### Style Preferences + +These are not strictly enforced, they are just general guidelines: + +- **Functions:** Keep logic within a single function unless breaking it out adds clear reuse or composition benefits. +- **Destructuring:** Do not do unnecessary destructuring of variables. +- **Control flow:** Avoid `else` statements. +- **Error handling:** Prefer `.catch(...)` instead of `try`/`catch` when possible. +- **Types:** Reach for precise types and avoid `any`. +- **Variables:** Stick to immutable patterns and avoid `let`. +- **Naming:** Choose concise single-word identifiers when they remain descriptive. +- **Runtime APIs:** Use Bun helpers such as `Bun.file()` when they fit the use case. + +## Feature Requests + +For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in OpenCode. The core team will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly. diff --git a/README.md b/README.md index aa2be8ae..4ffa7b15 100644 --- a/README.md +++ b/README.md @@ -54,41 +54,7 @@ For more info on how to configure OpenCode [**head over to our docs**](https://o ### Contributing -OpenCode is an opinionated tool so any fundamental feature needs to go through a -design process with the core team. - -> [!IMPORTANT] -> We do not accept PRs for core features. - -However we still merge a ton of PRs - you can contribute: - -- Bug fixes -- Improvements to LLM performance -- Support for new providers -- Fixes for env specific quirks -- Missing standard behavior -- Documentation - -Take a look at the git history to see what kind of PRs we end up merging. - -> [!NOTE] -> If you do not follow the above guidelines we might close your PR. - -To run OpenCode locally you need. - -- Bun 1.3 or higher -- Golang 1.24.x - -And run. - -```bash -$ bun install -$ bun dev -``` - -#### Development Notes - -**API Client**: After making changes to the TypeScript API endpoints in `packages/opencode/src/server/server.ts`, you will need the OpenCode team to generate a new stainless sdk for the clients. +If you're interested in contributing to OpenCode, please read our [contributing docs](./CONTRIBUTING.md) before submitting a pull request. ### FAQ