Skip to content

tuist/plasma

Repository files navigation

Plasma

Plasma aims to simplify the orchestration of containerized environments—ideal for use cases like hosted runners on Git forges such as GitHub, GitLab, or Forgejo. It can scale and provision environments either manually or automatically, using strategies tailored to your CI workloads and demands.

Motivation

While building features for Tuist, we realized the need for a fast and cost-effective way to spin up macOS and Linux containers. Unfortunately, this kind of innovation has historically been locked away behind traditional CI providers, who’ve treated it as part of their competitive moat.

We believe this space should be commoditized. Lowering the time and cost of remote execution unlocks better developer experiences—faster feedback loops, cheaper experimentation, and greater flexibility.

Plasma is our step toward making that a reality.

Warning

The project is currently being worked on.

Instances

You can use the instance hosted by Tuist at plasma.dev with any of the two following methods:

  • Bring-your-infra: Plug your own infrastructure into Plasma using your infrastructure keys (e.g. AWS).
  • Use-our-infra: Use our infrastructure and pay a tax over our infrastructure cost.

If you are already a Tuist user, you can create containers from your account.

your.own

You can self-host Plasma following our docs, or do a one-click deployment to Render:

Deploy to Render

Development

Setup

  1. Git clone the repo: [email protected]:tuist/agent.git.
  2. Install dependencies with mise install.

Monorepo

The repository is a monorepo with the following projects:

  • agent: It's a portable Elixir application that runs in the host.
  • app: It's an Elixir library (to integrate with another app) along with a Phoenix application to host the web interface.
  • docs: It's a documentation static website available at docs.plasma.dev.

Releasing

The project follows semantic versioning releasing new versions automatically when releasable changes are detected in main. A release is represented by a release on GitHub, which includes portable binaries for the agents, and an OCI-compliant image to run the web app as a container, for example using Podman or Docker.

Documentation

The documentation is available at docs.plasma.dev.