I'm excited to share a high-level overview of our tech stack and codebase. My main focus will be on the app development, and I will handle the technology aspects towards the end.
We've built Daytona on a robust and efficient tech stack, and I'd love to share how we've done it.
The Core of Daytona: TypeScript and Go
At Daytona, we've built about 90% of our codebase in TypeScript. We were most comfortable with TypeScript when we started, which has served us well. It's a versatile language that has allowed us to build a robust and efficient platform.
However, about 10% of our codebase is written in Go. We primarily use Go for our workspace internals, including our supervisor component and Daytona CLI. We chose Go for these components because of its speed and efficiency, which are crucial for our workspaces.
Our Codebase Structure: A Monorepo Approach
We've structured our repository as a monorepo, with all the code parts of the Daytona platform in a single GitHub repository. This structure has allowed us to optimize our builds, thanks to the integrated caching features of Nx, the framework we use for our monorepo. Nx has significantly increased our developer velocity, making it easier to work on multiple components or a single component while leaving the rest intact.
Off-the-Shelf Products: A Key to Daytona's Development
We've made extensive use of off-the-shelf products in developing Daytona. This approach has made deploying, packaging, and shipping Daytona as a platform easier. It also simplifies feature development, as we can easily find online resources to develop the product and figure out how to combine all the frameworks and libraries into Daytona as a platform.
Open Source Release: Aiming for Transparency
We aim for an open-source release and want to make our codebase publicly available. We've structured the code with this goal, going above and beyond to keep the codebase as clean as possible. We have strict lint rules and development workflows that facilitate clean code and make it easy for collaborators to contribute to the Daytona platform.
Deployments: Helm Charts and Terraform
We handle deployments via Helm charts, which are standard for deploying Kubernetes resources. The Helm charts are integrated into the Daytona repository, allowing anyone who wants to deploy the Daytona platform or validate our security measures to do so easily.
We use Terraform, the widely adopted infrastructure-as-code standard, to deploy infrastructure for Daytona. Having a streamlined way of deploying the platform and infrastructure makes it easier to accommodate the different needs of our B2B customers.
Documentation: An Integral Part of Our Repository
Our documentation is a part of our repository as well. We use Astro as a framework for our documentation, and it's all written in Markdown. This approach makes our documentation open and easy to contribute to, even for non-technical people.
Specific Technologies: Next.js and React
Regarding the specific technologies we use for our platform, the primary framework is Next.js. We chose Next.js because of its robustness and versatility. It's a progressive Node.js framework for building efficient and scalable server-side applications, and it has served us well.
We also use React for the front-end, specifically for our dashboard. React's component-based architecture and its efficiency in updating and rendering components made it an ideal choice for our dashboard.
IDE-Specific Components: Outside the Core Repository
In addition to our core repository, we have a couple of components that are outside of it. These are our IDE-specific components. We develop extensions for IDEs like VS Code and JetBrains IDEs and keep these components separate from our core repository.
These IDE-specific components have unique requirements and considerations, so we've decided to keep them separate from the core Daytona repository. This approach allows us to tailor these components to the specific needs of each IDE, providing a more seamless and efficient experience for our users.
Our tech stack is about 80% TypeScript, 10% Go, and 10% other elements like Markdown, Helm charts, and Terraform deployment scripts. TypeScript has been our driving factor in our technology choices, and we've found Go to be the best fit for our CLI and workspace internals. We're proud of the tech stack we've built and are excited about the future of Daytona.