Ente - Garage S3
End-to-end encrypted photo storage, with Garage for the files
- ghcr.io/hsinghhira/ente-garage:latest
- port 6600
- port 6601
- port 6602
- port 6603
- port 6604
- port 6605
- port 6606
- port 6607
- port 6608
- port 6609
- port 6610
- port 6611
- port 6612
- Media




Web App
/http://localhost:6600/ API Server
:6601/http://localhost:6601/ Public Albums
:6602/http://localhost:6602/ Mail Server
:6604/mail/http://localhost:6604/mail/ Accounts
:6605/http://localhost:6605/ Auth
:6606/http://localhost:6606/ Cast
:6607/http://localhost:6607/ Public Locker
:6608/http://localhost:6608/ Embed
:6609/http://localhost:6609/ Paste
:6610/http://localhost:6610/ Locker
:6611/http://localhost:6611/ Public Memories
:6612/http://localhost:6612/ Ente is a self-hosted, end-to-end encrypted place to store, share and rediscover your photos and videos on all your devices. This is Ente in a single container, with PostgreSQL, Garage, a lightweight open-source object store, and a mail viewer for sign-up codes inside. Secret keys and passwords are made for you on first start.
Features
- End-to-end encryption for every photo and video
- All ten Ente web apps, each on its own port: Photos, Public Albums, Accounts, Auth, Cast, Locker, Public Locker, Embed, Paste and Public Memories
- Works with the Ente phone and desktop apps
- Garage for S3-compatible photo storage, with a small memory footprint
- Built-in mail viewer on port 6604 for sign-up codes, or use your own email server
- No 10 GB limit: every account gets 100 TB by default
How to use
- Open Ente - Garage S3 from your dashboard.
- Sign up with your email and a password.
- Open the mail viewer at
http://your-zimaos-ip:6604to read your sign-up code. - Type the code to finish signing up.
- In the Ente phone app, tap the first screen 7 times and set the server to
http://your-zimaos-ip:6601. - Upload photos and share albums.
Server address for the apps
The Ente phone and desktop apps need the API address: http://your-zimaos-ip:6601. On the first screen of the app, tap 7 times, then type that address as the server. If you set ENTE_API_URL (your own domain), use that instead.
Ports
Every app has its own port on your ZimaOS address, counted up from the Web App's port (6600):
| Port | App |
|---|---|
| 6600 | Web App (Ente Photos). The mail viewer also answers at /mail/ here |
| 6601 | Ente API - the server address for the phone and desktop apps |
| 6602 | Public Albums (shared album links) |
| 6603 | Photo storage (Garage S3) |
| 6604 | Mail viewer for sign-up codes and other Ente emails |
| 6605 | Accounts app (passkeys and family invites) |
| 6606 | Ente Auth web app (your two-factor codes) |
| 6607 | Cast app (show albums on a TV) |
| 6608 | Public Locker (shared Locker links) |
| 6609 | Embed app (albums inside other web pages) |
| 6610 | Ente Paste (share text that deletes itself) |
| 6611 | Ente Locker web app (store important documents) |
| 6612 | Public Memories (shared memory links) |
The Family, Space and Legacy web apps are not in this image. Ente's own copies are used unless you set ENTE_APPS_FAMILY, ENTE_APPS_SPACE or ENTE_APPS_LEGACY to your own.
Passkeys need the Accounts app on https with a domain name; browsers refuse them on a plain IP address.
Before you install
Change localhost in PUBLIC_URL to your ZimaOS IP, like http://192.168.1.20:6600; phones cannot use localhost. The other apps use the next ports on that address (see Ports above); the phone and desktop apps need the API on 6601. The first start takes about three minutes. Sign-up codes go to the mail viewer on port 6604: open the app logs, scroll to the top and find the line that says "mail viewer login" for its password. To send real email instead, and for the other settings, see the Variables tab; add them in the app settings. If you put Ente behind your own domains, set ENTE_API_URL, ENTE_S3_URL and the ENTE_APPS_* addresses too.
Updating from the old ports (6133-6136)? Your install keeps working as it is. To get the new apps' ports, reinstall the app, or change the ports and PUBLIC_URL to 6600 and up.
The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.
In the app settings
| Variable | Default value | Description |
|---|---|---|
TZ | $TZ | Your time zone. It is filled in from your ZimaOS time zone. Leave it unless you need another. |
PUBLIC_ | http://localhost:6600 | The address of the Web App, like http://your-zimaos-ip:6600. Change localhost to your ZimaOS IP, or phones and other computers cannot use Ente. The other apps use the same address with the next ports: 6601 API, 6602 Public Albums, 6603 photo storage, 6604 mail viewer, and 6605 to 6612 for Accounts, Auth, Cast, Public Locker, Embed, Paste, Locker and Public Memories. |
Addresses
| Variable | Default value | Description |
|---|---|---|
ENTE_ | — | The API address, if you put it behind your own domain, like https://api.photos.example.com. Leave it out to use PUBLIC_URL's host with port 6601. |
ENTE_ | — | The Public Albums address for shared links, if you put it behind your own domain, like https://albums.example.com. Leave it out to use PUBLIC_URL's host with port 6602. |
ENTE_ | — | The photo storage address, like https://s3.example.com. Phones upload here, so it must be reachable from them. Leave it out to use PUBLIC_URL's host with port 6603. |
ENTE_ | — | The Accounts app address (passkeys, family invites), if you put it behind your own domain, like https://accounts.example.com. Leave it out to use PUBLIC_URL's host with port 6605. |
ENTE_ | — | The Cast app address, if you put it behind your own domain, like https://cast.example.com. Leave it out to use PUBLIC_URL's host with port 6607. |
ENTE_ | — | The Public Locker address for shared Locker links, if you put it behind your own domain, like https://share.example.com. Leave it out to use PUBLIC_URL's host with port 6608. |
ENTE_ | — | The Embed app address, if you put it behind your own domain, like https://embed.example.com. Leave it out to use PUBLIC_URL's host with port 6609. |
ENTE_ | — | The Ente Paste address, if you put it behind your own domain, like https://paste.example.com. Leave it out to use PUBLIC_URL's host with port 6610. |
ENTE_ | — | The Public Memories address for shared memories, if you put it behind your own domain, like https://memories.example.com. Leave it out to use PUBLIC_URL's host with port 6612. |
ENTE_ | https://family.ente.io | The Family web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://ente.space | The Space web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://legacy.ente.com | The Legacy recovery web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://accounts.ente.io | The old Accounts address, only used to move passkeys made there. Most people leave it out. |
ENTE_ | — | The domain passkeys belong to, like example.com. Leave it out to use the Accounts app's host. Passkeys only work on https with a domain, not an IP address. |
Sign-up and accounts
| Variable | Default value | Description |
|---|---|---|
ENTE_ | false | Set to true so nobody new can sign up. Make your own account first. |
ENTE_ | — | The user id of the admin account, for the Ente command-line tool. |
Storage
| Variable | Default value | Description |
|---|---|---|
ENTE_ | 102400 | Storage for every account in GB (102400 is 100 TB). Set to 0 to keep Ente's normal 10 GB plan. |
Email (SMTP)
| Variable | Default value | Description |
|---|---|---|
ENTE_ | — | Your mail server, like smtp.gmail.com, to send sign-up codes by real email. Leave it out to use the built-in mail viewer at /mail/. |
ENTE_ | 587 | The mail server port. Usually 587, or 465 for SSL. |
ENTE_ | — | The user name for your mail server. |
ENTE_ | — | The password for your mail server. |
ENTE_ | [email protected] | The sender address. Your mail server may only accept its own address. |
ENTE_ | Ente | The sender name on the emails. |
ENTE_ | — | Set to ssl for a mail server that uses SSL from the start (port 465 sets this for you). Leave it out for 587. |
Mail viewer
| Variable | Default value | Description |
|---|---|---|
MP_ | — | Your own mail viewer login as user:password. Leave it out to use admin with the password from the app log. |
name: ente-garage
services:
ente-garage:
image: ghcr.io/hsinghhira/ente-garage:latest
container_name: ente-garage
restart: unless-stopped
stop_grace_period: 90s
privileged: true
environment:
- TZ=$TZ
- PUBLIC_URL=http://localhost:6600
ports:
- target: 8080
published: "6600"
protocol: tcp
- target: 8081
published: "6601"
protocol: tcp
- target: 8082
published: "6602"
protocol: tcp
- target: 8083
published: "6603"
protocol: tcp
- target: 8104
published: "6604"
protocol: tcp
- target: 8105
published: "6605"
protocol: tcp
- target: 8106
published: "6606"
protocol: tcp
- target: 8107
published: "6607"
protocol: tcp
- target: 8108
published: "6608"
protocol: tcp
- target: 8109
published: "6609"
protocol: tcp
- target: 8110
published: "6610"
protocol: tcp
- target: 8111
published: "6611"
protocol: tcp
- target: 8112
published: "6612"
protocol: tcp
volumes:
- type: bind
source: /DATA/AppData/$AppID/data
target: /data
bind:
create_host_path: true
healthcheck:
test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://127.0.0.1:8080/ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 180s
deploy:
resources:
limits:
cpus: "2.00"
memory: 3072M
reservations:
cpus: "0.25"
memory: 512M
labels:
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/icon.png
x-casaos:
id: com.icestore.ente-garage
envs:
- container: TZ
description:
en_US: >-
Your time zone. It is filled in from your ZimaOS time zone.
Leave it unless you need another.
- container: PUBLIC_URL
description:
en_US: >-
The address of the Web App, like
http://your-zimaos-ip:6600. Change localhost to your ZimaOS
IP, or phones and other computers cannot use Ente. The other
apps use the same address with the next ports: 6601 API,
6602 Public Albums, 6603 photo storage, 6604 mail viewer,
and 6605 to 6612 for Accounts, Auth, Cast, Public Locker,
Embed, Paste, Locker and Public Memories.
ports:
- container: "8080"
description:
en_US: Web App (Ente Photos), published on host as 6600
- container: "8081"
description:
en_US: Ente API - the server address for the phone and desktop apps, published on host as 6601
- container: "8082"
description:
en_US: Public Albums (shared album links), published on host as 6602
- container: "8083"
description:
en_US: >-
Photo storage (Garage S3). Phones and browsers upload and
download your encrypted files here, published on host as 6603
- container: "8104"
description:
en_US: Mail viewer for sign-up codes and other Ente emails, published on host as 6604
- container: "8105"
description:
en_US: Accounts app (passkeys and family invites), published on host as 6605
- container: "8106"
description:
en_US: Ente Auth web app (your two-factor codes), published on host as 6606
- container: "8107"
description:
en_US: Cast app (show albums on a TV), published on host as 6607
- container: "8108"
description:
en_US: Public Locker (shared Locker links), published on host as 6608
- container: "8109"
description:
en_US: Embed app (albums inside other web pages), published on host as 6609
- container: "8110"
description:
en_US: Ente Paste (share text that deletes itself), published on host as 6610
- container: "8111"
description:
en_US: Ente Locker web app (store important documents), published on host as 6611
- container: "8112"
description:
en_US: Public Memories (shared memory links), published on host as 6612
volumes:
- container: /data
description:
en_US: >-
Your encrypted photos and videos (Garage), the database,
secret keys and settings.
x-casaos:
id: com.icestore.ente-garage
architectures:
- amd64
- arm64
main: ente-garage
author: HSinghHira
category: Media
developer: ente-io
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/icon.png
thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/screenshot-1.png
screenshot_link:
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/screenshot-1.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/screenshot-2.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/screenshot-3.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-garage/screenshot-4.png
title:
en_US: Ente - Garage S3
tagline:
en_US: End-to-end encrypted photo storage, with Garage for the files
description:
en_US: >-
Ente is a self-hosted, end-to-end encrypted place to store, share and
rediscover your photos and videos on all your devices. This is Ente in
a single container, with PostgreSQL, Garage, a lightweight open-source object store, and a mail viewer
for sign-up codes inside. Secret keys and passwords are made for you on
first start.
**Features**
- End-to-end encryption for every photo and video
- All ten Ente web apps, each on its own port: Photos, Public
Albums, Accounts, Auth, Cast, Locker, Public Locker, Embed,
Paste and Public Memories
- Works with the Ente phone and desktop apps
- Garage for S3-compatible photo storage, with a small memory footprint
- Built-in mail viewer on port 6604 for sign-up codes, or use your
own email server
- No 10 GB limit: every account gets 100 TB by default
**How to use?**
1. Open Ente - Garage S3 from the Zima OS dashboard.
2. Sign up with your email and a password.
3. Open the mail viewer on port 6604 to read your sign-up code.
4. Type the code to finish signing up.
5. In the Ente phone app, tap the first screen 7 times and set the
server to http://your-zimaos-ip:6601.
6. Upload photos and share albums.
tips:
before_install:
en_US: >-
1. Open the app configuration before you install.
2. Find PUBLIC_URL. Change localhost to your ZimaOS IP, for example
http://192.168.1.20:6600 (your own IP will differ). Phones
cannot use localhost.
3. More settings, like your own email server and sign-up, are listed
on the Ente - Garage S3 page at
https://icestore.hsinghhira.me/app/ente-garage/ (Variables tab). You
can add them now or later in the app settings.
4. Start the installation.
5. Wait about three minutes. The first start sets up the database.
6. Open the app logs and scroll to the top. Find the line that says
"mail viewer login". Write down the password.
7. Open http://your-zimaos-ip:6600 in your browser. Sign up with
your email and a password.
8. Open http://your-zimaos-ip:6604 in a new tab. Sign in
as admin with the mail password. Copy the code from the email.
9. Type the code in Ente to finish signing up.
10. For the phone app: tap the first screen 7 times. Set the server
to http://your-zimaos-ip:6601 and sign in.
index: /
port_map: "6600"
scheme: http
is_uncontrolled: false
version: "20fb631"
update_at: "2026-10-27"
release_notes:
en_US: |-
- New ports: 6600 Web App, 6601 API, 6602 Public Albums, 6603 photo storage,
6604 mail viewer, 6605-6612 the other web apps
- Adds the Accounts (passkeys), Auth, Cast, Public Locker, Embed, Paste, Locker
and Public Memories apps, and tells the Ente server where each one is
- Mail viewer has its own port; /mail/ on the Web App still works
- Old installs on 6133-6136 keep working: every address counts up from
PUBLIC_URL's port. Reinstall to get the new apps' ports
- New settings ENTE_APPS_* (Ente's own names); ENTE_ALBUMS_URL still works
- Single-container Ente with Garage storage and one data folder
- Database, storage and museum keys are made on first start, so each install gets its own
- Sign-up codes go to the built-in mail viewer unless you set your own email server
- Every account gets 100 TB instead of Ente's 10 GB (ENTE_AIO_STORAGE_GB)
- server 20fb631, web 817ce84 (Ente only publishes commit tags; they follow latest)
- garage v2.4.1, mailpit v1.32.0, PostgreSQL 15
repo: "https://github.com/ente/ente"
support: "https://github.com/ente/ente/issues"
docs: "https://ente.com/help/self-hosting/"