``` ├── .devcontainer/ ├── devcontainer.json ├── postcreate.sh ├── .gitattributes ├── .github/ ├── CODEOWNERS ├── ISSUE_TEMPLATE/ ├── bug_report.md ├── feature_request.md ├── pull_request_template.md ├── workflows/ ├── build_pr.yaml ├── license_check_pr.yaml ├── lint_pr.yaml ├── release.yaml ├── support_stale_and_close.yaml ├── .gitignore ├── .golangci.yaml ├── .licenserc.yaml ├── .vscode/ ├── launch.json ├── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CONTRIBUTORS.md ├── COPYRIGHT ├── LICENSE ├── Makefile ├── NOTICE ├── PACKAGING.md ├── PREPARING_YOUR_CHANGES.md ├── README.md ├── SECURITY.md ├── assets/ ├── images/ ├── Daytona-logotype-black.png ├── Daytona-logotype-white.png ├── daytona_demo.gif ├── cmd/ ├── daytona/ ├── config/ ├── autocompletion.go ├── config.go ├── const.go ├── ssh_file.go ├── main.go ├── docs/ ├── agent_mode/ ├── daytona.md ├── daytona_agent.md ├── daytona_agent_logs.md ├── daytona_autocomplete.md ├── daytona_docs.md ├── daytona_expose.md ├── daytona_forward.md ├── daytona_info.md ├── daytona_list.md ├── daytona_logs.md ├── daytona_version.md ├── daytona.md ├── daytona_api-key.md ├── daytona_api-key_create.md ├── daytona_api-key_delete.md ├── daytona_api-key_list.md ├── daytona_autocomplete.md ├── daytona_build.md ├── daytona_build_delete.md ├── daytona_build_info.md ├── daytona_build_list.md ├── daytona_build_logs.md ├── daytona_build_run.md ├── daytona_code.md ├── daytona_config.md ├── daytona_create.md ├── daytona_delete.md ├── daytona_docs.md ├── daytona_env.md ├── daytona_env_delete.md ├── daytona_env_list.md ├── daytona_env_set.md ├── daytona_forward.md ├── daytona_git-provider.md ├── daytona_git-provider_create.md ├── daytona_git-provider_delete.md ├── daytona_git-provider_list.md ├── daytona_git-provider_update.md ├── daytona_ide.md ├── daytona_info.md ├── daytona_list.md ├── daytona_logs.md ├── daytona_prebuild.md ├── daytona_prebuild_create.md ├── daytona_prebuild_delete.md ├── daytona_prebuild_info.md ├── daytona_prebuild_list.md ├── daytona_prebuild_update.md ├── daytona_profile.md ├── daytona_profile_create.md ├── daytona_profile_delete.md ├── daytona_profile_list.md ├── daytona_profile_update.md ├── daytona_provider.md ├── daytona_provider_install.md ├── daytona_provider_list.md ├── daytona_provider_uninstall.md ├── daytona_provider_update.md ├── daytona_purge.md ├── daytona_restart.md ├── daytona_runner.md ├── daytona_runner_config.md ├── daytona_runner_configure.md ├── daytona_runner_logs.md ├── daytona_runner_purge.md ├── daytona_runner_restart.md ├── daytona_runner_serve.md ├── daytona_runner_start.md ├── daytona_runner_stop.md ├── daytona_serve.md ├── daytona_server.md ├── daytona_server_config.md ├── daytona_server_configure.md ├── daytona_server_logs.md ├── daytona_server_logs_list.md ├── daytona_server_restart.md ├── daytona_server_runner.md ├── daytona_server_runner_create.md ├── daytona_server_runner_delete.md ├── daytona_server_runner_list.md ├── daytona_server_runner_logs.md ├── daytona_server_start.md ├── daytona_server_stop.md ├── daytona_ssh.md ├── daytona_start.md ├── daytona_stop.md ├── daytona_target-config.md ├── daytona_target-config_create.md ├── daytona_target-config_delete.md ├── daytona_target-config_list.md ├── daytona_target.md ├── daytona_target_create.md ├── daytona_target_delete.md ├── daytona_target_info.md ├── daytona_target_list.md ├── daytona_target_logs.md ├── daytona_target_restart.md ├── daytona_target_set-default.md ├── daytona_target_ssh.md ├── daytona_target_start.md ├── daytona_target_stop.md ├── daytona_telemetry.md ├── daytona_telemetry_disable.md ├── daytona_telemetry_enable.md ├── daytona_template.md ├── daytona_template_create.md ├── daytona_template_delete.md ├── daytona_template_export.md ├── daytona_template_import.md ├── daytona_template_info.md ├── daytona_template_list.md ├── daytona_template_set-default.md ├── daytona_template_update.md ├── daytona_update.md ├── daytona_use.md ├── daytona_version.md ├── daytona_whoami.md ├── go.mod ├── go.sum ``` ## /.devcontainer/devcontainer.json ```json path="/.devcontainer/devcontainer.json" { "name": "Daytona", "image": "ghcr.io/daytonaio/go-devcontainer:latest", "containerEnv": { "LOG_LEVEL": "debug", "DAYTONA_SERVER_MODE": "development", "CGO_ENABLED": "0", "DAYTONA_TARGET_ID": "" }, "postCreateCommand": ".devcontainer/postcreate.sh", "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", "remoteUser": "daytona" } ``` ## /.devcontainer/postcreate.sh ```sh path="/.devcontainer/postcreate.sh" #!/bin/bash for rc in ~/.bashrc ~/.zshrc; do [ -f "$rc" ] && echo -e '\nalias dtn="DAYTONA_DEV=1 DAYTONA_CONFIG_DIR=$HOME/.config/daytona-dev go run cmd/daytona/main.go"' >> $rc; done go install github.com/swaggo/swag/cmd/swag@v1.16.3 go mod tidy ``` ## /.gitattributes ```gitattributes path="/.gitattributes" *.sh eol=lf ``` ## /.github/CODEOWNERS ```github/CODEOWNERS path="/.github/CODEOWNERS" # Each line is a file pattern followed by one or more owners. # These owners will be the default owners for everything in # the repo. Unless a later match takes precedence, # @daytonaio/daytona-oss team members will be requested for # review when someone opens a pull request. * @daytonaio/daytona-oss # Owners of all documentation *.txt @daytonaio/operations *.md @daytonaio/operations COPYRIGHT @daytonaio/operations LICENSE @daytonaio/operations NOTICE @daytonaio/operations ``` ## /.github/ISSUE_TEMPLATE/bug_report.md --- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. Ubuntu 22.04] - Daytona Version: [e.g. v0.0.1] **Additional context** Add any other context about the problem here. ## /.github/ISSUE_TEMPLATE/feature_request.md --- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ## /.github/pull_request_template.md # Pull Request Title ## Description Please include a summary of the change or the feature being introduced. Include relevant motivation and context. List any dependencies that are required for this change. - [ ] This change requires a documentation update - [ ] I have made corresponding changes to the documentation ## Related Issue(s) This PR addresses issue #X ## Screenshots If relevant, please add screenshots. ## Notes Please add any relevant notes if necessary. ## /.github/workflows/build_pr.yaml ```yaml path="/.github/workflows/build_pr.yaml" name: "[PR] Validate build" on: pull_request: branches: - main permissions: contents: read concurrency: # New commit on branch cancels running workflows of the same branch group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: binary-build: strategy: matrix: goos: [linux, darwin, windows] goarch: [amd64, arm64] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod cache: true - name: Build binaries run: | GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} CGO_ENABLED=0 go build cmd/daytona/main.go ``` ## /.github/workflows/license_check_pr.yaml ```yaml path="/.github/workflows/license_check_pr.yaml" name: '[PR] License Check' on: pull_request: branches: - main jobs: license-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check License Header uses: apache/skywalking-eyes/header@main with: token: ${{ github.token }} mode: 'check' ``` ## /.github/workflows/lint_pr.yaml ```yaml path="/.github/workflows/lint_pr.yaml" name: '[PR] Lint' on: pull_request: branches: - main permissions: contents: read jobs: golangci: name: lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod cache: false - name: golangci-lint uses: golangci/golangci-lint-action@v4 with: version: latest args: --timeout=5m ./... fmt-and-swagger: name: fmt-and-swagger runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: fmt-and-swagger run: | go install github.com/swaggo/swag/cmd/swag@v1.16.3 ./hack/swagger.sh git diff --exit-code pkg/apiclient/* || (echo "API clients are out of sync! Please generate with './hack/swagger.sh' and commit" && exit 1) git diff --exit-code '**/*.go' || (echo "Code is not formatted! Please run 'go fmt ./...' and commit" && exit 1) cli-docs: name: cli-docs runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: cli-docs run: | ./hack/generate-cli-docs.sh git diff --exit-code docs/* || (echo "CLI Documentation is out of sync! Please generate it with './hack/generate-cli-docs.sh' and commit" && exit 1) git diff --exit-code hack/docs/* || (echo "CLI Documentation is out of sync! Please generate it with './hack/generate-cli-docs.sh' and commit" && exit 1) test: name: Unit tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod cache: false - run: go build -tags testing ./... - uses: robherley/go-test-action@v0 with: testArguments: -tags testing ./... omit: untested ``` ## /.github/workflows/release.yaml ```yaml path="/.github/workflows/release.yaml" name: Trigger External Workflow on Release on: release: types: [published] jobs: trigger-external-workflow: runs-on: ubuntu-latest steps: - name: Trigger release workflow if: github.event.release.prerelease == false uses: peter-evans/repository-dispatch@v3 with: token: ${{ secrets.GITHUBBOT_TOKEN }} repository: daytonaio/daytona-release event-type: new-release client-payload: '{"release_tag": "${{ github.event.release.tag_name }}"}' - name: Trigger prerelease workflow if: github.event.release.prerelease == true uses: peter-evans/repository-dispatch@v3 with: token: ${{ secrets.GITHUBBOT_TOKEN }} repository: daytonaio/daytona-release event-type: new-prerelease client-payload: '{"prerelease_tag": "${{ github.event.release.tag_name }}"}' ``` ## /.github/workflows/support_stale_and_close.yaml ```yaml path="/.github/workflows/support_stale_and_close.yaml" name: '[Support] Stale-And-Close Inactive Issues And PRs' on: workflow_dispatch: schedule: - cron: '0 1 * * *' # Remove all permissions by default. Actions are performed by Daytona Bot permissions: {} jobs: stale: if: github.repository == 'daytonaio/daytona' runs-on: ubuntu-latest steps: # This step will add the stale comment and label for the first 15 days without activity. It won't close any task - uses: actions/stale@v5 with: stale-issue-message: 'This Issue has been automatically marked as "stale" because it has not had recent activity (for 14 days). It will be closed if no further activity occurs. Thanks for the feedback.' stale-pr-message: 'This Pull Request has been automatically marked as "stale" because it has not had recent activity (for 14 days). It will be closed if no further activity occurs. Thank you for your contribution.' close-issue-message: 'Due to the lack of activity in the last 7 days since it was marked as "stale", we are closing this Issue. Do not hesitate to reopen it later if necessary.' close-pr-message: 'Due to the lack of activity in the last 7 days since it was marked as "stale", we are closing this Pull Request. Do not hesitate to reopen it later if necessary.' days-before-stale: 14 days-before-close: 7 exempt-issue-labels: on-hold,never stale,enhancement exempt-pr-labels: on-hold,never stale,enhancement operations-per-run: 100 repo-token: ${{ secrets.GITHUBBOT_TOKEN }} ``` ## /.gitignore ```gitignore path="/.gitignore" /build DEV_WORKSPACES ./daytona .DS_Store tmp *.exe main ``` ## /.golangci.yaml ```yaml path="/.golangci.yaml" linters-settings: errcheck: exclude-functions: - (*github.com/gin-gonic/gin.Context).AbortWithError - io.Copy - syscall.Syscall - (github.com/gliderlabs/ssh.Session).Exit - (io.Writer).Write run: build-tags: - testing ``` ## /.licenserc.yaml ```yaml path="/.licenserc.yaml" header: license: spdx-id: Apache-2.0 copyright-owner: Daytona Platforms Inc. content: | Copyright 2024 Daytona Platforms Inc. SPDX-License-Identifier: Apache-2.0 paths: - "**/*.go" - "**/*.sh" paths-ignore: - "**/apiclient/**" - "**/pkg/api/docs/docs.go" - ".devcontainer/postcreate.sh" comment: on-failure ``` ## /.vscode/launch.json ```json path="/.vscode/launch.json" { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "agent", "type": "go", "request": "launch", "mode": "debug", "program": "${workspaceFolder}/cmd/daytona", "console": "integratedTerminal", "env": { "DAYTONA_TARGET_ID": "TARGET_ID", "DAYTONA_WORKSPACE_ID": "WORKSPACE_ID", "DAYTONA_SERVER_URL": "http://localhost:3986", "DAYTONA_SERVER_API_KEY": "1234567890", }, "args": [ "agent" ] }, { "name": "Server", "type": "go", "request": "launch", "mode": "debug", "program": "${workspaceFolder}/cmd/daytona", "console": "integratedTerminal", "args": [ "serve" ], "env": { "DAYTONA_DEV": "1", "DAYTONA_CONFIG_DIR": "/home/daytona/.config/daytona-dev", } }, { "name": "CLI Create", "type": "go", "request": "launch", "mode": "debug", "program": "${workspaceFolder}/cmd/daytona", "console": "integratedTerminal", "args": [ "create" ], "env": { "DAYTONA_DEV": "1", "DAYTONA_CONFIG_DIR": "/home/daytona/.config/daytona-dev", } }, { "name": "Runner", "type": "go", "request": "launch", "mode": "debug", "program": "${workspaceFolder}/cmd/daytona", "console": "integratedTerminal", "args": [ "runner", "serve" ], "env": { "DAYTONA_DEV": "1", "DAYTONA_RUNNER_CONFIG_DIR": "/home/daytona/.config/daytona-runner", } } ] } ``` ## /.vscode/settings.json ```json path="/.vscode/settings.json" { "gopls": { "build.buildFlags": [ "-tags", "testing" ] }, "go.testTags": "testing" } ``` ## /CODE_OF_CONDUCT.md # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at codeofconduct@daytona.io. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations ## /CONTRIBUTING.md # Contributing to Daytona The team at Daytona welcomes contributions from the community. There are many ways to get involved! Thanks for taking the time to contribute! ❤️ > And if you like the project but don't have time to contribute, that's perfectly okay. There are other simple ways to support the project and show your appreciation, which we would greatly appreciate: > > - Star the project > - Tweet about it > - Contribute to our [Docs](https://github.com/daytonaio/docs/) > - Refer this project in your project's readme > - Mention the project at local meetups and tell your friends/colleagues ## Code of Conduct This project and everyone participating in it is governed by the [Daytona Code of Conduct](https://github.com/daytonaio/daytona?tab=coc-ov-file#readme). By participating, you are expected to uphold this code. Please report unacceptable behavior to [info@daytona.io](mailto:info@daytona.io). ## Provide Feedback You might find things that can be improved while you are using Daytona. You can help by [submitting an issue](https://github.com/daytonaio/daytona/issues/new) when: - A new feature or an enhancement to an existing feature will improve the utility or usability of Daytona. - Daytona crashes, or you encounter a bug that can only be resolved by restarting Daytona. - An error occurs that is unrecoverable, causes workspace integrity problems or loss, or generally prevents you from using a workspace. Before creating a new issue, please confirm that an existing issue doesn't already exist. We will then take care of the issue as soon as possible. ## Participate in the Community You can engage with our community by: - Helping other users on [Daytona Community Slack](https://go.daytona.io/slack). - Improving [documentation](https://github.com/daytonaio/docs/) - Participating in general discussions about development and DevOps - Authoring new Daytona Plugins and sharing those Plugins - Authoring new dev containers and sharing examples ## Contributing Code You can contribute to Daytona by: - Enhancing current functionality - Fixing bugs - Adding new features and capabilities Before starting your contribution, especially for core features, we encourage you to reach out to us on [Slack](https://go.daytona.io/slack). This allows us to ensure that your proposed feature aligns with the project's roadmap and goals. Developers are the key to making Daytona the best tool it can be, and we value input from the community. We look forward to working with you to improve Daytona and make development environments as easy as possible for developers everywhere. ### Steps to Contribute Code Follow the following steps to ensure your contribution goes smoothly. 1. Read and follow the steps outlined in the [Daytona Contributing Policy](README.md#contributing). 1. Configure your development environment by either following the guide below. 1. [Fork](https://help.github.com/articles/working-with-forks/) the GitHub Repository allowing you to make the changes in your own copy of the repository. 1. Create a [GitHub issue](https://github.com/daytonaio/daytona/issues) if one doesn't exist already. 1. [Prepare your changes](/PREPARING_YOUR_CHANGES.md) and ensure your commits are descriptive. The document contains an optional commit template, if desired. 1. Ensure that you sign off on all your commits to comply with the DCO v1.1. We have more details in [Prepare your changes](/PREPARING_YOUR_CHANGES.md). 1. Ensure to generate new docs after making command related changes, by running `./hack/generate-cli-docs.sh` in the daytona root directory. 1. Ensure to generate a new API client after making changes related to the API spec, by running `./hack/swagger.sh` in the daytona root directory. 1. Ensure that you have no lint errors. We use `golangci-lint` as our linter which you can install by following instructions found [here](https://golangci-lint.run/welcome/install/#local-installation) (or simply open Daytona in a Dev Container). You can check for linting errors by running `golangci-lint run` in the root of the project. 1. Create a pull request on GitHub. If you're new to GitHub, read about [pull requests](https://help.github.com/articles/about-pull-requests/). You are welcome to submit your pull request for commentary or review before it is complete by creating a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests). Please include specific questions or items you'd like feedback on. 1. A member of the Daytona team will review your PR within three business days (excluding any holidays) and either merge, comment, and/or assign someone for review. 1. Work with the reviewer to complete a code review. For each change, create a new commit and push it to make changes to your pull request. When necessary, the reviewer can trigger CI to run tests prior to merging. 1. Once you believe your pull request is ready to be reviewed, ensure the pull request is no longer a draft by [marking it ready for review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). 1. The reviewer will look over your contribution and either approve it or provide comments letting you know if there is anything left to do. We try to give you the opportunity to make the required changes yourself, but in some cases, we may perform the changes ourselves if it makes sense to (minor changes or for urgent issues). We do our best to review PRs promptly, but complex changes could require more time. 1. After completing your review, a Daytona team member will trigger merge to run all tests. Upon passing, your change will be merged into `main`, and your pull requests will be closed. All merges to `main` create a new release, and all final changes are attributed to you. Note: In some cases, we might decide that a PR should be closed without merging. We'll make sure to provide clear reasoning when this happens. ### Coding Style and Conventions To make the code base consistent, we follow a few guidelines and conventions listed below. It is possible that the code base does not currently comply with all these guidelines. While working on a PR, if you see something that can be refactored to comply, go ahead, but keep in mind that we are not looking for massive PRs that only address that. API and service method conventions: 1. Avoid using model names in service methods - e.g. `Create` instead of `CreateTarget`, `Find` instead of `FindWorkspace` 1. Use model names in service methods for "sub-models" - e.g. `ListPrebuilds` in `WorkspaceTemplateService` 1. Use appropriate verbs in the UI - e.g. `Create API Key` instead of `Generate API Key` since the method is called `Create` 1. Refer to the table below for a connection between API and service methods | HTTP Method | Controller / Service / Store | | ----------- | ---------------------------- | | POST | Create or Update | | DELETE | Delete | | PUT | Save | | GET | Find or List | #### What Does Contributing Mean for You? Here is what being a contributor means for you: - License all our contributions to the project under the Apache License, Version 2.0 - Have the legal rights to license our contributions ourselves, or get permission to license them from our employers, clients, or others who may have them For more information, see the [README](README.md) and feel free to reach out to us on [Slack](https://go.daytona.io/slack). ## /CONTRIBUTORS.md # Contributors We contributors to Daytona: * License all our contributions to the project under the Apache License, Version 2.0 * Have the legal rights to license our contributions ourselves, or get permission to license them from our employers, clients, or others who may have them * Signoff on our commits with the Developer Certificate of Origin (DCO) Version 1.1 (https://developercertificate.org/) * Previously we added our names and GitHub handles to this CONTRIBUTORS.md file. We leave these names here to record the commits that came before. ----------- * Vedran Jukic (@vedranjukic) * Ivan Burazin (@ivan-burazin) * Chad Metcalf (@metcalfc) * Toma Puljak (@tpuljak) * Nikola Balic (@nkkko) * Goran Draganic (@gdraganic) * Ivan Dagelić (@idagelic) * Fabjan Vučina (@fabjanvucina) * Rutik Thakre (@Rutik7066, @rutikt7066) * Neo (@neo773) * Ezhil Shanmugham (@ezhil56x) * Tarun Chauhan (@tarunrajput) * Deepak gupta (@guptadeepak8) * Vineeth Kumar (@vineeth-vk11) * Jay Kumar (@35C4n0r) * Twac (@Twacqwq) * Mirko Dzaja (@MDzaja) * Luke Bryant (@LDavidBryant) * Marijan Cipcic (@marijancip123) * Sara Lucija Dragicevic (@saralucijad) * Ante Projić (@aprojic) * Bruno Grbavac (@brunogrbavac) * Juraj Štefanić (@stefanicjuraj) * Ivan Kunjasic (@IvanKunjasic) * Mo Jaafar (@mojafa) * Ivan Novak (@inovak) * Nikola Radisic (@radisicc) * Andre Johnson (@andrejohnson2) ## /COPYRIGHT ``` path="/COPYRIGHT" Copyrights in the Daytona software are retained by their contributors. No copyright assignment is required to contribute to Daytona software. When we refer to the 'Daytona software authors', we mean anyone who has contributed to this repository. Unless otherwise noted, such as with a LICENSE file in a directory, or a specific copyright notice on a file, all files in this repository are licensed under the Apache 2.0 license. ``` ## /LICENSE ``` path="/LICENSE" Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` ## /Makefile ``` path="/Makefile" # Default values VERSION ?= v0.0.0-dev ifeq ($(OS),Windows_NT) DAYTONA_CONFIG_DIR ?= $(APPDATA)/daytona else DAYTONA_CONFIG_DIR ?= $(HOME)/.config/daytona endif OUTPUT_DIR ?= $(DAYTONA_CONFIG_DIR)/server/binaries/$(VERSION) # Supported OSs and ARCHs OS_LIST := darwin linux windows ARCH_LIST := amd64 arm64 # Infer ARCH if not provided ifeq ($(ARCH),) UNAME_M := $(shell uname -m) ifeq ($(findstring $(UNAME_M),x86_64 AMD64),$(UNAME_M)) ARCH := amd64 else ifeq ($(findstring $(UNAME_M),arm64 ARM64 aarch64),$(UNAME_M)) ARCH := arm64 else $(error Unable to infer ARCH from $(UNAME_M), please specify manually) endif endif # Default target all: build-all # Build for all OS and ARCH combinations build-all: @for os in $(OS_LIST); do \ for arch in $(ARCH_LIST); do \ $(MAKE) build OS=$$os ARCH=$$arch; \ done; \ done # Build for a specific OS and ARCH build: @if [ -z "$(OS)" ]; then \ echo "Error: OS must be specified."; \ echo "Usage: make build OS= [ARCH=]"; \ exit 1; \ fi @echo "Building for $(OS)-$(ARCH)" @mkdir -p $(OUTPUT_DIR) @GOOS=$(OS) GOARCH=$(ARCH) go build -o $(OUTPUT_DIR)/daytona-$(OS)-$(ARCH)$(if $(filter windows,$(OS)),.exe) cmd/daytona/main.go # Clean build artifacts clean: @rm -rf $(OUTPUT_DIR) # Help target help: @sh -c '\ echo "Available targets:"; \ echo " make : Build for all supported OS and ARCH combinations"; \ echo " make build OS= [ARCH=] : Build for a specific OS and ARCH"; \ echo " make clean : Remove build artifacts"; \ echo ""; \ echo "Supported OS : $(OS_LIST)"; \ echo "Supported ARCH: $(ARCH_LIST)"; \ echo ""; \ echo "Environment variables:"; \ echo " VERSION : Set the version (default: v0.0.0-dev)"; \ echo " DAYTONA_CONFIG_DIR: Set the config directory (default: ~/.config/daytona)"; \ echo " OUTPUT_DIR : Override the output directory"; \ echo ""; \ echo "Note: If ARCH is not specified, it will be inferred from the current machine."' .PHONY: all build-all build clean help ``` ## /NOTICE ``` path="/NOTICE" Daytona Copyright the various Daytona software authors. The initial developer of the software is Daytona Platforms, Inc. (https://daytona.io). Copyright 2024 Daytona Platforms, Inc. All Rights Reserved. ``` ## /PACKAGING.md # Packaging Guidelines for Daytona The Daytona team appreciates any efforts to make our software more accessible to users on various platforms. While we encourage packaging and distribution of our open-source project, we have some important guidelines, particularly regarding naming. ## Critical Naming Guideline **Important**: While you are free to package and distribute our software, you **MUST NOT** name your package `daytona` or, in any way, suggest that, the package you distribute, is an official distribution of `daytona`. This restriction is to prevent confusion and maintain the integrity of our project identity. - Acceptable: "unofficial-daytona-package", "unofficial-daytona-distribution", etc. - Not Acceptable: "daytona", "official-daytona", etc. ## General Guidelines 1. **License Compliance**: Ensure that the Apache 2.0 license is included with the package and that all copyright notices are preserved. 2. **Version Accuracy**: Use the exact version number of Daytona that you are packaging. Do not modify the version number or add custom suffixes without explicit permission. 3. **Dependencies**: Include all necessary dependencies as specified in our project documentation. Do not add extra dependencies without consulting the project maintainers. 4. **Modifications**: If you need to make any modifications to the source code for packaging purposes, please document these changes clearly and consider submitting them as pull requests to the main project. 5. **Standard Note**: Please include the following standard note in your package description or metadata: ``` This package contains an unofficial distribution of Daytona, an open source project developed by Daytona Platforms Inc. This package is not officially supported or endorsed by the Daytona project. For the official version, please visit https://github.com/daytonaio/daytona. ``` ## Feedback and Questions If you have any questions about packaging Daytona or need clarification on these guidelines, especially regarding naming conventions, please open an issue in our GitHub repository. We appreciate your contribution to making Daytona more accessible to users across different platforms, while respecting our project's identity! ## /PREPARING_YOUR_CHANGES.md # Preparing Your Changes This document contains information related to preparing changes for a pull request. Here's a quick checklist for a good PR, more details below: 1. A discussion around the change on [Slack](https://go.daytona.io/slack) or in an issue. 1. A GitHub Issue with a good description associated with the PR 1. One feature/change per PR 1. One commit per PR 1. PR rebased on main (git rebase, not git pull) 1. Good descriptive commit message, with link to issue 1. No changes to code not directly related to your PR 1. Includes functional/integration test 1. Includes documentation ## Commit Message Format We do not require a particular commit message format of any kind, but we do require that individual commits be descriptive, relative to size and impact. For example, if a descriptive title covers what the commit does in practice, then an additional description below the title is not required. However, if the commit has an out-sized impact relative to other commits, its description will need to reflect that. Reviewers may ask you to amend your commits if they are not descriptive enough. Since the descriptiveness of a commit is subjective, please feel free to talk to us on [Slack](https://go.daytona.io/slack) if you have any questions. ### Optional Commit Template If you would like an optional commit template, see the following: ```text ``` ## Squashed Commits We require that you squash all changes to a single commit. You can do this with the `git rebase -i HEAD~X` command where X is the number of commits you want to squash. See the [Git Documentation](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) for more details. ## Developer's Certificate of Origin Any contributions to Daytona must only contain code that can legally be contributed to Daytona, and which the Daytona project can distribute under its license. Prior to contributing to Daytona please read the [Developer's Certificate of Origin](https://developercertificate.org/) and sign-off all commits with the `--signoff` option provided by `git commit`. For example: ``` git commit --signoff --message "This is the commit message" ``` This option adds a `Signed-off-by` trailer at the end of the commit log message. ## DCO Policy on Real Names The DCO is a representation by someone stating they have the right to contribute the code they have proposed and is important for legal purposes. We have adopted the CNCF DCO Guidelines (https://github.com/cncf/foundation/blob/main/dco-guidelines.md). Which for simplicity we will include here in full: ### DCO Guidelines v1.1 The DCO is a representation by someone stating they have the right to contribute the code they have proposed for acceptance into a project: https://developercertificate.org That representation is important for legal purposes and was the community-developed outcome after a $1 billion [lawsuit](https://en.wikipedia.org/wiki/SCO%E2%80%93Linux_disputes) by SCO against IBM. The representation is designed to prevent issues but also keep the burden on contributors low. It has proven very adaptable to other projects, is built into git itself (and now also GitHub), and is in use by thousands of projects to avoid more burdensome requirements to contribute (such as a CLA). ### DCO and Real Names The DCO requires the use of a real name that can be used to identify someone in case there is an issue about a contribution they made. **A real name does not require a legal name, nor a birth name, nor any name that appears on an official ID (e.g. a passport). Your real name is the name you convey to people in the community for them to use to identify you as you. The key concern is that your identification is sufficient enough to contact you if an issue were to arise in the future about your contribution.** Your real name should not be an anonymous id or false name that misrepresents who you are. ## /README.md
[![Documentation](https://img.shields.io/github/v/release/daytonaio/docs?label=Docs&color=23cc71)](https://www.daytona.io/docs) [![License](https://img.shields.io/badge/License-Apache--2.0-blue)](#license) [![Go Report Card](https://goreportcard.com/badge/github.com/daytonaio/daytona)](https://goreportcard.com/report/github.com/daytonaio/daytona) [![Issues - daytona](https://img.shields.io/github/issues/daytonaio/daytona)](https://github.com/daytonaio/daytona/issues) ![GitHub Release](https://img.shields.io/github/v/release/daytonaio/daytona)
 
Daytona logo

Set up a development environment on any infrastructure using a single command:

![Daytona Demo](/assets/images/daytona_demo.gif)

Documentation · Report Bug · Request Feature · Join Our Slack · Connect On X

# Open Source Development Environment Manager
For detailed/manual setup steps click [here](https://www.daytona.io/docs/installation/installation/#installation) ### Mac / Linux ```bash curl -sfL get.daytona.io | sudo bash && daytona server -y && daytona ``` ### Windows ```pwsh powershell -Command "irm https://get.daytona.io/windows | iex; daytona serve" ``` ### Create your first dev environment by opening a new terminal, and running: ```bash daytona create ``` **Start coding.** --- ## Features - **Quick Setup**: Activate a fully configured development environment with a single command - `daytona create`. - **Runs everywhere**: Spin up your development environment on any machine; local, remote, cloud-based, physical server or a VM & on any architecture; x86 or ARM. - **Various Providers Support**: Choose popular providers like AWS, GCP, Azure, DigitalOcean & [more](https://github.com/orgs/daytonaio/repositories?q=daytona-provider) or use Docker on bare metal. - **IDE Support** : Seamlessly supports [VS Code](https://github.com/microsoft/vscode), [JetBrains](https://www.jetbrains.com/remote-development/gateway/) products and more, ready to use without configuration. Also includes a built-in Web IDE for convenience. - **Git Provider Integration**: GitHub, GitLab, Bitbucket and [other](https://www.daytona.io/docs/configuration/git-providers/#add-a-git-provider) Git providers can be connected allowing you to start working on a specific branch or PR and to push changes immediately. - **Configuration File Support**: Support for [dev container](https://containers.dev/) and an upcoming expansion to DevFile, Nix & Flox. - **Prebuilds System**: Drastically improve environment build times by prebuilding them based on Git Providers' hook events. - **Reverse Proxy Integration**: Enable collaboration and streamline feedback loops by leveraging our reverse proxy. Access preview ports and the Web IDE seamlessly, even behind firewalls. - **Security**: Automatically creates a VPN connection between the client machine and the development environment, ensuring a fully secure connection. - **Works on my Machine**: Never experience it again. *For a complete feature set including Authentication, Authorization, Observability, Resource Management and IDP, check out our [enterprise offering](https://daytona.zapier.app/). --- ## Getting Started ### Requirements Before starting the installation script, if developing locally, ensure [Docker](https://www.docker.com/products/docker-desktop/) is installed and running. ### Initializing Daytona To initialize Daytona, follow these steps: **1. Start the Daytona Server:** Use this command to initiate the Daytona Server in daemon mode or use `daytona serve` to run it in the foreground: ```bash daytona server ``` **2. Register Your Git Provider of Choice:** Daytona supports GitHub, GitLab, Bitbucket and [more](https://www.daytona.io/docs/configuration/git-providers/#add-a-git-provider) Git Providers. Use this command to set them up: ```bash daytona git-provider create ``` **3. Create Your First Target:** (optional) By default, Daytona uses the Docker provider to spin up environments on your local machine. For remote development environment setups, use the following command: ```bash" daytona target create ``` **4. Choose Your IDE:** The default IDE for Daytona is the local VS Code installation. To switch to the Web IDE or any other IDE, use: ```bash daytona ide ``` Now that you have installed and initialized Daytona, you may proceed to setting up your development environments and starting to code instantly. **4. Create Your First Daytona Development Environment:** Creating development environments with Daytona is a straightforward process accomplished with just one command which prompts you for two things: 1. Choose the target/provider to decide where to create the dev environment. 2. Select or type in the Git repository you wish to start off with. After making your selections, press enter, and Daytona will handle the rest. ```bash daytona create ``` *You can add the `--no-ide` flag to skip opening the IDE and then use `daytona code` once you're ready to start coding. More info [here](https://www.daytona.io/docs/about/getting-started/). **5. Manage the Daytona Server daemon:** ```bash daytona server [start|stop|restart] ``` --- ## Extend Daytona Through Providers Daytona is designed to be infrastructure-agnostic, capable of creating and managing development environments across various platforms. Providers are the components that encapsulate the logic for provisioning compute resources on a specific platform. They allow for the configuration of different target configurations thus enabling, for instance, multiple AWS profiles within an AWS provider. How does it work? When executing the `daytona create` command, Daytona communicates the environment details to the selected provider, which then provisions the necessary compute resources. Once provisioned, Daytona sets up the environment on these resources, allowing the user to interact with the environment seamlessly. Providers are independent projects that adhere to the Daytona Provider interface. View all currently supported providers [here](https://github.com/orgs/daytonaio/repositories?q=daytona-provider). ## Contributing Daytona is Open Source under the [Apache License 2.0](LICENSE), and is the [copyright of its contributors](NOTICE). If you would like to contribute to the software, read the Developer Certificate of Origin Version 1.1 (https://developercertificate.org/). Afterwards, navigate to the [contributing guide](CONTRIBUTING.md) to get started. ## /SECURITY.md # Security Policy ## Reporting a Vulnerability To report a vulnerability, please contact us at [servicedesk@daytona.io](mailto:servicedesk@daytona.io). ## /assets/images/Daytona-logotype-black.png Binary file available at https://raw.githubusercontent.com/daytonaio/daytona/refs/heads/main/assets/images/Daytona-logotype-black.png ## /assets/images/Daytona-logotype-white.png Binary file available at https://raw.githubusercontent.com/daytonaio/daytona/refs/heads/main/assets/images/Daytona-logotype-white.png ## /assets/images/daytona_demo.gif Binary file available at https://raw.githubusercontent.com/daytonaio/daytona/refs/heads/main/assets/images/daytona_demo.gif ## /cmd/daytona/config/autocompletion.go ```go path="/cmd/daytona/config/autocompletion.go" // Copyright 2024 Daytona Platforms Inc. // SPDX-License-Identifier: Apache-2.0 package config import ( "os" "regexp" ) const completionScriptNameRoot = "daytona.completion_script." var shellNames = []string{"bash", "zsh", "fish", "powershell"} func DeleteAutocompletionData() error { for _, shellName := range shellNames { err := removeAutocompletionDataForShell(shellName) if err != nil { return err } } return nil } func removeAutocompletionDataForShell(shellName string) error { homeDir, err := os.UserHomeDir() if err != nil { return err } completionScriptPath := homeDir runCommandFilePath := homeDir switch shellName { case "bash": completionScriptPath += "/." + completionScriptNameRoot + "bash" runCommandFilePath += "/.bashrc" case "zsh": completionScriptPath += "/." + completionScriptNameRoot + "zsh" runCommandFilePath += "/.zshrc" case "fish": completionScriptPath += "/." + completionScriptNameRoot + "fish" runCommandFilePath += "/.config/fish/config.fish" case "powershell": completionScriptPath += "/" + completionScriptNameRoot + "ps1" runCommandFilePath += "/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1" default: return nil } // Remove the line that sources the completion script if it exists err = removeLineFromFile(runCommandFilePath, completionScriptNameRoot) if err != nil { return err } // Remove the completion script if it exists _, err = os.Stat(completionScriptPath) if os.IsNotExist(err) { return nil } return os.Remove(completionScriptPath) } func removeLineFromFile(filePath string, lineText string) error { _, err := os.Stat(filePath) if os.IsNotExist(err) { return nil } content, err := os.ReadFile(filePath) if err != nil { return err } re := regexp.MustCompile("(?m:^.*" + regexp.QuoteMeta(lineText) + ".*$\n?)") newContent := re.ReplaceAllString(string(content), "") err = os.WriteFile(filePath, []byte(newContent), 0600) if err != nil { return err } return nil } ``` ## /cmd/daytona/config/config.go ```go path="/cmd/daytona/config/config.go" // Copyright 2024 Daytona Platforms Inc. // SPDX-License-Identifier: Apache-2.0 package config import ( "encoding/json" "errors" "fmt" "os" "os/exec" "path/filepath" "github.com/daytonaio/daytona/pkg/cmd/autocomplete" "github.com/google/uuid" ) type ServerApi struct { Url string `json:"url"` Key string `json:"key"` } type Profile struct { Id string `json:"id"` Name string `json:"name"` Api ServerApi `json:"api"` } type Config struct { Id string `json:"id"` ActiveProfileId string `json:"activeProfile"` DefaultIdeId string `json:"defaultIde"` Profiles []Profile `json:"profiles"` TelemetryEnabled bool `json:"telemetryEnabled"` } type Ide struct { Id string Name string } type GitProvider struct { Id string Name string } func GetConfig() (*Config, error) { configFilePath, err := getConfigPath() if err != nil { return nil, err } _, err = os.Stat(configFilePath) if os.IsNotExist(err) { // Setup autocompletion when adding initial config _ = autocomplete.DetectShellAndSetupAutocompletion(autocomplete.AutoCompleteCmd.Root()) config := &Config{ Id: uuid.NewString(), DefaultIdeId: getInitialDefaultIde(), TelemetryEnabled: true, } return config, config.Save() } if err != nil { return nil, err } var c Config configContent, err := os.ReadFile(configFilePath) if err != nil { return nil, err } err = json.Unmarshal(configContent, &c) if err != nil { return nil, err } if c.Id == "" { c.Id = uuid.NewString() err := c.Save() if err != nil { return nil, err } } return &c, nil } var ErrNoProfilesFound = errors.New("no profiles found. Run `daytona serve` to create a default profile or `daytona profile create` to connect to a remote server") func (c *Config) GetActiveProfile() (Profile, error) { if len(c.Profiles) == 0 { return Profile{}, ErrNoProfilesFound } for _, profile := range c.Profiles { if profile.Id == c.ActiveProfileId { return profile, nil } } return Profile{}, errors.New("active profile not found. Set an active profile with `daytona profile use`") } func (c *Config) Save() error { configFilePath, err := getConfigPath() if err != nil { return err } err = os.MkdirAll(filepath.Dir(configFilePath), 0755) if err != nil { return err } configContent, err := json.MarshalIndent(c, "", " ") if err != nil { return err } return os.WriteFile(configFilePath, configContent, 0644) } func (c *Config) AddProfile(profile Profile) error { c.Profiles = append(c.Profiles, profile) c.ActiveProfileId = profile.Id return c.Save() } func (c *Config) EditProfile(profile Profile) error { for i, p := range c.Profiles { if p.Id == profile.Id { c.Profiles[i] = profile return c.Save() } } return fmt.Errorf("profile with id %s not found", profile.Id) } func (c *Config) RemoveProfile(profileId string) error { if profileId == "default" { return errors.New("can not remove default profile") } var profiles []Profile for _, profile := range c.Profiles { if profile.Id != profileId { profiles = append(profiles, profile) } } if c.ActiveProfileId == profileId { c.ActiveProfileId = "default" } c.Profiles = profiles return c.Save() } func (c *Config) GetProfile(profileId string) (Profile, error) { for _, profile := range c.Profiles { if profile.Id == profileId { return profile, nil } } return Profile{}, errors.New("profile not found") } func (c *Config) EnableTelemetry() error { c.TelemetryEnabled = true return c.Save() } func (c *Config) DisableTelemetry() error { c.TelemetryEnabled = false return c.Save() } func getConfigPath() (string, error) { configDir, err := GetConfigDir() if err != nil { return "", err } return filepath.Join(configDir, "config.json"), nil } func GetConfigDir() (string, error) { daytonaConfigDir := os.Getenv("DAYTONA_CONFIG_DIR") if daytonaConfigDir != "" { return daytonaConfigDir, nil } userConfigDir, err := os.UserConfigDir() if err != nil { return "", err } return filepath.Join(userConfigDir, "daytona"), nil } func DeleteConfigDir() error { configDir, err := GetConfigDir() if err != nil { return err } return os.RemoveAll(configDir) } func TelemetryEnabled() bool { telemetryEnabled := os.Getenv("DAYTONA_TELEMETRY_ENABLED") if telemetryEnabled != "" { return telemetryEnabled == "true" } c, err := GetConfig() if err != nil { return false } return c.TelemetryEnabled } func GetClientId() string { clientId := os.Getenv("DAYTONA_CLIENT_ID") if clientId != "" { return clientId } c, err := GetConfig() if err != nil { return "" } return c.Id } func GetErrorLogsDir() (string, error) { configDir, err := GetConfigDir() if err != nil { return "", err } errorLogsDir := filepath.Join(configDir, "error_logs") err = os.MkdirAll(errorLogsDir, 0755) if err != nil { return "", err } return errorLogsDir, nil } func getInitialDefaultIde() string { _, err := exec.LookPath("code") if err == nil { return "vscode" } return "browser" } ``` ## /cmd/daytona/config/const.go ```go path="/cmd/daytona/config/const.go" // Copyright 2024 Daytona Platforms Inc. // SPDX-License-Identifier: Apache-2.0 package config import ( "slices" "strings" "github.com/daytonaio/daytona/internal/jetbrains" "github.com/daytonaio/daytona/pkg/os" ) func GetBinaryUrls() map[os.OperatingSystem]string { return map[os.OperatingSystem]string{ (os.Darwin_64_86): "https://download.daytona.io/daytona/latest/daytona-darwin-amd64", (os.Darwin_arm64): "https://download.daytona.io/daytona/latest/daytona-darwin-arm64", (os.Linux_64_86): "https://download.daytona.io/daytona/latest/daytona-linux-amd64", (os.Linux_arm64): "https://download.daytona.io/daytona/latest/daytona-linux-arm64", (os.Windows_64_86): "https://download.daytona.io/daytona/latest/daytona-windows-amd64.exe", (os.Windows_arm64): "https://download.daytona.io/daytona/latest/daytona-windows-arm64.exe", } } func GetIdeList() []Ide { ides := []Ide{ {"vscode", "VS Code"}, {"code-insiders", "VS Code Insiders"}, {"browser", "VS Code - Browser"}, {"cursor", "Cursor"}, {"codium", "VSCodium"}, {"codium-insiders", "VSCodium Insiders"}, {"ssh", "Terminal SSH"}, {"jupyter", "Jupyter"}, {"fleet", "Fleet"}, {"positron", "Positron"}, {"zed", "Zed"}, {"windsurf", "Windsurf"}, } sortedJbIdes := []Ide{} for id, ide := range jetbrains.GetIdes() { sortedJbIdes = append(sortedJbIdes, Ide{string(id), ide.Name}) } slices.SortFunc(sortedJbIdes, func(i, j Ide) int { return strings.Compare(i.Name, j.Name) }) ides = append(ides, sortedJbIdes...) return ides } func GetSupportedGitProviders() []GitProvider { return []GitProvider{ {"github", "GitHub"}, {"github-enterprise-server", "GitHub Enterprise Server"}, {"gitlab", "GitLab"}, {"gitlab-self-managed", "GitLab Self-managed"}, {"bitbucket", "Bitbucket"}, {"bitbucket-server", "Bitbucket Server"}, {"codeberg", "Codeberg"}, {"gitea", "Gitea"}, {"gitness", "Gitness"}, {"azure-devops", "Azure DevOps"}, {"aws-codecommit", "AWS CodeCommit"}, {"gogs", "Gogs"}, {"gitee", "Gitee"}, } } func GetDocsLinkFromGitProvider(providerId string) string { switch providerId { case "github": fallthrough case "github-enterprise-server": return "https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic" case "gitlab": fallthrough case "gitlab-self-managed": return "https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token" case "bitbucket": return "https://support.atlassian.com/bitbucket-cloud/docs/create-an-app-password" case "bitbucket-server": return "https://confluence.atlassian.com/bitbucketserver/http-access-tokens-939515499.html" case "codeberg": return "https://docs.codeberg.org/advanced/access-token/" case "gitea": return "https://docs.gitea.com/1.21/development/api-usage#generating-and-listing-api-tokens" case "gitness": return "https://docs.gitness.com/administration/user-management#generate-user-token" case "azure-devops": return "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat" case "aws-codecommit": return "https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html and to configure AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY & AWS_DEFAULT_REGION read https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html" case "gogs": return "https://www.daytona.io/docs/configuration/git-providers/#gogs" case "gitee": return "https://www.daytona.io/docs/configuration/git-providers/#gitee" default: return "" } } func GetDocsLinkForCommitSigning(providerId string) string { switch providerId { case "github", "github-enterprise-server": return "https://docs.github.com/en/authentication/managing-commit-signature-verification" case "gitlab", "gitlab-self-managed": return "https://docs.gitlab.com/ee/user/project/repository/signed_commits" case "gitea": return "https://docs.gitea.com/administration/signing" case "azure-devops": return "https://learn.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate?view=azure-devops" case "aws-codecommit": return "https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html" default: return "" } } func GetRequiredScopesFromGitProviderId(providerId string) string { switch providerId { case "github": fallthrough case "github-enterprise-server": return "repo, user (read:user,user:email)" case "gitlab": fallthrough case "gitlab-self-managed": return "api,read_user,write_repository" case "bitbucket": return "account:read,repositories:write,pullrequests:read" case "bitbucket-server": return "PROJECT_READ,REPOSITORY_WRITE" case "codeberg": fallthrough case "gitea": return "read:organization,write:repository,read:user" case "gitness": return "/" case "azure-devops": return "Code (Status, Read & Write); User Profile (Read); Project and Team (Read)" case "aws-codecommit": return "/" case "gitee": return "user_info, pull_requests, groups, projects, emails" case "gogs": fallthrough default: return "" } } func GetPrebuildScopesFromGitProviderId(providerId string) string { switch providerId { case "github": fallthrough case "github-enterprise-server": return "admin:repo_hook" case "bitbucket": return "webhooks" case "bitbucket-server": return "REPO_ADMIN" case "azure-devops": return "Work (Read, Write & Manage); Build (Read & Execute)" default: return "" } } func GetWebhookEventHeaderKeyFromGitProvider(providerId string) string { switch providerId { case "github": return "X-GitHub-Event" case "gitlab": fallthrough case "gitlab-self-managed": return "X-Gitlab-Event" case "bitbucket": return "X-Event-Key" case "bitbucket-server": return "X-Event-Key" case "gitea": return "X-Gitea-Event" case "azure-devops": return "X-AzureDevops-Event" case "gitness": return "X-Gitness-Trigger" default: return "" } } ``` ## /cmd/daytona/config/ssh_file.go ```go path="/cmd/daytona/config/ssh_file.go" // Copyright 2024 Daytona Platforms Inc. // SPDX-License-Identifier: Apache-2.0 package config import ( "bytes" "fmt" "os" "os/exec" "path/filepath" "regexp" "runtime" "strings" log "github.com/sirupsen/logrus" ) var SshHomeDir string func ensureSshFilesLinked() error { // Make sure ~/.ssh/config file exists if not create it sshDir := filepath.Join(SshHomeDir, ".ssh") configPath := filepath.Join(sshDir, "config") _, err := os.Stat(configPath) if os.IsNotExist(err) { err := os.MkdirAll(sshDir, 0700) if err != nil { return err } err = os.WriteFile(configPath, []byte{}, 0600) if err != nil { return err } } // Make sure daytona_config file exists daytonaConfigPath := filepath.Join(sshDir, "daytona_config") _, err = os.Stat(daytonaConfigPath) if os.IsNotExist(err) { err := os.WriteFile(daytonaConfigPath, []byte{}, 0600) if err != nil { return err } } // Make sure daytona_config is included configFile := filepath.Join(sshDir, "config") _, err = os.Stat(configFile) if os.IsNotExist(err) { err := os.WriteFile(configFile, []byte("Include daytona_config\n\n"), 0600) if err != nil { return err } } else { content, err := os.ReadFile(configFile) if err != nil { return err } contentStr := string(content) if strings.HasPrefix(contentStr, "Include daytona_config") { return nil } newContent := strings.ReplaceAll(contentStr, "Include daytona_config\n\n", "") newContent = strings.ReplaceAll(newContent, "Include daytona_config\n", "") newContent = strings.ReplaceAll(newContent, "Include daytona_config", "") newContent = "Include daytona_config\n\n" + newContent err = os.WriteFile(configFile, []byte(newContent), 0600) if err != nil { return err } } return nil } func UnlinkSshFiles() error { sshDirPath := filepath.Join(SshHomeDir, ".ssh") sshConfigPath := filepath.Join(sshDirPath, "config") daytonaConfigPath := filepath.Join(sshDirPath, "daytona_config") // Remove the include line from the config file _, err := os.Stat(sshConfigPath) if os.IsExist(err) { content, err := os.ReadFile(sshConfigPath) if err != nil { return err } newContent := strings.ReplaceAll(string(content), "Include daytona_config\n\n", "") newContent = strings.ReplaceAll(string(newContent), "Include daytona_config", "") err = os.WriteFile(sshConfigPath, []byte(newContent), 0600) if err != nil { return err } } // Remove the daytona_config file _, err = os.Stat(daytonaConfigPath) if os.IsExist(err) { err = os.Remove(daytonaConfigPath) if err != nil { return err } } return nil } // Add ssh entry func generateSshConfigEntry(profileId, resourceId, knownHostsPath string, gpgForward bool) (string, error) { daytonaPath, err := os.Executable() if err != nil { return "", err } tab := "\t" resourceHostname := GetHostname(profileId, resourceId) config := fmt.Sprintf("Host %s\n"+ tab+"User daytona\n"+ tab+"StrictHostKeyChecking no\n"+ tab+"UserKnownHostsFile %s\n"+ tab+"ProxyCommand \"%s\" ssh-proxy %s %s\n"+ tab+"ForwardAgent yes\n", resourceHostname, knownHostsPath, daytonaPath, profileId, resourceId) if gpgForward { localSocket, err := getLocalGPGSocket() if err != nil { log.Trace(err) return config, nil } remoteSocket, err := getRemoteGPGSocket(resourceHostname) if err != nil { log.Trace(err) return config, nil } config += fmt.Sprintf( tab+"StreamLocalBindUnlink yes\n"+ tab+"RemoteForward %s:%s\n\n", remoteSocket, localSocket) } else { config += "\n" } return config, nil } func EnsureSshConfigEntryAdded(profileId, resourceId string, gpgKey *string) error { err := ensureSshFilesLinked() if err != nil { return err } sshDir := filepath.Join(SshHomeDir, ".ssh") configPath := filepath.Join(sshDir, "daytona_config") knownHostsFile := getKnownHostsFile() // Read existing content from the file existingContent, err := ReadSshConfig(configPath) if err != nil && !os.IsNotExist(err) { return err } var configGenerated bool regexWithoutGPG := regexp.MustCompile(fmt.Sprintf(`(?m)^Host %s-%s\s*\n(?:\s+[^\n]*\n?)*`, profileId, resourceId)) regexWithGPG := regexp.MustCompile(fmt.Sprintf(`(?m)^Host %s-%s\s*\n(?:\s+[^\n]*\n?)*StreamLocalBindUnlink\s+yes\s*\n(?:\s+[^\n]*\n?)*RemoteForward\s+[^\s]+\s+[^\s]+\s*\n`, profileId, resourceId)) if !regexWithoutGPG.MatchString(existingContent) { newContent, err := appendSshConfigEntry(configPath, profileId, resourceId, knownHostsFile, false, existingContent) if err != nil { return err } existingContent = newContent configGenerated = true } if gpgKey != nil && *gpgKey != "" && !regexWithGPG.MatchString(existingContent) { _, err := appendSshConfigEntry(configPath, profileId, resourceId, knownHostsFile, true, existingContent) if err != nil { return err } hostname := GetHostname(profileId, resourceId) err = ExportGPGKey(*gpgKey, hostname) if err != nil { return err } configGenerated = true } if !configGenerated { updatedContent, err := regenerateProxyCommand(existingContent, profileId, resourceId) if err != nil { return err } err = UpdateSshEntry(profileId, resourceId, updatedContent) if err != nil { return err } } return nil } func regenerateProxyCommand(existingContent, profileId, resourceId string) (string, error) { daytonaPath, err := os.Executable() if err != nil { return "", err } hostLine := fmt.Sprintf("Host %s", GetHostname(profileId, resourceId)) regex := regexp.MustCompile(fmt.Sprintf(`%s\s*\n(?:\t.*\n?)*`, hostLine)) matchedEntry := regex.FindString(existingContent) if matchedEntry == "" { return "", fmt.Errorf("no SSH entry found for resource %s", resourceId) } re := regexp.MustCompile(`(?m)^\s*ProxyCommand\s+.*$`) updatedContent := re.ReplaceAllString(matchedEntry, fmt.Sprintf("\tProxyCommand \"%s\" ssh-proxy %s %s", daytonaPath, profileId, resourceId)) return updatedContent, nil } func getKnownHostsFile() string { if runtime.GOOS == "windows" { return "NUL" } return "/dev/null" } func appendSshConfigEntry(configPath, profileId, resourceId, knownHostsFile string, gpgForward bool, existingContent string) (string, error) { data, err := generateSshConfigEntry(profileId, resourceId, knownHostsFile, gpgForward) if err != nil { return "", err } if strings.Contains(existingContent, data) { // Entry already exists in the file return existingContent, nil } // We want to remove the config entry gpg counterpart configCounterpart, err := generateSshConfigEntry(profileId, resourceId, knownHostsFile, !gpgForward) if err != nil { return "", err } updatedContent := strings.ReplaceAll(existingContent, configCounterpart, "") updatedContent = data + updatedContent // Open the file for writing file, err := os.Create(configPath) if err != nil { return "", err } defer file.Close() _, err = file.WriteString(updatedContent) return updatedContent, err } func getLocalGPGSocket() (string, error) { // Check if gpg is installed if _, err := exec.LookPath("gpg"); err != nil { return "", fmt.Errorf("gpg is not installed: %v", err) } // Attempt to get the local GPG socket cmd := exec.Command("gpgconf", "--list-dir", "agent-extra-socket") output, err := cmd.Output() if err != nil { return "", fmt.Errorf("failed to get local GPG socket: %v", err) } return strings.TrimSpace(string(output)), nil } func getRemoteGPGSocket(resourceHostname string) (string, error) { cmd := exec.Command("ssh", resourceHostname, "gpgconf --list-dir agent-socket") output, err := cmd.Output() if err != nil { return "", fmt.Errorf("failed to get remote GPG socket: %v", err) } return strings.TrimSpace(string(output)), nil } func ExportGPGKey(keyID, resourceHostname string) error { exportCmd := exec.Command("gpg", "--export", keyID) var output bytes.Buffer exportCmd.Stdout = &output if err := exportCmd.Run(); err != nil { return err } importCmd := exec.Command("ssh", resourceHostname, "gpg --import") importCmd.Stdin = &output return importCmd.Run() } func ReadSshConfig(configPath string) (string, error) { content, err := os.ReadFile(configPath) if err != nil && !os.IsNotExist(err) { return "", err } return string(content), nil } func writeSshConfig(configPath, newContent string) error { file, err := os.Create(configPath) if err != nil { return err } defer file.Close() _, err = file.WriteString(newContent) if err != nil { return err } return nil } // RemoveSshEntries removes all SSH entries for a given profileId and resourceId func RemoveSshEntries(profileId, resourceId string) error { sshDir := filepath.Join(SshHomeDir, ".ssh") configPath := filepath.Join(sshDir, "daytona_config") // Read existing content from the SSH config file existingContent, err := ReadSshConfig(configPath) if err != nil { return err } // Define the regex pattern to match Host entries for the given profileId and resourceId regex := regexp.MustCompile(fmt.Sprintf(`Host %s-%s\n(?:\t.*\n?)*`, profileId, resourceId)) contentToDelete := regex.FindString(existingContent) if contentToDelete == "" { return nil } newContent := strings.ReplaceAll(existingContent, contentToDelete, "") newContent = strings.TrimSpace(newContent) // Write the updated content back to the config file return writeSshConfig(configPath, newContent) } func UpdateSshEntry(profileId, resourceId, updatedContent string) error { sshDir := filepath.Join(SshHomeDir, ".ssh") configPath := filepath.Join(sshDir, "daytona_config") existingContent, err := ReadSshConfig(configPath) if err != nil { return err } hostLine := fmt.Sprintf("Host %s", GetHostname(profileId, resourceId)) regex := regexp.MustCompile(fmt.Sprintf(`%s\s*\n(?:\t.*\n?)*`, hostLine)) oldContent := regex.FindString(existingContent) if oldContent == "" { return fmt.Errorf("no SSH entry found for resource %s", resourceId) } existingContent = strings.ReplaceAll(existingContent, oldContent, updatedContent) err = writeSshConfig(configPath, existingContent) if err != nil { return err } return nil } func GetHostname(profileId, resourceId string) string { return fmt.Sprintf("%s-%s", profileId, resourceId) } func init() { if runtime.GOOS == "windows" { SshHomeDir = os.Getenv("USERPROFILE") } else { SshHomeDir = os.Getenv("HOME") } } ``` ## /cmd/daytona/main.go ```go path="/cmd/daytona/main.go" // Copyright 2024 Daytona Platforms Inc. // SPDX-License-Identifier: Apache-2.0 package main import ( "os" "time" golog "log" "github.com/daytonaio/daytona/internal/util" "github.com/daytonaio/daytona/pkg/cmd" "github.com/daytonaio/daytona/pkg/cmd/agentmode" "github.com/daytonaio/daytona/pkg/common" "github.com/rs/zerolog" zlog "github.com/rs/zerolog/log" log "github.com/sirupsen/logrus" ) func main() { if common.AgentMode() { err := agentmode.Execute() if err != nil { log.Fatal(err) } return } err := cmd.Execute() if err != nil { log.Fatal(err) } } func init() { logLevel := log.WarnLevel logLevelEnv, logLevelSet := os.LookupEnv("LOG_LEVEL") if logLevelSet { var err error logLevel, err = log.ParseLevel(logLevelEnv) if err != nil { logLevel = log.WarnLevel } } log.SetLevel(logLevel) zerologLevel, err := zerolog.ParseLevel(logLevel.String()) if err != nil { zerologLevel = zerolog.ErrorLevel } zerolog.SetGlobalLevel(zerologLevel) zerolog.TimeFieldFormat = zerolog.TimeFormatUnix zlog.Logger = zlog.Output(zerolog.ConsoleWriter{ Out: &util.DebugLogWriter{}, TimeFormat: time.RFC3339, }) golog.SetOutput(&util.DebugLogWriter{}) } ``` ## /docs/agent_mode/daytona.md ## daytona Daytona is a Dev Environment Manager ### Synopsis Daytona is a Dev Environment Manager ``` daytona [flags] ``` ### Options ``` --help help for daytona -v, --version Display the version of Daytona ``` ### SEE ALSO * [daytona agent](daytona_agent.md) - Start the agent process * [daytona autocomplete](daytona_autocomplete.md) - Adds a completion script for your shell environment * [daytona docs](daytona_docs.md) - Opens the Daytona documentation in your default browser. * [daytona expose](daytona_expose.md) - Expose a local port over stdout - Used by the Daytona CLI to make direct connections to the workspace * [daytona forward](daytona_forward.md) - Forward a port publicly via an URL * [daytona info](daytona_info.md) - Show resource info * [daytona list](daytona_list.md) - List workspaces * [daytona logs](daytona_logs.md) - View resource logs * [daytona version](daytona_version.md) - Print the version number ## /docs/agent_mode/daytona_agent.md ## daytona agent Start the agent process ``` daytona agent [flags] ``` ### Options ``` --target Run the agent in target mode ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona agent logs](daytona_agent_logs.md) - Output Daytona Agent logs ## /docs/agent_mode/daytona_agent_logs.md ## daytona agent logs Output Daytona Agent logs ``` daytona agent logs [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona agent](daytona_agent.md) - Start the agent process ## /docs/agent_mode/daytona_autocomplete.md ## daytona autocomplete Adds a completion script for your shell environment ``` daytona autocomplete [bash|zsh|fish|powershell] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_docs.md ## daytona docs Opens the Daytona documentation in your default browser. ``` daytona docs [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_expose.md ## daytona expose Expose a local port over stdout - Used by the Daytona CLI to make direct connections to the workspace ``` daytona expose [PORT] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_forward.md ## daytona forward Forward a port publicly via an URL ``` daytona forward [PORT] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_info.md ## daytona info Show resource info ``` daytona info [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_list.md ## daytona list List workspaces ``` daytona list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -l, --label strings Filter by label ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_logs.md ## daytona logs View resource logs ``` daytona logs [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/agent_mode/daytona_version.md ## daytona version Print the version number ``` daytona version [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona.md ## daytona Daytona is a Dev Environment Manager ### Synopsis Daytona is a Dev Environment Manager ``` daytona [flags] ``` ### Options ``` --help help for daytona -v, --version Display the version of Daytona ``` ### SEE ALSO * [daytona api-key](daytona_api-key.md) - Api Key commands * [daytona autocomplete](daytona_autocomplete.md) - Adds a completion script for your shell environment * [daytona build](daytona_build.md) - Manage builds * [daytona code](daytona_code.md) - Open a workspace in your preferred IDE * [daytona config](daytona_config.md) - Output Daytona configuration * [daytona create](daytona_create.md) - Create a workspace * [daytona delete](daytona_delete.md) - Delete a workspace * [daytona docs](daytona_docs.md) - Opens the Daytona documentation in your default browser. * [daytona env](daytona_env.md) - Manage server environment variables that are added to all targets and workspaces * [daytona forward](daytona_forward.md) - Forward a port from a workspace to your local machine * [daytona git-provider](daytona_git-provider.md) - Manage Git provider configs * [daytona ide](daytona_ide.md) - Choose the default IDE * [daytona info](daytona_info.md) - Show workspace info * [daytona list](daytona_list.md) - List workspaces * [daytona logs](daytona_logs.md) - View the logs of a workspace * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds * [daytona profile](daytona_profile.md) - Manage profiles * [daytona provider](daytona_provider.md) - Manage providers * [daytona purge](daytona_purge.md) - Purges all Daytona data from the current device * [daytona restart](daytona_restart.md) - Restart a workspace * [daytona runner](daytona_runner.md) - Manage the runner * [daytona serve](daytona_serve.md) - Run the server process in the current terminal session * [daytona server](daytona_server.md) - Start the server process in daemon mode * [daytona ssh](daytona_ssh.md) - SSH into a workspace using the terminal * [daytona start](daytona_start.md) - Start a workspace * [daytona stop](daytona_stop.md) - Stop a workspace * [daytona target](daytona_target.md) - Manage targets * [daytona target-config](daytona_target-config.md) - Manage target configs * [daytona telemetry](daytona_telemetry.md) - Manage telemetry collection * [daytona template](daytona_template.md) - Manage workspace templates * [daytona update](daytona_update.md) - Update Daytona CLI * [daytona use](daytona_use.md) - Use profile [PROFILE_NAME] * [daytona version](daytona_version.md) - Print the version number * [daytona whoami](daytona_whoami.md) - Display information about the active user ## /docs/daytona_api-key.md ## daytona api-key Api Key commands ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona api-key create](daytona_api-key_create.md) - Create a new API key * [daytona api-key delete](daytona_api-key_delete.md) - Delete an API key * [daytona api-key list](daytona_api-key_list.md) - List API keys ## /docs/daytona_api-key_create.md ## daytona api-key create Create a new API key ``` daytona api-key create [NAME] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona api-key](daytona_api-key.md) - Api Key commands ## /docs/daytona_api-key_delete.md ## daytona api-key delete Delete an API key ``` daytona api-key delete [NAME] [flags] ``` ### Options ``` -y, --yes Skip confirmation prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona api-key](daytona_api-key.md) - Api Key commands ## /docs/daytona_api-key_list.md ## daytona api-key list List API keys ``` daytona api-key list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona api-key](daytona_api-key.md) - Api Key commands ## /docs/daytona_autocomplete.md ## daytona autocomplete Adds a completion script for your shell environment ``` daytona autocomplete [bash|zsh|fish|powershell] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_build.md ## daytona build Manage builds ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona build delete](daytona_build_delete.md) - Delete a build * [daytona build info](daytona_build_info.md) - Show build info * [daytona build list](daytona_build_list.md) - List all builds * [daytona build logs](daytona_build_logs.md) - View logs for build * [daytona build run](daytona_build_run.md) - Run a build from a workspace template ## /docs/daytona_build_delete.md ## daytona build delete Delete a build ``` daytona build delete [BUILD] [flags] ``` ### Options ``` -a, --all Delete ALL builds -f, --force Force delete build --prebuild-id string Delete ALL builds from prebuild ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona build](daytona_build.md) - Manage builds ## /docs/daytona_build_info.md ## daytona build info Show build info ``` daytona build info [BUILD] [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona build](daytona_build.md) - Manage builds ## /docs/daytona_build_list.md ## daytona build list List all builds ``` daytona build list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona build](daytona_build.md) - Manage builds ## /docs/daytona_build_logs.md ## daytona build logs View logs for build ``` daytona build logs [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona build](daytona_build.md) - Manage builds ## /docs/daytona_build_run.md ## daytona build run Run a build from a workspace template ``` daytona build run [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona build](daytona_build.md) - Manage builds ## /docs/daytona_code.md ## daytona code Open a workspace in your preferred IDE ``` daytona code [WORKSPACE] [flags] ``` ### Options ``` -i, --ide string Specify the IDE (vscode, code-insiders, browser, cursor, codium, codium-insiders, ssh, jupyter, fleet, positron, zed, windsurf, clion, goland, intellij, phpstorm, pycharm, rider, rubymine, webstorm) -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_config.md ## daytona config Output Daytona configuration ``` daytona config [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -k, --show-api-keys Show API keys ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_create.md ## daytona create Create a workspace ``` daytona create [REPOSITORY_URL | WORKSPACE_CONFIG_NAME]... [flags] ``` ### Options ``` --blank Create a blank workspace without using existing templates --branch strings Specify the Git branches to use in the workspaces --builder BuildChoice Specify the builder (currently auto/devcontainer/none) --custom-image string Create the workspace with the custom image passed as the flag value; Requires setting --custom-image-user flag as well --custom-image-user string Create the workspace with the custom image user passed as the flag value; Requires setting --custom-image flag as well --devcontainer-path string Automatically assign the devcontainer builder with the path passed as the flag value --env stringArray Specify environment variables (e.g. --env 'KEY1=VALUE1' --env 'KEY2=VALUE2' ...') --git-provider-config string Specify the Git provider configuration ID or alias -i, --ide string Specify the IDE (vscode, code-insiders, browser, cursor, codium, codium-insiders, ssh, jupyter, fleet, positron, zed, windsurf, clion, goland, intellij, phpstorm, pycharm, rider, rubymine, webstorm) --label stringArray Specify labels (e.g. --label 'label.key1=VALUE1' --label 'label.key2=VALUE2' ...) --manual Manually enter the Git repository --multi-workspace Target with multiple workspaces/repos -n, --no-ide Do not open the target in the IDE after target creation -t, --target string Specify the target (e.g. 'local') -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_delete.md ## daytona delete Delete a workspace ``` daytona delete [WORKSPACE]... [flags] ``` ### Options ``` -a, --all Delete all workspaces -f, --force Delete a workspace by force -y, --yes Confirm deletion without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_docs.md ## daytona docs Opens the Daytona documentation in your default browser. ``` daytona docs [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_env.md ## daytona env Manage server environment variables that are added to all targets and workspaces ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona env delete](daytona_env_delete.md) - Delete server environment variables * [daytona env list](daytona_env_list.md) - List server environment variables * [daytona env set](daytona_env_set.md) - Set server environment variables ## /docs/daytona_env_delete.md ## daytona env delete Delete server environment variables ``` daytona env delete [KEY]... [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona env](daytona_env.md) - Manage server environment variables that are added to all targets and workspaces ## /docs/daytona_env_list.md ## daytona env list List server environment variables ``` daytona env list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -v, --show-values Show environment variable values ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona env](daytona_env.md) - Manage server environment variables that are added to all targets and workspaces ## /docs/daytona_env_set.md ## daytona env set Set server environment variables ``` daytona env set [KEY=VALUE]... [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona env](daytona_env.md) - Manage server environment variables that are added to all targets and workspaces ## /docs/daytona_forward.md ## daytona forward Forward a port from a workspace to your local machine ``` daytona forward [PORT] [WORKSPACE] [flags] ``` ### Options ``` --public Should be port be available publicly via an URL ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_git-provider.md ## daytona git-provider Manage Git provider configs ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona git-provider create](daytona_git-provider_create.md) - Create a Git provider config * [daytona git-provider delete](daytona_git-provider_delete.md) - Delete a Git provider config * [daytona git-provider list](daytona_git-provider_list.md) - Lists your registered Git provider configs * [daytona git-provider update](daytona_git-provider_update.md) - Update a Git provider ## /docs/daytona_git-provider_create.md ## daytona git-provider create Create a Git provider config ``` daytona git-provider create [GIT_PROVIDER_ID] [flags] ``` ### Options ``` -a, --alias string Alias -b, --base-api-url string Base API Url -k, --signing-key string Signing Key -s, --signing-method string Signing Method (ssh, gpg) -t, --token string Personal Access Token -u, --username string Username ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona git-provider](daytona_git-provider.md) - Manage Git provider configs ## /docs/daytona_git-provider_delete.md ## daytona git-provider delete Delete a Git provider config ``` daytona git-provider delete [flags] ``` ### Options ``` -a, --all Delete all Git providers -y, --yes Confirm deletion without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona git-provider](daytona_git-provider.md) - Manage Git provider configs ## /docs/daytona_git-provider_list.md ## daytona git-provider list Lists your registered Git provider configs ``` daytona git-provider list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona git-provider](daytona_git-provider.md) - Manage Git provider configs ## /docs/daytona_git-provider_update.md ## daytona git-provider update Update a Git provider ``` daytona git-provider update [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona git-provider](daytona_git-provider.md) - Manage Git provider configs ## /docs/daytona_ide.md ## daytona ide Choose the default IDE ``` daytona ide [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_info.md ## daytona info Show workspace info ``` daytona info [WORKSPACE] [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_list.md ## daytona list List workspaces ``` daytona list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -l, --label strings Filter by label ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_logs.md ## daytona logs View the logs of a workspace ``` daytona logs [WORKSPACE] [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_prebuild.md ## daytona prebuild Manage prebuilds ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona prebuild create](daytona_prebuild_create.md) - Create a prebuild configuration * [daytona prebuild delete](daytona_prebuild_delete.md) - Delete a prebuild configuration * [daytona prebuild info](daytona_prebuild_info.md) - Show prebuild configuration info * [daytona prebuild list](daytona_prebuild_list.md) - List prebuild configurations * [daytona prebuild update](daytona_prebuild_update.md) - Update a prebuild configuration ## /docs/daytona_prebuild_create.md ## daytona prebuild create Create a prebuild configuration ``` daytona prebuild create [WORKSPACE_CONFIG] [flags] ``` ### Options ``` -b, --branch string Git branch for the prebuild -c, --commit-interval int Commit interval for running a prebuild - leave blank to ignore push events -r, --retention int Maximum number of resulting builds stored at a time --run Run the prebuild once after adding it -t, --trigger-files strings Full paths of files whose changes should explicitly trigger a prebuild ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds ## /docs/daytona_prebuild_delete.md ## daytona prebuild delete Delete a prebuild configuration ``` daytona prebuild delete [WORKSPACE_CONFIG] [PREBUILD] [flags] ``` ### Options ``` -f, --force Force delete prebuild ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds ## /docs/daytona_prebuild_info.md ## daytona prebuild info Show prebuild configuration info ``` daytona prebuild info [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds ## /docs/daytona_prebuild_list.md ## daytona prebuild list List prebuild configurations ``` daytona prebuild list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds ## /docs/daytona_prebuild_update.md ## daytona prebuild update Update a prebuild configuration ``` daytona prebuild update [WORKSPACE_CONFIG] [PREBUILD_ID] [flags] ``` ### Options ``` -b, --branch string Git branch for the prebuild -c, --commit-interval int Commit interval for running a prebuild - leave blank to ignore push events -r, --retention int Maximum number of resulting builds stored at a time --run Run the prebuild once after updating it -t, --trigger-files strings Full paths of files whose changes should explicitly trigger a prebuild ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona prebuild](daytona_prebuild.md) - Manage prebuilds ## /docs/daytona_profile.md ## daytona profile Manage profiles ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona profile create](daytona_profile_create.md) - Create a profile * [daytona profile delete](daytona_profile_delete.md) - Delete a profile * [daytona profile list](daytona_profile_list.md) - List profiles * [daytona profile update](daytona_profile_update.md) - Update profile [PROFILE_NAME] * [daytona profile use](daytona_profile_use.md) - Use profile [PROFILE_NAME] ## /docs/daytona_profile_create.md ## daytona profile create Create a profile ``` daytona profile create [flags] ``` ### Options ``` -k, --api-key string API Key -a, --api-url string API URL -n, --name string Profile name ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona profile](daytona_profile.md) - Manage profiles ## /docs/daytona_profile_delete.md ## daytona profile delete Delete a profile ``` daytona profile delete [PROFILE_NAME] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona profile](daytona_profile.md) - Manage profiles ## /docs/daytona_profile_list.md ## daytona profile list List profiles ``` daytona profile list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona profile](daytona_profile.md) - Manage profiles ## /docs/daytona_profile_update.md ## daytona profile update Update profile [PROFILE_NAME] ``` daytona profile update [flags] ``` ### Options ``` -k, --api-key string API Key -a, --api-url string API URL -n, --name string Profile name ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona profile](daytona_profile.md) - Manage profiles ## /docs/daytona_provider.md ## daytona provider Manage providers ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona provider install](daytona_provider_install.md) - Install provider * [daytona provider list](daytona_provider_list.md) - List installed providers * [daytona provider uninstall](daytona_provider_uninstall.md) - Uninstall provider * [daytona provider update](daytona_provider_update.md) - Update provider ## /docs/daytona_provider_install.md ## daytona provider install Install provider ``` daytona provider install [flags] ``` ### Options ``` -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona provider](daytona_provider.md) - Manage providers ## /docs/daytona_provider_list.md ## daytona provider list List installed providers ``` daytona provider list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona provider](daytona_provider.md) - Manage providers ## /docs/daytona_provider_uninstall.md ## daytona provider uninstall Uninstall provider ``` daytona provider uninstall [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona provider](daytona_provider.md) - Manage providers ## /docs/daytona_provider_update.md ## daytona provider update Update provider ``` daytona provider update [flags] ``` ### Options ``` -a, --all Update all providers ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona provider](daytona_provider.md) - Manage providers ## /docs/daytona_purge.md ## daytona purge Purges all Daytona data from the current device ### Synopsis Purges all Daytona data from the current device - including all local runner providers, configuration files and SSH files. This command is irreversible. ``` daytona purge [flags] ``` ### Options ``` -f, --force Delete all targets by force -y, --yes Execute purge without a prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_restart.md ## daytona restart Restart a workspace ``` daytona restart [WORKSPACE]... [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_runner.md ## daytona runner Manage the runner ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona runner config](daytona_runner_config.md) - Outputs Daytona Runner config * [daytona runner configure](daytona_runner_configure.md) - Configure Daytona Runner * [daytona runner logs](daytona_runner_logs.md) - View runner logs * [daytona runner purge](daytona_runner_purge.md) - Purges the Daytona Runner * [daytona runner restart](daytona_runner_restart.md) - Restarts the runner * [daytona runner serve](daytona_runner_serve.md) - Starts the runner in the foreground * [daytona runner start](daytona_runner_start.md) - Starts the runner * [daytona runner stop](daytona_runner_stop.md) - Stops the runner ## /docs/daytona_runner_config.md ## daytona runner config Outputs Daytona Runner config ``` daytona runner config [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -k, --key Show API Key ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_configure.md ## daytona runner configure Configure Daytona Runner ``` daytona runner configure [flags] ``` ### Options ``` --api-key string Runner API Key --api-url string Daytona Server API URL --client-id string Client ID --disable-telemetry Disable telemetry --id string Runner ID --name string Runner Name ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_logs.md ## daytona runner logs View runner logs ``` daytona runner logs [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_purge.md ## daytona runner purge Purges the Daytona Runner ``` daytona runner purge [flags] ``` ### Options ``` -y, --yes Execute Daytona Runner purge without a prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_restart.md ## daytona runner restart Restarts the runner ``` daytona runner restart [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_serve.md ## daytona runner serve Starts the runner in the foreground ``` daytona runner serve [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_start.md ## daytona runner start Starts the runner ``` daytona runner start [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_runner_stop.md ## daytona runner stop Stops the runner ``` daytona runner stop [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona runner](daytona_runner.md) - Manage the runner ## /docs/daytona_serve.md ## daytona serve Run the server process in the current terminal session ``` daytona serve [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_server.md ## daytona server Start the server process in daemon mode ``` daytona server [flags] ``` ### Options ``` -y, --yes Skip the confirmation prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona server config](daytona_server_config.md) - Output local Daytona Server config * [daytona server configure](daytona_server_configure.md) - Configure Daytona Server * [daytona server logs](daytona_server_logs.md) - Output Daytona Server logs * [daytona server restart](daytona_server_restart.md) - Restarts the Daytona Server daemon * [daytona server runner](daytona_server_runner.md) - Manage runners * [daytona server start](daytona_server_start.md) - Start the Daytona Server daemon * [daytona server stop](daytona_server_stop.md) - Stops the Daytona Server daemon ## /docs/daytona_server_config.md ## daytona server config Output local Daytona Server config ``` daytona server config [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode ## /docs/daytona_server_configure.md ## daytona server configure Configure Daytona Server ``` daytona server configure [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode ## /docs/daytona_server_logs.md ## daytona server logs Output Daytona Server logs ``` daytona server logs [flags] ``` ### Options ``` --file string Read specific log file -f, --follow Follow logs -l, --local Read local server log files ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode * [daytona server logs list](daytona_server_logs_list.md) - Lists Daytona Server Log Files ## /docs/daytona_server_logs_list.md ## daytona server logs list Lists Daytona Server Log Files ``` daytona server logs list [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server logs](daytona_server_logs.md) - Output Daytona Server logs ## /docs/daytona_server_restart.md ## daytona server restart Restarts the Daytona Server daemon ``` daytona server restart [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode ## /docs/daytona_server_runner.md ## daytona server runner Manage runners ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode * [daytona server runner create](daytona_server_runner_create.md) - Create a runner * [daytona server runner delete](daytona_server_runner_delete.md) - Delete a runner * [daytona server runner list](daytona_server_runner_list.md) - List runners * [daytona server runner logs](daytona_server_runner_logs.md) - View runner logs ## /docs/daytona_server_runner_create.md ## daytona server runner create Create a runner ``` daytona server runner create [flags] ``` ### Options ``` -n, --name string Runner name ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server runner](daytona_server_runner.md) - Manage runners ## /docs/daytona_server_runner_delete.md ## daytona server runner delete Delete a runner ``` daytona server runner delete [RUNNER] [flags] ``` ### Options ``` -y, --yes Confirm deletion without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server runner](daytona_server_runner.md) - Manage runners ## /docs/daytona_server_runner_list.md ## daytona server runner list List runners ``` daytona server runner list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server runner](daytona_server_runner.md) - Manage runners ## /docs/daytona_server_runner_logs.md ## daytona server runner logs View runner logs ``` daytona server runner logs [RUNNER_ID] [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server runner](daytona_server_runner.md) - Manage runners ## /docs/daytona_server_start.md ## daytona server start Start the Daytona Server daemon ``` daytona server start [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode ## /docs/daytona_server_stop.md ## daytona server stop Stops the Daytona Server daemon ``` daytona server stop [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona server](daytona_server.md) - Start the server process in daemon mode ## /docs/daytona_ssh.md ## daytona ssh SSH into a workspace using the terminal ``` daytona ssh [WORKSPACE] [CMD...] [flags] ``` ### Options ``` -e, --edit Edit the workspace's SSH config -o, --option stringArray Specify SSH options in KEY=VALUE format. -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_start.md ## daytona start Start a workspace ``` daytona start [WORKSPACE]... [flags] ``` ### Options ``` -a, --all Start all targets -c, --code Open the target in the IDE after target start -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_stop.md ## daytona stop Stop a workspace ``` daytona stop [WORKSPACE]... [flags] ``` ### Options ``` -a, --all Stop all targets -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_target-config.md ## daytona target-config Manage target configs ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona target-config create](daytona_target-config_create.md) - Create target config * [daytona target-config delete](daytona_target-config_delete.md) - Deletes a target config * [daytona target-config list](daytona_target-config_list.md) - List target configs ## /docs/daytona_target-config_create.md ## daytona target-config create Create target config ``` daytona target-config create [flags] ``` ### Options ``` -f, --file string Path to JSON file for target configuration, use '-' to read from stdin ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target-config](daytona_target-config.md) - Manage target configs ## /docs/daytona_target-config_delete.md ## daytona target-config delete Deletes a target config ``` daytona target-config delete [TARGET_CONFIG] [flags] ``` ### Options ``` -y, --yes Confirm deletion of all targets without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target-config](daytona_target-config.md) - Manage target configs ## /docs/daytona_target-config_list.md ## daytona target-config list List target configs ``` daytona target-config list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -v, --show-options Show target options ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target-config](daytona_target-config.md) - Manage target configs ## /docs/daytona_target.md ## daytona target Manage targets ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona target create](daytona_target_create.md) - Create a target * [daytona target delete](daytona_target_delete.md) - Delete a target * [daytona target info](daytona_target_info.md) - Show target info * [daytona target list](daytona_target_list.md) - List targets * [daytona target logs](daytona_target_logs.md) - View the logs of a target * [daytona target restart](daytona_target_restart.md) - Restart a target * [daytona target set-default](daytona_target_set-default.md) - Set default target * [daytona target ssh](daytona_target_ssh.md) - SSH into a target using the terminal * [daytona target start](daytona_target_start.md) - Start a target * [daytona target stop](daytona_target_stop.md) - Stop a target ## /docs/daytona_target_create.md ## daytona target create Create a target ``` daytona target create [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_delete.md ## daytona target delete Delete a target ``` daytona target delete [TARGET]... [flags] ``` ### Options ``` -a, --all Delete all targets -f, --force Delete a target by force -y, --yes Confirm deletion without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_info.md ## daytona target info Show target info ``` daytona target info [TARGET] [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -v, --show-options Show target options ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_list.md ## daytona target list List targets ``` daytona target list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) -v, --show-options Show target options ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_logs.md ## daytona target logs View the logs of a target ``` daytona target logs [TARGET] [flags] ``` ### Options ``` -f, --follow Follow logs ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_restart.md ## daytona target restart Restart a target ``` daytona target restart [TARGET] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_set-default.md ## daytona target set-default Set default target ``` daytona target set-default [TARGET] [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_ssh.md ## daytona target ssh SSH into a target using the terminal ``` daytona target ssh [TARGET] [CMD...] [flags] ``` ### Options ``` -o, --option stringArray Specify SSH options in KEY=VALUE format. -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_start.md ## daytona target start Start a target ``` daytona target start [TARGET] [flags] ``` ### Options ``` -a, --all Start all targets -y, --yes Automatically confirm any prompts ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_target_stop.md ## daytona target stop Stop a target ``` daytona target stop [TARGET] [flags] ``` ### Options ``` -a, --all Stop all targets ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona target](daytona_target.md) - Manage targets ## /docs/daytona_telemetry.md ## daytona telemetry Manage telemetry collection ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona telemetry disable](daytona_telemetry_disable.md) - Disable telemetry collection * [daytona telemetry enable](daytona_telemetry_enable.md) - Enable telemetry collection ## /docs/daytona_telemetry_disable.md ## daytona telemetry disable Disable telemetry collection ``` daytona telemetry disable [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona telemetry](daytona_telemetry.md) - Manage telemetry collection ## /docs/daytona_telemetry_enable.md ## daytona telemetry enable Enable telemetry collection ``` daytona telemetry enable [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona telemetry](daytona_telemetry.md) - Manage telemetry collection ## /docs/daytona_template.md ## daytona template Manage workspace templates ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager * [daytona template create](daytona_template_create.md) - Create a workspace template * [daytona template delete](daytona_template_delete.md) - Delete a workspace template * [daytona template export](daytona_template_export.md) - Export a workspace template * [daytona template import](daytona_template_import.md) - Import a workspace template from a JSON object * [daytona template info](daytona_template_info.md) - Show workspace template info * [daytona template list](daytona_template_list.md) - Lists workspace templates * [daytona template set-default](daytona_template_set-default.md) - Set workspace template info * [daytona template update](daytona_template_update.md) - Update a workspace template ## /docs/daytona_template_create.md ## daytona template create Create a workspace template ``` daytona template create [flags] ``` ### Options ``` --builder BuildChoice Specify the builder (currently auto/devcontainer/none) --custom-image string Create the workspace with the custom image passed as the flag value; Requires setting --custom-image-user flag as well --custom-image-user string Create the workspace with the custom image user passed as the flag value; Requires setting --custom-image flag as well --devcontainer-path string Automatically assign the devcontainer builder with the path passed as the flag value --env stringArray Specify environment variables (e.g. --env 'KEY1=VALUE1' --env 'KEY2=VALUE2' ...') --git-provider-config string Specify the Git provider configuration ID or alias --label stringArray Specify labels (e.g. --label 'label.key1=VALUE1' --label 'label.key2=VALUE2' ...) --manual Manually enter the Git repository --name string Specify the workspace template name ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_delete.md ## daytona template delete Delete a workspace template ``` daytona template delete [flags] ``` ### Options ``` -a, --all Delete all workspace templates -f, --force Force delete prebuild -y, --yes Confirm deletion without prompt ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_export.md ## daytona template export Export a workspace template ``` daytona template export [flags] ``` ### Options ``` -a, --all Export all workspace templates -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_import.md ## daytona template import Import a workspace template from a JSON object ``` daytona template import [flags] ``` ### Options ``` -f, --file string Import workspace template from a JSON file. Use '-' to read from stdin. ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_info.md ## daytona template info Show workspace template info ``` daytona template info [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_list.md ## daytona template list Lists workspace templates ``` daytona template list [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_set-default.md ## daytona template set-default Set workspace template info ``` daytona template set-default [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_template_update.md ## daytona template update Update a workspace template ``` daytona template update [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona template](daytona_template.md) - Manage workspace templates ## /docs/daytona_update.md ## daytona update Update Daytona CLI ### Synopsis Update Daytona CLI to the latest version ``` daytona update [flags] ``` ### Options ``` -v, --version string Version to update to ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_use.md ## daytona use Use profile [PROFILE_NAME] ``` daytona use [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_version.md ## daytona version Print the version number ``` daytona version [flags] ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /docs/daytona_whoami.md ## daytona whoami Display information about the active user ``` daytona whoami [flags] ``` ### Options ``` -f, --format string Output format. Must be one of (yaml, json) ``` ### Options inherited from parent commands ``` --help help for daytona ``` ### SEE ALSO * [daytona](daytona.md) - Daytona is a Dev Environment Manager ## /go.mod ```mod path="/go.mod" module github.com/daytonaio/daytona go 1.23.0 // v0.5.0 breaks tailscale-connected docker clients so we need to pin it to v0.4.0 replace github.com/docker/go-connections => github.com/docker/go-connections v0.4.0 // samber/lo v1.47.0 - required by headscale breaks frp replace github.com/samber/lo => github.com/samber/lo v1.39.0 require ( code.gitea.io/sdk/gitea v0.17.1 gitee.com/openeuler/go-gitee v0.0.0-20220530104019-3af895bc380c github.com/UserExistsError/conpty v0.1.4 github.com/antihax/optional v1.0.0 github.com/aws/aws-sdk-go-v2/config v1.27.26 github.com/aws/aws-sdk-go-v2/service/iam v1.34.3 github.com/charmbracelet/bubbles v0.20.0 github.com/charmbracelet/bubbletea v1.1.0 github.com/charmbracelet/huh v0.6.0 github.com/charmbracelet/lipgloss v0.13.0 github.com/compose-spec/compose-go/v2 v2.4.1 github.com/creack/pty v1.1.23 github.com/docker/docker v27.2.0+incompatible github.com/docker/go-connections v0.5.0 github.com/fatedier/frp v0.60.0 github.com/gfleury/go-bitbucket-v1 v0.0.0-20240131155556-0b41d7863037 github.com/gin-contrib/cors v1.6.0 github.com/gin-gonic/gin v1.9.1 github.com/glebarez/sqlite v1.11.0 github.com/gliderlabs/ssh v0.3.8 github.com/go-git/go-git/v5 v5.13.0 github.com/go-playground/validator/v10 v10.19.0 github.com/go-playground/webhooks/v6 v6.4.0 github.com/goccy/go-json v0.10.2 github.com/gogs/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.1 github.com/hashicorp/go-hclog v1.6.3 github.com/hashicorp/go-plugin v1.6.0 github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf github.com/juanfont/headscale v0.23.0 github.com/kardianos/service v1.2.2 github.com/kelseyhightower/envconfig v1.4.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/mitchellh/mapstructure v1.5.0 github.com/opencontainers/image-spec v1.1.0 github.com/pkg/sftp v1.13.6 github.com/posthog/posthog-go v0.0.0-20240327112532-87b23fe11103 github.com/robfig/cron/v3 v3.0.1 github.com/rs/zerolog v1.33.0 github.com/shirou/gopsutil v3.21.11+incompatible github.com/sirupsen/logrus v1.9.3 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/sourcegraph/jsonrpc2 v0.2.0 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.10.0 github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag v1.16.3 golang.org/x/crypto v0.31.0 golang.org/x/mod v0.20.0 golang.org/x/oauth2 v0.22.0 golang.org/x/sync v0.10.0 golang.org/x/term v0.27.0 google.golang.org/grpc v1.66.0 google.golang.org/protobuf v1.34.2 gopkg.in/ini.v1 v1.67.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/gorm v1.25.11 tailscale.com v1.72.1 ) require ( dario.cat/mergo v1.0.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/akutz/memconn v0.1.0 // indirect github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 // indirect github.com/aws/aws-sdk-go-v2 v1.30.4 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.17.26 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1 // indirect github.com/aws/aws-sdk-go-v2/service/ssm v1.45.0 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.22.3 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect github.com/aws/smithy-go v1.20.4 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/bytedance/sonic v1.11.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charmbracelet/x/ansi v0.2.3 // indirect github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect github.com/charmbracelet/x/term v0.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/chenzhuoyu/iasm v0.9.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/coder/websocket v1.8.12 // indirect github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 // indirect github.com/coreos/go-oidc/v3 v3.11.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/creachadair/mds v0.14.5 // indirect github.com/cyphar/filepath-securejoin v0.2.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/dblohm7/wingoes v0.0.0-20240123200102-b75a8a7d7eb0 // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/digitalocean/go-smbios v0.0.0-20180907143718-390a4f403a8e // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/fatedier/golib v0.5.0 // indirect github.com/fatih/color v1.17.0 // indirect github.com/felixge/fgprof v0.9.5 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.6.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gaissmai/bart v0.11.1 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/glebarez/go-sqlite v1.22.0 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.0 // indirect github.com/go-gormigrate/gormigrate/v2 v2.1.2 // indirect github.com/go-jose/go-jose/v4 v4.0.2 // indirect github.com/go-json-experiment/json v0.0.0-20231102232822-2e55bd4e08b0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/spec v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/godbus/dbus/v5 v5.1.1-0.20230522191255-76236955d466 // indirect github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806 // indirect github.com/google/pprof v0.0.0-20240829160300-da1f7e9f2b25 // indirect github.com/gorilla/csrf v1.7.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect github.com/illarion/gonotify v1.0.1 // indirect github.com/insomniacslk/dhcp v0.0.0-20240812123929-b105c29bd1b5 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.6.0 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect github.com/jsimonetti/rtnetlink v1.4.1 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/klauspost/reedsolomon v1.12.0 // indirect github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a // indirect github.com/kr/fs v0.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-shellwords v1.0.12 // indirect github.com/mdlayher/genetlink v1.3.2 // indirect github.com/mdlayher/netlink v1.7.2 // indirect github.com/mdlayher/sdnotify v1.0.0 // indirect github.com/mdlayher/socket v0.5.0 // indirect github.com/miekg/dns v1.1.58 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oklog/run v1.0.0 // indirect github.com/onsi/ginkgo/v2 v2.19.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/philip-bui/grpc-zerolog v1.0.1 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pion/dtls/v2 v2.2.7 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/stun/v2 v2.0.0 // indirect github.com/pion/transport/v2 v2.2.1 // indirect github.com/pion/transport/v3 v3.0.1 // indirect github.com/pires/go-proxyproto v0.7.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/profile v1.7.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus-community/pro-bing v0.4.0 // indirect github.com/prometheus/client_golang v1.20.2 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.58.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect github.com/quic-go/quic-go v0.48.2 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/safchain/ethtool v0.4.0 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/samber/lo v1.47.0 // indirect github.com/sasha-s/go-deadlock v0.3.5 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/viper v1.20.0-alpha.6 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tailscale/certstore v0.1.1-0.20231202035212-d3fa0460f47e // indirect github.com/tailscale/go-winio v0.0.0-20231025203758-c4f33415bf55 // indirect github.com/tailscale/golang-x-crypto v0.0.0-20240604161659-3fde5e568aa4 // indirect github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a // indirect github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85 // indirect github.com/tailscale/peercred v0.0.0-20240214030740-b535050b2aa4 // indirect github.com/tailscale/setec v0.0.0-20240314234648-9da8e7407257 // indirect github.com/tailscale/squibble v0.0.0-20240418235321-9ee0eeb78185 // indirect github.com/tailscale/tailsql v0.0.0-20240418235827-820559f382c1 // indirect github.com/tailscale/web-client-prebuilt v0.0.0-20240226180453-5db17b287bf1 // indirect github.com/tailscale/wireguard-go v0.0.0-20240731203015-71393c576b98 // indirect github.com/tcnksm/go-httpstat v0.2.0 // indirect github.com/templexxx/cpu v0.1.1 // indirect github.com/templexxx/xorsimd v0.4.3 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/tklauser/go-sysconf v0.3.13 // indirect github.com/tklauser/numcpus v0.7.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect github.com/ugorji/go/codec v1.2.12 // indirect github.com/vishvananda/netlink v1.2.1-beta.2 // indirect github.com/vishvananda/netns v0.0.4 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xtaci/kcp-go/v5 v5.6.13 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 // indirect go.opentelemetry.io/otel v1.25.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect go.opentelemetry.io/otel/metric v1.25.0 // indirect go.opentelemetry.io/otel/sdk v1.25.0 // indirect go.opentelemetry.io/otel/trace v1.25.0 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect go4.org/mem v0.0.0-20220726221520-4f986261bf13 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect golang.org/x/arch v0.7.0 // indirect golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect golang.org/x/tools v0.24.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard/windows v0.5.3 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gorm.io/driver/postgres v1.5.9 // indirect gotest.tools/v3 v3.5.1 // indirect gvisor.dev/gvisor v0.0.0-20240722211153-64c016c92987 // indirect k8s.io/apimachinery v0.30.3 // indirect k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect modernc.org/libc v1.60.1 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/sqlite v1.32.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) require ( github.com/atotto/clipboard v0.1.4 github.com/aws/aws-sdk-go v1.54.19 github.com/aws/aws-sdk-go-v2/service/codecommit v1.24.3 github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/catppuccin/go v0.2.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/google/go-github v17.0.0+incompatible github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/ktrysmt/go-bitbucket v0.9.76 github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sahilm/fuzzy v0.1.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/xanzy/go-gitlab v0.97.0 golang.org/x/net v0.33.0 // indirect golang.org/x/sys v0.29.0 golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 // indirect ) ``` The content has been capped at 50000 tokens, and files over NaN bytes have been omitted. The user could consider applying other filters to refine the result. The better and more specific the context, the better the LLM can follow instructions. If the context seems verbose, the user can refine the filter using uithub. Thank you for using https://uithub.com - Perfect LLM context for any GitHub repo.