Skip to main content

Configuration Reference

Properties are set in application.properties (embedded in the JAR) or in an external file loaded with --spring.config.additional-location. Environment variables and command-line arguments override both, in the usual Spring Boot order.

Every property below exists in the current release. If a property you remember is missing from this page, check the two notes: it may have been removed.


The instance

PropertyDefaultDescription
server.port2710HTTP listening port. Also accepted on the command line — java -jar viglet-shio.jar --server.port=8099
shio.admin.password(unset)Sets the admin password on startup, skipping the first-access screen. Environment form SHIO_ADMIN_PASSWORD; minimum six characters. Never overwrites a password already configured and never prevents startup — see Installation § Setting the admin password without the console
shio.urlhttp://localhost:2710The instance's own base URL, used wherever an absolute URL is composed
shio.allowedOriginslocalhostCORS allowed origins
shio.keycloakfalseAuthenticate against a Keycloak realm
shio.keycloak-admin-id(empty)The realm's admin identifier
shio.multi-tenantfalseTenant isolation: see Multi-Tenancy
server.compression.enabledtrueResponse compression
server.compression.mime-typesapplication/json,text/css,application/javascriptWhat to compress
server.compression.min-response-size2048Minimum size, in bytes
server.tomcat.use-relative-redirectstrueEmit relative redirects
shio.config.system · .auth · .exchange/system · /provider/auth/%s · /provider/exchange/%sConfiguration paths
Removed: the JavaScript engine properties

shio.website.javascript.engine and shio.website.nashorn no longer exist. Shio renders pages with Handlebars templates, and there is no server-side script engine to select or tune (the Nashorn dependency is explicitly excluded from the build). Setting either property has no effect. See Pages, Layouts & Regions.


Content delivery (shio.cda.*)

PropertyDefaultDescription
shio.cda.cache.max-age-seconds60Cache-Control: max-age on delivery responses; 0 sends no-cache
shio.cda.rate-limit.enabledtrueThe per-token limiter
shio.cda.rate-limit.capacity120Burst a single token may spend at once
shio.cda.rate-limit.refill-tokens120Tokens replenished per period
shio.cda.rate-limit.refill-period-seconds60Refill cadence
shio.cda.preview.enabledtrueWhether preview tokens can be minted at all

The limiter is per JVM, on a multi-node deployment each token's effective budget is multiplied by the node count.


The agent surface (shio.agent.*)

Every limit here exists so a caller cannot ask for an unbounded response. A request over the maximum is clamped, and the response says so.

PropertyDefaultDescription
shio.agent.context.default-budget-tokens4000Context-pack size when no budget is given
shio.agent.context.max-budget-tokens40000Ceiling for budget=
shio.agent.context.default-depth3Folder-tree depth walked
shio.agent.context.max-nodes1000Sitemap rows
shio.agent.batch.max-ops200Ops in one POST /agent/batch
shio.agent.batch.max-document-ops2000Compiled ops in one apply
shio.agent.read.default-limit · .max-limit25 · 200find / read rows
shio.agent.verify.default-limit · .max-limit200 · 2000Findings per report
shio.agent.verify.max-fetches50Requests the delivery check may issue
shio.agent.verify.fetch-budget-millis15000Time budget for those fetches
shio.agent.render.allow-fetchfalseWhether /agent/render?url= may fetch a live URL. Off by default: an endpoint that fetches on the server's behalf needs an operator's consent, not a caller's
shio.agent.render.timeout-millis5000Per-fetch timeout
shio.agent.render.max-bytes524288Maximum fetched page size
shio.agent.render.write-digests10Pages digested when a write asks for ?digest=true
shio.agent.render.max-write-digests100Ceiling for ?digest=<n>
shio.agent.changes.default-limit · .max-limit50 · 500Change-feed rows
shio.agent.changes.lag-millis0Deliberate lag, for a multi-node install
shio.agent.memory.default-limit · .max-limit50 · 500Notes returned
shio.agent.memory.max-key-length · .max-note-length120 · 2000Note size
shio.agent.diagnostics.max-rows500Size of the in-memory failure window
shio.agent.diagnostics.default-limit · .max-limit25 · 200Rows returned

Files and images

PropertyDefaultDescription
shio.file-source.pathstore/file_sourceWhere uploaded bytes live. With tenancy on, the tenant id prefixes this layout
shio.image-cache.enabledtrueCache transformed images
shio.image-cache.pathstore/image_cacheWhere transform results are kept
shio.image-cache.max-memory-entries200In-memory entries before falling back to disk
shio.image-transform.max-width · .max-height5000 · 5000Refuse a transform larger than this
shio.image-transform.max-source-pixels40000000Refuse a source image larger than this
shio.image-transform.allowed-formatsjpg,jpeg,png,gif,webp,avifOutput formats ?format= may ask for
shio.image-transform.signing.enabledfalseRequire an HMAC on transform URLs
shio.image-transform.signing.secret(empty)The signing secret; set it before enabling signing
spring.servlet.multipart.max-file-size1024MBMaximum upload
spring.servlet.multipart.max-request-size1024MBMaximum request
spring.mvc.async.request-timeout3600000Async timeout (1 hour)

