Security

Your science deserves
clear safeguards.

This page is written for the person who has to sign off on Ligara, not for the person who wants to buy it. It sets out the isolation model, the encryption position, the third parties involved, and a register of outstanding hardening work that we publish rather than hide.

01

Where your data actually lives

Most of the attack surface a reviewer expects to find isn't there, because most of the processing isn't on a server.

  • One first-party server holds customer data: a managed PostgreSQL database with authentication and file storage. There is no first-party compute service.
  • Chemoinformatics runs in your browser. Structure rendering, descriptors, fingerprints, similarity and dimensionality reduction execute client-side through WebAssembly.
  • ADMET inference runs on your own machine as a local process. Structures submitted for prediction do not leave the device and are not sent to any hosted endpoint.
  • No third-party analytics or tracking processes your scientific data, and the application sends no usage telemetry.
  • Error monitoring is self-owned — there is no third-party error-reporting SDK or host in the application.

The practical consequence. The place customer data rests is the database. That is where the isolation and encryption guarantees below apply, and it is the thing worth reviewing carefully.

Data flow
// Client (your browser or the desktop shell)
Plate-file parsing          // never uploaded to be parsed
Curve fitting, statistics   // local
RDKit chemistry via WASM    // local
Charting, 3D viewers        // local

// Your machine (local process, loopback only)
ADMET model                 // structures stay on device

// Network — TLS 1.2+ only
Auth       // sign-in
Postgres   // your records, under RLS
Storage    // files you attach

// Static code assets from pinned CDNs
// (code only — never customer data)
02

Encryption

In transit

The application makes no plaintext connections to the backend: all traffic to authentication, the database and storage goes over HTTPS. Transport versions and cipher selection are properties of the managed platform rather than controls Ligara implements, and the platform serves TLS 1.2 or above.

At rest

Data in the managed database is encrypted at rest with AES-256, applied by the platform to the underlying storage volumes and to automated backups. Storage-encryption keys are held by the platform provider; Ligara does not handle raw keys.

Not end-to-end encrypted

Ligara does not implement zero-knowledge client-side encryption of scientific records, and that is a deliberate design decision rather than an omission. See below.

Why there is no zero-knowledge mode

The product's value depends on the database being able to read structured data. Server-side filtering and multi-tenant queries under Row-Level Security, cross-organisation read-only sharing, and saved analyses that recompute from live data all require it. Zero-knowledge encryption would make those records opaque to the database and break every one of them.

Confidentiality is instead enforced by transport encryption, at-rest encryption and database-level tenant isolation. If your requirement is genuinely that the host cannot read the data, the right answer for you is a self-hosted deployment where you are the host — which is available on enterprise engagements — rather than a claim from us that we cannot read a database we operate.

03

Tenant isolation is the core guarantee

Isolation is enforced in the database by PostgreSQL Row-Level Security, not by the application. Client-side query scoping exists, but it is defence-in-depth and interface behaviour — it is not the boundary.

The property that matters: a modified or compromised client still cannot read or write another tenant's rows, because every query executes under the caller's authenticated identity against the database's own policies.

Scoping columns

The three tenancy columns present on scientific tables
Column Meaning
owner_id The individual user who created the row.
org_id The organisation, or lab, the row belongs to.
project_id The shared project the row is filed under, where applicable.

Access model

  • Sandbox data is visible only to the user who created it.
  • Organisation data requires an approved membership row — a pending request grants nothing.
  • Project data is scoped by project with an owner, admin, collaborator and viewer hierarchy.
  • Master DB records are those the organisation has approved. A run owner cannot publish their own work to the organisation's approved set unilaterally.

Privileged operations

Operations that must not be client-decidable are implemented as privileged database functions rather than as table permissions the client holds. Joining a lab, approving or rejecting a membership, changing someone's role, revealing an invite code, creating or joining a project, resolving a submission to the Master DB and writing the mutation log all run this way.

Membership rows carry no client update or delete permission at all, and the invite code is not readable by ordinary members. Assay runs cannot be hard-deleted by a client at all, and their soft-deleted rows are excluded inside the database policy. On the other soft-deleted tables that exclusion is currently applied by the application rather than by the policy — see the audit trail section, which states the scope precisely.

