website/docs/intro.mdx
import FeatureStatus from '@site/src/components/FeatureStatus'; import Label from '@site/src/ui/typography/Label';
moonrepo is a productivity platform that aims to eliminate pain points for both developers and companies, by automating tiresome and complex workflows, and improving the overall developer experience.
We currently achieve this through the following tools and services:
moon is a repository management, organization, orchestration, and notification tool for the web ecosystem, written in Rust. Many of the concepts within moon are heavily inspired from Bazel and other popular build systems, but tailored for our supported languages.
You can think of a moon as a tool that sits firmly in the middle between Bazel (high complexity, full structure), and make/just/etc scripts (low complexity, no structure).
Working in a language's ecosystem can be very involved, especially when it comes to managing a repository effectively. Which language version to use? Which dependency manager to use? How to use packages? Or how to build packages? So on and so forth. moon aims to streamline this entire process and provide a first-class developer experience.
package.json scripts) can become unwieldy,
very quickly. No more duplicating the same task into every project, or reverse-engineering which
root scripts to use. With moon, all you need to know is the project name, and a task name.node_modules), or
sync project dependencies, or even
sync TypeScript project references.moon's long-term vision is to robustly support multiple programming languages (and dependency managers) so that a repository composed of projects with differing languages and tools can all work in unison. This is a lofty vision that requires a massive amount of time and resources to achieve, and as such, is not available on initial release, but will gradually be supported over time.
To help achieve this vision, language support is broken down into 4 tiers, allowing us to incrementally integrate and improve them over time. The 4 tiers are as follows:
moon.*, and have a
dedicated Rust crate for metadata..moon/toolchains.*,
and will automatically be downloaded and installed.| Tier 0 | Tier 1 | Tier 2 | Tier 3 | |
|---|---|---|---|---|
| Bash/Batch | 🟢 | 🟢 | ||
| Bun (JavaScript, TypeScript) | 🟢 | 🟢 | 🟢 | 🟢 |
| Deno (JavaScript, TypeScript) | 🟢 | 🟢 | 🟢 | 🟢 |
| Go | 🟢 | 🟢 | 🟢 | 🟢 |
| Node (JavaScript, TypeScript) | 🟢 | 🟢 | 🟢 | 🟢 |
| └─ npm, pnpm, yarn | 🟢 | ⚪️ | 🟢 | 🟢 |
| PHP | 🟢 | 🟢 | ||
| └─ Composer | 🟢 | ⚪️ | ||
| Python | 🟢 | 🟢 | 🟣 | 🟣 |
| └─ Pip | 🟢 | ⚪️ | 🟣 | |
| Ruby | 🟢 | 🟢 | ||
| └─ Gems, Bundler | 🟢 | ⚪️ | ||
| Rust | 🟢 | 🟢 | 🟢 | 🟢 |
| └─ Cargo | 🟢 | ⚪️ | 🟢 | 🟢 |
| Other (Kotlin, Java, C#, ...) | 🟢 |
Because moon is written in Rust, we only support targets that are explicitly compiled for, which are currently:
| Operating system | Architecture | Target |
|---|---|---|
| macOS 64-bit | Intel | x86_64-apple-darwin |
| macOS 64-bit | ARM | aarch64-apple-darwin |
| Linux 64-bit | Intel GNU | x86_64-unknown-linux-gnu |
| Linux 64-bit | Intel musl | x86_64-unknown-linux-musl |
| Linux 64-bit | ARM GNU | aarch64-unknown-linux-gnu |
| Linux 64-bit | ARM musl | aarch64-unknown-linux-musl |
| Windows 64-bit | Intel | x86_64-pc-windows-msvc |
proto is a version manager for your favorite programming languages. View proto documentation.