Scheduling and blueprints

PropertyDefaultDescription
shio.schedule.enabledtrueThe sweep that fires scheduled publishes and unpublishes
shio.schedule.sweep-interval-millis60000How often it looks
shio.blueprint.path(unset)An extra directory of blueprint packages, beside the built-in ones

Turing indexing (shio.turing.*)

Off by default. See Search & Caching.

PropertyDefaultDescription
shio.turing.enabledfalseIndex published content into Turing ES
shio.turing.url(unset)The Turing instance
shio.turing.api-key(unset)Its API key
shio.turing.default-site(unset)Turing SN site for any Shio site not mapped below
shio.turing.sites.<ShioSite>(unset)Explicit Shio site → Turing SN site mapping (case-insensitive)
shio.turing.source-appshioThe source_apps stamp on indexed documents
shio.turing.de-index-on-unpublishtrueDe-index when a post is unpublished

A site with neither a mapping nor a default-site is simply not indexed, and that is not an error.


Database

H2 (development default)

spring.datasource.url=jdbc:h2:file:./store/db/shioDB;DATABASE_TO_UPPER=false;CASE_INSENSITIVE_IDENTIFIERS=true
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
Those two H2 URL parameters are load-bearing

DATABASE_TO_UPPER=false;CASE_INSENSITIVE_IDENTIFIERS=true must stay. The schema uses lowercase identifiers (including the tenant discriminator column) and without them H2 folds names to upper case, which surfaces as Column "..." not found at startup.

PostgreSQL

spring.datasource.url=jdbc:postgresql://localhost:5432/shio
spring.datasource.username=shio
spring.datasource.password=shio
spring.datasource.driver-class-name=org.postgresql.Driver

MariaDB / MySQL

spring.datasource.url=jdbc:mariadb://localhost:3306/shio
spring.datasource.username=shio
spring.datasource.password=shio
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

The dialect is inferred from the URL; set spring.jpa.properties.hibernate.dialect only if you have a reason to override it. Shio ships no Oracle driver: the schema is verified on PostgreSQL, MariaDB and H2 by integration tests.


Schema and JPA

PropertyValueDescription
spring.jpa.hibernate.ddl-autononeThe schema belongs to Liquibase. Do not change this
spring.liquibase.enabledtrueRun migrations at startup
spring.liquibase.change-logclasspath:db/changelog/db.changelog-master.yamlThe master changelog
spring.jpa.show-sqlfalseLog SQL
spring.jpa.properties.hibernate.format_sqlfalseFormat logged SQL
spring.jpa.properties.hibernate.generate_statisticsfalseHibernate statistics
spring.jpa.properties.jakarta.persistence.sharedCache.modeALLJPA shared cache mode

An upgrade is a restart: migrations run on boot, so a rolling restart is a migration. Never work around a schema problem by setting ddl-auto to update: that produces a database which no longer matches the changelogs, and the next real migration fails.


Logging

PropertyDefaultDescription
logging.level.com.vigletINFOApplication log level
logging.level.org.springframeworkINFOSpring log level
logging.level.org.hibernate.SQLINFOSQL logging
logging.file.namestore/logs/shio.logLog file
logging.logback.rollingpolicy.max-file-size25MBRotation size
logging.logback.rollingpolicy.max-history10Files kept

Asynchronous failures , webhook deliveries, image transforms, scheduled publishes, 5xx , are also readable at GET /api/v2/agent/diagnostics, which is usually faster than grepping the log.


Static resources

PropertyDefaultDescription
spring.web.resources.static-locationsclasspath:/public/Where the built console is served from
spring.h2.console.enabledfalseThe H2 web console
spring.h2.console.path/h2Its path
spring.output.ansi.enabledalwaysColoured console output

Mail

PropertyDefaultDescription
spring.mail.hostlocalhostSMTP host
spring.mail.port587SMTP port
spring.mail.usernamelocalhost@localhostSMTP username
spring.mail.passwordpasswordSMTP password
spring.mail.properties.mail.smtp.authtrueSMTP authentication
spring.mail.properties.mail.smtp.starttls.enabletrueSTARTTLS
spring.mail.properties.mail.smtp.starttls.requiredtrueRequire STARTTLS
spring.mail.properties.mail.smtp.ssl.enablefalseSSL
spring.mail.test-connectionfalseTest the connection at startup

SMTP can also be configured in the console, which writes the same settings.


Management

PropertyDefaultDescription
management.endpoints.web.exposure.include*Exposed Actuator endpoints, narrow this in production

Profiles

ProfilePurpose
productionThe default
developmentExtra logging
ui-devServe the API only, with the console running under a separate Vite dev server
spring.profiles.active=production

PageDescription
Installation GuideDocker, JAR, or build from source
Multi-Tenancyshio.multi-tenant and what it turns on
Search & CachingThe shio.turing.* block in context
SecurityOrigins, tokens, CSRF
Architecture OverviewDeployment topologies