Turn security evidence into traceable control assessments and reviewable audit workpapers. Open-source and self-hosted: read evidence from the systems and security lakes you already run, evaluate versioned control tests, and keep the evidence and review decisions behind every result.
- Traceable: each result links to its source records, rule version, and review decision; snapshots form a hash-chained ledger you can re-verify.
- Works with what you have: connect cloud, identity, endpoint, and code systems directly, or query OCSF tables already in your lake.
- One control, many frameworks: reusable safeguards map to SOC 2, ISO 27001, NIST, and more, with reviewed and proposed mappings kept apart.
Open the live demo → Click through the console on synthetic data. Nothing to install.
Quick start · Product tour · Connect evidence · Already on OCSF? · Frameworks · Self-host · Docs
Quick start
Python 3.11+ and uv:
uvx --from "grc-lake[server]" grc-lake demo
This loads a synthetic company into a temporary lake, serves the console on
localhost:8787 without authentication,
and opens your browser. Ctrl+C stops it and deletes the lake. With pip:
pip install "grc-lake[server]", then grc-lake demo.
First task: find a failing control, inspect its evidence and mapping, and export the frozen result: follow the sample-data tutorial, then the auditor workpaper example.
Keep a lake, Docker, source development, or MCP
Keep a lake between runs:
grc-lake fixtures load --company golden --out ./lake --rebase-times
grc-lake serve --server --allow-insecure-no-auth --lake ./lake
Docker (public image, no registry login):
git clone --branch v0.3.11 --depth 1 https://github.com/koda-ai-studio/grc-lake.git
cd grc-lake && docker compose up
Current source, with uv and Node 22+:
git clone https://github.com/koda-ai-studio/grc-lake.git
cd grc-lake && uv sync --frozen --extra dev --extra server && make demo-local
MCP over stdio (headless GRC covers agent credentials):
pip install "grc-lake[server,mcp]"
GRC_LAKE_LAKE=./lake grc-lake-mcp
Release notes: changelog · verified release records.
Product tour
Collect → Evaluate → Resolve → Export. Screens use the bundled synthetic company.
Start with the assessment overview
Assessed coverage, open findings, evidence freshness, and priority actions in one view.
Explore framework coverage
Catalogued, mapped, reviewed, and assessed requirements stay separate measures per framework.
Inspect control results and evidence
Filter by result, owner, or framework; open a control for its evidence, findings, freshness, and confidence.
Navigate control families and the CCF
The Common Control Framework (CCF) groups reusable safeguards into families linked to framework requirements. Proposed mappings are not attestable. How common safeguards work.
Trace a finding through the evidence graph
Follow exact records between controls, safeguards, evidence, repositories, and assets; drill in or roll up.
Review AI assets and their next actions
Models and agents with owners, environments, governance signals, and next actions. Recorded lineage is evidence presence, not a passing control (AI inventory semantics).
Five-minute console tour · How evidence investigation works
Architecture
Read-only collection feeds deterministic evaluation; console, REST API, CLI, and MCP share one evidence and assessment model.
flowchart LR
Sources["Cloud · identity · code · existing lakes"] --> Collect["Read-only collection"]
Collect --> Evaluate["Version-pinned control tests"]
Evaluate --> Assessments["Assessment generations"]
Assessments --> Review["Console · API · CLI · MCP"]
Assessments --> Export["Snapshots · workpapers · OSCAL"]
Exports: portable CCF/OSCAL bundles, framework coverage reports, and verifiable auditor workpapers. Recovery behavior and API limits: architecture guide and assessment contract.
Connect evidence
Use direct connectors or read an existing lake. Both are read-only and keep assessment evidence in storage you operate.
Supported sources
| Category | Sources |
|---|---|
| Cloud | AWS, Microsoft Azure, Google Cloud; Kubernetes (preview, including GPU clouds); Lambda (preview) |
| Identity | Okta (directory and System Log), Google Workspace, Microsoft Entra (preview), generic identity provider |
| Endpoint | Microsoft Intune; Jamf, CrowdStrike Falcon (preview) |
| Code | GitHub, GitLab |
| Vulnerability scanning | Snyk (preview) |
| People and training | BambooHR, Rippling, Workday; training-completion exports from any LMS (preview) |
| Workflow and detections | Atlassian Jira, ticketing, SIEM alerts, AI runtime gateway |
| Existing lakes | Snowflake, ClickHouse, S3 object storage, OCSF presets; Databricks, BigQuery, Iceberg/Parquet (preview) |
| Imports | Agent-Bom scan reports, CycloneDX and SPDX AI bills of materials |
Stages, permissions, and live receipts: connector catalog · qualification matrix. Missing a source? Request a connector or build one.
Already on OCSF?
If your telemetry is already normalized to OCSF, for example in Amazon Security Lake or OCSF tables on Databricks or Snowflake, point GRC Lake at those tables. No new pipeline: the reader runs read-only queries and keeps a mapped copy of the rows it assesses. Built-in presets bind events to CCF safeguards, and framework requirements follow each safeguard's reviewed crosswalk:
flowchart LR
A["OCSF Authentication 3002<br/>successful Logon, is_mfa"] --> S1["SG-IDENTITY-001<br/>Logical access and MFA"]
B["OCSF Account Change 3001<br/>Attach Policy"] --> S2["SG-IDENTITY-002<br/>Access review"]
G["OCSF Group Management 3006<br/>Add User, Assign Privileges"] --> S2
V["OCSF Vulnerability Finding 2002<br/>EC2 instance, ECR image"] --> S3["SG-VULNERABILITYMANAGEMENT-001<br/>Vulnerability management"]
C["OCSF Compliance Finding 2003<br/>EC2 instance"] --> S4["SG-CONFIGBASELINE-001<br/>Hardened configuration baselines"]
S1 --> R1["SOC 2 CC6.1 · NIST 800-53 IA-2<br/>CIS AWS 1.10 · …"]
S2 --> R2["SOC 2 CC6.2 · ISO 27001 A.8.2 · …"]
S3 --> R3["SOC 2 CC7.1 · ISO 27001 A.8.8<br/>NIST 800-53 RA-5 · …"]
S4 --> R4["NIST CSF PR.PS-01 · …"]
What the rules conclude, and a Databricks example
The rules state only what an event shows. A successful logon with MFA passes for that user; one without MFA is open. A privilege grant, including adding a user to a group, blocks an access-review pass until someone reviews it, but is not a failure. Vulnerability findings and configuration checks keep their own status and bind a safeguard only for resource types with a clear catalog equivalent. Failed sign-ins, API activity, and detection findings stay unbound. Proposed crosswalk mappings are never attested.
CREDS='{"host":"dbc-example.cloud.databricks.com","warehouse_id":"abc123","catalog":"security",
"schema":"ocsf","client_id":"<sp-client-id>","client_secret_ref":"DATABRICKS_CLIENT_SECRET"}'
OPTS='{"mappings":[{"preset":"ocsf/authentication","source":{"table":"ocsf_events"}},
{"preset":"ocsf/account_change","source":{"table":"ocsf_events"}}]}'
grc-lake connectors probe --lake ./lake --connector-id databricks-evidence-lake \
--credentials-json "$CREDS" --options-json "$OPTS"
grc-lake connectors configure --lake ./lake --connector-id databricks-evidence-lake \
--state enabled --credentials-json "$CREDS" --options-json "$OPTS"
grc-lake connectors sync --lake ./lake --connector-id databricks-evidence-lake
grc-lake frameworks assessment --lake ./lake
Preview a preset against sample rows with grc-lake lake map --dry-run. Rules, limits,
and Snowflake, ClickHouse, BigQuery, and Iceberg setup:
OCSF events in the CCF.
Frameworks
- Reviewed requirements by framework: SOC 2 33/61 (10 with no recorded reviewer), ISO 27001 17/93 (10 with no recorded reviewer), HIPAA 4/24 (4 with no recorded reviewer), PCI DSS 0/12 (top-level), NIST CSF 2.0 72/106, NIST SP 800-53 495/1,014 (381 source-native self-maps; 96 with no recorded reviewer). Every pack is in the coverage matrix.
- 21 framework packs, 2,282 catalogued requirements (1,995 distinct; FedRAMP Moderate's 287 rows restate NIST SP 800-53 controls), linked through 1195 safeguards, including source-native assessment contracts. 2,196 requirements have safeguard mappings; 1,163 have reviewed mappings and the other 1,033 are proposed. Of the reviewed, 381 are source-native self-maps (written from that requirement's own pinned source) and 782 rest on reviewed crosswalk mappings; 339 rest only on legacy reviews with no recorded reviewer. The blended total is not a per-framework readiness figure.
- 28 read-only source adapters (10 in preview), plus OCSF presets for existing security lakes.
- Evidence stays scoped: missing or stale evidence leaves gaps; a passing sample does not prove complete population coverage. Proposed mappings are not attestable.
- One engine, four surfaces: console, REST API, CLI, and MCP server. Agents propose; humans approve.
Framework coverage · Common safeguards · Audit readiness · Qualification
What these numbers mean
Counts are generated from source. Reviewed counts record maintainer mapping decisions (review method and limits); mapping decisions do not change access at a provider. The audit-readiness index shows score, evaluated-framework, and blocking-gap gates, so a high score cannot hide an unresolved framework assessment. Fixture tests, screenshots, and the demo do not establish live-provider accuracy, production capacity, certification, or an audit opinion; see the roadmap for remaining gaps.
Self-host
Deploy with Docker or Helm on infrastructure you control:
- Local: one writable replica with a filesystem lake.
- Distributed: API replicas and tenant workers share PostgreSQL and S3-compatible storage (distributed guide).
- Production: SSO and scoped credentials, retention, and backup/restore.
Releases ship signed provenance and an SBOM (verify artifacts). Upgrading from TrustOps? Read the migration guide.
Engineering review
Start with one control and follow its evidence into a verified workpaper: the synthetic access/change workflow runs passing, failing, missing, stale, conflicting, and incomplete-population cases.
Where to look for each review question
| Question | Start here |
|---|---|
| How do the layers fit together? | Architecture and source map, data flow |
| What makes a result pass, fail, or remain unknown? | Evaluation semantics, population reconciliation |
| What prevents cross-tenant access and unauthorized decisions? | Trust boundaries, identity and scopes |
| What happens after partial writes, retries, or interrupted jobs? | Generation publication, operation contracts |
| How are integrity and reproducibility checked? | Workpaper qualification, backup and restore |
| What performance has actually been measured? | Pipeline measurements, graph latency and memory |
Run checks from the revision under review; the CI badge tracks main, and benchmark
receipts name their own revisions and workloads.
Documentation
| Task | Guide |
|---|---|
| Try the console | Product walkthrough |
| Connect evidence | Connector setup · Existing lakes |
| Integrate an agent | Headless GRC · Agent API |
| Operate a deployment | Deployment · Operations |
| Contribute | Contributing · Security |
All documentation · License: Apache 2.0
Metadata
Release files for grc-lake 0.3.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| grc_lake-0.3.11.tar.gz | 4.0 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| grc_lake-0.3.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.8 MB
Release files / grc_lake-0.3.11.tar.gz
| Download URL | grc_lake-0.3.11.tar.gz |
|---|---|
| Size | 4.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cc0779e6e9a8deed558fa131fe9d7acedb4ef05687a2198ce2388dce62ec0a55
|
|
BLAKE2b-256 checksum How to use checksums |
fa6dd7d16024069219fce76c3fe2ae42c22496668ebae664e4af0099a10d0069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logRelease files / grc_lake-0.3.11-py3-none-any.whl
| Download URL | grc_lake-0.3.11-py3-none-any.whl |
|---|---|
| Size | 3.8 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b8acc698d6bf3e7d53dc26b9aa6055a0757aa51f658349cef0cdb5b675b13ba
|
|
BLAKE2b-256 checksum How to use checksums |
05542603af3021440fc6d09d2c3437b657b1d890627d8b4853e427294d9d0fec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logSecurity for grc-lake 0.3.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for grc_lake-0.3.11.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.