Skip to content

Install notarum

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.

Terminal window
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:latest

Any 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.

Open http://localhost:8080 and you are reading today’s Gazette.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

VariableWhat it does
NOTARUM_ALMACENdisco, sqlite or postgres
NOTARUM_POSTGRES_DSNFull connection string, or use the separate _HOST, _BASE, _USUARIO, _CLAVE pieces
NOTARUM_ADMIN_USUARIO / _CLAVEThe account that administers. Setting the password here means you can always get back in
NOTARUM_ACCESOabierto, mixto or cerrado. Also changeable from the panel, live
NOTARUM_BUSCADOR_INFOLEGTurns on national search. Costs about 480 MB of memory, so it is opt-in
NOTARUM_ACTUALIZAR_A_LASWhen the catalogs refresh. Default 05:00
NOTARUM_BOLETIN_A_LASWhen the weekly Gazette download runs. Default 04:00, Saturdays
NOTARUM_ZONATime zone for those hours. Default America/Argentina/Buenos_Aires
NOTARUM_MEMORIA_MAXA ceiling like 1GB. Read from the container if not set
NOTARUM_AUTHfederado 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:

Terminal window
notarum migrar --origen sqlite --db /datos/notarum.db

Run 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.