[server]
# Can also be specified via environment variable `KNOT_HOSTNAME`.
# Required! This value must be specified.
#hostname =
# Can also be specified via environment variable `KNOT_ADMINS`.
# Required! This value must be specified.
#admins =
# Can also be specified via environment variable `KNOT_LISTEN_ADDR`.
# Default value: "[::]:5555"
#listen_addr = "[::]:5555"
# Can also be specified via environment variable `KNOT_LISTEN_HEADER_TIMEOUT_MS`.
# Default value: 10000
#listen_header_timeout_ms = 10000
# Can also be specified via environment variable `KNOT_LISTEN_IDLE_TIMEOUT_MS`.
# Default value: 60000
#listen_idle_timeout_ms = 60000
# Can also be specified via environment variable `KNOT_LISTEN_MAX_CONNECTIONS`.
# Default value: 1024
#listen_max_connections = 1024
# Can also be specified via environment variable `KNOT_LISTEN_RATE_LIMIT_PER_SECOND`.
# Default value: 50
#listen_rate_limit_per_second = 50
# Can also be specified via environment variable `KNOT_LISTEN_RATE_LIMIT_BURST`.
# Default value: 200
#listen_rate_limit_burst = 200
# Can also be specified via environment variable `KNOT_LISTEN_MAX_INFLIGHT_REQUESTS`.
# Default value: 1024
#listen_max_inflight_requests = 1024
# Can also be specified via environment variable `KNOT_LISTEN_REQUEST_TIMEOUT_MS`.
# Default value: 60000
#listen_request_timeout_ms = 60000
# Can also be specified via environment variable `KNOT_LISTEN_BODY_TIMEOUT_MS`.
# Default value: 30000
#listen_body_timeout_ms = 30000
# Can also be specified via environment variable `KNOT_LISTEN_WRITE_REQUEST_TIMEOUT_MS`.
# Default value: 1800000
#listen_write_request_timeout_ms = 1800000
# Can also be specified via environment variable `KNOT_INTERNAL_LISTEN_ADDR`.
# Default value: "[::1]:5444"
#internal_listen_addr = "[::1]:5444"
# Can also be specified via environment variable `KNOT_SSH_LISTEN_ADDR`.
# Default value: "[::]:2222"
#ssh_listen_addr = "[::]:2222"
# Can also be specified via environment variable `KNOT_SSH_HOST_KEY_FILE`.
# Required! This value must be specified.
#ssh_host_key_file =
# Can also be specified via environment variable `KNOT_SSH_MAX_PACK_BYTES`.
# Default value: 8589934592
#ssh_max_pack_bytes = 8589934592
# Maximum number of SSH git operations that one client address can run at the same time.
#
# Can also be specified via environment variable `KNOT_SSH_MAX_INFLIGHT_PER_PEER`.
#
# Default value: 4
#ssh_max_inflight_per_peer = 4
# Addresses allowed to prefix an ssh connection with a PROXY protocol v1 header,
# each a bare IP without a port or a CIDR block,
# for ex the address of a TCP proxy such as nginx `stream` with `proxy_protocol on`.
# The knot will rate-limit the connection by the source address in the header.
# The knot never reads the header from any other address.
#
# Can also be specified via environment variable `KNOT_SSH_PROXY_PROTOCOL_FROM`.
#
# Default value: []
#ssh_proxy_protocol_from = []
# Can also be specified via environment variable `KNOT_APPVIEW_ENDPOINT`.
# Default value: "https://tangled.org"
#appview_endpoint = "https://tangled.org"
[tls]
# Can also be specified via environment variable `KNOT_TLS_CERT_PATH`.
#cert_path =
# Can also be specified via environment variable `KNOT_TLS_KEY_PATH`.
#key_path =
# Can also be specified via environment variable `KNOT_TLS_HTTP3`.
# Default value: true
#http3 = true
# Can also be specified via environment variable `KNOT_TLS_ACME_ENABLED`.
# Default value: false
#acme_enabled = false
# Can also be specified via environment variable `KNOT_TLS_ACME_CACHE_DIR`.
#acme_cache_dir =
# Can also be specified via environment variable `KNOT_TLS_ACME_CONTACT`.
#acme_contact =
# Can also be specified via environment variable `KNOT_TLS_ACME_STAGING`.
# Default value: false
#acme_staging = false
# Can also be specified via environment variable `KNOT_TLS_MTLS_ENABLED`.
# Default value: false
#mtls_enabled = false
# Can also be specified via environment variable `KNOT_TLS_MTLS_CLIENT_CA_PATH`.
#mtls_client_ca_path =
# Can also be specified via environment variable `KNOT_TLS_MTLS_ADMIN_SPKI_PIN`.
#mtls_admin_spki_pin =
[acl]
# Can also be specified via environment variable `KNOT_ADMISSION`.
# Default value: "closed"
#admission = "closed"
# Can also be specified via environment variable `KNOT_LEGACY_ADMIN_SECRET_ENV`.
#legacy_admin_secret_env =
[repo]
# Can also be specified via environment variable `KNOT_SCAN_PATH`.
# Required! This value must be specified.
#scan_path =
# Can also be specified via environment variable `KNOT_DEFAULT_BRANCH`.
# Default value: "main"
#default_branch = "main"
# Can also be specified via environment variable `KNOT_CONTRIBUTION_POLICY`.
# Default value: "anyone"
#contribution_policy = "anyone"
# Can also be specified via environment variable `KNOT_REPO_WRITE_BURST`.
# Default value: 30
#write_burst = 30
# Can also be specified via environment variable `KNOT_REPO_WRITE_REFILL_MS`.
# Default value: 500
#write_refill_ms = 500
[git]
# Can also be specified via environment variable `KNOT_GIT_OBJECT_FORMAT`.
# Default value: "sha256"
#object_format = "sha256"
[secrets]
# Can also be specified via environment variable `KNOT_SEALED_KEY_FILE`.
# Required! This value must be specified.
#sealed_key_file =
# Can also be specified via environment variable `KNOT_MASTER_KEY_ENV`.
# Required! This value must be specified.
#master_key_env =
[http]
# Can also be specified via environment variable `KNOT_HTTP_CONNECT_TIMEOUT_MS`.
# Default value: 5000
#connect_timeout_ms = 5000
# Can also be specified via environment variable `KNOT_HTTP_READ_TIMEOUT_MS`.
# Default value: 30000
#read_timeout_ms = 30000
# Can also be specified via environment variable `KNOT_HTTP_REQUEST_TIMEOUT_MS`.
# Default value: 60000
#request_timeout_ms = 60000
# Can also be specified via environment variable `KNOT_HTTP_MAX_RESPONSE_BYTES`.
# Default value: 16777216
#max_response_bytes = 16777216
# Can also be specified via environment variable `KNOT_HTTP_BLOCK_PRIVATE_ADDRESSES`.
# Default value: true
#block_private_addresses = true
[atproto]
# Can also be specified via environment variable `KNOT_PLC_DIRECTORY`.
# Required! This value must be specified.
#plc_directory =
# How many PLC documents the reconciler sweep checks against the directory concurrently.
#
# Can also be specified via environment variable `KNOT_PLC_SWEEP_WIDTH`.
#
# Default value: 1
#plc_sweep_width = 1
# An archive of the per-repo signing keys,
# that gotta get squished into the canonical key store here
# at knot start time.
# If unset, the knot will attempt just `repo-signing-keys.json`
# next to `secrets.sealed_key_file` if that file exists too.
#
# Can also be specified via environment variable `KNOT_REPO_SIGNING_KEYS`.
#repo_signing_keys =
# Relays that get a com.atproto.sync.requestCrawl for this knot on startup.
#
# Can also be specified via environment variable `KNOT_CRAWLERS`.
#
# Default value: ["https://index.tangled.network", "https://relay.fire.hose.cam", "https://relay3.fr.hose.cam", "https://bsky.network", "https://northamerica.firehose.network", "https://europe.firehose.network", "https://asia.firehose.network", "https://atproto.africa", "https://relay.upcloud.world"]
#crawlers = ["https://index.tangled.network", "https://relay.fire.hose.cam", "https://relay3.fr.hose.cam", "https://bsky.network", "https://northamerica.firehose.network", "https://europe.firehose.network", "https://asia.firehose.network", "https://atproto.africa", "https://relay.upcloud.world"]
[xrpc]
# Can also be specified via environment variable `KNOT_XRPC_MAX_BODY_BYTES`.
# Default value: 65536
#max_body_bytes = 65536
# Can also be specified via environment variable `KNOT_XRPC_MAX_RESPONSE_BYTES`.
# Default value: 5242880
#max_response_bytes = 5242880
# Upper bound on bytes that a single archive spools,
# across all our surfaces: the org.tangled.git.getArchive query,
# `git archive --remote` over SSH,
# and the smart HTTP archive route.
# The knot will refuse writing smth that would blast an archive past this bound.
#
# Can also be specified via environment variable `KNOT_XRPC_MAX_ARCHIVE_BYTES`.
#
# Default value: 1073741824
#max_archive_bytes = 1073741824
# Can also be specified via environment variable `KNOT_XRPC_TREE_LAST_COMMIT_BUDGET_MS`.
# Default value: 300
#tree_last_commit_budget_ms = 300
# Can also be specified via environment variable `KNOT_XRPC_BLOB_LAST_COMMIT_BUDGET_MS`.
# Default value: 2000
#blob_last_commit_budget_ms = 2000
# Can also be specified via environment variable `KNOT_XRPC_LANGUAGES_BUDGET_MS`.
# Default value: 1000
#languages_budget_ms = 1000
# Body limit for the seedRepo procedure, whose record batches routinely
# exceed the general XRPC body limit.
#
# Can also be specified via environment variable `KNOT_XRPC_MAX_PATCH_BYTES`.
#
# Default value: 16777216
#max_patch_bytes = 16777216
# Limit on the total decompressed size of a patch the merge procedures parse,
# bounding binary-delta inflation and hunk expansion apart from the
# compressed body limit above.
#
# Can also be specified via environment variable `KNOT_XRPC_MAX_PATCH_DECOMPRESSED_BYTES`.
#
# Default value: 134217728
#max_patch_decompressed_bytes = 134217728
# Can also be specified via environment variable `KNOT_XRPC_PREAUTH_BURST`.
# Default value: 20
#preauth_burst = 20
# Can also be specified via environment variable `KNOT_XRPC_PREAUTH_REFILL_MS`.
# Default value: 100
#preauth_refill_ms = 100
# Can also be specified via environment variable `KNOT_XRPC_PER_PEER_INFLIGHT`.
# Default value: 8
#per_peer_inflight = 8
# Can also be specified via environment variable `KNOT_XRPC_GLOBAL_INFLIGHT`.
# Default value: 64
#global_inflight = 64
# Can also be specified via environment variable `KNOT_XRPC_MAX_PENDING_RESERVATIONS`.
# Default value: 256
#max_pending_reservations = 256
# Per-account limit on reserved repository keys awaiting creation, so one
# account cannot consume the whole pending-reservation budget.
#
# Can also be specified via environment variable `KNOT_XRPC_PER_ACTOR_RESERVATIONS`.
#
# Default value: 32
#per_actor_reservations = 32
# How long a reserved repository key is held before it lapses and its
# sealed key is reclaimed, in seconds.
#
# Can also be specified via environment variable `KNOT_XRPC_RESERVATION_TTL_SECS`.
#
# Default value: 3600
#reservation_ttl_secs = 3600
# Can also be specified via environment variable `KNOT_XRPC_FORK_MAX_PACK_BYTES`.
# Default value: 1073741824
#fork_max_pack_bytes = 1073741824
# Can also be specified via environment variable `KNOT_XRPC_IMPORT_MAX_PACK_BYTES`.
# Default value: 268435456
#import_max_pack_bytes = 268435456
# Can also be specified via environment variable `KNOT_XRPC_FORK_FETCH_TIMEOUT_MS`.
# Default value: 600000
#fork_fetch_timeout_ms = 600000
# When the knot runs behind a trusted reverse proxy that terminates TLS,
# set this to the header the proxy appends the client address to,
# for example x-forwarded-for.
# The knot will read the chain right -> left
# and take the first entry that `trusted_proxies` doesn't cover.
# Leave unset when the knot is directly exposed so the socket peer address is used.
# Only set this when a trusted proxy overwrites or appends the header,
# since a client can forge it otherwise.
#
# Can also be specified via environment variable `KNOT_XRPC_TRUSTED_PROXY_HEADER`.
#trusted_proxy_header =
# Addresses whose `trusted_proxy_header` the knot honors,
# each a bare IP without a port or a CIDR block such as 173.245.48.0/20,
# for ex the loopback address of a reverse proxy on the same host.
# The knot will rate-limit a request from any other address
# by its own socket address and ignore the header.
# These same addresses are hops the knot will iterate over when it reads
# the header, so list every proxy you control in the path.
# A proxy that the knot doesn't know about becomes the entry it keys on,
# and everyone that proxy serves will then share one rate-limit bucket.
# The knot will read the last 32 entries of the chain, at most.
# When the list covers all 32, the knot
# will rate-limit by the address the request connected from.
# Leave empty to honor the header from every peer and take its rightmost
# entry, which is safe *only* while every route to this knot passes
# through the proxy.
#
# Can also be specified via environment variable `KNOT_XRPC_TRUSTED_PROXIES`.
#
# Default value: []
#trusted_proxies = []
# Can also be specified via environment variable `KNOT_XRPC_EVENTS_REPLAY_BUFFER`.
# Default value: 4096
#events_replay_buffer = 4096
# Can also be specified via environment variable `KNOT_XRPC_EVENTS_REPLAY_BYTES`.
# Default value: 67108864
#events_replay_bytes = 67108864
# Can also be specified via environment variable `KNOT_XRPC_EVENTS_MAX_SUBSCRIBERS`.
# Default value: 256
#events_max_subscribers = 256
# Can also be specified via environment variable `KNOT_XRPC_EVENTS_MAX_PER_PEER`.
# Default value: 8
#events_max_per_peer = 8
[maintenance]
# Can also be specified via environment variable `KNOT_MAINTENANCE_ENABLED`.
# Default value: true
#enabled = true
# Can also be specified via environment variable `KNOT_MAINTENANCE_COMMIT_GRAPH`.
# Default value: true
#commit_graph = true
# Can also be specified via environment variable `KNOT_MAINTENANCE_MULTI_PACK_INDEX`.
# Default value: true
#multi_pack_index = true
# Can also be specified via environment variable `KNOT_MAINTENANCE_BITMAP`.
# Default value: true
#bitmap = true
# Can also be specified via environment variable `KNOT_MAINTENANCE_INTERVAL_SECS`.
# Default value: 21600
#interval_secs = 21600
# Can also be specified via environment variable `KNOT_MAINTENANCE_REPACK_MAX_OBJECTS`.
# Default value: 16000000
#repack_max_objects = 16000000
# Can also be specified via environment variable `KNOT_MAINTENANCE_REPACK_GEOMETRIC_FACTOR`.
# Default value: 2
#repack_geometric_factor = 2
# Can also be specified via environment variable `KNOT_MAINTENANCE_REPACK_LOOSE_THRESHOLD`.
# Default value: 6700
#repack_loose_threshold = 6700
# Can also be specified via environment variable `KNOT_MAINTENANCE_PRUNE_GRACE_SECS`.
# Default value: 1209600
#prune_grace_secs = 1209600
# Can also be specified via environment variable `KNOT_MAINTENANCE_FULL_REPACK_INTERVAL_SECS`.
# Default value: 432000
#full_repack_interval_secs = 432000
# Can also be specified via environment variable `KNOT_MAINTENANCE_REFLOG_EXPIRE_SECS`.
# Default value: 7776000
#reflog_expire_secs = 7776000
# Can also be specified via environment variable `KNOT_MAINTENANCE_LARGE_PUSH_BYTES`.
# Default value: 52428800
#large_push_bytes = 52428800
[pack_cache]
# Can also be specified via environment variable `KNOT_PACK_CACHE_ENABLED`.
# Default value: true
#enabled = true
# Can also be specified via environment variable `KNOT_PACK_CACHE_TTL_SECS`.
# Default value: 60
#ttl_secs = 60
# Can also be specified via environment variable `KNOT_PACK_CACHE_MAX_ENTRY_BYTES`.
# Default value: 67108864
#max_entry_bytes = 67108864
# Can also be specified via environment variable `KNOT_PACK_CACHE_MAX_TOTAL_BYTES`.
# Default value: 2147483648
#max_total_bytes = 2147483648
[pack]
# Can also be specified via environment variable `KNOT_PACK_MAX_OBJECTS`.
# Default value: 16000000
#max_objects = 16000000
# Can also be specified via environment variable `KNOT_PACK_MAX_TOTAL_BYTES`.
# Default value: 68719476736
#max_total_bytes = 68719476736
# Can also be specified via environment variable `KNOT_PACK_SELECTION_MAX_OBJECTS`.
# Default value: 16000000
#selection_max_objects = 16000000
# Can also be specified via environment variable `KNOT_PACK_SELECTION_TIME_BUDGET_SECS`.
# Default value: 600
#selection_time_budget_secs = 600
[lfs]
# Can also be specified via environment variable `KNOT_LFS_STORE_PATH`.
# Required! This value must be specified.
#store_path =
# Can also be specified via environment variable `KNOT_LFS_MAX_OBJECT_BYTES`.
# Default value: 5368709120
#max_object_bytes = 5368709120
# Can also be specified via environment variable `KNOT_LFS_FREE_SPACE_FLOOR_BYTES`.
# Default value: 1073741824
#free_space_floor_bytes = 1073741824
# Can also be specified via environment variable `KNOT_LFS_GC_GRACE_SECS`.
# Default value: 1209600
#gc_grace_secs = 1209600
# Can also be specified via environment variable `KNOT_LFS_GC_INTERVAL_SECS`.
# Default value: 21600
#gc_interval_secs = 21600
# Can also be specified via environment variable `KNOT_LFS_MAX_SSH_TRANSFERS`.
# Default value: 16
#max_ssh_transfers = 16
# Can also be specified via environment variable `KNOT_LFS_MAX_HTTP_DOWNLOADS`.
# Default value: 64
#max_http_downloads = 64
[social]
# Byte budget over the live record versions of one repository, summed from every atproto collection in the projection.
# An edit swaps the old version's bytes for the new one's, and a delete frees the record's bytes back out of the budget.
# A write past the budget 429s.
#
# Can also be specified via environment variable `KNOT_SOCIAL_REPO_BUDGET_BYTES`.
#
# Default value: 1073741824
#repo_budget_bytes = 1073741824
# The "Foster Knot" from whom this knot will pull "shadowed" records from during a one-time upgrade, at boot time.
# Defaults to the "Tangled production foster knot",
# so there's not much use of it outside this one-time upgrade required
# on 2026-10-28.
# We are sorry for designing our distributed system
# in such a way that warrants what Lewis would call
# "phoning home" but the alternative is that each knot pings
# the entire atproto dataset, trying to hunt down the social records
# that it will be taking on as COBs starting 2026-10-28.
# We have this "Foster Knot" that has not only done this for you
# already, but also shadow-serves these social records on your knot's
# behalf until you upgrade, so there's no perceived incompatibility-time
# for reading on https://tangled.org .
# If you're uncomfortable with this enough that you want to unset this,
# please ping all of atproto to hunt down those social records
# regarding the git repos on this knot, and add them here.
# If this knot is being spun up for the first time and the current
# day is *after* 2026-10-28, please disregard. This
# setting will be gutted once all knots are upgraded.
#
# Can also be specified via environment variable `KNOT_SOCIAL_FOSTER_URL`.
#
# Default value: "https://knot2.mock.tangled.org"
#foster_url = "https://knot2.mock.tangled.org"
# How many handovers that the upgrade of a knot2 at boot-time from a foster knot pull will run concurrently.
#
# Can also be specified via environment variable `KNOT_SOCIAL_FOSTER_BOOT_WIDTH`.
#
# Default value: 4
#foster_boot_width = 4
# The following are for the "foster knot", you don't need to touch.
#
# Can also be specified via environment variable `KNOT_SOCIAL_FOSTER_ACK_SKIP_KNOT_SERVICE`.
#
# Default value: false
#foster_ack_skip_knot_service = false
# Can also be specified via environment variable `KNOT_SOCIAL_FOSTER_ACK_SKIP_ORIGIN_CHECKS`.
# Default value: false
#foster_ack_skip_origin_checks = false
# Can also be specified via environment variable `KNOT_SOCIAL_FOSTER_LIAR_HYDRANT_URL`.
# Default value: ""
#foster_liar_hydrant_url = ""
[keyfill]
# Can also be specified via environment variable `KNOT_KEYFILL_KEY_BUDGET_MIB`.
# Default value: 64
#key_budget_mib = 64
# Can also be specified via environment variable `KNOT_KEYFILL_TTL_SECS`.
# Default value: 3600
#ttl_secs = 3600
# Can also be specified via environment variable `KNOT_KEYFILL_REPRIEVE_RETRY_SECS`.
# Default value: 300
#reprieve_retry_secs = 300
# Can also be specified via environment variable `KNOT_KEYFILL_REPRIEVE_BUDGET_SECS`.
# Default value: 21600
#reprieve_budget_secs = 21600
[resources]
# Can also be specified via environment variable `KNOT_MAX_THREADS`.
# Default value: 0
#max_threads = 0
# Can also be specified via environment variable `KNOT_MAX_MEMORY_BYTES`.
# Default value: 0
#max_memory_bytes = 0
[homepage]
# Can also be specified via environment variable `KNOT_HOMEPAGE_ENABLED`.
# Default value: true
#enabled = true
# Can also be specified via environment variable `KNOT_HOMEPAGE_PATH`.
#path =
[links]
# Can also be specified via environment variable `KNOT_LINKS_PRIVACY_POLICY`.
#privacy_policy =
# Can also be specified via environment variable `KNOT_LINKS_TERMS_OF_SERVICE`.
#terms_of_service =
[contact]
# Can also be specified via environment variable `KNOT_CONTACT_EMAIL`.
# Required! This value must be specified.
#email =
[messages]
[messages.push]
# Can also be specified via environment variable `KNOT_MESSAGES_PUSH_ACK`.
# Default value: ["{knot} received {refs}."]
#ack = ["{knot} received {refs}."]
# Can also be specified via environment variable `KNOT_MESSAGES_PUSH_PULL_REQUEST`.
# Default value: ["", "-> Open pull request for this branch:", " {url}", ""]
#pull_request = ["", "-> Open pull request for this branch:", " {url}", ""]
# Can also be specified via environment variable `KNOT_MESSAGES_PUSH_PIPELINE_CLEAN`.
# Default value: ["pipeline compiled with no diagnostics"]
#pipeline_clean = ["pipeline compiled with no diagnostics"]
# Can also be specified via environment variable `KNOT_MESSAGES_PUSH_PIPELINE_NONE`.
# Default value: ["no pipelines to compile"]
#pipeline_none = ["no pipelines to compile"]
[messages.fetch]
# Can also be specified via environment variable `KNOT_MESSAGES_FETCH_MOTD`.
# Default value: ["Thanks for using {knot}!"]
#motd = ["Thanks for using {knot}!"]
# Can also be specified via environment variable `KNOT_MESSAGES_FETCH_ENUMERATING`.
# Default value: ["Enumerating objects: {count}, done."]
#enumerating = ["Enumerating objects: {count}, done."]
# Can also be specified via environment variable `KNOT_MESSAGES_FETCH_TOTAL`.
# Default value: ["Total {count}, done."]
#total = ["Total {count}, done."]
# Can also be specified via environment variable `KNOT_MESSAGES_FETCH_FATAL`.
# Default value: "knot: {error}"
#fatal = "knot: {error}"
[messages.reject]
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_RESERVED_REFS`.
# Default value: "refs/cobs/*, refs/cob-checkpoints/*, refs/hidden/*, refs/atproto/* and refs/tngl/* are reserved and can't be pushed"
#reserved_refs = "refs/cobs/*, refs/cob-checkpoints/*, refs/hidden/*, refs/atproto/* and refs/tngl/* are reserved and can't be pushed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_COB_CREATE_ONLY`.
# Default value: "existing refs/cobs/* object cannot be modified or deleted over the wire"
#cob_create_only = "existing refs/cobs/* object cannot be modified or deleted over the wire"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_COB_DELETE`.
# Default value: "refs/cobs/* stores append-only collaborative objects and cannot be deleted"
#cob_delete = "refs/cobs/* stores append-only collaborative objects and cannot be deleted"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_HIDDEN_RESERVED`.
# Default value: "refs/hidden/* is reserved and can't be pushed"
#hidden_reserved = "refs/hidden/* is reserved and can't be pushed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_ATPROTO_RESERVED`.
# Default value: "refs/atproto/* is reserved for the knot's atproto commit chain and can't be pushed"
#atproto_reserved = "refs/atproto/* is reserved for the knot's atproto commit chain and can't be pushed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_TNGL_RESERVED`.
# Default value: "refs/tngl/* is reserved for knot-written keep refs and can't be pushed"
#tngl_reserved = "refs/tngl/* is reserved for knot-written keep refs and can't be pushed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_CHECKPOINT_RESERVED`.
# Default value: "refs/cob-checkpoints/* is reserved for knot-written collaborative-object snapshots and can't be pushed"
#checkpoint_reserved = "refs/cob-checkpoints/* is reserved for knot-written collaborative-object snapshots and can't be pushed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_COB_VERIFICATION`.
# Default value: "collaborative-object verification failed: {error}"
#cob_verification = "collaborative-object verification failed: {error}"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_REF_EXISTS`.
# Default value: "reference already exists"
#ref_exists = "reference already exists"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_STALE_OLD_VALUE`.
# Default value: "stale info: old value doesn't match"
#stale_old_value = "stale info: old value doesn't match"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_MISSING_OBJECTS`.
# Default value: "missing necessary objects"
#missing_objects = "missing necessary objects"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_MISSING_OBJECTS_FOR`.
# Default value: "missing necessary objects for {ref}"
#missing_objects_for = "missing necessary objects for {ref}"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_ATOMIC_FAILED`.
# Default value: "atomic transaction failed"
#atomic_failed = "atomic transaction failed"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_ATOMIC_ABORTED`.
# Default value: "atomic push aborted"
#atomic_aborted = "atomic push aborted"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_AUTHORIZATION_UNAVAILABLE`.
# Default value: "authorization unavailable"
#authorization_unavailable = "authorization unavailable"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_UNPACKER_ERROR`.
# Default value: "unpacker error"
#unpacker_error = "unpacker error"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_REF_SNAPSHOT_UNAVAILABLE`.
# Default value: "ref snapshot unavailable"
#ref_snapshot_unavailable = "ref snapshot unavailable"
# Can also be specified via environment variable `KNOT_MESSAGES_REJECT_OBJECT_MIGRATION_FAILED`.
# Default value: "object migration failed"
#object_migration_failed = "object migration failed"
[messages.ssh]
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_GREETING`.
# Default value: ["Hi {user}! You're authenticated to {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>"]
#greeting = ["Hi {user}! You're authenticated to {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>"]
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_GREETING_UNKNOWN`.
# Default value: ["Hi there! This is the {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>", "Publish your ssh key to your atproto account so this knot can identify your pushes.", "Put your handle in the url, as in yourhandle@{knot}:<repoDID>, so your ssh client can find your registered key on its own."]
#greeting_unknown = ["Hi there! This is the {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>", "Publish your ssh key to your atproto account so this knot can identify your pushes.", "Put your handle in the url, as in yourhandle@{knot}:<repoDID>, so your ssh client can find your registered key on its own."]
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_UNSUPPORTED_COMMAND`.
# Default value: "knot: unsupported command"
#unsupported_command = "knot: unsupported command"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_TOO_MANY_OPERATIONS`.
# Default value: "knot: too many concurrent operations from your address, try again shortly"
#too_many_operations = "knot: too many concurrent operations from your address, try again shortly"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_REPO_NOT_FOUND`.
# Default value: "knot: repository not found"
#repo_not_found = "knot: repository not found"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_INDEX_WARMING`.
# Default value: "knot: repository index is warming, retry shortly"
#index_warming = "knot: repository index is warming, retry shortly"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_KEY_NOT_REGISTERED`.
# Default value: "knot: this ssh key doesn't match any key published by the accounts that may push here. Authorized: {authorized}. If your agent offers several keys, add -o IdentitiesOnly=yes so it offers your registered key."
#key_not_registered = "knot: this ssh key doesn't match any key published by the accounts that may push here. Authorized: {authorized}. If your agent offers several keys, add -o IdentitiesOnly=yes so it offers your registered key."
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_IDENTITY_UNAVAILABLE`.
# Default value: "knot: couldn't read the account records needed to check your ssh key, retry shortly"
#identity_unavailable = "knot: couldn't read the account records needed to check your ssh key, retry shortly"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_PUSH_DENIED`.
# Default value: "knot: you aren't authorized to push to this repository."
#push_denied = "knot: you aren't authorized to push to this repository."
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_SHUTTING_DOWN`.
# Default value: "knot: server is shutting down"
#shutting_down = "knot: server is shutting down"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_ARCHIVE_MALFORMED`.
# Default value: "knot: malformed upload-archive request"
#archive_malformed = "knot: malformed upload-archive request"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_ARCHIVE_TIMEOUT`.
# Default value: "knot: upload-archive request timed out"
#archive_timeout = "knot: upload-archive request timed out"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_ARCHIVE_FAILED`.
# Default value: "knot: upload-archive failed"
#archive_failed = "knot: upload-archive failed"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_ADVERTISE_FAILED`.
# Default value: "knot: cannot advertise refs"
#advertise_failed = "knot: cannot advertise refs"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_PUSH_TOO_LARGE`.
# Default value: "knot: push exceeds configured size limit"
#push_too_large = "knot: push exceeds configured size limit"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_RECEIVE_DEADLINE`.
# Default value: "knot: receive exceeded its time budget"
#receive_deadline = "knot: receive exceeded its time budget"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_MALFORMED_PACK`.
# Default value: "knot: malformed pack stream"
#malformed_pack = "knot: malformed pack stream"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_RECEIVE_READ_ERROR`.
# Default value: "knot: receive read error"
#receive_read_error = "knot: receive read error"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_RECEIVE_ENDED_EARLY`.
# Default value: "knot: receive stream ended early"
#receive_ended_early = "knot: receive stream ended early"
# Can also be specified via environment variable `KNOT_MESSAGES_SSH_RECEIVE_FAILED`.
# Default value: "knot: receive-pack failed"
#receive_failed = "knot: receive-pack failed"
[messages.http]
# Can also be specified via environment variable `KNOT_MESSAGES_HTTP_PUSH_DENIED`.
# Default value: "you aren't authorized to push to this repository"
#push_denied = "you aren't authorized to push to this repository"
# Can also be specified via environment variable `KNOT_MESSAGES_HTTP_REPO_NOT_FOUND`.
# Default value: "repository not found"
#repo_not_found = "repository not found"
# Can also be specified via environment variable `KNOT_MESSAGES_HTTP_PUSH_TOO_LARGE`.
# Default value: "push exceeds the configured size limit"
#push_too_large = "push exceeds the configured size limit"
# Can also be specified via environment variable `KNOT_MESSAGES_HTTP_MALFORMED_PACK`.
# Default value: "malformed pack stream: {error}"
#malformed_pack = "malformed pack stream: {error}"
# Can also be specified via environment variable `KNOT_MESSAGES_HTTP_RECEIVE_ENDED_EARLY`.
# Default value: "receive stream ended early"
#receive_ended_early = "receive stream ended early"
[messages.lfs]
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_INVALID_OID`.
# Default value: "invalid LFS oid {value}"
#invalid_oid = "invalid LFS oid {value}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_HASH_MISMATCH`.
# Default value: "oid mismatch, declared {declared}, computed {computed}"
#hash_mismatch = "oid mismatch, declared {declared}, computed {computed}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_SIZE_MISMATCH`.
# Default value: "size mismatch, declared {declared}, received {received}"
#size_mismatch = "size mismatch, declared {declared}, received {received}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_SIZE_LIMIT_EXCEEDED`.
# Default value: "object size {declared} exceeds limit {limit}"
#size_limit_exceeded = "object size {declared} exceeds limit {limit}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_FREE_SPACE_DENIED`.
# Default value: "free space {free} below floor {floor}"
#free_space_denied = "free space {free} below floor {floor}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_NOT_FOUND`.
# Default value: "object {oid} not found"
#not_found = "object {oid} not found"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_FRAMING`.
# Default value: "protocol framing fault: {detail}"
#framing = "protocol framing fault: {detail}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_TOO_MANY`.
# Default value: "too many {what} in one message, limit {limit}"
#too_many = "too many {what} in one message, limit {limit}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_UNKNOWN_COMMAND`.
# Default value: "unknown command {command}"
#unknown_command = "unknown command {command}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_UNSUPPORTED_VERSION`.
# Default value: "unsupported version {version}"
#unsupported_version = "unsupported version {version}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_UNSUPPORTED_HASH`.
# Default value: "unsupported hash algorithm {algorithm}"
#unsupported_hash = "unsupported hash algorithm {algorithm}"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_PUT_ON_DOWNLOAD`.
# Default value: "put-object isn't allowed on a download channel"
#put_on_download = "put-object isn't allowed on a download channel"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_VERIFY_ON_DOWNLOAD`.
# Default value: "verify-object isn't allowed on a download channel"
#verify_on_download = "verify-object isn't allowed on a download channel"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_GET_ON_UPLOAD`.
# Default value: "get-object isn't allowed on an upload channel"
#get_on_upload = "get-object isn't allowed on an upload channel"
# Can also be specified via environment variable `KNOT_MESSAGES_LFS_PUT_NO_BODY`.
# Default value: "put-object is missing its object body"
#put_no_body = "put-object is missing its object body"