This repo is now the source of truth for all atomic plugins. https://github.com/ontola/atomic-server/tree/develop/integrations is deprecated.
integrations/—ontola/atomic-server's formerintegrations/folder.devonian/— thedevoniannpm package (bidirectional lenses for data portability), migrated in from the standalonelocalthought/devonianrepo with its history intact.reflector/— the sync-engine/plugin-runtime layer above syncables, migrated in from the standalonelocalthought/reflectorrepo with its history intact.syncables/— thesyncablesnpm package (OpenAPI-driven mock server and sync client), migrated in from the standalonelocalthought/syncablesrepo with its history intact.overlays/— OpenAPI Overlays for real providers and the datedcatalog/<date>.jsonthatintegration-proxy/composes, migrated in from the standalonelocalthought/overlaysrepo with its history intact, and published by GitHub Pages at https://ontola.github.io/atomic-plugins/overlays/.openapi-extensions/— the OpenAPI extension specs (Pagination Schemes, CRUD Causality, Authenticated Principal and draft proposals) thatoverlays/,syncables/andintegration-proxy/implement, migrated in from the standalonepondersource/openapi-extensionsrepo with its history intact.integration-proxy/— the Rust OAuth/API proxy (LocalThought) that drive apps reach through atomic-server'sstore.proxy. See its own README and AGENTS.md. To run your own instance instead of atomic.place's, see integration-proxy/SELF_HOSTING.md.
See AGENTS.md for how to work in each.
Every plugin here is experimental. What each one does is declared, not
verified, until it has current live evidence against the real provider or
peer (see
integrations/README.md).
integrations/READINESS.md is the full matrix:
runtime, install path, scope and evidence per plugin.
integrations/catalog.json holds the catalog
copy.
A drive app runs inside your Atomic drive, in a sandboxed frame, and keeps
its data in an ordinary table there. It never holds a provider credential:
every call to Google, GitHub and the others goes through the integration
proxy. On the pinned atomic-server, Integrations → Drive apps installs them
from the catalog (with "Show experimental plugins" on). Only Pets is enabled
in the published catalog so far; the others are published with
enabled: false until their launch, and while the shared classes' ontology is
on github.io.
Calendar, GitHub issues, Clockify, Notion, Money, Moneybird and Todoist were taken on 2026-10-02
against atomic-server pin a12b74a, at 1280×800 in the light theme, with
invented data only. Calendar, GitHub issues, Clockify and Notion run on the
user-testing sample accounts
(usertest/sample-data/; hence the yellow
"Sample data" line) at the app versions in the table below. Money (0.4.1) is
installed from Drive apps and imports the invented Acme Studio August
statement in integrations/money/fixtures/usertest/ through its own "Import
statement", with no importer set up; Pets, Moneybird and Todoist
are installed from Drive apps and connected through the mock proxy: Pets
with its static fixture, Moneybird and Todoist with their synthetic
fixtures (hand-written from the providers' public documentation, not
recordings; both apps are enabled: false in the published catalog, which
the lane dev-server lifts). The Moneybird shot shows the contacts table its
import fills, the Todoist shot the app's own task list. The Notion shot shows the app's status view only. The optional
notion-table.png (taken with
... screenshots.mjs notion-table) shows the sample's table, where the
Status, Tags and Format options are the host's own coloured chips. It hides
the columns the app also adds from Notion's raw page fields, which are
auto-named and empty at 0.4.0, in the host's "Toggle properties" menu first.
To retake them, set up the pinned atomic-server as in
AGENTS.md, then run
node integrations/tooling/screenshots.mjs [pets calendar issue-tracker money notion timesheets moneybird todoist].
The checklist is in #49.
| App | What it does (declared) | Status | Code |
|---|---|---|---|
| 🐾 Pets | A demo: connect the Pets demo provider and import its five pets into a table. | Enabled in the catalog (0.1.3). Installs from Drive apps. Host E2E against the mock proxy, including an update from an older version. | integrations/pets/ |
| 🗓️ Google Calendar | Imports one Google calendar's single (non-recurring) events, up to 25,000 per scan, and sends reviewed edits of five fields back with If-Match. No creates or deletes in Google. |
Published (0.3.1), enabled: false. Rows are the shared event-v1 class, and it can sync a hand-made event-v1 table. Host E2E against the mock proxy. No live run of the drive app against Google yet. |
integrations/calendar/ |
| 🐙 GitHub issues | Keeps one repository's issues (title, body, Todo/Doing/Done, comments) on a board, two-way. Every write to GitHub is held for review. | Published (0.3.1), enabled: false. Rows are the shared issue-v1 class, and it can sync a hand-made issue-v1 table. Host E2E against the mock proxy. No live run of the drive app against GitHub yet. |
integrations/issue-tracker/ |
| 🏦 Bank statements and Money | The importer reads MT940 (up to 512 KB) and camt.053 (up to 5 MB) files, at most 500 transactions per file, and writes nothing before the host's review. The Money app shows the result as a ledger per account and currency, with your own category and note per transaction. | Money app: published (0.4.1), enabled: false. A catalog install imports statements itself into rows of the shared bank-transaction-v1 class, and lists rows missing a required field as incomplete. The importer still works as a second way in (set up from a release published to the server by hand). Tested with synthetic statement files only. |
integrations/money/ |
| ⏱️ Clockify | Brings your Clockify time entries into a week view and a table, and sends reviewed edits back. | Published (0.7.0), enabled: false. Rows are the shared time-entry-v1 class, and it can sync a hand-made time-entry-v1 table. Write-back, range edits and conflicts are declared, mock-tested only. Host E2E against the mock proxy. No live run (#123 is open). |
integrations/timesheets/ |
| 📓 Notion | Syncs the rows of shared Notion databases into one table, with select, status and multi-select options as the host's own select columns, and sends reviewed edits to existing pages back. A small status view shows the sync. No page creation or deletes. | Published (0.4.2), enabled: false. Host E2E against the mock proxy. No live run of the writes (#8 is open). |
integrations/notion/ |
| ✅ Todoist | Imports the active tasks of a Todoist account into an issue-v1 table, read-only. A task that left the active list is looked up once: a completed one is closed. Nothing is sent to Todoist. |
Published (0.1.1), enabled: false. Host E2E on a synthetic fixture; nothing checked against real Todoist (#99, #46). |
integrations/issue-tracker/ |
| 🐦 Moneybird | Imports the contacts of one Moneybird administration, read-only. | Published (0.1.1), enabled: false. Host E2E on a synthetic fixture; nothing checked against real Moneybird (#102). |
integrations/money/moneybird/ |
Sandbox jobs that turn a file you upload into rows. They run server-side in AtomicServer's QuickJS sandbox with no network access, and start from the plugin page's Import tab. Publishing one to a server is still done by hand (#94).
| Plugin | What it does (declared) | Status | Code |
|---|---|---|---|
| 🏦 Bank statements | See the drive apps above. | Host E2E on synthetic MT940 and camt.053 statements. | integrations/money/ |
| 🌳 Willow drop | Imports a Willow'25 drop file (up to 5,000,000 bytes and 1,000 entries) into a table, after checking each entry's Meadowcap authorisation. | Catalog entry enabled: false. Host E2E on fixture drops. |
integrations/willow-drop/ |
These let a drive speak an open protocol with other servers. They run as
QuickJS route handlers and have no app screen of their own, so they have no
screenshot. Each needs an AtomicServer built with the plugin-routes feature
and started with --plugin-routes, which atomic.place is not (see
Public endpoints need a gated server).
Several also need atomic-server changes that are not in the current pin; each
README says which.
| Plugin | What it does (declared) | Evidence | Code |
|---|---|---|---|
| Fediverse | One ActivityPub actor per drive: others can find and follow it, receive its public posts and reply. | Host E2E against a local peer fixture; opt-in e2e against real Mastodon 4.7.3 and Akkoma 3.20.1 on the loopback (2026-10-02). No GoToSocial. | integrations/fediverse/ |
| Open Cloud Mesh | Receives files shared over OCM 1.5 by servers you allow, into a folder you pick. | Host E2E against an invented peer; opt-in Nextcloud 35.0.1 e2e fails at the pin (the host refuses its ES256 key). No ownCloud or OCIS. | integrations/open-cloud-mesh/ |
| remoteStorage | A remoteStorage server (draft-dejong-remotestorage-22) that keeps documents as Atomic Files. | Host E2E with remotestorage.js at the pin; opt-in api-test-suite run: 46 of 53 pass, the 7 failures being host gaps. | integrations/remotestorage/ |
| Willow export | Serves selected public resources as one signed Willow drop file. | Host E2E; no WGPS sync and no live peer. | integrations/willow/ |
| Solid pod | A partial Solid pod: LDP resources, Turtle and JSON-LD, N3 Patch, Solid-OIDC DPoP. Not a conforming Solid server. | Host E2E with @inrupt/solid-client against a test issuer. |
integrations/solid/ |
| AT Protocol handle | Makes the drive's host name an AT Protocol handle, with a did:web document. Not a PDS. |
Host E2E on invented host names, resolved by Bluesky's reference identity code, and (opt-in) accepted by the reference PDS on the loopback. No live Bluesky check. | integrations/atproto/ |
| NextGraph | Exchanges RDF snapshots between Atomic resources and NextGraph documents, through an operator-run sidecar. | Host E2E against a local NextGraph sidecar; no sync between brokers. | integrations/nextgraph/ |
None listed at present: the Todoist projection and the Google Calendar and GitHub issues mapping code are each wrapped by a drive app above.
integrations/localthought/ is shared tooling, not a plugin: the mock
integration proxy that every E2E lane runs against.






