Statically detectable package capabilities
Like capslock but for detecting capabilites in package metadata and archive structure rather than callgraph analysis.
- C extensions declared (
extensionsfield in gemspec) - Extension build files present (
extconf.rb,mkrf_conf.rb,Rakefilelisted as extension) - Rust extension indicators (
Cargo.tomlin archive,rb_sysin runtime/dev deps) - Precompiled native gem (platform field ≠
ruby:-x86_64-linux,-arm64-darwin, etc.) - Executables declared (
executablesfield in gemspec,bin/orexe/directory) - Post-install message (
post_install_messagefield set) - FFI usage intent (
ffigem in dependencies) - Shared libraries in archive (
.so,.bundlefile presence) - Required Ruby version constraints (informational)
-
setup.pypresent in sdist (arbitrary code at build) -
setup.cfgpresent -
pyproject.tomlbuild backend (standard: setuptools/hatchling/flit/poetry/pdm; non-standard flagged) - Rust build backend (
maturin,setuptools-rustas backend or in build-requires) - C/Fortran extension intent (build-requires including
cython,pybind11,numpy) - Wheel with native binaries (
.so,.pyd,.dylibfile presence in wheel) - Platform-specific wheel (wheel tag ≠
py3-none-any: manylinux, musllinux, macosx, win) - Console script entry points (
[project.scripts]orconsole_scripts) - GUI script entry points (
[project.gui-scripts]orgui_scripts) - Arbitrary entry point groups (plugin injection into other packages)
- sdist vs wheel-only availability (sdist = consumer will execute build code)
- FFI intent (
cffi,ctypes-using deps declared) -
no-build-isolationrequired (inpyproject.tomlor setuptools config)
- Lifecycle scripts declared (
preinstall,install,postinstall,prepare,prepublish,prepublishOnly) -
binentries (shell-accessible executables) - Native build config (
binding.gyppresent in archive) -
node-gypas dev/runtime dep - Prebuilt binary downloaders (
node-pre-gyp,@mapbox/node-pre-gyp,prebuild-install,node-gyp-buildin deps) -
.nodefiles in archive (prebuilt native addons) - WASM files in archive (
.wasm) -
napi-rs/@napi-rs/*in deps (Rust native addon intent) -
optionalDependencieswithos/cpufields (platform-specific binary package pattern) - Platform/arch constraints on the package itself (
os,cpufields) - Executable bit set on files in tarball
- Shell scripts in archive (shebang files)
-
filesfield omitted or overly broad (ships more than intended)
-
go.modpresent (module declaration) -
replacedirectives ingo.mod(non-standard source redirection) - Assembly files in module (
.spresence) - C source files in module (
.c,.hpresence alongside Go — cgo indicator) -
//go:build cgoor// +build cgobuild tags (file-level, detectable from file listing with constraint parsing) -
cmd/directory structure (binary targets) - Main package indicators (file listing with likely
main.goentries)
-
build.rspresent in crate -
linksfield inCargo.toml(native library linkage) -
-syscrate naming convention -
[[bin]]targets declared -
proc-macro = truein[lib](compile-time execution in every dependent) - C/C++ source files shipped in crate (
.c,.cpp,.hpresence) - Build-dependencies on native-tool crates (
cc,bindgen,cmake,pkg-config,cxx-build) -
[package.metadata.docs.rs]features (informational) - Binary targets alongside library
- Native libraries in JAR (
.so,.dylib,.dll,.jnilibentries) -
Main-Classattribute inMANIFEST.MF - Service loader entries (
META-INF/services/*) - Annotation processor declared (
META-INF/services/javax.annotation.processing.Processor) - Maven plugin packaging (
<packaging>maven-plugin</packaging>) - Gradle plugin markers (
META-INF/gradle-plugins/*.properties) - Nested JARs (JAR contains
.jarentries — shaded/fat indicator) - Native library loader hints (
META-INF/native-image/) - Classpath entries in manifest (
Class-Pathattribute)
- Install/uninstall PowerShell scripts (
tools/install.ps1,uninstall.ps1,init.ps1) - MSBuild targets/props (
build/*.targets,build/*.props,buildMultiTargeting/*) - Native binaries in
runtimes/folders (.so,.dylib,.dll) -
tools/folder presence (global tool or embedded executable) -
contentFiles/presence (copied into consumer projects) -
analyzers/folder presence (source generators / analyzers executing at compile time) - Package type (
packageTypesin nuspec:Dependency,DotnetTool,Template) - Development dependency flag
- Scripts in
composer.json(post-install-cmd,post-update-cmd,post-autoload-dump, etc.) - Custom installer type (
typefield ≠library) -
binentries - PHP extension requirements (
ext-*inrequire) -
autoload.files(files executed on autoload, not just class resolution) - Composer plugin (
type: composer-plugin— extends Composer itself)
- System library targets declared
- Binary targets (
.binaryTargetwith.xcframeworkor remote URL) - Plugin targets (
.plugin— build tool plugins, command plugins) - C/C++/Objective-C target types (
.targetwith C-family sources) -
unsafeFlagsusage in manifest - Executable targets (
.executableTarget)
-
c_src/directory presence (NIF indicator) -
Makefilein package root -
:elixir_makeor:makeas compiler inmix.exs - Rustler usage (
rustlerin deps,native/directory) - Mix task modules (files under
lib/mix/tasks/) - Escripts declared (
escriptconfig inmix.exs) - Applications list (
:included_applications— auto-starts dependencies)
-
build-type: Customin.cabal(usesSetup.hswith arbitrary code) - C sources declared (
c-sources,cxx-sources,include-dirs,extra-libraries) - Executable stanzas in
.cabal -
hs-source-dirscovering non-standard locations - Flag-driven conditional code (
flagsections)
-
src/directory present (compiled code) -
configure/configure.win/cleanupscripts present -
NeedsCompilation: yesin DESCRIPTION -
SystemRequirementsfield (external native deps) -
Makevars/Makevars.in/Makevars.winpresent -
inst/directory contents (arbitrary shipped files)
- Platform plugin directories (
ios/,android/,macos/,windows/,linux/with native code) -
build_runner/ codegen deps declared - Native libraries per platform in archive
- Executables declared (
executablesin pubspec) - Plugin declaration in pubspec (
flutter.pluginsection) - Platform constraints
-
build:commands in opam file (arbitrary shell at build) -
install:commands in opam file -
remove:commands in opam file - C stubs declared (
.cfiles in archive,dunestanzas withc_library_flagsorforeign_stubs) - PPX preprocessor (
ppx_*naming,kind: ppx_rewriterin dune-project) - External system deps (
depexts:field)
-
Makefile.PLpresent (arbitrary Perl at build) -
Build.PLpresent (Module::Build) - XS code (
.xsfiles — C extension indicator) -
META.json/META.ymlwith customconfigure_requires - Executable scripts (
bin/,script/directories)
-
build.typein rockspec (builtin,make,cmake,command,module) -
build.install.bin(installed executables) - C modules declared (
build.moduleswith sources) - External dependencies (
external_dependencies)
-
deps/build.jlpresent (arbitrary code at build) - Binary artifacts via
Artifacts.toml/JLLWrappers - Native library wrappers (
_jllpackage naming) -
Project.tomlwith[compat]pinning
- Maintainer scripts present (
preinst,postinst,prerm,postrm,config) - Triggers declared
- setuid/setgid files in package
- systemd unit files shipped
- File capabilities (
getcap-visible) declared
- ELF binaries shipped (magic number check)
- Mach-O binaries shipped (magic number check)
- PE binaries shipped (magic number check)
- Shared libraries by extension (
.so,.dylib,.dll,.jnilib) - WASM modules (magic number
\0asm) - Shell scripts (files with shebang — detectable from first bytes)
- Files with executable bit set in archive
- Symlinks in archive (especially relative paths escaping root)
- Archive-in-archive (nested tarballs, zips, jars)
- Files outside expected package layout for the ecosystem
- Files above size threshold (binary blob heuristic)
- Total archive size / file count outliers
- Unusual file types for the ecosystem (e.g.
.exein a pure-Ruby gem)
- Executes code at install time (lifecycle scripts, opam install:, composer scripts, NuGet ps1)
- Executes code at build time (build.rs, setup.py, Setup.hs custom, extconf.rb, c_src + Makefile)
- Executes code in consumer's build (proc-macros, annotation processors, PPX, MSBuild targets, source generators, Mix tasks, Composer plugins, Gradle plugins)
- Ships precompiled native binaries (wheel/gem platform tags,
.nodefiles,.so/.dylib/.dllin archive, NuGet runtimes/) - Registers shell commands (
binacross ecosystems,executables,console_scripts) - Declares FFI intent (
ffigem,cffi/ctypesin Python,-syscrates, Go cgo, XS, NIFs) - Contains WASM
- Platform-specific (non-portable)
- Extends the consumer's build toolchain (plugins for the build system itself)
- Ships executable files of any kind