List dependencies in pawn.json / pawn.yaml under dependencies or
dev_dependencies.
sampctl install <user/repo>
sampctl uninstall <user/repo>
sampctl ensureInstall adds a declaration after installing its required dependencies. Uninstall
removes the declaration and updates an existing pawn.lock offline. Installed
files, including external and local paths, remain. Use --dev for development
dependencies. Ensure installs the declared dependencies.
A bare uninstall name matches a pinned declaration. An explicit tag, branch, or commit must match it. Shared transitive pins remain. Older lockfiles without relationship data may keep unused entries until the next successful ensure.
- Tag:
user/repo:1.2.3 - Branch:
user/repo@branch-name - Commit:
user/repo#<sha1>
Pinned dependencies use the package definition from that revision. An unpinned transitive dependency uses the project's explicit pin for that repo. Examples:
pawn-lang/YSI-Includes@5.xsamp-incognito/samp-streamer-plugin:2.8.2
plugin://user/repodownloads plugin binaries into./plugins/component://user/repodownloads open.mp components into./components/includes://user/repoadds include pathsfilterscript://user/repoinstalls a filterscript
See Dependency schemes for details.
Plugins and components use their package's resources metadata to select a
GitHub release asset by (platform, runtime.version). Sampctl installs the repo,
extracts the binaries into the directories above, and adds them to the runtime
config.
Resource versions must match runtime.version exactly. If none matches, sampctl
uses a resource for the same platform with an empty version. Versions containing
openmp or open.mp select open.mp. See Plugin resources
for package author guidance.
Failures return a nonzero exit status, with independent errors reported together.
Use --verbose for details or sampctl check to inspect local state.
Install preserves existing pins and saves pawn.lock when enabled.
ensure --no-lock leaves it alone. ensure --lock-only refreshes pins without
installing dependencies.
Dependency commands record staged changes in .sampctl-dependencies.json. Before
commit, failures trigger an attempt to restore previous installations, the
manifest, and pawn.lock. Output reports incomplete recovery. Valid shared caches
remain.
The next dependency command recovers pending work. sampctl check reports it
without changing files. sampctl check --fix runs the same recovery. Saved changes
remain installed if cleanup fails. The command exits nonzero. Retry to finish
cleanup.
Invalid metadata, changed files, or ambiguous backups need manual inspection. Keep the record and backups until installed files, the manifest, and pins agree. Unknown staging directories remain.
Runtime upgrades commit independently of dependencies. .sampctl-runtime.json
records ownership, including external directories and --no-lock projects.
Replacements are staged and verified, with previous managed files kept for
recovery. Failed upgrades restore those files when safe. Saved upgrades remain
installed if cleanup fails.
The next ensure or sampctl check --fix recovers interrupted runtime work.
Changed files or invalid recovery records need manual inspection. For older
untracked installations, ensure the current version before upgrading.
Dependency recovery uses the project lock. Retry when another operation finishes.
The OS releases the lock on exit, so a leftover .sampctl-dependencies.lock file
does not mean an operation is active. Renames require one filesystem. Directory
changes are synced where supported. On Windows, close files blocking promotion
or cleanup, then retry.