Skip to main content

spin_capabilities/
lib.rs

1pub use deny::apply_deny_adapter;
2mod deny;
3
4/// Specifies which host capabilities a component dependency is allowed to inherit
5/// from its parent component.
6///
7/// When a dependency is composed into a parent component, it may need access to
8/// host-provided interfaces such as networking, key-value stores, or environment
9/// variables. This enum controls which of those capability sets are "allowed through"
10/// (i.e. not denied by the deny adapter).
11pub enum InheritConfiguration {
12    /// Inherit all capabilities from the parent component.
13    All,
14    /// Inherit no capabilities; the deny adapter blocks every host interface.
15    None,
16    /// Inherit only the named capability sets (e.g. `"allowed_outbound_hosts"`,
17    /// `"key_value_stores"`). Unrecognized names are silently ignored.
18    Some(Vec<String>),
19}
20
21const CAPABILITY_SETS: &[(&str, &[&str])] = &[
22    ("ai_models", AI_MODELS),
23    ("allowed_outbound_hosts", ALLOWED_OUTBOUND_HOSTS),
24    ("environment", ENVIRONMENT),
25    ("files", FILES),
26    ("key_value_stores", KEY_VALUE_STORES),
27    ("sqlite_databases", SQLITE_DATABASES),
28    ("variables", VARIABLES),
29];
30
31const AI_MODELS: &[&str] = &["fermyon:spin/llm", "fermyon:spin/llm@2.0.0"];
32
33const ALLOWED_OUTBOUND_HOSTS: &[&str] = &[
34    "fermyon:spin/http",
35    "fermyon:spin/mysql",
36    "fermyon:spin/postgres",
37    "fermyon:spin/redis",
38    "fermyon:spin/mqtt@2.0.0",
39    "fermyon:spin/mysql@2.0.0",
40    "fermyon:spin/postgres@2.0.0",
41    "fermyon:spin/redis@2.0.0",
42    "spin:mqtt/mqtt@3.0.0",
43    "spin:mysql/mysql@3.0.0",
44    "spin:postgres/postgres@3.0.0",
45    "spin:postgres/postgres@4.2.0",
46    "spin:redis/redis@3.0.0",
47    "wasi:http/client@0.3.0",
48    "wasi:http/client@0.3.0-rc-2026-03-15",
49    "wasi:http/outgoing-handler@0.2.6",
50    "wasi:sockets/ip-name-lookup@0.2.6",
51    "wasi:sockets/ip-name-lookup@0.3.0",
52    "wasi:sockets/ip-name-lookup@0.3.0-rc-2026-03-15",
53    "wasi:sockets/tcp-create-socket@0.2.6",
54    "wasi:sockets/tcp@0.2.6",
55    "wasi:sockets/udp-create-socket@0.2.6",
56    "wasi:sockets/udp@0.2.6",
57];
58
59const ENVIRONMENT: &[&str] = &[
60    "wasi:cli/environment@0.2.6",
61    "wasi:cli/environment@0.3.0",
62    "wasi:cli/environment@0.3.0-rc-2026-03-15",
63];
64
65const FILES: &[&str] = &[
66    "wasi:filesystem/preopens@0.2.6",
67    "wasi:filesystem/preopens@0.3.0",
68    "wasi:filesystem/preopens@0.3.0-rc-2026-03-15",
69];
70
71const KEY_VALUE_STORES: &[&str] = &[
72    "fermyon:spin/key-value",
73    "fermyon:spin/key-value@2.0.0",
74    "spin:key-value/key-value@3.0.0",
75    "wasi:keyvalue/store@0.2.0-draft2",
76];
77
78const SQLITE_DATABASES: &[&str] = &[
79    "fermyon:spin/sqlite",
80    "fermyon:spin/sqlite@2.0.0",
81    "spin:sqlite/sqlite@3.1.0",
82];
83
84const VARIABLES: &[&str] = &[
85    "fermyon:spin/config",
86    "fermyon:spin/variables@2.0.0",
87    "spin:variables/variables@3.0.0",
88    "wasi:config/store@0.2.0-draft-2024-09-27",
89];