Git Product home page Git Product logo

invertase / melos Goto Github PK

View Code? Open in Web Editor NEW
1.0K 17.0 181.0 2.61 MB

๐ŸŒ‹ A tool for managing Dart projects with multiple packages. With IntelliJ and Vscode IDE support. Supports automated versioning, changelogs & publishing via Conventional Commits.

Home Page: https://melos.invertase.dev/~melos-latest

License: Apache License 2.0

Dart 99.99% Batchfile 0.01% Shell 0.01%
dart pubdev monorepo lerna flutter hacktoberfest

melos's Introduction

Melos

A tool for managing Dart projects with multiple packages, inspired by Lerna.

Melos docs.page Chat on Discord

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

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.
  • โšก 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:

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.

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

[![melos](https://img.shields.io/badge/maintained%20with-melos-f700ff.svg?style=flat-square)](https://github.com/invertase/melos)

License


Built and maintained with ๐Ÿ’› by Invertase.

ย ย Follow on Twitter

melos's People

Contributors

alex-sandri avatar almighty-alpaca avatar benvercammen avatar bhattabhi013 avatar blaugold avatar cabljac avatar ehesp avatar ekasetiawans avatar jessicatarra avatar jkoenig134 avatar jpnurmi avatar lcdsmao avatar lesnitsky avatar lohnn avatar mohiuddinm avatar mspb1g12 avatar nilsreichardt avatar pavel-sulimau avatar quijx avatar quirijngb avatar rafaelcmm avatar renancaraujo avatar rrousselgit avatar russellwheatley avatar ryanhanks avatar salakar avatar shyndman avatar spydon avatar victorohashi avatar xsahil03x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

melos's Issues

Failed to run melos commands

I am trying to run melos commands( e.g: melos bs ) in a project already configured with melos. It was working fine for few days and today suddenly I am getting following error:

Unhandled exception:
type 'String' is not a subtype of type 'YamlList' in type cast
#0      MelosWorkspaceConfig.packages (package:melos/src/common/workspace_config.dart:120:48)
#1      MelosWorkspace._loadPackages (package:melos/src/common/workspace.dart:103:33)
#2      MelosWorkspace.loadPackagesWithFilters (package:melos/src/common/workspace.dart:168:49)
#3      MelosCommandRunner.runCommand (package:melos/src/command_runner.dart:213:30)
<asynchronous suspension>

Support app + packages repository style

Our main App has grown quite significantly and some of the core components have moved into the packages folder.

This leaves us with the main app in / and supporting packages in /packages.

When configuring melos.yaml like so:

name: connect

packages:
  - .
  - packages/**

scripts:
  analyze: melos exec -- pub global run tuneup check

Then only the packages/* folders are taken into consideration & evaluated.
If I run pub global run tuneup check in the root folder, it works as expected though.

Is it feasible to support this kind of directory layout?

Question: Flutter key commands don't work

When I execute a flutter package with flutter run, the command inserted in the terminal doesn't work. The classic example for this is to use Hot reload inserting r. Exist some workaround?

start:
  run: melos exec -c 1 --scope="app" -- "flutter run"

Screen Shot 2021-04-07 at 23 33 07

Using the name key in melos same as a package name causes issues in bootstrap

In melos.yaml if the name key is same as one of the dependent package's name (e.g. amplify_flutter in this case), running melos bs throws an error as below.

> amplify-flutter % melos bootstrap                                        
melos bootstrap
   โ””> /Users/pravgupt/Workspaces/Flutter/amplify-fork/amplify-flutter

Bootstrapping project...               |Running "flutter pub get" in .melos_tool...                     




Error on line 71, column 3 of pubspec.yaml: A package may not list itself as a dependency.
   โ•ท
71 โ”‚   amplify_flutter: 
   โ”‚   ^^^^^^^^^^^^^^^
   โ•ต
pub get failed (65;    โ•ต)
 
Bootstrap failed, reason: pub get failed, see logs above.

The generated pubspec.yaml in .melos_tool dir is attached (file renamed to .txt) pubspec.txt

To reproduce, pull down this repo https://github.com/aws-amplify/amplify-flutter and branch amplify_core_refactor and change the name in melos.yaml and run melos bs

Support custom flutter sdk / dart sdk paths

I'm using flutter_wrapper in my projects and it's not possible to pass in a custom flutter sdk path. This causes bootstrap to fail because my project isn't compatible with the flutter version in $PATH.

This request is similar to #21 but more general as @orestesgaolin wrote #21 (comment)

Another idea is to allow to pass arbitrary path to Flutter installation. This way it wouldn't be tied to fvm only.

Suggestion

melos bootstrap --flutter-sdk=.flutter

The pubspec.yaml file has changed since the pubspec.lock file was generated

I'm trying to run the build runner for code generation, the first package succeeds but the other packages fail to run because the pubspec.yaml has changed since the pubspec.lock was generated. Both of those packages depend on the first one (not sure if that matters).

Bootstrap:

โžœ  flutter_json_schema_form git:(master) โœ— melos bootstrap           
melos bootstrap
   โ””> /home/rhalff/development/flutter_json_schema_form

Running "flutter pub get" in workspace packages...
  โœ“ fjsf_theme_material
     โ””> ./packages/fjsf-theme-material
  โœ“ fjsf
     โ””> ./packages/fjsf
  โœ“ flutter_json_schema_form_example
     โ””> ./packages/example

Linking workspace packages...
  > SUCCESS

Generating IntelliJ IDE files...
  > SUCCESS

 -> 3 plugins bootstrapped

Running build_runner in each package directory:

โžœ  flutter_json_schema_form git:(master) โœ— melos run generate:flutter
melos run generate:flutter
   โ””> melos exec -c 1 --depends-on="build_runner" --flutter -- "flutter pub run build_runner build --delete-conflicting-outputs"
       โ””> RUNNING

$ melos exec
   โ””> flutter pub run build_runner build --delete-conflicting-outputs
       โ””> RUNNING (in 3 packages)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
fjsf:
[INFO] Generating build script...
[INFO] Generating build script completed, took 319ms

[INFO] Initializing inputs
[INFO] Reading cached asset graph...
[INFO] Reading cached asset graph completed, took 74ms

[INFO] Checking for updates since last build...
[INFO] Checking for updates since last build completed, took 558ms

[INFO] Running build...
[INFO] Running build completed, took 19ms

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 53ms

[INFO] Succeeded after 80ms with 0 outputs (0 actions)

fjsf: SUCCESS

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
fjsf_theme_material:
The pubspec.yaml file has changed since the pubspec.lock file was generated, please run "pub get" again.
pub finished with exit code 65

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
flutter_json_schema_form_example:
The pubspec.yaml file has changed since the pubspec.lock file was generated, please run "pub get" again.
pub finished with exit code 65
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

$ melos exec
   โ””> flutter pub run build_runner build --delete-conflicting-outputs
       โ””> FAILED (in 2 packages)
           โ””> fjsf_theme_material (with exit code 65)
           โ””> flutter_json_schema_form_example (with exit code 65)

melos run generate:flutter
   โ””> melos exec -c 1 --depends-on="build_runner" --flutter -- "flutter pub run build_runner build --delete-conflicting-outputs"
       โ””> FAILED
โžœ  flutter_json_schem

Document package filtering flags

Docs needed for:

    --no-private                                 Exclude private packages (`publish_to: none`). They are included by default.
    --[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. This option can be repeated.
    --ignore=<glob>                              Exclude packages with names matching the given glob. This option can be repeated.
    --since=<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=<dependentPackageName>          Include only packages that depend on a specific package. This option can be repeated, to further filter the list of 
                                                 packages.
    --no-depends-on=<noDependantPackageName>     Include only packages that *don't* depend on a specific package. This option can be repeated.
    --[no-]include-dependents                    Include all transitive dependents for each package that matches the other filters. The included packages skip       
                                                 --ignore and --since checks.
    --[no-]include-dependencies                  Include all transitive dependencies for each package that matches the other filters. The included packages skip     
                                                 --ignore and --since checks.

Request: runConfigurations independent of melos installation option

melos generates idea run configurations only for global installation

String getMelosBinForIde() {
if (currentPlatform.isWindows) {
if (currentPlatform.script.path.contains('Roaming')) {
return r'$USER_HOME$/AppData/Roaming/Pub/Cache/bin/melos.bat';
}
return r'$USER_HOME$/AppData/Local/Pub/Cache/bin/melos.bat';
}
return r'$USER_HOME$/.pub-cache/bin/melos';
}

It's much safer to control dependencies in root pubspec.yaml

dev_dependencies:
  melos: ^0.4.11

but bootstrap generates melos specific runConfigurations as follows

    <option name="SCRIPT_PATH" value="$USER_HOME$/.pub-cache/bin/melos" />
    <option name="SCRIPT_OPTIONS" value="bootstrap" />

it could be changed to something like this to be independent of installation option

    <option name="SCRIPT_PATH" value="$PROJECT_DIR$/.fvm/flutter_sdk/bin/dart" />
<!--<option name="SCRIPT_PATH" value="<flutter-sdk-path>/bin/dart" />-->
    <option name="SCRIPT_OPTIONS" value="pub run melos bootstrap" />

I suppose it's linked to #81 since this requires proper flutter sdk path

'pub' errors during melos commands on Windows

I'm getting 'pub' related errors during melos command execution ('pub' command is missing), probably related to the direct usage of pub instead of dart pub or flutter pub. I found this PR (https://github.com/invertase/melos/pull/18/files) which should fix exactly this problem.

Flutter 1.27.0-1.0.pre โ€ข channel dev โ€ข https://github.com/flutter/flutter.git
Framework โ€ข revision 68c96f100e (9 days ago) โ€ข 2021-02-08 16:14:15 -0800
Engine โ€ข revision b04955656c
Tools โ€ข Dart 2.13.0 (build 2.13.0-0.0.dev)
Microsoft Windows [Version 10.0.19041.804]
melos 0.4.5
  • dart pub and flutter pub are working fine

Steps to reproduce

  • Execute any melos command (even the help command works)
  • See output (error can be found at the end. Sorry for the German error message. It just says that 'pub' isn't there, which is true, but dart pub and flutter pub should be used)
D:\Code\Flutter>melos
Your current directory does not appear to be a valid Melos workspace.

You must have one of the following to be a valid Melos workspace:
   - a "melos.yaml" file in the root with a "packages" option defined
   - a "packages" directory
Der Befehl "pub" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Is there something I'm missing during configuration / setup or is this a bug?

Feature: melos changed

Are there currently any plans to implement something like lerna changed?
It's something that I might need down the line and was wondering if it's something that has been scoped out and would be feasible in Melos.
Use case:
Multiple Flutter apps dependent on common packages. When a common package is changed i would only like to build the affected apps

Add filtering option to include example packages

I'm in a situation where I'd like to run build_runner in the packages that require it, and some of those packages live in example/ directories. It would be really great to be able to target them via an --include-example-packages option.

Error when executing melos command

Guys I have a problem, I've been running melos in a normal way in my project with modules, recently started to generate the following error, every time I run any command from melo

Unhandled exception:
NoSuchMethodError: The getter 'length' was called on null.
Receiver: null
Tried calling: length
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      StringScanner.isDone (package:string_scanner/src/string_scanner.dart:53:41)
#2      Parser._parseSequence (package:glob/src/parser.dart:38:18)
#3      Parser.parse (package:glob/src/parser.dart:30:27)
#4      new Glob (package:glob/glob.dart:108:44)
#5      MelosWorkspace.loadPackagesWithFilters.<anonymous closure>.<anonymous closure> (package:melos/src/common/workspace.dart:142:16)
#6      ListMixin.firstWhere (dart:collection/list.dart:161:15)
#7      MelosWorkspace.loadPackagesWithFilters.<anonymous closure> (package:melos/src/common/workspace.dart:141:46)
#8      _WhereStream._handleData (dart:async/stream_pipe.dart:193:24)
#9      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:157:13)
#10     _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
#11     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
#12     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
#13     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:127:11)
#14     _WhereStream._handleData (dart:async/stream_pipe.dart:199:12)
#15     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:157:13)
#16     _RootZone.runUnaryGuarded (dart:async/zone.dart:1384:10)
#17     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
#18     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
#19     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:808:19)
#20     _StreamController._add (dart:async/stream_controller.dart:682:7)
#21     _StreamController.add (dart:async/stream_controller.dart:624:5)
#22     _AsyncDirectoryLister.next.<anonymous closure> (dart:io/directory_impl.dart:383:26)
#23     _RootZone.runUnary (dart:async/zone.dart:1450:54)
#24     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#25     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#26     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#27     Future._completeWithValue (dart:async/future_impl.dart:529:5)
#28     Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
#29     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#30     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#31     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#32     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)

Package melos is currently active at version 0.4.1.

Documentation: building a local app pointing to local packages repo

Hi

I couldn't find in the docs the right way to build a local app pointing to the local packages of a melos monorepo.

Using flutterfire as an example, say I have an app named app1 with this pubspec.yaml:

app1/pubspec.yaml

...
dependencies:
  flutter:
    sdk: flutter
  firebase_core: 0.5.3
  firebase_auth: 0.18.4+1

But I've cloned flutterfire locally and I want to test some stuff in the app1 with the local code, so without melos I would do something like this:

...
dependencies:
  flutter:
    sdk: flutter
  firebase_core: 
    path: "../flutterfire/packages/firebase_core/firebase_core"
  firebase_auth: 
    path: "../flutterfire/packages/firebase_auth/firebase_auth" 

But that doesn't work. I tried bootstraping (melos bootstrap) in one, both repos (flutterfire and app1), but couldn't make it work.

Actually, is the manual path override necessary at all in app1?

I'm confident there must be a way, but I just couldn't find it in the docs and didn't manage to do it myself.

Thanks in advance

Make yes flag work for manual versioning

Currently, there's no way to short circuit the confirmation prompt when setting a version manually.

melos version some_package --no-changelog --yes 1.0.0

It would be nice to have this flag enabled when running in CI.

Should --depends-on include transitive dependents?

I'm noticing that only Melos only considers direct dependents with the --depends-on option, but it seems to me that the entire set of transitive dependents might be more useful (since it represents any package possibly impacted by a change).

Should --depends-on be changed to includes transitives?
Alternatively, if we wanted to avoid a breaking change, should a new option be added? --depends-on-transitive?

Feature: allow versioning private packages

Melos appears to be just what I was looking for to help with the release process for a couple of flutter apps that have a shared (private) package. I have been looking through the docs, examples, issues etc but I am unable to figure out if our current use-case is supported. Here is a melos.yaml config that I am hoping is supported but I can't seem to use the melos version command to bump and generate the app changelogs as I hoped:

name: MyMonoRepo
packages:
  - app_common/**  # shared common package (publish_to: none)
  - admin_app/**   # flutter admin app, depends on app_common (publish_to: none)
  - user_app/**    # flutter end-user app, depends on app_common (publish_to: none)
environment:
  sdk: ">=2.7.0 <3.0.0"
  flutter: ">=1.24.0-0.0.pre <1.25.0"

The result of my command line session yields:

โฏ melos list --all --scope="user_app"
user_app

โฏ melos version --scope="user_app"
melos version
   โ””> /Users/me/workspace/mymonorepo

No packages were found that required versioning.
Hint: try running "melos list" with the same filtering options to see a list of packages that were included.

I have tried all combinations I can think of using --all, --private, --no-published etc.

Is this a matter of misconfiguration, filesystem layout or something just not supported at this time?

Cannot (re-)bootstrap internationalized app packages

melos bootstrap tries to run flutter pub get in the synthetic package (.dart_tool/flutter_gen) of internationalized Flutter apps, which results to:

melos bootstrap
   โ””> /home/jpnurmi/Temp/melos_gen_l10n

Running "flutter pub get" in workspace packages...

------------------------------------------------------------------------------------------------------------
Running "flutter pub get" in flutter_gen...                     
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:
environment:
  sdk: '>=2.10.0 <3.0.0'
See https://dart.dev/go/sdk-constraint
pub get failed (65; See https://dart.dev/go/sdk-constraint)
โ€ข synthetic_package
    โ””> ./packages/gen_l10n_example/.dart_tool/flutter_gen
    โ””> Failed to run "flutter pub get" in this package.
------------------------------------------------------------------------------------------------------------

Bootstrap failed: "flutter pub get" failed in one of your workspace packages.
Detailed steps to reproduce the problem with gen_l10n_example from flutter/website
$ mkdir melos_gen_l10n
$ cd melos_gen_l10n/
$ cat <<EOT >> melos.yaml
name: melos_gen_l10n
packages:
  - packages/**
environment:
  sdk: ">=2.12.0 <3.0.0"
EOT
$ mkdir packages
$ git clone --depth=1 https://github.com/flutter/website.git
Cloning into 'website'...
remote: Enumerating objects: 2296, done.
remote: Counting objects: 100% (2296/2296), done.
remote: Compressing objects: 100% (1922/1922), done.
remote: Total 2296 (delta 199), reused 1838 (delta 165), pack-reused 0
Receiving objects: 100% (2296/2296), 251.46 MiB | 14.88 MiB/s, done.
Resolving deltas: 100% (199/199), done.
Updating files: 100% (2060/2060), done.
$ย cp -r website/examples/internationalization/gen_l10n_example packages/
$ย cd packages/gen_l10n_example
$ flutter pub get
Running "flutter pub get" in gen_l10n_example...
$ cat .dart_tool/flutter_gen/pubspec.yaml
# Generated by the flutter tool
name: synthetic_package
description: The Flutter application's synthetic package.
$ cd -
/home/jpnurmi/Temp/melos_gen_l10n
$ melos bootstrap
melos bootstrap
   โ””> /home/jpnurmi/Temp/melos_gen_l10n

Running "flutter pub get" in workspace packages...

--------------------------------------------------------------------------------
Running "flutter pub get" in flutter_gen...                     
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:
environment:
  sdk: '>=2.10.0 <3.0.0'
See https://dart.dev/go/sdk-constraint
pub get failed (65; See https://dart.dev/go/sdk-constraint)
โ€ข synthetic_package
    โ””> ./packages/gen_l10n_example/.dart_tool/flutter_gen
    โ””> Failed to run "flutter pub get" in this package.
--------------------------------------------------------------------------------

Bootstrap failed: "flutter pub get" failed in one of your workspace packages.
flutter doctor -v
$ flutter doctor -v
[โœ“] Flutter (Channel master, 2.3.0-1.0.pre.168, on Linux, locale en_DK.UTF-8)
    โ€ข Flutter version 2.3.0-1.0.pre.168 at /home/jpnurmi/Flutter
    โ€ข Upstream repository https://github.com/flutter/flutter.git
    โ€ข Framework revision 93242d7548 (7 days ago), 2021-04-28 19:19:05 -0700
    โ€ข Engine revision e7939e091e
    โ€ข Dart version 2.14.0 (build 2.14.0-48.0.dev)

[โœ“] Android toolchain - develop for Android devices (Android SDK version 30.0.1)
    โ€ข Android SDK at /home/jpnurmi/Android/sdk
    โ€ข Platform android-30, build-tools 30.0.1
    โ€ข ANDROID_SDK_ROOT = /home/jpnurmi/Android/sdk
    โ€ข Java binary at: /home/jpnurmi/Android/studio/jre/bin/java
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
    โ€ข All Android licenses accepted.

[โœ“] Chrome - develop for the web
    โ€ข Chrome at google-chrome

[โœ“] Linux toolchain - develop for Linux desktop
    โ€ข Debian clang version 11.0.1-2
    โ€ข cmake version 3.18.4
    โ€ข ninja version 1.10.1
    โ€ข pkg-config version 0.29.2

[โœ“] Android Studio (version 4.1)
    โ€ข Android Studio at /home/jpnurmi/Android/studio
    โ€ข Flutter plugin version 55.0.1
    โ€ข Dart plugin version 201.9335
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)

[โœ“] IntelliJ IDEA Ultimate Edition (version 2020.3)
    โ€ข IntelliJ at /home/jpnurmi/JetBrains/IntelliJIdea
    โ€ข Flutter plugin version 53.1.5
    โ€ข Dart plugin version 203.6912

[โœ“] VS Code (version 1.55.2)
    โ€ข VS Code at /usr/share/code
    โ€ข Flutter extension version 3.22.0

[โœ“] Connected device (2 available)
    โ€ข Linux (desktop) โ€ข linux  โ€ข linux-x64      โ€ข Linux
    โ€ข Chrome (web)    โ€ข chrome โ€ข web-javascript โ€ข Google Chrome 90.0.4430.93

โ€ข No issues found!

melos commands fail w/o melos.yaml

after executing any command I get this output:

Your current directory does not appear to be a valid workspace.
Does the "melos.yaml" file exist in the root?

Shouldn't init command create this file?

Request: Add --include-dependents filtering option

--depends-on is great, but what I'm finding in practice is that I often have to write the melos exec twice to do what I need.

For example, if I want to test all packages that might be affected by a change to some_package.

  1. melos exec --scope=some_package {testing_command}
  2. melos exec --depends-on=some_package {testing_command}

An --include-dependents option would mean that I could combine this into a single command.

Feature: versioning

Issue to discuss how versioning of packages and changelog generation should work / look.

Request: common dependencies

In some cases, we have common dependencies around some packages. For now, we have two workarounds:

  • Create a package common_dependencies and centralized the common dependencies here.
    [โœ—] The dependency is installed as a transitive dependency and we don't have IntelliSense.
    [โœ“] All common dependencies in a unique locale. This is easier to manipulate versions.
  • Install repeatedly dependencies in each package.
    [โœ—] Is difficult to manipulate the version, needs to change in many locales.
    [โœ“] We have the dependency as direct and so we have IntelliSense

Any know the workaround to solve this?

Attempt

I tried to use the following below but it doesn't work.

melos version: 0.4.10+1

# melos.yaml
dependencies:
  http: ^0.13.1

Suggestion:

When the melos copy pubspec.yaml and pubspec.lock, we could insert these dependencies on the specific packages.

# melos.yaml
dependencies:
  http: ^0.13.1
    scope: "package_one,package_two"

dev_dependencies:
  build_runner: ^1.12.2
    ignore: "package_one"

Formatting of pubspec.lock breaks compatibility with pub

I'm trying to run flutter pub run build_runner build in one of the packages, but get this error:

Cannot parse an empty string.
package:pub_semver/src/version_constraint.dart 159:7                                new VersionConstraint.parse
package:pub/src/entrypoint.dart 518:48                                              Entrypoint.assertUpToDate
package:pub/src/entrypoint.dart 111:5                                               Entrypoint.packageGraph
package:pub/src/executable.dart 87:19                                               runExecutable
package:pub/src/command/run.dart 92:26                                              RunCommand.runProtected
dart:async                                                                          new Future.sync
package:pub/src/utils.dart 113:12                                                   captureErrors.wrappedCallback
dart:async                                                                          runZonedGuarded
package:pub/src/utils.dart 130:5                                                    captureErrors
package:pub/src/command.dart 146:13                                                 PubCommand.run
package:args/command_runner.dart 197:27                                             CommandRunner.runCommand
package:pub/src/command_runner.dart 147:24                                          PubCommandRunner.runCommand
package:pub/src/command_runner.dart 136:18                                          PubCommandRunner.run
/b/s/w/ir/cache/builder/src/third_party/dart/third_party/pkg/pub/bin/pub.dart 9:48  main
This is an unexpected error. Please run

    pub --trace pub run build_runner build --delete-conflicting-outputs

and include the logs in an issue on https://github.com/dart-lang/pub/issues/new
pub finished with exit code 65

Investigating this issue, I found that pub does not fully parse the lock file as a yaml file. Instead, it uses a regex to find sdk constraints for frameworks, such as dart and flutter. This regex also matches part of the package declaration for the flutter package, after pubspec.lock has been written by melos:

  flutter: 
    dependency: "transitive"
    description: "flutter"
    source: "sdk"
    version: "0.0.0"

When the lock file is written by pub, the line with the package name terminates right after :, whereas when written by melos
there is a space after :, which allows the regex to match, but with an empty version string.

To solve this issue, either the regex needs to be more strict (don't mach an empty version) or the code which prints the yaml doc needs to stop writing out the extra white space.

Failed assertion: boolean expression must not be null

When we use a git reference we got the following error :

Failed assertion: boolean expression must not be null
#0      PubspecLockPubFile.fromWorkspacePackage.<anonymous closure> (package:melos/src/pub/pub_file_pubspec_lock.dart:80:13)
#1      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
#2      PubspecLockPubFile.fromWorkspacePackage (package:melos/src/pub/pub_file_pubspec_lock.dart:67:23)
<asynchronous suspension>
#3      MelosPackage.linkPackages (package:melos/src/common/package.dart:208:26)
#4      MelosWorkspace.linkPackages.<anonymous closure> (package:melos/src/common/workspace.dart:269:22)
#5      Future.forEach.<anonymous closure> (dart:async/future.dart:494:26)
#6      Future.doWhile.<anonymous closure> (dart:async/future.dart:536:26)
#7      _RootZone.runUnaryGuarded (dart:async/zone.dart:1374:10)
#8      _RootZone.bindUnaryCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1413:26)
#9      _RootZone.runUnary (dart:async/zone.dart:1439:54)
#10     _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
#11     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
#12     Future._propagateToListeners (dart:async/future_impl.dart:711:32)
#13     Future._completeWithValue (dart:async/future_impl.dart:526:5)
#14     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
#15     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
#16     MelosPackage.linkPackages (package:melos/src/common/package.dart)
#17     _RootZone.runUnary (dart:async/zone.dart:1439:54)
#18     _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
#19     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
#20     Future._propagateToListeners (dart:async/future_impl.dart:711:32)
#21     Future._complete (dart:async/future_impl.dart:516:7)
#22     Future.doWhile.<anonymous closure> (dart:async/future.dart:549:18)
#23     _RootZone.runUnaryGuarded (dart:async/zone.dart:1374:10)
#24     _RootZone.bindUnaryCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1413:26)
#25     _RootZone.runUnary (dart:async/zone.dart:1439:54)
#26     _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
#27     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
#28     Future._propagateToListeners (dart:async/future_impl.dart:711:32)
#29     Future._completeWithValue (dart:async/future_impl.dart:526:5)
#30     Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:556:7)
#31     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
#32     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
#33     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#34     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)

Document environment variables

Docs need doing for the currently supported environment variables automatically injected by the exec command:

Defined by Melos

  • MELOS_ROOT_PATH
    • The path to the mono repo root.
  • MELOS_PACKAGE_NAME
    • The name of the package thats currently executing a script (when using melos exec).
  • MELOS_PACKAGE_VERSION
    • The version of the package thats currently executing a script (when using melos exec).
  • MELOS_PACKAGE_PATH
    • The path of the package thats currently executing a script (when using melos exec).
  • MELOS_PARENT_PACKAGE_NAME
    • The name of the parent package of the current package thats currently executing a script (when using melos exec).
  • MELOS_PARENT_PACKAGE_VERSION
    • The version of the parent package of the current package thats currently executing a script (when using melos exec).
  • MELOS_PARENT_PACKAGE_PATH
    • The path of the parent package of the current package thats currently executing a script (when using melos exec).

These variables are available as environment variables in scripts run by melos exec. They can also automatically replaced/injected on melos exec commands e.g. melos exec --file-exists="./test_driver/MELOS_PARENT_PACKAGE_NAME_e2e.dart" --scope="*example*" -- echo hello

What is a 'parent package'?

If a package exists in a directory that is also a child of another package, then its parent is the 'parent package'. For example; the package firebase_auth has an example directory that is also a package, when running a melos exec script in the example package then the parent package would be firebase_auth.

User defined

  • MELOS_PACKAGES
    • Define a comma delimited list of package names that Melos should focus on. This bypasses all filtering flags if defined.

Documentation: IDE Support

Just capturing screenshots here for showing IDE support for docs later;

IntelliJ (Running on Flutter Plugins repository):
image

Vscode (Running on FlutterFire repository):
image

melos exec hang

when i run melos exec -c=1 -- flutter pub run build_runner build --delete-conflicting-outputs it hang after the completion of the first package.

from what i have debug it seems await processStdoutCompleter.future line 218 never complete but i didn't understand why for now :/

EDIT: After more investigation it seems the exit command pushed in stdin after the command is eat by the running program.

EDIT2: Also i'm not sure why you are starting a shell yourself since the runInShell parameter on Process.start already do it for you ?

Run `melos bootstrap` fails when using `PUB_HOSTED_URL`

Hi Team,

I encountered the issue when run melos bootstrap, see details below.

Result of flutter doctor:

flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[โœ“] Flutter (Channel unknown, 1.22.6, on macOS 11.0.1 20B50 darwin-x64, locale en)
 
[โœ“] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[โœ“] Xcode - develop for iOS and macOS (Xcode 12.3)
[โœ“] Android Studio (version 4.1)
[โœ“] VS Code (version 1.54.3)
[โœ“] Connected device (3 available)

โ€ข No issues found!

Logs:

$ melos bootstrap
melos bootstrap
   โ””> /Users/USER_ID/...project_folder/my_project

Running "flutter pub get" in workspace packages...
  โœ“ x4
     โ””> ./packages/x4
  โœ“ x4
     โ””> ./packages/x4
  โœ“ x3
     โ””> ./packages/x3
  โœ“ x2
     โ””> ./packages/x2
  โœ“ x1
     โ””> ./packages/x1

Linking workspace packages...
  > SUCCESS

Generating IntelliJ IDE files...
Unhandled exception:
FileSystemException: Cannot open file, path = '/Users/USER_ID/.pub-cache/hosted/pub.dartlang.org/melos-0.4.7/templates/intellij/modules/flutter_plugin_module.iml.tmpl' (OS Error: No such file or directory, errno = 2)
#0      _File.open.<anonymous closure> (dart:io/file_impl.dart:356:9)
#1      _RootZone.runUnary (dart:async/zone.dart:1450:54)
#2      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#3      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#4      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#5      Future._completeWithValue (dart:async/future_impl.dart:529:5)
#6      Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
#7      _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#8      _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#9      _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#10     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)

Is this issue related to customizing the variable PUB_HOSTED_URL?

Thanks for investigated.

Feature: Manually set version

It would be nice to be able to manage versions manually. The lerna version command supports the following actions:

lerna version 1.0.1 # set version explicitly to 1.0.1
lerna version patch # set version according to semver keyword (major, minor, patch, breaking)

[Feature Request] Add support for FVM switching in run task

For anyone unfamiliar, fvm is flutter version manager (similar to nvm for node, or rvm for ruby) which allows for hot switching between flutter channels in declarative way and does some caching to make it faster

I anticipate this would be beyond the scope of melos, but it could be really cool if you could specify the environment/flutter channel you want to run a particular script in to allow you to build web on beta, mac on dev, and ios/andriod on stable if that's what you wanted.

I'd imagine it would work as a bit of a push/pop scope sort of thing for each command doing nothing if not provided. If this is something that would be likely to be merged in here I may take a swing at it just wanted to get some feedback before putting the time in

Best

Kieran

Support fvm

Could this project support fvm?

At the moment, given a melos.yaml like this:

name: connect

packages:
  - packages/**

scripts:
  analyze: melos exec -- pub global run tuneup check
  postbootstrap: tuneup --version || pub global activate tuneup
  postclean: melos exec -- rm -rf ./build ./android/.gradle ./ios/.symlinks ./ios/Pods ./android/.idea ./.idea

executing fvm flutter pub global run melos bootstrap stops with:

$ fvm flutter pub global run melos bootstrap
FVM: Running version 1.20.4
$ melos bootstrap
   โ””> /Users/ened/git/com.company.app

Bootstrapping project...
/bin/sh: line 1: flutter: command not found
Bootstrap failed, reason: pub get failed, see logs above.
pub finished with exit code 1

`melos bootstrap` fail when using flutter master

When using flutter on master channel, running melos bootstrap results below error message:

ychris-macpro:melos_test ychris$ melos bootstrap --ignore="*example*"
melos bootstrap
   โ””> /Users/ychris/flutter/melos_test

Bootstrapping project...               /Running "flutter pub get" in .melos_tool...                     






pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '>=2.10.0 <3.0.0'

See https://dart.dev/go/sdk-constraint
pub get failed (65; See https://dart.dev/go/sdk-constraint)
 
Bootstrap failed, reason: pub get failed, see logs above.

It looks like the melos_tool.yaml is missing an environment constraint, which is required by the latest pub.

Feature request: Configurable commit messages

Hello there,

This would be a helpful feature for me. Are you open to contributions?

I would likely approach this similarly to Lerna's approach โ€” a configurable message field somewhere in melos.yaml, probably associated with the command.

Thanks!

Command `melos bootstrap` breaking on github actions on 0.3.12

Command melos bootstrap is breaking on github actions since this new version.

Please check the following logs:

melos bootstrap
   โ””> /Users/rafaelcmm/Workspace/qwkin-dart

Bootstrapping project...               SUCCESS
Linking project packages...            SUCCESS
Running postbootstrap script...

melos run postbootstrap
   โ””> tuneup --version || pub global activate tuneup
       โ””> RUNNING

tuneup version 0.3.7

melos run postbootstrap
   โ””> tuneup --version || pub global activate tuneup
       โ””> SUCCESS

Packages:
Unhandled exception:
NoSuchMethodError: The method 'forEach' was called on null.
Receiver: null
Tried calling: forEach(Closure: (MelosPackage) => Null)
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      BootstrapCommand.run (package:melos/src/command/bootstrap.dart:89:31)
<asynchronous suspension>
#2      CommandRunner.runCommand (package:args/command_runner.dart:197:27)
#3      MelosCommandRunner.runCommand (package:melos/src/command_runner.dart:170:17)
<asynchronous suspension>
#4      CommandRunner.run.<anonymous closure> (package:args/command_runner.dart:112:25)
#5      new Future.sync (dart:async/future.dart:224:31)
#6      CommandRunner.run (package:args/command_runner.dart:112:14)
#7      main (file:///Users/rafaelcmm/.pub-cache/hosted/pub.dartlang.org/melos-0.3.12/bin/melos.dart:4:31)
#8      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:32)
#9      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

All packages are being installed correctly and assigned to path.

Bootstrap changing pubspec.lock

Currently when run melos bs the pubspec.lock files are changed. Apparently is the same as the execute flutter pub upgrade for all packages. This potentially causes a different version of some dependencies, I need to ensure that everyone working on the project uses the exact same versions.

Suggestion:
Create a flag to don't upgrade and persist the actual pubspec.lock files.

melos bs --dont-upgrade

Alternative:
Exist a better alternative? I am using the approach below, but this doesn't respect the dependency hierarchy.

# melos.yaml
scripts:
  install:
    run: melos exec -c 1 flutter packages get
    description: Install all dependencies.

Reference: https://dart.dev/guides/libraries/private-files#pubspeclock

Pubspecs overwritten with generated pubspecs on windows

I'm unsure whether this behaviour is intended, but the way melos bootstrap behaves differs between e.g. Linux and Windows.
On Linux, the pubspecs are seemingly not touched, and on Windows they are overwritten with generated pubspecs.
Those generated pubspecs are not restored with melos clean either.

Request: Being able to run `melos` from a directory nested inside the workspace.

Currently you can only run melos from the root of your workspace. It'd be nice if melos is smart enough to go go up the file tree and find the root of the workspace itself, e.g. if I cd into a package I can still run melos from there;

cd packages/a
melos <command>

Currently Melos checks CWD only for existence of a melos.yaml or a default 'melos-like' workspace structure (a packages dir exists in CWD).

There's been so many times I've ran melos from a package directory by mistake ๐Ÿ™ˆ

Melos should fail if a package does not have a "sdk" version constraint

Consider the following pubspec.yaml:

name: example

Running pub get on this yaml file will result in:

pubspec.yaml has no lower-bound SDK constraint.                         
You should edit pubspec.yaml to contain an SDK constraint:              
                                                                        
environment:                                                            
  sdk: '>=2.10.0 <3.0.0'                                                
                                                                        
See https://dart.dev/go/sdk-constraint                                  
Running "flutter pub get" in example...                                 
pub get failed (65; See https://dart.dev/go/sdk-constraint)

On the other hand, when using melos boostrap, it is possible for this error to not appear (possibly when using 2+ packages, including one that has proper SDK constraints).

This can be cause confusion, as it swallows errors.

is it possible to run test cases for changed packages?

I have my flutter project in git. I want to run only those module's tests which are changed or not pushed to git. I wanna do that in a pre-push git hook. coz running all tests every push can be really slow. Is it possible?

Auto-complete doesn't work in IntelIj

Hey @Salakar
After I integrated melos into my project. Auto-complete has stopped working in IntelIj. I tried "Invalid cache & restart", checked Dart SDK path is configured properly or not. But still no luck.

When not specifying a melos.yaml, master channel causes a "pubspec.yaml has no lower-bound SDK constraint."

Related to #26

When no melos.yaml is specified, running melos bootstrap can throw:

pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '>=2.10.0 <3.0.0'

See https://dart.dev/go/sdk-constraint
pub get failed (65; See https://dart.dev/go/sdk-constraint)
 
Bootstrap failed, reason: pub get failed, see logs above.

when using the master channel of Flutter.

Here's a project to reproduce this exception:

https://github.com/rrousselGit/ci/tree/366796889f59fbb07fa45cf790f067e675e3f4de

Make sure to use the master channel.

melos version (feature request)

As a maintainer of a monorepo I'd like to have a possibility to bump package versions with help of melos tool. Please let me know if that's in scope of the responsibilities of melos

Request: Run melos publish in CI

Currently there is no way to run melos publish in CI environment since there is no flag to skip the prompt. It should support something similar to what is currently being supported by the version command

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.