FAQ
General
Section titled “General”What is IdentityScribe?
Section titled “What is IdentityScribe?”IdentityScribe syncs LDAP directories to PostgreSQL and exposes them via LDAP, REST, and GraphQL. Every change is recorded.
What problems does it solve?
Section titled “What problems does it solve?”- LDAP bottlenecks — Offload read traffic from production LDAP servers
- Protocol mismatch — Access LDAP data via REST/GraphQL for modern apps
- Missing history — Track all changes for compliance and debugging
- Complex queries — Use SQL-backed filters instead of LDAP filter syntax
What protocols are supported?
Section titled “What protocols are supported?”| Channel | Status | Use case |
|---|---|---|
| LDAP v3 | Stable | Legacy apps, LDAP tools |
| REST | Stable | Modern apps, automation |
| GraphQL | Stable | Flexible frontend queries |
| gRPC | Roadmap | High-throughput service-to-service |
See Channels Overview for details.
Performance
Section titled “Performance”How many entries can it handle?
Section titled “How many entries can it handle?”IdentityScribe handles millions of entries efficiently. Performance depends on:
- PostgreSQL resources — CPU, memory, disk I/O
- Query complexity — Simple lookups are sub-millisecond; complex filters take longer
- Concurrency — Configure thread pools via
concurrencysetting
Typical deployments handle 10,000+ queries/second with proper tuning.
How much memory does it need?
Section titled “How much memory does it need?”IdentityScribe uses up to 80% of available memory by default. For production:
- Minimum: 2GB RAM
- Recommended: 4-8GB RAM for 1M+ entries
- Heavy workloads: 16GB+ for high concurrency
How do I tune performance?
Section titled “How do I tune performance?”- Check pressure metrics:
curl http://localhost:8080/observe/pressure - Review slow queries: Enable hints with
monitoring.hints.enabled = true - Add indexes: Check
/observe/hintsfor missing index suggestions - Increase pools: Adjust
concurrencyanddatabase.*PoolSizesettings
See Monitoring for detailed tuning guidance.
LDAP Compatibility
Section titled “LDAP Compatibility”Which LDAP controls are supported?
Section titled “Which LDAP controls are supported?”| Control | RFC | Status |
|---|---|---|
| Simple Paged Results | RFC 2696 | Supported |
| Server-Side Sorting | RFC 2891 | Supported |
| Virtual List View (VLV) | draft-ietf-ldapext-ldapv3-vlv | Supported |
| Manage DSA IT | RFC 3296 | Supported |
| Subentries | RFC 3672 | Supported |
Which LDAP operations are supported?
Section titled “Which LDAP operations are supported?”| Operation | Status | Notes |
|---|---|---|
| Search | Full | All scopes, filters, pagination |
| Bind | Simple | Simple bind only (no SASL yet) |
| Compare | Full | — |
| Abandon | Full | — |
| Unbind | Full | — |
| Add/Modify/Delete | — | Read-only (changes sync from source) |
Can I use ldapsearch and other LDAP tools?
Section titled “Can I use ldapsearch and other LDAP tools?”Yes. Standard LDAP tools work with IdentityScribe:
ldapsearch -H ldap://localhost:10389 -x -b "o=data" "(cn=John*)"Security
Section titled “Security”Does IdentityScribe support TLS?
Section titled “Does IdentityScribe support TLS?”Yes. Configure TLS in the http.ssl section:
http.ssl { enabled = true cert = "/path/to/cert.pem" key = "/path/to/key.pem"}LDAP supports LDAPS (port 636) and STARTTLS. REST uses HTTPS.
How is authentication handled?
Section titled “How is authentication handled?”- LDAP: Simple bind (username/password)
- REST: Bearer token authentication (roadmap)
- Service accounts: Configure in
channels.*.auth
Can I restrict network access?
Section titled “Can I restrict network access?”Yes. Use named sockets to separate public and internal traffic:
http { port = 8080 sockets.internal { port = 9001, host = "localhost" }}monitoring.socket = "internal"See HTTP Server for patterns.
Deployment
Section titled “Deployment”What are the system requirements?
Section titled “What are the system requirements?”- PostgreSQL: 17 or 18 (15/16 deprecated)
- Memory: 2GB minimum, 4-8GB recommended
- Disk: Depends on data volume (allow 2-3x source LDAP size)
Is there a Docker image?
Section titled “Is there a Docker image?”Yes. See the Docker section in the Deployment Guide.
Can I run in Kubernetes?
Section titled “Can I run in Kubernetes?”Yes. The monitoring bundle includes Helm charts:
helm install scribe-stack ./monitoring/helm/identity-scribe-stackSee the Kubernetes section in the Deployment Guide.
Configuration
Section titled “Configuration”How do I configure IdentityScribe?
Section titled “How do I configure IdentityScribe?”IdentityScribe uses HOCON configuration with environment variable overrides:
| Priority | Source |
|---|---|
| 1 | CLI flags (--config, --readonly) |
| 2 | SCRIBE_* environment variables |
| 3 | Config file (identity-scribe.conf) |
| 4 | Built-in defaults |
See Configuration Guide for the full reference.
How do I debug configuration issues?
Section titled “How do I debug configuration issues?”# Print resolved config (passwords redacted)./identity-scribe --printconfig
# Or at runtimecurl http://localhost:8080/observe/configLicensing
Section titled “Licensing”What happens when my license expires?
Section titled “What happens when my license expires?”| Days Remaining | Behavior |
|---|---|
| > 30 days | Normal operation |
| 7-30 days | Warning at startup |
| < 7 days | Hourly warnings |
| Expired | Service refuses to start |
Troubleshooting
Section titled “Troubleshooting”Where are the error codes documented?
Section titled “Where are the error codes documented?”- Error Catalog — Complete list of stable error codes
- Failures — Error handling, retry semantics, support workflow
How do I enable debug logging?
Section titled “How do I enable debug logging?”Set SCRIBE_LOG_LEVEL=debug or configure in your identity-scribe.conf:
SCRIBE_LOG_LEVEL=debug ./identity-scribeFor component-specific logging:
SCRIBE_LOG_SUPERVISOR=debug— Startup/shutdown, orchestrationSCRIBE_LOG_INGEST=debug— Transcription pipelineSCRIBE_LOG_MONITORING=debug— Wide-log output, channels
See Configuration Guide for the full list.
How do I report issues?
Section titled “How do I report issues?”Include these in your support request:
- Error-Id from the response header or body
- Trace-Id if tracing is enabled
- Output of
curl http://localhost:8080/observe/doctor
How do I control colors in terminal output?
Section titled “How do I control colors in terminal output?”IdentityScribe auto-detects color support:
| Variable | Effect |
|---|---|
FORCE_COLOR=1 | Force colors on (even when piped) |
FORCE_COLOR=0 | Force colors off |
NO_COLOR=1 | Disable colors (no-color.org) |
Colors are automatically enabled in interactive terminals and CI systems like GitHub Actions, GitLab CI, CircleCI, and Travis.