Open-source, end-to-end encrypted productivity apps.
Your data never leaves your device unencrypted.
Try re/task ยท Try re/notes ยท Website
Reborn Apps is a suite of two Progressive Web Apps built with a Zero Knowledge architecture - all user data is encrypted on your device before it ever reaches the server. The server stores only ciphertext and cannot read your tasks, notes, or metadata.
Built by Reborn Foundation (Poland), a European non-profit. Hosted on Hetzner Cloud (Germany). No tracking, no ads, no email required.
list:Inbox, due:<7d, is:overdue, has:link, โฆ (reference)
tag:work, folder:projects/active, created:<7d, has:link, -tag:archived, โฆ (reference).md files or entire folders with subfolders (e.g., an Obsidian vault) preserving directory structureReborn Apps uses a Zero Knowledge E2E architecture:
| What | Where | Who can read it |
|---|---|---|
| Tasks, notes, subtasks, metadata | Server (encrypted) | Only you |
| Username | Server (plaintext) | Server operator |
| Password | Server (Argon2id hash) | Nobody |
| Encryption keys | Your device only | Only you |
| Email, phone, real name | Not collected | - |
How it works:
โ ๏ธ If you forget your password, your data is irrecoverable. Recovery codes cannot help with password recovery - they only bypass 2FA if you lose access to your authenticator app. This is by design - the server cannot help you because it cannot read your data.
For a deep dive, see the Zero Knowledge Architecture document and the Security Overview.
A free public instance is available at reapps.eu, maintained by Reborn Foundation:
| App | URL |
|---|---|
| re/task | reapps.eu/task |
| re/notes | reapps.eu/notes |
No email required. Create an account with just a username and password.
Live status: stats.uptimerobot.com/JDB9dZbrRv
You own your data - you can also run your own instance.
There are two flows depending on what you want to do:
| Flow | Source on host? | Image | Speed | Use case |
|---|---|---|---|---|
| Development | Required (cloned repo) | node:alpine + bind mount + pnpm install at boot |
Slow first start, HMR after | Hacking on the code |
| Production | Not required at runtime | Pre-built from multi-stage Dockerfile |
<15 s boot, no install | Running your own instance |
Why this matters: the default
docker-compose.ymlis the development flow. If you paste it into a stack editor (Portainer, Coolify, โฆ) without a cloned repo on the host,pnpm installfails withERR_PNPM_NO_PKG_MANIFESTbecause the bind mount points at an empty directory. For self-hosting, use the production flow below.
.env file (copy from .env.example, generate strong secrets - see below)# Clone the repository
git clone https://github.com/fundacja-reborn/reapps.git
cd reapps
# Copy environment config
cp .env.example .env
# Start both apps with SSO support (recommended)
docker compose -f docker-compose.yml -f docker-compose.proxy.yml --profile with-notes up
After startup:
| App | URL |
|---|---|
| re/task | http://localhost/task |
| re/notes | http://localhost/notes |
Both apps share a single PostgreSQL database and a single user account (SSO via shared origin).
First startup takes a few minutes (downloading images +
pnpm install). Subsequent starts are fast thanks to Docker volume caching.
# Only re/task (port 4200)
docker compose up
# Both apps on separate ports (no SSO)
docker compose --profile with-notes up
The production flow builds a multi-stage Dockerfile and runs the pre-compiled SvelteKit server - no pnpm install at boot, no bind mount, no source on the host required at runtime.
git clone https://github.com/fundacja-reborn/reapps.git
cd reapps
# Copy and edit the environment + production override.
cp .env.example .env
cp docker-compose.prod.yml.example docker-compose.prod.yml
Edit .env and set at least:
PUBLIC_SITE_URL=https://your-domain.example.com # or http://your-server-ip
DB_USER=postgres
DB_PASSWORD=<strong-random-password>
DB_NAME=reborn
JWT_SECRET=<32+ random bytes, base64>
REFRESH_TOKEN_SECRET=<32+ random bytes, base64>
SESSION_SECRET=<32+ random bytes, base64>
RECOVERY_KEY_SECRET=<32+ random bytes, base64>
Generate a secret with openssl rand -base64 48.
Build and start:
docker compose -f docker-compose.yml -f docker-compose.prod.yml \
--profile with-notes up -d --build --wait
The apps listen on :4200 (task) and :4201 (notes) on the Docker host. For SSO (shared origin โ shared localStorage) put a TLS-terminating reverse proxy in front (nginx, Caddy, Traefik, Cloudflare Tunnel, โฆ) that maps:
<PUBLIC_SITE_URL>/task/ โ http://127.0.0.1:4200/task/<PUBLIC_SITE_URL>/notes/ โ http://127.0.0.1:4201/notes/nginx/dev.conf is a reference proxy config - adapt it (add listen 443 ssl;, certificate paths, HSTS) for your environment.
Portainer / Coolify / stack editors: paste the contents of
docker-compose.ymlanddocker-compose.prod.yml.example(combined or as a compose project that fetches both from git). The build context needs the repo source - point the stack at this Git URL, not at a raw paste.
If you want to verify the production build works before pointing your real domain at it:
cp docker-compose.localprod.yml.example docker-compose.localprod.yml
docker compose -f docker-compose.yml -f docker-compose.localprod.yml \
-f docker-compose.proxy.yml --profile with-notes -p reborn-localprod \
up -d --build --wait
# โ http://localhost/task and http://localhost/notes
This uses http://localhost as the origin and the dev DB credentials, so it composes cleanly without further configuration.
# Prerequisites: Node.js 20+, PNPM 10+, PostgreSQL
pnpm install
pnpm db:generate
pnpm db:migrate
# Start re/task
pnpm nx dev reborn-task
# Start re/notes (separate terminal)
pnpm nx dev reborn-notes
# Stop containers (dev)
docker compose -f docker-compose.yml -f docker-compose.proxy.yml --profile with-notes down
# Stop containers (production)
docker compose -f docker-compose.yml -f docker-compose.prod.yml --profile with-notes down
# Full reset (removes database and cached node_modules)
docker compose -f docker-compose.yml -f docker-compose.proxy.yml --profile with-notes down -v
| Layer | Technology |
|---|---|
| Frontend | SvelteKit 2, Svelte 5 (runes), TypeScript |
| Styling | TailwindCSS 4 |
| Offline storage | IndexedDB (Dexie.js) |
| Encryption | AES-256-GCM, PBKDF2, Argon2id (Web Crypto API + hash-wasm) |
| Backend | SvelteKit API routes |
| Database | PostgreSQL 17, Prisma 6 |
| Auth | JWT + refresh tokens, TOTP 2FA, recovery codes |
| Monorepo | pnpm workspaces, Nx 21 |
| Notes editor | CodeMirror 6 (Markdown) |
apps/
โโโ reborn-task/ # Task management app (SvelteKit)
โโโ reborn-notes/ # Notes app (SvelteKit)
packages/
โโโ @reborn/auth # Authentication (JWT, 2FA, recovery codes)
โโโ @reborn/crypto # E2E encryption & key management
โโโ @reborn/database # Prisma schema & client
โโโ @reborn/storage # Encrypted IndexedDB stores
โโโ @reborn/types # Shared TypeScript types
โโโ @reborn/ui # UI components (shadcn-svelte)
โโโ @reborn/i18n # Internationalization (PL/EN)
โโโ @reborn/utils # Shared utilities
โโโ @reborn/api-client # HTTP client for API
docs/
โโโ architecture/ # Zero Knowledge architecture docs
โโโ security/ # Security audits
We welcome community involvement! Due to the security-sensitive nature of this project (E2E encryption, Zero Knowledge architecture), we maintain all code changes internally.
How you can help:
Note: We do not accept external pull requests. Every code change undergoes internal security review to protect the integrity of the encryption layer. If you've found a bug and know the fix, please describe it in an Issue - we'll gladly credit you.
Reborn Apps is shaped by feedback from people who try it, share ideas, and tell us what's missing. Special thanks to:
If you've contributed something that shaped this project - an idea, a substantive bug report, a translation - and you're not listed here, please open an Issue. Smaller individual reports are credited per-release in commit messages and release notes.
AGPL-3.0 - Copyright ยฉ 2025 Fundacja Reborn (Poland)
You are free to use, modify, and self-host. If you modify the server-side code and offer it as a service, you must open-source your changes under the same license.
Reborn Apps is built by a non-profit foundation - no investors, no ads, no tracking. If you find our apps useful and want to support their continued development, every donation helps us build software free from commercial pressure.
โ Donate via Wise
Built with privacy in mind by Reborn Foundation (Poland).