# Include and remote content
`include` splits a large tree across files. Local paths are **always** resolved from the directory selected by `jan use`. Absolute paths, `..` components, and symlink escapes out of that root are rejected both at load time and by `jan bundle`.
## Root-level include
A list merges top-level command maps from other files:
```yaml
include:
- fragments/extra.yaml
- path: fragments/pinned.yaml
sha256: <64-hex> # optional local pin
- url: https://example.com/shared.yaml
sha256: <64-hex> # required for remote
ttl: 86400 # optional
commands:
local:
about: Defined in this file
```
## Per-command include
Grafts a file as that command's subtree (YAML) or as an exec leaf (any other extension).
```yaml
commands:
git:
include: default/git.yaml # YAML subtree (unhashed)
pinned:
include:
path: default/git.yaml
sha256: <64-hex> # optional local pin
shared:
include:
url: https://example.com/git.yaml
sha256: <64-hex>
basename:
about: Print last path component
commands:
run:
include:
path: scripts/files/basename.sh # script → exec leaf
argv: [bash] # optional interpreter prefix
passthrough: true
```
After load, jan retains the include as a link on the node (`jan show` prints `source:`). `jan validate` re-checks any declared local hashes. `jan bundle` packs linked script files along with YAML.
Local includes do **not** require a hash (convenient while editing). Remote includes still require HTTPS + `sha256`.
## Remote object cache
| Cache root | `$JAN_CACHE_DIR` or `~/.cache/jan` |
| Objects | `…/objects/` (scripts and YAML includes) |
| Trees | `…/trees/<sha256>/` (remote `jan use` bundles) |
| TTL | 86400 seconds (24h); per-include / `exec.url` `ttl` overrides |
| Max download | 20 MiB |
| Timeout | 20 seconds |
| HTTP | Denied unless `JAN_ALLOW_HTTP` or `--allow-http` |
Hashes are 64-character hex. A mismatch fails closed.
## Remote `jan use`
```bash
jan use https://example.com/scripts-jan.zip --sha256 <64-hex>
```
The URL must be a jan **bundle zip** (same layout as `jan bundle`). After verification, the tree is cached under `~/.cache/jan/trees/<sha256>/` and that path is preferred. Config records `source-url` and `source-sha256` (`jan use --show`).
`jan bundle` **fails** if the tree contains remote includes — vendor YAML locally first so bundles stay self-contained.