Tu nube privada, sin límite de espacio, guardada en tu Telegram.
Bento respalda tus fotos y archivos en tu propia cuenta de Telegram, cifrados antes de salir de tu equipo, y los mantiene en orden en todos tus dispositivos. Sin bots, sin servidores de Bento y sin configurar nada técnico.
Bento usa la API de Telegram y no está afiliado a Telegram.
Captura de pantalla: [[COMPLETAR: añadir una captura de la biblioteca en docs/assets/ y mostrarla aquí]]
Descarga la última versión:
| Sistema | Archivo |
|---|---|
| Windows x64 | Instalador firmado Bento-<versión> Setup.exe |
| macOS 13 o posterior (Apple silicon o Intel) | .dmg firmado y notarizado de tu procesador |
| Ubuntu 22.04 x64 y sistemas basados en Debian | Paquete .deb (también hay un .zip portátil) |
Comprueba la descarga con el archivo SHA256SUMS-* del release: cómo hacerlo. Todavía no hay app para móvil.
- Conecta tu Telegram. Escanea un QR desde Telegram en tu móvil (Ajustes › Dispositivos › Vincular dispositivo de escritorio). Bento crea en tu cuenta tres canales privados, «Bento · Archivos», «Bento · Sync» y «Bento · Bandeja», dentro de una carpeta «Bento».
- Elige qué respaldar. Imágenes, Documentos, Escritorio u otras carpetas se suben en segundo plano, con reintentos y reanudación.
- Guarda tu kit de recuperación. Con tu Telegram y ese código puedes recuperar todo, aunque pierdas tus equipos.
¿Otro equipo? En Ajustes › Dispositivos › Añadir dispositivo aparece un código como K7Q2-MXR9-T4WA: escríbelo en el equipo nuevo, comprueba que los cuatro emojis coinciden en las dos pantallas y confirma. Cada día tienes la Bandeja de Telegram para mandar cosas desde el móvil, envío de copias por Telegram, importación desde Mensajes guardados, papelera de 30 días, vista rápida y búsqueda por el texto de tus fotos y PDF. ¿Prefieres no usar Telegram? Elige «Usar solo en este equipo».
- Todo lo que sale de tu equipo va cifrado con AES-256-GCM: contenido, nombres, carpetas, fechas, ubicación, texto reconocido y la lista de cambios entre equipos.
- Telegram solo ve datos sin contenido: que usas Bento, el tamaño y la hora de las partes cifradas y las sesiones de tus equipos.
- Bento no tiene cuentas ni servidores que guarden tus archivos. El relay de emparejamiento solo pasa mensajes cifrados entre dos equipos durante unos minutos.
- Sin analíticas ni publicidad, y nada se usa para entrenar inteligencia artificial.
- Lo que decides compartir por Telegram sale sin cifrar, y Bento te lo avisa antes.
Más: Privacidad y seguridad · Política de privacidad · Términos de uso · Avisos de terceros.
- «Sin límite de espacio» significa que Telegram no anuncia hoy un límite total para su nube; no es una garantía contractual. Telegram puede cambiar sus condiciones, limitar la velocidad o restringir cuentas, y elimina las cuentas que pasan demasiado tiempo inactivas.
- Si pierdes todos tus equipos y también el kit de recuperación, nadie puede volver a abrir tu nube.
- Aún no hay app para móvil, enlaces públicos ni nubes compartidas en familia.
- Para lo irreemplazable, conserva también otra copia.
Bento is your private cloud, with no storage limit, kept in your own Telegram account. It encrypts your photos and files on your computer before backing them up, keeps them in order across all your devices, and adds a new computer with a single code. Telegram only sees content-free metadata: that you use Bento, sizes, times and sessions. Telegram does not contractually guarantee unlimited storage, and losing every device and the recovery kit means losing access. Bento uses the Telegram API and is not affiliated with Telegram.
Read the English guides, privacy and security and the privacy policy.
Bento is a local-first modular monolith: a FastAPI API and a background worker share one Python package, a React renderer runs in the browser or inside an Electron host, and each device keeps a local SQLite replica. With Telegram storage, the user’s own account (MTProto via Telethon) is both the encrypted blob store and the replication log between devices. Start with the developer docs and the architecture overview.
| Path | Purpose |
|---|---|
apps/api |
Python package bento for the API and the worker (domain, application, ports, adapters, infrastructure, interfaces). |
apps/web |
React + Vite + TypeScript renderer. |
apps/desktop |
Electron host with API/worker sidecars, tray, deep links and signed updates. |
apps/relay |
Cloudflare Worker + Durable Object for device pairing (docs). |
apps/site |
Static public website and /join page on Cloudflare Pages (docs). |
docs |
User guides, legal drafts, desktop and developer docs. |
orchestration |
Binding implementation contracts. |
api: FastAPI on127.0.0.1:8000(desktop: an ephemeral loopback port).worker: background jobs, sync, backup and inbox import, from the samebentopackage.web: Vite React app on127.0.0.1:5173(packaged into the desktop app).relay(hosted, optional): only used while pairing devices.site(hosted): static pages; no backend.
cp .env.example .env # Windows: copy .env.example .env
make setup
make doctor
make seed
make upOpen the app at http://127.0.0.1:5173. The API is available at http://127.0.0.1:8000/api.
Backend dependency management uses uv >=0.11,<0.13; install or update it before running make setup.
uv self updateIf uv is not installed yet, use the official standalone installer or your package manager.
make setup # install local deps, create data dirs, run Alembic migrations
make doctor # validate local mode, DB, writable volumes, compose config, tools
make seed # add deterministic demo Drive and Photos assets
make test # backend pytest, frontend Vitest and desktop tests
make pre-commit # run commit-time hooks against all files
make pre-push # run push-time project checks against all files
make smoke # backend release smoke journey
make desktop-make # native installer/archive makers for the current OS
make desktop-release-artifacts # makers, packaged smoke, SBOM, checksums
make up # build and start Docker Compose local mode
make watch # start Docker Compose in watch mode for development
make down
make logsmake watch syncs source changes into running containers, restarts API/worker on backend changes, and rebuilds services when dependency or Docker build files change.
Backend only:
cd apps/api && uv run pytestFrontend only:
npm --prefix apps/web testRelay and site:
npm --prefix apps/relay test # Workers runtime tests (vitest-pool-workers)
npm --prefix apps/site test # build + link, CSP, no-external-request and parser checks
npm --prefix apps/site run previewInstall Git hooks locally:
make pre-commit-installValidate Compose without starting services:
docker compose config --quietSTORAGE_BACKEND |
What it does | Needs |
|---|---|---|
local (default) |
Everything stays on this device. No sync, no pairing. | Nothing. |
telegram |
Encrypted vault in three private channels of the user’s Telegram account; multi-device sync and pairing. | BENTO_TELEGRAM_API_ID and BENTO_TELEGRAM_API_HASH (how to get them). Users sign in with a QR code in the UI. |
fake |
Filesystem simulation of the Telegram cloud for development, demos and multi-process tests. Rejected when ENVIRONMENT=production. |
Optional BENTO_FAKE_TELEGRAM_DIR (default <DATA_DIR>/fake-telegram). See multi-device development. |
.env.example is safe for local mode:
STORAGE_BACKEND=localWORKER_CONCURRENCY=1OCR_PROVIDER=disabledEMBEDDINGS_PROVIDER=disabledVITE_API_BASE_URL=http://127.0.0.1:8000/api
Telegram-first configuration:
BENTO_TELEGRAM_API_ID,BENTO_TELEGRAM_API_HASH: Bento’s application identity for MTProto. Required forSTORAGE_BACKEND=telegram.BENTO_RELAY_URL: pairing relay (wss://…). Optional; without it, pairing goes through the user’s Telegram Sync channel.BENTO_PUBLIC_SITE_URL: public site origin, used for/join#…web links in the pairing dialog. Optional.BENTO_FAKE_TELEGRAM_DIR: shared directory for thefakebackend.BENTO_DEVICE_WRAPPING_KEY: headless only. Wraps the local key store (Telegram session, vault keys, device identity). If absent, Bento generatesdata/secure/wrapping.keywith mode0600andmake doctorreminds you to protect that folder. The desktop app manages this key itself through the OS secure store.
The bot-based Telegram setup (BotFather, local Bot API server, channel IDs, webhook, BENTO_ENCRYPTION_KEY) was removed; see docs/telegram-setup.md. Docker Compose has no Telegram profile or extra service: with STORAGE_BACKEND=telegram and the two credentials in .env, sign in from the web UI.
Do not commit API hashes, Telegram sessions, wrapping keys or anything under data/.
The packaged Electron app is the recommended path for end users: it includes the web UI plus native API/worker sidecars and requires no Docker, Python, Node or .env. See installation and first run, settings, backup and recovery and release and signing.
Stable desktop releases follow GitHub Flow from short-lived feature/* or fix/* branches into main. Maintainers use the manual Desktop version bump PR workflow for a stable SemVer patch, minor or major; after the version PR and four-platform native validation pass, an immutable matching vX.Y.Z tag builds the signed release. Release tags are blocked unless the Windows installer is signed and both macOS architectures are signed and notarized. Pull requests publish short-lived artifacts whose names include unsigned; those are for testing, not distribution.
make testnpm --prefix apps/relay testnpm --prefix apps/site testmake doctormake smokedocker compose config --quiet- Docker Compose local smoke:
make up, openhttp://127.0.0.1:5173, upload, browse Drive/Photos, search, view Jobs/Settings, thenmake down.
Bento’s identity (“Todo en su lugar”), palette, typography, shapes, motion, voice and per-screen patterns are defined in the brand book. The app supports light, dark and system themes; tokens live in apps/web/src/styles/tokens.css, and the site mirrors them.
- OCR and embeddings are disabled in
.env.example; real providers need local runtime setup and model files. The desktop app turns OCR on automatically on machines with at least 4 cores and 8 GB of RAM, and smart search is an opt-in model download. - The worker is conservative by default (
WORKER_CONCURRENCY=1), and Telegram transfers use one upload and one download stream per device unless configured otherwise (maximum 4). - Telegram may throttle accounts (
FLOOD_WAIT); Bento waits as instructed. Automated tests never touch real Telegram; they use thefakebackend. - Thumbnails and previews depend on worker/media tooling and may be pending until jobs run.
- Not included yet: mobile app, public share links, OS files-on-demand, shared family vaults (specified as deferred in the product contract), cloud AI, PostgreSQL or an external vector database.
- Python 3.12+ and uv
>=0.11,<0.13. - FastAPI
0.115.x, SQLAlchemy2.x, Alembic1.x, Uvicorn0.34.x, pytest8.x. - Telethon
1.x(MTProto), cryptography46.x(AES-256-GCM, X25519, HKDF), spake20.9.x, segno1.x, websockets, watchdog. - Node 22, Vite
6.x, React19.x, TypeScript5.x, Tailwind CSS4.x, Vitest3.x. - Desktop CI/release: Node 24, Python 3.12, Electron
43.4.1, Electron Forge7.11.2and PyInstaller6.22.2, built natively rather than cross-compiled. - Relay: Cloudflare Workers with SQLite-backed Durable Objects (Workers Free plan compatible). Site: Cloudflare Pages, no runtime dependencies, deployed with Wrangler
4.151.3throughnpx. - Docker Compose V2 with healthcheck-aware
depends_onanddevelop.watchsupport.