The tenancy boundary was hardened in a dedicated pass, and the migrations that did it are identifiable in the codebase. We will walk a reviewer through them under NDA.

04

Cross-organisation sharing

The one path by which data crosses an organisational boundary, and the controls on it.

Explicit and approved

A mirror exists only because an administrator at the source organisation approved a specific request. There is no implicit or default sharing.

Read-only

Mirrored rows cannot be edited or deleted by the receiving organisation. The mirror table itself carries no direct client write permission.

Per organisation

One approval covers the requesting organisation, so access is administered at the organisation level rather than per person.

Source-badged

Mirrored data is labelled with its originating lab everywhere it appears, so nobody mistakes a partner's result for their own.

Revocable

The source organisation can revoke at any time. Revoked grants are retained as history rather than deleted, so the record of who had access when survives.

Enforced in the database

Request, approval and revocation are privileged database functions, and the read path is governed by policy. The interface controls are convenience, not the boundary.

05

Application hardening

Defence-in-depth above the database boundary.

  • Content-Security-Policy on every page, in both the web build and the desktop webview, generated at build time rather than hand-maintained.
  • Subresource Integrity on every library loaded from a CDN, pinned to an exact version with a SHA-384 hash. A CDN serving different bytes is refused by the browser.
  • Output escaping on every user-controlled string rendered into the page, with the stored-cross-site-scripting sinks closed in a dedicated pass and raw error text removed from the interface.
  • Upload controls: an extension allowlist per category, a server-derived content type, download-only signed URLs, and size caps. Nothing executable can be served from storage — no HTML, SVG or JavaScript.
  • Desktop shell: the native capability grant permits spawning the two bundled prediction sidecars and nothing else. There is no general command execution.
  • Sidecar access control: the local prediction services accept requests only from the Ligara application, so another website open in your browser cannot query them.
  • Dependency auditing in continuous integration, with automated dependency updates.
06

Authentication and account control

What is in place

  • Email verification is required before an account becomes active, by a six-digit code entered in the app.
  • Password policy: a ten-character minimum, enforced server-side as well as in the interface, with a strength meter at entry.
  • Re-authentication required before a password or email-address change.
  • Sign out everywhere — global session revocation — available to every user.
  • Self-service account deletion: memberships removed, profile and avatar deleted.
  • The browser key grants no data access on its own. The publishable client key is designed to be public; Row-Level Security is what protects records.

What is not in place

No multi-factor authentication today, and no breached-password screening. Both depend on a backend tier we have not yet moved to. If MFA is a hard requirement for your organisation, Ligara does not meet it at present.

No single sign-on. SAML, OIDC and directory integration are not built.

07

Auditability

What is recorded

  • Soft-delete. Deleting a lab record sets a deletion timestamp instead of removing the row, so the data stays recoverable in the database.
  • Mutation log. Record creation, scientifically meaningful updates, soft-deletes and exports are written to a log that has no client write permission — entries can be added but not edited or removed from the application.
  • The acting user is fixed server-side. The log is written through a privileged database function that takes the user from the authenticated session, so a client cannot forge an entry attributed to someone else.
  • Indexed per row, per organisation and per user, so an audit question is a query rather than a log trawl.
  • An in-app viewer shows the trail against the record it belongs to.

The gap, stated plainly

Log writes are initiated by the application at each mutation point, not by the database. Three consequences, and none of them is hidden in a footnote:

  • Coverage is not complete. A small number of write paths — project soft-delete and two bulk run-status moves — do not write an entry yet.
  • Logging is best-effort. A failed log write does not block the change it was recording, by design, so an unlogged change is possible.
  • Soft-delete exclusion is mostly client-side. Assay runs are filtered inside the database policy; on the other soft-deleted tables the filtering is applied by the application, so a direct API call with a valid token can still return soft-deleted rows.

Database triggers that write the log automatically, and policy-level exclusion on the remaining tables, are planned work on the Part 11 track. Until they ship, treat this as a useful operational audit trail and not as a compliance control or a tamper-proof record.

