EPL Migration Guide¶
This guide covers the practical migration path from older EPL projects to the current v7 workflow.
High-Impact Changes¶
epl.tomlis the primary manifest format.epl.jsonremains legacy compatibility only.python -m eplandmain.pynow share the same authoritative CLI surface.- package workflows are lockfile-aware and support
epl install --frozen. - supported bundled packages now include
epl-web,epl-db, andepl-test.
Manifest Migration¶
Move older projects to epl.toml when possible.
Recommended fields:
[project]
name = "my-app"
version = "0.1.0"
entry = "src/main.epl"
[dependencies]
epl-web = "^1.0.0"
If a project still has epl.json, EPL will continue to read it for compatibility, but new projects and new docs should use epl.toml.
CLI Migration¶
Prefer these commands:
python -m epl runpython -m epl buildpython -m epl servepython -m epl installpython -m epl fmt --check
If older scripts call python main.py, they still work from source checkout, but the shared epl CLI is the stable contract to target.
Package Workflow Migration¶
For reproducible installs:
- run
epl install - commit
epl.lock - use
epl install --frozenin CI and release automation
If you use Python bridge dependencies or GitHub packages, make sure they are declared in epl.toml so the lockfile can pin them.
Web and App Templates¶
New projects should start from templates instead of handwritten skeletons:
epl new myapp --template webepl new myapp --template apiepl new mylib --template libepl new mytool --template cli
These templates align with the supported packages and current docs.
Android and Desktop Projects¶
Generated Android projects now use the standard vendored Gradle wrapper. Generated desktop projects also use the standard Gradle flow.
Use:
- Android:
./gradlew lintDebug testDebugUnitTest assembleDebug assembleRelease - Desktop:
./gradlew compileKotlin test
Release Migration¶
For releases, prefer this baseline:
python -m pytest -qpython -m build --wheel --sdist- clean-room wheel smoke
- reference app smoke tests
epl install --frozen
When To Keep Legacy Behavior¶
Legacy behavior is acceptable only for:
- source-checkout compatibility wrappers
- older manifests you have not migrated yet
- historical test fixtures that intentionally cover backward compatibility
Do not use legacy behavior as the default in new docs, new templates, or new CI.