diff --git a/404.html b/404.html index 22cc696da2e..083b5652bab 100644 --- a/404.html +++ b/404.html @@ -13,8 +13,8 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/api.html b/api.html index d2b9ecfb7f9..40355b30585 100644 --- a/api.html +++ b/api.html @@ -13,8 +13,8 @@ - - + +
Skip to main content
diff --git a/api/report.html b/api/report.html index 32014b9130b..251816ff9f7 100644 --- a/api/report.html +++ b/api/report.html @@ -13,8 +13,8 @@ - - + +
Skip to main content

@moonrepo/report

build status diff --git a/api/report/function/formatDuration.html b/api/report/function/formatDuration.html index 0b04cc0dfa5..3bf4bb359d3 100644 --- a/api/report/function/formatDuration.html +++ b/api/report/function/formatDuration.html @@ -13,8 +13,8 @@ - - + +

diff --git a/api/report/function/formatTime.html b/api/report/function/formatTime.html index 6325dbe0456..b8a61530e0f 100644 --- a/api/report/function/formatTime.html +++ b/api/report/function/formatTime.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/getDurationInMillis.html b/api/report/function/getDurationInMillis.html index 34b38599f8c..ae58ce043f8 100644 --- a/api/report/function/getDurationInMillis.html +++ b/api/report/function/getDurationInMillis.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/getIconForStatus.html b/api/report/function/getIconForStatus.html index caaf9a48249..4267391d031 100644 --- a/api/report/function/getIconForStatus.html +++ b/api/report/function/getIconForStatus.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/hasFailed.html b/api/report/function/hasFailed.html index ba0b7de4b6d..e11f51fa246 100644 --- a/api/report/function/hasFailed.html +++ b/api/report/function/hasFailed.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/hasPassed.html b/api/report/function/hasPassed.html index 02945c04956..ed4c281407e 100644 --- a/api/report/function/hasPassed.html +++ b/api/report/function/hasPassed.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/isFlaky.html b/api/report/function/isFlaky.html index 3007337c57d..bc946941042 100644 --- a/api/report/function/isFlaky.html +++ b/api/report/function/isFlaky.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/isSlow.html b/api/report/function/isSlow.html index c08734d5867..1568d825003 100644 --- a/api/report/function/isSlow.html +++ b/api/report/function/isSlow.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/prepareReportActions.html b/api/report/function/prepareReportActions.html index 8b3323bf329..736e976155d 100644 --- a/api/report/function/prepareReportActions.html +++ b/api/report/function/prepareReportActions.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/function/sortReport.html b/api/report/function/sortReport.html index 06cb0a367f9..df4f1b65e71 100644 --- a/api/report/function/sortReport.html +++ b/api/report/function/sortReport.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/report/interface/PreparedAction.html b/api/report/interface/PreparedAction.html index e4358459601..cee57ad0edc 100644 --- a/api/report/interface/PreparedAction.html +++ b/api/report/interface/PreparedAction.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/runtime.html b/api/runtime.html index dc5ede6096e..a854a3dd739 100644 --- a/api/runtime.html +++ b/api/runtime.html @@ -13,8 +13,8 @@ - - + +

@moonrepo/runtime

diff --git a/api/runtime/function/getContext.html b/api/runtime/function/getContext.html index cd912b389e1..5389c17c370 100644 --- a/api/runtime/function/getContext.html +++ b/api/runtime/function/getContext.html @@ -13,8 +13,8 @@ - - + + diff --git a/api/runtime/interface/RuntimeContext.html b/api/runtime/interface/RuntimeContext.html index 60773f2a9b3..4b1367ec5fb 100644 --- a/api/runtime/interface/RuntimeContext.html +++ b/api/runtime/interface/RuntimeContext.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types.html b/api/types.html index 9d71275eeb1..6c75075076f 100644 --- a/api/types.html +++ b/api/types.html @@ -13,8 +13,8 @@ - - + +

@moonrepo/types

build status diff --git a/api/types/interface/Action.html b/api/types/interface/Action.html index 5911561a64e..edf275ff309 100644 --- a/api/types/interface/Action.html +++ b/api/types/interface/Action.html @@ -13,8 +13,8 @@ - - + +

Action

Index

Properties

optionalallowFailure

allowFailure?: boolean

attempts

attempts: null | Attempt[]

createdAt

createdAt: string

duration

duration: null | Duration

error

error: null | string

finishedAt

finishedAt: null | string

flaky

flaky: boolean

label

label: null | string

nodeIndex

nodeIndex: number

startedAt

startedAt: null | string

status

status: ActionStatus
diff --git a/api/types/interface/ActionContext.html b/api/types/interface/ActionContext.html index f1f602707c7..305b9f1724b 100644 --- a/api/types/interface/ActionContext.html +++ b/api/types/interface/ActionContext.html @@ -13,8 +13,8 @@ - - + +

ActionContext

Index

Properties

affectedOnly

affectedOnly: boolean

initialTargets

initialTargets: string[]

passthroughArgs

passthroughArgs: string[]

primaryTargets

primaryTargets: string[]

profile

profile: null | cpu | heap

targetStates

targetStates: Record<string, TargetState>

touchedFiles

touchedFiles: string[]

workspaceRoot

workspaceRoot: string
diff --git a/api/types/interface/ActionNodeInstallDeps.html b/api/types/interface/ActionNodeInstallDeps.html index e8f6ef6a8ef..3f3ffe49f24 100644 --- a/api/types/interface/ActionNodeInstallDeps.html +++ b/api/types/interface/ActionNodeInstallDeps.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ActionNodeInstallProjectDeps.html b/api/types/interface/ActionNodeInstallProjectDeps.html index df6d26bead4..a594d8fd59b 100644 --- a/api/types/interface/ActionNodeInstallProjectDeps.html +++ b/api/types/interface/ActionNodeInstallProjectDeps.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ActionNodeRunTask.html b/api/types/interface/ActionNodeRunTask.html index 4efe2b34661..2c85e584d65 100644 --- a/api/types/interface/ActionNodeRunTask.html +++ b/api/types/interface/ActionNodeRunTask.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ActionNodeSetupTool.html b/api/types/interface/ActionNodeSetupTool.html index ea27810249e..f56d408a386 100644 --- a/api/types/interface/ActionNodeSetupTool.html +++ b/api/types/interface/ActionNodeSetupTool.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ActionNodeSyncProject.html b/api/types/interface/ActionNodeSyncProject.html index 4e80e25048a..0be5c46cc5d 100644 --- a/api/types/interface/ActionNodeSyncProject.html +++ b/api/types/interface/ActionNodeSyncProject.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ActionNodeSyncWorkspace.html b/api/types/interface/ActionNodeSyncWorkspace.html index 9df1b37743f..bcedc9fbfec 100644 --- a/api/types/interface/ActionNodeSyncWorkspace.html +++ b/api/types/interface/ActionNodeSyncWorkspace.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/Attempt.html b/api/types/interface/Attempt.html index c38296151b5..7f9b8f42b0c 100644 --- a/api/types/interface/Attempt.html +++ b/api/types/interface/Attempt.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/BinConfig.html b/api/types/interface/BinConfig.html index b5133ea81ad..11fea4eb01d 100644 --- a/api/types/interface/BinConfig.html +++ b/api/types/interface/BinConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/BunConfig.html b/api/types/interface/BunConfig.html index 3ac9c73e593..3e32d368c2b 100644 --- a/api/types/interface/BunConfig.html +++ b/api/types/interface/BunConfig.html @@ -13,8 +13,8 @@ - - + +

BunConfig

Index

Properties

dependencyVersionFormat

dependencyVersionFormat: NodeVersionFormat

plugin

plugin: null | string

rootPackageOnly

rootPackageOnly: boolean

syncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies: boolean = ```ts diff --git a/api/types/interface/BunpmConfig.html b/api/types/interface/BunpmConfig.html index 69774318b61..f17ceb10669 100644 --- a/api/types/interface/BunpmConfig.html +++ b/api/types/interface/BunpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/CodeownersConfig.html b/api/types/interface/CodeownersConfig.html index 2ad54d7ceea..46f70a9229e 100644 --- a/api/types/interface/CodeownersConfig.html +++ b/api/types/interface/CodeownersConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ConstraintsConfig.html b/api/types/interface/ConstraintsConfig.html index e139c9e4299..b7f82c98917 100644 --- a/api/types/interface/ConstraintsConfig.html +++ b/api/types/interface/ConstraintsConfig.html @@ -13,8 +13,8 @@ - - + +

ConstraintsConfig

Index

Properties

enforceProjectTypeRelationships

enforceProjectTypeRelationships: boolean = ```ts diff --git a/api/types/interface/DenoConfig.html b/api/types/interface/DenoConfig.html index 338906de8ee..dd14d0f56e6 100644 --- a/api/types/interface/DenoConfig.html +++ b/api/types/interface/DenoConfig.html @@ -13,8 +13,8 @@ - - + +

DenoConfig

Index

Properties

bins

bins: BinEntry[]

depsFile

depsFile: string = ```ts diff --git a/api/types/interface/DependencyConfig.html b/api/types/interface/DependencyConfig.html index ce0e10a25f4..b8d06b2f3e9 100644 --- a/api/types/interface/DependencyConfig.html +++ b/api/types/interface/DependencyConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/Duration.html b/api/types/interface/Duration.html index d3abe752ae8..35fc6b6bb70 100644 --- a/api/types/interface/Duration.html +++ b/api/types/interface/Duration.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventActionFinished.html b/api/types/interface/EventActionFinished.html index 52353399469..221f39cc7c6 100644 --- a/api/types/interface/EventActionFinished.html +++ b/api/types/interface/EventActionFinished.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventActionStarted.html b/api/types/interface/EventActionStarted.html index d159000a724..a20a78a28f4 100644 --- a/api/types/interface/EventActionStarted.html +++ b/api/types/interface/EventActionStarted.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventDependenciesInstalled.html b/api/types/interface/EventDependenciesInstalled.html index ac6e65b6271..8701042a4ef 100644 --- a/api/types/interface/EventDependenciesInstalled.html +++ b/api/types/interface/EventDependenciesInstalled.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventDependenciesInstalling.html b/api/types/interface/EventDependenciesInstalling.html index 75fc6182469..d9d3715d36f 100644 --- a/api/types/interface/EventDependenciesInstalling.html +++ b/api/types/interface/EventDependenciesInstalling.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventPipelineAborted.html b/api/types/interface/EventPipelineAborted.html index 48b73e8e427..f28805ae086 100644 --- a/api/types/interface/EventPipelineAborted.html +++ b/api/types/interface/EventPipelineAborted.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventPipelineFinished.html b/api/types/interface/EventPipelineFinished.html index e56a5fd08ca..f2808917477 100644 --- a/api/types/interface/EventPipelineFinished.html +++ b/api/types/interface/EventPipelineFinished.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventPipelineStarted.html b/api/types/interface/EventPipelineStarted.html index 68232e16e2f..67a75ca7ee9 100644 --- a/api/types/interface/EventPipelineStarted.html +++ b/api/types/interface/EventPipelineStarted.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventProjectSynced.html b/api/types/interface/EventProjectSynced.html index 964ab95a275..a37056fabbb 100644 --- a/api/types/interface/EventProjectSynced.html +++ b/api/types/interface/EventProjectSynced.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventProjectSyncing.html b/api/types/interface/EventProjectSyncing.html index 13c7c2c6898..d5abf8f51f9 100644 --- a/api/types/interface/EventProjectSyncing.html +++ b/api/types/interface/EventProjectSyncing.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetOutputArchived.html b/api/types/interface/EventTargetOutputArchived.html index 5f697c0a3b4..6dd10937bbd 100644 --- a/api/types/interface/EventTargetOutputArchived.html +++ b/api/types/interface/EventTargetOutputArchived.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetOutputArchiving.html b/api/types/interface/EventTargetOutputArchiving.html index 90c4a8732e9..113206cf6fa 100644 --- a/api/types/interface/EventTargetOutputArchiving.html +++ b/api/types/interface/EventTargetOutputArchiving.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetOutputCacheCheck.html b/api/types/interface/EventTargetOutputCacheCheck.html index ce9b1a59c59..70c3a66502f 100644 --- a/api/types/interface/EventTargetOutputCacheCheck.html +++ b/api/types/interface/EventTargetOutputCacheCheck.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetOutputHydrated.html b/api/types/interface/EventTargetOutputHydrated.html index bea426992f3..6abc2fdbdde 100644 --- a/api/types/interface/EventTargetOutputHydrated.html +++ b/api/types/interface/EventTargetOutputHydrated.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetOutputHydrating.html b/api/types/interface/EventTargetOutputHydrating.html index 679a084bfd6..d20c3995c16 100644 --- a/api/types/interface/EventTargetOutputHydrating.html +++ b/api/types/interface/EventTargetOutputHydrating.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetRan.html b/api/types/interface/EventTargetRan.html index d3088da4ab3..48fbc4b65bb 100644 --- a/api/types/interface/EventTargetRan.html +++ b/api/types/interface/EventTargetRan.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventTargetRunning.html b/api/types/interface/EventTargetRunning.html index 51dd3b2d86e..52aede951e4 100644 --- a/api/types/interface/EventTargetRunning.html +++ b/api/types/interface/EventTargetRunning.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventToolInstalled.html b/api/types/interface/EventToolInstalled.html index 78868176bc2..aa38addf657 100644 --- a/api/types/interface/EventToolInstalled.html +++ b/api/types/interface/EventToolInstalled.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventToolInstalling.html b/api/types/interface/EventToolInstalling.html index 040fdbe54b2..9c92e36af83 100644 --- a/api/types/interface/EventToolInstalling.html +++ b/api/types/interface/EventToolInstalling.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/EventWorkspaceSynced.html b/api/types/interface/EventWorkspaceSynced.html index 08d2eace6bf..3ffbe6fedcf 100644 --- a/api/types/interface/EventWorkspaceSynced.html +++ b/api/types/interface/EventWorkspaceSynced.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ExperimentsConfig.html b/api/types/interface/ExperimentsConfig.html index 8f6b0cd79b8..6faa6550d90 100644 --- a/api/types/interface/ExperimentsConfig.html +++ b/api/types/interface/ExperimentsConfig.html @@ -13,8 +13,8 @@ - - + +

ExperimentsConfig

Index

Properties

interweavedTaskInheritance

interweavedTaskInheritance: boolean = ```ts diff --git a/api/types/interface/FileGroup.html b/api/types/interface/FileGroup.html index c62edba7d58..657bed8a464 100644 --- a/api/types/interface/FileGroup.html +++ b/api/types/interface/FileGroup.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/GeneratorConfig.html b/api/types/interface/GeneratorConfig.html index 1bb596fca61..cb972509f3a 100644 --- a/api/types/interface/GeneratorConfig.html +++ b/api/types/interface/GeneratorConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/HasherConfig.html b/api/types/interface/HasherConfig.html index 27411f4bde1..b79c08e9b08 100644 --- a/api/types/interface/HasherConfig.html +++ b/api/types/interface/HasherConfig.html @@ -13,8 +13,8 @@ - - + +

HasherConfig

Index

Properties

batchSize

batchSize: number = ```ts diff --git a/api/types/interface/InheritedTasksConfig.html b/api/types/interface/InheritedTasksConfig.html index 443430c2f90..990d36bc2cb 100644 --- a/api/types/interface/InheritedTasksConfig.html +++ b/api/types/interface/InheritedTasksConfig.html @@ -13,8 +13,8 @@ - - + +

InheritedTasksConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/NodeConfig.html b/api/types/interface/NodeConfig.html index e5c5230601a..2a4a910f3e9 100644 --- a/api/types/interface/NodeConfig.html +++ b/api/types/interface/NodeConfig.html @@ -13,8 +13,8 @@ - - + +

NodeConfig

Index

Properties

addEnginesConstraint

addEnginesConstraint: boolean = ```ts diff --git a/api/types/interface/NotifierConfig.html b/api/types/interface/NotifierConfig.html index 58a45c70cc3..794d39e1a9d 100644 --- a/api/types/interface/NotifierConfig.html +++ b/api/types/interface/NotifierConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/NpmConfig.html b/api/types/interface/NpmConfig.html index 6b653623b22..c68a67d4d16 100644 --- a/api/types/interface/NpmConfig.html +++ b/api/types/interface/NpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/OwnersConfig.html b/api/types/interface/OwnersConfig.html index 8672c5569af..4c0adfcf60c 100644 --- a/api/types/interface/OwnersConfig.html +++ b/api/types/interface/OwnersConfig.html @@ -13,8 +13,8 @@ - - + +

OwnersConfig

Index

Properties

customGroups

customGroups: Record<string, string[]>

defaultOwner

defaultOwner: null | string

optional

optional: boolean

paths

requiredApprovals

requiredApprovals: number = ```ts diff --git a/api/types/interface/PartialBinConfig.html b/api/types/interface/PartialBinConfig.html index c985fab16ff..d4e9885d046 100644 --- a/api/types/interface/PartialBinConfig.html +++ b/api/types/interface/PartialBinConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialBunConfig.html b/api/types/interface/PartialBunConfig.html index 9717f598709..3a04c9d3ca0 100644 --- a/api/types/interface/PartialBunConfig.html +++ b/api/types/interface/PartialBunConfig.html @@ -13,8 +13,8 @@ - - + +

PartialBunConfig

Index

Properties

optionaldependencyVersionFormat

dependencyVersionFormat?: null | NodeVersionFormat

optionalplugin

plugin?: null | string

optionalrootPackageOnly

rootPackageOnly?: null | boolean

optionalsyncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies?: null | boolean = null | boolean

optionalversion

version?: null | string
diff --git a/api/types/interface/PartialBunpmConfig.html b/api/types/interface/PartialBunpmConfig.html index e0a8be1468b..0ad01743b8a 100644 --- a/api/types/interface/PartialBunpmConfig.html +++ b/api/types/interface/PartialBunpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialCodeownersConfig.html b/api/types/interface/PartialCodeownersConfig.html index 268811740eb..6fd74016557 100644 --- a/api/types/interface/PartialCodeownersConfig.html +++ b/api/types/interface/PartialCodeownersConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialConstraintsConfig.html b/api/types/interface/PartialConstraintsConfig.html index d20bfa3413c..38d2be85b91 100644 --- a/api/types/interface/PartialConstraintsConfig.html +++ b/api/types/interface/PartialConstraintsConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialDenoConfig.html b/api/types/interface/PartialDenoConfig.html index 47cedf42f7c..543488f9453 100644 --- a/api/types/interface/PartialDenoConfig.html +++ b/api/types/interface/PartialDenoConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialDependencyConfig.html b/api/types/interface/PartialDependencyConfig.html index fc6879e6007..2b61acb83b6 100644 --- a/api/types/interface/PartialDependencyConfig.html +++ b/api/types/interface/PartialDependencyConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialExperimentsConfig.html b/api/types/interface/PartialExperimentsConfig.html index 2b9f74c8d99..03c31c67bcd 100644 --- a/api/types/interface/PartialExperimentsConfig.html +++ b/api/types/interface/PartialExperimentsConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialGeneratorConfig.html b/api/types/interface/PartialGeneratorConfig.html index eab115e73b7..b20cee48e29 100644 --- a/api/types/interface/PartialGeneratorConfig.html +++ b/api/types/interface/PartialGeneratorConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialHasherConfig.html b/api/types/interface/PartialHasherConfig.html index 540860d217b..5efdd57756d 100644 --- a/api/types/interface/PartialHasherConfig.html +++ b/api/types/interface/PartialHasherConfig.html @@ -13,8 +13,8 @@ - - + +

PartialHasherConfig

Index

Properties

optionalbatchSize

batchSize?: null | number = null | number

optionalignoreMissingPatterns

ignoreMissingPatterns?: null | string[]

optionalignorePatterns

ignorePatterns?: null | string[]

optionaloptimization

optimization?: null | HasherOptimization

optionalwalkStrategy

walkStrategy?: null | HasherWalkStrategy

optionalwarnOnMissingInputs

warnOnMissingInputs?: null | boolean = null | boolean
diff --git a/api/types/interface/PartialInheritedTasksConfig.html b/api/types/interface/PartialInheritedTasksConfig.html index f0405e8ec73..15dc825af39 100644 --- a/api/types/interface/PartialInheritedTasksConfig.html +++ b/api/types/interface/PartialInheritedTasksConfig.html @@ -13,8 +13,8 @@ - - + +

PartialInheritedTasksConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalextends

extends?: null | string

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionalimplicitDeps

implicitDeps?: null | PartialTaskDependency[]

optionalimplicitInputs

implicitInputs?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>
diff --git a/api/types/interface/PartialNodeConfig.html b/api/types/interface/PartialNodeConfig.html index 9197b6ff1d9..25c34497b99 100644 --- a/api/types/interface/PartialNodeConfig.html +++ b/api/types/interface/PartialNodeConfig.html @@ -13,8 +13,8 @@ - - + +

PartialNodeConfig

Index

Properties

optionaladdEnginesConstraint

addEnginesConstraint?: null | boolean = null | boolean

optionalbinExecArgs

binExecArgs?: null | string[]

optionalbun

bun?: null | PartialBunpmConfig

optionaldedupeOnLockfileChange

dedupeOnLockfileChange?: null | boolean = null | boolean

optionaldependencyVersionFormat

dependencyVersionFormat?: null | NodeVersionFormat

optionalinferTasksFromScripts

inferTasksFromScripts?: null | boolean

optionalnpm

npm?: null | PartialNpmConfig

optionalpackageManager

packageManager?: null | NodePackageManager

optionalplugin

plugin?: null | string

optionalpnpm

pnpm?: null | PartialPnpmConfig

optionalrootPackageOnly

rootPackageOnly?: null | boolean

optionalsyncProjectWorkspaceDependencies

syncProjectWorkspaceDependencies?: null | boolean = null | boolean

optionalsyncVersionManagerConfig

syncVersionManagerConfig?: null | NodeVersionManager

optionalversion

version?: null | string

optionalyarn

yarn?: null | PartialYarnConfig
diff --git a/api/types/interface/PartialNotifierConfig.html b/api/types/interface/PartialNotifierConfig.html index f8b991bc7a6..8b0145a4d60 100644 --- a/api/types/interface/PartialNotifierConfig.html +++ b/api/types/interface/PartialNotifierConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialNpmConfig.html b/api/types/interface/PartialNpmConfig.html index bf8a5e50687..88c94c20e76 100644 --- a/api/types/interface/PartialNpmConfig.html +++ b/api/types/interface/PartialNpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialOwnersConfig.html b/api/types/interface/PartialOwnersConfig.html index ff0bf78e797..f66cc05c4a9 100644 --- a/api/types/interface/PartialOwnersConfig.html +++ b/api/types/interface/PartialOwnersConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialPnpmConfig.html b/api/types/interface/PartialPnpmConfig.html index 18f8d63c65c..c2a991eb335 100644 --- a/api/types/interface/PartialPnpmConfig.html +++ b/api/types/interface/PartialPnpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialProjectConfig.html b/api/types/interface/PartialProjectConfig.html index b5162296474..651826f224d 100644 --- a/api/types/interface/PartialProjectConfig.html +++ b/api/types/interface/PartialProjectConfig.html @@ -13,8 +13,8 @@ - - + +

PartialProjectConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldependsOn

dependsOn?: null | PartialProjectDependsOn[]

optionalenv

env?: null | Record<string, string>

optionalfileGroups

fileGroups?: null | Record<string, string[]>

optionalid

id?: null | string

optionallanguage

language?: null | LanguageType

optionalowners

owners?: null | PartialOwnersConfig

optionalplatform

platform?: null | PlatformType

optionalproject

optionaltags

tags?: null | string[]

optionaltasks

tasks?: null | Record<string, PartialTaskConfig>

optionaltoolchain

optionaltype

type?: null | ProjectType

optionalworkspace

diff --git a/api/types/interface/PartialProjectMetadataConfig.html b/api/types/interface/PartialProjectMetadataConfig.html index 24600bd15bb..660e84ebf33 100644 --- a/api/types/interface/PartialProjectMetadataConfig.html +++ b/api/types/interface/PartialProjectMetadataConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialProjectToolchainCommonToolConfig.html b/api/types/interface/PartialProjectToolchainCommonToolConfig.html index 405a0ae9ec7..08b0bb7665c 100644 --- a/api/types/interface/PartialProjectToolchainCommonToolConfig.html +++ b/api/types/interface/PartialProjectToolchainCommonToolConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialProjectToolchainConfig.html b/api/types/interface/PartialProjectToolchainConfig.html index 21f1a89a281..8f42e4b4f81 100644 --- a/api/types/interface/PartialProjectToolchainConfig.html +++ b/api/types/interface/PartialProjectToolchainConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html index 2bb4da465aa..68b24f88292 100644 --- a/api/types/interface/PartialProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/PartialProjectToolchainTypeScriptConfig.html @@ -13,8 +13,8 @@ - - + +

PartialProjectToolchainTypeScriptConfig

Index

Properties

optionaldisabled

disabled?: null | boolean

optionalincludeProjectReferenceSources

includeProjectReferenceSources?: null | boolean

optionalincludeSharedTypes

includeSharedTypes?: null | boolean

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
diff --git a/api/types/interface/PartialProjectWorkspaceConfig.html b/api/types/interface/PartialProjectWorkspaceConfig.html index e4cbd571ecd..382698c913d 100644 --- a/api/types/interface/PartialProjectWorkspaceConfig.html +++ b/api/types/interface/PartialProjectWorkspaceConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html index 4f1c0afd568..ee910583d59 100644 --- a/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/PartialProjectWorkspaceInheritedTasksConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialRunnerConfig.html b/api/types/interface/PartialRunnerConfig.html index 0f11fccac51..2382ffa061d 100644 --- a/api/types/interface/PartialRunnerConfig.html +++ b/api/types/interface/PartialRunnerConfig.html @@ -13,8 +13,8 @@ - - + +

PartialRunnerConfig

Index

Properties

optionalarchivableTargets

archivableTargets?: null | string[]

optionalcacheLifetime

cacheLifetime?: null | string = null | string

optionalinheritColorsForPipedTasks

inheritColorsForPipedTasks?: null | boolean = null | boolean

optionallogRunningCommand

logRunningCommand?: null | boolean
diff --git a/api/types/interface/PartialRustConfig.html b/api/types/interface/PartialRustConfig.html index 93d4e01b151..2b41e92e7c9 100644 --- a/api/types/interface/PartialRustConfig.html +++ b/api/types/interface/PartialRustConfig.html @@ -13,8 +13,8 @@ - - + +

PartialRustConfig

Index

Properties

optionalbins

bins?: null | PartialBinEntry[]

optionalcomponents

components?: null | string[]

optionalplugin

plugin?: null | string

optionalsyncToolchainConfig

syncToolchainConfig?: null | boolean

optionaltargets

targets?: null | string[]

optionalversion

version?: null | string
diff --git a/api/types/interface/PartialTaskConfig.html b/api/types/interface/PartialTaskConfig.html index 3fbc6f43142..8dab8012218 100644 --- a/api/types/interface/PartialTaskConfig.html +++ b/api/types/interface/PartialTaskConfig.html @@ -13,8 +13,8 @@ - - + +

PartialTaskConfig

Index

Properties

optionalargs

optionalcommand

command?: PartialTaskArgs

optionaldeps

deps?: null | PartialTaskDependency[]

optionalenv

env?: null | Record<string, string>

optionalextends

extends?: null | string

optionalinputs

inputs?: null | string[]

optionallocal

local?: null | boolean

optionaloptions

options?: null | PartialTaskOptionsConfig

optionaloutputs

outputs?: null | string[]

optionalplatform

platform?: null | PlatformType

optionaltype

type?: null | TaskType
diff --git a/api/types/interface/PartialTaskDependencyConfig.html b/api/types/interface/PartialTaskDependencyConfig.html index 20a72980227..c847d594714 100644 --- a/api/types/interface/PartialTaskDependencyConfig.html +++ b/api/types/interface/PartialTaskDependencyConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTaskOptionsConfig.html b/api/types/interface/PartialTaskOptionsConfig.html index 24ff3e70acf..264afa69efb 100644 --- a/api/types/interface/PartialTaskOptionsConfig.html +++ b/api/types/interface/PartialTaskOptionsConfig.html @@ -13,8 +13,8 @@ - - + +

PartialTaskOptionsConfig

Index

Properties

optionalaffectedFiles

affectedFiles?: null | TaskOptionAffectedFiles

optionalallowFailure

allowFailure?: null | boolean

optionalcache

cache?: null | boolean

optionalenvFile

envFile?: null | TaskOptionEnvFile

optionalinteractive

interactive?: null | boolean

optionalmergeArgs

mergeArgs?: null | TaskMergeStrategy

optionalmergeDeps

mergeDeps?: null | TaskMergeStrategy

optionalmergeEnv

mergeEnv?: null | TaskMergeStrategy

optionalmergeInputs

mergeInputs?: null | TaskMergeStrategy

optionalmergeOutputs

mergeOutputs?: null | TaskMergeStrategy

optionaloutputStyle

outputStyle?: null | TaskOutputStyle

optionalpersistent

persistent?: null | boolean

optionalretryCount

retryCount?: null | number

optionalrunDepsInParallel

runDepsInParallel?: null | boolean

optionalrunFromWorkspaceRoot

runFromWorkspaceRoot?: null | boolean

optionalrunInCI

runInCI?: null | boolean

optionalshell

shell?: null | boolean
diff --git a/api/types/interface/PartialTemplateConfig.html b/api/types/interface/PartialTemplateConfig.html index 8bebd2fd8ea..43d497d1e35 100644 --- a/api/types/interface/PartialTemplateConfig.html +++ b/api/types/interface/PartialTemplateConfig.html @@ -13,8 +13,8 @@ - - + +

PartialTemplateConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionaldescription

description?: null | string

optionaldestination

destination?: null | string

optionalextends

extends?: null | string[]

optionaltitle

title?: null | string

optionalvariables

variables?: null | Record<string, PartialTemplateVariable>
diff --git a/api/types/interface/PartialTemplateFrontmatterConfig.html b/api/types/interface/PartialTemplateFrontmatterConfig.html index bae17d1766a..dd148e6a2bc 100644 --- a/api/types/interface/PartialTemplateFrontmatterConfig.html +++ b/api/types/interface/PartialTemplateFrontmatterConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTemplateVariableBoolSetting.html b/api/types/interface/PartialTemplateVariableBoolSetting.html index cef0e7acd22..1ee9ba555c0 100644 --- a/api/types/interface/PartialTemplateVariableBoolSetting.html +++ b/api/types/interface/PartialTemplateVariableBoolSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTemplateVariableEnumSetting.html b/api/types/interface/PartialTemplateVariableEnumSetting.html index 4c78fe1e037..18d0ba8b726 100644 --- a/api/types/interface/PartialTemplateVariableEnumSetting.html +++ b/api/types/interface/PartialTemplateVariableEnumSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTemplateVariableEnumValueConfig.html b/api/types/interface/PartialTemplateVariableEnumValueConfig.html index b5d79d31bd0..3e7bc67b3bc 100644 --- a/api/types/interface/PartialTemplateVariableEnumValueConfig.html +++ b/api/types/interface/PartialTemplateVariableEnumValueConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTemplateVariableNumberSetting.html b/api/types/interface/PartialTemplateVariableNumberSetting.html index 52bf95377a4..daf0762c506 100644 --- a/api/types/interface/PartialTemplateVariableNumberSetting.html +++ b/api/types/interface/PartialTemplateVariableNumberSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialTemplateVariableStringSetting.html b/api/types/interface/PartialTemplateVariableStringSetting.html index e495dc06725..613806415ca 100644 --- a/api/types/interface/PartialTemplateVariableStringSetting.html +++ b/api/types/interface/PartialTemplateVariableStringSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialToolchainConfig.html b/api/types/interface/PartialToolchainConfig.html index 03b3bc4acc2..bd2dfd440ca 100644 --- a/api/types/interface/PartialToolchainConfig.html +++ b/api/types/interface/PartialToolchainConfig.html @@ -13,8 +13,8 @@ - - + +

PartialToolchainConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalbun

bun?: null | PartialBunConfig

optionaldeno

deno?: null | PartialDenoConfig

optionalextends

extends?: null | string

optionalnode

node?: null | PartialNodeConfig

optionalrust

rust?: null | PartialRustConfig

optionaltypescript

typescript?: null | PartialTypeScriptConfig
diff --git a/api/types/interface/PartialTypeScriptConfig.html b/api/types/interface/PartialTypeScriptConfig.html index 3ef3c2ae980..8aeddeb2b08 100644 --- a/api/types/interface/PartialTypeScriptConfig.html +++ b/api/types/interface/PartialTypeScriptConfig.html @@ -13,8 +13,8 @@ - - + +

PartialTypeScriptConfig

Index

Properties

optionalcreateMissingConfig

createMissingConfig?: null | boolean = null | boolean

optionalincludeProjectReferenceSources

includeProjectReferenceSources?: null | boolean

optionalincludeSharedTypes

includeSharedTypes?: null | boolean

optionalprojectConfigFileName

projectConfigFileName?: null | string = null | string

optionalroot

root?: null | string = null | string

optionalrootConfigFileName

rootConfigFileName?: null | string = null | string

optionalrootOptionsConfigFileName

rootOptionsConfigFileName?: null | string = null | string

optionalrouteOutDirToCache

routeOutDirToCache?: null | boolean

optionalsyncProjectReferences

syncProjectReferences?: null | boolean = null | boolean

optionalsyncProjectReferencesToPaths

syncProjectReferencesToPaths?: null | boolean
diff --git a/api/types/interface/PartialVcsConfig.html b/api/types/interface/PartialVcsConfig.html index 326f87b99c1..f4e57e2b6fa 100644 --- a/api/types/interface/PartialVcsConfig.html +++ b/api/types/interface/PartialVcsConfig.html @@ -13,8 +13,8 @@ - - + +

PartialVcsConfig

Index

Properties

optionaldefaultBranch

defaultBranch?: null | string = null | string

optionalhooks

hooks?: null | Record<string, string[]>

optionalmanager

manager?: null | git

optionalprovider

provider?: null | VcsProvider

optionalremoteCandidates

remoteCandidates?: null | string[]

optionalsyncHooks

syncHooks?: null | boolean
diff --git a/api/types/interface/PartialWorkspaceConfig.html b/api/types/interface/PartialWorkspaceConfig.html index d66b7376491..3e62a31b069 100644 --- a/api/types/interface/PartialWorkspaceConfig.html +++ b/api/types/interface/PartialWorkspaceConfig.html @@ -13,8 +13,8 @@ - - + +

PartialWorkspaceConfig

Index

Properties

optional$schema

$schema?: null | string = null | string

optionalcodeowners

codeowners?: null | PartialCodeownersConfig

optionalconstraints

constraints?: null | PartialConstraintsConfig

optionalexperiments

experiments?: null | PartialExperimentsConfig

optionalextends

extends?: null | string

optionalgenerator

generator?: null | PartialGeneratorConfig

optionalhasher

hasher?: null | PartialHasherConfig

optionalnotifier

notifier?: null | PartialNotifierConfig

optionalprojects

projects?: null | PartialWorkspaceProjects

optionalrunner

runner?: null | PartialRunnerConfig

optionaltelemetry

telemetry?: null | boolean = null | boolean

optionalvcs

vcs?: null | PartialVcsConfig

optionalversionConstraint

versionConstraint?: null | string
diff --git a/api/types/interface/PartialWorkspaceProjectsConfig.html b/api/types/interface/PartialWorkspaceProjectsConfig.html index 0b37dd1cfba..faf9412afbc 100644 --- a/api/types/interface/PartialWorkspaceProjectsConfig.html +++ b/api/types/interface/PartialWorkspaceProjectsConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PartialYarnConfig.html b/api/types/interface/PartialYarnConfig.html index cf4b1314b62..3e7403d119f 100644 --- a/api/types/interface/PartialYarnConfig.html +++ b/api/types/interface/PartialYarnConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/PnpmConfig.html b/api/types/interface/PnpmConfig.html index 5bbac8a69d6..e755f1d884e 100644 --- a/api/types/interface/PnpmConfig.html +++ b/api/types/interface/PnpmConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/Project.html b/api/types/interface/Project.html index 59ba8b177ff..0600faf3ce5 100644 --- a/api/types/interface/Project.html +++ b/api/types/interface/Project.html @@ -13,8 +13,8 @@ - - + +

Project

Index

Properties

alias

alias: null | string

config

dependencies

dependencies: Record<string, DependencyConfig>

fileGroups

fileGroups: Record<string, FileGroup>

id

id: string

inherited

inherited: { config: InheritedTasksConfig; layers: Record<string, PartialInheritedTasksConfig>; order: string[] }

language

language: LanguageType

platform

platform: PlatformType

root

root: string

source

source: string

tasks

tasks: Record<string, Task>

type

diff --git a/api/types/interface/ProjectConfig.html b/api/types/interface/ProjectConfig.html index 23753a7b98e..54fefd7d676 100644 --- a/api/types/interface/ProjectConfig.html +++ b/api/types/interface/ProjectConfig.html @@ -13,8 +13,8 @@ - - + +

ProjectConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/ProjectMetadataConfig.html b/api/types/interface/ProjectMetadataConfig.html index f754d455e2c..8b6e0a14b10 100644 --- a/api/types/interface/ProjectMetadataConfig.html +++ b/api/types/interface/ProjectMetadataConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ProjectToolchainCommonToolConfig.html b/api/types/interface/ProjectToolchainCommonToolConfig.html index 41e22965e2c..365d7d97253 100644 --- a/api/types/interface/ProjectToolchainCommonToolConfig.html +++ b/api/types/interface/ProjectToolchainCommonToolConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ProjectToolchainConfig.html b/api/types/interface/ProjectToolchainConfig.html index b87c233b18d..5c4c0d62725 100644 --- a/api/types/interface/ProjectToolchainConfig.html +++ b/api/types/interface/ProjectToolchainConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ProjectToolchainTypeScriptConfig.html b/api/types/interface/ProjectToolchainTypeScriptConfig.html index ea0736fedf0..9f9de308980 100644 --- a/api/types/interface/ProjectToolchainTypeScriptConfig.html +++ b/api/types/interface/ProjectToolchainTypeScriptConfig.html @@ -13,8 +13,8 @@ - - + +

ProjectToolchainTypeScriptConfig

Index

Properties

disabled

disabled: boolean

includeProjectReferenceSources

includeProjectReferenceSources: null | boolean

includeSharedTypes

includeSharedTypes: null | boolean

routeOutDirToCache

routeOutDirToCache: null | boolean

syncProjectReferences

syncProjectReferences: null | boolean

syncProjectReferencesToPaths

syncProjectReferencesToPaths: null | boolean
diff --git a/api/types/interface/ProjectWorkspaceConfig.html b/api/types/interface/ProjectWorkspaceConfig.html index a8b0ddb7ef5..7e894b7f600 100644 --- a/api/types/interface/ProjectWorkspaceConfig.html +++ b/api/types/interface/ProjectWorkspaceConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html index a516884c23e..8fc4c6ccdb1 100644 --- a/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html +++ b/api/types/interface/ProjectWorkspaceInheritedTasksConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ProviderEnvironment.html b/api/types/interface/ProviderEnvironment.html index 7b71a29c899..e10884e6c90 100644 --- a/api/types/interface/ProviderEnvironment.html +++ b/api/types/interface/ProviderEnvironment.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/RunReport.html b/api/types/interface/RunReport.html index 3e2283e1595..0967f2f0084 100644 --- a/api/types/interface/RunReport.html +++ b/api/types/interface/RunReport.html @@ -13,8 +13,8 @@ - - + +

RunReport

Index

Properties

actions

actions: Action[]

comparisonEstimate

comparisonEstimate: { duration: Duration; gain: null | Duration; loss: null | Duration; percent: number; tasks: Record<string, { count: number; total: Duration }> }

context

context: ActionContext

duration

duration: Duration

optionalestimatedSavings

estimatedSavings?: null | Duration

optionalprojectedDuration

projectedDuration?: Duration
diff --git a/api/types/interface/RunnerConfig.html b/api/types/interface/RunnerConfig.html index 95d87cc80fd..35502814675 100644 --- a/api/types/interface/RunnerConfig.html +++ b/api/types/interface/RunnerConfig.html @@ -13,8 +13,8 @@ - - + +

RunnerConfig

Index

Properties

archivableTargets

archivableTargets: string[]

cacheLifetime

cacheLifetime: string = ```ts diff --git a/api/types/interface/Runtime.html b/api/types/interface/Runtime.html index 2158e1d30ed..4eaa2b1f897 100644 --- a/api/types/interface/Runtime.html +++ b/api/types/interface/Runtime.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/RustConfig.html b/api/types/interface/RustConfig.html index 6c997889259..f400e7e0596 100644 --- a/api/types/interface/RustConfig.html +++ b/api/types/interface/RustConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TargetState.html b/api/types/interface/TargetState.html index 68e71d85272..d68ba580720 100644 --- a/api/types/interface/TargetState.html +++ b/api/types/interface/TargetState.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/Task.html b/api/types/interface/Task.html index 2f0ea9b4fd2..7dd727b1815 100644 --- a/api/types/interface/Task.html +++ b/api/types/interface/Task.html @@ -13,8 +13,8 @@ - - + +

Task

Index

Properties

args

args: string[]

command

command: string

deps

deps: string[]

env

env: Record<string, string>

id

id: string

inputFiles

inputFiles: string[]

inputGlobs

inputGlobs: string[]

inputVars

inputVars: string[]

inputs

inputs: string[]

options

options: TaskOptions

outputFiles

outputFiles: string[]

outputGlobs

outputGlobs: string[]

outputs

outputs: string[]

platform

platform: PlatformType

target

target: string

type

type: TaskType
diff --git a/api/types/interface/TaskConfig.html b/api/types/interface/TaskConfig.html index 9ddc54005c1..96e11d99681 100644 --- a/api/types/interface/TaskConfig.html +++ b/api/types/interface/TaskConfig.html @@ -13,8 +13,8 @@ - - + +

TaskConfig

Index

Properties

args

args: TaskArgs

command

command: TaskArgs

deps

env

env: Record<string, string>

extends

extends: null | string

inputs

inputs: null | string[]

local

local: null | boolean

options

outputs

outputs: null | string[]

platform

platform: PlatformType

type

type: null | TaskType
diff --git a/api/types/interface/TaskDependencyConfig.html b/api/types/interface/TaskDependencyConfig.html index 4c694440563..6a16b53b56d 100644 --- a/api/types/interface/TaskDependencyConfig.html +++ b/api/types/interface/TaskDependencyConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TaskOptions.html b/api/types/interface/TaskOptions.html index cc6a31718ea..4290a34cec6 100644 --- a/api/types/interface/TaskOptions.html +++ b/api/types/interface/TaskOptions.html @@ -13,8 +13,8 @@ - - + +

TaskOptions

Index

Properties

affectedFiles

affectedFiles: boolean | args | env

cache

cache: boolean

envFile

envFile: null | string

mergeArgs

mergeDeps

mergeEnv

mergeInputs

mergeInputs: TaskMergeStrategy

mergeOutputs

mergeOutputs: TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: boolean

retryCount

retryCount: number

runDepsInParallel

runDepsInParallel: boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: boolean

runInCI

runInCI: boolean

shell

shell: boolean
diff --git a/api/types/interface/TaskOptionsConfig.html b/api/types/interface/TaskOptionsConfig.html index 46e89cc4c56..36b43a97e91 100644 --- a/api/types/interface/TaskOptionsConfig.html +++ b/api/types/interface/TaskOptionsConfig.html @@ -13,8 +13,8 @@ - - + +

TaskOptionsConfig

Index

Properties

affectedFiles

affectedFiles: null | TaskOptionAffectedFiles

allowFailure

allowFailure: null | boolean

cache

cache: null | boolean

envFile

envFile: null | TaskOptionEnvFile

interactive

interactive: null | boolean

mergeArgs

mergeArgs: null | TaskMergeStrategy

mergeDeps

mergeDeps: null | TaskMergeStrategy

mergeEnv

mergeEnv: null | TaskMergeStrategy

mergeInputs

mergeInputs: null | TaskMergeStrategy

mergeOutputs

mergeOutputs: null | TaskMergeStrategy

outputStyle

outputStyle: null | TaskOutputStyle

persistent

persistent: null | boolean

retryCount

retryCount: null | number

runDepsInParallel

runDepsInParallel: null | boolean

runFromWorkspaceRoot

runFromWorkspaceRoot: null | boolean

runInCI

runInCI: null | boolean

shell

shell: null | boolean
diff --git a/api/types/interface/TemplateConfig.html b/api/types/interface/TemplateConfig.html index 708b18ce692..2e434d151c8 100644 --- a/api/types/interface/TemplateConfig.html +++ b/api/types/interface/TemplateConfig.html @@ -13,8 +13,8 @@ - - + +

TemplateConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/TemplateFrontmatterConfig.html b/api/types/interface/TemplateFrontmatterConfig.html index 980d9a46f17..1b1471ebf19 100644 --- a/api/types/interface/TemplateFrontmatterConfig.html +++ b/api/types/interface/TemplateFrontmatterConfig.html @@ -13,8 +13,8 @@ - - + +

TemplateFrontmatterConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/TemplateVariableBoolSetting.html b/api/types/interface/TemplateVariableBoolSetting.html index e37eaa444ab..1e3e210262d 100644 --- a/api/types/interface/TemplateVariableBoolSetting.html +++ b/api/types/interface/TemplateVariableBoolSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TemplateVariableEnumSetting.html b/api/types/interface/TemplateVariableEnumSetting.html index c2c4fa56666..84e64748cd8 100644 --- a/api/types/interface/TemplateVariableEnumSetting.html +++ b/api/types/interface/TemplateVariableEnumSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TemplateVariableEnumValueConfig.html b/api/types/interface/TemplateVariableEnumValueConfig.html index c8389a4e650..64208b8ac5a 100644 --- a/api/types/interface/TemplateVariableEnumValueConfig.html +++ b/api/types/interface/TemplateVariableEnumValueConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TemplateVariableNumberSetting.html b/api/types/interface/TemplateVariableNumberSetting.html index e5b3f4dc3c9..f1ea7d82be3 100644 --- a/api/types/interface/TemplateVariableNumberSetting.html +++ b/api/types/interface/TemplateVariableNumberSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/TemplateVariableStringSetting.html b/api/types/interface/TemplateVariableStringSetting.html index 3901906f349..e5816fe8c8f 100644 --- a/api/types/interface/TemplateVariableStringSetting.html +++ b/api/types/interface/TemplateVariableStringSetting.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/ToolchainConfig.html b/api/types/interface/ToolchainConfig.html index 8ead8329122..9cc4f70dbff 100644 --- a/api/types/interface/ToolchainConfig.html +++ b/api/types/interface/ToolchainConfig.html @@ -13,8 +13,8 @@ - - + +

ToolchainConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/TypeScriptConfig.html b/api/types/interface/TypeScriptConfig.html index d15d71c10c3..c1d96d4c9c0 100644 --- a/api/types/interface/TypeScriptConfig.html +++ b/api/types/interface/TypeScriptConfig.html @@ -13,8 +13,8 @@ - - + +

TypeScriptConfig

Index

Properties

createMissingConfig

createMissingConfig: boolean = ```ts diff --git a/api/types/interface/VcsConfig.html b/api/types/interface/VcsConfig.html index 75570f8454e..9adee55aeb7 100644 --- a/api/types/interface/VcsConfig.html +++ b/api/types/interface/VcsConfig.html @@ -13,8 +13,8 @@ - - + +

VcsConfig

Index

Properties

defaultBranch

defaultBranch: string = ```ts diff --git a/api/types/interface/WebhookPayload.html b/api/types/interface/WebhookPayload.html index ae66153eacb..8f6620e9257 100644 --- a/api/types/interface/WebhookPayload.html +++ b/api/types/interface/WebhookPayload.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/WorkspaceConfig.html b/api/types/interface/WorkspaceConfig.html index 020070bf4ef..5a18f82d0da 100644 --- a/api/types/interface/WorkspaceConfig.html +++ b/api/types/interface/WorkspaceConfig.html @@ -13,8 +13,8 @@ - - + +

WorkspaceConfig

Index

Properties

$schema

$schema: string = ```ts diff --git a/api/types/interface/WorkspaceProjectsConfig.html b/api/types/interface/WorkspaceProjectsConfig.html index 13d1df79de0..7e5e120b144 100644 --- a/api/types/interface/WorkspaceProjectsConfig.html +++ b/api/types/interface/WorkspaceProjectsConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/api/types/interface/YarnConfig.html b/api/types/interface/YarnConfig.html index 7be558a8a7e..9ece3613317 100644 --- a/api/types/interface/YarnConfig.html +++ b/api/types/interface/YarnConfig.html @@ -13,8 +13,8 @@ - - + +
diff --git a/assets/js/0ec8745a.9e384bcf.js b/assets/js/0ec8745a.7462a263.js similarity index 85% rename from assets/js/0ec8745a.9e384bcf.js rename to assets/js/0ec8745a.7462a263.js index 02bc5c02354..d57ef2ae5ed 100644 --- a/assets/js/0ec8745a.9e384bcf.js +++ b/assets/js/0ec8745a.7462a263.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32618],{13745:e=>{e.exports=JSON.parse('{"label":"shell","permalink":"/blog/tags/shell","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32618],{13745:e=>{e.exports=JSON.parse('{"label":"shell","permalink":"/blog/tags/shell","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/11ce4159.1b24de79.js b/assets/js/11ce4159.9e75d097.js similarity index 79% rename from assets/js/11ce4159.1b24de79.js rename to assets/js/11ce4159.9e75d097.js index 9f54e57d752..bec4cd17612 100644 --- a/assets/js/11ce4159.1b24de79.js +++ b/assets/js/11ce4159.9e75d097.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1531],{75034:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/5","page":5,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog/page/4","nextPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1a2b669c.cfd43723.js b/assets/js/1a2b669c.90a8bcf5.js similarity index 80% rename from assets/js/1a2b669c.cfd43723.js rename to assets/js/1a2b669c.90a8bcf5.js index 9153ba1579e..a9515f4c919 100644 --- a/assets/js/1a2b669c.cfd43723.js +++ b/assets/js/1a2b669c.90a8bcf5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":28,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47999],{85824:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":29,"previousPage":"/blog/tags/proto","nextPage":"/blog/tags/proto/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2e94733f.ba6d40e4.js b/assets/js/2e94733f.cf674e7c.js similarity index 75% rename from assets/js/2e94733f.ba6d40e4.js rename to assets/js/2e94733f.cf674e7c.js index f2c20bbd9ab..d4bc059688b 100644 --- a/assets/js/2e94733f.ba6d40e4.js +++ b/assets/js/2e94733f.cf674e7c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50167],{73955:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/bin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50167],{73955:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/bin","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/33f77f6d.9cf75397.js b/assets/js/33f77f6d.9cf75397.js new file mode 100644 index 00000000000..4b77558fa01 --- /dev/null +++ b/assets/js/33f77f6d.9cf75397.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80337],{59528:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/profile","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3db5b877.15bee9f8.js b/assets/js/3db5b877.a3b65535.js similarity index 84% rename from assets/js/3db5b877.15bee9f8.js rename to assets/js/3db5b877.a3b65535.js index 19914160660..7567f9a4e6d 100644 --- a/assets/js/3db5b877.15bee9f8.js +++ b/assets/js/3db5b877.a3b65535.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":28,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10252],{19354:e=>{e.exports=JSON.parse('{"label":"proto","permalink":"/blog/tags/proto","allTagsPath":"/blog/tags","count":29,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/44ac4dbb.4a5bc858.js b/assets/js/44ac4dbb.dc69e1c1.js similarity index 79% rename from assets/js/44ac4dbb.4a5bc858.js rename to assets/js/44ac4dbb.dc69e1c1.js index a1671ec354a..53fc0bb8451 100644 --- a/assets/js/44ac4dbb.4a5bc858.js +++ b/assets/js/44ac4dbb.dc69e1c1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog/page/5","nextPage":"/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77142],{90399:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/6","page":6,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog/page/5","nextPage":"/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/47b3b041.1fc0eb25.js b/assets/js/47b3b041.bb37192d.js similarity index 75% rename from assets/js/47b3b041.1fc0eb25.js rename to assets/js/47b3b041.bb37192d.js index 05e0ddb6dd4..7c3ab94191d 100644 --- a/assets/js/47b3b041.1fc0eb25.js +++ b/assets/js/47b3b041.bb37192d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40824],{55691:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shim","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40824],{55691:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/shim","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4e444002.04d42e90.js b/assets/js/4e444002.04d42e90.js new file mode 100644 index 00000000000..df71510d8f7 --- /dev/null +++ b/assets/js/4e444002.04d42e90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98561],{3552:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/windows","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/52099127.b10cbdb1.js b/assets/js/52099127.c01228d2.js similarity index 77% rename from assets/js/52099127.b10cbdb1.js rename to assets/js/52099127.c01228d2.js index f1b798f3f22..09030a7b2d8 100644 --- a/assets/js/52099127.b10cbdb1.js +++ b/assets/js/52099127.c01228d2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41426],{94708:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/7","page":7,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41426],{94708:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/7","page":7,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5624c486.c1d2f4ea.js b/assets/js/5624c486.c1d2f4ea.js new file mode 100644 index 00000000000..ea809fa3753 --- /dev/null +++ b/assets/js/5624c486.c1d2f4ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9331],{14282:s=>{s.exports=JSON.parse('{"label":"windows","permalink":"/blog/tags/windows","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/5727ee78.56c070ab.js b/assets/js/5727ee78.56c070ab.js new file mode 100644 index 00000000000..ba8be54ca9a --- /dev/null +++ b/assets/js/5727ee78.56c070ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41692],{10403:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var t=o(24246),r=o(71670),s=o(79022);const i={title:"regen"},c=void 0,l={id:"proto/commands/regen",title:"regen",description:"The proto regen command can be used to regenerate all shims in the ~/.proto/shims directory.",source:"@site/docs/proto/commands/regen.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/regen",permalink:"/docs/proto/commands/regen",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/regen.mdx",tags:[],version:"current",frontMatter:{title:"regen"},sidebar:"proto",previous:{title:"pin",permalink:"/docs/proto/commands/pin"},next:{title:"run",permalink:"/docs/proto/commands/run"}},a={},d=[{value:"Options",id:"options",level:2}];function p(e){const n={blockquote:"blockquote",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Z,{version:"0.27.0",header:!0}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto regen"})," command can be used to regenerate all shims in the ",(0,t.jsx)(n.code,{children:"~/.proto/shims"})," directory.\nThis command will also clean the shims directory before regenerating, in an effort to remove\nunexpected or broken shims."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto regen\n"})}),"\n",(0,t.jsxs)(n.p,{children:["By default this will only regenerate shims. If you want to regenerate bins in ",(0,t.jsx)(n.code,{children:"~/.proto/bin"})," as\nwell, pass the ",(0,t.jsx)(n.code,{children:"--bin"})," flag. This will also clean the bins directory before regenerating."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto regen --bin\n"})}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["Only versions pinned in ",(0,t.jsx)(n.code,{children:"~/.proto/.prototools"})," will be linked as bins."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--bin"})," - Also recreate ",(0,t.jsx)(n.code,{children:"~/.proto/bin"})," symlinks."]}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},79022:(e,n,o)=>{o.d(n,{Z:()=>s});var t=o(9619),r=o(24246);function s(e){let{header:n,inline:o,updated:s,version:i}=e;return(0,r.jsx)(t.Z,{text:`v${i}`,variant:s?"success":"info",className:n?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,n,o)=>{o.d(n,{Z:()=>c});var t=o(40624),r=o(31792),s=o(24246);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function c(e){let{className:n,icon:o,text:c,variant:l}=e;return(0,s.jsxs)("span",{className:(0,t.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",l?i[l]:"bg-gray-100 text-gray-800",n),children:[o&&(0,s.jsx)(r.Z,{icon:o,className:"mr-1"}),c]})}},71670:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>i});var t=o(27378);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69e0bfe1.d22e0e3c.js b/assets/js/69e0bfe1.b616a748.js similarity index 79% rename from assets/js/69e0bfe1.d22e0e3c.js rename to assets/js/69e0bfe1.b616a748.js index 78631225892..72e5ec3747c 100644 --- a/assets/js/69e0bfe1.d22e0e3c.js +++ b/assets/js/69e0bfe1.b616a748.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":28,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85029],{30076:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":29,"previousPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7599f4f1.98ad2a58.js b/assets/js/7599f4f1.a1ad28ce.js similarity index 78% rename from assets/js/7599f4f1.98ad2a58.js rename to assets/js/7599f4f1.a1ad28ce.js index 2cb93330c1a..54a21694922 100644 --- a/assets/js/7599f4f1.98ad2a58.js +++ b/assets/js/7599f4f1.a1ad28ce.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":28,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65217],{67049:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/proto","page":1,"postsPerPage":10,"totalPages":3,"totalCount":29,"nextPage":"/blog/tags/proto/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/79765aba.390f99df.js b/assets/js/79765aba.390f99df.js deleted file mode 100644 index 4d02f723885..00000000000 --- a/assets/js/79765aba.390f99df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37440],{25371:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=o(24246),i=o(71670),r=o(79022);const s={title:"pin"},l=void 0,c={id:"proto/commands/pin",title:"pin",description:"The proto pin command will pin a version (or alias) of a tool. By default it will",source:"@site/docs/proto/commands/pin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/pin",permalink:"/docs/proto/commands/pin",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/pin.mdx",tags:[],version:"current",frontMatter:{title:"pin"},sidebar:"proto",previous:{title:"outdated",permalink:"/docs/proto/commands/outdated"},next:{title:"run",permalink:"/docs/proto/commands/run"}},a={},d=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}];function p(e){const n={a:"a",blockquote:"blockquote",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Z,{version:"0.19.0",header:!0}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto pin "})," command will pin a version (or alias) of a tool. By default it will\npin to a ",(0,t.jsx)(n.code,{children:".prototools"})," file in the current directory. This version will be used when attempting to\n",(0,t.jsx)(n.a,{href:"../detection",children:"detect a version"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto pin go 1.20\n"})}),"\n",(0,t.jsxs)(n.p,{children:["When the ",(0,t.jsx)(n.code,{children:"--global"})," option is passed, the version will be pinned globally in ",(0,t.jsx)(n.code,{children:"~/.proto/.prototools"}),".\nThis version will be used as a global fallback when attempting to ",(0,t.jsx)(n.a,{href:"../detection",children:"detect a version"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto pin go 1.20 --global\n"})}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.a,{href:"../config",children:["Learn more about the ",(0,t.jsx)(n.code,{children:".prototools"})," configuration file!"]})}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"arguments",children:"Arguments"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Type of tool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Version of tool."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--global"})," - Pin the version globally, rather than in the current directory."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},79022:(e,n,o)=>{o.d(n,{Z:()=>r});var t=o(9619),i=o(24246);function r(e){let{header:n,inline:o,updated:r,version:s}=e;return(0,i.jsx)(t.Z,{text:`v${s}`,variant:r?"success":"info",className:n?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,n,o)=>{o.d(n,{Z:()=>l});var t=o(40624),i=o(31792),r=o(24246);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:n,icon:o,text:l,variant:c}=e;return(0,r.jsxs)("span",{className:(0,t.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?s[c]:"bg-gray-100 text-gray-800",n),children:[o&&(0,r.jsx)(i.Z,{icon:o,className:"mr-1"}),l]})}},71670:(e,n,o)=>{o.d(n,{Z:()=>l,a:()=>s});var t=o(27378);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/79765aba.f32094ec.js b/assets/js/79765aba.f32094ec.js new file mode 100644 index 00000000000..ec1ccc3c3f2 --- /dev/null +++ b/assets/js/79765aba.f32094ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37440],{25371:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var t=o(24246),i=o(71670),r=o(79022);const s={title:"pin"},l=void 0,c={id:"proto/commands/pin",title:"pin",description:"The proto pin command will pin a version (or alias) of a tool. By default it will",source:"@site/docs/proto/commands/pin.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/pin",permalink:"/docs/proto/commands/pin",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/pin.mdx",tags:[],version:"current",frontMatter:{title:"pin"},sidebar:"proto",previous:{title:"outdated",permalink:"/docs/proto/commands/outdated"},next:{title:"regen",permalink:"/docs/proto/commands/regen"}},a={},d=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}];function p(e){const n={a:"a",blockquote:"blockquote",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Z,{version:"0.19.0",header:!0}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto pin "})," command will pin a version (or alias) of a tool. By default it will\npin to a ",(0,t.jsx)(n.code,{children:".prototools"})," file in the current directory. This version will be used when attempting to\n",(0,t.jsx)(n.a,{href:"../detection",children:"detect a version"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto pin go 1.20\n"})}),"\n",(0,t.jsxs)(n.p,{children:["When the ",(0,t.jsx)(n.code,{children:"--global"})," option is passed, the version will be pinned globally in ",(0,t.jsx)(n.code,{children:"~/.proto/.prototools"}),".\nThis version will be used as a global fallback when attempting to ",(0,t.jsx)(n.a,{href:"../detection",children:"detect a version"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto pin go 1.20 --global\n"})}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.a,{href:"../config",children:["Learn more about the ",(0,t.jsx)(n.code,{children:".prototools"})," configuration file!"]})}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"arguments",children:"Arguments"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Type of tool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Version of tool."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--global"})," - Pin the version globally, rather than in the current directory."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},79022:(e,n,o)=>{o.d(n,{Z:()=>r});var t=o(9619),i=o(24246);function r(e){let{header:n,inline:o,updated:r,version:s}=e;return(0,i.jsx)(t.Z,{text:`v${s}`,variant:r?"success":"info",className:n?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,n,o)=>{o.d(n,{Z:()=>l});var t=o(40624),i=o(31792),r=o(24246);const s={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function l(e){let{className:n,icon:o,text:l,variant:c}=e;return(0,r.jsxs)("span",{className:(0,t.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?s[c]:"bg-gray-100 text-gray-800",n),children:[o&&(0,r.jsx)(i.Z,{icon:o,className:"mr-1"}),l]})}},71670:(e,n,o)=>{o.d(n,{Z:()=>l,a:()=>s});var t=o(27378);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d4c8b40.2a058bf7.js b/assets/js/7d4c8b40.f08c602c.js similarity index 87% rename from assets/js/7d4c8b40.2a058bf7.js rename to assets/js/7d4c8b40.f08c602c.js index d5335e9aa3d..d434a97a542 100644 --- a/assets/js/7d4c8b40.2a058bf7.js +++ b/assets/js/7d4c8b40.f08c602c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8100],{13290:e=>{e.exports=JSON.parse('{"label":"bin","permalink":"/blog/tags/bin","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8100],{13290:e=>{e.exports=JSON.parse('{"label":"bin","permalink":"/blog/tags/bin","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7d9726a8.312de758.js b/assets/js/7d9726a8.be85ec84.js similarity index 79% rename from assets/js/7d9726a8.312de758.js rename to assets/js/7d9726a8.be85ec84.js index ee89161912f..d1286203298 100644 --- a/assets/js/7d9726a8.312de758.js +++ b/assets/js/7d9726a8.be85ec84.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7429],{89494:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/4","page":4,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7eb5bf2d.f2e595ca.js b/assets/js/7eb5bf2d.f2e595ca.js new file mode 100644 index 00000000000..a6bfba508bb --- /dev/null +++ b/assets/js/7eb5bf2d.f2e595ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30004],{21175:e=>{e.exports=JSON.parse('{"label":"profile","permalink":"/blog/tags/profile","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.52bc9c6c.js b/assets/js/814f3328.52bc9c6c.js deleted file mode 100644 index 8f97c727eeb..00000000000 --- a/assets/js/814f3328.52bc9c6c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"moon v1.19 - Improvements to task dependencies, codegen, and more","permalink":"/blog/moon-v1.19","unlisted":false},{"title":"proto v0.26 - New native shim implementation","permalink":"/blog/proto-v0.26","unlisted":false},{"title":"proto v0.26 (rc) - Release candidate available for testing!","permalink":"/blog/proto-v0.26-rc","unlisted":false},{"title":"moon v1.18 - New task execution flow and custom project names","permalink":"/blog/moon-v1.18","unlisted":false},{"title":"proto v0.25 - Linux arm64 gnu and musl support","permalink":"/blog/proto-v0.25","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.e6612ef0.js b/assets/js/814f3328.e6612ef0.js new file mode 100644 index 00000000000..065ca3a3938 --- /dev/null +++ b/assets/js/814f3328.e6612ef0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"proto v0.27 - PowerShell profiles, shim regeneration, and more","permalink":"/blog/proto-v0.27","unlisted":false},{"title":"moon v1.19 - Improvements to task dependencies, codegen, and more","permalink":"/blog/moon-v1.19","unlisted":false},{"title":"proto v0.26 - New native shim implementation","permalink":"/blog/proto-v0.26","unlisted":false},{"title":"proto v0.26 (rc) - Release candidate available for testing!","permalink":"/blog/proto-v0.26-rc","unlisted":false},{"title":"moon v1.18 - New task execution flow and custom project names","permalink":"/blog/moon-v1.18","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/860d7f34.446453be.js b/assets/js/860d7f34.0a6915ba.js similarity index 86% rename from assets/js/860d7f34.446453be.js rename to assets/js/860d7f34.0a6915ba.js index 9a5bc40a680..b8aab405c05 100644 --- a/assets/js/860d7f34.446453be.js +++ b/assets/js/860d7f34.0a6915ba.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28495],{80806:s=>{s.exports=JSON.parse('{"label":"shim","permalink":"/blog/tags/shim","allTagsPath":"/blog/tags","count":4,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28495],{80806:s=>{s.exports=JSON.parse('{"label":"shim","permalink":"/blog/tags/shim","allTagsPath":"/blog/tags","count":5,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/8eb4e46b.67c952e4.js b/assets/js/8eb4e46b.d69c44a6.js similarity index 78% rename from assets/js/8eb4e46b.67c952e4.js rename to assets/js/8eb4e46b.d69c44a6.js index a9e658d1229..a56afdbfd1d 100644 --- a/assets/js/8eb4e46b.67c952e4.js +++ b/assets/js/8eb4e46b.d69c44a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10001],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10001],{82638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/92999a1c.b0e52b38.js b/assets/js/92999a1c.0d362e5f.js similarity index 79% rename from assets/js/92999a1c.b0e52b38.js rename to assets/js/92999a1c.0d362e5f.js index 16ecc8bdd60..a6aba4df7d9 100644 --- a/assets/js/92999a1c.b0e52b38.js +++ b/assets/js/92999a1c.0d362e5f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":7,"totalCount":62,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[18442],{15310:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":7,"totalCount":63,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.28ceaa76.js b/assets/js/935f2afb.28ceaa76.js deleted file mode 100644 index 30ae3c5ef10..00000000000 --- a/assets/js/935f2afb.28ceaa76.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/docs/","docId":"intro","unlisted":false},{"type":"link","label":"Install moon","href":"/docs/install","docId":"install","unlisted":false},{"type":"category","label":"How it works","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Languages","href":"/docs/how-it-works/languages","docId":"how-it-works/languages","unlisted":false},{"type":"link","label":"Project graph","href":"/docs/how-it-works/project-graph","docId":"how-it-works/project-graph","unlisted":false},{"type":"link","label":"Action graph","href":"/docs/how-it-works/action-graph","docId":"how-it-works/action-graph","unlisted":false}],"href":"/docs/how-it-works"},{"type":"category","label":"Getting started","collapsed":false,"collapsible":true,"items":[{"type":"link","label":"Setup workspace","href":"/docs/setup-workspace","docId":"setup-workspace","unlisted":false},{"type":"link","label":"Create a project","href":"/docs/create-project","docId":"create-project","unlisted":false},{"type":"link","label":"Setup toolchain","href":"/docs/setup-toolchain","docId":"setup-toolchain","unlisted":false},{"type":"link","label":"Create a task","href":"/docs/create-task","docId":"create-task","unlisted":false},{"type":"link","label":"Run a task","href":"/docs/run-task","docId":"run-task","unlisted":false},{"type":"link","label":"Migrate to moon","href":"/docs/migrate-to-moon","docId":"migrate-to-moon","unlisted":false}]},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Cache","href":"/docs/concepts/cache","docId":"concepts/cache","unlisted":false},{"type":"link","label":"File groups","href":"/docs/concepts/file-group","docId":"concepts/file-group","unlisted":false},{"type":"link","label":"File patterns","href":"/docs/concepts/file-pattern","docId":"concepts/file-pattern","unlisted":false},{"type":"link","label":"Query language","href":"/docs/concepts/query-lang","docId":"concepts/query-lang","unlisted":false},{"type":"link","label":"Projects","href":"/docs/concepts/project","docId":"concepts/project","unlisted":false},{"type":"link","label":"Targets","href":"/docs/concepts/target","docId":"concepts/target","unlisted":false},{"type":"link","label":"Tasks","href":"/docs/concepts/task","docId":"concepts/task","unlisted":false},{"type":"link","label":"Task inheritance","href":"/docs/concepts/task-inheritance","docId":"concepts/task-inheritance","unlisted":false},{"type":"link","label":"Tokens","href":"/docs/concepts/token","docId":"concepts/token","unlisted":false},{"type":"link","label":"Toolchain","href":"/docs/concepts/toolchain","docId":"concepts/toolchain","unlisted":false},{"type":"link","label":"Workspace","href":"/docs/concepts/workspace","docId":"concepts/workspace","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/concepts"},{"type":"category","label":"Config files","items":[{"type":"link","label":".moon/workspace.yml","href":"/docs/config/workspace","docId":"config/workspace","unlisted":false},{"type":"link","label":".moon/toolchain.yml","href":"/docs/config/toolchain","docId":"config/toolchain","unlisted":false},{"type":"link","label":".moon/tasks...","href":"/docs/config/tasks","docId":"config/tasks","unlisted":false},{"type":"link","label":"moon.yml","href":"/docs/config/project","docId":"config/project","unlisted":false},{"type":"link","label":"template.yml","href":"/docs/config/template","docId":"config/template","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/config"},{"type":"category","label":"Editors","items":[{"type":"link","label":"VS Code","href":"/docs/editors/vscode","docId":"editors/vscode","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/editors"},{"type":"category","label":"Commands","items":[{"type":"link","label":"Overview","href":"/docs/commands/overview","docId":"commands/overview","unlisted":false},{"type":"link","label":"action-graph","href":"/docs/commands/action-graph","docId":"commands/action-graph","unlisted":false},{"type":"link","label":"bin","href":"/docs/commands/bin","docId":"commands/bin","unlisted":false},{"type":"link","label":"ci","href":"/docs/commands/ci","docId":"commands/ci","unlisted":false},{"type":"link","label":"check","href":"/docs/commands/check","docId":"commands/check","unlisted":false},{"type":"link","label":"clean","href":"/docs/commands/clean","docId":"commands/clean","unlisted":false},{"type":"link","label":"completions","href":"/docs/commands/completions","docId":"commands/completions","unlisted":false},{"type":"category","label":"docker","items":[{"type":"link","label":"prune","href":"/docs/commands/docker/prune","docId":"commands/docker/prune","unlisted":false},{"type":"link","label":"scaffold","href":"/docs/commands/docker/scaffold","docId":"commands/docker/scaffold","unlisted":false},{"type":"link","label":"setup","href":"/docs/commands/docker/setup","docId":"commands/docker/setup","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/docker"},{"type":"link","label":"generate","href":"/docs/commands/generate","docId":"commands/generate","unlisted":false},{"type":"link","label":"init","href":"/docs/commands/init","docId":"commands/init","unlisted":false},{"type":"category","label":"migrate","items":[{"type":"link","label":"from-package-json","href":"/docs/commands/migrate/from-package-json","docId":"commands/migrate/from-package-json","unlisted":false},{"type":"link","label":"from-turborepo","href":"/docs/commands/migrate/from-turborepo","docId":"commands/migrate/from-turborepo","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/migrate"},{"type":"link","label":"project","href":"/docs/commands/project","docId":"commands/project","unlisted":false},{"type":"link","label":"project-graph","href":"/docs/commands/project-graph","docId":"commands/project-graph","unlisted":false},{"type":"category","label":"query","items":[{"type":"link","label":"hash","href":"/docs/commands/query/hash","docId":"commands/query/hash","unlisted":false},{"type":"link","label":"hash-diff","href":"/docs/commands/query/hash-diff","docId":"commands/query/hash-diff","unlisted":false},{"type":"link","label":"projects","href":"/docs/commands/query/projects","docId":"commands/query/projects","unlisted":false},{"type":"link","label":"tasks","href":"/docs/commands/query/tasks","docId":"commands/query/tasks","unlisted":false},{"type":"link","label":"touched-files","href":"/docs/commands/query/touched-files","docId":"commands/query/touched-files","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/query"},{"type":"link","label":"run","href":"/docs/commands/run","docId":"commands/run","unlisted":false},{"type":"link","label":"setup","href":"/docs/commands/setup","docId":"commands/setup","unlisted":false},{"type":"category","label":"sync","items":[{"type":"link","label":"codeowners","href":"/docs/commands/sync/codeowners","docId":"commands/sync/codeowners","unlisted":false},{"type":"link","label":"hooks","href":"/docs/commands/sync/hooks","docId":"commands/sync/hooks","unlisted":false},{"type":"link","label":"projects","href":"/docs/commands/sync/projects","docId":"commands/sync/projects","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/sync"},{"type":"link","label":"task","href":"/docs/commands/task","docId":"commands/task","unlisted":false},{"type":"link","label":"teardown","href":"/docs/commands/teardown","docId":"commands/teardown","unlisted":false},{"type":"link","label":"upgrade","href":"/docs/commands/upgrade","docId":"commands/upgrade","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands"},{"type":"link","label":"Cheat sheet","href":"/docs/cheat-sheet","docId":"cheat-sheet","unlisted":false},{"type":"link","label":"Feature comparison","href":"/docs/comparison","docId":"comparison","unlisted":false},{"type":"link","label":"Terminology","href":"/docs/terminology","docId":"terminology","unlisted":false},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq","unlisted":false},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/moon/releases"}],"guides":[{"type":"link","label":"Continuous integration (CI)","href":"/docs/guides/ci","docId":"guides/ci","unlisted":false},{"type":"link","label":"Code generation","href":"/docs/guides/codegen","docId":"guides/codegen","unlisted":false},{"type":"link","label":"Code owners","href":"/docs/guides/codeowners","docId":"guides/codeowners","unlisted":false},{"type":"link","label":"Debugging a task","href":"/docs/guides/debug-task","docId":"guides/debug-task","unlisted":false},{"type":"link","label":"Docker usage","href":"/docs/guides/docker","docId":"guides/docker","unlisted":false},{"type":"link","label":"Offline mode","href":"/docs/guides/offline-mode","docId":"guides/offline-mode","unlisted":false},{"type":"link","label":"Open source usage","href":"/docs/guides/open-source","docId":"guides/open-source","unlisted":false},{"type":"link","label":"Remote caching","href":"/docs/guides/remote-cache","docId":"guides/remote-cache","unlisted":false},{"type":"link","label":"Root-level project","href":"/docs/guides/root-project","docId":"guides/root-project","unlisted":false},{"type":"link","label":"Sharing workspace configuration","href":"/docs/guides/sharing-config","docId":"guides/sharing-config","unlisted":false},{"type":"link","label":"Webhooks (experimental)","href":"/docs/guides/webhooks","docId":"guides/webhooks","unlisted":false},{"type":"link","label":"VCS hooks","href":"/docs/guides/vcs-hooks","docId":"guides/vcs-hooks","unlisted":false},{"type":"html","value":"
","defaultStyle":true},{"type":"category","label":"JavaScript","collapsed":false,"items":[{"type":"link","label":"Bun handbook","href":"/docs/guides/javascript/bun-handbook","docId":"guides/javascript/bun-handbook","unlisted":false},{"type":"link","label":"Deno handbook","href":"/docs/guides/javascript/deno-handbook","docId":"guides/javascript/deno-handbook","unlisted":false},{"type":"link","label":"Node.js handbook","href":"/docs/guides/javascript/node-handbook","docId":"guides/javascript/node-handbook","unlisted":false},{"type":"link","label":"Task profiling","href":"/docs/guides/profile","docId":"guides/profile","unlisted":false},{"type":"link","label":"TypeScript project references","href":"/docs/guides/javascript/typescript-project-refs","docId":"guides/javascript/typescript-project-refs","unlisted":false},{"type":"category","label":"Examples","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Angular","href":"/docs/guides/examples/angular","docId":"guides/examples/angular","unlisted":false},{"type":"link","label":"Astro","href":"/docs/guides/examples/astro","docId":"guides/examples/astro","unlisted":false},{"type":"link","label":"ESLint","href":"/docs/guides/examples/eslint","docId":"guides/examples/eslint","unlisted":false},{"type":"link","label":"Jest","href":"/docs/guides/examples/jest","docId":"guides/examples/jest","unlisted":false},{"type":"link","label":"Nest","href":"/docs/guides/examples/nest","docId":"guides/examples/nest","unlisted":false},{"type":"link","label":"Next","href":"/docs/guides/examples/next","docId":"guides/examples/next","unlisted":false},{"type":"link","label":"Nuxt","href":"/docs/guides/examples/nuxt","docId":"guides/examples/nuxt","unlisted":false},{"type":"link","label":"Packemon","href":"/docs/guides/examples/packemon","docId":"guides/examples/packemon","unlisted":false},{"type":"link","label":"Prettier","href":"/docs/guides/examples/prettier","docId":"guides/examples/prettier","unlisted":false},{"type":"link","label":"React","href":"/docs/guides/examples/react","docId":"guides/examples/react","unlisted":false},{"type":"link","label":"Remix","href":"/docs/guides/examples/remix","docId":"guides/examples/remix","unlisted":false},{"type":"link","label":"Solid","href":"/docs/guides/examples/solid","docId":"guides/examples/solid","unlisted":false},{"type":"link","label":"Storybook","href":"/docs/guides/examples/storybook","docId":"guides/examples/storybook","unlisted":false},{"type":"link","label":"SvelteKit","href":"/docs/guides/examples/sveltekit","docId":"guides/examples/sveltekit","unlisted":false},{"type":"link","label":"TypeScript","href":"/docs/guides/examples/typescript","docId":"guides/examples/typescript","unlisted":false},{"type":"link","label":"Vite & Vitest","href":"/docs/guides/examples/vite","docId":"guides/examples/vite","unlisted":false},{"type":"link","label":"Vue","href":"/docs/guides/examples/vue","docId":"guides/examples/vue","unlisted":false}],"href":"/docs/guides/node/examples"}],"collapsible":true},{"type":"html","value":"
","defaultStyle":true},{"type":"category","label":"Rust","collapsed":false,"items":[{"type":"link","label":"Handbook","href":"/docs/guides/rust/handbook","docId":"guides/rust/handbook","unlisted":false}],"collapsible":true}],"proto":[{"type":"link","label":"What is proto?","href":"/docs/proto/","docId":"proto/index","unlisted":false},{"type":"link","label":"Install proto","href":"/docs/proto/install","docId":"proto/install","unlisted":false},{"type":"link","label":"Version detection","href":"/docs/proto/detection","docId":"proto/detection","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/proto/config","docId":"proto/config","unlisted":false},{"type":"link","label":"Supported tools","href":"/docs/proto/tools","docId":"proto/tools","unlisted":false},{"type":"category","label":"Plugins","items":[{"type":"link","label":"TOML","href":"/docs/proto/toml-plugin","docId":"proto/toml-plugin","unlisted":false},{"type":"link","label":"WASM","href":"/docs/proto/wasm-plugin","docId":"proto/wasm-plugin","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/plugins"},{"type":"category","label":"Commands","items":[{"type":"link","label":"alias","href":"/docs/proto/commands/alias","docId":"proto/commands/alias","unlisted":false},{"type":"link","label":"bin","href":"/docs/proto/commands/bin","docId":"proto/commands/bin","unlisted":false},{"type":"link","label":"clean","href":"/docs/proto/commands/clean","docId":"proto/commands/clean","unlisted":false},{"type":"link","label":"completions","href":"/docs/proto/commands/completions","docId":"proto/commands/completions","unlisted":false},{"type":"category","label":"debug","items":[{"type":"link","label":"config","href":"/docs/proto/commands/debug/config","docId":"proto/commands/debug/config","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/commands/debug"},{"type":"link","label":"install","href":"/docs/proto/commands/install","docId":"proto/commands/install","unlisted":false},{"type":"link","label":"install-global","href":"/docs/proto/commands/install-global","docId":"proto/commands/install-global","unlisted":false},{"type":"link","label":"list","href":"/docs/proto/commands/list","docId":"proto/commands/list","unlisted":false},{"type":"link","label":"list-global","href":"/docs/proto/commands/list-global","docId":"proto/commands/list-global","unlisted":false},{"type":"link","label":"list-remote","href":"/docs/proto/commands/list-remote","docId":"proto/commands/list-remote","unlisted":false},{"type":"link","label":"outdated","href":"/docs/proto/commands/outdated","docId":"proto/commands/outdated","unlisted":false},{"type":"link","label":"pin","href":"/docs/proto/commands/pin","docId":"proto/commands/pin","unlisted":false},{"type":"link","label":"run","href":"/docs/proto/commands/run","docId":"proto/commands/run","unlisted":false},{"type":"link","label":"setup","href":"/docs/proto/commands/setup","docId":"proto/commands/setup","unlisted":false},{"type":"category","label":"tool","items":[{"type":"link","label":"add","href":"/docs/proto/commands/tool/add","docId":"proto/commands/tool/add","unlisted":false},{"type":"link","label":"info","href":"/docs/proto/commands/tool/info","docId":"proto/commands/tool/info","unlisted":false},{"type":"link","label":"list","href":"/docs/proto/commands/tool/list","docId":"proto/commands/tool/list","unlisted":false},{"type":"link","label":"list-plugins","href":"/docs/proto/commands/tool/list-plugins","docId":"proto/commands/tool/list-plugins","unlisted":false},{"type":"link","label":"remove","href":"/docs/proto/commands/tool/remove","docId":"proto/commands/tool/remove","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/commands/tool"},{"type":"link","label":"unalias","href":"/docs/proto/commands/unalias","docId":"proto/commands/unalias","unlisted":false},{"type":"link","label":"uninstall","href":"/docs/proto/commands/uninstall","docId":"proto/commands/uninstall","unlisted":false},{"type":"link","label":"uninstall-global","href":"/docs/proto/commands/uninstall-global","docId":"proto/commands/uninstall-global","unlisted":false},{"type":"link","label":"upgrade","href":"/docs/proto/commands/upgrade","docId":"proto/commands/upgrade","unlisted":false},{"type":"link","label":"use","href":"/docs/proto/commands/use","docId":"proto/commands/use","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQ","href":"/docs/proto/faq","docId":"proto/faq","unlisted":false},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/proto/releases"}]},"docs":{"cheat-sheet":{"id":"cheat-sheet","title":"Cheat sheet","description":"Don\'t have time to read the docs? Here\'s a quick cheat sheet to get you started.","sidebar":"docs"},"commands/action-graph":{"id":"commands/action-graph","title":"action-graph","description":"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of","sidebar":"docs"},"commands/bin":{"id":"commands/bin","title":"bin","description":"The moon bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"docs"},"commands/check":{"id":"commands/check","title":"check","description":"The moon check [...projects] (or moon c) command will run all","sidebar":"docs"},"commands/ci":{"id":"commands/ci","title":"ci","description":"The moon ci command is a special command that should be ran in a continuous integration (CI)","sidebar":"docs"},"commands/clean":{"id":"commands/clean","title":"clean","description":"The moon clean command will clean the current workspace by deleting stale cache. For the most","sidebar":"docs"},"commands/completions":{"id":"commands/completions","title":"completions","description":"The moon completions command will generate moon command and argument completions for your current","sidebar":"docs"},"commands/docker/prune":{"id":"commands/docker/prune","title":"docker prune","description":"The moon docker prune command will reduce the overall filesize of the Docker environment by","sidebar":"docs"},"commands/docker/scaffold":{"id":"commands/docker/scaffold","title":"docker scaffold","description":"The moon docker scaffold command creates multiple repository skeletons for use","sidebar":"docs"},"commands/docker/setup":{"id":"commands/docker/setup","title":"docker setup","description":"The moon docker setup command will efficiently install dependencies for focused projects. This is","sidebar":"docs"},"commands/generate":{"id":"commands/generate","title":"generate","description":"The moon generate (or moon g) command will generate code (files and folders) from a","sidebar":"docs"},"commands/init":{"id":"commands/init","title":"init","description":"The moon init command will initialize moon into a repository and scaffold necessary config files","sidebar":"docs"},"commands/migrate/from-package-json":{"id":"commands/migrate/from-package-json","title":"migrate from-package-json","description":"Use the moon migrate from-package-json sub-command to migrate a project\'s package.json","sidebar":"docs"},"commands/migrate/from-turborepo":{"id":"commands/migrate/from-turborepo","title":"migrate from-turborepo","description":"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.","sidebar":"docs"},"commands/overview":{"id":"commands/overview","title":"Overview","description":"The following options are available for all moon commands.","sidebar":"docs"},"commands/project":{"id":"commands/project","title":"project","description":"The moon project (or moon p) command will display all available information about a","sidebar":"docs"},"commands/project-graph":{"id":"commands/project-graph","title":"project-graph","description":"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all","sidebar":"docs"},"commands/query/hash":{"id":"commands/query/hash","title":"query hash","description":"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also","sidebar":"docs"},"commands/query/hash-diff":{"id":"commands/query/hash-diff","title":"query hash-diff","description":"Use the moon query hash-diff sub-command to query the content and source differences between 2","sidebar":"docs"},"commands/query/projects":{"id":"commands/query/projects","title":"query projects","description":"Use the moon query projects sub-command to query information about all projects in the project","sidebar":"docs"},"commands/query/tasks":{"id":"commands/query/tasks","title":"query tasks","description":"Use the moon query tasks sub-command to query task information for all projects in the project","sidebar":"docs"},"commands/query/touched-files":{"id":"commands/query/touched-files","title":"query touched-files","description":"Use the moon query touched-files sub-command to query for a list of touched files (added,","sidebar":"docs"},"commands/run":{"id":"commands/run","title":"run","description":"The moon run (or moon r) command will run one or many targets and all of","sidebar":"docs"},"commands/setup":{"id":"commands/setup","title":"setup","description":"The moon setup command can be used to setup the developer and pipeline environments. It achieves","sidebar":"docs"},"commands/sync/codeowners":{"id":"commands/sync/codeowners","title":"sync codeowners","description":"The moon sync codeowners command will manually sync code owners, by aggregating all owners from","sidebar":"docs"},"commands/sync/hooks":{"id":"commands/sync/hooks","title":"sync hooks","description":"The moon sync hooks command will manually sync hooks for the configured","sidebar":"docs"},"commands/sync/projects":{"id":"commands/sync/projects","title":"sync projects","description":"The moon sync projects command will force sync all projects in the workspace to help achieve a","sidebar":"docs"},"commands/task":{"id":"commands/task","title":"task","description":"The moon task (or moon t) command will display information about a task that has been","sidebar":"docs"},"commands/teardown":{"id":"commands/teardown","title":"teardown","description":"The moon teardown command, as its name infers, will teardown and clean the current environment,","sidebar":"docs"},"commands/upgrade":{"id":"commands/upgrade","title":"upgrade","description":"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)","sidebar":"docs"},"comparison":{"id":"comparison","title":"Feature comparison","description":"The following comparisons are not an exhaustive list of features, and may be inaccurate or out of","sidebar":"docs"},"concepts/cache":{"id":"concepts/cache","title":"Cache","description":"moon\'s able to achieve high performance and blazing speeds by implementing a cache that\'s powered by","sidebar":"docs"},"concepts/file-group":{"id":"concepts/file-group","title":"File groups","description":"File groups are a mechanism for grouping similar types of files within a project using","sidebar":"docs"},"concepts/file-pattern":{"id":"concepts/file-pattern","title":"File patterns","description":"Globs","sidebar":"docs"},"concepts/project":{"id":"concepts/project","title":"Projects","description":"A project is a library, application, package, binary, tool, etc, that contains source files, test","sidebar":"docs"},"concepts/query-lang":{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","sidebar":"docs"},"concepts/target":{"id":"concepts/target","title":"Targets","description":"A target is a compound identifier that pairs a scope to a task, separated by a","sidebar":"docs"},"concepts/task":{"id":"concepts/task","title":"Tasks","description":"Tasks are commands that are ran in the context of a project. Underneath the hood, a","sidebar":"docs"},"concepts/task-inheritance":{"id":"concepts/task-inheritance","title":"Task inheritance","description":"Unlike other task runners that require the same tasks to be repeatedly defined for every project,","sidebar":"docs"},"concepts/token":{"id":"concepts/token","title":"Tokens","description":"Tokens are variables and functions that can be used by command,","sidebar":"docs"},"concepts/toolchain":{"id":"concepts/toolchain","title":"Toolchain","description":"The toolchain is an internal layer for downloading, installing, and managing tools (languages,","sidebar":"docs"},"concepts/workspace":{"id":"concepts/workspace","title":"Workspace","description":"A workspace is a directory that contains projects, manages a toolchain,","sidebar":"docs"},"config/project":{"id":"config/project","title":"moon.yml","description":"The moon.yml configuration file is not required but can be used to define additional metadata","sidebar":"docs"},"config/tasks":{"id":"config/tasks","title":".moon/tasks.yml, .moon/tasks/**/*.yml","description":"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in","sidebar":"docs"},"config/template":{"id":"config/template","title":"template.yml","description":"The template.yml file configures metadata and variables for a template,","sidebar":"docs"},"config/toolchain":{"id":"config/toolchain","title":".moon/toolchain.yml","description":"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.","sidebar":"docs"},"config/workspace":{"id":"config/workspace","title":".moon/workspace.yml","description":"The .moon/workspace.yml file configures projects and services in the workspace. This file is","sidebar":"docs"},"create-project":{"id":"create-project","title":"Create a project","description":"With a workspace, we can now house one or many projects,","sidebar":"docs"},"create-task":{"id":"create-task","title":"Create a task","description":"The primary focus of moon is a task runner, and for it to operate in any capacity, it requires tasks","sidebar":"docs"},"editors/vscode":{"id":"editors/vscode","title":"VS Code extension","description":"Enhance your VS Code experience with our integrated moon console! Whether you\'re a fan of the","sidebar":"docs"},"faq":{"id":"faq","title":"FAQ","description":"General","sidebar":"docs"},"guides/ci":{"id":"guides/ci","title":"Continuous integration (CI)","description":"All companies and projects rely on continuous integration (CI) to ensure high quality code and to","sidebar":"guides"},"guides/codegen":{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","sidebar":"guides"},"guides/codeowners":{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","sidebar":"guides"},"guides/debug-task":{"id":"guides/debug-task","title":"Debugging a task","description":"Running tasks is the most common way to interact with moon, so what do you do","sidebar":"guides"},"guides/docker":{"id":"guides/docker","title":"Docker usage","description":"Using Docker to run your applications? Or build your artifacts? No","sidebar":"guides"},"guides/examples/angular":{"id":"guides/examples/angular","title":"Angular example","description":"In this guide, you\'ll learn how to integrate Angular into moon.","sidebar":"guides"},"guides/examples/astro":{"id":"guides/examples/astro","title":"Astro example","description":"In this guide, you\'ll learn how to integrate Astro.","sidebar":"guides"},"guides/examples/eslint":{"id":"guides/examples/eslint","title":"ESLint example","description":"In this guide, you\'ll learn how to integrate ESLint into moon.","sidebar":"guides"},"guides/examples/jest":{"id":"guides/examples/jest","title":"Jest example","description":"In this guide, you\'ll learn how to integrate Jest into moon.","sidebar":"guides"},"guides/examples/nest":{"id":"guides/examples/nest","title":"Nest example","description":"In this guide, you\'ll learn how to integrate NestJS into moon.","sidebar":"guides"},"guides/examples/next":{"id":"guides/examples/next","title":"Next example","description":"In this guide, you\'ll learn how to integrate Next.js into moon.","sidebar":"guides"},"guides/examples/nuxt":{"id":"guides/examples/nuxt","title":"Nuxt example","description":"In this guide, you\'ll learn how to integrate Nuxt v3, a Vue framework,","sidebar":"guides"},"guides/examples/packemon":{"id":"guides/examples/packemon","title":"Packemon example","description":"In this guide, you\'ll learn how to integrate Packemon into moon. Packemon","sidebar":"guides"},"guides/examples/prettier":{"id":"guides/examples/prettier","title":"Prettier example","description":"In this guide, you\'ll learn how to integrate Prettier into moon.","sidebar":"guides"},"guides/examples/react":{"id":"guides/examples/react","title":"React example","description":"React is an application or library concern, and not a build system one, since the bundling of React","sidebar":"guides"},"guides/examples/remix":{"id":"guides/examples/remix","title":"Remix example","description":"In this guide, you\'ll learn how to integrate Remix into moon.","sidebar":"guides"},"guides/examples/solid":{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","sidebar":"guides"},"guides/examples/storybook":{"id":"guides/examples/storybook","title":"Storybook example","description":"Storybook is a frontend workshop for building UI components and pages in isolation. Thousands of","sidebar":"guides"},"guides/examples/sveltekit":{"id":"guides/examples/sveltekit","title":"SvelteKit example","description":"SvelteKit is built on Svelte, a UI framework that","sidebar":"guides"},"guides/examples/typescript":{"id":"guides/examples/typescript","title":"TypeScript example","description":"In this guide, you\'ll learn how to integrate TypeScript into moon. We\'ll be","sidebar":"guides"},"guides/examples/vite":{"id":"guides/examples/vite","title":"Vite & Vitest example","description":"In this guide, you\'ll learn how to integrate Vite and","sidebar":"guides"},"guides/examples/vue":{"id":"guides/examples/vue","title":"Vue example","description":"Vue is an application or library concern, and not a build system one, since the bundling of Vue is","sidebar":"guides"},"guides/javascript/bun-handbook":{"id":"guides/javascript/bun-handbook","title":"Bun handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/deno-handbook":{"id":"guides/javascript/deno-handbook","title":"Deno handbook","description":"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we\'ll","sidebar":"guides"},"guides/javascript/node-handbook":{"id":"guides/javascript/node-handbook","title":"Node.js handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/typescript-eslint":{"id":"guides/javascript/typescript-eslint","title":"typescript-eslint","description":"ESLint integration"},"guides/javascript/typescript-project-refs":{"id":"guides/javascript/typescript-project-refs","title":"TypeScript project references","description":"The ultimate in-depth guide for using TypeScript in a monorepo effectively!","sidebar":"guides"},"guides/offline-mode":{"id":"guides/offline-mode","title":"Offline mode","description":"moon assumes that an internet connection is always available, as we download and install tools into","sidebar":"guides"},"guides/open-source":{"id":"guides/open-source","title":"Open source usage","description":"Although moon was designed for large monorepos, it can also be used for open source projects,","sidebar":"guides"},"guides/profile":{"id":"guides/profile","title":"Task profiling","description":"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!","sidebar":"guides"},"guides/remote-cache":{"id":"guides/remote-cache","title":"Remote caching","description":"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over","sidebar":"guides"},"guides/root-project":{"id":"guides/root-project","title":"Root-level project","description":"Coming from other repositories or task runner, you may be familiar with tasks available at the","sidebar":"guides"},"guides/rust/handbook":{"id":"guides/rust/handbook","title":"Rust handbook","description":"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,","sidebar":"guides"},"guides/sharing-config":{"id":"guides/sharing-config","title":"Sharing workspace configuration","description":"For large companies, open source maintainers, and those that love reusability, more often than not","sidebar":"guides"},"guides/vcs-hooks":{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","sidebar":"guides"},"guides/webhooks":{"id":"guides/webhooks","title":"Webhooks (experimental)","description":"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe","sidebar":"guides"},"how-it-works/action-graph":{"id":"how-it-works/action-graph","title":"Action graph","description":"When you run a task on the command line, we generate an action graph to","sidebar":"docs"},"how-it-works/languages":{"id":"how-it-works/languages","title":"Languages","description":"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a","sidebar":"docs"},"how-it-works/project-graph":{"id":"how-it-works/project-graph","title":"Project graph","description":"The project graph is a representation of all configured","sidebar":"docs"},"install":{"id":"install","title":"Install moon","description":"The following guide can be used to install moon and integrate it into an existing repository (with","sidebar":"docs"},"intro":{"id":"intro","title":"Introduction","description":"moonrepo is a productivity platform that aims to eliminate pain points for both developers and","sidebar":"docs"},"migrate-to-moon":{"id":"migrate-to-moon","title":"Migrate to moon","description":"Now that we\'ve talked about the workspace, projects, tasks, and more, we must talk about something","sidebar":"docs"},"proto/commands/alias":{"id":"proto/commands/alias","title":"alias","description":"The proto alias (or proto a) command will define a custom alias that","sidebar":"proto"},"proto/commands/bin":{"id":"proto/commands/bin","title":"bin","description":"The proto bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"proto"},"proto/commands/clean":{"id":"proto/commands/clean","title":"clean","description":"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it","sidebar":"proto"},"proto/commands/completions":{"id":"proto/commands/completions","title":"completions","description":"The proto completions command will generate proto command and argument completions for your","sidebar":"proto"},"proto/commands/debug/config":{"id":"proto/commands/debug/config","title":"debug config","description":"The proto debug config command will list all .prototools configuration files (in TOML format)","sidebar":"proto"},"proto/commands/install":{"id":"proto/commands/install","title":"install","description":"The proto install (or proto i) command will download and install a tool by unpacking","sidebar":"proto"},"proto/commands/install-global":{"id":"proto/commands/install-global","title":"install-global","description":"The proto install-global ... (or proto ig) command will install one or many","sidebar":"proto"},"proto/commands/list":{"id":"proto/commands/list","title":"list","description":"The proto list (or proto ls) command will list installed versions by scanning the","sidebar":"proto"},"proto/commands/list-global":{"id":"proto/commands/list-global","title":"list-global","description":"The proto list-global (or proto lsg) command will list installed global dependencies (and","sidebar":"proto"},"proto/commands/list-remote":{"id":"proto/commands/list-remote","title":"list-remote","description":"The proto list-remote (or proto lsr) command will list available versions by resolving","sidebar":"proto"},"proto/commands/outdated":{"id":"proto/commands/outdated","title":"outdated","description":"The proto outdated command will load all .prototools files and check for newer versions of each","sidebar":"proto"},"proto/commands/pin":{"id":"proto/commands/pin","title":"pin","description":"The proto pin command will pin a version (or alias) of a tool. By default it will","sidebar":"proto"},"proto/commands/run":{"id":"proto/commands/run","title":"run","description":"The proto run (or proto r) command will run a tool after","sidebar":"proto"},"proto/commands/setup":{"id":"proto/commands/setup","title":"setup","description":"The proto setup command will setup proto in your current shell by modifying an applicable profile","sidebar":"proto"},"proto/commands/tool/add":{"id":"proto/commands/tool/add","title":"tool add","description":"The proto tool add command (formerly proto add-plugin) will add the provided ID","sidebar":"proto"},"proto/commands/tool/info":{"id":"proto/commands/tool/info","title":"tool info","description":"The proto tool info command will display information about a tool and its plugin.","sidebar":"proto"},"proto/commands/tool/list":{"id":"proto/commands/tool/list","title":"tool list","description":"The proto tool list command (formerly proto tools) will list all tools that have been installed,","sidebar":"proto"},"proto/commands/tool/list-plugins":{"id":"proto/commands/tool/list-plugins","title":"tool list-plugins","description":"The proto tool list-plugins command (formerly proto plugins) will list all available and","sidebar":"proto"},"proto/commands/tool/remove":{"id":"proto/commands/tool/remove","title":"tool remove","description":"The proto tool remove command (formerly proto remove-plugin) will remove the provided","sidebar":"proto"},"proto/commands/unalias":{"id":"proto/commands/unalias","title":"unalias","description":"The proto unalias (or proto ua) command will remove a custom alias for the","sidebar":"proto"},"proto/commands/uninstall":{"id":"proto/commands/uninstall","title":"uninstall","description":"The proto uninstall (or proto ui) command will uninstall and remove a tool from","sidebar":"proto"},"proto/commands/uninstall-global":{"id":"proto/commands/uninstall-global","title":"uninstall-global","description":"The proto uninstall-global ... (or proto ug) command will uninstall one or","sidebar":"proto"},"proto/commands/upgrade":{"id":"proto/commands/upgrade","title":"upgrade","description":"The proto upgrade (or proto up) command can be used to upgrade your current proto binary to the","sidebar":"proto"},"proto/commands/use":{"id":"proto/commands/use","title":"use","description":"The proto use (or proto u) command will download and install all tools and plugins from all","sidebar":"proto"},"proto/config":{"id":"proto/config","title":"Configuration","description":"We support configuration at both the project-level and user-level using a","sidebar":"proto"},"proto/detection":{"id":"proto/detection","title":"Version detection","description":"The most powerful feature in proto is its contextual version detection, that is triggered with","sidebar":"proto"},"proto/faq":{"id":"proto/faq","title":"FAQ","description":"General","sidebar":"proto"},"proto/index":{"id":"proto/index","title":"What is proto?","description":"proto is a pluggable version manager, a unified toolchain.","sidebar":"proto"},"proto/install":{"id":"proto/install","title":"Install proto","description":"The following guide can be used to install proto into your environment.","sidebar":"proto"},"proto/plugins":{"id":"proto/plugins","title":"Plugins","description":"proto supports a pluggable architecture as a means for consumers to integrate and manage custom","sidebar":"proto"},"proto/toml-plugin":{"id":"proto/toml-plugin","title":"TOML plugin","description":"The TOML plugin is by design, very simple. It\'s a TOML file that describes a schema for the tool,","sidebar":"proto"},"proto/tools":{"id":"proto/tools","title":"Supported tools","description":"Built-in","sidebar":"proto"},"proto/wasm-plugin":{"id":"proto/wasm-plugin","title":"WASM plugin","description":"Plugins can be written in WebAssembly (WASM), a portable binary format.","sidebar":"proto"},"run-task":{"id":"run-task","title":"Run a task","description":"Even though we\'ve created a task, it\'s not useful unless we run it, which is done","sidebar":"docs"},"setup-toolchain":{"id":"setup-toolchain","title":"Setup toolchain","description":"One of moon\'s most powerful features is the toolchain, which automatically","sidebar":"docs"},"setup-workspace":{"id":"setup-workspace","title":"Setup workspace","description":"Once moon has been installed, we must setup the workspace,","sidebar":"docs"},"terminology":{"id":"terminology","title":"Terminology","description":"| Term | Description |","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.83faeb08.js b/assets/js/935f2afb.83faeb08.js new file mode 100644 index 00000000000..bfb72ec5ece --- /dev/null +++ b/assets/js/935f2afb.83faeb08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/docs/","docId":"intro","unlisted":false},{"type":"link","label":"Install moon","href":"/docs/install","docId":"install","unlisted":false},{"type":"category","label":"How it works","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Languages","href":"/docs/how-it-works/languages","docId":"how-it-works/languages","unlisted":false},{"type":"link","label":"Project graph","href":"/docs/how-it-works/project-graph","docId":"how-it-works/project-graph","unlisted":false},{"type":"link","label":"Action graph","href":"/docs/how-it-works/action-graph","docId":"how-it-works/action-graph","unlisted":false}],"href":"/docs/how-it-works"},{"type":"category","label":"Getting started","collapsed":false,"collapsible":true,"items":[{"type":"link","label":"Setup workspace","href":"/docs/setup-workspace","docId":"setup-workspace","unlisted":false},{"type":"link","label":"Create a project","href":"/docs/create-project","docId":"create-project","unlisted":false},{"type":"link","label":"Setup toolchain","href":"/docs/setup-toolchain","docId":"setup-toolchain","unlisted":false},{"type":"link","label":"Create a task","href":"/docs/create-task","docId":"create-task","unlisted":false},{"type":"link","label":"Run a task","href":"/docs/run-task","docId":"run-task","unlisted":false},{"type":"link","label":"Migrate to moon","href":"/docs/migrate-to-moon","docId":"migrate-to-moon","unlisted":false}]},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Cache","href":"/docs/concepts/cache","docId":"concepts/cache","unlisted":false},{"type":"link","label":"File groups","href":"/docs/concepts/file-group","docId":"concepts/file-group","unlisted":false},{"type":"link","label":"File patterns","href":"/docs/concepts/file-pattern","docId":"concepts/file-pattern","unlisted":false},{"type":"link","label":"Query language","href":"/docs/concepts/query-lang","docId":"concepts/query-lang","unlisted":false},{"type":"link","label":"Projects","href":"/docs/concepts/project","docId":"concepts/project","unlisted":false},{"type":"link","label":"Targets","href":"/docs/concepts/target","docId":"concepts/target","unlisted":false},{"type":"link","label":"Tasks","href":"/docs/concepts/task","docId":"concepts/task","unlisted":false},{"type":"link","label":"Task inheritance","href":"/docs/concepts/task-inheritance","docId":"concepts/task-inheritance","unlisted":false},{"type":"link","label":"Tokens","href":"/docs/concepts/token","docId":"concepts/token","unlisted":false},{"type":"link","label":"Toolchain","href":"/docs/concepts/toolchain","docId":"concepts/toolchain","unlisted":false},{"type":"link","label":"Workspace","href":"/docs/concepts/workspace","docId":"concepts/workspace","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/concepts"},{"type":"category","label":"Config files","items":[{"type":"link","label":".moon/workspace.yml","href":"/docs/config/workspace","docId":"config/workspace","unlisted":false},{"type":"link","label":".moon/toolchain.yml","href":"/docs/config/toolchain","docId":"config/toolchain","unlisted":false},{"type":"link","label":".moon/tasks...","href":"/docs/config/tasks","docId":"config/tasks","unlisted":false},{"type":"link","label":"moon.yml","href":"/docs/config/project","docId":"config/project","unlisted":false},{"type":"link","label":"template.yml","href":"/docs/config/template","docId":"config/template","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/config"},{"type":"category","label":"Editors","items":[{"type":"link","label":"VS Code","href":"/docs/editors/vscode","docId":"editors/vscode","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/editors"},{"type":"category","label":"Commands","items":[{"type":"link","label":"Overview","href":"/docs/commands/overview","docId":"commands/overview","unlisted":false},{"type":"link","label":"action-graph","href":"/docs/commands/action-graph","docId":"commands/action-graph","unlisted":false},{"type":"link","label":"bin","href":"/docs/commands/bin","docId":"commands/bin","unlisted":false},{"type":"link","label":"ci","href":"/docs/commands/ci","docId":"commands/ci","unlisted":false},{"type":"link","label":"check","href":"/docs/commands/check","docId":"commands/check","unlisted":false},{"type":"link","label":"clean","href":"/docs/commands/clean","docId":"commands/clean","unlisted":false},{"type":"link","label":"completions","href":"/docs/commands/completions","docId":"commands/completions","unlisted":false},{"type":"category","label":"docker","items":[{"type":"link","label":"prune","href":"/docs/commands/docker/prune","docId":"commands/docker/prune","unlisted":false},{"type":"link","label":"scaffold","href":"/docs/commands/docker/scaffold","docId":"commands/docker/scaffold","unlisted":false},{"type":"link","label":"setup","href":"/docs/commands/docker/setup","docId":"commands/docker/setup","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/docker"},{"type":"link","label":"generate","href":"/docs/commands/generate","docId":"commands/generate","unlisted":false},{"type":"link","label":"init","href":"/docs/commands/init","docId":"commands/init","unlisted":false},{"type":"category","label":"migrate","items":[{"type":"link","label":"from-package-json","href":"/docs/commands/migrate/from-package-json","docId":"commands/migrate/from-package-json","unlisted":false},{"type":"link","label":"from-turborepo","href":"/docs/commands/migrate/from-turborepo","docId":"commands/migrate/from-turborepo","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/migrate"},{"type":"link","label":"project","href":"/docs/commands/project","docId":"commands/project","unlisted":false},{"type":"link","label":"project-graph","href":"/docs/commands/project-graph","docId":"commands/project-graph","unlisted":false},{"type":"category","label":"query","items":[{"type":"link","label":"hash","href":"/docs/commands/query/hash","docId":"commands/query/hash","unlisted":false},{"type":"link","label":"hash-diff","href":"/docs/commands/query/hash-diff","docId":"commands/query/hash-diff","unlisted":false},{"type":"link","label":"projects","href":"/docs/commands/query/projects","docId":"commands/query/projects","unlisted":false},{"type":"link","label":"tasks","href":"/docs/commands/query/tasks","docId":"commands/query/tasks","unlisted":false},{"type":"link","label":"touched-files","href":"/docs/commands/query/touched-files","docId":"commands/query/touched-files","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/query"},{"type":"link","label":"run","href":"/docs/commands/run","docId":"commands/run","unlisted":false},{"type":"link","label":"setup","href":"/docs/commands/setup","docId":"commands/setup","unlisted":false},{"type":"category","label":"sync","items":[{"type":"link","label":"codeowners","href":"/docs/commands/sync/codeowners","docId":"commands/sync/codeowners","unlisted":false},{"type":"link","label":"hooks","href":"/docs/commands/sync/hooks","docId":"commands/sync/hooks","unlisted":false},{"type":"link","label":"projects","href":"/docs/commands/sync/projects","docId":"commands/sync/projects","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands/sync"},{"type":"link","label":"task","href":"/docs/commands/task","docId":"commands/task","unlisted":false},{"type":"link","label":"teardown","href":"/docs/commands/teardown","docId":"commands/teardown","unlisted":false},{"type":"link","label":"upgrade","href":"/docs/commands/upgrade","docId":"commands/upgrade","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/commands"},{"type":"link","label":"Cheat sheet","href":"/docs/cheat-sheet","docId":"cheat-sheet","unlisted":false},{"type":"link","label":"Feature comparison","href":"/docs/comparison","docId":"comparison","unlisted":false},{"type":"link","label":"Terminology","href":"/docs/terminology","docId":"terminology","unlisted":false},{"type":"link","label":"FAQ","href":"/docs/faq","docId":"faq","unlisted":false},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/moon/releases"}],"guides":[{"type":"link","label":"Continuous integration (CI)","href":"/docs/guides/ci","docId":"guides/ci","unlisted":false},{"type":"link","label":"Code generation","href":"/docs/guides/codegen","docId":"guides/codegen","unlisted":false},{"type":"link","label":"Code owners","href":"/docs/guides/codeowners","docId":"guides/codeowners","unlisted":false},{"type":"link","label":"Debugging a task","href":"/docs/guides/debug-task","docId":"guides/debug-task","unlisted":false},{"type":"link","label":"Docker usage","href":"/docs/guides/docker","docId":"guides/docker","unlisted":false},{"type":"link","label":"Offline mode","href":"/docs/guides/offline-mode","docId":"guides/offline-mode","unlisted":false},{"type":"link","label":"Open source usage","href":"/docs/guides/open-source","docId":"guides/open-source","unlisted":false},{"type":"link","label":"Remote caching","href":"/docs/guides/remote-cache","docId":"guides/remote-cache","unlisted":false},{"type":"link","label":"Root-level project","href":"/docs/guides/root-project","docId":"guides/root-project","unlisted":false},{"type":"link","label":"Sharing workspace configuration","href":"/docs/guides/sharing-config","docId":"guides/sharing-config","unlisted":false},{"type":"link","label":"Webhooks (experimental)","href":"/docs/guides/webhooks","docId":"guides/webhooks","unlisted":false},{"type":"link","label":"VCS hooks","href":"/docs/guides/vcs-hooks","docId":"guides/vcs-hooks","unlisted":false},{"type":"html","value":"
","defaultStyle":true},{"type":"category","label":"JavaScript","collapsed":false,"items":[{"type":"link","label":"Bun handbook","href":"/docs/guides/javascript/bun-handbook","docId":"guides/javascript/bun-handbook","unlisted":false},{"type":"link","label":"Deno handbook","href":"/docs/guides/javascript/deno-handbook","docId":"guides/javascript/deno-handbook","unlisted":false},{"type":"link","label":"Node.js handbook","href":"/docs/guides/javascript/node-handbook","docId":"guides/javascript/node-handbook","unlisted":false},{"type":"link","label":"Task profiling","href":"/docs/guides/profile","docId":"guides/profile","unlisted":false},{"type":"link","label":"TypeScript project references","href":"/docs/guides/javascript/typescript-project-refs","docId":"guides/javascript/typescript-project-refs","unlisted":false},{"type":"category","label":"Examples","collapsed":true,"collapsible":true,"items":[{"type":"link","label":"Angular","href":"/docs/guides/examples/angular","docId":"guides/examples/angular","unlisted":false},{"type":"link","label":"Astro","href":"/docs/guides/examples/astro","docId":"guides/examples/astro","unlisted":false},{"type":"link","label":"ESLint","href":"/docs/guides/examples/eslint","docId":"guides/examples/eslint","unlisted":false},{"type":"link","label":"Jest","href":"/docs/guides/examples/jest","docId":"guides/examples/jest","unlisted":false},{"type":"link","label":"Nest","href":"/docs/guides/examples/nest","docId":"guides/examples/nest","unlisted":false},{"type":"link","label":"Next","href":"/docs/guides/examples/next","docId":"guides/examples/next","unlisted":false},{"type":"link","label":"Nuxt","href":"/docs/guides/examples/nuxt","docId":"guides/examples/nuxt","unlisted":false},{"type":"link","label":"Packemon","href":"/docs/guides/examples/packemon","docId":"guides/examples/packemon","unlisted":false},{"type":"link","label":"Prettier","href":"/docs/guides/examples/prettier","docId":"guides/examples/prettier","unlisted":false},{"type":"link","label":"React","href":"/docs/guides/examples/react","docId":"guides/examples/react","unlisted":false},{"type":"link","label":"Remix","href":"/docs/guides/examples/remix","docId":"guides/examples/remix","unlisted":false},{"type":"link","label":"Solid","href":"/docs/guides/examples/solid","docId":"guides/examples/solid","unlisted":false},{"type":"link","label":"Storybook","href":"/docs/guides/examples/storybook","docId":"guides/examples/storybook","unlisted":false},{"type":"link","label":"SvelteKit","href":"/docs/guides/examples/sveltekit","docId":"guides/examples/sveltekit","unlisted":false},{"type":"link","label":"TypeScript","href":"/docs/guides/examples/typescript","docId":"guides/examples/typescript","unlisted":false},{"type":"link","label":"Vite & Vitest","href":"/docs/guides/examples/vite","docId":"guides/examples/vite","unlisted":false},{"type":"link","label":"Vue","href":"/docs/guides/examples/vue","docId":"guides/examples/vue","unlisted":false}],"href":"/docs/guides/node/examples"}],"collapsible":true},{"type":"html","value":"
","defaultStyle":true},{"type":"category","label":"Rust","collapsed":false,"items":[{"type":"link","label":"Handbook","href":"/docs/guides/rust/handbook","docId":"guides/rust/handbook","unlisted":false}],"collapsible":true}],"proto":[{"type":"link","label":"What is proto?","href":"/docs/proto/","docId":"proto/index","unlisted":false},{"type":"link","label":"Install proto","href":"/docs/proto/install","docId":"proto/install","unlisted":false},{"type":"link","label":"Version detection","href":"/docs/proto/detection","docId":"proto/detection","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/proto/config","docId":"proto/config","unlisted":false},{"type":"link","label":"Supported tools","href":"/docs/proto/tools","docId":"proto/tools","unlisted":false},{"type":"category","label":"Plugins","items":[{"type":"link","label":"TOML","href":"/docs/proto/toml-plugin","docId":"proto/toml-plugin","unlisted":false},{"type":"link","label":"WASM","href":"/docs/proto/wasm-plugin","docId":"proto/wasm-plugin","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/plugins"},{"type":"category","label":"Commands","items":[{"type":"link","label":"alias","href":"/docs/proto/commands/alias","docId":"proto/commands/alias","unlisted":false},{"type":"link","label":"bin","href":"/docs/proto/commands/bin","docId":"proto/commands/bin","unlisted":false},{"type":"link","label":"clean","href":"/docs/proto/commands/clean","docId":"proto/commands/clean","unlisted":false},{"type":"link","label":"completions","href":"/docs/proto/commands/completions","docId":"proto/commands/completions","unlisted":false},{"type":"category","label":"debug","items":[{"type":"link","label":"config","href":"/docs/proto/commands/debug/config","docId":"proto/commands/debug/config","unlisted":false},{"type":"link","label":"env","href":"/docs/proto/commands/debug/env","docId":"proto/commands/debug/env","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/commands/debug"},{"type":"link","label":"install","href":"/docs/proto/commands/install","docId":"proto/commands/install","unlisted":false},{"type":"link","label":"install-global","href":"/docs/proto/commands/install-global","docId":"proto/commands/install-global","unlisted":false},{"type":"link","label":"list","href":"/docs/proto/commands/list","docId":"proto/commands/list","unlisted":false},{"type":"link","label":"list-global","href":"/docs/proto/commands/list-global","docId":"proto/commands/list-global","unlisted":false},{"type":"link","label":"list-remote","href":"/docs/proto/commands/list-remote","docId":"proto/commands/list-remote","unlisted":false},{"type":"link","label":"outdated","href":"/docs/proto/commands/outdated","docId":"proto/commands/outdated","unlisted":false},{"type":"link","label":"pin","href":"/docs/proto/commands/pin","docId":"proto/commands/pin","unlisted":false},{"type":"link","label":"regen","href":"/docs/proto/commands/regen","docId":"proto/commands/regen","unlisted":false},{"type":"link","label":"run","href":"/docs/proto/commands/run","docId":"proto/commands/run","unlisted":false},{"type":"link","label":"setup","href":"/docs/proto/commands/setup","docId":"proto/commands/setup","unlisted":false},{"type":"category","label":"tool","items":[{"type":"link","label":"add","href":"/docs/proto/commands/tool/add","docId":"proto/commands/tool/add","unlisted":false},{"type":"link","label":"info","href":"/docs/proto/commands/tool/info","docId":"proto/commands/tool/info","unlisted":false},{"type":"link","label":"list","href":"/docs/proto/commands/tool/list","docId":"proto/commands/tool/list","unlisted":false},{"type":"link","label":"list-plugins","href":"/docs/proto/commands/tool/list-plugins","docId":"proto/commands/tool/list-plugins","unlisted":false},{"type":"link","label":"remove","href":"/docs/proto/commands/tool/remove","docId":"proto/commands/tool/remove","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/proto/commands/tool"},{"type":"link","label":"unalias","href":"/docs/proto/commands/unalias","docId":"proto/commands/unalias","unlisted":false},{"type":"link","label":"uninstall","href":"/docs/proto/commands/uninstall","docId":"proto/commands/uninstall","unlisted":false},{"type":"link","label":"uninstall-global","href":"/docs/proto/commands/uninstall-global","docId":"proto/commands/uninstall-global","unlisted":false},{"type":"link","label":"upgrade","href":"/docs/proto/commands/upgrade","docId":"proto/commands/upgrade","unlisted":false},{"type":"link","label":"use","href":"/docs/proto/commands/use","docId":"proto/commands/use","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQ","href":"/docs/proto/faq","docId":"proto/faq","unlisted":false},{"type":"link","label":"Changelog","href":"https://github.com/moonrepo/proto/releases"}]},"docs":{"cheat-sheet":{"id":"cheat-sheet","title":"Cheat sheet","description":"Don\'t have time to read the docs? Here\'s a quick cheat sheet to get you started.","sidebar":"docs"},"commands/action-graph":{"id":"commands/action-graph","title":"action-graph","description":"The moon action-graph [target] (or moon ag) command will generate and serve a visual graph of","sidebar":"docs"},"commands/bin":{"id":"commands/bin","title":"bin","description":"The moon bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"docs"},"commands/check":{"id":"commands/check","title":"check","description":"The moon check [...projects] (or moon c) command will run all","sidebar":"docs"},"commands/ci":{"id":"commands/ci","title":"ci","description":"The moon ci command is a special command that should be ran in a continuous integration (CI)","sidebar":"docs"},"commands/clean":{"id":"commands/clean","title":"clean","description":"The moon clean command will clean the current workspace by deleting stale cache. For the most","sidebar":"docs"},"commands/completions":{"id":"commands/completions","title":"completions","description":"The moon completions command will generate moon command and argument completions for your current","sidebar":"docs"},"commands/docker/prune":{"id":"commands/docker/prune","title":"docker prune","description":"The moon docker prune command will reduce the overall filesize of the Docker environment by","sidebar":"docs"},"commands/docker/scaffold":{"id":"commands/docker/scaffold","title":"docker scaffold","description":"The moon docker scaffold command creates multiple repository skeletons for use","sidebar":"docs"},"commands/docker/setup":{"id":"commands/docker/setup","title":"docker setup","description":"The moon docker setup command will efficiently install dependencies for focused projects. This is","sidebar":"docs"},"commands/generate":{"id":"commands/generate","title":"generate","description":"The moon generate (or moon g) command will generate code (files and folders) from a","sidebar":"docs"},"commands/init":{"id":"commands/init","title":"init","description":"The moon init command will initialize moon into a repository and scaffold necessary config files","sidebar":"docs"},"commands/migrate/from-package-json":{"id":"commands/migrate/from-package-json","title":"migrate from-package-json","description":"Use the moon migrate from-package-json sub-command to migrate a project\'s package.json","sidebar":"docs"},"commands/migrate/from-turborepo":{"id":"commands/migrate/from-turborepo","title":"migrate from-turborepo","description":"Use the moon migrate from-turborepo command to migrate a Turborepo powered repository to moon.","sidebar":"docs"},"commands/overview":{"id":"commands/overview","title":"Overview","description":"The following options are available for all moon commands.","sidebar":"docs"},"commands/project":{"id":"commands/project","title":"project","description":"The moon project (or moon p) command will display all available information about a","sidebar":"docs"},"commands/project-graph":{"id":"commands/project-graph","title":"project-graph","description":"The moon project-graph [name] (or moon pg) command will generate and serve a visual graph of all","sidebar":"docs"},"commands/query/hash":{"id":"commands/query/hash","title":"query hash","description":"Use the moon query hash sub-command to inspect the contents and sources of a generated hash, also","sidebar":"docs"},"commands/query/hash-diff":{"id":"commands/query/hash-diff","title":"query hash-diff","description":"Use the moon query hash-diff sub-command to query the content and source differences between 2","sidebar":"docs"},"commands/query/projects":{"id":"commands/query/projects","title":"query projects","description":"Use the moon query projects sub-command to query information about all projects in the project","sidebar":"docs"},"commands/query/tasks":{"id":"commands/query/tasks","title":"query tasks","description":"Use the moon query tasks sub-command to query task information for all projects in the project","sidebar":"docs"},"commands/query/touched-files":{"id":"commands/query/touched-files","title":"query touched-files","description":"Use the moon query touched-files sub-command to query for a list of touched files (added,","sidebar":"docs"},"commands/run":{"id":"commands/run","title":"run","description":"The moon run (or moon r) command will run one or many targets and all of","sidebar":"docs"},"commands/setup":{"id":"commands/setup","title":"setup","description":"The moon setup command can be used to setup the developer and pipeline environments. It achieves","sidebar":"docs"},"commands/sync/codeowners":{"id":"commands/sync/codeowners","title":"sync codeowners","description":"The moon sync codeowners command will manually sync code owners, by aggregating all owners from","sidebar":"docs"},"commands/sync/hooks":{"id":"commands/sync/hooks","title":"sync hooks","description":"The moon sync hooks command will manually sync hooks for the configured","sidebar":"docs"},"commands/sync/projects":{"id":"commands/sync/projects","title":"sync projects","description":"The moon sync projects command will force sync all projects in the workspace to help achieve a","sidebar":"docs"},"commands/task":{"id":"commands/task","title":"task","description":"The moon task (or moon t) command will display information about a task that has been","sidebar":"docs"},"commands/teardown":{"id":"commands/teardown","title":"teardown","description":"The moon teardown command, as its name infers, will teardown and clean the current environment,","sidebar":"docs"},"commands/upgrade":{"id":"commands/upgrade","title":"upgrade","description":"The moon upgrade command can be used to upgrade your current moon binary (if installed globally)","sidebar":"docs"},"comparison":{"id":"comparison","title":"Feature comparison","description":"The following comparisons are not an exhaustive list of features, and may be inaccurate or out of","sidebar":"docs"},"concepts/cache":{"id":"concepts/cache","title":"Cache","description":"moon\'s able to achieve high performance and blazing speeds by implementing a cache that\'s powered by","sidebar":"docs"},"concepts/file-group":{"id":"concepts/file-group","title":"File groups","description":"File groups are a mechanism for grouping similar types of files within a project using","sidebar":"docs"},"concepts/file-pattern":{"id":"concepts/file-pattern","title":"File patterns","description":"Globs","sidebar":"docs"},"concepts/project":{"id":"concepts/project","title":"Projects","description":"A project is a library, application, package, binary, tool, etc, that contains source files, test","sidebar":"docs"},"concepts/query-lang":{"id":"concepts/query-lang","title":"Query language","description":"moon supports an integrated query language, known as MQL, that can be used to filter and select","sidebar":"docs"},"concepts/target":{"id":"concepts/target","title":"Targets","description":"A target is a compound identifier that pairs a scope to a task, separated by a","sidebar":"docs"},"concepts/task":{"id":"concepts/task","title":"Tasks","description":"Tasks are commands that are ran in the context of a project. Underneath the hood, a","sidebar":"docs"},"concepts/task-inheritance":{"id":"concepts/task-inheritance","title":"Task inheritance","description":"Unlike other task runners that require the same tasks to be repeatedly defined for every project,","sidebar":"docs"},"concepts/token":{"id":"concepts/token","title":"Tokens","description":"Tokens are variables and functions that can be used by command,","sidebar":"docs"},"concepts/toolchain":{"id":"concepts/toolchain","title":"Toolchain","description":"The toolchain is an internal layer for downloading, installing, and managing tools (languages,","sidebar":"docs"},"concepts/workspace":{"id":"concepts/workspace","title":"Workspace","description":"A workspace is a directory that contains projects, manages a toolchain,","sidebar":"docs"},"config/project":{"id":"config/project","title":"moon.yml","description":"The moon.yml configuration file is not required but can be used to define additional metadata","sidebar":"docs"},"config/tasks":{"id":"config/tasks","title":".moon/tasks.yml, .moon/tasks/**/*.yml","description":"The .moon/tasks.yml file configures file groups and tasks that are inherited by every project in","sidebar":"docs"},"config/template":{"id":"config/template","title":"template.yml","description":"The template.yml file configures metadata and variables for a template,","sidebar":"docs"},"config/toolchain":{"id":"config/toolchain","title":".moon/toolchain.yml","description":"The .moon/toolchain.yml file configures the toolchain and the workspace development environment.","sidebar":"docs"},"config/workspace":{"id":"config/workspace","title":".moon/workspace.yml","description":"The .moon/workspace.yml file configures projects and services in the workspace. This file is","sidebar":"docs"},"create-project":{"id":"create-project","title":"Create a project","description":"With a workspace, we can now house one or many projects,","sidebar":"docs"},"create-task":{"id":"create-task","title":"Create a task","description":"The primary focus of moon is a task runner, and for it to operate in any capacity, it requires tasks","sidebar":"docs"},"editors/vscode":{"id":"editors/vscode","title":"VS Code extension","description":"Enhance your VS Code experience with our integrated moon console! Whether you\'re a fan of the","sidebar":"docs"},"faq":{"id":"faq","title":"FAQ","description":"General","sidebar":"docs"},"guides/ci":{"id":"guides/ci","title":"Continuous integration (CI)","description":"All companies and projects rely on continuous integration (CI) to ensure high quality code and to","sidebar":"guides"},"guides/codegen":{"id":"guides/codegen","title":"Code generation","description":"Code generation provides an easy mechanism for automating common development workflows and file","sidebar":"guides"},"guides/codeowners":{"id":"guides/codeowners","title":"Code owners","description":"Code owners enables companies to define individuals, teams, or groups that are responsible for code","sidebar":"guides"},"guides/debug-task":{"id":"guides/debug-task","title":"Debugging a task","description":"Running tasks is the most common way to interact with moon, so what do you do","sidebar":"guides"},"guides/docker":{"id":"guides/docker","title":"Docker usage","description":"Using Docker to run your applications? Or build your artifacts? No","sidebar":"guides"},"guides/examples/angular":{"id":"guides/examples/angular","title":"Angular example","description":"In this guide, you\'ll learn how to integrate Angular into moon.","sidebar":"guides"},"guides/examples/astro":{"id":"guides/examples/astro","title":"Astro example","description":"In this guide, you\'ll learn how to integrate Astro.","sidebar":"guides"},"guides/examples/eslint":{"id":"guides/examples/eslint","title":"ESLint example","description":"In this guide, you\'ll learn how to integrate ESLint into moon.","sidebar":"guides"},"guides/examples/jest":{"id":"guides/examples/jest","title":"Jest example","description":"In this guide, you\'ll learn how to integrate Jest into moon.","sidebar":"guides"},"guides/examples/nest":{"id":"guides/examples/nest","title":"Nest example","description":"In this guide, you\'ll learn how to integrate NestJS into moon.","sidebar":"guides"},"guides/examples/next":{"id":"guides/examples/next","title":"Next example","description":"In this guide, you\'ll learn how to integrate Next.js into moon.","sidebar":"guides"},"guides/examples/nuxt":{"id":"guides/examples/nuxt","title":"Nuxt example","description":"In this guide, you\'ll learn how to integrate Nuxt v3, a Vue framework,","sidebar":"guides"},"guides/examples/packemon":{"id":"guides/examples/packemon","title":"Packemon example","description":"In this guide, you\'ll learn how to integrate Packemon into moon. Packemon","sidebar":"guides"},"guides/examples/prettier":{"id":"guides/examples/prettier","title":"Prettier example","description":"In this guide, you\'ll learn how to integrate Prettier into moon.","sidebar":"guides"},"guides/examples/react":{"id":"guides/examples/react","title":"React example","description":"React is an application or library concern, and not a build system one, since the bundling of React","sidebar":"guides"},"guides/examples/remix":{"id":"guides/examples/remix","title":"Remix example","description":"In this guide, you\'ll learn how to integrate Remix into moon.","sidebar":"guides"},"guides/examples/solid":{"id":"guides/examples/solid","title":"Solid example","description":"Solid (also known as SolidJS) is a JavaScript framework for building","sidebar":"guides"},"guides/examples/storybook":{"id":"guides/examples/storybook","title":"Storybook example","description":"Storybook is a frontend workshop for building UI components and pages in isolation. Thousands of","sidebar":"guides"},"guides/examples/sveltekit":{"id":"guides/examples/sveltekit","title":"SvelteKit example","description":"SvelteKit is built on Svelte, a UI framework that","sidebar":"guides"},"guides/examples/typescript":{"id":"guides/examples/typescript","title":"TypeScript example","description":"In this guide, you\'ll learn how to integrate TypeScript into moon. We\'ll be","sidebar":"guides"},"guides/examples/vite":{"id":"guides/examples/vite","title":"Vite & Vitest example","description":"In this guide, you\'ll learn how to integrate Vite and","sidebar":"guides"},"guides/examples/vue":{"id":"guides/examples/vue","title":"Vue example","description":"Vue is an application or library concern, and not a build system one, since the bundling of Vue is","sidebar":"guides"},"guides/javascript/bun-handbook":{"id":"guides/javascript/bun-handbook","title":"Bun handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/deno-handbook":{"id":"guides/javascript/deno-handbook","title":"Deno handbook","description":"Utilizing Deno in a TypeScript based monorepo can be a non-trivial task. With this handbook, we\'ll","sidebar":"guides"},"guides/javascript/node-handbook":{"id":"guides/javascript/node-handbook","title":"Node.js handbook","description":"Utilizing JavaScript (and TypeScript) in a monorepo can be a daunting task, especially when using","sidebar":"guides"},"guides/javascript/typescript-eslint":{"id":"guides/javascript/typescript-eslint","title":"typescript-eslint","description":"ESLint integration"},"guides/javascript/typescript-project-refs":{"id":"guides/javascript/typescript-project-refs","title":"TypeScript project references","description":"The ultimate in-depth guide for using TypeScript in a monorepo effectively!","sidebar":"guides"},"guides/offline-mode":{"id":"guides/offline-mode","title":"Offline mode","description":"moon assumes that an internet connection is always available, as we download and install tools into","sidebar":"guides"},"guides/open-source":{"id":"guides/open-source","title":"Open source usage","description":"Although moon was designed for large monorepos, it can also be used for open source projects,","sidebar":"guides"},"guides/profile":{"id":"guides/profile","title":"Task profiling","description":"Troubleshooting slow or unperformant tasks? Profile and diagnose them with ease!","sidebar":"guides"},"guides/remote-cache":{"id":"guides/remote-cache","title":"Remote caching","description":"Is your CI pipeline running slower than usual? Are you tired of running the same build over and over","sidebar":"guides"},"guides/root-project":{"id":"guides/root-project","title":"Root-level project","description":"Coming from other repositories or task runner, you may be familiar with tasks available at the","sidebar":"guides"},"guides/rust/handbook":{"id":"guides/rust/handbook","title":"Rust handbook","description":"Utilizing Rust in a monorepo is a trivial task, thanks to Cargo, and also moon. With this handbook,","sidebar":"guides"},"guides/sharing-config":{"id":"guides/sharing-config","title":"Sharing workspace configuration","description":"For large companies, open source maintainers, and those that love reusability, more often than not","sidebar":"guides"},"guides/vcs-hooks":{"id":"guides/vcs-hooks","title":"VCS hooks","description":"VCS hooks (most popular with Git) are a","sidebar":"guides"},"guides/webhooks":{"id":"guides/webhooks","title":"Webhooks (experimental)","description":"Looking to gather metrics for your pipelines? Gain insight into run durations and failures? Maybe","sidebar":"guides"},"how-it-works/action-graph":{"id":"how-it-works/action-graph","title":"Action graph","description":"When you run a task on the command line, we generate an action graph to","sidebar":"docs"},"how-it-works/languages":{"id":"how-it-works/languages","title":"Languages","description":"Although moon is currently focusing on the JavaScript ecosystem, our long-term vision is to be a","sidebar":"docs"},"how-it-works/project-graph":{"id":"how-it-works/project-graph","title":"Project graph","description":"The project graph is a representation of all configured","sidebar":"docs"},"install":{"id":"install","title":"Install moon","description":"The following guide can be used to install moon and integrate it into an existing repository (with","sidebar":"docs"},"intro":{"id":"intro","title":"Introduction","description":"moonrepo is a productivity platform that aims to eliminate pain points for both developers and","sidebar":"docs"},"migrate-to-moon":{"id":"migrate-to-moon","title":"Migrate to moon","description":"Now that we\'ve talked about the workspace, projects, tasks, and more, we must talk about something","sidebar":"docs"},"proto/commands/alias":{"id":"proto/commands/alias","title":"alias","description":"The proto alias (or proto a) command will define a custom alias that","sidebar":"proto"},"proto/commands/bin":{"id":"proto/commands/bin","title":"bin","description":"The proto bin command will return an absolute path to a tool\'s binary within the toolchain.","sidebar":"proto"},"proto/commands/clean":{"id":"proto/commands/clean","title":"clean","description":"The proto clean command can be used to uninstall stale and unused tools or plugins. By default, it","sidebar":"proto"},"proto/commands/completions":{"id":"proto/commands/completions","title":"completions","description":"The proto completions command will generate proto command and argument completions for your","sidebar":"proto"},"proto/commands/debug/config":{"id":"proto/commands/debug/config","title":"debug config","description":"The proto debug config command will list all .prototools configuration files (in TOML format)","sidebar":"proto"},"proto/commands/debug/env":{"id":"proto/commands/debug/env","title":"debug env","description":"The proto debug env command will print information about your current proto environment. Primarily","sidebar":"proto"},"proto/commands/install":{"id":"proto/commands/install","title":"install","description":"The proto install (or proto i) command will download and install a tool by unpacking","sidebar":"proto"},"proto/commands/install-global":{"id":"proto/commands/install-global","title":"install-global","description":"The proto install-global ... (or proto ig) command will install one or many","sidebar":"proto"},"proto/commands/list":{"id":"proto/commands/list","title":"list","description":"The proto list (or proto ls) command will list installed versions by scanning the","sidebar":"proto"},"proto/commands/list-global":{"id":"proto/commands/list-global","title":"list-global","description":"The proto list-global (or proto lsg) command will list installed global dependencies (and","sidebar":"proto"},"proto/commands/list-remote":{"id":"proto/commands/list-remote","title":"list-remote","description":"The proto list-remote (or proto lsr) command will list available versions by resolving","sidebar":"proto"},"proto/commands/outdated":{"id":"proto/commands/outdated","title":"outdated","description":"The proto outdated command will load all .prototools files and check for newer versions of each","sidebar":"proto"},"proto/commands/pin":{"id":"proto/commands/pin","title":"pin","description":"The proto pin command will pin a version (or alias) of a tool. By default it will","sidebar":"proto"},"proto/commands/regen":{"id":"proto/commands/regen","title":"regen","description":"The proto regen command can be used to regenerate all shims in the ~/.proto/shims directory.","sidebar":"proto"},"proto/commands/run":{"id":"proto/commands/run","title":"run","description":"The proto run (or proto r) command will run a tool after","sidebar":"proto"},"proto/commands/setup":{"id":"proto/commands/setup","title":"setup","description":"The proto setup command will setup proto in your current shell by modifying an applicable profile","sidebar":"proto"},"proto/commands/tool/add":{"id":"proto/commands/tool/add","title":"tool add","description":"The proto tool add command (formerly proto add-plugin) will add the provided ID","sidebar":"proto"},"proto/commands/tool/info":{"id":"proto/commands/tool/info","title":"tool info","description":"The proto tool info command will display information about a tool and its plugin.","sidebar":"proto"},"proto/commands/tool/list":{"id":"proto/commands/tool/list","title":"tool list","description":"The proto tool list command (formerly proto tools) will list all tools that have been installed,","sidebar":"proto"},"proto/commands/tool/list-plugins":{"id":"proto/commands/tool/list-plugins","title":"tool list-plugins","description":"The proto tool list-plugins command (formerly proto plugins) will list all available and","sidebar":"proto"},"proto/commands/tool/remove":{"id":"proto/commands/tool/remove","title":"tool remove","description":"The proto tool remove command (formerly proto remove-plugin) will remove the provided","sidebar":"proto"},"proto/commands/unalias":{"id":"proto/commands/unalias","title":"unalias","description":"The proto unalias (or proto ua) command will remove a custom alias for the","sidebar":"proto"},"proto/commands/uninstall":{"id":"proto/commands/uninstall","title":"uninstall","description":"The proto uninstall (or proto ui) command will uninstall and remove a tool from","sidebar":"proto"},"proto/commands/uninstall-global":{"id":"proto/commands/uninstall-global","title":"uninstall-global","description":"The proto uninstall-global ... (or proto ug) command will uninstall one or","sidebar":"proto"},"proto/commands/upgrade":{"id":"proto/commands/upgrade","title":"upgrade","description":"The proto upgrade (or proto up) command can be used to upgrade your current proto binary to the","sidebar":"proto"},"proto/commands/use":{"id":"proto/commands/use","title":"use","description":"The proto use (or proto u) command will download and install all tools and plugins from all","sidebar":"proto"},"proto/config":{"id":"proto/config","title":"Configuration","description":"We support configuration at both the project-level and user-level using a","sidebar":"proto"},"proto/detection":{"id":"proto/detection","title":"Version detection","description":"The most powerful feature in proto is its contextual version detection, that is triggered with","sidebar":"proto"},"proto/faq":{"id":"proto/faq","title":"FAQ","description":"General","sidebar":"proto"},"proto/index":{"id":"proto/index","title":"What is proto?","description":"proto is a pluggable version manager, a unified toolchain.","sidebar":"proto"},"proto/install":{"id":"proto/install","title":"Install proto","description":"The following guide can be used to install proto into your environment.","sidebar":"proto"},"proto/plugins":{"id":"proto/plugins","title":"Plugins","description":"proto supports a pluggable architecture as a means for consumers to integrate and manage custom","sidebar":"proto"},"proto/toml-plugin":{"id":"proto/toml-plugin","title":"TOML plugin","description":"The TOML plugin is by design, very simple. It\'s a TOML file that describes a schema for the tool,","sidebar":"proto"},"proto/tools":{"id":"proto/tools","title":"Supported tools","description":"Built-in","sidebar":"proto"},"proto/wasm-plugin":{"id":"proto/wasm-plugin","title":"WASM plugin","description":"Plugins can be written in WebAssembly (WASM), a portable binary format.","sidebar":"proto"},"run-task":{"id":"run-task","title":"Run a task","description":"Even though we\'ve created a task, it\'s not useful unless we run it, which is done","sidebar":"docs"},"setup-toolchain":{"id":"setup-toolchain","title":"Setup toolchain","description":"One of moon\'s most powerful features is the toolchain, which automatically","sidebar":"docs"},"setup-workspace":{"id":"setup-workspace","title":"Setup workspace","description":"Once moon has been installed, we must setup the workspace,","sidebar":"docs"},"terminology":{"id":"terminology","title":"Terminology","description":"| Term | Description |","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a07ef81b.aa2f290c.js b/assets/js/a07ef81b.855ddaa3.js similarity index 59% rename from assets/js/a07ef81b.aa2f290c.js rename to assets/js/a07ef81b.855ddaa3.js index 06074c8991b..5e388931a52 100644 --- a/assets/js/a07ef81b.aa2f290c.js +++ b/assets/js/a07ef81b.855ddaa3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11823],{39322:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>g,frontMatter:()=>a,metadata:()=>m,toc:()=>l});var o=n(24246),s=n(71670);const a={slug:"moon-v1.19",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",authors:["milesj"],tags:["task","deps","args","env","codegen","templates","experiments"],image:"./img/moon/v1.19.png"},r=void 0,m={permalink:"/blog/moon-v1.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2024-01-01_moon-v1.19.mdx",source:"@site/blog/2024-01-01_moon-v1.19.mdx",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",description:"In this release, we're introducing some long-awaited and requested improvements.",date:"2024-01-01T00:00:00.000Z",formattedDate:"January 1, 2024",tags:[{label:"task",permalink:"/blog/tags/task"},{label:"deps",permalink:"/blog/tags/deps"},{label:"args",permalink:"/blog/tags/args"},{label:"env",permalink:"/blog/tags/env"},{label:"codegen",permalink:"/blog/tags/codegen"},{label:"templates",permalink:"/blog/tags/templates"},{label:"experiments",permalink:"/blog/tags/experiments"}],readingTime:4.055,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.19",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",authors:["milesj"],tags:["task","deps","args","env","codegen","templates","experiments"],image:"./img/moon/v1.19.png"},unlisted:!1,nextItem:{title:"proto v0.26 - New native shim implementation",permalink:"/blog/proto-v0.26"}},i={image:n(99015).Z,authorsImageUrls:[void 0]},l=[];function p(e){const t={p:"p",...(0,s.a)(),...e.components};return(0,o.jsx)(t.p,{children:"In this release, we're introducing some long-awaited and requested improvements."})}function g(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},99015:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.19-8d5c4b963a6a8bbfd8990736ff5e5d39.png"},71670:(e,t,n)=>{n.d(t,{Z:()=>m,a:()=>r});var o=n(27378);const s={},a=o.createContext(s);function r(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function m(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11823],{39322:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>g,frontMatter:()=>a,metadata:()=>m,toc:()=>l});var o=n(24246),s=n(71670);const a={slug:"moon-v1.19",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",authors:["milesj"],tags:["task","deps","args","env","codegen","templates","experiments"],image:"./img/moon/v1.19.png"},r=void 0,m={permalink:"/blog/moon-v1.19",editUrl:"https://github.com/moonrepo/moon/tree/master/website/blog/2024-01-01_moon-v1.19.mdx",source:"@site/blog/2024-01-01_moon-v1.19.mdx",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",description:"In this release, we're introducing some long-awaited and requested improvements.",date:"2024-01-01T00:00:00.000Z",formattedDate:"January 1, 2024",tags:[{label:"task",permalink:"/blog/tags/task"},{label:"deps",permalink:"/blog/tags/deps"},{label:"args",permalink:"/blog/tags/args"},{label:"env",permalink:"/blog/tags/env"},{label:"codegen",permalink:"/blog/tags/codegen"},{label:"templates",permalink:"/blog/tags/templates"},{label:"experiments",permalink:"/blog/tags/experiments"}],readingTime:4.055,hasTruncateMarker:!0,authors:[{name:"Miles Johnson",title:"Founder, developer",url:"https://github.com/milesj",imageURL:"/img/authors/miles.jpg",key:"milesj"}],frontMatter:{slug:"moon-v1.19",title:"moon v1.19 - Improvements to task dependencies, codegen, and more",authors:["milesj"],tags:["task","deps","args","env","codegen","templates","experiments"],image:"./img/moon/v1.19.png"},unlisted:!1,prevItem:{title:"proto v0.27 - PowerShell profiles, shim regeneration, and more",permalink:"/blog/proto-v0.27"},nextItem:{title:"proto v0.26 - New native shim implementation",permalink:"/blog/proto-v0.26"}},i={image:n(99015).Z,authorsImageUrls:[void 0]},l=[];function p(e){const t={p:"p",...(0,s.a)(),...e.components};return(0,o.jsx)(t.p,{children:"In this release, we're introducing some long-awaited and requested improvements."})}function g(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},99015:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/v1.19-8d5c4b963a6a8bbfd8990736ff5e5d39.png"},71670:(e,t,n)=>{n.d(t,{Z:()=>m,a:()=>r});var o=n(27378);const s={},a=o.createContext(s);function r(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function m(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a20401e4.2360b220.js b/assets/js/a20401e4.2360b220.js deleted file mode 100644 index 42d50179cf1..00000000000 --- a/assets/js/a20401e4.2360b220.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70969],{53980:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var t=o(24246),s=o(71670);const l={title:"install"},a=void 0,r={id:"proto/commands/install",title:"install",description:"The proto install (or proto i) command will download and install a tool by unpacking",source:"@site/docs/proto/commands/install.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install",permalink:"/docs/proto/commands/install",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install.mdx",tags:[],version:"current",frontMatter:{title:"install"},sidebar:"proto",previous:{title:"config",permalink:"/docs/proto/commands/debug/config"},next:{title:"install-global",permalink:"/docs/proto/commands/install-global"}},i={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}];function d(e){const n={a:"a",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto install "})," (or ",(0,t.jsx)(n.code,{children:"proto i"}),") command will download and install a tool by unpacking\ntheir archive to ",(0,t.jsx)(n.code,{children:"~/.proto/tools/"}),". If the tool has already been installed, the command will\nexit early."]}),"\n",(0,t.jsxs)(n.p,{children:["The command is also smart enough to resolve partial versions, so 1, 1.2, and 1.2.3 are all\nacceptable. It even supports aliases when applicable, like ",(0,t.jsx)(n.code,{children:"latest"}),", ",(0,t.jsx)(n.code,{children:"next"}),", ",(0,t.jsx)(n.code,{children:"beta"}),", etc. To install\na canary release, use ",(0,t.jsx)(n.code,{children:"--canary"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto install deno 1.31\n$ proto install deno --canary\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Some tools run ",(0,t.jsx)(n.a,{href:"../tools",children:"post-install hooks"})," that support arbitrary arguments that can be passed\nafter ",(0,t.jsx)(n.code,{children:"--"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto install go -- --no-gobin\n"})}),"\n",(0,t.jsx)(n.h3,{id:"arguments",children:"Arguments"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Type of tool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[version]"}),' - Version of tool. Defaults to "latest".']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[-- ]"})," - Additional arguments to pass to post-install hooks."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--canary"})," - Install a canary (next, nightly, etc) version."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--pin"})," - Pin the resolved version as the global default, and create a symlink in ",(0,t.jsx)(n.code,{children:"~/.proto/bin"}),"."]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var t=o(27378);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a20401e4.c677b015.js b/assets/js/a20401e4.c677b015.js new file mode 100644 index 00000000000..2249d542d7f --- /dev/null +++ b/assets/js/a20401e4.c677b015.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70969],{53980:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var t=o(24246),s=o(71670);const l={title:"install"},a=void 0,r={id:"proto/commands/install",title:"install",description:"The proto install (or proto i) command will download and install a tool by unpacking",source:"@site/docs/proto/commands/install.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/install",permalink:"/docs/proto/commands/install",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/install.mdx",tags:[],version:"current",frontMatter:{title:"install"},sidebar:"proto",previous:{title:"env",permalink:"/docs/proto/commands/debug/env"},next:{title:"install-global",permalink:"/docs/proto/commands/install-global"}},i={},c=[{value:"Arguments",id:"arguments",level:3},{value:"Options",id:"options",level:3}];function d(e){const n={a:"a",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto install "})," (or ",(0,t.jsx)(n.code,{children:"proto i"}),") command will download and install a tool by unpacking\ntheir archive to ",(0,t.jsx)(n.code,{children:"~/.proto/tools/"}),". If the tool has already been installed, the command will\nexit early."]}),"\n",(0,t.jsxs)(n.p,{children:["The command is also smart enough to resolve partial versions, so 1, 1.2, and 1.2.3 are all\nacceptable. It even supports aliases when applicable, like ",(0,t.jsx)(n.code,{children:"latest"}),", ",(0,t.jsx)(n.code,{children:"next"}),", ",(0,t.jsx)(n.code,{children:"beta"}),", etc. To install\na canary release, use ",(0,t.jsx)(n.code,{children:"--canary"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto install deno 1.31\n$ proto install deno --canary\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Some tools run ",(0,t.jsx)(n.a,{href:"../tools",children:"post-install hooks"})," that support arbitrary arguments that can be passed\nafter ",(0,t.jsx)(n.code,{children:"--"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ proto install go -- --no-gobin\n"})}),"\n",(0,t.jsx)(n.h3,{id:"arguments",children:"Arguments"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:""})," - Type of tool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[version]"}),' - Version of tool. Defaults to "latest".']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[-- ]"})," - Additional arguments to pass to post-install hooks."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--canary"})," - Install a canary (next, nightly, etc) version."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--pin"})," - Pin the resolved version as the global default, and create a symlink in ",(0,t.jsx)(n.code,{children:"~/.proto/bin"}),"."]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var t=o(27378);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a452709a.98b6ebdb.js b/assets/js/a452709a.98b6ebdb.js new file mode 100644 index 00000000000..7c13d8ec4b3 --- /dev/null +++ b/assets/js/a452709a.98b6ebdb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46526],{53805:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>i});var t=n(24246),s=n(71670);const r={title:"use"},c=void 0,l={id:"proto/commands/use",title:"use",description:"The proto use (or proto u) command will download and install all tools and plugins from all",source:"@site/docs/proto/commands/use.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/use",permalink:"/docs/proto/commands/use",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/use.mdx",tags:[],version:"current",frontMatter:{title:"use"},sidebar:"proto",previous:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"},next:{title:"FAQ",permalink:"/docs/proto/faq"}},d={},i=[];function a(e){const o={a:"a",blockquote:"blockquote",code:"code",em:"em",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.p,{children:["The ",(0,t.jsx)(o.code,{children:"proto use"})," (or ",(0,t.jsx)(o.code,{children:"proto u"}),") command will download and install ",(0,t.jsx)(o.em,{children:"all"})," tools and plugins from all\nparent ",(0,t.jsx)(o.a,{href:"../config",children:(0,t.jsx)(o.code,{children:".prototools"})})," configuration files, and any ",(0,t.jsx)(o.a,{href:"../detection",children:"versions detected"})," in\nthe current working directory (if not defined in ",(0,t.jsx)(o.code,{children:".prototools"}),")."]}),"\n",(0,t.jsxs)(o.p,{children:["If ",(0,t.jsx)(o.a,{href:"../config#auto-clean",children:(0,t.jsx)(o.code,{children:"auto-clean"})})," is enabled, the command will also remove any stale or unused\ntools."]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-shell",children:"$ proto use\n"})}),"\n",(0,t.jsxs)(o.blockquote,{children:["\n",(0,t.jsxs)(o.p,{children:["This command ",(0,t.jsx)(o.em,{children:"does not"})," install tools for versions pinned in the global ",(0,t.jsx)(o.code,{children:"~/.proto/.prototools"}),"\nfile."]}),"\n"]})]})}function u(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},71670:(e,o,n)=>{n.d(o,{Z:()=>l,a:()=>c});var t=n(27378);const s={},r=t.createContext(s);function c(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function l(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a452709a.f3975434.js b/assets/js/a452709a.f3975434.js deleted file mode 100644 index 162fbfafe1a..00000000000 --- a/assets/js/a452709a.f3975434.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46526],{53805:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var t=n(24246),s=n(71670);const r={title:"use"},c=void 0,a={id:"proto/commands/use",title:"use",description:"The proto use (or proto u) command will download and install all tools and plugins from all",source:"@site/docs/proto/commands/use.mdx",sourceDirName:"proto/commands",slug:"/proto/commands/use",permalink:"/docs/proto/commands/use",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/use.mdx",tags:[],version:"current",frontMatter:{title:"use"},sidebar:"proto",previous:{title:"upgrade",permalink:"/docs/proto/commands/upgrade"},next:{title:"FAQ",permalink:"/docs/proto/faq"}},d={},l=[];function i(e){const o={a:"a",code:"code",em:"em",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.p,{children:["The ",(0,t.jsx)(o.code,{children:"proto use"})," (or ",(0,t.jsx)(o.code,{children:"proto u"}),") command will download and install ",(0,t.jsx)(o.em,{children:"all"})," tools and plugins from all\nparent ",(0,t.jsx)(o.a,{href:"../config",children:(0,t.jsx)(o.code,{children:".prototools"})})," configuration files, and any ",(0,t.jsx)(o.a,{href:"../detection",children:"versions detected"})," in\nthe current working directory (if not defined in ",(0,t.jsx)(o.code,{children:".prototools"}),")."]}),"\n",(0,t.jsxs)(o.p,{children:["If ",(0,t.jsx)(o.a,{href:"../config#auto-clean",children:(0,t.jsx)(o.code,{children:"auto-clean"})})," is enabled, the command will also remove any stale or unused\ntools."]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-shell",children:"$ proto use\n"})})]})}function u(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},71670:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>c});var t=n(27378);const s={},r=t.createContext(s);function c(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.0ac1cfe4.js b/assets/js/a7023ddc.0ac1cfe4.js deleted file mode 100644 index 0f9e991ce92..00000000000 --- a/assets/js/a7023ddc.0ac1cfe4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11713],{53457:l=>{l.exports=JSON.parse('[{"label":"task","permalink":"/blog/tags/task","count":2},{"label":"deps","permalink":"/blog/tags/deps","count":1},{"label":"args","permalink":"/blog/tags/args","count":1},{"label":"env","permalink":"/blog/tags/env","count":1},{"label":"codegen","permalink":"/blog/tags/codegen","count":1},{"label":"templates","permalink":"/blog/tags/templates","count":1},{"label":"experiments","permalink":"/blog/tags/experiments","count":1},{"label":"proto","permalink":"/blog/tags/proto","count":28},{"label":"shim","permalink":"/blog/tags/shim","count":4},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":9},{"label":"shell","permalink":"/blog/tags/shell","count":1},{"label":"id","permalink":"/blog/tags/id","count":1},{"label":"name","permalink":"/blog/tags/name","count":1},{"label":"project","permalink":"/blog/tags/project","count":4},{"label":"init","permalink":"/blog/tags/init","count":2},{"label":"onboarding","permalink":"/blog/tags/onboarding","count":1},{"label":"linux","permalink":"/blog/tags/linux","count":2},{"label":"musl","permalink":"/blog/tags/musl","count":2},{"label":"gnu","permalink":"/blog/tags/gnu","count":1},{"label":"arm64","permalink":"/blog/tags/arm-64","count":1},{"label":"config","permalink":"/blog/tags/config","count":5},{"label":"tools","permalink":"/blog/tags/tools","count":1},{"label":"bun","permalink":"/blog/tags/bun","count":2},{"label":"typescript","permalink":"/blog/tags/typescript","count":3},{"label":"javascript","permalink":"/blog/tags/javascript","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":3},{"label":"automation","permalink":"/blog/tags/automation","count":1},{"label":"package","permalink":"/blog/tags/package","count":1},{"label":"manager","permalink":"/blog/tags/manager","count":1},{"label":"bin","permalink":"/blog/tags/bin","count":1},{"label":"checksum","permalink":"/blog/tags/checksum","count":1},{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.4a325d83.js b/assets/js/a7023ddc.4a325d83.js new file mode 100644 index 00000000000..adac3b41209 --- /dev/null +++ b/assets/js/a7023ddc.4a325d83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11713],{53457:l=>{l.exports=JSON.parse('[{"label":"proto","permalink":"/blog/tags/proto","count":29},{"label":"shim","permalink":"/blog/tags/shim","count":5},{"label":"bin","permalink":"/blog/tags/bin","count":2},{"label":"shell","permalink":"/blog/tags/shell","count":2},{"label":"profile","permalink":"/blog/tags/profile","count":1},{"label":"windows","permalink":"/blog/tags/windows","count":1},{"label":"task","permalink":"/blog/tags/task","count":2},{"label":"deps","permalink":"/blog/tags/deps","count":1},{"label":"args","permalink":"/blog/tags/args","count":1},{"label":"env","permalink":"/blog/tags/env","count":1},{"label":"codegen","permalink":"/blog/tags/codegen","count":1},{"label":"templates","permalink":"/blog/tags/templates","count":1},{"label":"experiments","permalink":"/blog/tags/experiments","count":1},{"label":"toolchain","permalink":"/blog/tags/toolchain","count":9},{"label":"id","permalink":"/blog/tags/id","count":1},{"label":"name","permalink":"/blog/tags/name","count":1},{"label":"project","permalink":"/blog/tags/project","count":4},{"label":"init","permalink":"/blog/tags/init","count":2},{"label":"onboarding","permalink":"/blog/tags/onboarding","count":1},{"label":"linux","permalink":"/blog/tags/linux","count":2},{"label":"musl","permalink":"/blog/tags/musl","count":2},{"label":"gnu","permalink":"/blog/tags/gnu","count":1},{"label":"arm64","permalink":"/blog/tags/arm-64","count":1},{"label":"config","permalink":"/blog/tags/config","count":5},{"label":"tools","permalink":"/blog/tags/tools","count":1},{"label":"bun","permalink":"/blog/tags/bun","count":2},{"label":"typescript","permalink":"/blog/tags/typescript","count":3},{"label":"javascript","permalink":"/blog/tags/javascript","count":1},{"label":"rust","permalink":"/blog/tags/rust","count":3},{"label":"automation","permalink":"/blog/tags/automation","count":1},{"label":"package","permalink":"/blog/tags/package","count":1},{"label":"manager","permalink":"/blog/tags/manager","count":1},{"label":"checksum","permalink":"/blog/tags/checksum","count":1},{"label":"action","permalink":"/blog/tags/action","count":2},{"label":"dependency","permalink":"/blog/tags/dependency","count":1},{"label":"graph","permalink":"/blog/tags/graph","count":3},{"label":"pipeline","permalink":"/blog/tags/pipeline","count":2},{"label":"railway","permalink":"/blog/tags/railway","count":1},{"label":"pin","permalink":"/blog/tags/pin","count":1},{"label":"global","permalink":"/blog/tags/global","count":2},{"label":"local","permalink":"/blog/tags/local","count":1},{"label":"outdated","permalink":"/blog/tags/outdated","count":1},{"label":"run","permalink":"/blog/tags/run","count":1},{"label":"target","permalink":"/blog/tags/target","count":2},{"label":"version","permalink":"/blog/tags/version","count":1},{"label":"ci","permalink":"/blog/tags/ci","count":3},{"label":"shorthand","permalink":"/blog/tags/shorthand","count":1},{"label":"http","permalink":"/blog/tags/http","count":1},{"label":"registry","permalink":"/blog/tags/registry","count":1},{"label":"index","permalink":"/blog/tags/index","count":1},{"label":"plugin","permalink":"/blog/tags/plugin","count":6},{"label":"tool","permalink":"/blog/tags/tool","count":1},{"label":"canary","permalink":"/blog/tags/canary","count":1},{"label":"python","permalink":"/blog/tags/python","count":1},{"label":"tasks","permalink":"/blog/tags/tasks","count":6},{"label":"wasm","permalink":"/blog/tags/wasm","count":5},{"label":"inheritance","permalink":"/blog/tags/inheritance","count":2},{"label":"project-graph","permalink":"/blog/tags/project-graph","count":2},{"label":"quality","permalink":"/blog/tags/quality","count":1},{"label":"life","permalink":"/blog/tags/life","count":1},{"label":"qol","permalink":"/blog/tags/qol","count":1},{"label":"ignore","permalink":"/blog/tags/ignore","count":1},{"label":"hasher","permalink":"/blog/tags/hasher","count":3},{"label":"vcs","permalink":"/blog/tags/vcs","count":2},{"label":"debug","permalink":"/blog/tags/debug","count":1},{"label":"git","permalink":"/blog/tags/git","count":1},{"label":"hooks","permalink":"/blog/tags/hooks","count":1},{"label":"logging","permalink":"/blog/tags/logging","count":1},{"label":"source","permalink":"/blog/tags/source","count":1},{"label":"code","permalink":"/blog/tags/code","count":1},{"label":"owners","permalink":"/blog/tags/owners","count":1},{"label":"ownership","permalink":"/blog/tags/ownership","count":1},{"label":"errors","permalink":"/blog/tags/errors","count":2},{"label":"github","permalink":"/blog/tags/github","count":2},{"label":"rfc","permalink":"/blog/tags/rfc","count":1},{"label":"log","permalink":"/blog/tags/log","count":1},{"label":"lang","permalink":"/blog/tags/lang","count":3},{"label":"tier","permalink":"/blog/tags/tier","count":1},{"label":"query","permalink":"/blog/tags/query","count":3},{"label":"tag","permalink":"/blog/tags/tag","count":1},{"label":"alias","permalink":"/blog/tags/alias","count":2},{"label":"detect","permalink":"/blog/tags/detect","count":1},{"label":"schema","permalink":"/blog/tags/schema","count":1},{"label":"toml","permalink":"/blog/tags/toml","count":1},{"label":"plugins","permalink":"/blog/tags/plugins","count":1},{"label":"tags","permalink":"/blog/tags/tags","count":2},{"label":"globals","permalink":"/blog/tags/globals","count":2},{"label":"clean","permalink":"/blog/tags/clean","count":1},{"label":"tokens","permalink":"/blog/tags/tokens","count":2},{"label":"projects","permalink":"/blog/tags/projects","count":2},{"label":"constraints","permalink":"/blog/tags/constraints","count":1},{"label":"env-vars","permalink":"/blog/tags/env-vars","count":1},{"label":"npm","permalink":"/blog/tags/npm","count":1},{"label":"go","permalink":"/blog/tags/go","count":1},{"label":"docker","permalink":"/blog/tags/docker","count":2},{"label":"hash","permalink":"/blog/tags/hash","count":1},{"label":"deno","permalink":"/blog/tags/deno","count":1},{"label":"moonbase","permalink":"/blog/tags/moonbase","count":4},{"label":"offline","permalink":"/blog/tags/offline","count":1},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"remote-cache","permalink":"/blog/tags/remote-cache","count":3},{"label":"survey","permalink":"/blog/tags/survey","count":1},{"label":"migrate","permalink":"/blog/tags/migrate","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"runner","permalink":"/blog/tags/runner","count":4},{"label":"language","permalink":"/blog/tags/language","count":1},{"label":"cache","permalink":"/blog/tags/cache","count":1},{"label":"hydration","permalink":"/blog/tags/hydration","count":1},{"label":"generator","permalink":"/blog/tags/generator","count":4},{"label":"monorepo","permalink":"/blog/tags/monorepo","count":1},{"label":"affected","permalink":"/blog/tags/affected","count":1},{"label":"dep-graph","permalink":"/blog/tags/dep-graph","count":1},{"label":"node","permalink":"/blog/tags/node","count":2},{"label":"notifier","permalink":"/blog/tags/notifier","count":1},{"label":"editors","permalink":"/blog/tags/editors","count":2},{"label":"vscode","permalink":"/blog/tags/vscode","count":2}]')}}]); \ No newline at end of file diff --git a/assets/js/af7c3e2d.f5a038ea.js b/assets/js/af7c3e2d.f5a038ea.js new file mode 100644 index 00000000000..7d7d7b7c4e4 --- /dev/null +++ b/assets/js/af7c3e2d.f5a038ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3779],{61195:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=o(24246),r=o(71670),s=o(79022);const i={title:"debug env",sidebar_label:"env"},a=void 0,c={id:"proto/commands/debug/env",title:"debug env",description:"The proto debug env command will print information about your current proto environment. Primarily",source:"@site/docs/proto/commands/debug/env.mdx",sourceDirName:"proto/commands/debug",slug:"/proto/commands/debug/env",permalink:"/docs/proto/commands/debug/env",draft:!1,unlisted:!1,editUrl:"https://github.com/moonrepo/moon/tree/master/website/docs/proto/commands/debug/env.mdx",tags:[],version:"current",frontMatter:{title:"debug env",sidebar_label:"env"},sidebar:"proto",previous:{title:"config",permalink:"/docs/proto/commands/debug/config"},next:{title:"install",permalink:"/docs/proto/commands/install"}},l={},d=[{value:"Options",id:"options",level:3}];function p(e){const n={code:"code",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Z,{version:"0.26.0",header:!0}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"proto debug env"})," command will print information about your current proto environment. Primarily\nthe store location, relevant file paths, and environment variables."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"$ proto debug env\n\nStore\n Root: ~/.proto\n Bins: ~/.proto/bin\n Shims: ~/.proto/shims\n Plugins: ~/.proto/plugins\n Tools: ~/.proto/tools\n Temp: ~/.proto/temp\n Virtual:\n /userhome - ~\n /proto - ~/.proto\n /workspace - ~/Projects/example\n Configs:\n - ~/Projects/example/.prototools\n - ~/.proto/.prototools\n\nEnvironment\n Proto version: 0.26.0\n Operating system: macos\n Architecture: arm64\n Variables:\n PROTO_HOME - ~/.proto\n PROTO_VERSION - 0.26.0\n"})}),"\n",(0,t.jsx)(n.h3,{id:"options",children:"Options"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--json"})," - Print the list in JSON format."]}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},79022:(e,n,o)=>{o.d(n,{Z:()=>s});var t=o(9619),r=o(24246);function s(e){let{header:n,inline:o,updated:s,version:i}=e;return(0,r.jsx)(t.Z,{text:`v${i}`,variant:s?"success":"info",className:n?"absolute right-0 top-1.5":o?"inline-block":"ml-2"})}},9619:(e,n,o)=>{o.d(n,{Z:()=>a});var t=o(40624),r=o(31792),s=o(24246);const i={failure:"bg-red-100 text-red-900",info:"bg-pink-100 text-pink-900",success:"bg-green-100 text-green-900",warning:"bg-orange-100 text-orange-900"};function a(e){let{className:n,icon:o,text:a,variant:c}=e;return(0,s.jsxs)("span",{className:(0,t.Z)("inline-flex items-center px-1 py-0.5 rounded text-xs font-bold uppercase",c?i[c]:"bg-gray-100 text-gray-800",n),children:[o&&(0,s.jsx)(r.Z,{icon:o,className:"mr-1"}),a]})}},71670:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>i});var t=o(27378);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.2813d60b.js b/assets/js/b2b675dd.daab3144.js similarity index 76% rename from assets/js/b2b675dd.2813d60b.js rename to assets/js/b2b675dd.daab3144.js index 6b30a9677c2..38ce3163ba9 100644 --- a/assets/js/b2b675dd.2813d60b.js +++ b/assets/js/b2b675dd.daab3144.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":7,"totalCount":62,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90533],{28017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":7,"totalCount":63,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.20af02de.js b/assets/js/b2f554cd.20af02de.js deleted file mode 100644 index cf28f73e8c7..00000000000 --- a/assets/js/b2f554cd.20af02de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11477],{30010:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"moon-v1.19","metadata":{"permalink":"/blog/moon-v1.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2024-01-01_moon-v1.19.mdx","source":"@site/blog/2024-01-01_moon-v1.19.mdx","title":"moon v1.19 - Improvements to task dependencies, codegen, and more","description":"In this release, we\'re introducing some long-awaited and requested improvements.","date":"2024-01-01T00:00:00.000Z","formattedDate":"January 1, 2024","tags":[{"label":"task","permalink":"/blog/tags/task"},{"label":"deps","permalink":"/blog/tags/deps"},{"label":"args","permalink":"/blog/tags/args"},{"label":"env","permalink":"/blog/tags/env"},{"label":"codegen","permalink":"/blog/tags/codegen"},{"label":"templates","permalink":"/blog/tags/templates"},{"label":"experiments","permalink":"/blog/tags/experiments"}],"readingTime":4.055,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.19","title":"moon v1.19 - Improvements to task dependencies, codegen, and more","authors":["milesj"],"tags":["task","deps","args","env","codegen","templates","experiments"],"image":"./img/moon/v1.19.png"},"unlisted":false,"nextItem":{"title":"proto v0.26 - New native shim implementation","permalink":"/blog/proto-v0.26"}},"content":"In this release, we\'re introducing some long-awaited and requested improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Configure args and env vars for task dependencies\\n\\nThis has been a long standing request from the community, and we\'re happy to finally deliver it.\\nStarting with v1.19, you can now configure optional command line arguments and environment variables\\nfor each task [`deps`](/docs/config/project#deps) entry. These values will be passed to the task\\nwhen it is executed.\\n\\nHere\'s an example of what both patterns look like. The `target` field is required when configuring\\nan object, and both the `args` and `env` fields can be mixed and matched.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'vite build\'\\n deps:\\n # Just a target\\n - \'^:build\'\\n\\n # With args (string)\\n - target: \'^:build\'\\n args: \'--mode production\'\\n\\n # With env vars\\n - target: \'^:build\'\\n env:\\n NODE_ENV: \'production\'\\n\\n # With args (array) and env vars\\n - target: \'^:build\'\\n args:\\n - \'--mode\'\\n - \'production\'\\n env:\\n NODE_ENV: \'production\'\\n```\\n\\nWhen using this functionality, there are a few things to understand about its implementation, and\\nhow it affects the rest of the pipeline:\\n\\n- When extending or inheriting a task and a merger is required, and this task has a dependency with\\n a colliding target, the `args` and `env` fields will _NOT_ be deeply merged. Whichever task is\\n inherited last will have its `deps` used.\\n- When multiple dependencies of the same target are ran in the action pipeline, but with differing\\n args or env vars, only 1 will run at a time. We try to avoid running them in parallel to avoid\\n collisions and corrupting outputs.\\n- Arguments and environment variables do _NOT_ support tokens.\\n- If dependencies all write to the same output, cleaning the output is your responsibility, not\\n moon\'s.\\n\\n## Codegen improvements\\n\\nCode generation is one of moon\'s oldest features, and hasn\'t been improved in quite a while. We felt\\nthe time was right to give it a little love.\\n\\n### Extend other templates\\n\\nThis has been a [request for over a year](https://github.com/moonrepo/moon/issues/434), and we\\nfinally found the time to put it on the roadmap. Starting with this release, you can now extend\\nother templates using the [`extends`](/docs/config/template#extends) setting in\\n[`template.yml`](/docs/config/template), which supports a list of template names.\\n\\nTemplates will be recursively extended from top to bottom, and all files and variables will be\\ninherited and merged at the top-level.\\n\\n```yaml title=\\"template.yml\\"\\ntitle: \'npm package\'\\nextends: [\'node-common\']\\n```\\n\\n### Configure a default destination\\n\\nWhen you call [`moon generate`](/docs/commands/generate) you must provide a destination directory\\nfor the generated files, or we\'ll prompt you to provide one. But what if you wanted to standardize\\nthe destination? For example, a package scaffolding template should go to `packages/`. This is now\\npossible with the optional [`destination`](/docs/config/template#destination) setting in\\n[`template.yml`](/docs/config/template).\\n\\nIf no destination is provided to `moon generate`, we\'ll use this default destination.\\n\\n```yaml title=\\"template.yml\\"\\ntitle: \'npm package\'\\ndestination: \'packages/[name | kebab_case]\'\\nvariables:\\n name:\\n type: \'string\'\\n default: \'\'\\n required: true\\n prompt: \'Package name?\'\\n```\\n\\n:::info\\n\\nFor better interoperability, this setting can also reference variables using `[var]` syntax, and can\\nalso use Tera filters. Learn more about this in the\\n[code generation documentation](/docs/guides/codegen#interpolation).\\n\\n:::\\n\\n## Resolved long-standing experiments\\n\\nmoon has a concept of [experiments](/docs/config/workspace#experiments), where certain features are\\ngated behind a flag. This allows us to support new and old functionality in parallel, and also allow\\nusers to gradually upgrade when encountering a breaking change. For many months now, we\'ve had 2\\nexperiments running, and have decided on a path forward.\\n\\nThe first is `experiments.interweavedTaskInheritance`, which would inherit global and local tasks in\\norder, interweaved within each other. The old implementation would inherit global first, then local\\nsecond, distinctly grouping them. Since this experiment was introduced, we have not received a\\nsingle bug report or issue. This is a good sign that the new behavior is working as expected, and as\\nsuch, have decided _to move forward_ with this experiment and make it the new implementation. The\\nold implementation has been removed entirely.\\n\\nThe second is `experiments.taskOutputBoundaries`, which was rather controversial when introduced.\\nThis experiment would trigger an error anytime a [task\'s `outputs`][outputs] overlapped within\\nanother [task\'s `outputs`][outputs]. The reason for this change, is that multiple tasks writing to\\nthe same output location could \\"corrupt\\" the expected state, and trigger unexpected results when\\nhydrating from the cache. However in practice, this restriction has caused more headache and\\nintroduced a steeper learning curve then expected. It also caused problems with\\n[tasks that extend](/docs/config/project#extends) from another, resulting in the same outputs being\\nused. Because of this, we\'ve decided _to **not** move forward_ with this experiment, and allow\\nwhatever task outputs you wish (we trust you\'re smart enough to not shoot yourself in the foot).\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.19.0) for a full list\\nof changes.\\n\\n- Updated proto to v0.26 (from v0.25), which includes a new shims implementation.\\n- Updated VS Code extension to support multiple VS Code workspace folders.\\n\\n[outputs]: /docs/config/project#outputs"},{"id":"proto-v0.26","metadata":{"permalink":"/blog/proto-v0.26","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-12-21_proto-v0.26.mdx","source":"@site/blog/2023-12-21_proto-v0.26.mdx","title":"proto v0.26 - New native shim implementation","description":"After many release candidates, and a ton of testing, proto v0.26 is finally here!","date":"2023-12-21T00:00:00.000Z","formattedDate":"December 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"}],"readingTime":2.1,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.26","title":"proto v0.26 - New native shim implementation","authors":["milesj"],"tags":["proto","shim"]},"unlisted":false,"prevItem":{"title":"moon v1.19 - Improvements to task dependencies, codegen, and more","permalink":"/blog/moon-v1.19"},"nextItem":{"title":"proto v0.26 (rc) - Release candidate available for testing!","permalink":"/blog/proto-v0.26-rc"}},"content":"After many release candidates, and a ton of testing, proto v0.26 is finally here!\\n\\n\x3c!--truncate--\x3e\\n\\n## Rethinking shims\\n\\nproto at its core is a version manager, which means like most version managers, it relies on a\\nconcept known as shims. Shims are lightweight executable scripts that act like a proxy to the\\nunderlying binary, and are useful for proto to intercept executions and inject custom functionality,\\nlike our dynamic version detection.\\n\\nOn Unix machines, we relied on Bash scripts for shims, which worked rather well. However, on\\nWindows, we relied on PowerShell scripts (`.ps1`), batch/cmd scripts (`.cmd`), and Bash scripts, all\\nwith differing levels of functionality, and each serving a separate purpose. Windows support _did\\nnot_ work well.\\n\\nTo avoid current and future compatibility issues, we needed a truly native solution, and that\'s\\nexactly what we did. In this release, we wrote our own Rust based executable, that will replace all\\nof the custom shim scripts. This new executable is named `proto-shim` (`proto-shim.exe` on Windows)\\nand is published alongside the `proto` binary.\\n\\nThis new executable solves all of the following problems (hopfully):\\n\\n- Locatable on `PATH` (is an `.exe` for Windows)\\n- Can pipe/redirect data\\n- Handles stdin prompts/interactivity\\n- Supports ctrl+c interruptions\\n- Passes parent signals to child processes (uses `execvp` on Unix)\\n- Attempts to kill child processes on parent exit\\n- Bubbles exit codes\\n- Native performance\\n- Doesn\'t require special privileges (no symlinks)\\n\\n## Upgrade troubleshooting\\n\\nBecause this release adds a new executable (`proto-shim`), you\'ll most likely run into issues when\\nupgrading via `proto upgrade`. The root issue is that the upgrade process was only aware of the\\nsingle `proto` file, and not the new `proto-shim` file, so it will not copy the shim into the\\ncorrect location, and subsequent proto commands will fail.\\n\\nWe could backport this change to v0.25, but it would require all users to upgrade to that patch\\nversion first before upgrading to v0.26. But this still wouldn\'t solve the issue for users upgrading\\nfrom v0.24, or an even earlier version.\\n\\nThe best way to remedy this situation is to simply\\n[re-install proto as a whole](/docs/proto/install). Once you\'re on v0.26, this will be a non-issue.\\n\\n```shell\\n# Unix\\ncurl -fsSL https://moonrepo.dev/install/proto.sh | bash\\n\\n# Windows\\nirm https://moonrepo.dev/install/proto.ps1 | iex\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.26.0) for a full list\\nof changes.\\n\\n- Added basic telemetry to track tool install/uninstall metrics.\\n- Fixed an issue where binaries were being symlinked with broken versions in their file name (most\\n commonly for Python)."},{"id":"proto-v0.26-rc","metadata":{"permalink":"/blog/proto-v0.26-rc","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-12-19_proto-v0.26-rc.mdx","source":"@site/blog/2023-12-19_proto-v0.26-rc.mdx","title":"proto v0.26 (rc) - Release candidate available for testing!","description":"We\'ve got a very special release candidate that we\'d love to stress test before an official release!","date":"2023-12-19T00:00:00.000Z","formattedDate":"December 19, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"}],"readingTime":2.9,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.26-rc","title":"proto v0.26 (rc) - Release candidate available for testing!","authors":["milesj"],"tags":["proto","shim"]},"unlisted":false,"prevItem":{"title":"proto v0.26 - New native shim implementation","permalink":"/blog/proto-v0.26"},"nextItem":{"title":"moon v1.18 - New task execution flow and custom project names","permalink":"/blog/moon-v1.18"}},"content":"We\'ve got a very special release candidate that we\'d love to stress test before an official release!\\n\\n\x3c!--truncate--\x3e\\n\\nproto at its core is a version manager, which means like most version managers, it relies on a\\nconcept known as shims. Shims are lightweight executable scripts that act like a proxy to the\\nunderlying binary, and are useful for proto to intercept executions and inject custom functionality,\\nlike our dynamic version detection.\\n\\nOn Unix machines, we relied on Bash scripts for shims, which worked rather well. However, on\\nWindows, we relied on PowerShell scripts (`.ps1`), batch/cmd scripts (`.cmd`), and Bash scripts, all\\nwith differing levels of functionality, and each serving a separate purpose. Windows support _did\\nnot_ work well.\\n\\n## What didn\'t work?\\n\\nWhen using shims, you must ensure that all the following scenarios work well: piping data/commands,\\nredirection, stdin prompts, interactivity, signal handling, exit code bubbling, so on and so forth.\\nBash solves a lot of this for us, but Windows does not have a native Bash shell, and thus we had to\\nrely on other scripting languages. The `.cmd` files barely supported any of this, and the `.ps1`\\nfiles were a bit better, but still not great.\\n\\nFor the most part, executing a shim as-is and doing basic work was fine, but once you needed a\\ncomplex scenario (like above), it broke down pretty quickly. It was also further exacerbated when\\ndealing with nested shim exections, for example, `npm` calls `node` under the hood. The parent shim\\nmay be executed with `.ps1` but the child may be `.cmd`, and these do not play well together.\\n\\nThe other problem on Windows is that scripts are not true executables, and are not easily located on\\n`PATH` (excluding `.cmd` files).\\n\\n## What\'s new?\\n\\nTo combat all of these problems, we needed a truly native solution, and that\'s exactly what we did.\\nWe wrote our own Rust based executable, that will replace all of the custom shim scripts, and can\\nproperly handle all of the required scenarios. This new executable is named `proto-shim`\\n(`proto-shim.exe` on Windows) and is published alongside the `proto` binary.\\n\\nThis new executable solves all of the following problems (hopfully):\\n\\n- Locatable on `PATH` (is an `.exe` for Windows)\\n- Can pipe/redirect data\\n- Handles stdin prompts/interactivity\\n- Supports ctrl+c interruptions\\n- Passes parent signals to child processes\\n- Attempts to kill child processes on parent exit\\n- Bubbles exit codes\\n- Native performance\\n- Doesn\'t require special privileges (no symlinks)\\n\\n## How to test?\\n\\nIf you\'re interested in testing this new implementation (we\'d appreciate it), you can do so by\\ndownloading the latest release candidate from GitHub: https://github.com/moonrepo/proto/releases\\n\\nOnce downloaded, unpack the archive, and move the `proto` and `proto-shim` binaries to the\\n`~/.proto/bin` directory (or the location of your `PROTO_INSTALL_DIR` environment variable). From\\nhere, you can execute `proto` or your tool binaries as normal.\\n\\n:::warning\\n\\nIf you run into issues, try deleting the old `~/.proto/shims` directory and trying again. If\\nproblems still persist, please report an issue or reach out to us on Discord!\\n\\n:::\\n\\n:::info\\n\\nOn macOS, you may need to add the binary to the trusted list, in your Priacy & Security settings.\\nThis can also be achieved on the command line with `xattr -c ~/.proto/bin/*`.\\n\\n:::\\n\\n## What to test?\\n\\nBasically everything. We want to ensure that all of the functionality in [What\'s new?](#whats-new)\\nworks as expected, so simply go about your day to day development and let us know if you run into\\nany issues!"},{"id":"moon-v1.18","metadata":{"permalink":"/blog/moon-v1.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-12-12_moon-v1.18.mdx","source":"@site/blog/2023-12-12_moon-v1.18.mdx","title":"moon v1.18 - New task execution flow and custom project names","description":"With this release, we\'ve focused heavily on 2 important aspects: task execution, and our onboarding","date":"2023-12-12T00:00:00.000Z","formattedDate":"December 12, 2023","tags":[{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"shell","permalink":"/blog/tags/shell"},{"label":"id","permalink":"/blog/tags/id"},{"label":"name","permalink":"/blog/tags/name"},{"label":"project","permalink":"/blog/tags/project"},{"label":"init","permalink":"/blog/tags/init"},{"label":"onboarding","permalink":"/blog/tags/onboarding"}],"readingTime":4.01,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.18","title":"moon v1.18 - New task execution flow and custom project names","authors":["milesj"],"tags":["toolchain","shell","id","name","project","init","onboarding"],"image":"./img/moon/v1.18.png"},"unlisted":false,"prevItem":{"title":"proto v0.26 (rc) - Release candidate available for testing!","permalink":"/blog/proto-v0.26-rc"},"nextItem":{"title":"proto v0.25 - Linux arm64 gnu and musl support","permalink":"/blog/proto-v0.25"}},"content":"With this release, we\'ve focused heavily on 2 important aspects: task execution, and our onboarding\\nflow.\\n\\n\x3c!--truncate--\x3e\\n\\n## New path based task execution\\n\\nSince moon\'s inception, before we would execute a task\'s command, we would locate its executable on\\nthe file system and execute it directly. We went with this approach as we wanted to avoid all of the\\nbaggage and \\"unknown behavior\\" that came with executing through a shell, and to ensure a more\\ndeterministic outcome. This approach worked very well for stand-alone binaries, like `node`,\\n`cargo`, and built-in commands like `rm`, `mkdir`, and `git`.\\n\\nHowever, it was very problematic in 2 scenarios: executables from language dependencies (Node.js\\nmodules, etc), and multi-command based tasks (using `&&`). To remedy this situation, we\'re no longer\\nlocating the executables ourselves, and instead are prepending `PATH` with the locations in which we\\nknow these executables should exist. We\'re also loosening the restriction on the\\n[`shell` task option](/docs/config/project#shell), which can now be enabled for _all_ tasks, not\\njust system tasks.\\n\\n### Dependency executables\\n\\nFor the 1st scenario, let\'s talk about Node.js modules. When we encountered an unknown task command,\\nlike `eslint` or `prettier`, we\'d attempt to locate its executable by traversing `node_modules/.bin`\\ndirectories, parsing Bash/PowerShell scripts, resolving the source `.js` files, and finally\\nexecuting with `node`. To demonstrate this, say you had the following task:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n format:\\n command: \'prettier --write .\'\\n```\\n\\nWhen finally executed, internally it would become something like this command:\\n\\n```shell\\n~/.proto/tools/node//bin/node ../../node_modules/prettier/internal/cli.mjs --write .\\n```\\n\\nThis was required since our runtime is Rust and we don\'t have access to Node.js\'s module resolution\\nalgorithm... but this approach was very brittle and error prone. It took us many releases to iron\\nout all the bugs, and we\'re pretty sure there are still edge cases unaccounted for. So instead, as\\nmentioned above, we now prepend `PATH`, resulting in the following command:\\n\\n```shell\\nPATH=\\"/path/to/node_modules/.bin:/path/to/proto/tools:$PATH\\" prettier --write .\\n```\\n\\nThis is a much cleaner approach and is far easier to understand as a user.\\n\\n### Multi-command tasks\\n\\nWhile not officially supported in moon, it\'s been possible to run multiple commands in a single task\\nusing `&&` syntax. However, this approach did not work correctly with our integrated toolchain, as\\nonly the 1st command in the list would have its binary be located and executed correctly.\\n\\nFor example, say we wanted to run 2 npm packages, the following would _not_ work:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'rm -rf dist && vite build && tsc --build\'\\n```\\n\\nWith this new `PATH` based approach, this will now work correctly. And furthermore, this also\\nenables executables within Bash and PowerShell scripts to be located and executed correctly as well.\\n\\n### What\'s next?\\n\\nIn the future, we\'ll continue to expand on this functionality, and our ultimate goal is to remove\\nthe concept of `platform` from tasks, which has been a bit confusing for new users.\\n\\n## Customize the project name in `moon.yml`\\n\\nThis has been a long requested feature, but thanks to the project graph rework and improvements over\\nthe last few releases, this is now possible. In [`moon.yml`](/docs/config/project), you can now\\nconfigure the [`id`](/docs/config/project#id) setting to override the project name (identifier)\\nderived from [`projects`](/docs/config/workspace#projects) in\\n[`.moon/workspace.yml`](/docs/config/workspace) (most applicable to glob based project locations).\\n\\nFor example, say we have the following `projects` glob.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nprojects:\\n - \'apps/*\'\\n - \'packages/*\'\\n```\\n\\nBy default, the project folder name becomes the project name. For the most part this is fine, but\\nwhat if you have a very large monorepo? Or have conflicting project names? Or are migrating\\nprojects? It becomes difficult to manage and organize. But now, simply configure `id`!\\n\\n```yaml title=\\"/moon.yml\\"\\nid: \'custom-project-name\'\\n```\\n\\n:::info\\n\\nBe sure that all targets, project dependencies, task dependencies, and other references are using\\nthe new identifier, otherwise an error will be triggered!\\n\\n:::\\n\\n## Improved onboarding flow\\n\\nWhile this doesn\'t affect current users, we still want to announce that we\'ve made some slight\\nchanges to our onboarding process and the [`moon init`](/docs/commands/init) command. The previous\\ncommand prompted far too many questions, as we would attempt to detect what languages are currently\\nin use, and integrate them into the toolchain.\\n\\nThis was confusing for new users, so starting with this release, we\'ve simplified the process to\\nonly create the moon workspace within a repository.\\n\\n```shell\\nmoon init\\n```\\n\\nWith that being said, you can still integrate tools into the toolchain, by passing the identifier of\\na supported moon tool as an argument.\\n\\n```shell\\nmoon init node # bun, rust, etc\\n```\\n\\n:::success\\n\\nWe\'ve also rewritten a good portion of the \\"[Getting started](/docs/setup-workspace)\\" documentation\\nto reflect these changes!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.18.0) for a full list\\nof changes.\\n\\n- Improved string allocation and performance for queries, task tokens, and process commands.\\n- Improved remote caching flow and handling.\\n- Updated proto to v0.25."},{"id":"proto-v0.25","metadata":{"permalink":"/blog/proto-v0.25","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-12-11_proto-v0.25.mdx","source":"@site/blog/2023-12-11_proto-v0.25.mdx","title":"proto v0.25 - Linux arm64 gnu and musl support","description":"This is a very small release that primarily adds support for Linux arm64 targets.","date":"2023-12-11T00:00:00.000Z","formattedDate":"December 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"linux","permalink":"/blog/tags/linux"},{"label":"musl","permalink":"/blog/tags/musl"},{"label":"gnu","permalink":"/blog/tags/gnu"},{"label":"arm64","permalink":"/blog/tags/arm-64"}],"readingTime":0.54,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.25","title":"proto v0.25 - Linux arm64 gnu and musl support","authors":["milesj"],"tags":["proto","linux","musl","gnu","arm64"]},"unlisted":false,"prevItem":{"title":"moon v1.18 - New task execution flow and custom project names","permalink":"/blog/moon-v1.18"},"nextItem":{"title":"proto v0.24 - Standardized configuration and 10x WASM boost","permalink":"/blog/proto-v0.24"}},"content":"This is a very small release that primarily adds support for Linux arm64 targets.\\n\\n\x3c!--truncate--\x3e\\n\\nThanks to [cargo-dist](https://github.com/axodotdev/cargo-dist), we can now build and distribute\\narm64 binaries with relative ease. When building the binary, libraries are statically linked to\\nensure that the binary can run on any Linux distribution.\\n\\nYou can download the binary from the official\\n[GitHub release](https://github.com/moonrepo/proto/releases/tag/v0.21.0) or by running the\\n[Bash installation script](/docs/proto/install#linux-macos-wsl).\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.25.0) for a full list\\nof changes.\\n\\n- Added a [`proto debug config`](/docs/proto/commands/debug/config) command, to debug all loaded\\n configs and the final merged config.\\n- Added a `PROTO_BYPASS_VERSION_CHECK` environment variable, to bypass loading and checking of\\n versions."},{"id":"proto-v0.24","metadata":{"permalink":"/blog/proto-v0.24","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-12-07_proto-v0.24.mdx","source":"@site/blog/2023-12-07_proto-v0.24.mdx","title":"proto v0.24 - Standardized configuration and 10x WASM boost","description":"In this release, we\'ve standardized our configuration from the ground-up.","date":"2023-12-07T00:00:00.000Z","formattedDate":"December 7, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"config","permalink":"/blog/tags/config"},{"label":"tools","permalink":"/blog/tags/tools"}],"readingTime":3.8,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.24","title":"proto v0.24 - Standardized configuration and 10x WASM boost","authors":["milesj"],"tags":["proto","config","tools"],"image":"./img/proto/v0.24.png"},"unlisted":false,"prevItem":{"title":"proto v0.25 - Linux arm64 gnu and musl support","permalink":"/blog/proto-v0.25"},"nextItem":{"title":"moon v1.17 - Full Bun support, TypeScript improvements, and more!","permalink":"/blog/moon-v1.17"}},"content":"In this release, we\'ve standardized our configuration from the ground-up.\\n\\n\x3c!--truncate--\x3e\\n\\n## Improved WASM performance up to 20x\\n\\nBefore we dive into the major changes of this release, we want to highlight the performance\\nimprovements that have landed recently. Thanks to [Dylibso](https://dylibso.com/) and the\\n[Extism](https://extism.org/) team, we\'ve been able to improve the performance of our WASM plugins\\nby 10-20x! This was achieved by plugging into wasmtime\'s ahead-of-time (AOT) compiler and caching\\nlayer.\\n\\nHere\'s an example of the performance improvements when running `node --version`. On older versions,\\nthe execution time was anywhere from 100ms-200ms, but is now down to 10-20ms! This is almost as fast\\nas native\'s 5-10ms!\\n\\n```shell\\n# proto v0.23.5 and below\\nhyperfine --warmup 10 -- \'node --version\'\\nBenchmark 1: node --version\\n Time (mean \xb1 \u03c3): 99.2 ms \xb1 6.3 ms [User: 662.5 ms, System: 79.4 ms]\\n Range (min \u2026 max): 91.3 ms \u2026 119.7 ms 29 runs\\n\\n# proto v0.23.6 and above\\nhyperfine --warmup 10 -- \'node --version\'\\nBenchmark 1: node --version\\n Time (mean \xb1 \u03c3): 18.5 ms \xb1 1.0 ms [User: 7.9 ms, System: 12.7 ms]\\n Range (min \u2026 max): 17.1 ms \u2026 23.8 ms 146 runs\\n```\\n\\n:::success\\n\\nDylibso is hosting an [Extism hackathon](https://dylibso.com/events/2023/hack-for-good/) through the\\nmonth of December, that\'ll donate to children in need. Check it out and participate!\\n\\n:::\\n\\n## Standardized configuration (breaking)\\n\\nUp until now, proto has supported 2 types of configuration, `.prototools` and\\n`~/.proto/config.toml`. The former can exist in any folder, and is used for pinning versions and\\ndefining plugins. The latter is a per-user file that is used for customizing how proto works and\\nalso defining plugins.\\n\\nOver time, functionality in both of these files has grown, and so has the overlap between them. We\\nfelt it was time to standardize these files into a single configuration file, and as such, have\\nremoved `~/.proto/config.toml` and merged its functionality into\\n[`.prototools`](/docs/proto/config). The biggest changes are:\\n\\n- proto settings (like `auto-clean` and `http`) must now exist within a\\n [`[settings]` table](/docs/proto/config#settings).\\n- Tool specific settings (like `node-intercept-globals`) have moved to the new\\n [`[tools.node]` table](/docs/proto/config#tools) ([more info below](#tool-level-settings)).\\n- Plugins are still configured within a [`[plugins]` table](/docs/proto/config#plugins).\\n- Global/default settings can be defined in `~/.proto/.prototools`.\\n\\n```toml title=\\".prototools\\"\\nnode = \\"20.0.0\\"\\n\\n[settings]\\nauto-clean = true\\n\\n[settings.http]\\nallow-invalid-certs = true\\n```\\n\\nThe other massive benefit of this change, is that settings _can now be defined anywhere_!\\nPreviously, settings like `auto-clean` or `detect-strategy` could only be defined at the user-level,\\nbut what if your company or team wanted to control this setting? It wasn\'t possible without asking\\nall team members to update their configuration manually. With this change, settings can now be tied\\nto projects or repositories!\\n\\n:::info\\n\\nAfter upgrading, run `proto migrate v0.24` to migrate the old user configuration to the new format!\\n\\n:::\\n\\n### Tool-level settings\\n\\nWhile working on these configuration changes, we also landed the\\n[Tool-level configuration RFC](https://github.com/moonrepo/proto/issues/261), although with a\\ndifferent implementation. This enables users to define settings that will be passed to the WASM\\nplugin of a specific tool, controlling how it works. These settings can be configured with the new\\n[`[tools.]` table](/docs/proto/config#tools).\\n\\nFor example, the `node` tool has a setting called `intercept-globals`, which will trigger an error\\nwhen npm/pnpm/yarn attempt to install a global package.\\n\\n```toml title=\\".prototools\\"\\n[tools.go]\\ngobin = false\\n\\n[tools.node]\\nintercept-globals = false\\n```\\n\\nAs of now, only the [Node.js](https://github.com/moonrepo/node-plugin) and\\n[Go](https://github.com/moonrepo/go-plugin) plugins support settings.\\n\\n## Moved aliases and default versions (breaking)\\n\\nTo continue with these configuration changes, we\'ve also moved aliases and the default version into\\nthis new configuration. Previously, both of these values were stored in\\n`~/.proto/tools//manifest.json`, but the problem was, that this file is internally managed by\\nproto, and should not be modified by users. This made it difficult for users to manage, and to\\npersist these values across machines (think dotfile syncing).\\n\\nNow these values are stored in [`.prototools`](/docs/proto/config), with aliases being configured in\\n[`[tools..aliases]`](/docs/proto/config#toolsaliases), and the default version (global) being\\npinned as a version in `~/.proto/.prototools`. Here\'s an example:\\n\\n```toml title=\\"~/.proto/.prototools\\"\\nnode = \\"20.0.0\\"\\n\\n[tools.node.aliases]\\nwork = \\"18\\"\\n```\\n\\nThis change also enables aliases to be defined anywhere! Previously, aliases were only allowed to be\\ndefined globally for a user, but now they can be defined per-project, or even per-directory.\\n\\n:::info\\n\\nAfter upgrading, run `proto migrate v0.24` to migrate your aliases and default versions to the new\\nconfiguration format!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.24.0) for a full list\\nof changes.\\n\\n- proto now supports [canary](/docs/proto/install#canary-releases) and\\n [nightly](/docs/proto/install#nightly-releases) releases.\\n- Updated non-latest plugins to be cached for 30 days, instead of forever.\\n- Fixed an issue where resolving canary versions wouldn\'t work correctly."},{"id":"moon-v1.17","metadata":{"permalink":"/blog/moon-v1.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-11-20_moon-v1.17.mdx","source":"@site/blog/2023-11-20_moon-v1.17.mdx","title":"moon v1.17 - Full Bun support, TypeScript improvements, and more!","description":"In this release, we\'ve focused heavily on the JavaScript and TypeScript ecosystems, by improving our","date":"2023-11-20T00:00:00.000Z","formattedDate":"November 20, 2023","tags":[{"label":"bun","permalink":"/blog/tags/bun"},{"label":"typescript","permalink":"/blog/tags/typescript"},{"label":"javascript","permalink":"/blog/tags/javascript"}],"readingTime":4.59,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.17","title":"moon v1.17 - Full Bun support, TypeScript improvements, and more!","authors":["milesj"],"tags":["bun","typescript","javascript"],"image":"./img/moon/v1.17.png"},"unlisted":false,"prevItem":{"title":"proto v0.24 - Standardized configuration and 10x WASM boost","permalink":"/blog/proto-v0.24"},"nextItem":{"title":"proto v0.23 - New detection strategy, tool commands, and more","permalink":"/blog/proto-v0.23"}},"content":"In this release, we\'ve focused heavily on the JavaScript and TypeScript ecosystems, by improving our\\nimplementations, and providing full Bun support.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bun tier 1, 2, and 3 support\\n\\nYes you read that right! Not just 1 tier, not just 2 tiers, but all 3 language tiers have been\\nimplemented for Bun, providing [full language support](/docs/how-it-works/languages), and parity\\nwith Node.js. Thanks to the Bun work in [proto](/proto) and the previous\\n[v1.16 release](./moon-v1.16), we were able to add full Bun support with relative easy.\\n\\nSo what does Bun support look like? To start, you can now configure a\\n[`bun`](/docs/config/toolchain#bun) setting in [`.moon/toolchain.yml`](/docs/config/toolchain),\\nincluding an optional `version` to download and install, and settings similar to Node.js.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nbun:\\n version: \'1.0.13\'\\n syncProjectWorkspaceDependencies: true\\n```\\n\\nThis will enable the `bun` platform and the following integrations are applied:\\n\\n- Will automatically download and install Bun for the configured version.\\n- Will install dependencies using `bun install` (deduping currently not supported).\\n- Will parse `bun.lockb` for dependency resolution and task hashing.\\n- Will use `bunx` instead of `npx` for one-off package executions.\\n- Can execute `bun` commands within tasks.\\n\\nWith the `bun` platform enabled, you can now configure the platform for projects and tasks (is\\nautomatically detected when running the `bun` or `bunx` commands).\\n\\n```yaml title=\\"/moon.yml\\"\\n# Default platform for all tasks (optional)\\nplatform: \'bun\'\\n\\ntasks:\\n dev:\\n command: \'bun run dev\'\\n test:\\n command: \'bun test\'\\n lint:\\n command: \'eslint .\'\\n # Only required for npm packages (if not defined above)\\n platform: \'bun\'\\n```\\n\\n## TypeScript improvements\\n\\n### Configure the root directory\\n\\nWhen moon was first designed, it was designed for JavaScript based monorepos. Because of this, there\\nwere a handful of assumptions that still exist today, one of which is that the moon workspace root\\nwas assumed to be the JavaScript and TypeScript root. The root is extremely important in resolving\\nrelative paths for project references and other path based functionality, so using the workspace\\nroot made the most sense.\\n\\nHowever, what if your TypeScript root isn\'t the workspace root? Or the TypeScript root and\\nJavaScript root are different? Well, you were out of luck... until now! We\'re introducing a new\\nsetting called [`typescript.root`](/docs/config/toolchain#root), that denotes the root directory for\\nTypeScript related functionality (relative from moon\'s workspace root).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ntypescript:\\n root: \'./typescript\'\\n```\\n\\n### Include shared types\\n\\nAnother common TypeScript practice is to have shared `.d.ts` types that are used across multiple\\nprojects, or to augment third-party types. This is so common that we felt obligated to support it in\\nsome capacity within moon. With that said, we\'re introducing a new setting,\\n[`typescript.includeSharedTypes`](/docs/config/toolchain#includesharedtypes).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ntypescript:\\n includeSharedTypes: true\\n```\\n\\nWhen enabled, we\'ll automatically sync the shared types path to the `include` field of all relevant\\nproject `tsconfig.json`s. However, for this to work correctly, the shared types _must_ exist in a\\n`types` folder relative from the [TypeScript root](#configure-the-root-directory).\\n\\nFor example, if the TypeScript root is `/`, and shared types is `/types`, then all packages in\\n`/packages/*` will be updated with the following:\\n\\n```json title=\\"packages/example/tsconfig.json\\"\\n{\\n \\"include\\": [\\"../../types/**/*\\"]\\n}\\n```\\n\\n> This setting can be overridden on a per-project basis.\\n\\n### Include sources of project references\\n\\nContinuing with `include` related functionality, we\'ve introducing yet another new setting,\\n[`typescript.includeProjectReferenceSources`](/docs/config/toolchain#includeprojectreferencesources),\\nwhich does exactly as its name implies. It automatically appends the sources (`**/*`) of all project\\nreferences to the `include` field of all relevant project `tsconfig.json`s.\\n\\nThis is useful (and sometimes required) for the following reasons:\\n\\n- It makes files within a referenced project available for import into the consuming project. This\\n is required for \\"press tab to auto-import\\" nested/deep files, otherwise only index imports will\\n work (and barrel files are costly).\\n- It also improves the editor experience by making the source files available for intellisense,\\n autocomplete, and other features.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ntypescript:\\n includeProjectReferenceSources: true\\n```\\n\\nTo understand this functionality, say you have a project with the following `tsconfig.json`, and\\nthis project depends on 2 other projects: ui and utils.\\n\\n```json title=\\"packages/example/tsconfig.json\\"\\n{\\n \\"compilerOptions\\": {},\\n \\"include\\": [\\"src/**/*\\"]\\n}\\n```\\n\\nWhen our syncing process occurs, we\'ll automatically sync project references, and include referenced\\nsources, like so.\\n\\n```json title=\\"packages/example/tsconfig.json\\"\\n{\\n \\"compilerOptions\\": {},\\n \\"include\\": [\\"src/**/*\\", \\"../ui/**/*\\", \\"../utils/**/*\\"],\\n \\"references\\": [{ \\"path\\": \\"../ui\\" }, { \\"path\\": \\"../utils\\" }]\\n}\\n```\\n\\n> This setting can also be overridden on a per-project basis.\\n\\n## JavaScript improvements\\n\\n### Supporting the \\"single version policy\\" pattern\\n\\nIf you\'re unfamiliar with the single version policy, or the one version rule, it\'s a pattern that\\nonly allows dependencies to be configured in a single location, typically the root `package.json`.\\nThis pattern forces _all_ projects in a monorepo to use the same dependencies, and avoid the package\\n`workspaces` functionality.\\n\\nThis pattern was previously not possible in moon, as our automatic dependency installation process\\ndid not account for it, and it would either install in the root if using `workspaces`, or in a\\nproject otherwise. To support this pattern, we\'re introducing the new setting\\n[`node.rootPackageOnly`](/docs/config/toolchain#rootpackageonly) for Node.js, and\\n`bun.rootPackageOnly` for Bun.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n rootPackageOnly: true\\n```\\n\\nWhen enabled, we\'ll only install dependencies in the workspace root, regardless of other settings or\\nhow `package.json`s are configured. However, this setting _does not_ verify that other\\n`package.json`s _do not_ have dependencies. It\'s up to you to ensure that other `package.json`s do\\nnot have dependencies.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.17.0) for a full list\\nof changes.\\n\\n- Updated automatic dependency linking to use the `build` scope instead of `peer` scope. This should\\n alleviate some of the pain points with `package.json` syncing.\\n- Improved project reference syncing and edge case handling."},{"id":"proto-v0.23","metadata":{"permalink":"/blog/proto-v0.23","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-11-16_proto-v0.23.mdx","source":"@site/blog/2023-11-16_proto-v0.23.mdx","title":"proto v0.23 - New detection strategy, tool commands, and more","description":"With this release, we\'ve reorganized our commands, improved version detection, and Windows support.","date":"2023-11-16T00:00:00.000Z","formattedDate":"November 16, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"}],"readingTime":1.86,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.23","title":"proto v0.23 - New detection strategy, tool commands, and more","authors":["milesj"],"tags":["proto"],"image":"./img/proto/v0.23.png"},"unlisted":false,"prevItem":{"title":"moon v1.17 - Full Bun support, TypeScript improvements, and more!","permalink":"/blog/moon-v1.17"},"nextItem":{"title":"moon v1.16 - Bun support, Rust improvements, and more!","permalink":"/blog/moon-v1.16"}},"content":"With this release, we\'ve reorganized our commands, improved version detection, and Windows support.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `detect-strategy` setting\\n\\nUp until now, when proto would attempt to detect a version, it would use a version from the closest\\n`.prototools` file, or tool specific file (`package.json`, `.nvmrc`, etc), which ever matched first.\\nFor the most part, this works great, but what if you wanted `.prototools` to take precedence over\\nother files, even if found in a higher parent directory? You unfortunately couldn\'t.\\n\\nTo support this new flow, we\'re introducing a new\\n[`~/.proto/config.toml`](/docs/proto/config#user-configuration) setting called\\n[`detect-strategy`](/docs/proto/config#detect-strategy). This setting supports the following values,\\nwith more possibly in the future!\\n\\n- `first-available` (default) - Will use the first available version that is found. Either from\\n `.prototools` or a tool specific file.\\n- `prefer-prototools` - Prefer a `.prototools` version, even if found in a parent directory. If none\\n found, falls back to tool specific file.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\ndetect-strategy = \\"prefer-prototools\\"\\n```\\n\\n## New `proto tool` command group (breaking)\\n\\nOur CLI surface area has been growing and we felt it was time to start grouping commands, starting\\nwith the new [`proto tool`](/docs/proto/commands/tool) command. This command will contain \\"not used\\nvery often\\" subcommands in relation to tools and their plugins, primarily for managing plugins, and\\nviewing tool information and inventory. As such, we\'ve deprecated and moved the following top-level\\ncommands:\\n\\n- Moved `proto add-plugin` to `proto tool add`.\\n- Moved `proto remove-plugin` to `proto tool remove`.\\n- Moved `proto plugins` to `proto tool list-plugins`.\\n- Moved `proto tools` to `proto tool list`.\\n\\n## New `proto tool info` command\\n\\nContinuing with the changes above, we\'re also introducing a new command,\\n[`proto tool info`](/docs/proto/commands/tool/info), which displays detailed information about a\\ntool and its backing plugin. For example:\\n\\n```\\n$ proto tool info node\\n\\nnode - Node.js\\n\\nInventory\\n Store: ~/.proto/tools/node\\n Executable: ~/.proto/tools/node/20.0.0/bin/node\\n Globals directory: ~/.proto/tools/node/globals/bin\\n Binaries:\\n - ~/.proto/bin/node (primary)\\n Shims:\\n - ~/.proto/shims/node (primary)\\n\\nPlugin\\n Version: 0.5.2\\n Source: https://github.com/moonrepo/node-plugin/releases/download/v0.5.2/node_plugin.wasm\\n```\\n\\n> This command also supports JSON output via `--json`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.23.0) for a full list\\nof changes.\\n\\n- Added support to plugins to ignore certain paths when detecting a version.\\n- Updated Windows to create 3 shim files for each tool: `.cmd` (cmd.exe), `.ps1` (powershell), and\\n no extension (bash)."},{"id":"moon-v1.16","metadata":{"permalink":"/blog/moon-v1.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-30_moon-v1.16.mdx","source":"@site/blog/2023-10-30_moon-v1.16.mdx","title":"moon v1.16 - Bun support, Rust improvements, and more!","description":"With this release, we\'ve focused on requests from the community, instead of internal migration work","date":"2023-10-30T00:00:00.000Z","formattedDate":"October 30, 2023","tags":[{"label":"bun","permalink":"/blog/tags/bun"},{"label":"rust","permalink":"/blog/tags/rust"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"automation","permalink":"/blog/tags/automation"},{"label":"package","permalink":"/blog/tags/package"},{"label":"manager","permalink":"/blog/tags/manager"}],"readingTime":2.95,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.16","title":"moon v1.16 - Bun support, Rust improvements, and more!","authors":["milesj"],"tags":["bun","rust","toolchain","automation","package","manager"],"image":"./img/moon/v1.16.png"},"unlisted":false,"prevItem":{"title":"proto v0.23 - New detection strategy, tool commands, and more","permalink":"/blog/proto-v0.23"},"nextItem":{"title":"proto v0.21 - Linux x64 musl support","permalink":"/blog/proto-v0.21"}},"content":"With this release, we\'ve focused on requests from the community, instead of internal migration work\\nor new features.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bun as a package manager\\n\\nNow that [Bun v1 has officially released](https://bun.sh/blog/bun-v1.0) and our\\n[bun-plugin](https://github.com/moonrepo/bun-plugin) for proto has stabilized, we can start slowly\\nintegrating Bun support into moon. The first step in this series is adding Bun as a supported\\npackage manager for Node.js. Seems odd as they are conflicting runtimes... right? While true, a lot\\nof users are interested in using Bun purely as a package manager, as it can install dependencies\\nincredibly fast. So why not support it?\\n\\nIn this release, you can now install dependencies with Bun by configuring\\n[`node.packageManager`](/docs/config/toolchain#packagemanager) and\\n[`node.bun`](/docs/config/toolchain#npm-pnpm-yarn) in your toolchain.\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n packageManager: \'bun\'\\n bun:\\n version: \'1.0.0\'\\n```\\n\\nAdditionally, you can now execute Bun commands within tasks! However, ensure the task\'s platform is\\nstill set to `node` though, as this is using Bun as a package manager within Node.js, not as a\\nseparate runtime.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n test:\\n command: \'bun test\'\\n platform: \'node\'\\n```\\n\\nWhen using Bun, the following integrations are applied:\\n\\n- Will automatically download and install Bun for the configured version.\\n- Will install dependencies using `bun install` (deduping currently not supported).\\n- Will parse `bun.lockb` for dependency resolution and task hashing.\\n- Will use `bunx` instead of `npx` for one-off package executions.\\n- Can execute `bun` commands within tasks.\\n\\n> This change _only_ adds support for Bun as a package manager for Node.js. It does not add Bun as a\\n> supported language/platform in the toolchain, but it does pave the way for this to happen! Also\\n> note that Bun _is not supported on Windows_!\\n\\n## Configure Rust components and targets\\n\\nWe\'ve had Rust tier 2 and 3 support for quite a while now, but there was a big missing piece: the\\nability to configure and install additional\\n[components](https://rust-lang.github.io/rustup/concepts/components.html) and\\n[targets](https://doc.rust-lang.org/nightly/rustc/platform-support.html) for the current toolchain.\\nIn this release, we\'ve added support for both!\\n\\nSimply configure the [`rust.components`](/docs/config/toolchain#components) or\\n[`rust.targets`](/docs/config/toolchain#targets) settings in\\n[`.moon/toolchain.yml`](/docs/config/toolchain), and moon will automatically install them when the\\npipeline is ran. This functionality uses the same hashing implementation as\\n[`rust.bins`](/docs/config/toolchain#bins-1), so will only install the first time, and again if the\\nconfiguration changes (or the cache is removed).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nrust:\\n version: \'1.73.0\'\\n components:\\n - \'clippy\'\\n - \'rust-analyzer\'\\n targets:\\n - \'wasm32-wasi\'\\n```\\n\\n## Force toolchain to use global binaries\\n\\nOur [toolchain](/docs/concepts/toolchain) is great for local development, as it ensures all\\ndevelopers and machines are running the exact versions of tools required for the workspace. However,\\nit becomes overkill for other environments like CI and Docker where the environment has been\\npre-configured.\\n\\nTo avoid the unnecessary overhead of download and installing tools in the toolchain, we\'re\\nintroducing the `MOON_TOOLCHAIN_FORCE_GLOBALS` environment variable. When provided, this will:\\n\\n- Disable downloading and installing tools (will still download the WASM plugins).\\n- Execute all tool commands using the global binary available on `PATH`.\\n\\n```shell\\nMOON_TOOLCHAIN_FORCE_GLOBALS=true moon ci\\n```\\n\\n> We\'re looking into ways to automate this process, but for now, this is the best solution.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.16.0) for a full list\\nof changes.\\n\\n- Added an improved task inheritance chain resolver. To fallback to the previous behavior, set\\n `experiments.interweavedTaskInheritance: false` in `.moon/workspace.yml`.\\n- Added a new [project type `automation`](/docs/config/project#type), for projects like E2E and\\n integration testing.\\n- Updated action graph cycle detection to list all nodes in the cycle (when detectable).\\n- Updated all npx calls to use a package manager equivalent. For example: `yarn dlx`, `pnpm dlx`,\\n `bunx`.\\n- Updated to support Yarn v4."},{"id":"proto-v0.21","metadata":{"permalink":"/blog/proto-v0.21","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-27_proto-v0.21.mdx","source":"@site/blog/2023-10-27_proto-v0.21.mdx","title":"proto v0.21 - Linux x64 musl support","description":"This is a very small release that primarily adds support for the Linux x64 musl target.","date":"2023-10-27T00:00:00.000Z","formattedDate":"October 27, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"linux","permalink":"/blog/tags/linux"},{"label":"musl","permalink":"/blog/tags/musl"}],"readingTime":0.67,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.21","title":"proto v0.21 - Linux x64 musl support","authors":["milesj"],"tags":["proto","linux","musl"]},"unlisted":false,"prevItem":{"title":"moon v1.16 - Bun support, Rust improvements, and more!","permalink":"/blog/moon-v1.16"},"nextItem":{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"}},"content":"This is a very small release that primarily adds support for the Linux x64 musl target.\\n\\n\x3c!--truncate--\x3e\\n\\nThanks to [cargo-dist](https://github.com/axodotdev/cargo-dist), we can now build and distribute\\nmusl binaries with relative ease. When building the binary, libraries are statically linked to\\nensure that the binary can run on any Linux distribution.\\n\\nYou can download the binary from the official\\n[GitHub release](https://github.com/moonrepo/proto/releases/tag/v0.21.0) or by running the\\n[Bash installation script](/docs/proto/install#linux-macos-wsl). In the future, we plan to support\\narm64 builds for both Linux gnu and musl.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.21.0) for a full list\\nof changes.\\n\\n- Improved file and directory locking. Will now work correctly across processes and signals,\\n especially for those killed/dropped.\\n- Updated WASM functions to use explicit Rust enum types for versions to properly handle all\\n variations (version, alias, requirement, range)."},{"id":"proto-v0.20","metadata":{"permalink":"/blog/proto-v0.20","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-20_proto-v0.20.mdx","source":"@site/blog/2023-10-20_proto-v0.20.mdx","title":"proto v0.20 - New shims and binaries management","description":"In this release, we\'re reworking how shims and binaries work.","date":"2023-10-20T00:00:00.000Z","formattedDate":"October 20, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"bin","permalink":"/blog/tags/bin"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"checksum","permalink":"/blog/tags/checksum"}],"readingTime":3,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.20","title":"proto v0.20 - New shims and binaries management","authors":["milesj"],"tags":["proto","bin","shim","checksum"]},"unlisted":false,"prevItem":{"title":"proto v0.21 - Linux x64 musl support","permalink":"/blog/proto-v0.21"},"nextItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"}},"content":"In this release, we\'re reworking how shims and binaries work.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shims _and_ Binaries (breaking)\\n\\nSince proto\'s inception, we\'ve used shims as a way to execute installed tools. This allowed us to\\nwrap the underlying tool binary to provide additional functionality, such as automatic version\\ndetection, runtime hooks, and more. However, this approach has some limitations, such as:\\n\\n- Shims are forced onto you and there\'s no way to use proto without shims.\\n- Shims are slower than executing the native binary, upwards of 10x slower. While this equates in\\n milliseconds, it can be noticeable dependending on the tool.\\n- For Windows, our shim files are `.cmd` _and not_ `.exe`. This causes a lot of weird and unexpected\\n problems when an environment expects a real executable, or uses a hard-coded `.exe` extension.\\n\\nTo remedy this, we\'re introducing both a shim and non-shim approach, which has resulted in a pretty\\nbig breaking change. Shims are now generated in `~/.proto/shims` (instead of `~/.proto/bin`), while\\n`~/.proto/bin` will now store symlinks to native binaries. To migrate to this new pattern, we\'re\\nintroducing a new `proto migrate` command (this only needs to be ran once).\\n\\n```shell\\n$ proto upgrade\\n$ proto migrate v0.20 --log debug\\n```\\n\\n### How it works\\n\\nWhen installing proto for the first time, or running the `proto migrate` command, we prepend `PATH`\\nwith `$PROTO_HOME/shims:$PROTO_HOME/bin`. This allows shims to be executed _first_ and fallthrough\\nto native binaries if a shim does not exist (for example, `.exe` on Windows).\\n\\nFurthermore, if you\'d prefer to _only use_ shims, or _only use_ binaries, you can update `PATH` and\\nremove the unwanted directory path.\\n\\nAnd lastly, if shims are causing problems, you can now easily reference the native binaries\\ndirectly. This was rather complicated before.\\n\\n### Comparison\\n\\n| | Shims | Binaries |\\n| -------------------- | -------------------------------------------------- | ----------------------------------------------------------------------- |\\n| **Location** | `~/.proto/shims` | `~/.proto/bin` |\\n| **Created as** | Scripts that run `proto run` | Symlinks to the native binary |\\n| **Version executed** | Detects version at runtime | Last version that was installed + pinned |\\n| **Supported for** | All tools | Only tools that support native execution (may not work for `.js` files) |\\n| **Additional files** | Creates extra files (like `bunx`, `node-gyp`, etc) | Only links the primary binary |\\n\\n## Support for minisign checksums\\n\\nWhen proto installs a tool, it runs a process known as checksum verification, where we ensure the\\ndownload hasn\'t been modified maliciously in anyway. Historically we only supported SHA256\\nchecksums, but now, we also support the new [minisign](https://jedisct1.github.io/minisign/) tool,\\nused by popular tools like [Zig](https://ziglang.org/).\\n\\nIf you\'re building a plugin for a tool that uses minisign, you can use the new\\n[`checksum_public_key`](/docs/proto/wasm-plugin#downloading-pre-builts) (WASM) or\\n[`install.checksum-public-key`](/docs/proto/toml-plugin#downloading-and-installing) (TOML) field to\\nprovide the public key for use in verification.\\n\\nWhen the checksum URL ends in a `.minisig` extension, proto will automatically use minisign for\\nchecksum verification!\\n\\n```toml\\n[install]\\nchecksum-url = \\"https://domain.com/some/path/to/checksum.minisig\\"\\nchecksum-public-key = \\"untrusted comment: ...\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.20.0) for a full list\\nof changes.\\n\\n- Updated `proto use` to install tools in parallel.\\n- Updated `proto plugins` and `proto tools` to load plugins in parallel.\\n- Updated `proto run` to error when the tool attempts to self-upgrade outside of proto.\\n- Rust plugin\\n - Will now attempt to install `rustup` if it does not exist on the current machine.\\n - Will now respect the `RUSTUP_HOME` environment variable when locating the `.rustup` store.\\n- Schema plugin\\n - Added `install.checksum_public_key` for defining the public key used to verify checksums.\\n - Added `metadata.self_upgrade_commands` for defining which sub-commands should be blocked for\\n self-upgrades."},{"id":"moon-v1.15","metadata":{"permalink":"/blog/moon-v1.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-10-09_moon-v1.15.mdx","source":"@site/blog/2023-10-09_moon-v1.15.mdx","title":"moon v1.15 - Next-generation action graph","description":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the","date":"2023-10-09T00:00:00.000Z","formattedDate":"October 9, 2023","tags":[{"label":"action","permalink":"/blog/tags/action"},{"label":"dependency","permalink":"/blog/tags/dependency"},{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"railway","permalink":"/blog/tags/railway"}],"readingTime":4.69,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.15","title":"moon v1.15 - Next-generation action graph","authors":["milesj"],"tags":["action","dependency","graph","pipeline","railway"],"image":"./img/moon/v1.15.png"},"unlisted":false,"prevItem":{"title":"proto v0.20 - New shims and binaries management","permalink":"/blog/proto-v0.20"},"nextItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"}},"content":"In this release, we\'ve taken the next step in modernizing our action pipeline, by rewriting the\\ndependency graph.\\n\\n\x3c!--truncate--\x3e\\n\\n## Hello action graph, goodbye dependency graph\\n\\nFor the past few months, we\'ve been working on a rewrite of our action pipeline, which consists of\\nthe project graph, dependency graph, task executor, process pipeline, and more. It\'s a slow process,\\nwith many different pieces that must land in sequence, but we\'re almost done. The next step in this\\nprocess is the [introduction of the new action graph](/docs/how-it-works/action-graph), which\\nreplaces the previous dependency graph.\\n\\nFor the most part, the graphs work in a similar fashion, but since we rewrote it from the ground up,\\nwe were able to resolve any discrepancies and performance issues. The biggest changes between the\\nnew and old graphs are:\\n\\n- All actions now depend on the `SyncWorkspace` action, instead of this action running arbitrarily.\\n- Cleaned up dependency chains between actions, greatly reducing the number of nodes in the graph.\\n- Renamed `RunTarget` to `RunTask`, including interactive and persistent variants.\\n- And lastly, we ditched our batched task approach for a ready queue. Continue reading for more\\n information!\\n\\n### A new performant thread pool\\n\\nIn the old dependency graph, when we\'d execute a task, we\'d order the graph topologically and then\\ngroup actions into batches (or buckets) based on their dependency chains. Batches would then be\\nexecuted in order within the thread pool. This approach worked well, but had one major flaw: it\\nwasn\'t as performant as could be. For example, if our thread pool size was 12, and a batch only had\\n2 tasks in it, what were the other 10 threads doing? Absolutely nothing. They were sitting idly,\\nwaiting for a task.\\n\\nAnd now with the new action graph, we take full advantage of all threads in the pool. Instead of the\\nbatched approach above, we now use a topological task-ready queue, where a thread without work (or\\nis waiting for work) can poll the graph for a new task to run. A task is considered ready to run if\\nit either has no dependencies, or all of its dependencies (in the chain) have been ran.\\n\\nFor large graphs, this should result in a significant performance improvement!\\n\\n### Automatic dependency linking (breaking)\\n\\n> In v1.17, we changed the scope from \\"peer\\" to \\"build\\" to reduce friction.\\n\\nBecause of these graph changes, we do have a minor \\"breaking change\\". Tasks that depend (via `deps`)\\non other tasks from arbitrary projects (the parent project doesn\'t implicitly or explicitly depend\\non the other project), not including the root-level project, will now automatically mark that other\\nproject as a \\"peer\\" dependency (if not already configured with `dependsOn`). For example, \\"b\\"\\nbecomes a peer dependency for \\"a\\".\\n\\n```yaml title=\\"a/moon.yml\\"\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nNow internally becomes:\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'peer\'\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nIf you\'d prefer this dependency to _not be_ a peer, you can explicitly configure it with a different\\nscope. For Node.js projects, the \\"build\\" scope can be used as a no-op replacement.\\n\\n```yaml title=\\"a/moon.yml\\"\\ndependsOn:\\n - id: \'b\'\\n scope: \'build\' # production, development\\n\\ntasks:\\n build:\\n deps: [\'b:build\']\\n```\\n\\nWe\'re marking this as a breaking change as this could subtly introduce cycles in the project graph\\nthat weren\'t present before, and for Node.js projects, this may inject `peerDependencies`. However,\\nthis change was necessary to ensure accurate dependency chains in the graph.\\n\\n## New `moonrepo/setup-toolchain` GitHub action\\n\\nWe\'ve begun a process to deprecate the\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action) and\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) GitHub actions, and instead, combine\\nand replace them with a new [moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain)\\naction. Why a new action instead of fixing the others?\\n\\nThe biggest problem was that both previous actions shared about 90% of the same code, but were\\nslightly different in how they installed the binaries and cached the toolchain. It was was also\\nconfusing for consumers to understand and know which action to use (because they shouldn\'t be used\\ntogether).\\n\\nTo remedy this, we\'re prototyping the new\\n[moonrepo/setup-toolchain](https://github.com/moonrepo/setup-toolchain) action, which has been\\nworking quite well. It aims to solve the following:\\n\\n- Installs `proto` globally so that installed tools can also be executed globally.\\n- Conditionally installs `moon` globally if the repository is using moon (attempts to detect a\\n `.moon` directory).\\n- Caches the toolchain (`~/.proto`) so subsequent runs are faster.\\n- Hashes `.prototools` and `.moon/toolchain.yml` files to generate a unique cache key.\\n- Cleans the toolchain before caching to remove unused or stale tools.\\n- Can auto-install tools when used.\\n\\n```diff\\n# ...\\njobs:\\n ci:\\n name: CI\\n runs-on: ubuntu-latest\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n- - uses: moonrepo/setup-moon-action@v1\\n+ - uses: moonrepo/setup-toolchain@v0\\n```\\n\\n## Now supported in Railway\\n\\nIf you\'re a big fan of [Railway](https://railway.app/) (like we are), and you\'re deploying a Node.js\\nbacked application, then you\'ll be happy to hear that Railway now officially and natively supports\\nmoon! We spent some time over the past month\\n[integrating moon support into their Nixpacks architecture](https://nixpacks.com/docs/providers/node).\\n\\nTo make use of this, set the `NIXPACKS_MOON_APP_NAME` environment variable to the name of your moon\\nproject that you want to be deployed. This will then automatically run `moon run :build` and\\n`moon run :start` respectively. To customize the task names, you can set the\\n`NIXPACKS_MOON_BUILD_TASK` and `NIXPACKS_MOON_START_TASK` environment variables.\\n\\n:::info\\n\\nThis is currently only supported for Node.js projects, but will be expanded to other languages in\\nthe future!\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.15.0) for a full list\\nof changes.\\n\\n- Added a `moon action-graph` command.\\n- Added a `--dependents` argument to `moon action-graph`.\\n- Added the ability to skip non-`RunTask` actions using environment variables.\\n- Deprecated the `moon dep-graph` command."},{"id":"proto-v0.19","metadata":{"permalink":"/blog/proto-v0.19","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-29_proto-v0.19.mdx","source":"@site/blog/2023-09-29_proto-v0.19.mdx","title":"proto v0.19 - Version pinning and outdated checks","description":"In this release, we\'re improving version pinning and introducing a new command to check for outdated","date":"2023-09-29T00:00:00.000Z","formattedDate":"September 29, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"pin","permalink":"/blog/tags/pin"},{"label":"global","permalink":"/blog/tags/global"},{"label":"local","permalink":"/blog/tags/local"},{"label":"outdated","permalink":"/blog/tags/outdated"}],"readingTime":1.92,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.19","title":"proto v0.19 - Version pinning and outdated checks","authors":["milesj"],"tags":["proto","pin","global","local","outdated"],"image":"./img/proto/v0.19.png"},"unlisted":false,"prevItem":{"title":"moon v1.15 - Next-generation action graph","permalink":"/blog/moon-v1.15"},"nextItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"}},"content":"In this release, we\'re improving version pinning and introducing a new command to check for outdated\\nversions.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto pin` command (breaking)\\n\\nBefore our official v1 release, which is relatively soon, we\'ll be making some breaking changes with\\nthe proto APIs. The first is the introduction of the new [`proto pin`](/docs/proto/commands/pin)\\ncommand, which replaces the previous `proto local` and `proto global` commands. We felt this was a\\nmuch cleaner change, and far easier to understand than the previous command names.\\n\\n```shell\\n# v0.18\\n$ proto local go 1.20\\n$ proto global node 20\\n\\n# v0.19+\\n$ proto pin go 1.20\\n$ proto pin node 20 --global\\n```\\n\\n## New `pin-latest` setting\\n\\nWhile we\'re on the subject of pinning versions, we\'ve also introduced a new\\n[`pin-latest`](/docs/proto/config#pin-latest) setting. Do you want the latest version to always be\\npinned? Do you forgot to pass `--pin` when installing? Do you forget to run the `proto global` or\\n`proto local` commands (now `proto pin`)? If you answered yes to any of these questions, then this\\nsetting is for you.\\n\\nWhen enabled, and a tool is installed with the \\"latest\\" version, the resolved version will\\nautomatically be pinned to the configuration of your choice. For example, say we have the following\\nuser config:\\n\\n```toml title=\\"~/.proto/config.toml\\"\\npin-latest = \\"local\\"\\n```\\n\\nAnd we run one of the following commands:\\n\\n```shell\\n$ proto install go\\n$ proto install node latest\\n```\\n\\nThen the resolved version of the tool will automatically be set to the `.prototools` file in the\\ncurrent directory. Handy right?\\n\\n## New `proto outdated` command\\n\\nBy request of the community, we\'re introducing yet another new command,\\n[`proto outdated`](/docs/proto/commands/outdated). If you\'re familiar with package managers, you can\\nprobably guess what this command does! It\'ll check for newer available versions, for all tools\\nconfigured in the closest `.prototools` file. Very handy for keeping your tools up to date.\\n\\n```\\n$ proto outdated\\n\\ngo - current version 1.20.2 (via ~1.20), newer version 1.20.8, update available!\\nnode - current version 20.7.0 (via 20.7.0), latest version 20.8.0, update available!\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.19.0) for a full list\\nof changes.\\n\\n- Added `PROTO_WASM_LOG` environment variable to toggle the logging of messages from Extism and WASM\\n plugins. Useful for debugging.\\n- Updated `proto install` to auto-clean stale plugins after a successful installation."},{"id":"moon-v1.14","metadata":{"permalink":"/blog/moon-v1.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-25_moon-v1.14.mdx","source":"@site/blog/2023-09-25_moon-v1.14.mdx","title":"moon v1.14 - Improvements to running targets and toolchain versions","description":"In this release, we\'ve focused on loosening restrictions to improve the overall developer","date":"2023-09-25T00:00:00.000Z","formattedDate":"September 25, 2023","tags":[{"label":"run","permalink":"/blog/tags/run"},{"label":"target","permalink":"/blog/tags/target"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"version","permalink":"/blog/tags/version"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"shorthand","permalink":"/blog/tags/shorthand"}],"readingTime":2.665,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.14","title":"moon v1.14 - Improvements to running targets and toolchain versions","authors":["milesj"],"tags":["run","target","toolchain","version","ci","shorthand"],"image":"./img/moon/v1.14.png"},"unlisted":false,"prevItem":{"title":"proto v0.19 - Version pinning and outdated checks","permalink":"/blog/proto-v0.19"},"nextItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"}},"content":"In this release, we\'ve focused on loosening restrictions to improve the overall developer\\nexperience.\\n\\n\x3c!--truncate--\x3e\\n\\n## Shorthand for `moon run`\\n\\nThis has been a long requested feature and we\'re happy to finally deliver it! You can now omit the\\n\\"run\\" keyword for the [`moon run`](/docs/commands/run) command, just so long as the first non-option\\nargument is a target (must contain a `:`).\\n\\n```shell\\n# v1.13\\n$ moon run app:build\\n\\n# v1.14+\\n$ moon app:build\\n```\\n\\n## Choose targets for `moon ci`\\n\\nWhen we initially built [`moon ci`](/docs/commands/ci), we wanted a solution that simply ran\\neverything in CI that _should be ran_, taking care of all the complicated logic to determine\\naffected tasks, comparing Git branches, gathering targets, partitioning across jobs, etc... And it\\ndoes just that, and it does it well!\\n\\nHowever, one major caveat to using `moon ci` is that it runs _every task_ in the workspace (assuming\\nthey\'re affected). This has been quite a blocker for adoption as teams may want fine-grained control\\nof their CI. For example, running build tasks in one job, lint tasks in another, so on and so forth.\\n\\nIn this release, we\'ve made the necessary changes to allow these workflows, by supporting a list of\\ntargets for `moon ci`, similar to how `moon run` works. If no targets are provide, the existing \\"run\\neverything\\" logic will be used.\\n\\n```shell\\n# v1.13\\n$ moon ci\\n\\n# v1.14+\\n$ moon ci :build :lint :etc\\n```\\n\\nSplitting targets across jobs is demonstrated with the following GitHub Action workflow:\\n\\n```yaml title=\\".github/workflows/ci.yml\\"\\nname: \'CI\'\\non:\\n push:\\n branches:\\n - \'master\'\\n pull_request:\\njobs:\\n build:\\n name: \'Build\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :build\'\\n format-lint:\\n name: \'Format + Lint\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :format :lint\'\\n test:\\n name: \'Test\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n with:\\n fetch-depth: 0\\n - uses: \'moonrepo/setup-moon-action@v1\'\\n - run: \'moon ci :test\'\\n```\\n\\n## Configure partial toolchain versions\\n\\nSince moon\'s inception, our [integrated toolchain](/docs/concepts/toolchain) required fully\\nqualified semantic versions (major.minor.patch) for tools. This was by design to ensure that we\\ncould provide a consistent, reliable, and deterministic experience for all users. This solved the\\nproblem of \\"Is X using the correct version of Y?\\".\\n\\nHowever, this also meant that we were unable to support partial versions (major.minor) of tools,\\nwhich is a common use case and request for many users. Over the last few months, we\'ve made immense\\nprogress in [proto](/proto) on how it parses, resolves, and evaluates versions, known as the\\n[version specification](https://crates.io/crates/version_spec).\\n\\nWe felt the time was right to pull these changes into moon, and as such, all `version` fields in\\n[`.moon/toolchain.yml`](/docs/config/toolchain) now support partial versions, version\\nrequirements/ranges, and even aliases!\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nnode:\\n version: \'20.7\' # ~20.7\\n npm:\\n version: \'^9\'\\n\\nrust:\\n version: \'stable\'\\n```\\n\\n:::info\\n\\nLearn more about how this works under the hood in the\\n[official version specification documentation](/docs/concepts/toolchain#version-specification).\\n\\n:::\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.14.0) for a full list\\nof changes.\\n\\n- Added `packemon`, `sveltekit`, `vite`, `vitest` to\\n [moonrepo/moon-configs](https://github.com/moonrepo/moon-configs).\\n- Updated `.moon/tasks` to support nested folders, for better organization of task files.\\n- Improved handling of certificates and proxies.\\n- Updated to proto v0.18."},{"id":"proto-v0.18","metadata":{"permalink":"/blog/proto-v0.18","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-18_proto-v0.18.mdx","source":"@site/blog/2023-09-18_proto-v0.18.mdx","title":"proto v0.18 - List installed tools and configure HTTP client","description":"Today we\'ve got a small release that includes some helpful features.","date":"2023-09-18T00:00:00.000Z","formattedDate":"September 18, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"http","permalink":"/blog/tags/http"},{"label":"registry","permalink":"/blog/tags/registry"},{"label":"index","permalink":"/blog/tags/index"}],"readingTime":1.83,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.18","title":"proto v0.18 - List installed tools and configure HTTP client","authors":["milesj"],"tags":["proto","http","registry","index"],"image":"./img/proto/v0.18.png"},"unlisted":false,"prevItem":{"title":"moon v1.14 - Improvements to running targets and toolchain versions","permalink":"/blog/moon-v1.14"},"nextItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"}},"content":"Today we\'ve got a small release that includes some helpful features.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `proto tools` command\\n\\nAre you curious what tools you have installed? And more specifically, which versions? What about\\nconfigured aliases? Until now, you had to manually check the `~/.proto/tools` directory for this\\ninformation, but now, you can simply run [`proto tools`](/docs/proto/commands/tool/list) to get a\\nlist of all installed tools.\\n\\nThis command will list all tools that have been installed, along with their installed versions,\\nrelevant timestamps, available aliases, and store location.\\n\\n```shell\\n$ proto tools\\ngo - Go\\n Store: ~/.proto/tools/go\\n Versions:\\n 1.20.0 - installed 08/24/23, last used 09/18/23\\n 1.20.2 - installed 01/01/70, last used 09/18/23, default version\\n\\nnode - Node.js\\n Store: ~/.proto/tools/node\\n Aliases:\\n ~20 = stable\\n Versions:\\n 18.0.0 - installed 09/03/23, last used 09/18/23, default version\\n 18.14.0 - installed 09/04/23, last used 09/04/23\\n 18.17.1 - installed 09/04/23, last used 09/04/23\\n 19.0.0 - installed 09/03/23\\n 20.0.0 - installed 09/03/23\\n 20.6.0 - installed 09/04/23, last used 09/18/23\\n```\\n\\n> This information can also be represented as JSON by passing the `--json` flag.\\n\\n## New `[http]` user settings\\n\\nFurthermore, we\'ve added a new [`[http]` setting to `~/.proto/config.toml`](/docs/proto/config#http)\\nthat allows you to configure aspects of the HTTP client, which is primarily used for downloading\\ntools.\\n\\nThis may useful if you\'re behind a proxy, a VPN, or corporate network, and certain requests and\\ncertificates are blocked.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\n[http]\\nproxies = [\\"http://intra.net/proxy\\"]\\nroot-cert = \\"/path/to/root/cert.pem\\"\\n```\\n\\n## Index for third-party tools\\n\\nNow that our TOML and WASM plugins have stabilized, we felt the time was right to start working on a\\nthird-party index, a registry of all available tools. We\'ve updated the official\\n[Supported tools](/docs/proto/tools) documentation to now include third-party tools.\\n\\nAt this time, the list of tools is powered by a JS/JSON object,\\n[which can be found here](https://github.com/moonrepo/moon/blob/master/website/src/data/proto-tools.tsx).\\nIn the future, we may move this to a database, add filtering, sorting, and everything else necessary\\nfor showcasing tools maintained by the community!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.18.0) for a full list\\nof changes.\\n\\n- For TOML plugins, we updated the schema internally to be represented as JSON instead of TOML,\\n which may cause breakages depending on a version mismatch between proto and the plugin."},{"id":"proto-v0.17","metadata":{"permalink":"/blog/proto-v0.17","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-11_proto-v0.17.mdx","source":"@site/blog/2023-09-11_proto-v0.17.mdx","title":"proto v0.17 - Experimental Python support and canary releases","description":"This release implements two long requested features, Python language support and canary releases.","date":"2023-09-11T00:00:00.000Z","formattedDate":"September 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"tool","permalink":"/blog/tags/tool"},{"label":"canary","permalink":"/blog/tags/canary"},{"label":"python","permalink":"/blog/tags/python"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.17","title":"proto v0.17 - Experimental Python support and canary releases","authors":["milesj"],"tags":["proto","plugin","tool","canary","python"],"image":"./img/proto/v0.17.png"},"unlisted":false,"prevItem":{"title":"proto v0.18 - List installed tools and configure HTTP client","permalink":"/blog/proto-v0.18"},"nextItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"}},"content":"This release implements two long requested features, Python language support and canary releases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Experimental Python support\\n\\nIt\'s been quite a while since we\'ve introduced a new language into proto, and we\'re excited to\\nannounce the highly requested language, Python! Since Python is now an\\n[officially supported language](https://github.com/moonrepo/python-plugin), installing Python (and\\npip) is as simple as:\\n\\n```shell\\n$ proto install python\\n```\\n\\nHowever, we\'re marking language support as experimental for the time being. We expect our\\nimplementation to work for modern Python versions, but may not work for older versions, especially\\nPython 2. The reasons for this are as follows:\\n\\n- proto will install pre-built binaries from\\n [indygreg/python-build-standalone](https://github.com/indygreg/python-build-standalone). This is\\n an unofficial project, and _does not_ support all Python versions.\\n- If [`python-build`](https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md) is\\n available, we\'ll attempt to use it to build + install Python. This currently requires `pyenv` to\\n be installed, and _does not_ work on Windows.\\n- Furthermore, we only support `cpython` at the moment, and do not support `pypy`, `jython`, or\\n other Python implementations. It\'s unknown whether this functionality should be in the core Python\\n plugin, or another plugin entirely.\\n\\nIn a future proto version, we want to support a true \\"build from source\\" approach for all tools.\\nOnce that functionality has landed, we can properly support Python on all platforms, but until then,\\nlet us know how this works for you!\\n\\n## Install canary releases\\n\\nA canary release is a mechanism for rolling out new features and changes to a small subset of users,\\nwithout it being an official release on an official channel. This allows users to opt-in and test\\nfunctionality if they so choose. Canary releases are not meant to be used in production, and may\\ncontain bugs or breaking changes. A canary is similar to a nightly (or weekly) release, depending on\\nthe tool.\\n\\nWe now support this workflow in proto. To install a canary release, simply use the\\n[`--canary` flag when installing a tool](/docs/proto/commands/install):\\n\\n```shell\\n$ proto install --canary\\n```\\n\\nThis will install the latest canary release to `~/.proto/tools//canary`, and _only_ the latest\\nrelease can be used. Re-installing with `--canary` will overwrite the previous canary installation.\\n\\nHowever, because we [detect a version to run with at runtime](/docs/proto/detection), how should you\\nactually run canary? The easiest way is to prefix the shim with an environment variable:\\n\\n```shell\\n$ PROTO_BUN_VERSION=canary bun ./index.ts\\n```\\n\\nOr to explicitly configure the version in [`.prototools`](/docs/proto/config):\\n\\n```toml\\nbun = \\"canary\\"\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.17.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated the following locations to support partial versions and aliases:\\n - Tool versions in `.prototools`.\\n - Pinning a default version with `proto install --pin`.\\n - Setting global version with `proto global`.\\n - Setting local version with `proto local`.\\n- Node, npm, pnpm, and yarn will again extract a version from `package.json` engines."},{"id":"moon-v1.13","metadata":{"permalink":"/blog/moon-v1.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-05_moon-v1.13.mdx","source":"@site/blog/2023-09-05_moon-v1.13.mdx","title":"moon v1.13 - Toolchain now uses WASM plugins","description":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.","date":"2023-09-05T00:00:00.000Z","formattedDate":"September 5, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"}],"readingTime":2.76,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.13","title":"moon v1.13 - Toolchain now uses WASM plugins","authors":["milesj"],"tags":["tasks","proto","wasm"],"image":"./img/moon/v1.13.png"},"unlisted":false,"prevItem":{"title":"proto v0.17 - Experimental Python support and canary releases","permalink":"/blog/proto-v0.17"},"nextItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"}},"content":"This is a light release that focused primarily on upgrading to the WASM based proto implementation.\\n\\n\x3c!--truncate--\x3e\\n\\n## proto upgrade and WASM plugins\\n\\nOver the last few months, we\'ve made immense strides on [proto](/proto), our multi-language\\ntoolchain. For those of you unaware, moon\'s toolchain is built on top of proto, and we accomplish\\nthis by utilizing the same Rust code between both tools.\\n\\nHowever, moon has been locked to [proto v0.12](/blog/proto-v0.12), which was a purely Rust based\\nimplementation. With the release of [proto v0.13](/blog/proto-v0.13) and onward, proto has moved to\\na WASM based plugin architecture (with the core still in Rust), which allows us to support more\\nlanguages, and enables developers to write plugins in non-Rust languages.\\n\\nAnd since our WASM plugins have stabilized by [proto v0.16](/blog/proto-v0.16), we felt it was time\\nto finally upgrade moon\'s implementation to the latest and greatest. So what does this mean exactly?\\nA few things:\\n\\n- If you\'re using moon\'s [toolchain](/docs/config/toolchain) (like `node`), we will now download the\\n [Node.js WASM plugins](https://github.com/moonrepo/node-plugin) in the background (to\\n `~/.proto/plugins`).\\n- These plugins are in charge of downloading and installing the Node.js, npm, pnpm, or yarn version\\n specified in your toolchain configuration.\\n- The entire plugin flow is now logged to the console, so you can see what\'s happening behind the\\n scenes.\\n- In the future (most likely moon v2), our platform and language integration will also be powered by\\n WASM plugins. This enables you to build your own custom plugins!\\n\\n:::info\\n\\nThis entire process should be transparent to all users, and you should not notice any changes.\\nHowever, in case this upgrade causes issues, we wanted to isolate it from other changes, hence the\\nlight release!\\n\\n:::\\n\\n## Allow tasks to fail\\n\\n\\"Allow tasks to fail?\\" You ask yourself. \\"Doesn\'t that defeat the point of a task runner?\\" You\\nquestion further. \\"You\'re not wrong!\\" We reply. These questions assume a perfect repository state,\\nwhere all tasks either pass or fail, and there\'s no middle ground. In reality, very rarely is that\\ntrue, and we want to support those stuck in the middle, such as:\\n\\n- In a heavy migration and it\'s known that a task is currently broken.\\n- The task is flaky but you\'ve been unable to find the root cause.\\n- Upstream dependencies have published a backwards incompatible change, and you\'re waiting on a fix.\\n- And of course, in the middle of adopting moon!\\n\\nFor situations where a task consistently or sometimes fails, but you don\'t want it to fail the\\nentire pipeline (especially in CI), you can enable the new\\n[`allowFailure` task option](/docs/config/project#allowfailure).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n typecheck:\\n command: \'tsc --build\'\\n options:\\n allowFailure: true\\n```\\n\\nWhen enabled, failing tasks will no longer bail [`moon run`](/docs/commands/run) early, nor will it\\nexit [`moon ci`](/docs/commands/ci) with a non-zero exit code. However, we still built guard rails\\naround this feature, as we don\'t want to encourage bad practices, and one of these guard rails is\\nthat tasks that enable `allowFailure` _cannot_ be depended on by other tasks, as we cannot guarantee\\nthat it\'s side-effect free.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.13.0) for a full list\\nof changes.\\n\\n- Added colors to command line `--help` menus.\\n- Updated `runner.archivableTargets` to support tag scoped targets.\\n- Updated `moon query tasks --affected` to filter based on affected task, instead of affected\\n project."},{"id":"proto-v0.16","metadata":{"permalink":"/blog/proto-v0.16","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-09-04_proto-v0.16.mdx","source":"@site/blog/2023-09-04_proto-v0.16.mdx","title":"proto v0.16 - Add, remove, and purge plugins","description":"This release adds functionality for managing plugins and purging the proto store.","date":"2023-09-04T00:00:00.000Z","formattedDate":"September 4, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.445,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.16","title":"proto v0.16 - Add, remove, and purge plugins","authors":["milesj"],"tags":["proto","plugin"]},"unlisted":false,"prevItem":{"title":"moon v1.13 - Toolchain now uses WASM plugins","permalink":"/blog/moon-v1.13"},"nextItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"}},"content":"This release adds functionality for managing plugins and purging the proto store.\\n\\n\x3c!--truncate--\x3e\\n\\n## Add and remove plugins\\n\\nNow that proto has fully embraced a plugin based architecture, we thought it\'d be nice to support\\nthe management of these plugins through the CLI. This release adds two new commands:\\n[`proto add-plugin`](/docs/proto/commands/tool/add) and\\n[`proto remove-plugin`](/docs/proto/commands/tool/remove).\\n\\nAdding a plugin requires a unique ID and what we call a locator, which is a string that dictates\\nwhere to locate and download the plugin from. Here\'s an example for Node.js, but this isn\'t\\nnecessary as it\'s built-in:\\n\\n```shell\\n$ proto add-plugin node source:https://github.com/moonrepo/node-plugin/releases/latest/download/node_plugin.wasm\\n```\\n\\nAdditionally, removing a plugin is even easier.\\n\\n```shell\\n$ proto remove-plugin node\\n```\\n\\n## Purge tools and plugins\\n\\nproto has supported cleaning for quite some time through the\\n[`proto clean`](/docs/proto/commands/clean) command (and the\\n[`auto-clean` setting](/docs/proto/config#user-configuration)), which would automatically delete\\ninstalled tool versions and temporary files that are older then a specific timeframe. This helps to\\nfree up disk space for unused or rarely used tools.\\n\\nIn this release, we\'re expanding the `clean` command\'s functionality with a concept known as\\npurging, which will \\"delete entirely\\". The first being the new `--purge` option, which will delete a\\ntool, its manifest, _all_ installed versions, and the entire `~/.proto/tools/` directory.\\n\\n```shell\\n# Delete all traces of Node.js\\n$ proto clean --purge node\\n```\\n\\nAdditionaly, a new `--purge-plugins` option can be used to delete all downloaded plugins (the\\n`~/.proto/plugins` directory). Useful for house keeping or if you want to start fresh.\\n\\n```shell\\n$ proto clean --purge-plugins\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.16.0) for a full list\\nof changes.\\n\\n- Added folder locking during tool installation to avoid colliding processes.\\n- Renamed `PROTO_ROOT` to `PROTO_HOME`, but we\'ll support `PROTO_ROOT` for the time being."},{"id":"proto-v0.15","metadata":{"permalink":"/blog/proto-v0.15","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-23_proto-v0.15.mdx","source":"@site/blog/2023-08-23_proto-v0.15.mdx","title":"proto v0.15 - Install and uninstall globals","description":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.","date":"2023-08-23T00:00:00.000Z","formattedDate":"August 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"},{"label":"global","permalink":"/blog/tags/global"}],"readingTime":1.48,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.15","title":"proto v0.15 - Install and uninstall globals","authors":["milesj"],"tags":["proto","wasm","plugin","global"]},"unlisted":false,"prevItem":{"title":"proto v0.16 - Add, remove, and purge plugins","permalink":"/blog/proto-v0.16"},"nextItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"}},"content":"This is a small release that adds support for uninstalling globals, and improves our WASM APIs.\\n\\n\x3c!--truncate--\x3e\\n\\n## Uninstall global dependencies\\n\\nproto has supported [installing globals since v0.5](./proto-v0.5), but there\'s been no way to\\nuninstall an existing global, until now! In this release, we\'re introducing the\\n[`proto uninstall-global`](/docs/proto/commands/uninstall-global) command, which will do just that!\\nThe API is exactly the same as its installation counter-part.\\n\\n```shell\\nproto install-global node prettier\\n\\n# On second thought, nevermind...\\nproto uninstall-global node prettier\\n```\\n\\n### WASM functions\\n\\nImplementing this command was rather straight forward, but most of the work went into supporting\\n[`install_global` and `uninstall_global`](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\nfunctions for WASM plugins, and then updating all existing plugins! For those of you writing your\\nown plugins, here\'s an example of what the Rust code looks like:\\n\\n```rust\\n#[plugin_fn]\\npub fn install_global(\\n Json(input): Json,\\n) -> FnResult> {\\n let result = exec_command!(inherit, \\"npm\\", [\\"install\\", \\"--global\\", &input.dependency]);\\n\\n Ok(Json(InstallGlobalOutput::from_exec_command(result)))\\n}\\n```\\n\\n### TOML setting\\n\\nWe\'ve also updated our TOML plugins to support uninstalling globals through the new\\n[`globals.uninstall-args`](/docs/proto/toml-plugin#global-packages) setting. Hopefully the name is\\nself explanatory, but it\'s a list of arguments passed to the tool\'s binary, that\'ll uninstall the\\nglobal.\\n\\n```toml\\n# ...\\n\\n[globals]\\ninstall-args = [\\"install\\", \\"--global\\", \\"{dependency}\\"]\\nuninstall-args = [\\"uninstall\\", \\"--global\\", \\"{dependency}\\"]\\n```\\n\\n## Improved WASM documentation\\n\\nWith each release we\'re slowly stabilizing the WASM and TOML APIs for an official v1 release (which\\nis soon), and with this, it requires more documentation. As part of this release, we\'ve done a giant\\npolish pass on our WASM documentation, and have included the following sections:\\n\\n- [Virtual paths](/docs/proto/wasm-plugin#virtual-paths)\\n- [Host environment](/docs/proto/wasm-plugin#host-environment)\\n- [Host functions](/docs/proto/wasm-plugin#host-functions)\\n- [Tool ID and context](/docs/proto/wasm-plugin#tool-id-and-context)\\n- [Installing and uninstalling globals](/docs/proto/wasm-plugin#installing-and-uninstalling-globals)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.15.0) for a full list\\nof changes.\\n\\n- Major WASM API improvements, including backwards incompatible changes."},{"id":"moon-v1.12","metadata":{"permalink":"/blog/moon-v1.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-21_moon-v1.12.mdx","source":"@site/blog/2023-08-21_moon-v1.12.mdx","title":"moon v1.12 - Task improvements: extending, interactive, and more","description":"In this release, we focused heavily on improving tasks, its configuration, and related systems.","date":"2023-08-21T00:00:00.000Z","formattedDate":"August 21, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":3.32,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.12","title":"moon v1.12 - Task improvements: extending, interactive, and more","authors":["milesj"],"tags":["tasks","inheritance"],"image":"./img/moon/v1.12.png"},"unlisted":false,"prevItem":{"title":"proto v0.15 - Install and uninstall globals","permalink":"/blog/proto-v0.15"},"nextItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"}},"content":"In this release, we focused heavily on improving tasks, its configuration, and related systems.\\n\\n\x3c!--truncate--\x3e\\n\\n## Extending sibling or inherited tasks\\n\\nThree months ago, we posted an\\n[RFC on how to support task extending / task variants](https://github.com/moonrepo/moon/issues/849).\\nOn paper this doesn\'t sound like a hard problem to solve, but internally it would of been an uphill\\nbattle to implement. Thanks to previous releases from the past few months, and the rewrite of the\\nproject graph, task builder, and more, this implementation was a breeze. To finalize the RFC, we\\nwent with option 2, by adding a new `extends` field to task configurations.\\n\\nWith this new addition, we can now rewrite this old configuration, which was needlessly\\nrepetitive...\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n command: \'eslint . --fix\'\\n local: true\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n```\\n\\nInto the following configuration.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n lint:\\n command: \'eslint .\'\\n inputs:\\n - \'@globs(sources)\'\\n - \'@globs(tests)\'\\n - \'*.js\'\\n - \'.eslintrc.js\'\\n - \'tsconfig.json\'\\n - \'/.eslintignore\'\\n - \'/.eslintrc.js\'\\n - \'/tsconfig.eslint.json\'\\n - \'/tsconfig.options.json\'\\n\\n lint-fix:\\n extends: \'lint\'\\n args: \'--fix\'\\n local: true\\n```\\n\\nWe\'re very happy with this solution, as it\'s far more readable, maintainable, and doesn\'t introduce\\nyet another paradigm to learn. Our goal was to be as familiar as possible, while providing extensive\\nfunctionality behind the scenes, which we believe to have achieved.\\n\\nSome other interesting facts around task extending:\\n\\n- When extending a task, [merge strategies](/docs/concepts/task-inheritance#merge-strategies) are\\n applied in a similar fashion to inheritance.\\n- Inherited tasks can be extended from by project-level tasks.\\n- It\'s possible to create multiple extended chains.\\n\\n## Configure tasks as interactive\\n\\nSix months ago, we added support for [interactive tasks in v0.24](./v0.24#interactive-tasks), but\\nonly if certain conditions were met: if only 1 target is running, they are considered interactive,\\nor if the `--interactive` option was passed to [`moon run`](/docs/commands/run). However, we believe\\nit nice to support interactive tasks through task configuration directly, but it required some\\nthought into how this would work within the dependency graph and pipeline, as only 1 task can\\ninteract with stdin at a time.\\n\\nWe solved this problem by reworking our dependency graph so that interactive tasks are isolated from\\nother actions in the graph, and are not run in parallel with other actions. This will result in\\nlonger dependency chains, but results in a working stdin solution.\\n\\nTo mark a task as interactive, enable the [`options.interactive`](/docs/config/project#interactive)\\nsetting.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n init:\\n command: \'init-app\'\\n options:\\n interactive: true\\n```\\n\\n## Tokens in enviroment variables\\n\\nUp until now, [token functions and variables](/docs/concepts/token) were only supported in task\\ncommands, args, inputs, and outputs, but not environment variables... why? Honestly, there was no\\nreal reason they weren\'t supported, it simply never crossed our mind! But thanks to requests from\\nthe community, both token functions and variables are now supported in task\\n[`env`](/docs/config/project#env-1).\\n\\nThis is great for propagating moon values to other systems. For example, say you want to use moon\\nproject names for Sentry, keeping a 1:1 mapping.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n start:\\n command: \'run-server\'\\n env:\\n SENTRY_PROJECT: \'$project\'\\n```\\n\\nIf you\'re familiar with tokens, you may be asking yourself, \\"How do token functions work since they\\nexpand to a list of paths?\\" That\'s a great question! When token functions are used in an environment\\nvariable, like `@group(sources)`, the list of paths will be joined with a comma (`,`).\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n # ...\\n env:\\n SRCS: \'@group(sources)\'\\n```\\n\\nSince the environment variable is simply a string, you could parse it with your language of choice\\nto extract the list of paths.\\n\\n```js\\nconst paths = process.env.SRCS.split(\',\');\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.12.0) for a full list\\nof changes.\\n\\n- Added git worktree support.\\n- Updated task `outputs` to support negated globs.\\n- Will now log a warning to the console if a configuration file uses the `.yaml` extension."},{"id":"proto-v0.14","metadata":{"permalink":"/blog/proto-v0.14","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-08-11_proto-v0.14.mdx","source":"@site/blog/2023-08-11_proto-v0.14.mdx","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","description":"With this release, we\'ve finished our migration to a WASM based plugin architecture.","date":"2023-08-11T00:00:00.000Z","formattedDate":"August 11, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.14","title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"unlisted":false,"prevItem":{"title":"moon v1.12 - Task improvements: extending, interactive, and more","permalink":"/blog/moon-v1.12"},"nextItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"}},"content":"With this release, we\'ve finished our migration to a WASM based plugin architecture.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full migration to WASM\\n\\nIn [our last release](./proto-v0.13), we migrated the Bun, Deno, and Go plugins to WASM. In this\\nrelease, we\'re excited to announce that we have completed our WASM migration by also converting\\nNode.js (and npm, etc) and Rust to WASM plugins. We\'ve also updated our TOML plugin layer to use\\nWASM under the hood.\\n\\nWith this, 100% of our tools are now powered by WASM, and the APIs are stable enough for you, the\\nconsumers, to build your own plugins! We have plans for additional APIs in the next release,\\nprimarily installing and uninstall globals, and a hooks system, so look forward to that! To learn\\nmore about our official plugins, check out the their repositories!\\n\\n- [Bun](https://github.com/moonrepo/bun-plugin)\\n- [Deno](https://github.com/moonrepo/deno-plugin)\\n- [Go](https://github.com/moonrepo/go-plugin)\\n- [Node](https://github.com/moonrepo/node-plugin)\\n- [Rust](https://github.com/moonrepo/rust-plugin)\\n- [Schema](https://github.com/moonrepo/schema-plugin)\\n\\nThis release may seem light, but we\\n[rewrote the entire core](https://github.com/moonrepo/proto/pull/161) from the ground up to support\\na pure plugin based architecture. This was a lot of work, but our implementation is far easier to\\nwork with, and more robust. As part of this process, we improved version and range handling, archive\\nunpacking, and much more!\\n\\n> Because of the rewrite, we may have introduced a few bugs. Please report any issues!\\n\\n## Breaking changes for TOML plugins\\n\\nIn preparation for the next release, and as clean up during the rewrite, we\'ve made a few breaking\\nchanges to the TOML schema, primarily around global handling. To start, this old code:\\n\\n```toml\\n[install]\\nglobals-dir = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\nglobal-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nCan now be rewritten as:\\n\\n```toml\\n[globals]\\nlookup-dirs = [\\"$PROTOSTAR_HOME/bin\\", \\"$HOME/.protostar/bin\\"]\\ninstall-args = [\\"install\\", \\"--force\\", \\"{dependency}\\"]\\n```\\n\\nAnd lastly, the `install.unpack` setting has been removed. We believe our installation layer is\\nsmart enough to unpack or move files automatically.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.14.0) for a full list\\nof changes.\\n\\n- Versions defined in `.prototools` must be fully-qualified semantic versions. Partial versions\\n (missing patch or minor) are no longer supported. This may change in the future based on feedback.\\n- Tool and plugin names must now be in kebab-case.\\n- Node\\n - Yarn 2+ is now installed using `@yarnpkg/cli-dist`. We no longer downgrade to the latest v1.\\n - Will no longer detect a version from `engines` in `package.json`.\\n- Rust\\n - Will now detect a version/channel from `rust-toolchain.toml` and `rust-toolchain`."},{"id":"moon-v1.11","metadata":{"permalink":"/blog/moon-v1.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-31_moon-v1.11.mdx","source":"@site/blog/2023-07-31_moon-v1.11.mdx","title":"moon v1.11 - Next-generation project graph","description":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of","date":"2023-07-31T00:00:00.000Z","formattedDate":"July 31, 2023","tags":[{"label":"project-graph","permalink":"/blog/tags/project-graph"},{"label":"project","permalink":"/blog/tags/project"}],"readingTime":4.095,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.11","title":"moon v1.11 - Next-generation project graph","authors":["milesj"],"tags":["project-graph","project"],"image":"./img/moon/v1.11.png"},"unlisted":false,"prevItem":{"title":"proto v0.14 - Node.js and Rust now powered by WASM plugins","permalink":"/blog/proto-v0.14"},"nextItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"}},"content":"With this release, we\'ve focused heavily on rewriting our project graph for the next-generation of\\nmoon.\\n\\n\x3c!--truncate--\x3e\\n\\n## New project graph\\n\\nOne of the first features that was built for moon was the project graph, as this was required to\\ndetermine relationships between tasks and projects. Its initial implementation was rather simple, as\\nit was a basic directed acyclic graph (DAG). However, as moon grew in complexity, so did the project\\ngraph, and overtime, it has accrued a lot of cruft and technical debt.\\n\\nOne of the biggest pain points has been the project graph cache, and correctly invalidating the\\ncache for all necessary scenarios. If you\'ve been using moon for a long time, you\'re probably aware\\nof all the hot fixes and patches that have been released. Another problem with the cache, is that it\\nincluded hard-coded [file system paths](https://github.com/moonrepo/moon/issues/937) and\\n[environment variables](https://github.com/moonrepo/moon/issues/896), both of which would not\\ninvalidate the cache when changed.\\n\\nWe felt it was time to rebuild the project graph from the ground up. Some of this work has already\\nlanded in [previous releases](./moon-v1.9#rewritten-task-inheritance).\\n\\n### Old implementation\\n\\nFor those of you who are interested in the technical details, here\'s a quick overview of how the old\\nproject graph worked. To start, the graph was composed around the following phases:\\n\\n- **Build** - Projects are loaded into the graph (nodes), relationships are linked (edges),\\n configurations are read, tasks are inherited, and platform/language rules are applied.\\n- **Expand** - In all tasks, token variables and functions are expanded/substituted, dependencies\\n are expanded (`^:deps`, etc), `.env` files are read (when applicable), so on and so forth.\\n- **Validate** - Enforces project and task boundaries and constraints.\\n\\nThis is quite a lot of work, and it was all done in _a single pass_. What this means is that for\\neach project loaded into the graph, we would recursively build -> expand -> validate, until all\\nprojects have been loaded, synchronously at once in the same thread. Because this is a rather\\nexpensive operation, the project graph cache was introduced to avoid having to do this work on every\\nrun.\\n\\nMakes sense, right? For the most part yes, but there is a core problem with the solution above, and\\nif you\'ve noticed it already, amazing! The problem is that out of these 3 phases, only the build\\nphase is truly cacheable, as the expand and validate phases are far too dynamic and dependent on the\\nenvironment. This means that the cache is only partially effective, and in some cases, entirely\\nbroken.\\n\\nAnother unrelated problem with this solution, is that because everything is built in a single pass,\\nadvanced functionality that requires multiple passes is not possible and has been stuck on the\\nbacklog.\\n\\n### New implementation\\n\\nFor backwards compatibility, the new project graph works in a similar manner, but has none of the\\nshortcomings of the old implementation (hopefully). To start, the new project graph still has the\\nsame 3 phases, but they are _no longer processed in a single pass_, instead...\\n\\nThe build phase is now asynchronous, enabling deeper interoperability with the rest of the\\nasync-aware codebase. However, the critical change is that the project graph cache is now written\\n_after_ the build phase (and read _before_), instead of after the entire graph being generated.\\n\\n> The new cache file is `.moon/cache/states/partialProjectGraph.json`, and is named partial because\\n> tasks have not been expanded. Use `moon project-graph --json` for a fully expanded graph.\\n\\nThe expand phase has changed quite a bit. Instead of expanding everything at once, projects and\\ntasks are only expanded when they are needed. For example, if only running a single target, we\'ll\\nnow only expand that project and task, instead of _everything_ in the graph. With this change, you\\nshould potentially see performance increases, unless you\'re using `moon ci` or `moon check --all`.\\n\\nAnd lastly, validation is still the same, but has been reworked so that we can easily extend it with\\nmore validation rules in the future.\\n\\n### Unlocked features\\n\\nWith these changes to building and expanding, we\'ve unlocked a few new features that were not\\npossible before.\\n\\n- Task dependencies can now reference tag based targets. For example, say we want to build all React\\n projects before starting our application.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n deps:\\n - \'#react:build\'\\n```\\n\\n- Task commands and arguments will now substitute environment variables, by first checking `env`,\\n then those from the system.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'docker build --build-arg pkg=$PKG_NAME\'\\n env:\\n PKG_NAME: \'foo-bar\'\\n```\\n\\n- Project dependencies can now mark relationships as `build`. This is only applicable for languages\\n that support build dependencies, like Rust.\\n\\n```yaml title=\\"moon.yml\\"\\ndependsOn:\\n - id: \'foo\'\\n scope: \'build\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.11.0) for a full list\\nof changes.\\n\\n- Identifiers (project names, file groups, etc) can now be prefixed with underscores (`_`).\\n- Added Poetry detection support for Python projects.\\n- Added an `experiments` setting to `.moon/workspace.yml`."},{"id":"proto-v0.13","metadata":{"permalink":"/blog/proto-v0.13","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-21_proto-v0.13.mdx","source":"@site/blog/2023-07-21_proto-v0.13.mdx","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","description":"With this release, we\'re embracing WASM even further.","date":"2023-07-21T00:00:00.000Z","formattedDate":"July 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":2.195,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.13","title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"unlisted":false,"prevItem":{"title":"moon v1.11 - Next-generation project graph","permalink":"/blog/moon-v1.11"},"nextItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"}},"content":"With this release, we\'re embracing WASM even further.\\n\\n\x3c!--truncate--\x3e\\n\\n## Core migration to WASM\\n\\nNow that WASM plugin support is up and running, we\'ve hit a non-ideal situation where we have\\nmultiple competing implementations for \\"tools\\" in proto. We currently have 3 different approaches:\\n\\n- Tools implemented in Rust and built into proto\'s core.\\n- TOML based plugins, with a simple Rust based wrapper.\\n- WASM based plugins.\\n\\nThis is far too many implementations to support, and makes it extremely difficult to add new\\nfeatures for tools, as it affects all 3. To remedy this situation, we\'ve decided to migrate all core\\ntools to WASM plugins, and remove the Rust based implementations. The core of proto and its CLI will\\nstill be Rust, but will be slowly migrated into a truly pluggable architecture.\\n\\nTo test drive and experiment with this solution, we\'ve migrated\\n[Bun](https://github.com/moonrepo/bun-plugin), [Deno](https://github.com/moonrepo/deno-plugin), and\\n[Go](https://github.com/moonrepo/go-plugin) into WASM plugins, and starting with this release, they\\nare purely powered by WASM and have been removed entirely from the Rust implementation.\\n\\nIn the next release, we hope to migrate Node.js and Rust as well. And in a future release, the TOML\\nplugins will be compiled into\\n[`.wat` files](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format)\\nand loaded as WASM plugins. From here, we will have a single tool implementation, and can implement\\nsome really exciting features!\\n\\n## New `github:` plugin configuration\\n\\nAlongside the `source:` configuration strategy, plugins can now be configured with the `github:`\\nstrategy to locate WASM files from GitHub releases. For example, the `bun_plugin.wasm` file will be\\ndownloaded from our\\n[`bun-plugin`\'s latest release](https://github.com/moonrepo/bun-plugin/releases).\\n\\n[Learn more about this new locator scope!](/docs/proto/plugins#github)\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nbun = \\"github:moonrepo/bun-plugin\\"\\n```\\n\\n> Bun support is built into proto, there is merely an example!\\n\\n## New `proto plugins` commands\\n\\nWith the advent of plugins, we thought it would be nice to know which plugins are actually\\nconfigured and in use, without having to manually search config files across the file system, and as\\nsuch, have added a new [`proto plugins`](/docs/proto/commands/tool/list-plugins) command.\\n\\nThis command is simple. It will list all plugins that are currently configured for the current\\nproject, by loading all `.prototools` files up the tree, and loading the user\\n`~/.proto/config.toml`.\\n\\n```shell\\n$ proto plugins\\nbun - Bun\\n GitHub: moonrepo/bun-plugin\\n Tag: latest\\n\\ndeno - Deno\\n GitHub: moonrepo/deno-plugin\\n Tag: latest\\n\\ngo - Go\\n GitHub: moonrepo/go-plugin\\n Tag: latest\\n```\\n\\n[Learn more about this new command!](/docs/proto/commands/tool/list-plugins)\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.13.0) for a full list\\nof changes.\\n\\n- Added documentation for writing [unit tests for WASM plugins](/docs/proto/wasm-plugin#unit-tests).\\n- Updated `proto clean` and `proto use` to load and merge all `.prototools` from the current\\n directory and upwards.\\n- Many WASM API improvements."},{"id":"moon-v1.10","metadata":{"permalink":"/blog/moon-v1.10","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-10_moon-v1.10.mdx","source":"@site/blog/2023-07-10_moon-v1.10.mdx","title":"moon v1.10 - Mid-year quality of life improvements","description":"Instead of launching a large feature this release, we\'re focusing on quality of life and developer","date":"2023-07-10T00:00:00.000Z","formattedDate":"July 10, 2023","tags":[{"label":"quality","permalink":"/blog/tags/quality"},{"label":"life","permalink":"/blog/tags/life"},{"label":"qol","permalink":"/blog/tags/qol"},{"label":"ignore","permalink":"/blog/tags/ignore"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"ci","permalink":"/blog/tags/ci"},{"label":"debug","permalink":"/blog/tags/debug"}],"readingTime":3.6,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.10","title":"moon v1.10 - Mid-year quality of life improvements","authors":["milesj"],"tags":["quality","life","qol","ignore","hasher","vcs","ci","debug"],"image":"./img/moon/v1.10.png"},"unlisted":false,"prevItem":{"title":"proto v0.13 - Bun, Deno, and Go now powered by WASM plugins","permalink":"/blog/proto-v0.13"},"nextItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nInstead of launching a large feature this release, we\'re focusing on quality of life and developer\\nexperience improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Quality improvements\\n\\nIn the past 6 months, we\'ve released over 16 versions of moon, with our official v1.0 release among\\nthem. This is extremely impressive and we\'re very proud of the progress we\'ve made. To continue this\\ntrend, we\'ll be starting a new initiative that will land quality of life improvements (instead of\\nmajor features) every 6 months, starting with this release!\\n\\n### Potential breaking changes\\n\\nWhile APIs haven\'t changed, we have introduced some fixes for edge case that could be considered\\nbreaking, but for the most part, these changes probably won\'t affect you. With that being said...\\n\\nThe first fix is that tasks configured with the same `outputs` location (including glob overlap)\\nwill now error. This is extremely problematic for caching and hydration, as multiple tasks all\\nwriting to the same output will inflate the tarball, and cause unwanted side effects. To demonstrate\\nthis, the following is now an error:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n build:\\n command: \'foo build\'\\n outputs:\\n - \'dist\'\\n\\n compile:\\n command: \'bar compile\'\\n outputs:\\n - \'dist\'\\n```\\n\\nThe other fix, which primarily applies to [`moon ci`][ci] and [`moon check`](/docs/commands/check),\\nis that a target will be skipped if one of its dependencies failed or has also been skipped.\\nPreviously the target would attempt to run and most likely fail since it relied on artifacts from\\nits dependencies (which don\'t exist). Another benefit of this change is that runs should be much\\nfaster, as we\'re not wasting time running targets that we know will fail, which is great for CI.\\n\\n### Ignore hashing input files\\n\\nWe\'re introducing 2 new settings to [`.moon/workspace.yml`](/docs/config/workspace) that\'ll provide\\nmore control over the hashing flow, [`hasher.ignorePatterns`](/docs/config/workspace#ignorepatterns)\\nand [`hasher.ignoreMissingPatterns`](/docs/config/workspace#ignoremissingpatterns).\\n\\nThe `ignorePatterns` setting can be used to entirely ignore a file (using glob patterns) from being\\nhashed, and in turn, exclude it as an input source. For example, say we want to ignore all image\\nfiles.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nhasher:\\n ignorePatterns:\\n - \'**/*.{png,svg}\'\\n```\\n\\nThe `ignoreMissingPatterns` setting pairs with\\n[`hasher.warnOnMissingInputs`](/docs/config/workspace#warnonmissinginputs). When enabled, moon will\\nlog a warning to the terminal that an input is missing. This is useful for uncovering\\nmisconfigurations, but can be quite noisy when inputs are truly optional. This new setting can be\\nused to filter these warnings.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nhasher:\\n warnOnMissingInputs: true\\n ignoreMissingPatterns:\\n - \'**/.eslintrc.*\'\\n - \'**/*.config.*\'\\n```\\n\\n### Customize base and head revision\\n\\nThe [`moon ci`][ci] command has always supported customizing the Git base and head revisions through\\nthe `--base` and `--head` options respectively. This was a requirement for running CI effectively,\\nby comparing across branches or commits. However, the [`moon run`][run] did not support this, as\\nthis command was designed to primarily be run locally, but it turns out, y\'all are using it in CI\\ntoo!\\n\\nTo improve the effectiveness of `moon run` in CI, we\'ve made the following improvements, all of\\nwhich require the `--remote` option to be passed.\\n\\n- Added support for `MOON_BASE` and `MOON_HEAD` environment variables, for customizing the base and\\n head revisions respectively (also supported in `moon ci`). If not defined, will use the default\\n branch and `HEAD`.\\n- When the current branch is the default branch, the base revision will be the previous commit.\\n Useful for commits landing on master/main.\\n\\n## New debugging a task guide\\n\\nRunning tasks is the most common way to interact with moon, so what do you do when your task isn\'t\\nworking as expected? Diagnose it of course! However, diagnosing the root cause of a broken task can\\nbe quite daunting:\\n\\n- Is configuration wrong?\\n- What about inheritance? Or merging?\\n- Is the task platform correct?\\n- Were tokens expanded correctly?\\n- What about variable substitution?\\n- So on and so forth...\\n\\nTo help answer these questions, we\'re excited to publish an\\n[in-depth guide for debugging a task](/docs/guides/debug-task)! These steps are the same steps we\\nuse internally to diagnose reported issues, or help the Discord community. We hope you find this\\nguide extremely beneficial!\\n\\n
\\n
\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.10.0) for a full list\\nof changes.\\n\\n- Updated [`moon ci`][ci] to include a summary of all failed actions.\\n- Updated the run report to include stderr/stdout for all attempts.\\n\\n[ci]: /docs/commands/ci\\n[run]: /docs/commands/run"},{"id":"proto-v0.12","metadata":{"permalink":"/blog/proto-v0.12","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-07-07_proto-v0.12.mdx","source":"@site/blog/2023-07-07_proto-v0.12.mdx","title":"proto v0.12 - Experimental WASM plugins","description":"After months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.","date":"2023-07-07T00:00:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"wasm","permalink":"/blog/tags/wasm"},{"label":"plugin","permalink":"/blog/tags/plugin"}],"readingTime":1.885,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.12","title":"proto v0.12 - Experimental WASM plugins","authors":["milesj"],"tags":["proto","wasm","plugin"]},"unlisted":false,"prevItem":{"title":"moon v1.10 - Mid-year quality of life improvements","permalink":"/blog/moon-v1.10"},"nextItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nAfter months of hard work, we\'re excited to release our first iteration of WASM plugins for proto.\\n\\n\x3c!--truncate--\x3e\\n\\n## WASM plugins\\n\\nThree months ago, we [published an RFC](https://github.com/moonrepo/proto/issues/73) for supporting\\nplugins in proto. Plugins are a must, as they allow consumers to easily extend proto with additional\\ntools, instead of them being built into proto core (which is very time consuming).\\n\\nTwo months ago, we released support for [TOML plugins](/docs/proto/toml-plugin). These are very\\nsimple plugins powered by static configuration files. They\'re great for simple tools like CLIs and\\npre-built languages, as everything is powered by static HTTP URLs and file names. However, sometimes\\nyou need dynamic control...\\n\\nAnd after 2 months of development, and help from the [Extism team](https://extism.org/), we\'re\\nexcited to announce initial support for WASM plugins. WASM is a portable binary format, with\\nsandboxed access to the file system (via WASI), and the ability to execute processes and fetch URLs.\\nThis means that plugins can be written in any language that compiles to WASM, like Rust, C, C++, Go,\\nTypeScript, and more. This removes the requirement of writing Rust and contributing to proto\\ndirectly!\\n\\n
\\n
\\n\\n### Using WASM plugins\\n\\nOnce the `.wasm` file is publicly available for download, we can configure it as a plugin in\\n[`.prototools`](/docs/proto/config).\\n\\n```toml\\n[plugins]\\nmy-plugin = \\"source:https://domain.com/path/to/wasm/plugin.wasm\\"\\n```\\n\\nAnd execute all `proto` commands using the configured plugin identifier.\\n\\n```shell\\nproto install my-plugin\\n```\\n\\n### Example implementation\\n\\nThe official guide above walks you through creating a plugin, but to demonstrate the power of WASM\\nplugins, here\'s an example function that defines parameters for downloading and installing Node.js.\\nThis is written in Rust and using Extism\'s official PDK.\\n\\n```rust\\n#[plugin_fn]\\npub fn download_prebuilt(\\n Json(input): Json,\\n) -> FnResult> {\\n let version = input.env.version;\\n let arch = input.env.arch;\\n\\n let prefix = match input.env.os {\\n HostOS::Linux => format!(\\"node-v{version}-linux-{arch}\\"),\\n HostOS::MacOS => format!(\\"node-v{version}-darwin-{arch}\\"),\\n HostOS::Windows => format!(\\"node-v{version}-win-{arch}\\"),\\n other => {\\n return Err(PluginError::UnsupportedPlatform {\\n tool: NAME.into(),\\n platform: format!(\\"{:?}\\", other),\\n })?;\\n }\\n };\\n\\n let filename = if input.env.os == HostOS::Windows {\\n format!(\\"{prefix}.zip\\")\\n } else {\\n format!(\\"{prefix}.tar.xz\\")\\n };\\n\\n Ok(Json(DownloadPrebuiltOutput {\\n archive_prefix: Some(prefix),\\n download_url: format!(\\"https://nodejs.org/dist/v{version}/{filename}\\"),\\n download_name: Some(filename),\\n checksum_url: Some(format!(\\"https://nodejs.org/dist/v{version}/SHASUMS256.txt\\")),\\n ..DownloadPrebuiltOutput::default()\\n }))\\n}\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.12.0) for a full list\\nof changes."},{"id":"moon-v1.9","metadata":{"permalink":"/blog/moon-v1.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-26_moon-v1.9.mdx","source":"@site/blog/2023-06-26_moon-v1.9.mdx","title":"moon v1.9 - VCS hooks management and improved task inheritance","description":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete","date":"2023-06-26T00:00:00.000Z","formattedDate":"June 26, 2023","tags":[{"label":"vcs","permalink":"/blog/tags/vcs"},{"label":"git","permalink":"/blog/tags/git"},{"label":"hooks","permalink":"/blog/tags/hooks"},{"label":"task","permalink":"/blog/tags/task"},{"label":"inheritance","permalink":"/blog/tags/inheritance"}],"readingTime":2.625,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.9","title":"moon v1.9 - VCS hooks management and improved task inheritance","authors":["milesj"],"tags":["vcs","git","hooks","task","inheritance"],"image":"./img/moon/v1.9.png"},"unlisted":false,"prevItem":{"title":"proto v0.12 - Experimental WASM plugins","permalink":"/blog/proto-v0.12"},"nextItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"}},"content":"In this release, we\'re introducing a long requested feature, VCS hooks! As well as a complete\\nrewrite of our task inheritance layer.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for VCS hooks\\n\\nIn our last release, we added support for [code ownership](./moon-v1.8), to better help teams manage\\ntheir code review and approval workflows. To continue this trend of \\"features all companies require\\nbut don\'t have a good solution for\\", we\'re adding support for VCS hooks,\\n[starting with Git](https://git-scm.com/docs/githooks).\\n\\nIf you\'re unfamiliar with Git hooks, they\'re a mechanism for running scripts before or after certain\\nGit events. For example, before a commit is added, before pushing, or after merging. Hooks can be\\nused for such situations as:\\n\\n- Ensuring commit messages abide by a certain format.\\n- Ensuring affected project\'s source code pass linting and formatting checks.\\n- Validating configuration files.\\n- And much more!\\n\\n:::info\\n\\nFor more information, view our official in-depth [VCS hooks guide](/docs/guides/vcs-hooks)!\\n\\n:::\\n\\n### New `vcs` settings\\n\\nTo support hooks, we\'re introducing the `vcs.hooks` and `vcs.syncHooks` settings to\\n[`.moon/workspace.yml`](/docs/config/workspace). The former is where you configure the list of\\ncommands to run, grouped by hook type.\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nvcs:\\n hooks:\\n pre-commit:\\n - \'pre-commit run\'\\n - \'moon run :lint --affected\'\\n```\\n\\nThe latter will automatically create and sync hooks with the local VCS checkout, enabling them going\\nforward. [Learn more about enabling hooks](/docs/guides/vcs-hooks#enabling-hooks), and choosing the\\napproach that works best for you or your team!\\n\\n### New `moon sync hooks` command\\n\\nAlthough moon can [automatically create](/docs/config/workspace#synchooksonrun) hooks when running a\\ntarget, this may be undesirable or abrasive for some developers. Instead, we also support an opt-in\\nsolution through the [`moon sync hooks`](/docs/commands/sync/hooks) command, which will manually\\ncreate the hooks.\\n\\n```shell\\n$ moon sync hooks\\n```\\n\\n## Rewritten task inheritance\\n\\nOne of the most complicated systems in moon is the task inheritance layer. On the surface, it sounds\\nrather simple, but internally it was very complicated. For common use cases, it worked very well,\\nbut for advanced use cases, how a task was \\"inherited and merged\\" was sometimes undefined behavior.\\n\\nOver the past year, we\'ve introduced many new features, such as\\n[implicit dependencies and inputs](./v0.23), [tag-based task inheritance](./moon-v1.2),\\n[project-level environment variables](./v0.23#project-level-environment-variables),\\n[custom languages](./v0.25#custom-project-language) and\\n[platforms](./v0.24#project-level-task-platform), and so much more. Each of these new features would\\nthrow yet another facet to be aware of during the task inheritance model, and over the past year, it\\nhas become rather unwieldy.\\n\\nTo rectify this situation before it becomes worse, we rewrote our\\n[project, task](https://github.com/moonrepo/moon/pull/921), and\\n[task inheritance](https://github.com/moonrepo/moon/pull/939) layers from the ground-up using a new\\nbuilder pattern, including writing all new unit tests, to properly and efficiently account for all\\nedge cases.\\n\\nGoing forward, tasks should be far more accurate and deterministic. If you encounter any weirdness,\\nit\'s either a bug/edge case that was rectified (and is no longer allowed), or a bug/edge case not\\naccounted for in our current unit test suite. Please report them either way!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.9.0) for a full list of\\nchanges.\\n\\n- Added `--clean` and `--force` flags to `moon sync codeowners` command.\\n- Updated `moon init` to detect VCS providers and resolve fully-qualified tool versions.\\n- Improved VCS file handling, caching, and performance."},{"id":"proto-v0.11","metadata":{"permalink":"/blog/proto-v0.11","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-25_proto-v0.11.mdx","source":"@site/blog/2023-06-25_proto-v0.11.mdx","title":"proto v0.11 - New shims and better logging","description":"This is a small release that improves shims and logs.","date":"2023-06-25T00:00:00.000Z","formattedDate":"June 25, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"shim","permalink":"/blog/tags/shim"},{"label":"logging","permalink":"/blog/tags/logging"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.11","title":"proto v0.11 - New shims and better logging","authors":["milesj"],"tags":["proto","shim","logging"]},"unlisted":false,"prevItem":{"title":"moon v1.9 - VCS hooks management and improved task inheritance","permalink":"/blog/moon-v1.9"},"nextItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"}},"content":"This is a small release that improves shims and logs.\\n\\n\x3c!--truncate--\x3e\\n\\n## New and improved shims\\n\\nThe core facet of proto is our shims found at `~/.proto/bin`. They exist purely to re-route tool\\nexecutions internally to proto, so that we can detect the correct version of these tools to run.\\nHowever, maintaining and creating these shims has historically been very complicated. So we chose to\\nrewrite them from the ground-up!\\n\\nAll tools should continue to function exactly as they did before, if not better. Furthermore,\\nbecause of this new shim layer, we\'re now able to create what we call \\"secondary shims\\", like\\n[`bunx` for Bun](https://bun.sh/docs/cli/bunx), `pnpx` for pnpm, and `yarnpkg` for Yarn.\\n\\n## Better logging\\n\\nproto has supported logging since its initial release behind the `PROTO_LOG` environment variable.\\nHowever, this variable wasn\'t heavily documented, nor easily discoverable. So as an alternative, we\\nnow support a global `--log` option, which can be passed to any `proto` command.\\n\\n```shell\\n$ proto install node --log trace\\n```\\n\\nOn top of this, we also ran an audit of all our log calls, to improve messaging, include additional\\ninformation, rework applicable levels, and more. They should be far more readable!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.11.0) for a full list\\nof changes."},{"id":"moon-v1.8","metadata":{"permalink":"/blog/moon-v1.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-06-12_moon-v1.8.mdx","source":"@site/blog/2023-06-12_moon-v1.8.mdx","title":"moon v1.8 - Code owners and shared configuration","description":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code","date":"2023-06-12T00:00:00.000Z","formattedDate":"June 12, 2023","tags":[{"label":"source","permalink":"/blog/tags/source"},{"label":"code","permalink":"/blog/tags/code"},{"label":"owners","permalink":"/blog/tags/owners"},{"label":"ownership","permalink":"/blog/tags/ownership"}],"readingTime":3.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.8","title":"moon v1.8 - Code owners and shared configuration","authors":["milesj"],"tags":["source","code","owners","ownership"],"image":"./img/moon/v1.8.png"},"unlisted":false,"prevItem":{"title":"proto v0.11 - New shims and better logging","permalink":"/blog/proto-v0.11"},"nextItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"}},"content":"With this release, we\'ve focused on a critical facet of managing a large codebase, source code\\nownership, and sharing task configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Support for code ownership\\n\\nAn important workflow for companies of any size is reviewing code, and ensuring the right people are\\nreviewing and approving that code. This is especially true for large companies with hundreds of\\ndevelopers, or many distinct teams working in a single codebase.\\n\\nPopular VCS providers like [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), and\\n[Bitbucket](https://bitbucket.org/product/) provide built-in features to handle such workflows,\\naptly named code owners. They all achieve this through a similar mechanism, a single `CODEOWNERS`\\nfile that maps file system paths to owners (users, teams, groups, etc). These owners are then\\nrequired to approve a pull/merge request because it can be merged into the base branch.\\n\\n:::info\\n\\nFor more information, view our official in-depth [code owners guide](/docs/guides/codeowners)!\\n\\n:::\\n\\n### Generate a `CODEOWNERS`\\n\\nManaging the `CODEOWNERS` file manually can be a tedious task, especially when you have hundreds of\\nprojects. To help with this, moon can generate the `CODEOWNERS` file for you,\\n[based on project owners](#new-project-owners-setting), formatted to your VCS provider of choice.\\nThis helps to avoid an out-of-date ownership file!\\n\\nWe\'re introducing a few new workspace settings to handle this, the first is\\n[`codeowners`](/docs/config/workspace#codeowners), which enables and configure code ownership as a\\nwhole, and the second is [`vcs.provider`](/docs/config/workspace#provider), which determines the VCS\\nprovider to generate the file for (and unlocks future features).\\n\\n```yaml title=\\".moon/workspace.yml\\"\\ncodeowners:\\n syncOnRun: true\\n globalPaths:\\n \'*\': [\'@admins\']\\n\\nvcs:\\n manager: \'git\'\\n provider: \'github\'\\n```\\n\\nThe settings above will generate the following file:\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# (workspace)\\n* @admins\\n```\\n\\nWhile this looks very simple, it really shines once projects start adding their own granular code\\nownership. Continue reading for more information!\\n\\n### New project `owners` setting\\n\\nTo make use of code owners, you\'ll need to define an [`owners`](/docs/config/project#owners) setting\\nin a project\'s [`moon.yml`](/docs/config/project) file. This setting requires a list/map of owners\\n(contributors required to review) associated to file paths/patterns, relative from the current\\nproject\'s root.\\n\\n```yaml title=\\"packages/components/moon.yml\\"\\nowners:\\n paths:\\n \'src/\': [\'@frontend\', \'@design-system\']\\n \'*.config.js\': [\'@frontend-infra\']\\n \'*.json\': [\'@frontend-infra\']\\n```\\n\\nThese paths will then be prefixed with the project source when\\n[generating the `CODEOWNERS`](#generate-a-codeowners) file.\\n\\n```shell title=\\".github/CODEOWNERS\\"\\n# components\\n/packages/components/src/ @frontend @design-system\\n/packages/components/*.config.js @frontend-infra\\n/packages/components/*.json @frontend-infra\\n```\\n\\n### New `moon sync codeowners` command\\n\\nAlthough moon can [automatically generate](/docs/config/workspace#synconrun) the `CODEOWNERS` file\\nwhen running a target, there may be situations where this is disabled, or teams/developers would\\nlike to generate the file manually. To handle this, we\'re providing the\\n[`moon sync codeowners`](/docs/commands/sync/codeowners) command, which will trigger the generation\\nprocess.\\n\\n```shell\\n$ moon sync codeowners\\n```\\n\\n## Community-driven task configuration\\n\\nA powerful but often overlooked feature of moon is the ability to\\n[share and extend task configuration](/docs/guides/sharing-config) from remote sources. This is\\nextremely useful in...\\n\\n- Providing a single source of truth for configuration.\\n- Reducing task duplication across projects.\\n- Ensuring tasks are battle-tested and ready for use.\\n\\nThe other upside of this approach is that configuration can be _community-driven_! To support this\\nas a first-class feature, we\'re launching the\\n[`moon-configs` repository](https://github.com/moonrepo/moon-configs), a collection of task\\nconfigurations for popular programming languages, frameworks, libraries, and more! As of now, the\\nrepository is kind of empty, but we\'re hoping to grow it over time, so feel free to contribute!\\n\\nIf you\'re curious how this works in practice, we\'ll use our Rust configuration as an example. The\\nentire system is based around [tag inheritance](/docs/concepts/task-inheritance), where a project\\ncan inherit tasks from a remote source, and then extend or override them as needed. For example,\\ncreate the tag-based config:\\n\\n```yaml title=\\".moon/tasks/tag-rust.yml\\"\\nextends: \'https://raw.githubusercontent.com/moonrepo/moon-configs/master/rust/tasks-workspace.yml\'\\n```\\n\\nAnd then in Rust projects that you\'d like to inherit these tasks, add the following tags:\\n\\n```yaml title=\\"/moon.yml\\"\\ntags: [\'rust\']\\n```\\n\\nIt\'s as simple as that!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.8.0) for a full list of\\nchanges.\\n\\n- Added a new action to the graph, `SyncWorkspace`, that\'ll be used for workspace-level checks.\\n- Added `MOON_OUTPUT_STYLE` and `MOON_RETRY_COUNT` environment variables."},{"id":"moon-v1.7","metadata":{"permalink":"/blog/moon-v1.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-30_moon-v1.7.mdx","source":"@site/blog/2023-05-30_moon-v1.7.mdx","title":"moon v1.7 - Next-generation configuration and errors","description":"With this release, we\'ve rewritten configuration from the ground up, improved error messages, and","date":"2023-05-30T00:00:00.000Z","formattedDate":"May 30, 2023","tags":[{"label":"config","permalink":"/blog/tags/config"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.7","title":"moon v1.7 - Next-generation configuration and errors","authors":["milesj"],"tags":["config","errors"],"image":"./img/moon/v1.7.png"},"unlisted":false,"prevItem":{"title":"moon v1.8 - Code owners and shared configuration","permalink":"/blog/moon-v1.8"},"nextItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"}},"content":"import Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'ve rewritten configuration from the ground up, improved error messages, and\\nstarted work on diagnostics!\\n\\n\x3c!--truncate--\x3e\\n\\n## Configuration rewrite\\n\\nIf you\'ve ever written Rust before, you may be familiar with the state of configuration crates in\\nthe ecosystem. There\'s only 2 viable choices to choose from, and we\'ve been using 1 of them.\\nHowever, it\'s been a constant source of friction for our use cases, and didn\'t support features that\\nwe\'ve needed (built-in validation, file extending, and more).\\n\\nAfter researching our options, and attempting to contribute upstream, we decided to build our own\\nconfiguration solution, unique to moonrepo\'s projects. As such, we\'re excited to announce\\n[schematic](https://github.com/moonrepo/schematic), the most powerful configuration crate in the\\nRust ecosystem, with built-in features like:\\n\\n- Strict parsing with serde (serilization, deserialization).\\n- Code frames in errors (when applicable).\\n- Source file/URL extending.\\n- Partial file parsing and merging.\\n- Field-level merge strategies.\\n- Recursive validation.\\n- Dynamic default and env var values.\\n- And much more!\\n\\nWe\'ve spent the last few weeks building this crate from the ground up, and migrating the moon\\ncodebase to it. It\'s been quite a feat, but we\'re very excited for what it has to offer already, and\\nwhat\'s to come!\\n\\n### Strict parsing\\n\\nWhen we fail to parse a configuration file, we now include a descriptive message of the failure, and\\nthe file that failed to parse. Typically this will be for unknown fields and invalid value types.\\n\\n\\n\\n\\n> We hope this bubbles up typos and incorrectly nested settings!\\n\\n### Recursive validation\\n\\nPreviously when validation would fail, we\'d return on the first error and ignore subsequent errors.\\nThis is a non-ideal experience as you\'d have to constantly run `moon` commands until all validation\\nissues have been resolved.\\n\\nNow we aggregate all validation errors, even from deeply nested fields, and present them together.\\n\\n\\n\\n### What\'s next?\\n\\nSince [schematic](https://github.com/moonrepo/schematic) is very young, and it hasn\'t been tested\\nheavily in the ecosystem, we expect bugs and weird edge cases to popup. If you encounter any issues,\\nplease report them immediately so that we can fix them as soon as possible!\\n\\nWith that being said, we\'ll continue to improve parsing, error messages, and unique functionality,\\nlike code frames within errors. Here\'s an example for a basic JSON file.\\n\\n\\n\\n## Better errors\\n\\nYou may have noticed the errors in the screenshots above look quite different than what we\'ve\\nrendered until now, and you are correct. Going forward, all errors will be rendered by the wonderful\\nRust crate, [miette](https://crates.io/crates/miette).\\n\\nWe\'ve introduced this crate to handle _all_ errors and diagnostics within moon, not just\\nconfiguration. So expect a much better developer experience moving forward!\\n\\n\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.7.0) for a full list of\\nchanges.\\n\\n- Added support for npm lockfile v3 format."},{"id":"proto-v0.9","metadata":{"permalink":"/blog/proto-v0.9","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-23_proto-v0.9.mdx","source":"@site/blog/2023-05-23_proto-v0.9.mdx","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","description":"This is a small release that provides many internal improvements.","date":"2023-05-23T00:00:00.000Z","formattedDate":"May 23, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"action","permalink":"/blog/tags/action"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":1.68,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.9","title":"proto v0.9 - New GitHub action, plugin unpacking, and more","authors":["milesj"],"tags":["proto","action","github"],"image":"./img/proto/v0.9.png"},"unlisted":false,"prevItem":{"title":"moon v1.7 - Next-generation configuration and errors","permalink":"/blog/moon-v1.7"},"nextItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"}},"content":"This is a small release that provides many internal improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New `moonrepo/setup-proto` GitHub action\\n\\nIf you\'re using proto in GitHub Actions and would love to automate the workflow as much as possible,\\nwell look no further, as we\'re introducing the\\n[moonrepo/setup-proto](https://github.com/moonrepo/setup-proto) action. Thanks to\\n[Tom Davidson](https://github.com/tomdavidson) for the initial spike of work!\\n\\nThis action will automatically install the `proto` binary globally, and cache the toolchain at\\n`~/.proto` (be sure to run `proto use` to download and install tools).\\n\\n```yaml\\n# ...\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: \'actions/checkout@v4\'\\n - uses: \'moonrepo/setup-proto@v0\'\\n - run: \'proto use\'\\n```\\n\\n> If you\'re using moon, be sure to use\\n> [moonrepo/setup-moon](https://github.com/moonrepo/setup-moon-action) instead.\\n\\n## Added `install.unpack` to TOML plugin\\n\\nOur [TOML plugins](./proto-v0.7#toml-plugins) have been quite popular, and the community has been\\nusing them to much success. However, the plugin assumed that all downloaded files are archives (tar,\\nzip) and will attempt to unpack them based on file extension. This is not always the case, as some\\ndownloads are just raw executables.\\n\\nBecause of this, unpacking would sometimes fail, or we\'d be unable to extract the correct file\\nextension. To work around this limitation, we\'re introducing a new setting, `install.unpack`, that\\ncontrols whether the downloaded file should be unpacked or not. By default this setting is `true`.\\n\\nHere\'s an example using [moon](/moon).\\n\\n```toml\\n# ...\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\nunpack = false\\n```\\n\\n## Initial support for `node-gyp`\\n\\nThe [`node-gyp` binary](https://github.com/nodejs/node-gyp) is required for building Node.js native\\naddons, and was previously not supported in proto. We will now create a `node-gyp` binary in\\n`~/.proto/bin` when the `npm` tool is installed. Why npm? Because `node-gyp` comes packaged with npm\\ninstead of Node.js... for some reason.\\n\\nWith that being said, this is currently experimental, as we haven\'t tested it thoroughly, and are\\nunaware of all the possible edge cases. So keep that in mind!\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.9.0) for a full list\\nof changes."},{"id":"moon-v1.6","metadata":{"permalink":"/blog/moon-v1.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-15_moon-v1.6.mdx","source":"@site/blog/2023-05-15_moon-v1.6.mdx","title":"moon v1.6 - Persistent tasks and task extending RFC","description":"In this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending","date":"2023-05-15T00:00:00.000Z","formattedDate":"May 15, 2023","tags":[{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"rfc","permalink":"/blog/tags/rfc"},{"label":"log","permalink":"/blog/tags/log"}],"readingTime":3.155,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.6","title":"moon v1.6 - Persistent tasks and task extending RFC","authors":["milesj"],"tags":["tasks","rfc","log"],"image":"./img/moon/v1.6.png"},"unlisted":false,"prevItem":{"title":"proto v0.9 - New GitHub action, plugin unpacking, and more","permalink":"/blog/proto-v0.9"},"nextItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nIn this release, we\'re introducing a new feature called persistent tasks, and an RFC for extending\\ntasks.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Task extending/variants\\n\\nBefore we dive into this release, we want to briefly talk about a new RFC that we\'re looking for\\nfeedback on, [task extending/variants](https://github.com/moonrepo/moon/issues/849). This is a\\nfeature that has been top-of-mind since moon\'s inception, but we haven\'t had the foundation in place\\nto support it, nor what the API should look like.\\n\\nThe gist of the RFC is that we want to support tasks that extend other tasks with additional\\narguments. This is a common workflow with npm scripts:\\n\\n```json\\n{\\n \\"scripts\\": {\\n \\"lint\\": \\"eslint .\\",\\n \\"lint:fix\\": \\"npm run lint --fix\\"\\n }\\n}\\n```\\n\\nAs consumers of moon, we\'d appreciate any feedback on the RFC before we move forward!\\n\\n
\\n
\\n\\n## Persistent tasks\\n\\nTasks that never complete, like servers and watchers, are known as persistent tasks. Historically we\\nhad support for these kinds of tasks through the [`local`](/docs/config/project#local) setting in\\n[`moon.yml`](/docs/config/project). This setting would modify the task for continuous execution by\\ndisabling caching, streaming output, and not running in CI.\\n\\nWhile this worked for the most part, there was one scenario that was still problematic, and that was\\nrunning multiple persistent tasks in parallel. Depending on the task dependency chain, sometimes\\nthese tasks would _not_ run in parallel, some may never start (blocked on another tasks), or the\\norder of nodes in the graph is non-ideal. A great example of this can be found in this\\n[discussion thread](https://github.com/moonrepo/moon/discussions/830).\\n\\nTo mitigate this problem, we\'re introducing a new task option,\\n[`persistent`](/docs/config/project#persistent) (which is also enabled by the `local` setting). When\\na task is marked as persistent, it will always _run last and in parallel_ within the dependency\\ngraph, after all dependencies (from all other persistent tasks) have completed.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'next dev\'\\n local: true\\n # OR\\n options:\\n persistent: true\\n```\\n\\nThis is a perfect solution to running multiple development servers and tools in watch mode:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'noop\'\\n deps:\\n - \'frontend:dev\'\\n - \'backend:dev\'\\n - \'database:start\'\\n - \'tailwind:watch\'\\n```\\n\\n## Logging migration\\n\\nThis is more of a heads up than anything, but we\'ve started an internal Rust migration from the old\\n[log](https://crates.io/crates/log) crate to the new [tracing](https://crates.io/crates/tracing)\\ncrate. Tracing provides is with far more information, metrics, and instrumentation, which we hope to\\ntake advantage of in the future.\\n\\nThis will be an ongoing migration that will last for many releases, and during this time while we\\nsupport both `log` and `tracing` in unison, the logs will be a bit noisy. We\'ll be working to clean\\nup the logs as we gradually convert the codebase.\\n\\nAnd lastly, the move to `tracing` has also caused the log output to change. For example, in the log\\nexcerpt below, all messages with \\"log\\" after the date are the old `log` crate, while the others with\\ndistinct module names are the new `tracing` crate.\\n\\n```log\\n[DEBUG 14:44:19] moon_process::command_inspector Running command git status --porcelain --untracked-files -z env_vars={} working_dir=\\"~/Projects/moon\\"\\n[DEBUG 14:44:19] log Filtering based on touched status \\"all\\" log.target=\\"moon:query:touched-files\\" log.module_path=\\"moon_cli::queries::touched_files\\" log.file=\\"crates/cli/src/queries/touched_files.rs\\" log.line=85\\n[DEBUG 14:44:19] log Creating dependency graph log.target=\\"moon:dep-graph\\" log.module_path=\\"moon_dep_graph::dep_builder\\" log.file=\\"crates/core/dep-graph/src/dep_builder.rs\\" log.line=35\\n[DEBUG 14:44:19] log Running 32 actions across 5 batches log.target=\\"moon:action-pipeline\\" log.module_path=\\"moon_action_pipeline::pipeline\\" log.file=\\"crates/core/action-pipeline/src/pipeline.rs\\" log.line=93\\n[DEBUG 14:44:19] log Setting up Node.js 20.0.0 toolchain log.target=\\"moon:action:setup-tool\\" log.module_path=\\"moon_action_pipeline::actions::setup_tool\\" log.file=\\"crates/core/action-pipeline/src/actions/setup_tool.rs\\" log.line=26\\n[DEBUG 14:44:19] proto_node::resolve Resolving a semantic version for \\"20.0.0\\"\\n[DEBUG 14:44:19] proto_core::resolver:load_versions_manifest Loading versions manifest from local cache cache_file=~/.proto/temp/3d16d1693e83828f98bae178f181d5a01103b7f222db27cdeaec9b4950e951d7.json\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.6.0) for a full list of\\nchanges.\\n\\n- Updated long running processes to log a checkpoint indicating it\'s still running.\\n- Reworked file groups to use workspace relative paths, instead of project relative.\\n- Reworked processes to better handle command line arguments, shells, and piped stdin input."},{"id":"moon-v1.5","metadata":{"permalink":"/blog/moon-v1.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-08_moon-v1.5.mdx","source":"@site/blog/2023-05-08_moon-v1.5.mdx","title":"moon v1.5 - Rust tier 2 and 3 support","description":"With this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.","date":"2023-05-08T00:00:00.000Z","formattedDate":"May 8, 2023","tags":[{"label":"rust","permalink":"/blog/tags/rust"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tier","permalink":"/blog/tags/tier"}],"readingTime":2.765,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.5","title":"moon v1.5 - Rust tier 2 and 3 support","authors":["milesj"],"tags":["rust","lang","tier"],"image":"./img/moon/v1.5.png"},"unlisted":false,"prevItem":{"title":"moon v1.6 - Persistent tasks and task extending RFC","permalink":"/blog/moon-v1.6"},"nextItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"}},"content":"import Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re announcing not just tier 2, but also tier 3 support for the Rust language.\\n\\n\x3c!--truncate--\x3e\\n\\nAs big fans of Rust (moon is written in it), we\'re stoked to finally add full language support, and\\nto integrate our first non-JavaScript language! This release is rather massive, and required a ton\\nof internal work, most of which we\'ll skip over.\\n\\nInstead we\'ll only talk about the key features that you, the consumers, will actually care about. To\\nstart, we\'ve started working on a Rust handbook, that outlines how to enable Rust, what kind of\\nintegrations we support, and a handful of common questions.\\n\\n
\\n
\\n\\n## New `rust` configurations\\n\\nLanguages in\\n[moon are enabled through configuration](/docs/how-it-works/languages#enabling-a-language) blocks in\\n[`.moon/toolchain.yml`](/docs/config/toolchain), and Rust is no different. We now support a\\n[`rust`](/docs/config/toolchain#rust) toolchain setting\\n([view all available settings](/docs/config/toolchain#rust)).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\nrust:\\n version: \'1.69.0\'\\n```\\n\\nWhen the `rust` setting is defined, it will enable the language and\\n[deep platform integration](/docs/how-it-works/languages#tier-2--platform), and when the `version`\\nfield is defined, it will further enable\\n[toolchain support](/docs/how-it-works/languages#tier-3--toolchain). Both of these features provide\\nheavy automation, improving the overall developer experience.\\n\\nThis is fantastic, but what if another Rust project in the monorepo requires a different toolchain\\nchannel/version? If so, they can use the new [`toolchain.rust`](/docs/config/project#rust) setting\\nin [`moon.yml`](/docs/config/project) to define project-level overrides.\\n\\n```yaml title=\\"/moon.yml\\"\\ntoolchain:\\n rust:\\n version: \'1.58.0\'\\n```\\n\\n## New `rust` task platform\\n\\nThe main benefit of Rust language support is that tasks can be ran within the context of our\\n[Rust platform integration](/docs/how-it-works/languages#tier-2--platform). This can easily be done\\nby setting the project\'s [`language`](/docs/config/project#language) to \\"rust\\" in\\n[`moon.yml`](/docs/config/project).\\n\\nThis will set the [`platform`](/docs/config/project#platform-1) of all tasks within the project to\\n\\"rust\\", unless they have been explicitly configured to something else.\\n\\n```yaml title=\\"/moon.yml\\"\\nlanguage: \'rust\'\\ntype: \'application\'\\n```\\n\\nIf you\'re mixing languages within a single project, and can\'t use the `language` setting above, you\\ncan define `platform` on the task directly.\\n\\n```yaml title=\\"/moon.yml\\"\\ntasks:\\n build:\\n command: \'cargo build\'\\n platform: \'rust\'\\n```\\n\\n> We also attempt to detect this automatially by comparing command names and checking for the\\n> existence of files like `Cargo.toml`.\\n\\n## Updated `moon init` command\\n\\nAs part of this release, we\'ve also updated the [`moon init`](/docs/commands/init) command to\\nsupport initializing Rust. By default, the command will prompt you on whether to install Rust or\\nnot, otherwise, when `--yes` is passed, the language will be installed if a `Cargo.toml` file is\\ndetected in the destination directory.\\n\\nIf you already have a moon workspace, you can pass `--tool rust` to install Rust into the workspace.\\n\\n```shell\\n$ moon init --tool rust\\n```\\n\\n## Updated `moon docker` commands\\n\\nAnd lastly, we also want to provide a great [`Dockerfile` experience](/docs/guides/docker) when\\nusing Rust. The [`moon docker scaffold`](/docs/commands/docker/scaffold) command has been updated to\\ncopy `Cargo.toml`, `Cargo.lock`, `rust-toolchain.toml`, and other Rust/Cargo related files. When\\nusing Cargo workspaces, nested `Cargo.toml` files are also scaffolded.\\n\\n```docker\\nRUN moon docker scaffold rust-app\\n```\\n\\nFurthermore, we\'ve also updated the [`moon docker prune`](/docs/commands/docker/scaffold) command to\\nremove the entire `target` directory, greatly reducing the size of the image. Pruning makes the\\nassumption that it\'s being ran _after_ a release profile has been built.\\n\\n```docker\\nRUN moon run rust-app:build-release\\nRUN moon docker prune\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.5.0) for a full list of\\nchanges."},{"id":"moon-v1.4","metadata":{"permalink":"/blog/moon-v1.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-05-01_moon-v1.4.mdx","source":"@site/blog/2023-05-01_moon-v1.4.mdx","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","description":"With this release, we\'re bringing further improvements to tags and MQL.","date":"2023-05-01T00:00:00.000Z","formattedDate":"May 1, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"tag","permalink":"/blog/tags/tag"},{"label":"alias","permalink":"/blog/tags/alias"}],"readingTime":1.73,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.4","title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","authors":["milesj"],"tags":["query","lang","tag","alias"],"image":"./img/moon/v1.4.png"},"unlisted":false,"prevItem":{"title":"moon v1.5 - Rust tier 2 and 3 support","permalink":"/blog/moon-v1.5"},"nextItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"}},"content":"With this release, we\'re bringing further improvements to tags and MQL.\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets by tag with `#tag:task`\\n\\nWe love our community, as you all continuously suggest new and awesome features that haven\'t crossed\\nour minds. One such feature was the ability to run tasks for all projects with a tag,\\n[suggested by @theoephraim](https://github.com/moonrepo/moon/issues/803), which is now possible with\\nthe new [tag scope](/docs/concepts/target#by-tag), `#tag:task`.\\n\\nAs an example, we can easily lint all projects that have the `frontend` tag.\\n\\n```shell\\n$ moon run \'#frontend:lint\'\\n```\\n\\n> Because `#` is special syntax and denotes a comment, the target will need to be quoted to work\\n> correctly!\\n\\n## Updated `moon query` commands to support MQL\\n\\nLast week we announced [MQL](./moon-v1.3#run-targets-based-on-a-query), a custom query language for\\napplying filters to moon\'s project graph, primarily through the [`moon run`](/docs/commands/run)\\ncommand. We plan to slowly integrate MQL throughout moon as it provides an easy to use API, and an\\noverall better developer experience.\\n\\nAs such, we\'ve updated both [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query tasks`](/docs/commands/query/tasks) to support MQL statements as an optional first\\nargument. Totally makes sense that query commands would support MQL!\\n\\n```shell\\n# Find all projects with a `lint` or `build` task\\n$ moon query projects \\"task=[lint,build]\\"\\n\\n# Find all tasks with an id that starts with \\"dev\\"\\n$ moon query tasks \\"task~dev-*\\"\\n```\\n\\n## Deprecated `node.aliasPackageNames` setting\\n\\nmoon project\'s support the [concept of aliasing](/docs/concepts/project#aliases), where\\nlanguage/ecosystem specific names are used alongside moon\'s. For example, the `name` field from\\n`package.json`. However, aliasing was off by default for Node.js projects and had to be explicitly\\nenabled with the `node.aliasPackageNames` setting.\\n\\nIn an effort to streamline moon adoption for Node.js codebases, we\'re deprecating that setting, and\\ninstead will now always inherit the `package.json` name as an alias. For example, if you\'re package\\nname was `@company/utils`, you can now run a target like so:\\n\\n```shell\\n$ moon run @company/utils:build\\n```\\n\\n> This setting is now a no-op and can be removed from your configuration.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.4.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.8."},{"id":"proto-v0.8","metadata":{"permalink":"/blog/proto-v0.8","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-28_proto-v0.8.mdx","source":"@site/blog/2023-04-28_proto-v0.8.mdx","title":"proto v0.8 - Version detection and installation improvements","description":"In this release, we\'re dropping some quality of life workflow improvements.","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"detect","permalink":"/blog/tags/detect"}],"readingTime":1.295,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.8","title":"proto v0.8 - Version detection and installation improvements","authors":["milesj"],"tags":["proto","detect"],"image":"./img/proto/v0.8.png"},"unlisted":false,"prevItem":{"title":"moon v1.4 - New tag target scope, MQL support for query commands, and more!","permalink":"/blog/moon-v1.4"},"nextItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"}},"content":"In this release, we\'re dropping some quality of life workflow improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Built-in detection for `proto use`\\n\\nThe [`proto use`](/docs/proto/commands/use) command is extremely useful for bootstrapping your\\ndevelopment environment with all necessary tooling, but it had a hard requirement on the\\n[`.prototools`](/docs/proto/config) configuration file. But what if you\'re already using non-proto\\nversion files, like `.nvmrc` or `.dvmrc`? Or maybe manifest settings, like `packageManager` or\\n`engines` in `package.json`?\\n\\nGreat questions, and we agree! As such, we\'ve updated `proto use` to _also_ detect a version from\\nthe environment for the current working directory. We suggest using `.prototools`, but feel free to\\nconfigure your environments as you so choose!\\n\\n```shell\\n# Install all the things!\\n$ proto use\\n```\\n\\n## Smarter version detection\\n\\nOne of proto\'s best features is its [contextual version detection](/docs/proto/detection), but it\\ndid have 1 shortcoming. When we detected a partial version, like `1.2`, we\'d resolve to a fully\\nqualified version with the latest patch version (e.g. `1.2.3`). While this worked in most cases,\\neverytime a new patch was released upstream (e.g. `1.2.4`), proto would error and require a manual\\ninstall of this new version. This was pretty annoying as `1.2.3` and `1.2.4` are likely to be\\ncompatible, and both satisfy the `1.2` version constraint.\\n\\nTo mitigate this scenario, we\'ve updated the version detection to scan the locally installed\\nversions _first_ when encountering a partial version. This solves the problem above by allowing\\n`1.2.3` to satisfy the requirement, instead of forcing an install of `1.2.4`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/proto/releases/tag/v0.8.0) for a full list\\nof changes."},{"id":"moon-v1.3","metadata":{"permalink":"/blog/moon-v1.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-24_moon-v1.3.mdx","source":"@site/blog/2023-04-24_moon-v1.3.mdx","title":"moon v1.3 - Advanced run targeting and an official proto plugin","description":"After many months of design and development, we\'re finally introducing MQL, our own unique query","date":"2023-04-24T00:00:00.000Z","formattedDate":"April 24, 2023","tags":[{"label":"query","permalink":"/blog/tags/query"},{"label":"lang","permalink":"/blog/tags/lang"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"schema","permalink":"/blog/tags/schema"},{"label":"toml","permalink":"/blog/tags/toml"},{"label":"target","permalink":"/blog/tags/target"}],"readingTime":2.35,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.3","title":"moon v1.3 - Advanced run targeting and an official proto plugin","authors":["milesj"],"tags":["query","lang","proto","schema","toml","target"],"image":"./img/moon/v1.3.png"},"unlisted":false,"prevItem":{"title":"proto v0.8 - Version detection and installation improvements","permalink":"/blog/proto-v0.8"},"nextItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"}},"content":"After many months of design and development, we\'re finally introducing MQL, our own unique query\\nlanguage!\\n\\n\x3c!--truncate--\x3e\\n\\n## Run targets based on a query\\n\\nOur [`moon run`](/docs/commands/run) command is pretty powerful. It allows you to run targets in\\none, many, or all projects. It also supports running multiple targets in parallel. However, it\\nwasn\'t powerful enough, as it couldn\'t run the following types of scenarios:\\n\\n- Run a target in projects of a specific language.\\n- Run a target in libraries or applications.\\n- Run a target based on project file system path.\\n- Run a target in projects with a matching tag.\\n- Run a target in projects that match a keyword.\\n- Run a target in projects based on AND or OR conditions.\\n- Or a combination of these.\\n- And many more!\\n\\nSupporting all of these scenarios through CLI arguments just feels like bad design, and would result\\nin a poor developer experience. There had to be a better way to support this! So we set out to solve\\nthis problem, and after much thought, we\'re stoked to introduce\\n[MQL, a query language unique to moon](/docs/concepts/query-lang).\\n\\nWith MQL, you can now run scenarios like \\"I want to build all Node.js libraries\\", or \\"I want to lint\\nand test all Rust projects\\". Simply pass an unscoped target and a query to the `run` command:\\n\\n```shell\\n$ moon run :build --query \\"taskPlatform=node && projectType=library\\"\\n\\n$ moon run :lint :test --query \\"language=rust\\"\\n```\\n\\nThis is only the first iteration of MQL and it\'s already quite powerful. Expect additional fields,\\nfeatures, and functionality in the future!\\n\\n## Plugin support for proto\\n\\nEarlier this week we announced [plugin support for proto](./proto-v0.7), starting with a TOML based\\nplugin. This is great as it allows _any_ kind of versioned tool to be managed in proto\'s toolchain,\\nso why not moon? Starting with this release, you can now install and manage moon _from_ proto, using\\nour officially maintained TOML plugin.\\n\\nIn your `.prototools` or `~/.proto/config.toml` file, add the following snippet:\\n\\n```toml title=\\".prototools\\"\\n[plugins]\\nmoon = \\"source:https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml\\"\\n```\\n\\nAnd as easy as that, you can now use `moon` as a tool within any `proto` command. For example:\\n\\n```shell\\n$ proto install moon 1.3.0\\n$ proto list-remote moon\\n$ proto bin moon\\n```\\n\\nFurthermore, with proto, we can now pin the version of moon on a per-project basis. Perfect for\\nenforcing the same version for all developers on your team!\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.3.0\\"\\n```\\n\\n> When using this approach, be sure `~/proto/.bin` is in your `PATH`, and takes precedence over\\n> `~/.moon/bin`.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.3.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.7.\\n- Improved accuracy of our globbing utilities, especially around dotfiles/dotfolders.\\n- Updated config loading to be strict and error on unknown fields for non-root fields."},{"id":"proto-v0.7","metadata":{"permalink":"/blog/proto-v0.7","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-21_proto-v0.7.mdx","source":"@site/blog/2023-04-21_proto-v0.7.mdx","title":"proto v0.7 - First step towards plugins","description":"With this release, we\'re very excited to announce our initial support for plugins in proto!","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"plugins","permalink":"/blog/tags/plugins"}],"readingTime":2.36,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.7","title":"proto v0.7 - First step towards plugins","authors":["milesj"],"tags":["proto","plugins"],"image":"./img/proto/v0.7.png"},"unlisted":false,"prevItem":{"title":"moon v1.3 - Advanced run targeting and an official proto plugin","permalink":"/blog/moon-v1.3"},"nextItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"}},"content":"With this release, we\'re very excited to announce our initial support for plugins in proto!\\n\\n\x3c!--truncate--\x3e\\n\\n## Initial plugins architecture\\n\\nLast week we posted an [RFC for a new plugins architecture](./proto-v0.6#rfc-plugins-system) for\\nproto. We believe plugins will unlock an array of capabilities for proto, will enable the community\\nto add their own custom integrations, and the ability for tools to be managed within proto\'s\\ntoolchain.\\n\\nWe were very excited for this RFC, and couldn\'t wait, so we spent the last week prototyping\\nimplementations. We got the basics of downloading, installing, and enabling a plugin at _runtime_\\nworking incredibly fast. However, implementing the entire RFC in 1 release would have taken too\\nlong, and we wanted to avoid dropping such a large feature in a single release. Because of this,\\nwe\'ve only implemented [TOML plugins](/docs/proto/plugins#toml-plugin) in this release, and will\\nimplement WASM plugins in a future release.\\n\\n### TOML plugins\\n\\nYou may be asking yourself, aren\'t plugins typically code? For the most part, yes, but after\\nbuilding a \\"version manager\\" for multiple languages, we\'ve come to the realization that many tools\\ncan simply be supported through a basic configuration file.\\n\\nAt minimum, tools require the following pieces to be managed:\\n\\n- Where and how to download the tool\\n- How to install/unpack the tool\\n- How to resolve available versions to install\\n- How to execute the tool\'s binary\\n\\nAll 4 of these pieces can be solved with a configuration file, and as such, we opted to support a\\n[TOML schema based plugin](/docs/proto/plugins#toml-plugin) as an alternative to a code based\\nplugin. The other benefits of a schema is that it\'s _easy to write, read, and maintain_, doesn\'t\\nrequire any code, and doesn\'t force you into a specific programming language.\\n\\nTo demonstate how this plugin works, here\'s an example of a [moon](/moon) TOML schema.\\n\\n```toml title=\\"moon-schema.toml\\"\\nname = \\"moon\\"\\ntype = \\"cli\\"\\n\\n[platform.linux]\\ndownload-file = \\"moon-{arch}-unknown-linux-{libc}\\"\\n\\n[platform.macos]\\ndownload-file = \\"moon-{arch}-apple-darwin\\"\\n\\n[platform.windows]\\ndownload-file = \\"moon-{arch}-pc-windows-msvc.exe\\"\\n\\n[install]\\ndownload-url = \\"https://github.com/moonrepo/moon/releases/download/v{version}/{download_file}\\"\\n\\n[resolve]\\ngit-url = \\"https://github.com/moonrepo/moon\\"\\n```\\n\\nVery simple right? With this, you can now configure moon as a plugin within proto.\\n\\n```toml title=\\".prototools\\"\\nmoon = \\"1.2.0\\"\\n\\n[plugins]\\nmoon = \\"source:./path/to/moon-schema.toml\\"\\n```\\n\\nAnd ultimately manage every version of moon through proto! Because moon is now a plugin, every\\ncommand in proto that accepts a `` argument, will now accept `moon` as a valid tool.\\n\\n```shell\\n$ proto install moon 1.2.0\\n$ proto list-remote moon\\n$ proto use\\n```\\n\\nLearn more about [TOML plugins in the official docs](/docs/proto/plugins#toml-plugin)!\\n\\n## Cleaning improvements\\n\\nLast week we introduced the [`proto clean`](/docs/proto/commands/clean) command that will\\nautomatically delete stale and unused tools from the toolchain. This week we\'ve implemented a few\\nimprovements to the cleaning process:\\n\\n- Added a `--yes` option to [`proto clean`](/docs/proto/commands/clean), allowing prompts to be\\n bypassed.\\n- Added a `auto-clean` setting to `~/.proto/config.toml`, enabling automatic cleaning when\\n [`proto use`](/docs/proto/commands/use) is ran."},{"id":"moon-v1.2","metadata":{"permalink":"/blog/moon-v1.2","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-17_moon-v1.2.mdx","source":"@site/blog/2023-04-17_moon-v1.2.mdx","title":"moon v1.2 - Tag based task inheritance","description":"In this small release, we\'re improving our task inheritance and performance.","date":"2023-04-17T00:00:00.000Z","formattedDate":"April 17, 2023","tags":[{"label":"tags","permalink":"/blog/tags/tags"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.265,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.2","title":"moon v1.2 - Tag based task inheritance","authors":["milesj"],"tags":["tags","tasks"],"image":"./img/moon/v1.2.png"},"unlisted":false,"prevItem":{"title":"proto v0.7 - First step towards plugins","permalink":"/blog/proto-v0.7"},"nextItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"}},"content":"In this small release, we\'re improving our task inheritance and performance.\\n\\n\x3c!--truncate--\x3e\\n\\n## Task inheritance based on project tags\\n\\nIn v0.23 we introduced [scoped task inheritance](/blog/v0.23#improved-task-inheritance-model) by\\nproject type/language, and in v1.0 we introduced [project tagging](/blog/moon-v1.0#project-tagging),\\nbut what if we combined both of these features? In this release, you can now define workspace-level\\ntasks _by tag_ that\'ll be inherited by all projects with that tag.\\n\\nTo demonstrate this, say you have a monorepo composed of multiple [Astro](https://astro.build)\\napplications, each duplicating the same Astro tasks. Instead of duplicating, define an `astro` tag\\nin each project\'s [`moon.yml`](/docs/config/project#tags).\\n\\n```yaml title=\\"/moon.yml\\"\\nlanguage: \'typescript\'\\ntype: \'application\'\\ntags: [\'astro\']\\n```\\n\\nAnd then create a new tasks configuration at `.moon/tasks/tag-astro.yml` with the following\\ncontents:\\n\\n```yaml title=\\".moon/tasks/tag-astro.yml\\"\\nfileGroups:\\n astro:\\n - \'public/**/*\'\\n - \'src/**/*\'\\n - \'astro.config.*\'\\n - \'tsconfig.json\'\\n\\ntasks:\\n astro:\\n command: \'astro\'\\n local: true\\n\\n # Development server\\n dev:\\n command: \'astro dev\'\\n local: true\\n\\n # Production build\\n build:\\n command: \'astro build\'\\n inputs: [\'@group(astro)\']\\n outputs: [\'dist\']\\n\\n # Check .astro files\\n check:\\n command: \'astro check\'\\n inputs: [\'@group(astro)\']\\n deps: [\'typecheck\']\\n\\n # Preview production build locally\\n preview:\\n command: \'astro preview\'\\n deps: [\'build\']\\n local: true\\n```\\n\\nEach of these Astro applications will now inherit all 5 tasks and the file group automatically! This\\nhelps to greatly reduce maintenance overhead and help enforce consistency across projects. Jump to\\nthe official [task inheritance docs](/docs/concepts/task-inheritance) for more information on tag\\nbased inheritance.\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.2.0) for a full list of\\nchanges.\\n\\n- Upgraded to proto v0.6.\\n- Improvements to file system operations.\\n- Minor improvements to performance."},{"id":"proto-v0.6","metadata":{"permalink":"/blog/proto-v0.6","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-13_proto-v0.6.mdx","source":"@site/blog/2023-04-13_proto-v0.6.mdx","title":"proto v0.6 - Unused cleaning and improved global binaries","description":"With this release, we\'re expanding on our global binary support and providing quality of life","date":"2023-04-13T00:00:00.000Z","formattedDate":"April 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"globals","permalink":"/blog/tags/globals"},{"label":"clean","permalink":"/blog/tags/clean"},{"label":"errors","permalink":"/blog/tags/errors"}],"readingTime":2.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.6","title":"proto v0.6 - Unused cleaning and improved global binaries","authors":["milesj"],"tags":["proto","globals","clean","errors"],"image":"./img/proto/v0.6.png"},"unlisted":false,"prevItem":{"title":"moon v1.2 - Tag based task inheritance","permalink":"/blog/moon-v1.2"},"nextItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re expanding on our global binary support and providing quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## RFC: Plugins system\\n\\nSince proto\'s inception, plugins have been top of mind, but runtime based plugins in Rust are\\n_difficult_. The only viable solution to this problem is WASM, but most developers have never used\\nWASM before, nor are they familiar with WASM tooling (myself included).\\n\\nHowever, we\'re at a point in proto\'s life-cycle where the core is rather stable, and it\'s time to\\nstart investigating plugin support. To this end, we\'ve introduced a small RFC outlining how plugins\\nwill be used, enabled, and implemented. It\'s not very in-depth as we want to avoid implementation\\ndetails, but from a consumers perspective, we want to ensure that it makes sense.\\n\\nWe\'d very much appreciate it if you could take a look at the RFC and provide feedback. If you have\\nany experience in Rust runtime plugins, we\'d love to hear your thoughts as well.\\n\\n
\\n
\\n\\n## Cleaning stale and unused tools\\n\\nIs your `~/.proto` installation growing out of control? Are there old versions of tools that you\\ndon\'t use anymore? Or versions you never used? Unsure if you\'re using a tool at all or still need\\nit?\\n\\nTo help avoid these questions and problems, we\'re introducing a new command that will uninstall\\nstale and unused tools, [`proto clean`](/docs/proto/commands/clean). When ran, the command will\\nlaunch an interactive session and scan the file system for old tools, prompting you to remove them.\\n\\n```shell\\n$ proto clean\\n```\\n\\nBy default the command will uninstall tools that haven\'t been used in over 30 days, but this can be\\ncustomized with the `--days` option.\\n\\n:::info\\n\\nTools installed before v0.6 will most likely be considered stale, as we weren\'t tracking install and\\nlast used timestamps. However, everything will work as intended after running a tool or simply\\nmoving forward from this point.\\n\\n:::\\n\\n## Global binary improvements\\n\\nIn our [previous release](./proto-v0.5), we announced the\\n[`proto install-global`](/docs/proto/commands/install-global) command for installing global\\ndependencies that are unique per tool. Thanks to the community, this command has been updated to\\nsupport installing multiple globals at once!\\n\\n```shell\\n$ proto install-global node typescript webpack-cli\\n```\\n\\nOn top of this, we\'re also introducing another command that was requested by the community,\\n[`proto list-global`](/docs/proto/commands/list-global), that can be used to list all currently\\ninstalled globals.\\n\\n```shell\\n$ proto list-global node\\ntsc - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsc\\ntsserver - ~/.proto/tools/node/globals/lib/node_modules/typescript/bin/tsserver\\n```\\n\\n## Better error messages\\n\\nWe\'ve spent most of the past week working on a new internal architecture called\\n[Starbase](https://github.com/moonrepo/starbase), which will be the new foundation for proto and\\nmoon moving forward. One of the major benefits of this new architecture is a rewritten error system\\nthat provides more context and better error messages.\\n\\nHere\'s an example of this, albeit with a contrived situation:\\n\\n"},{"id":"proto-v0.5","metadata":{"permalink":"/blog/proto-v0.5","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-06_proto-v0.5.mdx","source":"@site/blog/2023-04-06_proto-v0.5.mdx","title":"proto v0.5 - Version aliasing and global binaries","description":"With this release, we\'re providing solutions for installing globals and using aliases.","date":"2023-04-06T00:00:00.000Z","formattedDate":"April 6, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"alias","permalink":"/blog/tags/alias"},{"label":"globals","permalink":"/blog/tags/globals"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.5","title":"proto v0.5 - Version aliasing and global binaries","authors":["milesj"],"tags":["proto","alias","globals"],"image":"./img/proto/v0.5.png"},"unlisted":false,"prevItem":{"title":"proto v0.6 - Unused cleaning and improved global binaries","permalink":"/blog/proto-v0.6"},"nextItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"}},"content":"With this release, we\'re providing solutions for installing globals and using aliases.\\n\\n\x3c!--truncate--\x3e\\n\\n## Install global binaries\\n\\nInstalling global binaries (packages, modules, etc) is a common task for developers, and proto now\\nprovides a solution for this workflow with the\\n[`proto install-global`](/docs/proto/commands/install-global) command. Continue reading for more\\ninformation.\\n\\n:::info\\n\\nGlobal install directories will need to be added manually to your `PATH` from your shell.\\n\\n:::\\n\\n### Bun, Deno, Go, Rust\\n\\nAll of these languages provide a built-in solution for installing global binaries to a shared\\nlocation, regardless of the language\'s current version. Because of this, proto will simply call\\ntheir install commands under the hood.\\n\\n```shell\\n$ proto install-global rust cargo-release\\n\\n# Same as\\n$ cargo install cargo-release --force\\n```\\n\\nGlobals will be installed to the following locations:\\n\\n- **Bun**: `~/.bun/bin`\\n- **Deno**: `~/.deno/bin`\\n- **Go**: `~/go/bin`\\n- **Rust**: `~/.cargo/bin`\\n\\n### Node.js, npm, pnpm, yarn\\n\\nUnfortunately, the Node.js ecosystem is pretty fractured when it comes to installing global\\nbinaries. Each package manager provides their own solution for installing globals, and each has\\ntheir own quirks. The problem is further exacerbated by the fact that globals are tied to Node.js\\nversion, so if you switch versions, you lose all your previous globals!\\n\\nTo work around this, proto standardizes the global installation process for Node.js, but requires\\nall globals to be installed through proto. You can no longer use `npm install -g`, `pnpm add -g`, so\\non and so forth, and must use:\\n\\n```shell\\n$ proto install-global node webpack-cli\\n```\\n\\nGlobals will be installed to a shared location, `~/.proto/tools/node/globals/bin`, and will persist\\nacross versions!\\n\\n## Custom version aliases\\n\\nWe are excited to announce 2 new commands that enable you to define custom version aliases,\\n[`proto alias`](/docs/proto/commands/alias) and [`proto unalias`](/docs/proto/commands/unalias).\\nAliasing of versions is a feature that allows you to assign a custom name or label to a specific\\nversion of a tool.\\n\\nFor example, instead of using the version number, you can assign a label such as \\"work\\" or\\n\\"personal\\" to a version. This makes it easier to remember and manage different versions.\\n\\n```shell\\n$ proto alias node work 16.16\\n$ proto alias node personal 18\\n```\\n\\nAliases can be used anywhere a version is accepted, for example:\\n\\n```shell\\n$ proto bin node work\\n$ proto install node personal\\n```"},{"id":"moon-v1.1","metadata":{"permalink":"/blog/moon-v1.1","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-04-03_moon-v1.1.mdx","source":"@site/blog/2023-04-03_moon-v1.1.mdx","title":"moon v1.1 - Task debugging and improvements","description":"With this release, we\'re introducing some quality of life task improvements.","date":"2023-04-03T00:00:00.000Z","formattedDate":"April 3, 2023","tags":[{"label":"tokens","permalink":"/blog/tags/tokens"},{"label":"tasks","permalink":"/blog/tags/tasks"}],"readingTime":1.775,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.1","title":"moon v1.1 - Task debugging and improvements","authors":["milesj"],"tags":["tokens","tasks"],"image":"./img/moon/v1.1.png"},"unlisted":false,"prevItem":{"title":"proto v0.5 - Version aliasing and global binaries","permalink":"/blog/proto-v0.5"},"nextItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"}},"content":"With this release, we\'re introducing some quality of life task improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Token variable support in task commands\\n\\nmoon supports a concept known as [tokens](/docs/concepts/token) where values are injected into tasks\\nduring project graph creation. This allows for dynamic values in your tasks, such as the current\\nproject language, or the current task name, and is crucial for task inheritance to work.\\n\\nHowever, tokens were only supported by task args, inputs, and outputs, but not commands... until\\nnow. Commands can now use token variables (but not token functions). For example, this is useful for\\nreferencing shared scripts from the workspace root.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n precheck:\\n command: \'$workspaceRoot/scripts/precheck.sh\'\\n```\\n\\n## Run targets in closest project\\n\\nThe [`moon run`](/docs/commands/run) command can run targets in an array of different formats, but\\nwas unable to run targets based on the current working directory. Well no more! You can now run\\ntasks from the closest project based on file path by omitting `:` from the target name.\\n\\n```shell\\n$ cd packages/components\\n\\n# Runs `components:build` internally\\n$ moon run build\\n```\\n\\n## View resolved task information\\n\\nDebugging task issues can be a quite a pain, as there can be many points of failure. Are inputs too\\ngreedy? Are outputs not being created? Does it exist at all? To help with this, you can now view\\ntask information by running [`moon task `](/docs/commands/task).\\n\\n```shell\\n$ moon task app:build\\n```\\n\\nThis command will display _resolved_ information, including inherited settings, and path resolved\\ninputs and outputs. Here\'s an example:\\n\\n```\\nRUNTIME:BUILD\\n\\nID: build\\nProject: runtime\\nPlatform: node\\nType: build\\n\\nPROCESS\\n\\nCommand: packemon build --addFiles --addExports --declaration\\nEnvironment variables:\\n - NODE_ENV = production\\nWorking directory: /Projects/moon/packages/runtime\\nRuns dependencies: Concurrently\\nRuns in CI: Yes\\n\\nDEPENDS ON\\n\\n - types:build\\n\\nINPUTS\\n\\n - .moon/*.yml\\n - packages/runtime/src/**/*\\n - packages/runtime/tsconfig.*.json\\n - packages/runtime/types/**/*\\n - packages/runtime/package.json\\n - packages/runtime/tsconfig.json\\n - tsconfig.options.json\\n\\nOUTPUTS\\n\\n - packages/runtime/cjs\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.1.0) for a full list of\\nchanges.\\n\\n- Support pnpm v8\'s new lockfile format.\\n- Better handling for task\'s that execute the `moon` binary.\\n- Updated `noop` tasks to be cacheable, so that they can be used for cache hit early returns."},{"id":"proto-v0.4","metadata":{"permalink":"/blog/proto-v0.4","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-31_proto-v0.4.mdx","source":"@site/blog/2023-03-31_proto-v0.4.mdx","title":"proto v0.4 - Rust support, user configs, and more","description":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.","date":"2023-03-31T00:00:00.000Z","formattedDate":"March 31, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"rust","permalink":"/blog/tags/rust"},{"label":"config","permalink":"/blog/tags/config"}],"readingTime":1.43,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.4","title":"proto v0.4 - Rust support, user configs, and more","authors":["milesj"],"tags":["proto","rust","config"],"image":"./img/proto/v0.4.png"},"unlisted":false,"prevItem":{"title":"moon v1.1 - Task debugging and improvements","permalink":"/blog/moon-v1.1"},"nextItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"}},"content":"With this release, we\'ve added Rust language support, user configs, and a few other improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## Rust language support\\n\\nWe\'re very excited to announce support for the [Rust language](https://www.rust-lang.org/) in proto.\\nThis is our first language addition since the initial release, and we\'re very happy with how it\\nturned out.\\n\\n```shell\\n$ proto install rust stable\\n```\\n\\nFor those of you unfamiliar with Rust, Rust provides its own toolchain manager through\\n[`rustup`](https://rustup.rs/) \u2014 a very powerful one at that. We don\'t want to reinvent the wheel\\nhere, so instead of downloading and installing Rust into proto\'s toolchain, we chose to call\\n`rustup` commands under the hood. Because of this, Rust support in proto requires Rust/Cargo to be\\npre-installed on your system. Jump to the [docs for more information](/docs/proto/tools#rust).\\n\\nAll in all, the cool thing about supporting Rust in proto is that you can standardize all your tools\\nin a single config for [`proto use`](/docs/proto/commands/use).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.2.0\\"\\nrust = \\"1.68.0\\"\\n```\\n\\n## New user configuration\\n\\nWe have a long list of ideas and features that would be cool to support in proto, but not as the\\ndefault functionality. Because of this, we required a way for users to opt-in to this functionality,\\nand have landed on a new user configuration located at `~/.proto/config.toml`.\\n\\n```toml title=\\"~/.proto/config.toml\\"\\nauto-install = true\\n```\\n\\nThis new configuration only supports a single setting (for now), `auto-install`, that when enabled,\\nwill automatically install a missing tool for the detected version when running\\n[`proto run`](/docs/proto/commands/run) (or a shim).\\n\\n## New `proto upgrade` command\\n\\nWe now provide a [`proto upgrade`](/docs/proto/commands/upgrade) command for upgrading proto itself.\\nThis will download the latest version and replace the binary at `~/.proto/bin/proto`.\\n\\n```shell\\n$ proto upgrade\\n```"},{"id":"moon-v1.0","metadata":{"permalink":"/blog/moon-v1.0","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-27_moon-v1.0.mdx","source":"@site/blog/2023-03-27_moon-v1.0.mdx","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","description":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve","date":"2023-03-27T00:00:00.000Z","formattedDate":"March 27, 2023","tags":[{"label":"projects","permalink":"/blog/tags/projects"},{"label":"constraints","permalink":"/blog/tags/constraints"},{"label":"tags","permalink":"/blog/tags/tags"},{"label":"env-vars","permalink":"/blog/tags/env-vars"},{"label":"tokens","permalink":"/blog/tags/tokens"}],"readingTime":4.745,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"moon-v1.0","title":"moon v1.0 - Official release! Project constraints, tagging, and more!","authors":["milesj"],"tags":["projects","constraints","tags","env-vars","tokens"],"image":"./img/moon/v1.0.png"},"unlisted":false,"prevItem":{"title":"proto v0.4 - Rust support, user configs, and more","permalink":"/blog/proto-v0.4"},"nextItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"}},"content":"\ud83c\udf89 It\'s finally here! After almost a year of development, a handful of breaking changes, we\'ve\\nofficially reached a stable v1 of moon! This release is feature packed with quality of life\\nimprovements.\\n\\n\x3c!--truncate--\x3e\\n\\n## The road to v1\\n\\nIt\'s been 10 months since moon launched publicly, and since that time we have landed 501 pull\\nrequests, fixed 100\'s of bugs, made 16 breaking changes, released 26 versions, and have been used by\\ncompanies like Ikea, SumUp, Depot, and Gallery. It\'s been a wild ride, and we\'re excited to finally\\nreach a stable v1 release.\\n\\n## Project boundaries with constraints\\n\\nOne feature that moon has not supported, but is critical for large monorepos, is project boundaries.\\nA project boundary is a concept that enforces a strict relationship between projects, and is a\\ncommon pattern in monorepos. For example, a project may only be allowed to depend on projects with a\\n[specific tag](#enforce-relationships-with-tags), or a project of a specific type.\\n\\nmoon now supports this functionality through the new\\n[`constraints`](/docs/config/workspace#constraints) setting in\\n[`.moon/workspace.yml`](/docs/config/workspace). The primary constraint we\'re introducing is\\n[`enforceProjectTypeRelationships`](/docs/config/workspace#enforceprojecttyperelationships), which\\nenforces relationships between projects based on their [`type`](/docs/config/project#type) field.\\n\\nFor example, an application can only depend on library or tool based projects, but _not_ other\\napplications (this is a code smell). This setting is enabled by default!\\n\\n```yaml title=\\".moon/workspace.yml\\"\\nconstraints:\\n enforceProjectTypeRelationships: true\\n```\\n\\nAnd that\'s not all, continue reading for more information on tag based constraints!\\n\\n## Project tagging\\n\\nEveryone is familiar with the concept of tagging, and moon\'s implementation is no different. Tags\\nare a simple mechanism for categorizing projects, and can be defined through the\\n[`tags`](/docs/config/project#tags) setting in [`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntags:\\n - \'react\'\\n - \'prisma\'\\n```\\n\\nTags can be used to group projects together for easier querying, enforcing of project boundaries,\\napplying constraints, and more in the future. Tags will become a staple for maintaining repositories\\nat scale. Continue reading for more information!\\n\\n### Querying projects by tag\\n\\nThe first integration with tags is project querying. You can now query for projects by tag using the\\nnew `--tags` option in the [`moon query projects`](/docs/commands/query/projects) command. For\\nexample, say you want to find all projects that are tagged with `vue` or `trpc`:\\n\\n```shell\\n$ moon query projects --tags \'vue|trpc\'\\n```\\n\\n### Enforce relationships with tags\\n\\nAnother feature of tags is enforcing relationships between projects using our new\\n[`constraints`](#project-constraints) setting. When a tagged constraint is defined, it requires all\\n[dependencies](/docs/concepts/project#dependencies) of a tagged project to require 1 of the\\nconfigured tags, otherwise an error is thrown during project graph creation.\\n\\nTo demonstrate this, take the following configuration:\\n\\n```yaml title=\\".moon/workspace.yml\\" {2,3}\\nconstraints:\\n tagRelationships:\\n next: [\'react\', \'trpc\']\\n```\\n\\nThis dictates that all dependencies of a project with the `next` tag, must declare either `react`,\\n`trpc`, or `next` in their own tags. This is great for crafting a monorepo with strict project\\nboundaries!\\n\\n## Shells for system tasks\\n\\nUp until now, all executed tasks would not be wrapped in a shell for 1 reason, to ensure tasks are\\ndeterministic. A major goal for moon is that tasks are deterministic and easily reproducible across\\nall machines. Shells break this guarantee, as they can introduce subtle bugs that are difficult to\\ndiagnose, and may differ wildly between developers and machines.\\n\\nHowever in practice, not supporting shells has been a major pain point for many users, and for the\\nmost part, most system tasks typically run common commands or execute pre-defined scripts. The\\nchance of a non-deterministic build is very small. As such, we\'ve decided to make a compromise, and\\nallow shells for [system tasks](/docs/config/project#platform-1), but not for language based tasks.\\n\\nFor example, the following tasks:\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'echo $PWD\'\\n platform: \'system\'\\n global:\\n command: \'bin-on-path\'\\n platform: \'system\'\\n```\\n\\nWould now be executed as `/bin/sh -c \'echo $PWD\'` and `/bin/sh -c \'bin-on-path\'` on Unix platforms\\nrespectively. On Windows, we execute tasks with `pwsh.exe -c` and pass arguments via stdin.\\n\\nWe\'re also taking this a step further, by introducing a new task option called\\n[`shell`](/docs/config/project#shell), that can be used to toggle the shell wrapping on or off. When\\nturned off, this allows you to customize and execute the shell as you please.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n example:\\n command: \'bash -c \\"echo $PWD\\"\'\\n platform: \'system\'\\n options:\\n shell: false\\n```\\n\\n## Environment variable substitution\\n\\nmoon supports granular environment variables through the project-level\\n[`env`](/docs/config/project#env) setting, task-level [`env`](/docs/config/project#env-1) setting,\\nand the task [`envFile`](/docs/config/project#envfile) option. We\'re expanding their functionality\\nwith variable substitution, allowing the value of another environment variable to be interpolated\\nusing the syntax `${VAR_NAME}`. This is especially useful for composing complex environment\\nvariables.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n dev:\\n command: \'app start\'\\n env:\\n APP_TARGET: \'${REGION}-${ENVIRONMENT}\'\\n```\\n\\nThe same substitution syntax can also be used within `.env` files.\\n\\n```toml title=\\".env\\"\\nAPP_TARGET=\\"${REGION}-${ENVIRONMENT}\\"\\n```\\n\\n## Date/time token variables\\n\\n[Tokens](/docs/concepts/token) are a mechanism used in task configuration for dynamically injecting\\nvalues from the current project or task, especially when task inheritance is involved. Tokens have\\nexisted since moon\'s inception, without much change... until now.\\n\\nWe\'re excited to introduce a new set of tokens for referencing the\\n[current date or time](/docs/concepts/token#datetime): `$date`, `$time`, `$datetime`, and\\n`$timestamp`. With these new tokens, you\'re now able to implement clever or unusual solutions, like\\ngrouping builds or deploys based on the current timestamp.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n deploy:\\n command: \'app deploy --output ./build/$timestamp\'\\n```\\n\\n## Other changes\\n\\nView the [official release](https://github.com/moonrepo/moon/releases/tag/v1.0.0) for a full list of\\nchanges.\\n\\n- Added a `hasher.warnOnMissingInputs` setting to `.moon/workspace.yml`.\\n- Added a `$projectAlias` task token.\\n- Added a `telemetry` setting to `.moon/workspace.yml`.\\n- Updated the new version check to only run on the `check`, `ci`, `run`, and `sync` commands.\\n\\n## What\'s next?\\n\\nExpect the following in the v1.1 release!\\n\\n- Polish and stability initiatives.\\n- Task inheritance based on tags.\\n- Deno tier 3 support."},{"id":"proto-v0.3","metadata":{"permalink":"/blog/proto-v0.3","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-15_proto-v0.3.mdx","source":"@site/blog/2023-03-15_proto-v0.3.mdx","title":"proto v0.3 - Improved npm, go, and version requirement support","description":"With this release, we\'re improving some workflows and version detection logic based on initial","date":"2023-03-15T00:00:00.000Z","formattedDate":"March 15, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"npm","permalink":"/blog/tags/npm"},{"label":"go","permalink":"/blog/tags/go"}],"readingTime":1.395,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto-v0.3","title":"proto v0.3 - Improved npm, go, and version requirement support","authors":["milesj"],"tags":["proto","npm","go"],"image":"./img/proto/v0.3.png"},"unlisted":false,"prevItem":{"title":"moon v1.0 - Official release! Project constraints, tagging, and more!","permalink":"/blog/moon-v1.0"},"nextItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"}},"content":"With this release, we\'re improving some workflows and version detection logic based on initial\\nfeedback.\\n\\n\x3c!--truncate--\x3e\\n\\n## Bundled npm support\\n\\nAfter Node.js is installed, the version of npm that came bundled with that Node.js version will also\\nbe installed into proto. This functionality can be skipped by passing `--no-bundled-npm` during\\ninstallation.\\n\\n```shell\\n$ proto install node -- --no-bundled-npm\\n```\\n\\nTo further expand upon this, `bundled` is now considered a built-in alias, and will be used during\\nversion detection. When encountered, we\'ll first detect the version of Node.js running, and infer\\nthe npm version from there.\\n\\n```shell\\n$ proto global npm bundled\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Automatic `GOBIN` setup\\n\\nAfter Go is installed, we\'ll now inject a `GOBIN` environment variable into your shell, pointing to\\n`~/go/bin`, if it doesn\'t already exist. This variable will be used to locate Go binaries across all\\ninstalled versions, and help to avoid binary not found errors.\\n\\nThis functionality can be skipped by passing `--no-gobin` during installation.\\n\\n```shell\\n$ proto install go -- --no-gobin\\n```\\n\\n> Only supported by proto, not moon.\\n\\n## Better version requirement detection\\n\\nPreviously when proto encounted a version requirement (`^`, `~`, `>=`, etc) during version\\ndetection, we would attempt to resolve a version that satisfied the requirement based on versions\\navailable in the remote manifest (what\'s been officially released). While this worked, it would\\nresult in far too many local installs as that satisfied version constantly changed.\\n\\nInstead, we now satisfy the version requirement based on versions that have been installed locally\\nto `~/.proto/tools`. If no version matches, detection will simply move on to the next case, and\\neventually fallback to the global default version."},{"id":"v0.26","metadata":{"permalink":"/blog/v0.26","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-13_v0.26.mdx","source":"@site/blog/2023-03-13_v0.26.mdx","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","description":"With this release, we\'re providing deeper integration with our new proto toolchain","date":"2023-03-13T00:00:00.000Z","formattedDate":"March 13, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"docker","permalink":"/blog/tags/docker"},{"label":"query","permalink":"/blog/tags/query"},{"label":"hash","permalink":"/blog/tags/hash"}],"readingTime":3.29,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.26","title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","authors":["milesj"],"tags":["proto","docker","query","hash"],"image":"./img/v0.26.png"},"unlisted":false,"prevItem":{"title":"proto v0.3 - Improved npm, go, and version requirement support","permalink":"/blog/proto-v0.3"},"nextItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWith this release, we\'re providing deeper integration with our new [proto](/proto) toolchain\\nmanager, better Docker support, and new query commands for debugging.\\n\\n\x3c!--truncate--\x3e\\n\\n## Full proto toolchain integration\\n\\n
\\n \\n
\\n\\nEarlier this week we announced [proto](/proto), our own toolchain manager, and an attempt at a next\\ngeneration version manager for multiple languages. proto was originally moon\'s toolchain layer, but\\nwe felt it best to extract it out into a stand-alone tool for everyone to use, especially those not\\nusing moon!\\n\\nNow that proto has been released, we\'ve updated moon\'s Rust internals to utilize proto\'s latest Rust\\ncrates. For the most part, everything will continue to work the same. However, the biggest change is\\nthat the toolchain has moved from `~/.moon` to `~/.proto`, and will result in tools being\\nre-downloaded and installed. Feel free to delete the old `~/.moon` directory manually.\\n\\nFurthermore, we\'ve added first-class support for the new [`.prototools`](/docs/proto/config)\\nconfiguration file. If this file is found in the workspace root, we\'ll automatically enable the\\ntools in our toolchain, and inject the versions (when not defined in `.moon/toolchain.yml`).\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.0.0\\"\\npnpm = \\"7.29.0\\"\\n```\\n\\n## New `moon docker setup` command\\n\\nmoon has provided [built-in `Dockerfile` support](/docs/guides/docker) since v0.15 (11 versions\\nago!) and we\'ve always encouraged the use of the [`moon setup`](/docs/commands/setup) command to\\nsetup the toolchain and install project dependencies. Here\'s an example of a moon powered\\n`Dockerfile`:\\n\\n```docker\\nFROM node:latest\\nWORKDIR /app\\n\\n# Install moon binary\\nRUN npm install -g @moonrepo/cli\\n\\n# Copy workspace skeleton\\nCOPY ./.moon/docker/workspace .\\n\\n# Install toolchain and dependencies\\nRUN moon setup\\n\\n# Copy source files\\nCOPY ./.moon/docker/sources .\\n\\n# Build something\\nRUN moon run app:build\\n\\n# Prune workspace\\nRUN moon docker prune\\n\\nCMD [\\"moon\\", \\"run\\", \\"app:start\\"]\\n```\\n\\nHowever, over the course of these 11 releases since v0.15, we refactored the `moon setup` command to\\nonly setup the toolchain, and _no longer_ install project dependencies. We inadvertently broke our\\nDocker integration. This was an oversight on our part.\\n\\nTo rectify this situation, we\'re introducing a new\\n[`moon docker setup`](/docs/commands/docker/setup) command that will efficiently install\\ndependencies for projects focused/affected within the `Dockerfile`. This is a much better solution\\nthan before, and you should see improved Docker layer caching!\\n\\n```diff\\n-RUN moon setup\\n+RUN moon docker setup\\n```\\n\\n## New `moon query hash` command\\n\\nWhen moon runs a task, we generate a unique hash representing the state of that run. When something\\ngoes wrong however, and the hash is different than what you expect, debugging why is rather\\nnon-trivial and requires a lot of internal knowledge. We\'re looking to reduce this burden, by\\nintroducing the new [`moon query hash`](/docs/commands/query/hash) command.\\n\\n```shell\\n$ moon query hash 0b55b234\\n```\\n\\nThis command will print the contents of the hash manifest, which is all inputs and sources used to\\ngenerate the unique hash. From here you can use this output to investigate what\'s actually\\nhappening.\\n\\n```json\\n{\\n \\"command\\": \\"build\\",\\n \\"args\\": [\\"./build\\"]\\n // ...\\n}\\n```\\n\\n## New `moon query hash-diff` command\\n\\nExpanding on the new command above, we\'re also introducing the\\n[`moon query hash-diff`](/docs/commands/query/hash-diff) command, which can be used to compute the\\ndifference between 2 hashes. Perfect in understanding what has changed between ran tasks.\\n\\n```shell\\n$ moon query hash-diff 0b55b234 2388552f\\n```\\n\\nWhen ran, the command will print out the differences as highlighted lines. If you use `git diff`,\\nthis will feel familiar to you.\\n\\n```diff\\n{\\n\\t\\"command\\": \\"build\\",\\n\\t\\"args\\": [\\n+\\t\\t\\"./dist\\"\\n-\\t\\t\\"./build\\"\\n\\t],\\n\\t...\\n}\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.26.0) for a\\nfull list of changes.\\n\\n- A handful of critical bug fixes.\\n- Targets that generate an empty hash are now considered a failure, as they may be an edge case not\\n accounted for.\\n\\n## What\'s next?\\n\\nExpect the following in the v1 release!\\n\\n- Officially release a v1!\\n- Project tagging and constraints."},{"id":"proto","metadata":{"permalink":"/blog/proto","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-03-09_proto.mdx","source":"@site/blog/2023-03-09_proto.mdx","title":"Introducing proto, a next-generation toolchain manager!","description":"We are proud to announce the launch of proto, a next-generation toolchain manager for all","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":1.89,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"proto","title":"Introducing proto, a next-generation toolchain manager!","authors":["milesj"],"tags":["proto","toolchain"],"image":"./img/proto/v0.png"},"unlisted":false,"prevItem":{"title":"moon v0.26 - Deeper proto integration, Docker setup, and query commands","permalink":"/blog/v0.26"},"nextItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Logo from \'../static/brand/proto/logo.svg\';\\n\\nWe are proud to announce the launch of [proto](/proto), a next-generation toolchain manager for all\\nof your favorite programming languages.\\n\\n\x3c!--truncate--\x3e\\n\\n
\\n \\n
\\n\\n[proto](/proto) is a Rust based multi-language toolchain manager that will download and install\\ntools by version, and immediately make them available on `PATH`. proto is launching with initial\\nsupport for [Bun](https://bun.sh), [Deno](https://deno.land), [Node.js](https://nodejs.org) (and\\nnpm, pnpm, yarn), and [Go](https://go.dev), with more languages on the way!\\n\\n```shell\\nproto install node 18\\nproto install go 1.20\\nproto install deno 1.30\\n```\\n\\nUnlike other version managers that pin their global binary to a default version, proto will\\n[contextually detect an applicable version](/docs/proto/detection) from the environment or the\\nlanguage\'s ecosystem (like `package.json`), ensuring the correct tool is always being ran.\\n\\n```shell\\n# Will detect a version before running\\nbun run ./script.ts\\n```\\n\\nFurthermore, with proto\'s [`.prototools`](/docs/proto/config) file, you can pin versions of all\\nrequired tools on a per-project or per-repository basis, allowing for near instant setup of\\ndeveloper environments. Perfect for onboarding new developers!\\n\\n```toml title=\\".prototools\\"\\nnode = \\"18.12.0\\"\\nyarn = \\"3.3.0\\"\\n```\\n\\n```shell\\n# Install all the things!\\nproto use\\n```\\n\\nAnd lastly, [moon](/moon)\'s toolchain is built on proto, so if you\'re using moon, you might as well\\nuse proto. This will enable a single toolchain for both tools (in v0.26)!\\n\\n
\\n
\\n\\n## How to get started?\\n\\nIn a terminal that supports Bash, run:\\n\\n```\\ncurl -fsSL https://moonrepo.dev/install/proto.sh | bash\\n```\\n\\nIn Powershell or Windows Terminal, run:\\n\\n```\\nirm https://moonrepo.dev/install/proto.ps1 | iex\\n```\\n\\nJump to the [documentation](/docs/proto) for more information on getting started and available\\ncommands!\\n\\n## Why another version manager?\\n\\nTo start, proto powers [moon\'s](/moon) toolchain and integrated developer environment. We believed\\nthat moon\'s toolchain would be extremely beneficial for developers as a whole, and so we extracted\\nproto out into a standalone Rust CLI and Rust crates that moon inherits.\\n\\nFurthermore, we believe that requiring multiple ad-hoc version managers for all your languages, each\\nwith different workflows, CLI commands, and configuration files, is a poor developer experience.\\n\\nOur goal is to unify all of these into a single performant interface. A toolchain manager is the\\nnext step in the version manager evolution."},{"id":"v0.25","metadata":{"permalink":"/blog/v0.25","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-27_v0.25.mdx","source":"@site/blog/2023-02-27_v0.25.mdx","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","description":"With this release, we\'re landing Deno, our first supported language besides Node.js, and improving","date":"2023-02-27T00:00:00.000Z","formattedDate":"February 27, 2023","tags":[{"label":"deno","permalink":"/blog/tags/deno"},{"label":"toolchain","permalink":"/blog/tags/toolchain"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"offline","permalink":"/blog/tags/offline"},{"label":"github","permalink":"/blog/tags/github"}],"readingTime":4.475,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.25","title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","authors":["milesj"],"tags":["deno","toolchain","moonbase","offline","github"],"image":"./img/v0.25.png"},"unlisted":false,"prevItem":{"title":"Introducing proto, a next-generation toolchain manager!","permalink":"/blog/proto"},"nextItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\n\\nWith this release, we\'re landing Deno, our first supported language besides Node.js, and improving\\ninteroperability of languages as a whole.\\n\\n\x3c!--truncate--\x3e\\n\\n## Deno tier 2 support (experimental)\\n\\nThree months ago we announced our [new tiered support structure](./v0.21) for languages, and as of\\ntoday, we\'re happy to announce that our second language to reach tier 2 is\\n[Deno](https://deno.land)! With tier 2 support, we now analyze Deno specific configuration files\\n(like `deno.json`) to infer dependencies and relationships, as well as utilize this information for\\ninputs and hashing purposes. With that being said, we\'re marking this release as experimental until\\nwe fine tune the implementation, and iron out all the bugs.\\n\\nTo get started with using Deno, enable the new [`deno`](/docs/config/toolchain#deno) setting in\\n[`.moon/toolchain.yml`](/docs/config/toolchain). At this time, we don\'t have many settings to\\nconfigure, so simply defining an empty object is enough to enable the Deno platform! Learn more\\nabout this in our [Deno handbook](/docs/guides/javascript/deno-handbook).\\n\\n```yaml title=\\".moon/toolchain.yml\\"\\ndeno: {}\\n```\\n\\nOnce enabled, you can start using `deno` commands in your moon tasks. moon will automatically set\\nthe [`platform`](/docs/config/project#platform-1) to \\"deno\\" when using a deno command.\\n\\n```yaml title=\\"moon.yml\\"\\ntasks:\\n format:\\n command: \'deno fmt\'\\n```\\n\\n:::info\\n\\nBecause this is only tier 2 support, moon _does not_ download and install Deno into its toolchain.\\nmoon expects the `deno` binary to exist in the current environment.\\n\\n:::\\n\\nFurthermore, if you\'re working a project that is composed of multiple JavaScript runtimes, like\\nDeno, Bun, or Node.js, you can set the default `platform` for all tasks at the project-level.\\n\\n```yaml title=\\"moon.yml\\"\\nplatform: \'deno\'\\nlanguage: \'typescript\'\\ntype: \'application\'\\n```\\n\\nWe\'re very excited for this release as it paves the way for future language integrations, and\\nenables additional JavaScript runtimes!\\n\\n## CI insights in moonbase\\n\\nWe\'ve spent the last few weeks implementing a new [moonbase](https://moonrepo.app) feature called CI\\ninsights, where we track all CI runs (via [`moon ci`](/docs/commands/ci)), and all actions (tasks)\\nthat have ran based on affected files. In the future these insights will help catch regressions,\\nalert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and\\nrepositories.\\n\\n\\n\\nWith this initial release, we track touched files, which targets are affected based on those files,\\nan estimation on how much time was saved or lost, the actions that ran and their final status,\\noutlined as a timeline.\\n\\n\\n\\nInsights are enabled by default if you\'re using moonbase in your CI pipeline, and start using moon\\nv0.25! You can disable insights gathering from your\\n[organization settings page](https://moonrepo.app).\\n\\n## Offline mode\\n\\nmoon assumes that an internet connection is always available, as we download and install tools into\\nthe toolchain, resolve versions against upstream manifests, and automatically install dependencies.\\nWhile this is useful, having a constant internet connection isn\'t always viable.\\n\\nIn this release, we now check for an active internet connection and bypass certain workflows when\\napplicable.\\n[Jump to the official guide on offline mode for more information](/docs/guides/offline-mode)!\\n\\n## Custom project `language`\\n\\nProject\'s have always been able to define a [`language`](/docs/config/project#language) in\\n[`moon.yml`](/docs/config/project) that denotes the primary programming language for the project.\\nHistorically this has been a strict enum of supported values, and could _not_ be customized for\\nother languages. With the introduction of\\n[language driven task inheritance](./v0.23#new-scoped-tasks-with-moontasksyml), we felt like\\nrevisiting this setting, and as such, you\'re now able to define _any_ language in this setting,\\nwhich also feeds into the task inheritance system.\\n\\n```yaml title=\\"moon.yml\\"\\nlanguage: \'kotlin\'\\n```\\n\\nWith this change, `.moon/tasks/kotlin-application.yml`, `.moon/tasks/dotnet.yml`, and other\\nvariations are now possible! However, besides task inheritance, other functionality like platform\\ndetection, and Dockerfile support are not enabled.\\n\\n## Project-level TypeScript settings (breaking)\\n\\nOur TypeScript integration supports many automated workflows, like syncing project references, and\\nrouting `outDir` to our shared cache. This is wonderful for the majority, but for the handful of\\nprojects where these settings were not viable, there was no simple way to disable or opt out of the\\nfunctionality.\\n\\nWell no more, projects can now override the workspace-level TypeScript settings\\n`routeOutDirToCache`, `syncProjectReferences`, and `syncProjectReferencesToPaths` through the\\n[`toolchain.typescript`](/docs/config/project#typescript) setting in\\n[`moon.yml`](/docs/config/project).\\n\\n```yaml title=\\"moon.yml\\"\\ntoolchain:\\n typescript:\\n routeOutDirToCache: false\\n```\\n\\nBecause this setting was changed from a boolean to an object, the old pattern of disabling\\nTypescript must now use the `disabled` setting.\\n\\n```yaml title=\\"moon.yml\\"\\n# Old\\ntoolchain:\\n typescript: false\\n\\n# new\\ntoolchain:\\n typescript:\\n disabled: true\\n```\\n\\n## New `moonrepo/setup-moon-action` GitHub action\\n\\nIf you\'re using GitHub Actions as your CI pipeline, we\'ve introducing a new action called\\n[moonrepo/setup-moon-action](https://github.com/moonrepo/setup-moon-action), that will install the\\n`moon` binary globally, and will cache (and restore) the moon toolchain.\\n\\nWith this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps\\naround setting up Node.js, and install dependencies.\\n\\n```yaml\\njobs:\\n ci:\\n name: \'CI\'\\n runs-on: \'ubuntu-latest\'\\n steps:\\n - uses: actions/checkout@v4\\n with:\\n fetch-depth: 0\\n - uses: moonrepo/setup-moon-action@v1\\n - run: moon ci\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.25.0) for a\\nfull list of changes.\\n\\n- Updated project, task, and target identifiers to support periods (`.`).\\n- Refactored glob matching to use workspace relative paths instead of absolute. Please report an\\n issue if hashing or affected detection is now inaccurate.\\n- We now build against older operating systems in an attempt to solve GLIBC version errors.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.26 release!\\n\\n- Officially release proto!\\n- Improved Deno interoperability."},{"id":"v0.24","metadata":{"permalink":"/blog/v0.24","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-13_v0.24.mdx","source":"@site/blog/2023-02-13_v0.24.mdx","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","description":"With this release, we\'ve polished our CLI experience and improved task interoperability.","date":"2023-02-13T00:00:00.000Z","formattedDate":"February 13, 2023","tags":[{"label":"project","permalink":"/blog/tags/project"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":4.28,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"v0.24","title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","authors":["milesj","jpoz"],"tags":["project","platform","moonbase","remote-cache"],"image":"./img/v0.24.png"},"unlisted":false,"prevItem":{"title":"moon v0.25 - Deno tier 2 support, CI insights, custom project languages, and more","permalink":"/blog/v0.25"},"nextItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'ve polished our CLI experience and improved task interoperability.\\n\\n\x3c!--truncate--\x3e\\n\\n## Remote caching now available\\n\\nIf you missed our announcement earlier this week,\\n[remote caching is now publicly available through our new service moonbase](/blog/moonbase)! If\\nyou\'re looking to speed up your CI pipelines and share build artifacts between runs, moonbase can\\nhelp.\\n\\n
\\n
\\n\\n## Project-level task platform\\n\\nIn our previous release, [v0.23](./v0.23#project-level-environment-variables), we added support for\\nproject-level environment variables. This is great as it helps to reduce duplication for projects\\nwith many tasks. On that note, we wondered which configuration field we could apply similar\\ntreatment, and as such, we\'ve added a project-level [`platform`](/docs/config/project#platform)\\nsetting.\\n\\nWhen this setting is defined, all task\'s within the current project that have _not explicitly_\\nconfigured their `platform`, will inherit the project-level platform. If neither settings are\\ndefined, we\'ll attempt to detect the correct platform based on the state of the project.\\n\\n```yaml title=\\"/moon.yml\\"\\n# Will set non-explicit task\'s platform to node\\nplatform: \'node\'\\n\\ntasks:\\n # Will be node\\n dev: # ...\\n\\n # Will be node\\n build: # ...\\n\\n # Will be system\\n serve:\\n # ...\\n platform: \'system\'\\n```\\n\\n> This setting is _extremely useful_ for projects that contain multiple languages. Even more so once\\n> we land Bun and Deno support, as we\'ll need a way to differentiate JavaScript/TypeScript projects!\\n\\n## Interactive tasks\\n\\nWhen moon executes a task, it streams both stdout and stderr to the terminal _and_ captures the\\noutput for later use. We do this for 2 reasons:\\n\\n- We store stdout.log and stderr.log files in a tarball archive.\\n- We replay this captured output when executing a task that has been cached.\\n\\nWhile this works, our approach is non-standard. Streams are either piped or inherited, not both!\\nBecause of our custom abstraction around streams and output capturing, it disrupts stdin, breaking\\nall interactive commands. If you tried to run a task that prompted you with a question and were\\nunable to answer it, this is why!\\n\\nTo remedy this shortcoming, we\'re approaching this from 2 angles. The first is that all tasks marked\\nas [`local`](/docs/config/project#local) (or have caching disabled) will no longer capture streamed\\noutput, and will instead stream natively, allowing interactivity out of the box, but only when\\nthey\'re the only task being ran. This will cover the majority of use cases.\\n\\nFor the remaining use cases, we\'re introducing a new `--interactive` flag for\\n[`moon run`](/docs/commands/run). When this flag is provided, it will force the target into an\\ninteractive mode.\\n\\n```shell\\n$ moon run app:new --interactive\\n```\\n\\n## Improved `moon query` commands (breaking)\\n\\nThe [`moon query projects`](/docs/commands/query/projects) and\\n[`moon query touched-files`](/docs/commands/query/touched-files) commands are useful for building\\ncustom solutions and integrations on top of moon, but they weren\'t developer friendly as they output\\nlarge JSON blobs. To remedy this, we\'ve updated both commands to output a simple human readable\\nformat by default, and moved the JSON output behind a `--json` flag.\\n\\nFor example, `moon query touched-files` now outputs a list of absolute file paths separated by new\\nlines.\\n\\n```\\n$ moon query touched-files\\n/moon/website/docs/commands/query/projects.mdx\\n/moon/crates/cli/tests/query_test.rs\\n/moon/crates/cli/src/commands/query.rs\\n/moon/website/blog/2023-02-13_v0.24.mdx\\n```\\n\\nWhile `moon query projects` now outputs a list of project separated by new lines, where each line\\ncontains the project name, source, type, and language.\\n\\n```\\n$ moon query projects\\nreport | packages/report | library | typescript\\nruntime | packages/runtime | library | typescript\\ntypes | packages/types | library | typescript\\nvisualizer | packages/visualizer | library | typescript\\nwebsite | website | application | typescript\\n```\\n\\nWe had 2 goals in mind for this change, the first was to make it easily readable, and the second was\\nfor the default output to be easily parseable. We believe we\'ve accomplished these goals!\\n\\n## New `moon query tasks` command\\n\\nTo expand on the query improvements above, we wanted to provide a way to also query for tasks,\\nanswering the question of \\"What tasks exists and for what projects?\\". And with this, we\'re\\nintroducing a new [`moon query tasks`](/docs/commands/query/tasks) command!\\n\\n```\\n$ moon query tasks\\ntypes\\n :build | packemon\\n :format | prettier\\n :lint | eslint\\n :test | jest\\n :typecheck | tsc\\nreport\\n :build | packemon\\n :format | prettier\\n :lint | eslint\\n :test | jest\\n :typecheck | tsc\\n...\\n```\\n\\n## Shell completions\\n\\nAuto-completion in your terminal increases productivity, which we\'re a massive fan of. To help\\nsupport this, we\'re introducing the [`moon completions`](/docs/commands/completions) command, which\\ngenerates the appropriate command completions for your current shell.\\n\\nThis command writes to stdout, which can then be redirected to a file of your choice. Be sure to\\nconfigure your shell profile to load the completions!\\n\\n```shell\\n$ moon completions > ~/.bash_completion.d/moon.sh\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0) for a\\nfull list of changes.\\n\\n- Added [TypeScript v5](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/)\\n support.\\n- Added a `hasher.walkStrategy` setting to `.moon/workspace.yml`.\\n- Updated task `outputs` to support token functions (`@group`, `@globs`, etc).\\n- Reworked our comparison/baseline estimations calcuations.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.25 release!\\n\\n- Deno tier 2 support.\\n- CI insights and metrics within moonbase.\\n- Project-level TypeScript settings."},{"id":"moonbase","metadata":{"permalink":"/blog/moonbase","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-02-08_moonbase.mdx","source":"@site/blog/2023-02-08_moonbase.mdx","title":"Remote caching is now publicly available through moonbase","description":"We are proud to announce the launch of moonbase remote caching \u2013 a new solution that","date":"2023-02-08T00:00:00.000Z","formattedDate":"February 8, 2023","tags":[{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"remote-cache","permalink":"/blog/tags/remote-cache"}],"readingTime":1.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"},{"name":"James Pozdena","title":"Founder, developer","url":"https://github.com/jpoz","imageURL":"/img/authors/james.jpg","key":"jpoz"}],"frontMatter":{"slug":"moonbase","title":"Remote caching is now publicly available through moonbase","authors":["milesj","jpoz"],"tags":["moonbase","remote-cache"]},"unlisted":false,"prevItem":{"title":"moon v0.24 - Remote caching, interactive tasks, query improvements, and more","permalink":"/blog/v0.24"},"nextItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"}},"content":"import Button from \'@site/src/ui/Button\';\\nimport Image from \'@site/src/components/Image\';\\nimport Logo from \'../static/brand/moonbase/logo.svg\';\\n\\nWe are proud to announce the launch of [moonbase](/moonbase) remote caching \u2013 a new solution that\\nhelps moon developers streamline their build processes and save time.\\n\\n\x3c!--truncate--\x3e\\n\\n
\\n \\n
\\n\\nRemote caching allows developers to cache artifacts across builds, improving the efficiency of their\\nContinuous Integration (CI) pipelines. This is accomplished by automatically caching build artifacts\\nwhen moon is run with moonbase [remote caching enabled](/docs/guides/remote-cache). In the event\\nthat a CI run is executed with identical code, the cached artifacts are automatically pulled down,\\nreducing the time required to complete the build. In our tests, we have seen significant\\nimprovements in CI times, upwards of 90%.\\n\\n## What is moonbase?\\n\\nYou may be asking yourself, what is moonbase? [moonbase](/moonbase) is a new cloud service that\\nwe\'ve been working on to solve an array of problems in regards to repository and continous\\nintegration health.\\n\\n\\n\\nThe first problem on this list is [remote caching](/docs/guides/remote-cache), which has been in a\\nbeta program for the past few months. We want to thank all the beta participants for testing our\\nsystems!\\n\\nWe\'ll also be launching CI insights in the next few weeks. This is a system where we track all your\\nCI runs (via `moon ci`), and all moon tasks (actions) that ran within each job. We use this\\ninformation to track the health of your pipelines, catch regressions, alert on flakiness, and more!\\nBut don\'t worry, this feature is opt-in.\\n\\nWe\'re very excited for moonbase! We have a massive roadmap ahead of us, but we\'re sure y\'all will\\nenjoy everything that it has to offer.\\n\\n
\\n
\\n\\n## New homepage and product pages\\n\\nAs part of this release, we\'ve updated our homepage, and added new product pages for both\\n[moon](/moon) and [moonbase](/moonbase). This includes new logos and typography, which we\'re very\\nexcited for! This is only the beginning, as we\'re also working on additional behind the scenes\\nproducts. Stay tuned!"},{"id":"v0.23","metadata":{"permalink":"/blog/v0.23","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-30_v0.23.mdx","source":"@site/blog/2023-01-30_v0.23.mdx","title":"moon v0.23 - Scoped task inheritance, and project config updates","description":"With this release, we\'re launching the next iteration of our task inheritance model, as well as","date":"2023-01-30T00:00:00.000Z","formattedDate":"January 30, 2023","tags":[{"label":"survey","permalink":"/blog/tags/survey"},{"label":"tasks","permalink":"/blog/tags/tasks"},{"label":"projects","permalink":"/blog/tags/projects"}],"readingTime":5.74,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.23","title":"moon v0.23 - Scoped task inheritance, and project config updates","authors":["milesj"],"tags":["survey","tasks","projects"],"image":"./img/v0.23.png"},"unlisted":false,"prevItem":{"title":"Remote caching is now publicly available through moonbase","permalink":"/blog/moonbase"},"nextItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"}},"content":"import Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\nimport Button from \'@site/src/ui/Button\';\\n\\nWith this release, we\'re launching the next iteration of our task inheritance model, as well as\\nquality of life improvements for project configuration.\\n\\n\x3c!--truncate--\x3e\\n\\n## Developer survey\\n\\nBefore we dive into this new release, we have a quick survey for everyone. We know how everyone\\nfeels about surveys, but this one is real quick, only a few minutes, and is mostly multiple choice\\nquestions.\\n\\nWe\'re looking for feedback on moon itself, what features you\'re looking for, what you currently do\\nnot like, how you\'re currently using monorepos, your development workflows, so on and so forth. We\'d\\nvery much appreciate it if you could engage with this survey!\\n\\n
\\n \\n
\\n\\n## Improved task inheritance model\\n\\nOne of the guiding principles behind moon is to simplify repository maintenance, with task\\nmanagement being top of list. We weren\'t happy with the current state of things, as every build\\nsystem and task runner that exists always opted for per-project task management, which is a massive\\namount of overhead and tech debt in the long run. To combat this, moon was designed from the\\nground-up using a task inheritance model, where \\"global\\" tasks were defined in\\n[`.moon/project.yml`](/docs/config/tasks), with per-project tasks still being an option with\\n[`moon.yml`](/docs/config/project).\\n\\nWhile inheritance worked great, it did have some shortcomings, such as:\\n\\n- With the addition of [new programming languages](/blog/v0.21), there\'s no way to easily define\\n tasks for specific languages, that should only be inherited by specific projects.\\n- There\'s no way to differentiate tasks between applications or libraries, as they typically have\\n different build/compilation systems.\\n- All of the problems above can be \\"solved\\" with\\n [`workspace.inheritedTasks`](/docs/config/project#inheritedtasks) in all projects, but it\'s a\\n maintenance headache.\\n\\nWe\'ve been documenting a solution to these problems for many months now, and we\'re very excited to\\nfinally release our new and improved task inheritance model that solves all of the problems above,\\nand opens the doors for future enhancements! Keep reading for more information.\\n\\n### New `.moon/tasks.yml` (breaking)\\n\\nTo start, we renamed `.moon/project.yml` to `.moon/tasks.yml` as we want to emphasize that this\\nconfiguration file is for task inheritance functionality only. However, the semantics of this file\\nhas _not_ changed, and is still \\"tasks to be inherited by _all_ projects\\".\\n\\n```yaml title=\\".moon/tasks.yml\\"\\n$schema: \'https://moonrepo.dev/schemas/tasks.json\'\\n\\ntasks:\\n # ...\\n```\\n\\n> We\'ll automatically rename this file for you when running a `moon` command!\\n\\n### New scoped tasks with `.moon/tasks/*.yml`\\n\\nThe biggest change to task inheritance is that tasks can now be scoped by a project\'s\\n[`language`](/docs/config/project#language) or [`type`](/docs/config/project#type) using the new\\n`.moon/tasks/.yml` or `.moon/tasks/-.yml` configuration files! Jump to the\\n[official documentation on task inheritance](/docs/concepts/task-inheritance) for more information\\non how scoping works, the lookup order of files, and much more.\\n\\nAs a demonstration, you can scope tasks to Node.js projects with `.moon/tasks/node.yml`, Rust\\napplications with `.moon/tasks/rust-application.yml`, Go libraries with\\n`.moon/tasks/go-library.yml`, Ruby scripts with `.moon/tasks/ruby-tool.yml`, so on and so forth!\\n\\nWe\'re very excited for this feature, as it\'s something we personally needed, and we\'re sure you all\\ndo as well. It also future proofs moon for new programming languages, additional implicit scenarios\\nto handle, and yet to be discovered functionality.\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\ntasks:\\n format:\\n command: \'prettier --write .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\ntasks:\\n format:\\n command: \'go fmt\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\ntasks:\\n format:\\n command: \'phpcbf .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\ntasks:\\n format:\\n command: \'pylint .\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\ntasks:\\n format:\\n command: \'rubocop -l\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\ntasks:\\n format:\\n command: \'cargo fmt --all --check\'\\n```\\n\\n\\n\\n\\n### Moved `implicitDeps` and `implicitInputs` (breaking)\\n\\nTo standardize inheritance and expansion related functionality, we\'ve moved the\\n`runner.implicitDeps` and `runner.implicitInputs` settings from `.moon/workspace.yml` to\\n[`.moon/tasks.yml`](/docs/config/tasks#implicitdeps) and\\n[`.moon/tasks/*.yml`](/docs/config/tasks#implicitinputs) and removed the `runner` prefix.\\n\\nThis allows for implicits to also be scoped accordingly and granularly. For example, projects can\\nnow inherit dependency manager related files as implicit inputs on a per-language basis:\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/node.yml\\"\\nimplicitInputs:\\n - \'package.json\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/go.yml\\"\\nimplicitInputs:\\n - \'go.mod\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/php.yml\\"\\nimplicitInputs:\\n - \'composer.json\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/python.yml\\"\\nimplicitInputs:\\n - \'pyproject.toml\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/ruby.yml\\"\\nimplicitInputs:\\n - \'Gemfile\'\\n```\\n\\n\\n\\n\\n```yaml title=\\".moon/tasks/rust.yml\\"\\nimplicitInputs:\\n - \'Cargo.toml\'\\n```\\n\\n\\n\\n\\n## Project-level environment variables\\n\\nSince moon\'s inception, tasks can be configured with pre-defined environment variables using the\\n[`env`](/docs/config/project#env-1) setting. These variables would then be passed to the command\\nduring execution. This works perfectly for encapsulation, but becomes tedious when the same\\nvariables are repeated for multiple tasks.\\n\\nTo remedy this, environment variables can now be defined at the top of\\n[`moon.yml`](/docs/config/project) using the top-level [`env`](/docs/config/project#env) setting.\\nVariables defined at the top-level will be inherited by all tasks in the current project, but will\\nnot override task-level variables of the same name.\\n\\nTo demonstrate this, the following config:\\n\\n```yaml title=\\"/moon.yml\\"\\ntasks:\\n dev:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n build:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n\\n serve:\\n # ...\\n env:\\n TARGET_ENV: \'development\'\\n```\\n\\nCan be rewritten as:\\n\\n```yaml title=\\"/moon.yml\\"\\nenv:\\n TARGET_ENV: \'development\'\\n\\ntasks:\\n dev:\\n # ...\\n\\n build:\\n # ...\\n\\n serve:\\n # ...\\n```\\n\\n## Globs in task outputs\\n\\nAnother feature that\'s been around since moon\'s inception is task\\n[`outputs`](/docs/config/project#outputs), which only supported relative files and folders. For\\nhistorical reasons, it was the easiest solution at the time, but in practice, supporting more\\ngranular control is better.\\n\\nAs such, task `outputs` now support glob patterns as well! This is perfect for restricting and\\nfiltering down which files are cached in the artifact. However, be aware that during hydration (a\\ncache hit), all files _not matching the glob_ will be deleted, so ensure that critical files _do_\\nmatch.\\n\\nTo demonstrate this, if building a JavaScript project, you may want to include `.js` and `.css`\\nfiles, but exclude everything else (`.map`, etc).\\n\\n```yaml title=\\"moon.yml\\" {4,5}\\ntasks:\\n build:\\n command: \'webpack\'\\n outputs:\\n - \'build/**/*.{js,css}\'\\n```\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.23.0) for a\\nfull list of changes.\\n\\n- Updated `moon migrate from-turborepo` to preserve globs in outputs.\\n- Updated project graph to no longer cache when there\'s no VCS root.\\n- Updated pnpm to use the new `pnpm dedupe` command when the version is >= 7.26.0.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.24 release!\\n\\n- New `moon query tasks` command.\\n- New per-project `platform` setting.\\n- Token support in task `outputs`.\\n- TypeScript v5 support."},{"id":"v0.22","metadata":{"permalink":"/blog/v0.22","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-16_v0.22.mdx","source":"@site/blog/2023-01-16_v0.22.mdx","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","description":"It\'s the first release of the year, and with this release, we\'re landing some quality of life","date":"2023-01-16T00:00:00.000Z","formattedDate":"January 16, 2023","tags":[{"label":"graph","permalink":"/blog/tags/graph"},{"label":"pipeline","permalink":"/blog/tags/pipeline"},{"label":"hasher","permalink":"/blog/tags/hasher"},{"label":"migrate","permalink":"/blog/tags/migrate"}],"readingTime":2.805,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.22","title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","authors":["milesj"],"tags":["graph","pipeline","hasher","migrate"],"image":"./img/v0.22.png"},"unlisted":false,"prevItem":{"title":"moon v0.23 - Scoped task inheritance, and project config updates","permalink":"/blog/v0.23"},"nextItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nIt\'s the first release of the year, and with this release, we\'re landing some quality of life\\ninfrastructure and workflow improvements!\\n\\n\x3c!--truncate--\x3e\\n\\n## New action pipeline\\n\\nWhen running targets, we generate a graph of actions to execute in order within the action runner.\\nAn action is one of \\"setup toolchain\\", \\"install dependencies\\", \\"run target\\", so on and so forth. Our\\naction runner would then spawn threads for every action using the [Tokio](https://tokio.rs/)\\nruntime. While this worked great, concurrency was entirely abstracted away from us.\\n\\nTo mitigate this problem, we\'ve implemented a new system for executing actions known as the action\\npipeline (or simply pipeline), which implements a dynamically scaling thread pool on top of Tokio.\\nThis provides us with more control over concurrency, starting with the new `--concurrency` option,\\nwhich restricts the number of threads (or CPU cores).\\n\\n```shell\\n$ moon run :build --concurrency 2\\n```\\n\\n## Expanded hashing functionality\\n\\nWhen we run targets in the pipeline, we hash a collection of inputs to calculate whether to continue\\nrunning or to exit early. This functionality has been extremely beneficial for optimizing the\\npipeline, and so, we\'ve expanded the hasher for other use cases. To start, the following 2 workflows\\nnow utilize the hasher:\\n\\n- When determining to auto-install dependencies (`npm install`, etc), we now hash all production,\\n development, and peer dependencies from applicable manifests (`package.json`). This has resulted\\n in more accurate installs, as we\'re no longer inadvertently installing when a non-dependency field\\n is modified in a manifest. On top of this, will still take into account lockfile modified\\n timestamps.\\n- When generating the project graph, we now hash all sources, aliases, and configuration files, to\\n determine whether to load the project graph from the local cache.\\n\\n## Project graph is now cached\\n\\nBecause of the hashing improvements above, we\'re now able to cache the entirety of the project graph\\ninto local cache. Depending on how many projects are in your workspace, you may see performance\\nimprovements on subsequent runs as we\'re no longer re-building the project graph over and over\\neverytime the `moon` binary is ran.\\n\\n## Migrate from Turborepo\\n\\nTurborepo is a popular task runner for Node.js based monorepos, but doesn\'t support all the\\nfunctionality that moon does. If you\'re looking to prototype moon, or migrate from Turborepo to moon\\nholistically, we now support a new command\\n[`moon migrate from-turborepo`](/docs/commands/migrate/from-turborepo).\\n\\nThis command will migrate the `turbo.json` file to moon applicable configuration files!\\n\\n```shell\\n$ moon migrate from-turborepo\\n```\\n\\n## Breaking changes\\n\\n### Renamed events\\n\\nBecause of the runner -> pipeline changes above, the `runner.*` [webhook](/docs/guides/webhooks)\\nevents were renamed to `pipeline.*`.\\n\\n### Updated CLI options\\n\\nRenamed the `--upstream` option to `--remote`, to better align with Git terminology, and removed the\\n`--report` option from `moon check` and `moon run` commands. Reports are now always created.\\n\\n## Other changes\\n\\nView the\\n[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.22.0) for a\\nfull list of changes.\\n\\n- Added Bun as a tier 1 language (doesn\'t do much at the moment).\\n- Added a [`versionConstraint` setting](/docs/config/workspace#versionconstraint) in\\n `.moon/workspace.yml` that enforces a requirement on the running moon binary.\\n- Updated the [`project` fields](/docs/config/project#project) in `moon.yml` to be optional,\\n excluding `description`.\\n- Internal improvements to remote caching and artifact uploading.\\n\\n## What\'s next?\\n\\nExpect the following in the v0.23 release!\\n\\n- Improved task inheritance workflow.\\n- Glob support in task `outputs`.\\n- Project-level environment variables."},{"id":"2023-roadmap","metadata":{"permalink":"/blog/2023-roadmap","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2023-01-04_2023-roadmap.mdx","source":"@site/blog/2023-01-04_2023-roadmap.mdx","title":"What\'s in store for 2023","description":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long","date":"2023-01-04T00:00:00.000Z","formattedDate":"January 4, 2023","tags":[{"label":"roadmap","permalink":"/blog/tags/roadmap"},{"label":"moonbase","permalink":"/blog/tags/moonbase"},{"label":"proto","permalink":"/blog/tags/proto"},{"label":"toolchain","permalink":"/blog/tags/toolchain"}],"readingTime":5.42,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"2023-roadmap","title":"What\'s in store for 2023","authors":["milesj"],"tags":["roadmap","moonbase","proto","toolchain"]},"unlisted":false,"prevItem":{"title":"moon v0.22 - New pipeline, hashing, and caching, with Turborepo migration","permalink":"/blog/v0.22"},"nextItem":{"title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","permalink":"/blog/v0.21"}},"content":"Happy new year! Let\'s start 2023 by reflecting on last year and diving into our tentative year long\\nroadmap.\\n\\n\x3c!--truncate--\x3e\\n\\n## Year 2022 in review\\n\\nThe original concept and\\n[first commit of moon](https://github.com/moonrepo/moon/commit/62267e3ccda7a45c2e9355fcbddba577ae54403d)\\n(codenamed monolith) landed October 23rd, 2021. Eight months later, we\\n[launched an alpha of moon](https://twitter.com/tothemoonrepo/status/1527467865200136192) to the\\npublic on May 19th, 2022. Since then, we\'ve landed 21 amazing releases based on feedback from the\\ncommunity and our long-term vision, with some such features as:\\n\\n- Linux musl, macOS silicon, and ARM support\\n- Full Node.js/JavaScript ecosystem support\\n- End-to-end caching and hashing of build artifacts\\n- Streamlined configuration\\n- Improved developer experience\\n- Massive performance improvements\\n- Automatic cache cleaning\\n- Code generation / scaffolding\\n- Dockerfile integration\\n- Remote caching\\n- New langauage agnostic toolchain\\n- Onboarding of 5 new languages: Rust, Go, PHP, Python, Ruby\\n- Rewritten project and dependency graphs\\n- Project-level toolchain overrides\\n- Project specific caching\\n- VSCode extension\\n- 2 GitHub actions\\n- ...and so much more!\\n\\nWe\'re very proud with the quality and amount of features we\'ve released in a 7 month timeframe. On\\ntop of this, our [GitHub stars](https://github.com/moonrepo/moon/stargazers) have steadily passed\\nthe 1k mark, [npm](https://www.npmjs.com/package/@moonrepo/cli) downloads are 500 a week and\\ngrowing, and our [Twitter](https://twitter.com/tothemoonrepo) isn\'t doing too bad. This is only the\\nstart, and we\'re not planning to go anywhere!\\n\\n## Path to an official v1 release\\n\\nA common question we receive is \\"When is v1 going to be released?\\", as some consumers are weary of\\nusing a \\"beta\\" tool. We definitely understand, and as such, have posted a\\n[high-level overview](https://github.com/moonrepo/moon/issues/491) of what we\'re hoping to land\\nbefore we tag an official v1 release. It basically boils down to landing breaking changes (mainly\\naround configuration) before v1, so that we avoid bumping to a v2 or v3 unnecessarily. We also want\\nto land our [toolchain changes](#proto) and [remote caching](#moonbase) improvements before then.\\n\\nOur current timeframe is by end of Q1, if not, early Q2.\\n\\n## Launching moonbase\\n\\nWe haven\'t mentioned this name publicly yet, but now seems like the perfect time! For the past 6\\nmonths we\'ve been working a new web application and service called moonbase, which pairs nicely with\\nmoon, as it provides additional functionality that can only be achieved by persisting information\\nacross runs.\\n\\nTo start, this service provides [remote caching](/docs/guides/remote-cache), which we\'re already\\nusing in production. At this point in time, objects are stored in our moonrepo S3 buckets, but one\\nof our major goals is to support storing objects in your private buckets, supporting additional\\ncloud providers like Google Cloud and Azure, and in the long-term, a self-hosted / on-premises\\nsolution.\\n\\nBut that\'s not all! moonbase will integrate deeply with [continuous integration](/docs/guides/ci)\\npipelines to generate insights, capture metrics, and provide near real-time dashboards. Our goal is\\nto provide a holistic overview of your entire repository.\\n\\nmoonbase with publicly available remote caching is slated for end of Q1. CI integration is\\ntentatively slated for Q2. We have even more features that we\'ll reveal in the future, so stay\\ntuned!\\n\\n## Launching proto\\n\\nAnother tool we haven\'t mentioned yet is proto (name still in flux). proto is a standardized version\\nmanager for programming languages and dependency managers. We\'ve basically extracted our\\n[toolchain](/docs/concepts/toolchain) into a standalone library, as it\'s super beneficial for\\nprojects and developers not using moon. It provides all the functionality you\'d expect from a\\nversion manager:\\n\\n- Downloading and installing specific versions\\n- Automatic version detection\\n- Updating PATH with the applicable version\\n- Generating shims\\n- Pinning shell, local, and global versions\\n\\nSo how\'s this different from existing version managers like nvm or volta? To start, it\'s written in\\nRust so it\'s _fast_ and doesn\'t suffer from being Bash only. Because of this, it\'s also\\nmulti-platform and will work on Windows. But the biggest different is that proto is language\\nagnostic and will support multiple languages. To start, it supports Node.js and Deno, but will be\\nexpanded to support our other toolchain languages like Bun, PHP, Ruby, and Python. Another cool\\nfeature is that it also manages versions of dependency managers like npm, yarn, and pnpm!\\n\\nWe\'re planning to launch proto at the start of Q2.\\n\\n## Expanding language support\\n\\nOur initial goal for moon was to provide a first-class build system for the frontend ecosystem that\\nfocused heavily on automation and the developer experience. We believe we\'ve accomplished this goal,\\nbut of course, nothing is ever actually complete, and so JavaScript, TypeScript, and Node.js support\\nwill continually be improved.\\n\\nHowever, that\'s not the entirety of the frontend ecosystem, as [Deno](https://deno.land/) and\\n[Bun](https://bun.sh/) have been gaining traction this past year, and of course, moon will support\\nboth of them as first-class platforms by end of year.\\n\\nFuthermore, we recently landed tier 1 support for 5 new languages: Rust, Ruby, PHP, Python, and Go.\\nOur end of year goal for these languages is to provide full tier 2 support. Tier 3 support is still\\nan unknown, as we need to investigate the best possible way to integrate these languages into the\\ntoolchain (this work is ongoing). We\'ll also add new languages based on demand.\\n\\nWith all that being said, this is our tenative timeline around\\n[language support](/docs#supported-languages) (which may shift at any time):\\n\\n- **Q1**\\n - Tier 1 support for Bun.\\n - Tier 2 support for Deno.\\n- **Q2**\\n - Tier 2 support for Bun, PHP.\\n - Tier 3 support for Deno.\\n- **Q3**\\n - Tier 2 support for Ruby, Python.\\n - Tier 3 support for Bun.\\n- **Q4**\\n - Tier 2 support for Rust, Go.\\n\\n## Supporting release workflows\\n\\nmoon currently excels at organizing projects, running tasks, and building artifacts, but it has no\\nsupport for release workflows. This is everything from capturing changes, bumping versions,\\ngenerating changelogs, and publishing to upstream registries. If you use\\n[Lerna](https://github.com/lerna/lerna) or [changesets](https://github.com/changesets/changesets),\\nyou should be very familiar with this workflow.\\n\\nSince moon supports monorepos and has in-depth knowledge of the project graph, we can support\\nrelease workflows with ease. Our goal is to support this workflow (for all languages) from start to\\nfinish by end of year, ideally much sooner than that!\\n\\n## More repository management tooling\\n\\nThe other aspect of moon is that it\'s a repository management tool as well as a build system. We\\nwant to embrace this even further by providing explicit functionality or automation when applicable.\\nSome examples of this are in-repository secrets management, git hooks management, code ownership and\\nquality tooling, code review helpers, repository/configuration linting, a moon DSL, and much much\\nmore."},{"id":"v0.21","metadata":{"permalink":"/blog/v0.21","editUrl":"https://github.com/moonrepo/moon/tree/master/website/blog/2022-12-19_v0.21.mdx","source":"@site/blog/2022-12-19_v0.21.mdx","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","description":"Happy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered","date":"2022-12-19T00:00:00.000Z","formattedDate":"December 19, 2022","tags":[{"label":"runner","permalink":"/blog/tags/runner"},{"label":"language","permalink":"/blog/tags/language"},{"label":"platform","permalink":"/blog/tags/platform"},{"label":"cache","permalink":"/blog/tags/cache"},{"label":"graph","permalink":"/blog/tags/graph"}],"readingTime":4.255,"hasTruncateMarker":true,"authors":[{"name":"Miles Johnson","title":"Founder, developer","url":"https://github.com/milesj","imageURL":"/img/authors/miles.jpg","key":"milesj"}],"frontMatter":{"slug":"v0.21","title":"moon v0.21 - Tiered language support with initial Go, PHP, Python, Ruby, and Rust","authors":["milesj"],"tags":["runner","language","platform","cache","graph"],"image":"./img/v0.21.png"},"unlisted":false,"prevItem":{"title":"What\'s in store for 2023","permalink":"/blog/2023-roadmap"},"nextItem":{"title":"moon v0.20 - Toolchain, caching, and hydration improvements","permalink":"/blog/v0.20"}},"content":"import Label from \'@site/src/ui/typography/Label\';\\nimport Image from \'@site/src/components/Image\';\\n\\nHappy Holidays \ud83c\udf84\u2603\ufe0f! With our last release of the year, we\'re very excited to announce our tiered\\nlanguage support structure, which lays the foundation for turning moon into a multi-language build\\nsystem! On top of this, we\'ve worked heavily on bug fixing, optimizations, and overall quality of\\nlife improvements.\\n\\n\x3c!--truncate--\x3e\\n\\n## New tiered language support\\n\\nThe most common question we receive is whether we plan to support additional languages besides\\nNode.js, with Rust, Deno, and Bun being top of that list. Adding new languages is non-trivial, as we\\nneed to build abstractions that support and integrate with the language\'s ecosystem, primarily\\ndependency managers and resolution algorithms.\\n\\nThis is a very large upfront cost, with a huge time and resource commitment. To reduce this burden,\\nwe\'re introducing a tiered support structure, so that languages can be incrementally integrated into\\nmoon and adopted by consumers.\\n\\nThe tiers break down as follows:\\n\\n-