Where does my content actually live?
As ordinary files in a Git repository: one JSON file per memorial, a folder of photos and one small file per story. Nothing is locked in a proprietary database, and you can clone the whole thing at any time.
How it works
There is no clever trick here — just a deliberately boring design. Plain files, a Git repository, and a static site. That combination is what makes it free, durable and easy to move somewhere else if you ever want to.
How it works
Type their name, the years they lived, and a line that says something true about them. That is enough for a page — you can add the rest later, together.
Drag in photographs straight from your phone and paste in the stories people tell. Every addition is its own file, so the page grows piece by piece.
Send the link to family, or download the QR card and have it printed for the service. Anyone who scans it lands on the memorial, no app required.
You get one secret link that lets you change anything later — no account, no password to forget. Save it with the family photos.
No. Creating a memorial gives you a secret edit link. Keep it somewhere safe and that link is your key to the page forever. There is nothing to sign up for and no password to reset.
Nothing. The whole site is static files served from a free Cloudflare plan, and memorial content is stored as files in a Git repository. Running costs are close to zero, and the project is open source so it can outlive any one person's hosting bill.
Yes — share the edit link with whoever should have access. Anyone with that link can add photos and stories. Treat it like a house key: give it only to people you trust.
In a Git repository, as ordinary folders and files. Every edit is a versioned commit, which means nothing is ever silently lost and you can always get the original files back.
Yes. Add any GoFundMe, charity or fundraising link to the page. LibreMemorial never processes payments and never takes a percentage.
The page stays online and public — you simply cannot edit it until someone restores access. Keep two copies, and consider sharing it with one other family member.
Under the hood
Five steps, none of them expensive, and the result is a page that loads quickly even on a phone with a poor connection at the cemetery.
Step 1
Pick a photo from your phone in the editor. It never leaves your device untouched.
Step 2
Before uploading, the image is resized to a sensible maximum and re-encoded as WebP or JPEG — often less than a tenth of the original size.
Step 3
A Cloudflare Function writes the file into the memorial's folder in a Git repository and commits it. The old version stays in history.
Step 4
The push triggers a build. Astro generates several sizes of every photo in modern formats and hashes each file name for caching.
Step 5
The finished page is plain HTML and images on a global CDN. No database, no server to keep warm, no monthly bill to fear.
As ordinary files in a Git repository: one JSON file per memorial, a folder of photos and one small file per story. Nothing is locked in a proprietary database, and you can clone the whole thing at any time.
Creating a memorial generates a secret edit key. Only a hash of that key is stored in the repository, and the edit link carries the key in the URL fragment, which is never sent to a server. Give the link to family members you trust, and they can edit; nobody else can.
You can, and the content layout is deliberately CMS-friendly. The catch is access control: Pages CMS edits through GitHub, so every family member would need a GitHub account with write access to the repository. The edit-key flow exists precisely so a grandmother can add a photo without anyone creating an account or being granted repository access.
Static files plus a Git repository are the cheapest possible architecture. Hosting fits comfortably inside free tiers, and image optimisation keeps storage small. There is no per-visitor cost to pass on to families, so there is nothing to charge for.
Yes — that is the point. Fork the repository, connect it to your own Cloudflare account, set a GitHub token, and you have your own independent memorial site. Nothing about the project depends on one operator.
No. The code simply encodes a normal web address, generated in your browser. As long as the site is online the code works — and you can print it today without paying anything to anyone.
The whole project is MIT licensed. Fork it, connect it to your own Cloudflare account, and you can host memorial pages for your community — or just keep a private copy as a backup.
npm run build.GITHUB_TOKEN (a fine-grained token with contents write access) and GITHUB_REPO as environment variables.TURNSTILE_SECRET to add a free bot check to the creation form.Two environment variables and a fork. That is the entire deployment.
# the repository is the database
src/content/memorials/
└── maria-popescu/
├── memorial.json
├── photos/
│ ├── portrait.jpg
│ └── 1.jpg
└── stories/
└── the-accordion-years.json
# every edit is a commit
$ git log --oneline
a1f9c2e Add a memory to Maria Popescu
7d31b40 Add photo to Maria Popescu
2c88e01 Add memorial page for Maria Popescu
It takes a couple of minutes, costs nothing, and you will have a link and a QR code you can share before the day is over.