Package Optimization
Overview
Unlike traditional package managers that dump entire repositories into your project, Jelly intelligently processes packages to keep only what you need. This results in smaller package directories.
Smart Package Cleanup
Jelly automatically removes unnecessary files and optimizes package structure during installation.
Before: Raw Wally Package
When you install a package with traditional tools, you get everything:
some_messy_package/
โโโ README.md # โ Documentation bloat
โโโ LICENSE # โ Legal files
โโโ .gitignore # โ Git configuration
โโโ .github/ # โ CI/CD configurations
โ โโโ workflows/
โ โโโ ISSUE_TEMPLATE/
โโโ docs/ # โ Documentation
โ โโโ getting-started.md
โ โโโ api-reference.md
โโโ test/ # โ Test files
โ โโโ init.spec.lua
โ โโโ TestUtils.lua
โโโ examples/ # โ Example code
โ โโโ basic-usage.lua
โ โโโ advanced-usage.lua
โโโ wally.toml # โ Package configuration
โโโ default.project.json
โโโ build/ # โ Build artifacts
โโโ node_modules/ # โ Node.js dependencies
โโโ lib/ # โ
Actual module
โโโ init.lua # โ
Main module file
โโโ Utils.lua # โ
Supporting modules
โโโ Types.lua # โ
Type definitions
After: Jelly Processed
Jelly extracts only the essential code:
some_messy_package/
โโโ init.lua # โ
Only the essential module
Or for more complex packages:
complex_package/
โโโ init.lua # โ
Main module
โโโ Utils.lua # โ
Supporting modules
โโโ Types.lua # โ
Type definitions
Intelligent Module Resolution
Jelly automatically handles different package structures and finds the main module:
Standard Packages
For packages with init.lua at the root:
package/
โโโ init.lua
Result: Direct require("@self/package_name")
Nested Packages
For packages using default.project.json structure:
package/
โโโ default.project.json
โโโ lib/
โโโ init.lua
Jelly reads the project file and extracts the main module:
Result: require("@self/lib")
Messy Repositories
For packages with complex directory structures:
messy_package/
โโโ src/
โ โโโ MyModule/
โ โโโ init.lua
โโโ tests/
โโโ docs/
โโโ examples/
Jelly intelligently locates the main module and flattens the structure:
Result: Clean, optimized package structure
File Type Filtering
Jelly removes files based on patterns known to be unnecessary for runtime:
Removed File Types
- Documentation:
README.md,LICENSE,CHANGELOG.md - Configuration:
.gitignore,.editorconfig,wally.toml - CI/CD:
.github/,.gitlab-ci.yml,azure-pipelines.yml - Development:
test/,tests/,spec/,__tests__/ - Examples:
examples/,demo/,sample/ - Build artifacts:
node_modules/,target/,dist/,build/ - IDE files:
.vscode/,.idea/,*.code-workspace
Preserved File Types
- Lua modules:
*.lua - Type definitions:
*.d.lua - Project files:
default.project.json - Essential configs: Files required for module resolution
Configuration Options
Control Jellyโs optimization behavior in your jelly.json:
{
"jelly": {
"cleanup": true, // Enable file cleanup
"optimize": true, // Enable structure optimization
"packagesPath": "Packages"
}
}
Cleanup Option
Default: true
Controls whether Jelly removes unnecessary files:
{
"jelly": {
"cleanup": false // Keep all files
}
}
Optimize Option
Default: true
Controls whether Jelly optimizes package structure:
{
"jelly": {
"optimize": false // Keep original structure
}
}