Last updated:
0 purchases
melos
A tool for managing Dart projects with multiple packages, inspired by Lerna.
Documentation •
License
About #
Splitting up large code bases into separate independently versioned packages is
extremely useful for code sharing. However, making changes across many
repositories is messy and difficult to track, and testing across repositories
gets complicated really fast.
To solve these (and many other) problems, some projects will organize their code
bases into multi-package repositories (sometimes called
monorepos)
Melos is a tool that optimizes the workflow around managing multi-package
repositories with git and Pub.
What does a Melos workspace look like? #
A default file structure looks something like this:
my-melos-repo/
melos.yaml
packages/
package-1/
pubspec.yaml
package-2/
pubspec.yaml
copied to clipboard
The location of your packages can be configured via the melos.yaml
configuration file if the default is unsuitable.
What can Melos do? #
🔗 Link local packages in your workspace together without adding dependency
overrides.
📦 Automatically version, create changelogs and publish your packages using
Conventional Commits.
📜 Pre-define advanced custom scripts for your workspace in your melos.yaml
configuration to use via melos run [scriptName]. Anyone contributing to your
workspace can just run melos run to be prompted to select a script from a
list with descriptions of each script.
Scripts can even
prompt to select a package
to run against with pre-defined filters.
⚡ Execute commands across your packages easily with
melos exec -- <command here> with additional concurrency and fail-fast
options.
Environment variables
containing various information about the current package and the workspace
are available in each execution.
Can be combined with all package filters.
🎯 Many advanced package filtering options allowing you to target specific
packages or groups of packages in your workspace.
--no-private
Exclude private packages (publish_to: none).
--[no-]published
Filter packages where the current local package version exists on pub.dev.
Or "-no-published" to filter packages that have not had their current
version published yet.
--[no-]nullsafety
Filter packages where the current local version uses a "nullsafety"
prerelease preid. Or "-no-nullsafety" to filter packages where their
current version does not have a "nullsafety" preid.
--[no-]flutter
Filter packages where the package depends on the Flutter SDK. Or
"-no-flutter" to filter packages that do not depend on the Flutter SDK.
--scope=<glob>
Include only packages with names matching the given glob.
--ignore=<glob>
Exclude packages with names matching the given glob.
--diff=<ref>
Only include packages that have been changed since the specified ref,
e.g. a commit sha or git tag.
--dir-exists=<dirRelativeToPackageRoot>
Include only packages where a specific directory exists inside the
package.
--file-exists=<fileRelativeToPackageRoot>
Include only packages where a specific file exists in the package.
--depends-on=<dependantPackageName>
Include only packages that depend on a specific package.
--no-depends-on=<noDependantPackageName>
Include only packages that don't depend on a specific package.
--include-dependencies
Expands the filtered list of packages to include those packages'
transitive dependencies (ignoring filters).
--include-dependents
Expands the filtered list of packages to include those packages'
transitive dependents (ignoring filters).
♨️ Advanced support for IntelliJ IDEs with automatic creation of
run configurations for workspace defined scripts and more
on workspace bootstrap.
Integration with VS Code through an extension.
Getting Started #
Go to the
Getting Started
page of the documentation to start
using Melos.
Who is using Melos? #
The following projects are using Melos:
firebase/flutterfire
Flame-Engine/Flame
fluttercommunity/plus_plugins
GetStream/stream-chat-flutter
4itworks/opensource_qwkin_dart
gql-dart/ferry
cbl-dart/cbl-dart
ema987/paddinger
flutter-stripe/flutter_stripe
danvick/flutter_form_builder
kmartins/groveman
flutternetwork/WiFiFlutter
iapicca/yak_packages
atsign-foundation/at_app
sub6resources/flutter_html
ferraridamiano/ConverterNOW
rrifafauzikomara/youtube_video
mobxjs/mobx.dart
NetGlade/auto_mappr
myConsciousness/atproto.dart
GrowERP Flutter ERP
mrverdant13/coverde
ThexXTURBOXx/flutter_web_auth_2
woltapp/wolt_modal_sheet
cfug/dio
simolus3/drift
Lyokone/flutterlocation
FlutterGen/flutter_gen
canonical/ubuntu-desktop-provision
ubuntu/app-center
jhomlala/alice
Submit a PR if you'd like to add your project to the list. Update the
README.md
and the docs.
You can also add a README badge to your projects README to
let others know about Melos 💙.
Documentation #
Documentation is available at
https://melos.invertase.dev.
Migrations #
When migrating between major versions of Melos, please read the
migration guide.
Commands #
Full commands list and args can be viewed by running melos --help.
> melos --help
A CLI tool for managing Dart & Flutter projects with multiple packages.
Usage: melos <command> [arguments]
Global options:
-h, --help Print this usage information.
--verbose Enable verbose logging.
--sdk-path Path to the Dart/Flutter SDK that should be used. This command line option has
precedence over the `sdkPath` option in the `melos.yaml` configuration file and the
`MELOS_SDK_PATH` environment variable. To use the system-wide SDK, provide the
special value "auto".
Available commands:
analyze Analyzes all packages in your project for potential issues in a single run. Optionally
configure severity levels. Supports all package filtering options.
bootstrap Initialize the workspace, link local packages together and install remaining package
dependencies. Supports all package filtering options.
clean Clean this workspace and all packages. This deletes the temporary pub & ide files such
as ".packages" & ".flutter-plugins". Supports all package filtering options.
exec Execute an arbitrary command in each package. Supports all package filtering options.
format Idiomatically format Dart source code.
list List local packages in various output formats. Supports all package filtering options.
publish Publish any unpublished packages or package versions in your repository to pub.dev. Dry
run is on by default.
run Run a script by name defined in the workspace melos.yaml config file.
version Automatically version and generate changelogs based on the Conventional Commits
specification. Supports all package filtering options.
Run "melos help <command>" for more information about a command.
copied to clipboard
How to Contribute #
To start making contributions please refer to
CONTRIBUTING.md.
Lerna #
This project is heavily inspired by Lerna.
README Badge #
Using Melos? Add a README badge to show it off:
[![melos](https://img.shields.io/badge/maintained%20with-melos-f700ff.svg?style=flat-square)](https://github.com/invertase/melos)
copied to clipboard
License #
See LICENSE
Built and maintained with 💛 by Invertase.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.