Docker
The supported path. Nothing else to install: no runtime, no build step, no CDN.
notarum ships as a single Docker image with no external services required. The binary is static, weighs about 38 MB and embeds everything: the reader, the API, the MCP server and the OpenAPI contract.
Docker
The supported path. Nothing else to install: no runtime, no build step, no CDN.
Somewhere to keep the data
A mounted volume, or a Postgres database. Without one of the two, everything is lost on the next redeploy — see below.
About 1 GB of RAM
Only if you turn on the national search index, which holds 428,000 norms in memory. Without it, far less.
Postgres is the better choice for two reasons: nothing is written to disk, so backups are your database’s problem and already solved; and bulk writes go in batches, which matters when a sync writes over a million rows.
docker run -d -p 8080:8080 \ -e NOTARUM_ALMACEN=postgres \ -e NOTARUM_POSTGRES_DSN='postgres://user:pass@host:5432/notarum?sslmode=disable' \ -e NOTARUM_ADMIN_USUARIO=you@example.com \ -e NOTARUM_ADMIN_CLAVE='a long password of your own' \ ghcr.io/diegoparras/notarum:latestAny Postgres 13+ with contrib works — unaccent and to_tsvector('spanish', …) are what make
accent-insensitive search work. The pgvector/pgvector:pg17 image is a good pick: it is built on
the official image, so it brings both.
docker run -d -p 8080:8080 \ -v notarum-datos:/datos \ -e NOTARUM_ALMACEN=sqlite \ -e NOTARUM_ADMIN_USUARIO=you@example.com \ -e NOTARUM_ADMIN_CLAVE='a long password of your own' \ ghcr.io/diegoparras/notarum:latestThe simplest engine, for trying it out. It serves by date but does not index, so full-text search asks the Gazette instead of answering locally.
docker run -d -p 8080:8080 -v notarum-datos:/datos \ ghcr.io/diegoparras/notarum:latestOpen http://localhost:8080 and you are reading today’s Gazette.
Sign in with the admin account from your environment variables. If you did not set a password, one is generated and printed once in the log.
Open the panel at /admin. Check what it says about storage: on a fresh volume it will say
it started empty, which is correct the first time. If it says the same after a redeploy, your
data is not being kept.
Sync the catalogs. Sync InfoLEG takes a few minutes and brings the 428,000 national norms plus the amendment relationships. Download provincial law takes seconds.
Fill in the Gazette for the period you care about. With the text of each notice it takes much longer — it is one request per notice, at the rate the Gazette tolerates — but it is what makes search reach the body and not just the summary.
Create a token from your account, for the API and the MCP.
From then on it runs itself: the catalogs refresh daily and the Gazette downloads a full week every Saturday at 4 AM.
Everything has a sensible default. These are the ones that matter:
| Variable | What it does |
|---|---|
NOTARUM_ALMACEN | disco, sqlite or postgres |
NOTARUM_POSTGRES_DSN | Full connection string, or use the separate _HOST, _BASE, _USUARIO, _CLAVE pieces |
NOTARUM_ADMIN_USUARIO / _CLAVE | The account that administers. Setting the password here means you can always get back in |
NOTARUM_ACCESO | abierto, mixto or cerrado. Also changeable from the panel, live |
NOTARUM_BUSCADOR_INFOLEG | Turns on national search. Costs about 480 MB of memory, so it is opt-in |
NOTARUM_ACTUALIZAR_A_LAS | When the catalogs refresh. Default 05:00 |
NOTARUM_BOLETIN_A_LAS | When the weekly Gazette download runs. Default 04:00, Saturdays |
NOTARUM_ZONA | Time zone for those hours. Default America/Argentina/Buenos_Aires |
NOTARUM_MEMORIA_MAX | A ceiling like 1GB. Read from the container if not set |
NOTARUM_AUTH | federado delegates sign-in to Lockatus, alongside the local form |
Yes/no variables understand 1/0, si/no, true/false and on/off.
Switching from SQLite to Postgres does not mean downloading the catalogs again:
notarum migrar --origen sqlite --db /datos/notarum.dbRun it with the new engine’s configuration in place and the old one as the source. Expired entries are not carried over, and the search index is rebuilt rather than translated.