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.
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+ onlyAuth// sign-inPostgres// your records, under RLSStorage// 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.
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.