There is also no recovery interface for soft-deleted records yet. The data is recoverable, but recovering it today means us doing it for you.

08

Subprocessors and data residency

The complete list, because a short list is the point.

Third parties involved in processing, and what each handles
Party Purpose Customer data handled
Managed database platform PostgreSQL, authentication, file storage All hosted customer data
Prediction models (ADMET, discovery preview) Property prediction and candidate generation None — run locally on your machine
Static asset CDNs Serving pinned, integrity-checked library code None — code only

Data residency

Residency follows the region chosen for the database. On enterprise engagements the database can be a dedicated instance in a region you specify, or deployed into infrastructure you control — in which case the residency question is answered by your own estate rather than by us.

What we do not do

No other third party processes your scientific data. The application sends no usage telemetry, carries no advertising or analytics instrumentation, and does not use your data to train any model.

09

Outstanding hardening work

We maintain this register and publish it. A vendor with a visible list of what it is still fixing is telling you more than a vendor with a page of badges.

Known hardening work not yet complete
Item Status Why it is still open
Multi-factor authentication and breached-password screening Planned Requires moving to a backend tier that offers them
Remove unsafe-eval from the script policy Planned Needs the chemistry WebAssembly bundle rebuilt without dynamic execution; the build flag is already committed
Remove unsafe-inline from the script policy Planned Tied to migrating the remaining legacy inline event handlers
Database-side triggers writing the mutation log automatically Planned Part 11 track; today the application initiates each write
Per-launch token between the app and its local sidecars Planned Origin restriction closes the browser-driven threat today
Alerting on error-rate spikes Planned Needs a scheduler on a paid tier
Cross-organisation compound matching on a stable identifier rather than name Planned Correctness hardening on the mirror path
Recovery interface for soft-deleted records Planned Data is recoverable in the database; there is no self-service route to it
Policy-level exclusion of soft-deleted rows on all tables Planned Enforced in the policy for assay runs; applied by the application on the other soft-deleted tables
Removing the remaining client delete permissions Planned Assay runs can no longer be hard-deleted by a client; a record owner can still delete some other record types outright
Independent penetration test Not done No third-party security assessment has been carried out
10

Compliance status: none, and here is the detail

Ligara holds no compliance certification or attestation of any kind. If your procurement process requires one today, we are not a candidate yet. We would rather you learn that here than three weeks into an evaluation.

Groundwork only

21 CFR Part 11

What exists: an append-only mutation log written through a privileged database function that fixes the acting user server-side, and soft-delete across the scientific tables.

What does not: the electronic-signature workflow, database-enforced immutability, signed-record export and a validation pack. Ligara is not Part 11 compliant and is not validated.

Not started

SOC 2 Type II

No audit has been performed and no report exists. SOC 2 is substantially process and evidence work rather than a feature, and it has not begun.

We can complete a security questionnaire and describe the controls on this page in writing. That is not the same thing as an attestation, and we will not present it as one.

Not built

Enterprise identity

No SAML, no OIDC, no directory integration, and no multi-factor authentication. Access is email and password with mandatory address verification.

For an organisation that mandates SSO, this is usually the blocking item rather than anything scientific.

On GDPR and similar regimes: Ligara is a tool you would use as a data controller, and nothing on this page is legal advice about your obligations. The data-processing agreement and privacy notice are being drafted with legal advice — see legal for what exists and what does not. There is no scenario in which we tell you Ligara is "GDPR certified", because no such certification exists.

platform overview

11

Reporting a vulnerability

If you have found something, we want to hear about it privately first, and we will not argue with you about whether it counts.

Please report suspected security issues privately rather than in public. Include reproduction steps and your view of the impact. We will acknowledge the report and work a fix on a priority basis, and we will tell you when it ships.

Send reports to info@ligara.org. The machine-readable version of this is at /.well-known/security.txt, per RFC 9116.

There is no bug-bounty programme and no paid reward, which we would rather say up front than leave you to discover.

Security review questions?

Send them over. We will answer the ones we can answer and tell you plainly where the answer is "not yet".