Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Local filesystem attachment storage for Eliza agents. This is the default
fallback storage backend used when Eliza Cloud storage is not connected.
The plugin registers a Service under ServiceType.REMOTE_FILES so consumers
that previously read from runtime.getService(ServiceType.REMOTE_FILES) keep
working without code changes after the deprecated @elizaos/plugin-s3-storage
package was removed.
Storage root
The root directory is resolved in this order:
runtime.getSetting("LOCAL_STORAGE_PATH")
process.env.LOCAL_STORAGE_PATH
<resolveStateDir()>/attachments — resolveStateDir() from @elizaos/core honors ELIZA_STATE_DIR, then $XDG_STATE_HOME/<namespace>, then ~/.local/state/<namespace> (namespace defaults to eliza).
The directory is created on start() if missing.
Surface
LocalFileStorageService exposes the same method names as the removed
AwsS3Service so call sites can be retargeted with no refactor:
generateSignedUrl(fileName, _expiresIn?) — returns a file:// absolute path
_unusedBucket parameters exist purely for drop-in API compatibility with
the previous S3 service. They are ignored — keys always resolve under the
configured storage root.
Usage
Add @elizaos/plugin-local-storage to an agent's plugin list (it is opt-in,
not globally auto-enabled). The default export localStoragePlugin registers
LocalFileStorageService and nothing else — no actions, providers, evaluators,
routes, or events. Resolve the service with
runtime.getService(ServiceType.REMOTE_FILES).
generateSignedUrl returns a permanent file:// path, not an expiring URL. If
you need a public or expiring URL, route attachment storage through Eliza Cloud
instead.