Universal anything-to-anything connector framework. Instead of building N² bespoke integrations between services, each service implements a single Source (pulls data) and/or Sink (pushes data) connector against a universal DataEnvelope spec. The framework handles type matching, pipeline orchestration, and plugin discovery.
pip install aisquare-pipe # framework only
pip install "aisquare-pipe[popular]" # framework + the canonical core connectors
pip install "aisquare-pipe[full]" # framework + all connectors maintained in this repo
pip install aisquare-pipe-<service> # framework + a single connector (e.g. aisquare-pipe-dropbox)For development:
git clone git@github.com:AISquare-Studio/pipe.git && cd pipe
pip install -e ".[dev]"Note: Plugin discovery via
entry_pointsrequires the package to be installed (pip install -e .).
Each connector is its own independently published pip package under connectors/<name>/. The user-facing tier is encoded in the extras bundles — folder location does not determine tier.
| Connector | Package | In [popular] |
In [full] |
|---|---|---|---|
| Local filesystem | aisquare-pipe-local |
✓ | ✓ |
| Dropbox | aisquare-pipe-dropbox |
✓ | ✓ |
| OneDrive | aisquare-pipe-onedrive |
✓ | ✓ |
| Salesforce | aisquare-pipe-salesforce |
✓ | |
| DocuSign | aisquare-pipe-docusign |
✓ |
Third-party connectors published as aisquare-pipe-<name> (or any package declaring the aisquare_pipe.connectors entry-point group) are auto-discovered after install.
from aisquare.pipe import Pipeline
from aisquare.pipe.testing.mock_connectors import MockSource, MockSink
source = MockSource(count=5)
sink = MockSink()
result = Pipeline(source=source, sink=sink).run({})
print(f"Transferred {result.success_count} envelopes")
print(f"Sink received: {[e.data for e in sink.received]}")┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Source │───>│ DataEnvelope │───>│ Sink │
│ Connector │ │ │ │ Connector │
│ │ │ content_type │ │ │
│ pull() ─────┼──> │ data │ ──>│──── push() │
│ │ │ metadata │ │ │
└─────────────┘ └──────────────┘ └─────────────┘
│ │ │
│ ┌───────┴────────┐ │
│ │ TypeMatcher │ │
│ │ ┌──────────┐ │ │
│ │ │Converter │ │ │
│ │ └──────────┘ │ │
│ └────────────────┘ │
│ │
└──────── Pipeline.run() ───────────────┘
pipe list # list installed connectors
pipe describe mock-source # show connector details
pipe check mock-source mock-sink # check type compatibility
pipe run --source mock-source --sink mock-sink --config config.json
pipe new-connector my-service # scaffold a new connector pluginSee CONTRIBUTING.md for the full guide. In short:
pipe new-connector my-service— scaffolds a plugin project- Implement
SourceConnector.pull()and/orSinkConnector.push() - Register via
entry_pointsin yourpyproject.toml - Run
connector_compliance_suite(MyConnector)to validate
Contributions are welcome! See CONTRIBUTING.md for the full guide — pipe new-connector <service> scaffolds a connector plugin in seconds.
Apache License 2.0 © AISquare Studio