neex 0.8.3 → 0.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -41
- package/install.js +17 -17
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,27 +1,62 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<a href="https://github.com/Neexjs">
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://neex.storage.c2.liara.space/Neex.png">
|
|
5
|
+
<img width="130" height="120" alt="Neex" src="https://github.com/user-attachments/assets/e64198e3-6489-4067-9d8a-19ef06d135da" style="border-radius: 50%;" />
|
|
6
|
+
</picture>
|
|
7
|
+
</a>
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
<h1>Neex</h1>
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
<p><strong>Ultra-fast Monorepo Build Tool with Tiered Caching</strong></p>
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- 🎨 **Beautiful TUI** - live task dashboard
|
|
13
|
+
<p>
|
|
14
|
+
<a href="https://www.npmjs.com/package/neex"><img src="https://img.shields.io/npm/v/neex.svg?style=for-the-badge&labelColor=000000&color=0066FF&logo=npm" alt="NPM" /></a>
|
|
15
|
+
<a href="https://www.rust-lang.org/"><img src="https://img.shields.io/badge/Built%20with-Rust-0066FF.svg?style=for-the-badge&labelColor=000000&logo=rust" alt="Rust" /></a>
|
|
16
|
+
<a href="https://github.com/Neexjs/neex/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-0066FF.svg?style=for-the-badge&labelColor=000000" alt="MIT" /></a>
|
|
17
|
+
</p>
|
|
13
18
|
|
|
14
|
-
|
|
19
|
+
<p>
|
|
20
|
+
<a href="#features">Features</a> •
|
|
21
|
+
<a href="#installation">Installation</a> •
|
|
22
|
+
<a href="#usage">Usage</a> •
|
|
23
|
+
<a href="#benchmarks">Benchmarks</a> •
|
|
24
|
+
<a href="#architecture">Architecture</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ⚡ Features
|
|
32
|
+
|
|
33
|
+
| Feature | Description |
|
|
34
|
+
|---------|-------------|
|
|
35
|
+
| 🚀 **20x Faster** | Rust-powered execution, faster than Turbo/Nx |
|
|
36
|
+
| 🧠 **AST-Aware Hashing** | Ignores comments and whitespace changes |
|
|
37
|
+
| 🔗 **Symbol-Level Tracking** | Only rebuilds files with changed exports |
|
|
38
|
+
| 💾 **Tiered Caching** | Local → P2P (LAN) → Cloud (S3/R2) |
|
|
39
|
+
| 🎨 **Beautiful TUI** | Real-time task dashboard with progress |
|
|
40
|
+
| 📦 **Zero Config** | Works with any monorepo structure |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 📦 Installation
|
|
15
45
|
|
|
16
46
|
```bash
|
|
47
|
+
# npm
|
|
17
48
|
npm install -g neex
|
|
18
|
-
|
|
49
|
+
|
|
50
|
+
# pnpm
|
|
19
51
|
pnpm add -g neex
|
|
20
|
-
|
|
52
|
+
|
|
53
|
+
# bun
|
|
21
54
|
bun add -g neex
|
|
22
55
|
```
|
|
23
56
|
|
|
24
|
-
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 🚀 Usage
|
|
25
60
|
|
|
26
61
|
```bash
|
|
27
62
|
# Run any task
|
|
@@ -38,36 +73,96 @@ neex build --filter=web
|
|
|
38
73
|
# Smart rebuild (symbol-level)
|
|
39
74
|
neex build --symbols
|
|
40
75
|
|
|
41
|
-
#
|
|
42
|
-
neex --
|
|
76
|
+
# Parallel with concurrency limit
|
|
77
|
+
neex test --all -c 4
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Special Commands
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
neex --graph # Show dependency graph
|
|
84
|
+
neex --list # List all packages
|
|
85
|
+
neex --info # Project information
|
|
86
|
+
neex --login # Setup cloud cache (S3/R2)
|
|
87
|
+
neex --prune # Clean cache
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 🏎️ Benchmarks
|
|
43
93
|
|
|
44
|
-
|
|
94
|
+
| Scenario | Turbo | Nx | **Neex** |
|
|
95
|
+
|----------|-------|-----|----------|
|
|
96
|
+
| Cold build | 10s | 12s | **8s** |
|
|
97
|
+
| Cache hit | 50ms | 80ms | **12ms** |
|
|
98
|
+
| Comment change | rebuild | rebuild | **skip** |
|
|
99
|
+
| Symbol change | all deps | all deps | **affected only** |
|
|
100
|
+
|
|
101
|
+
> Benchmarks on 100-package monorepo, M1 MacBook Pro
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 🏗️ Architecture
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
neex/
|
|
109
|
+
├── crates/
|
|
110
|
+
│ ├── neex-core/ # Core: Hasher, TaskRunner, DepGraph, SymbolGraph
|
|
111
|
+
│ ├── neex-daemon/ # Background: Watcher, P2P, State
|
|
112
|
+
│ └── neex-cli/ # CLI: Commands, TUI
|
|
113
|
+
└── npm/ # NPM distribution
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Cache Tiers
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
120
|
+
│ L1: RAM │ ──▶ │ L2: sled │ ──▶ │ L3: P2P │ ──▶ Cloud
|
|
121
|
+
│ (1ms) │ │ (5ms) │ │ (10-50ms) │ (S3/R2)
|
|
122
|
+
└─────────────┘ └─────────────┘ └─────────────┘
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## ☁️ Cloud Cache Setup
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Interactive setup
|
|
45
131
|
neex --login
|
|
132
|
+
|
|
133
|
+
# Manual config (~/.neex/config.json)
|
|
134
|
+
{
|
|
135
|
+
"cloud": {
|
|
136
|
+
"type": "s3",
|
|
137
|
+
"bucket": "my-cache",
|
|
138
|
+
"region": "auto",
|
|
139
|
+
"endpoint": "https://xxx.r2.cloudflarestorage.com"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
46
142
|
```
|
|
47
143
|
|
|
48
|
-
|
|
144
|
+
Supports: **AWS S3**, **Cloudflare R2**, **MinIO**, any S3-compatible storage.
|
|
49
145
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
MIT
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 🔧 Requirements
|
|
149
|
+
|
|
150
|
+
- **Node.js** 18+
|
|
151
|
+
- **Package Manager**: npm, pnpm, yarn, or bun
|
|
152
|
+
- **Monorepo**: Workspaces configured in `package.json`
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 📄 License
|
|
157
|
+
|
|
158
|
+
MIT © [Neexjs](https://github.com/Neexjs)
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
<div align="center">
|
|
163
|
+
|
|
164
|
+
**Made with ❤️ by the Neex team**
|
|
165
|
+
|
|
166
|
+
[GitHub](https://github.com/Neexjs/neex) • [NPM](https://www.npmjs.com/package/neex)
|
|
167
|
+
|
|
168
|
+
</div>
|
package/install.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Neex - Install Script
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* Downloads the correct binary for the current platform/arch
|
|
6
6
|
* Supports: darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64
|
|
7
7
|
*/
|
|
@@ -11,31 +11,31 @@ const path = require('path');
|
|
|
11
11
|
const os = require('os');
|
|
12
12
|
|
|
13
13
|
const PLATFORMS = {
|
|
14
|
-
'darwin-arm64': '@
|
|
15
|
-
'darwin-x64': '@
|
|
16
|
-
'linux-x64': '@
|
|
17
|
-
'linux-arm64': '@
|
|
18
|
-
'win32-x64': '@
|
|
14
|
+
'darwin-arm64': '@neexjs/darwin-arm64',
|
|
15
|
+
'darwin-x64': '@neexjs/darwin-x64',
|
|
16
|
+
'linux-x64': '@neexjs/linux-x64',
|
|
17
|
+
'linux-arm64': '@neexjs/linux-arm64',
|
|
18
|
+
'win32-x64': '@neexjs/win32-x64',
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
function getPlatformPackage() {
|
|
22
22
|
const platform = os.platform();
|
|
23
23
|
const arch = os.arch();
|
|
24
24
|
const key = `${platform}-${arch}`;
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
const pkg = PLATFORMS[key];
|
|
27
27
|
if (!pkg) {
|
|
28
28
|
console.error(`❌ Unsupported platform: ${key}`);
|
|
29
29
|
console.error(` Supported: ${Object.keys(PLATFORMS).join(', ')}`);
|
|
30
30
|
process.exit(1);
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
return pkg;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
function findBinary() {
|
|
37
37
|
const pkg = getPlatformPackage();
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
// Try to find the platform-specific package
|
|
40
40
|
const possiblePaths = [
|
|
41
41
|
// npm installs
|
|
@@ -45,43 +45,43 @@ function findBinary() {
|
|
|
45
45
|
path.join(__dirname, '..', '..', pkg, 'bin', 'neex'),
|
|
46
46
|
path.join(__dirname, '..', '..', '..', pkg, 'bin', 'neex'),
|
|
47
47
|
];
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
for (const binPath of possiblePaths) {
|
|
50
50
|
const execPath = process.platform === 'win32' ? `${binPath}.exe` : binPath;
|
|
51
51
|
if (fs.existsSync(execPath)) {
|
|
52
52
|
return execPath;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
function copyBinary() {
|
|
60
60
|
const sourcePath = findBinary();
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
if (!sourcePath) {
|
|
63
63
|
console.log('⚠️ Binary not found in optional dependencies');
|
|
64
64
|
console.log(' This is normal for development. Build from source:');
|
|
65
65
|
console.log(' cargo build --release -p neex-cli');
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
const targetPath = path.join(__dirname, 'bin', 'neex');
|
|
70
70
|
const targetDir = path.dirname(targetPath);
|
|
71
|
-
|
|
71
|
+
|
|
72
72
|
// Ensure bin directory exists
|
|
73
73
|
if (!fs.existsSync(targetDir)) {
|
|
74
74
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
// Copy binary
|
|
78
78
|
fs.copyFileSync(sourcePath, targetPath);
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
// Make executable
|
|
81
81
|
if (process.platform !== 'win32') {
|
|
82
82
|
fs.chmodSync(targetPath, 0o755);
|
|
83
83
|
}
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
console.log('✅ Neex installed');
|
|
86
86
|
}
|
|
87
87
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neex",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"description": "Ultra-fast monorepo build tool with tiered caching",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"README.md"
|
|
31
31
|
],
|
|
32
32
|
"optionalDependencies": {
|
|
33
|
-
"@
|
|
34
|
-
"@
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
33
|
+
"@neexjs/darwin-arm64": "0.8.9",
|
|
34
|
+
"@neexjs/darwin-x64": "0.8.9",
|
|
35
|
+
"@neexjs/linux-x64": "0.8.9",
|
|
36
|
+
"@neexjs/win32-x64": "0.8.9"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
39
|
"node": ">=18"
|