- Flox engineering teams के लिए एक software environment platform है, जो developer laptops से लेकर CI और production तक समान रूप से reproduce होने वाले environments को एक manifest से manage करता है
- यह Nix पर आधारित है, लेकिन Nix की जानकारी optional है; declarative manifest और cryptographically fixed content-hash inputs के जरिए environment drift घटाने की संरचना है
- macOS, Linux, Windows WSL2 पर चलता है; Nixpkgs के 120,000+ packages को search और install कर सकता है, और अपने software को reproducible packages के रूप में build और publish कर सकता है
flox init,flox install,flox activateflow से project-specific isolated environments बनते हैं; activate करने पर tools दिखाई देते हैं और बाहर निकलने पर गायब हो जाते हैं, जिससे system साफ रहता है- FloxHub sharing, OCI image creation, services चलाना, SBOM·CVE patching·SCA, और AI coding agents के लिए deterministic execution environment तक शामिल कर, organization-level environment lifecycle management पर focus करता है
Flox किस समस्या को हल करना चाहता है
- Flox development environment को एक file में define करता है और developer laptops, CI और production में वही environment चलाने वाला platform है
- पारंपरिक package managers जहां single machine पर package installation पर focus करते हैं, वहीं Flox पूरे organization के package और environment lifecycle को manage करता है
- इसके तीन मुख्य गुण हैं
- Declarative: project के लिए जरूरी tools, environment variables और services को एक file में describe करता है
- Reproducible: वही definition supported systems में कहीं भी वही environment बनाती है
- Composable: project, team और pipeline के अनुसार environments को layer किया जा सकता है
Target users और use environment
- Platform·DevX teams organization-wide toolchain को standardize कर सकते हैं और Nix सीखना अनिवार्य किए बिना baseline environment को expand कर सकते हैं
- Security·AppSec teams SBOM, तेज CVE response, dependency provenance और reproducible builds को handle कर सकते हैं
- Developers macOS, Linux, Windows WSL2 पर project-specific reproducible environments इस्तेमाल कर सकते हैं; यह containers या VMs की तुलना में virtual environment के करीब तरीके से काम करता है
- AI coding agents को ऐसा deterministic environment मिलता है जिसमें generated code हर बार उसी तरीके से build और run हो सके
- उदाहरण targets Claude Code, Cursor, Copilot और Codex हैं
Reproducibility और supply-chain security
- Flox environments declarative manifest से define होते हैं और cryptographically fixed content-hash inputs में locked रहते हैं
- वही lockfile हर supported system पर वही packages में resolve होती है, इसलिए machines के बीच environment समान बना रहता है
- एक ही environment definition को developer laptop, AI agent sandbox, CI और production में इस्तेमाल किया जा सकता है
- Nixpkgs के 120,000+ packages का उपयोग किया जा सकता है
- अपने software को source से build कर reproducible package बनाया जा सकता है और पूरी team के उपयोग के लिए publish किया जा सकता है
- Reproducibility के आधार पर SBOM generation, software composition analysis (SCA), automated vulnerability/CVE patching, dependency provenance verification और auditable builds को handle करना आसान बनाता है
Installation और basic workflow
- Flox CLI macOS, Linux, Windows WSL2 पर native तरीके से install होता है
- Basic usage flow project के अंदर environment बनाने, जरूरी packages install करने और फिर environment activate करने का है
flox init: project में environment बनानाflox install python3 nodejs: environment में packages install करनाflox activate: environment में enter करना
- README example में activated environment के अंदर
python3 --versionPython 3.13.13औरnode --versionv24.15.0के रूप में काम करता है - Environment से बाहर निकलने पर installed tools गायब हो जाते हैं, project-to-project conflicts रुकते हैं और system साफ रहता है
मुख्य features
- Create:
flox initसे code के साथ declarative environment बनाया और auto-activate किया जा सकता है - Search:
flox searchसे Nixpkgs के 120,000+ packages खोजे जा सकते हैं - Share:
flox push/flox pullसे FloxHub पर मौजूद single reference environment को team members समान रूप से ला सकते हैं - Containerize:
flox containerizeसे Dockerfile के बिना Flox environment को OCI image बनाया जा सकता है - Build & publish:
flox build/flox publishसे अपने software को reproducible package के रूप में build कर team को publish किया जा सकता है - Services:
flox services startसे databases, queues, background processes को environment का हिस्सा बनाकर चलाया जा सकता है; activate होने पर start और exit होने पर stop होते हैं - Configure:
manifest.tomlमें environment variables, shell hooks, activation scripts को declaratively define करता है - AI-ready: flox-agentic के जरिए AI coding agents को हर execution में समान dependencies के साथ build/run करने में support करता है
Docker और Nix users के लिए positioning
- Flox container technology नहीं है और Docker का replacement नहीं है
- Docker में packaging और container isolation अक्सर मिल जाते हैं, लेकिन Flox का stance है कि software packaging और चुने गए isolation approach को अलग रखना चाहिए
- Flox environments bare metal, VM और container में एक ही तरीके से काम करते हैं
flox containerizesoftware environment वाला OCI image बनाता है और इसे Docker, Kubernetes तथा अन्य container runtimes के साथ इस्तेमाल किया जा सकता है- Nix users के लिए Flox replacement नहीं, बल्कि additional tool है
- Collaboration environment और package sharing के लिए central service FloxHub देता है
- Activation hooks, services और shell profiles को एक declarative TOML file में bundle करता है
स्रोत और support resources
- Flox की शुरुआत D.E. Shaw group के large-scale enterprise Nix deployment से हुई थी और इसका उपयोग large engineering organizations में Nix को accessible बनाने के लिए किया गया
- संबंधित resources
- Documentation: tutorials, reference, guides
- FloxHub: environments को explore और share करना
- Discourse: questions, discussions, announcements
- Blog: in-depth articles और workflows
- VS Code extension: editor में Flox environments manage करना
- Security-related queries
security@flox.devपर ली जाती हैं - Flox CLI license GPLv2 है
1 टिप्पणियां
Hacker News की राय
Ron, लॉन्च के लिए बधाई। मेरी जिज्ञासा यह है कि revenue model क्या होगा
CEO, कंपनी और कर्मचारी हैं, और Crunchbase देखने पर लगता है कि 24 मिलियन डॉलर की funding मिली है, लेकिन landing page या docs में pricing जानकारी नहीं मिल रही
GitHub profile से FloxHub में login करने पर भी payment option नहीं दिखता; जानना चाहूँगा कि योजना क्या है
आज जारी किया गया open source client और environment sharing के लिए FloxHub service हमेशा free रहेगी
आगे हम basic Flox Catalog के ऊपर चलने वाला अधिक शक्तिशाली private software catalog उपलब्ध कराना चाहते हैं
अगर आपको अपने artifacts distribute करने हैं या Flox के भीतर modified open source package versions चाहिए, तो हमारी योजना है कि आप हमेशा free रहने वाले Flox Catalog को complement करने वाला अपना catalog आसानी से बना सकें
लंबे समय में, हम enterprises को उनके बड़े और fragmented software supply chain को बेहतर manage करने में मदद देने के लिए subscription और services के रूप में enterprise solutions बेचना चाहते हैं, और हमें लगता है कि company-specific tooling development की लागत enterprises द्वारा साझा करना उचित है
README में “Nix को नए users के लिए आसान बनाता है” जैसी line या वैसी ही कोई wording जब भी देखता हूँ, अटक जाता हूँ
खुद को काफी सक्षम मानता हूँ, लेकिन Nix इस्तेमाल करते हुए मुझे कभी नहीं लगा कि “यह आसान था”
Nix के concepts मुझे सचमुच पसंद हैं, लेकिन user experience भयानक है। हो सकता है यह tool उसे ठीक करता हो, लेकिन उस point तक पहुँचने के लिए docs बहुत कम हैं और पहले से deprecated तरीकों में भटकते हुए config को endlessly tweak करना पड़ता है, जिससे काफी frustration होती है
खैर, Nix से जुड़ी कोई भी चीज़ देखते ही मन में आता है, “कब वह दिन आएगा जब यह आसान होगा”
.nixया flakes की आदत नहीं पड़ पाईbasic concepts बार-बार दिमाग से निकल जाते थे, इसलिए हर बार कुछ नया setup करते समय फिर से खोजना पड़ता था, और आखिर में instructions
issues debug करना भी कठिन है; क्या गलत हुआ यह जानने के लिए बहुत specific commands और नरक जैसे file system में खंगालना पड़ता है
concept अच्छा है, लेकिन practice में ऐसा लगता है कि यह बहुत ज़्यादा रास्ता रोकता है
Haskell background होने से यह थोड़ा ज्यादा familiar लगता है, लेकिन syntax खुद भी नए users के लिए intuitive नहीं है
Rust सीखने जैसा है, इसलिए कुछ हद तक मजेदार भी है
“learning curve के बिना Nix की शक्ति देता है” जैसे products की core समस्या यह है कि पीछे अब भी Nix और
/nix/storeमौजूद हैं, और Nix जानबूझकर इसे automatically clean नहीं करताजब user Nix को छिपाने वाला tool इस्तेमाल करता है, तो आखिरकार disk भर जाती है, और उसे storage कम करने का तरीका नहीं पता होता, इसलिए इसे user-friendly कहना मुश्किल है
फर्क यह है कि अगर user जानता है कि वह Nix install कर रहा है और learning process से गुजरता है, तो वह
/nix/storeक्या है और इसे कैसे manage करना है, इसका mental model बना सकता हैजानना चाहूँगा कि इस तरह की underlying complexity से निपटने की आपकी योजना क्या है
Flox environments simple symbolic links नहीं हैं; वे declarative format में हैं, और internally flakes रखते हैं, इसलिए उन्हें हटाया जा सकता है और जरूरत पड़े तो फिर से reproduce भी किया जा सकता है
इसलिए
nix-env/nix profileइस्तेमाल करने की तुलना में garbage collection कम destructive होता है, और old generations को अधिक aggressively clean किया जा सकता हैstrategy यह है कि पहले हमेशा declarative और reproducible तरीका सुनिश्चित किया जाए जिससे साफ की गई चीज़ recover हो सके, फिर free space, age, recently unused, low usage frequency जैसे heuristics से disk भरने से बचा जाए
उल्टा, Nix में मुझे यह समस्या कभी नहीं हुई। garbage clean करने का तरीका साफ बताया गया है, और क्या बचा है तथा क्यों बचा है यह भी आसानी से investigate किया जा सकता है
default में enable न होने की वजह यह है कि बाकी garbage collectors की तरह यह बाधा डाल सकता है, और हर किसी के लिए एक ही policy सही नहीं होती
आखिर में अगर GC roots बहुत ज्यादा हों, तो decision लेना ही पड़ता है
computer इस्तेमाल करते समय background में हजारों बेतहाशा जटिल काम होते रहते हैं; मुझे समझ नहीं आता कि सिर्फ Nix को abstract करने को अलग तरह से क्यों treat किया जाए
रिलीज़ के लिए बधाई। मुझे Nix सच में बहुत पसंद है, लेकिन यह भी मानता हूँ कि onboarding experience अच्छे से अच्छा देखें तो भी खराब है, और सबसे खराब हालत में भयानक है
इसलिए इसे ज़्यादा approachable बनाने की कोशिशों का स्वागत है। Imperative CLI उस तरीके के कहीं ज़्यादा करीब है जिसकी बहुत लोग उम्मीद करते हैं और जिसमें वे comfortable महसूस करते हैं, इसलिए यह अच्छी दिशा लगती है
दूसरी जगहों के environments इस्तेमाल करने की प्रक्रिया को सरल बनाने से भी मैं काफी सहमत हूँ
हालांकि एक चीज़ जो अहम लगती है लेकिन दिखती नहीं, वह है IDE integration। environment के अंदर command line से IDE शुरू करना कई साथियों को intuitive नहीं लगता, और मैंने इसे कई बार असली समस्या की root cause के रूप में diagnose किया है
ज़रूरत पड़ने पर “असली Nix” तक नीचे जाने की कहानी क्या होगी, यह जानना चाहता हूँ। उदाहरण के लिए Rust cross-compile toolchain सेट करने जैसे थोड़े ज़्यादा जटिल environment में कहीं अचानक cliff से नीचे न गिरना पड़े, इसकी चिंता है
Rust development के उदाहरण में, Rust-Analyzer सही से काम करे इसके लिए मुझे एक flake में लंबा
shellHookडालना पड़ा था; Flox में ऐसी setting कैसे की जा सकेगी, यह जानना चाहूँगाक्या आप इस तरह की चीज़ों को abstract करना चाहते हैं, या अगर नहीं, तो Nix न जानने वाला user इसे कैसे खोज पाएगा, यह भी जानना चाहता हूँ
मैं यह बिल्कुल नहीं कह रहा कि यह असंभव है; सच में चाहता हूँ कि यह अच्छा चले, लेकिन अभी तरीका साफ़ नहीं दिख रहा
अभी सोच यह है कि किसी खास field में flake reference की अनुमति दी जाए, या Nix-style entry point रखा जाए
यह अभी publicly released या documented नहीं है, इसलिए थोड़ा इंतज़ार करें
complexity छिपाने और capability expose करने के बीच सच में बहुत महीन रेखा होती है—इससे मैं पूरी तरह सहमत हूँ
सामान्य
nix-shellयाnix developके बजाय Flox इस्तेमाल करने का फायदा क्या है, यह जानना चाहता हूँमकसद यह है कि Nix expression language सीखे बिना या Nix के internals समझे बिना भी लोग सफल हो सकें
साथ ही हमने कुछ direction और polish भी जोड़ी है। उदाहरण के लिए imperative/declarative mixed interface है, जहाँ
flox install && flox listचलाने पर changes TOML में reflect होते हैं। जबकिnix developमें Nix expression edit करना पड़ता हैnix developbash shell में ले जाता है, लेकिनflox activatebash या zsh shell में ले जा सकता है, और fish support जोड़ने की भी योजना हैGit से environment manage करना Nix tools की तरह supported है, साथ ही
flox push/flox pull/flox activate -rजैसे environment sharing के तरीके भी जोड़े गए हैं, जो उन tools से संभव नहीं हैंaccount बनाने पर https://hub.flox.dev/mkenigs/default पर मेरे environment के packages देख सकते हैं, और अगर CLI है तो
flox list -r mkenigs/defaultसे check करकेflox activate -r mkenigs/defaultसे इस्तेमाल कर सकते हैंमेरे हिसाब से Nix expression language न जानने वाले व्यक्ति को
flake.nixlink करने की तुलना में यह कहीं ज़्यादा digestible हैFlox या devenv जैसे tools का end-of-life हो जाना, nixpkgs के साथ ठीक से pace न रख पाना, या software rot के कई तरीकों में से किसी एक का शिकार होना पूरी तरह संभव है
दूसरी तरफ
nix developतब तक रहेगा जब तक Nix Flakes बने रहेंगे, और अगले तरीके पर जाने के लिए migration path देने की प्रेरणा भी होगीउससे भी महत्वपूर्ण बात यह है कि सभी abstractions leak करती हैं। Flox CLI ज़्यादा साफ़ दिख सकता है, लेकिन अंततः इसे प्रभावी ढंग से इस्तेमाल करने के लिए Nix सीखना ही पड़ेगा
ज़रूरत से दोगुना सीखने की क्या वजह है, यही सोचता हूँ
मौजूदा Devbox project (https://www.jetpack.io/devbox) से इसकी तुलना कैसे होती है, यह जानना चाहता हूँ
क्या Flox में optional cloud solution भी है, क्या Nix packages के specific versions install किए जा सकते हैं, और OS-specific dependencies को कैसे handle किया जाता है—यह भी जानना चाहूँगा
मैं ऐसे tools 5 साल से इस्तेमाल कर रहा हूँ, और जानना चाहता हूँ कि Flox पहले से मौजूद चीज़ों की तुलना में नया क्या लाता है
सच में समझ नहीं आ रहा कि plain Nix के बजाय इसे क्यों इस्तेमाल करना चाहिए; क्या कोई समझा सकता है
यह मुझे 100 गुना ज़्यादा simple लगता है
लेकिन Nix को first principles से बनाया गया है और यह बहुत general-purpose है, इसलिए इसकी learning curve काफी steep है
Flox problem scope को छोटा करता है और specialized abstractions व interfaces देता है, ताकि पहले दिन से Nix expert बने बिना भी Nix की power इस्तेमाल की जा सके
reproducible development environments में मेरी बहुत दिलचस्पी है, और काम पर भी कई सालों से development containers अच्छे से इस्तेमाल कर रहा हूँ
करीब 1 साल पहले Nix के बारे में सुना और शुरू में उसके promise को देखकर काफी उत्साहित था, लेकिन onboarding process मेरे लिए भयानक था
जो development environment बनाना चाहता हूँ वह साफ़ है, पर approach में हमेशा लगता है कि कुछ न कुछ छूट रहा है
overall experience सुधारने वाला नया tool देखकर खुशी है, और उम्मीद है कि कोशिश करते-करते किसी दिन समझ आ जाएगी
आपके लिए किस पल Nix “click” हुआ था, यह जानना चाहता हूँ
क्या आपने Microservices video देखा है? https://www.youtube.com/watch?v=y8OnoxKotPQ
उस समय मैं Facebook में developer products team lead कर रहा था, और local development में remote capabilities inject करने वाला project शुरू किया था
हजारों developers cold build के लिए 45 मिनट इंतज़ार कर रहे थे
शुरुआती चरणों में से एक पूरे software development lifecycle को map करना था, ताकि पता चल सके कि toolchain के किन हिस्सों को दोबारा बनाना पड़ेगा
video के आखिर में whiteboard देखकर याद आता है कि जिस पल हमने visualize किया कि हमने इसे कितना complex बना दिया है, तब मेरे मन में यह बात आई: “यह हमारे काम करने का तरीका नहीं हो सकता”
पिछली बार जब Nix इस्तेमाल किया था, तो flakes को लेकर काफी भ्रम था
कुछ ट्यूटोरियल इसे इस्तेमाल करने को कहते थे, जबकि दूसरी जगह कहा जाता था कि यह अभी विकास में है; सोच रहा हूँ कि क्या स्थिति बेहतर हुई है
flakes की समस्या मुझे दो चीज़ों से आती लगती है
पहली यह कि लगभग 5 साल से इस पर experimental लेबल लगा है, जिससे नए users उलझ जाते हैं, लेकिन असल में यह लगभग हर जगह आम तौर पर इस्तेमाल होता है
दूसरी यह कि https://determinate.systems/ और लंबे समय से Nix इस्तेमाल करने वाले users/developers के बीच रिश्ते कुछ खराब लगते हैं। लगता है Determinate Systems की आलोचना होती है कि वे Nix को अपने फायदे के लिए इस्तेमाल करते हैं लेकिन योगदान वापस नहीं देते
मेरी समझ में Determinate Systems ने flakes पेश किया था, और शायद इसी वजह से कुछ लोग इसका विरोध करते हैं
निष्कर्ष यह है कि लगभग सभी ने flakes अपना लिया है, और जो guides इसका इस्तेमाल नहीं करते वे आम तौर पर पुराने होने की संभावना रखते हैं
संबंधित लिंक: https://discourse.nixos.org/t/introducing-flakehub/32044
“experimental” लेबल का मतलब पूर्णता या bugs से ज़्यादा API stability से जुड़ा है
कुछ स्थितियों में performance समस्याएँ हो सकती हैं, लेकिन workarounds हैं और स्थायी समाधान पर भी काम चल रहा है
फिर भी मैं घर और काम दोनों जगह flakes खूब इस्तेमाल कर रहा हूँ
कल रात macOS पर Flox आज़माया, और देखा कि Nix-Darwin द्वारा
/run/current-system/sw/binमें manage किए जाने वाले Nix से अलग, यह default profile में Nix install करता है और उस copy को/usr/local/binमें symbolic link कर देता हैमौजूदा Nix users—यानी NixOS users या वे दूसरे distro users जिनके पास पहले से Nix installed है लेकिन Flox द्वारा supported distribution package format नहीं है—के लिए कोई guidance भी नहीं थी
सोच रहा हूँ कि क्या ऐसा इसलिए है क्योंकि Flox, Nix का third-party profile manager है और unstable Nix profile manifest format जैसी चीज़ों पर निर्भर करता है, या फिर असल में इसे अलग-अलग Nix versions के साथ इस्तेमाल किया जा सकता है लेकिन बस test नहीं किया गया
यह भी जानना चाहूँगा कि क्या Nix-based Flox installation को आगे support किए जाने वाले feature के रूप में सोचा जा रहा है
साथ ही कहा गया था कि fish support आने वाला है; क्या बता सकते हैं कि
activatesubcommand का shell integration असल में Flox source या config में कहाँ हैofficial fish support का इंतज़ार करते हुए fenv जैसी किसी चीज़ से अस्थायी तौर पर जोड़ने की कोशिश कर रहा था, लेकिन installed copy और source खंगालने पर भी plug-in करने लायक जगह साफ़ नहीं दिखी
अभी fish इस्तेमाल करने का सबसे अच्छा तरीका मेरे हिसाब से
FLOX_SHELL=zsh flox activate -- fishहै। aliases support नहीं होंगे, लेकिन ज़्यादातर चीज़ें काम करेंगीयह भी जानना चाहूँगा कि क्या आप सच में source hack करना चाहते हैं, या workaround बनाने के लिए structure समझना चाहते हैं
bash या zsh के अलावा shells में यह इस हिस्से के आसपास error देता है: https://github.com/flox/flox/blob/9e18a3ceaa185006bae95a4827...
अगर आप खुद fix करने की कोशिश करना चाहते हैं, तो background समझाने में खुशी होगी