- mise ने नया मोनोरेपो Task फीचर घोषित किया
- यह कई प्रोजेक्ट्स में अलग-अलग environment, tools और tasks को आसानी से मैनेज करने के लिए एक unified task namespace प्रदान करता है
- इसमें शक्तिशाली wildcard patterns, environment/tool inheritance, और consistent execution context जैसी कई सुविधाएँ शामिल हैं
- यह अलग-अलग भाषाओं या जटिल environments वाले monorepo के लिए सरलता और flexibility प्रदान करता है
- Bazel, Turborepo आदि की तुलना में language agnostic design, आसान configuration, और unified management इसकी प्रमुख ताकत हैं
परिचय: मोनोरेपो Task फीचर की घोषणा
- mise ने Monorepo Tasks नाम का एक नया फीचर पेश किया
- यह कई प्रोजेक्ट्स वाले repository में हर प्रोजेक्ट के tools, environment variables, और tasks को स्वतंत्र रूप से बनाए रखते हुए कुशलतापूर्वक मैनेज करने के लिए first-class monorepo support देता है
मुख्य फीचर्स
- Unified task namespace: monorepo के भीतर सभी tasks को अपने-आप खोजता है और location के आधार पर prefix लगाकर उन्हें स्पष्ट रूप से अलग करता है
उदाहरण:
mise //projects/frontend:build
mise //services/api:deploy
- स्मार्ट tool और environment inheritance: root में common tools define करें, और जरूरत पड़ने पर subprojects में उन्हें override करें
- उदाहरण: root
mise.toml का node=20, python=3.12 सेटअप सभी subprojects में अपने-आप inherit हो जाता है
- किसी खास project (
mise.toml) में node=14 से override किया जा सकता है, जबकि ऊपर का python setting inherited बना रहता है
- शक्तिशाली wildcard patterns:
- सभी projects के tests चलाना:
mise //...:test
services/ के नीचे सभी builds चलाना: mise //services/...:build
frontend के भीतर सभी tasks चलाना: mise '//projects/frontend:*'
- task name के आधार पर group execution भी संभव
- हर जगह consistent execution: आप task कहीं से भी चलाएँ, वह उसी task के
config_root में defined environment और tools के साथ ही चलता है
- स्वचालित trust propagation: सिर्फ monorepo root को Trust के रूप में register करने पर नीचे के configs अपने-आप trusted हो जाते हैं
Quick Start गाइड
- root
mise.toml में experimental_monorepo_root=true सेट करें
- experimental flag (
MISE_EXPERIMENTAL=1) सक्रिय करें
- हर project के
mise.toml में tasks जोड़ें
- उदाहरण:
[tasks.build]
run = "npm run build"
- root या किसी भी path से मनचाहा task चलाएँ
mise //projects/frontend:build
mise //...:test
उदाहरण monorepo संरचना
myproject/
├── mise.toml (experimental_monorepo_root = true)
├── services/
│ ├── api/mise.toml
│ ├── worker/mise.toml
│ └── scheduler/mise.toml
└── apps/
├── web/mise.toml
└── mobile/mise.toml
- सभी services के builds चलाना:
mise //services/...:build
- सभी apps के tests चलाना:
mise //apps/...:test
- सभी tasks:
mise '//...:*'
पृष्ठभूमि और प्रभाव
- इसकी शुरुआत monorepo management की जटिलता और बार-बार लिखे जाने वाले scripts की समस्या से हुई
- once define, anywhere run के जरिए duplication को न्यूनतम करता है
- हर project पर सही tools/environment अपने-आप लागू होते हैं
- शक्तिशाली wildcards से CI/CD pipelines सरल हो जाती हैं
- task namespace से navigation और समझ बेहतर होती है
मौजूदा प्रमुख tools से तुलना
-
Simple Task Runners (Taskfile, Just आदि)
- single-project automation के लिए optimized, लेकिन monorepo में unified namespace, inheritance, wildcard support नहीं
- mise automatic task discovery और शक्तिशाली pattern support देता है
-
JavaScript-केंद्रित tools (Nx, Turborepo, Lerna)
- JS/TS monorepo में शक्तिशाली (dependency graph, codegen, cache आदि)
- mise language agnostic है, कई भाषाओं/stacks को support करता है, और unified tool/environment variable management देता है
-
बड़े build systems (Bazel, Buck2)
- distributed cache, remote execution जैसी सुविधाएँ देते हैं, लेकिन complexity और learning curve अधिक है, साथ ही संरचनात्मक सीमाएँ भी हैं
- mise non-hermetic approach अपनाता है, जिससे flexible configuration और आसान adoption संभव है
-
अन्य (Rush, Moon आदि)
Rush: JS-only build orchestration
Moon: Rust-आधारित, multi-language support की दिशा में
mise Monorepo Tasks की खासियत
| फीचर |
Simple Runners |
JS विशेषज्ञ |
Build Systems |
mise |
| Multi-language support |
✅ |
❌ |
✅ |
✅ |
| सीखने में आसान |
✅ |
⚠️ |
❌ |
✅ |
| Unified task discovery |
❌ |
✅ |
✅ |
✅ |
| Wildcard patterns |
❌ |
⚠️ |
✅ |
✅ |
| Tool version management |
❌ |
❌ |
⚠️ |
✅ |
| Environment inheritance |
❌ |
⚠️ |
❌ |
✅ |
| Minimal configuration |
✅ |
⚠️ |
❌ |
✅ |
| Task caching |
❌ |
✅ |
✅ |
❌ |
- Mise कब चुनना चाहिए?
- mixed-language monorepo
- unified tool और task management
- जब आप सरलता पसंद करते हों
- mise का अनुभव रखने वालों के लिए उपयुक्त
- दूसरे विकल्प कब सोचने चाहिए
- सिर्फ JS/TS पर फोकस →
Nx, Turborepo
- बहुत बड़े enterprise स्तर पर (Google/Meta आदि) →
Bazel, Buck2
- advanced task caching चाहिए →
Nx, Turborepo, Bazel
निष्कर्ष
- mise का Monorepo Tasks फीचर किसी एक भाषा तक सीमित नहीं है, बल्कि अलग-अलग language environments वाले जटिल monorepo को आसानी और consistency के साथ मैनेज करने के लिए डिज़ाइन किया गया है
- minimal configuration और शक्तिशाली task patterns के साथ यह developer productivity और experience दोनों को बेहतर बनाता है
- जटिल enterprise solutions की तुलना में यह कहीं अधिक सरल और flexible है
2 टिप्पणियां
Mise - बहुभाषी (Polyglot) वर्ज़न मैनेजर
Mise: डेवलपमेंट टूल्स, environment variables, टास्क रनर
Hacker News की राय
पहले जब मैं ज़्यादातर Python इस्तेमाल करता था, तब मुझे Mise की खास अहमियत महसूस नहीं होती थी, मुझे लगता था कि uv काफी है
लेकिन जब Node की तरह हर directory के हिसाब से version मिलाने हों, और language या project type से अलग
mise buildयाmise testजैसे common entrypoint चाहिए हों, तब Mise की असली ताकत समझ में आईJust भी task runner के तौर पर मुझे बहुत पसंद है, और इसकी वजह से मैं Make से बाहर निकल पाया
Make शक्तिशाली है, लेकिन developer experience के मामले में कुछ कमी लगती थी
Just, Mise के task feature से functional रूप से ज्यादा ताकतवर हो सकता है, लेकिन मेरे लिए ठीक-ठाक task feature और बेहतरीन tool management का साथ होना Mise को सबसे अच्छा combo बनाता है
एक simple Makefile पसंद करने वाले के रूप में मेरी जिज्ञासा है कि Make से Just होते हुए Mise पर जाने में आपको क्या फायदे मिले
मुझे just बहुत पसंद था, लेकिन just task में सही environment setup करना झंझट भरा था, और virtual environment लोड करना भी परेशान करता था
इसलिए मैंने भी लगभग इसी वजह से mise पर switch किया
मुझे mise से बहुत बड़ी उम्मीदें हैं
हर नए project की शुरुआत में यह बहुत जल्दी एक जरूरी tool बन गया है
एक ही config file से node, python, rust, go जैसे कई tools manage करना और साथ में आसानी से इस्तेमाल होने वाला makefile replacement मिल जाना बहुत सुविधाजनक है
आम तौर पर मैं
postinstallhook सेट करता हूँ, ताकि जब कोई मेरा project ले, तो सिर्फmise installचलाने से सही tool versions और dependency packages तक अपने-आप install हो जाएँ, जो वाकई बहुत आसान बनाता हैजहाँ nix का entry barrier ऊँचा लगता है, वहीं mise कहीं ज्यादा practical है
अगर Nix का तरीका भारी लगे, तो devenv.sh जैसा tool accessibility को काफी बढ़ा देता है
उदाहरण के लिए
languages.rust.enable = trueसे तुरंत rust development environment सेट किया जा सकता हैइसके अलावा scripts, tasks और packages भी जोड़े जा सकते हैं
क्या आप एक example config साझा कर सकते हैं
बात काफ़ी दिलचस्प लगी
monorepo project में मैं just और docker(-compose) इस्तेमाल करता रहा हूँ, और moon & proto का छोटा-सा प्रयोग कुछ खास अच्छा नहीं लगा
just की simplicity अच्छी है, लेकिन कई platforms पर नए members को onboard कराना अब भी झंझट भरा है
मैंने भी mise से एक नया project setup किया
नए लोगों के लिए बिना manual steps के कहीं ज्यादा आसानी से शुरू करना संभव हो गया, इसलिए यह सच में शानदार है
mise में
postinstallhook इस्तेमाल करने की बात दिलचस्प लगीआम तौर पर आप उसमें क्या डालते हैं, यह जानना चाहूँगा
यह कि task cache support नहीं है, काफी बड़ी कमी लगती है
जब task graph में dependencies हों, तो जो tasks पहले ही पूरे हो चुके हों उन्हें दोबारा चलाने के बजाय cache से संभाला जाना चाहिए, ताकि repeated runs efficient रहें, खासकर medium-sized monorepo में यह महत्वपूर्ण है
मैंने देखा कि इस feature की कोई योजना है या नहीं, लेकिन Mise repository में issue disabled थे, और README में भी इसका उल्लेख नहीं था, इसलिए भरोसा कम लगा
अगर आप single-language npm monorepo इस्तेमाल कर रहे हैं, तो मैं Wireit की सिफारिश करूँगा
Wireit npm scripts में dependencies, local/GitHub Actions cache features, और लंबे समय तक चलने वाले service-type tasks जोड़ता है
Wireit GitHub
Mise भी Make जैसी tasks के लिए local cache support करता है
sourcesऔरoutputsspecify करने पर यह संभव है, और इसे mise task configuration guide में देखा जा सकता हैसिर्फ
sourcesspecify करने पर भी source changes अपने-आप track हो जाते हैंयह feature मैंने docker build acceleration के लिए बहुत पहले request किया था, और मैं इसे वाकई उपयोगी तरीके से इस्तेमाल कर रहा हूँ
उल्टा देखें तो project source code या library dependencies में mise का कम दखल ही उसकी simplicity का आकर्षण है
आम तौर पर यह बस उसी सीमा तक feature देता है
task caching, mise की दिशा से मेल नहीं खाती
anti-goals आधिकारिक दस्तावेज़ देखें
turbopack, moonrepo वगैरह पहले से इसी समस्या पर ध्यान दे रहे हैं
mise के एक lightweight task runner के रूप में बने रहने की संभावना ज्यादा है, जिसका focus सिर्फ scripts चलाने पर है
Mise repository में issues बंद क्यों हैं, मुझे भी नहीं पता
पहले एक issue था कि "maintainer, issues की बजाय discussion पसंद करता है", लेकिन अब वह गायब है
इसी बारे में मैंने यह discussion शुरू की थी
मेरी तरह अगर आपने इसे कई साल इस्तेमाल किया हो, तो इस project पर भरोसा काफी बन जाता है, और मैं इसे आसपास के लोगों को भी recommend करता हूँ
discussions और actual usage experience देखकर निर्णय लेना बेहतर होगा
यह कुछ वैसा है जैसे mise से build system (bazel जैसा) features माँगना
शायद किसी हद तक यह पहले से वैसी भूमिका निभा भी रहा है
cache feature उपयोगी है, लेकिन feature बढ़ने से complexity भी बढ़ सकती है, इसलिए सावधानी चाहिए
मौजूदा build systems के साथ integration के तरीकों पर भी सोचा जा सकता है
mise काफ़ी अच्छा लग रहा है
लेकिन एक मौजूदा asdf user के तौर पर, मुझे थोड़ा संकोच है कि mise कई चीज़ों को, जैसे PATH manipulation वगैरह, जरूरत से ज्यादा manage करना चाहता है
अलग-अलग tools का PATH को अलग तरह से छेड़ना बहुत परेशान करने वाला रहा है, इसलिए मैंने खुद .zprofile में PATH को fix कर दिया और तरह-तरह के initialization scripts भी हटा दिए
अगर mise programming languages और उन languages से install होने वाले CLI apps (
cargo,go,uvआदि) को एक साथ manage कर दे तो अच्छा होगा, लेकिन switch करते समय वही हिस्सा थोड़ा झंझट लग सकता हैआपने कहा कि कई tools का PATH priority से छेड़छाड़ करना असुविधाजनक था, लेकिन mise ऐसा नहीं करता
चाहें तो shim भी इस्तेमाल कर सकते हैं
यह language-specific tools और languages, दोनों का management support करता है
मुझे ठीक-ठीक याद नहीं कि मैंने asdf से mise पर क्यों switch किया था, लेकिन कई सालों से इस्तेमाल करते हुए कभी कोई समस्या नहीं हुई
मुझे mise वाकई बेहतरीन लगता है
automation, consistent environment setup, और नए projects को जल्दी bootstrap करने को लेकर गंभीर लोगों के लिए यह एकदम सही है
खासकर Ruby/Python/Node environments में अलग-अलग setup तरीकों, और environment को बार-बार reproduce करने जैसी समस्याओं को यह Docker जैसी चीज़ों के बिना भी सरलता से हल कर देता है
छोटे teams या personal projects में, CI environment या build systems (Bazel, Gradle आदि) के बिना भी repeatable execution environment आसानी से बनाया जा सकता है
मैं इसे chezmoi के साथ मिलाकर local system tools manage करने में भी अच्छी तरह इस्तेमाल कर रहा हूँ
मैं हाल ही में just से mise पर आया हूँ
just शानदार है, लेकिन वह केवल command runner की सुविधा देता है, और मुझे mise के अतिरिक्त features चाहिए थे
अब लगता है switch करना सही फैसला था
लेकिन अच्छा होगा अगर beginners के लिए use cases, history, दूसरे tools (nix, docker आदि) से तुलना, और structural explanation बेहतर तरीके से दी जाए
छोटे-छोटे फर्कों को उदाहरणों के साथ दिखाकर, ‘क्यों’ mise की जरूरत है और यह पहले से मौजूद tools से कैसे अलग है, यह documentation में और स्पष्ट होना चाहिए
इस खबर को लेकर मैं सच में उत्साहित हूँ
इसमें just/taskfile जैसे simple task runners के फायदे और bazel/buck2 जैसी ताकत का एक अच्छा मिश्रण महसूस होता है
लोग इसे कैसे इस्तेमाल करेंगे, यह देखने में दिलचस्पी है, और नए प्रयोगों को लेकर उत्साह भी है
environment management workflow काफी सरल हो गया है
लेकिन मुझे task runner feature की खास जरूरत नहीं लगती
Make या just वह काम काफी अच्छी तरह कर देते हैं
मैंने वास्तव में इसे monorepo में इस्तेमाल नहीं किया है, लेकिन दोनों tools task/recipe files के import और extension को support करते हैं, इसलिए जरूरत के हिसाब से setup संभव होना चाहिए
UX शायद किसी dedicated tool जितना smooth न हो, लेकिन मैं पसंद करता हूँ कि हर tool एक ही भूमिका पर केंद्रित रहे
mise पहले ही environment manager के रूप में काफी features समेटे हुए है, इसलिए अच्छा होगा कि वह उसी पर ज्यादा ध्यान दे
वैसे लगता है कि सामने वाले शायद mise के author हैं, उसके लिए धन्यवाद
अगर आप repository के tasks को एक single entry point से manage करना चाहते हैं, तो मेरे बनाए dela पर विचार किया जा सकता है
यह
pyproject.toml,package.json,makefileजैसी अलग-अलग task file definitions को scan करके, task name के आधार पर सीधे CLI से run करने देता हैकई repos में मैं इसे बिना किसी modification के तुरंत इस्तेमाल कर पाया हूँ, और repo structure बदले बिना काम होना भी इसकी बड़ी खूबी है
अभी यह mise tasks को support नहीं करता, लेकिन अगर demand हो तो मैं इसे तुरंत जोड़ने के लिए तैयार हूँ
हाल की गिनती के अनुसार, mise 1 लाख सबसे ज्यादा starred GitHub repos में 94 repos में इस्तेमाल हो रहा है
अधिक जानकारी के लिए 2025 task runners census देखें
जब मैं किसी Node project repo में जाता हूँ, तो सबसे पहले हमेशा
npm runचलाकर scripts की सूची देखता हूँअगर Makefile हो, तो मैं उसे खोलकर देखता हूँ, लेकिन अगर targets या dependencies सब variables में हों, तो मैं तुरंत वहाँ से निकल जाता हूँ
मैं तो सोच ही रहा था कि mise में ऐसा feature होना चाहिए, और अब सुनकर अच्छा लगा कि यह आ गया
mise इस्तेमाल करते हुए मुझे सबसे अच्छा जो लगा, वह npm, go, cargo आदि के जरिए backend में global tools install करने की सुविधा है
उदाहरण के लिए
mise use -g npm:prettierजैसे simple command से इसे आसानी से install किया जा सकता हैपहले nvm इस्तेमाल करते समय मुझे हमेशा याद रखना पड़ता था कि global package किस node version पर install किया था, लेकिन mise की वजह से यह बहुत आसान हो गया
हालांकि हाल में जब मैंने node का latest version install करना चाहा, तो एक छोटा bug था जिसमें दूसरा सबसे नया version install हो गया
अगर आप pure Nix-shell इस्तेमाल कर सकते हैं, तो mise थोड़ा कम आकर्षक लग सकता है
फिर भी Nix की तुलना में इसकी learning curve कम है, इसलिए शायद यह ज्यादा व्यापक रूप से अपनाया जाए
यह न सिर्फ अपने लिए या अपनी PC के लिए, बल्कि अलग-अलग लोगों को project आसानी से bootstrap कराने के लिहाज़ से mise को वाकई अलग बनाता है
TOML आधारित config भी लोगों के लिए समझना बहुत आसान है
पहले README खंगालकर manually environment मिलाना पड़ता था, और हर language की installation method अलग होने से झंझट होता था, लेकिन mise में यह समस्या नहीं रहती
Node/Ruby/Python वाले environments manage करने में यह खास तौर पर फायदेमंद है
मैंने 1 साल तक nix-darwin इस्तेमाल किया और आखिरकार mise पर आ गया
mise मुझे ज़रूरी features के 90% सिर्फ 1% झंझट में दे देता है
nix के concepts भी अच्छे हैं, और मुझे लगता है कि भविष्य का software build ecosystem निश्चित रूप से इसी दिशा में जाएगा
लेकिन फिलहाल मुझे नहीं लगता कि उसका मुख्य माध्यम nix ही होगा