{ "module": "searxng", "version": "1", "capabilities": [ "container-runtime" ], "own-secrets": { "secret": { "path": "${dir:mesh-state}/secret", "taken": "at-start" } }, "listens": [ { "name": "web", "port": 8080, "protocol": "tcp", "from": "mesh", "why": "the search pages" } ], "data": { "own": [ { "id": "valkey", "path": "${dir:valkey-data}", "class": "cache", "why": "the search cache" } ] }, "config": { "general": { "type": "object", "description": "SearXNG's general section of settings.yml, laid over the file's own and SearXNG's defaults: the instance's name, contact and debug switches.", "trusted": true, "default": {} }, "brand": { "type": "object", "description": "SearXNG's brand section of settings.yml, laid over the file's own and SearXNG's defaults: the links the pages show for the instance's source, issues and documentation.", "trusted": true, "default": {} }, "search": { "type": "object", "description": "SearXNG's search section of settings.yml, laid over the file's own and SearXNG's defaults: safe search, autocomplete, the result formats offered and how long an engine is suspended after an error.", "trusted": true, "default": { "formats": [ "html", "json" ] } }, "server": { "type": "object", "description": "SearXNG's server section of settings.yml, laid over the file's own and SearXNG's defaults: the public base URL, the request method, the limiter and the image proxy; its secret_key is the vault's.", "trusted": true, "default": { "secret_key": "${secret:secret}", "base_url": false, "limiter": false, "image_proxy": false, "public_instance": false } }, "ui": { "type": "object", "description": "SearXNG's ui section of settings.yml, laid over the file's own and SearXNG's defaults: the theme, the default locale and how results are shown.", "trusted": true, "default": {} }, "outgoing": { "type": "object", "description": "SearXNG's outgoing section of settings.yml, laid over the file's own and SearXNG's defaults: how SearXNG reaches the engines: timeouts, connection pool and proxies.", "trusted": true, "default": {} }, "engines": { "type": "list", "description": "SearXNG's engines section of settings.yml, laid over the file's own and SearXNG's defaults: the engines to add or change, each by its name.", "trusted": true, "default": [] }, "plugins": { "type": "object", "description": "SearXNG's plugins section of settings.yml, laid over the file's own and SearXNG's defaults: the plugins to switch on or off, by their id.", "trusted": true, "default": {} }, "categories_as_tabs": { "type": "object", "description": "SearXNG's categories_as_tabs section of settings.yml, laid over the file's own and SearXNG's defaults: the categories shown as tabs above the results.", "trusted": true, "default": {} }, "preferences": { "type": "object", "description": "SearXNG's preferences section of settings.yml, laid over the file's own and SearXNG's defaults: the preferences a user cannot change (lock).", "trusted": true, "default": {} } }, "resources": [ { "id": "mesh-state", "type": "directory", "mode": "0700", "place": "mesh" }, { "id": "state", "type": "directory", "mode": "0700", "place": "." }, { "id": "valkey-data", "type": "directory", "mode": "0700" }, { "id": "net", "type": "network", "name": "searxng" }, { "id": "cache", "type": "container", "name": "valkey", "image": "valkey/valkey@sha256:b21fd94099dcd4bc6b2b9230daef69b6558b887ad4a2a1afe56ff6e745a88cdb", "network": "searxng", "args": [ "valkey-server", "--save", "30", "1", "--loglevel", "warning" ], "volumes": [ "${dir:valkey-data}:/data" ] }, { "id": "settings", "type": "file", "path": "${dir:state}/settings.yml", "mode": "0600", "merge": "json", "takes-config": [ "general", "brand", "search", "server", "ui", "outgoing", "engines", "plugins", "categories_as_tabs", "preferences" ], "template": "files/settings.yml" }, { "id": "server", "type": "container", "name": "searxng", "image": "searxng/searxng@sha256:cd8812607ab73730a0b1a0dc4990223fe1b9e383f6f35947114d0bef7f8bb441", "network": "searxng", "ports": [ "8080" ], "volumes": [ "${dir:state}/settings.yml:/etc/searxng/settings.yml:ro" ], "restart-on": [ "settings" ] }, { "id": "runtime-config", "type": "file", "path": "${dir:mesh-state}/config.json", "mode": "0600", "template": "files/config.json" } ], "requires": [ "route" ], "contributes": { "route": { "label": "searxng", "endpoint": "web" } }, "binds": { "route": "${dir:state}/route.json" }, "build": { "artifacts": [ { "name": "tools", "kind": "bundle", "language": "typescript", "entrypoints": [ "tools/index.js" ], "loads": [ "tools/index.js" ], "env": { "MESH_SEARXNG_URL": "http://127.0.0.1:${port:8080}", "MESH_SEARXNG_CONFIG_FILE": "${dir:mesh-state}/config.json" } }, { "name": "files", "kind": "archive", "from": "files" } ] } }