Logto
Authentication and authorization service built on OIDC and OAuth 2.1 with SSO and roles.
- Replaces
-
Paid customer sign-in and identity services, such as Auth0.
All open-source alternatives to Auth0
- Difficulty
-
Difficulty: Medium
2 services (1 database or broker: postgres), 0 volume mounts, 6 env values to set, no elevated host access. Heuristic score 4 of 11: medium.
- Stack
TypeScript (language), PostgreSQL (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
MPL-2.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/logto-io/logto/blob/f0748f3/README.md, read on .
- Repository
GitHub stats
- Stars
- 14,743
- Forks
- 1,194
- Open issues and pull requests
- 163
- Last push
- 2026-10-22
- Latest release
- v1.45.0
- Released
- 2026-10-13
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as MPL-2.0.
Compose file
# This compose file is for demonstration only, do not use in prod.
services:
app:
depends_on:
postgres:
condition: service_healthy
image: svhd/logto:${TAG-latest}
entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"]
ports:
- 3001:3001
- 3002:3002
environment:
- TRUST_PROXY_HEADER=1
- DB_URL=postgres://postgres:p0stgr3s@postgres:5432/logto
# Optional default grace period, in seconds, for OIDC private key rotation when the API
# request omits `rotationGracePeriod`.
- PRIVATE_KEY_ROTATION_GRACE_PERIOD
# SSRF protection for outbound requests is enabled by default. To reach a trusted webhook,
# SSO, or OIDC relying-party endpoint on a private network, list its address or CIDR range in
# `SSRF_ALLOWED_ADDRESSES` (for example `10.0.0.0/8`). Setting `SSRF_PROTECTION_DISABLED=true`
# turns the protection off entirely and also disables features that require it, such as CIMD.
# `OIDC_PROVIDER_SSRF_PROTECTION_DISABLED` is supported as a legacy alias.
- SSRF_ALLOWED_ADDRESSES
- SSRF_PROTECTION_DISABLED
- OIDC_PROVIDER_SSRF_PROTECTION_DISABLED
# Mandatory for GitPod to map host env to the container, thus GitPod can dynamically configure the public URL of Logto;
# Or, you can leverage it for local testing.
- ENDPOINT
- ADMIN_ENDPOINT
postgres:
image: postgres:17-alpine
user: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: p0stgr3s
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 5s
timeout: 5s
retries: 5
From the app's own repository: github.com/logto-io/logto/blob/f0748f3/docker-compose.yml.
Compose file from the app repository.
Install
- Docker with the Compose plugin (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the compose file as docker-compose.yml (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml)
Use the compose file shown above.
- Set the values the compose file needs (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml)
These variables have no default in the compose file: ADMIN_ENDPOINT, ENDPOINT, OIDC_PROVIDER_SSRF_PROTECTION_DISABLED, PRIVATE_KEY_ROTATION_GRACE_PERIOD, SSRF_ALLOWED_ADDRESSES, SSRF_PROTECTION_DISABLED. Compose reads them from the shell or from a .env file next to the compose file.
- Start it (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml)
docker compose up -d - Open the app (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml)
Open http://localhost:3001. The compose file publishes host port 3001 for the app service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: app: svhd/logto:${TAG-latest}. A later pull can get a different version. (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 3001 (app), 3002 (app). A port without a host address listens on all host network interfaces. (github.com/logto-io/logto/blob/f0748f3/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 163
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: v1.45.0 on 2026-10-13 (8 days before this page was built)