* feat(server): add server authz pipeline rework first sketch * feat(server authz): add new server authz middleware poc implementation * test(server authz): add unittests for the new server authz workflow * feat(wip rework of fileuploads vs blob storage): add basim impl of separate blob storage service * feat(fileimport service): refactored file import service to utilize the new asssetstorage service * refactor(server errors): refactor server errors to use the shared module definitions Now all the errors inherit from BaseError * refactor(fileimport service): cleanup after refactor * feat(frontend fileimports): use the new blob storage for downloading the original file * refactor(server fileimports): clean up the remnants of S3 storage from file imports * refactor(server authz): centralize generic authz pipeline configs * refactor(server blob storage): refactor / rename everything to use the `blob-storage` name * ci(circleci): add s3 objectstorage environment variables * ci(circleci): fix missing env variables * ci(circleci): add minio test container * ci(circleci): fix minio app startup * ci(circleci): enable circleci remote docker * ci(circleci): fix minio startup * ci(cirleci): detach and wait properly for minio to start * ci(circleci): revert to additional minio img config, it only fails when the container is stopped ?! * ci(circleci): disable file uploads * fix(fileimports): update with blob storage refactor leftovers * feat(server blob storage): add blob storage graphql api * refactor(server errors): merge new errors to shared module * fix(server comments rte): fix import for RTE error * chore(fileimports): remove node-fetch from dependency * chore(server): remove body parser dependency * fix(server blob storage): fix gql api * fix(frontend): fix fileupload item not loading the new upload status, cause of premature event fire * feat(server blob storage): fix file size limit and allow for public streams * Update packages/server/modules/blobstorage/graph/schemas/blobstorage.graphql Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com> * chore(blobstorage): fix PR review issues * fix(server): fix import bugs * chore(docker): ignore python venv data for docker build context * feat(knex): update knex configuration with min max connections and application_name * feat(helm chart): configure postgres max connections for server in the helm chart Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>

Speckle | Server
Server and Web packages
Speckle is data infrastructure for the AEC industry.
About Speckle
Features
- Object-based: say goodbye to files! Speckle is the first object based platform for the AEC industry
- Version control: Speckle is the Git & Hub for geometry and BIM data
- Collaboration: share your designs collaborate with others
- 3D Viewer: see your CAD and BIM models online, share and embed them anywhere
- Interoperability: get your CAD and BIM models into other software without exporting or importing
- Real time: get real time updates and notifications and changes
- GraphQL API: get what you need anywhere you want it
- Webhooks: the base for a automation and next-gen pipelines
- Built for developers: we are building Speckle with developers in mind and got tools for every stack
- Built for the AEC industry: Speckle connectors are plugins for the most common software used in the industry such as Revit, Rhino, Grasshopper, AutoCAD, Civil 3D, Excel, Unreal Engine, Unity, QGIS, Blender, ArchiCAD and more!
Try Speckle now!
Give Speckle a try in no time by:
Resources
for help, feature requests or just to hang with other speckle enthusiasts, check out our community forum!
our tutorials portal is full of resources to get you started using Speckle
reference on almost any end-user and developer functionality
Repo structure
This monorepo is the home of the Speckle v2 web packages:
packages/server: the Server, a nodejs app. Core external dependencies are a Redis and Postgresql db.packages/frontend: the Frontend, a static Vue app.packages/viewer: a threejs extension that allows you to display 3D datapackages/objectloader: a small js utility class that helps you stream an object and all its sub-components from the Speckle Server API.packages/preview-service: generates object previews for Speckle Objects headlessly. This package is meant to be called on by the server.packages/webhook-service: making external webhook callspackages/fileimport-service: parsing and importing files
Other repos
Make sure to also check and ⭐️ these other Speckle repositories:
speckle-sharp: .NET tooling, connectors and interoperabilityspecklepy: Python SDK 🐍speckle-excel: Excel connectorspeckle-unity: Unity 3D connectorspeckle-blender: Blender connectorspeckle-unreal: Unreal Engine Connectorspeckle-qgis: QGIS connectodspeckle-powerbi: PowerBi connector- and more connectors & tooling!
Developing and Debugging
Have you checked our dev docs?
We have a detailed section on deploying a Speckle server. To get started developing locally, you can see the Local development environment page.
TL;DR;
We're using yarn and its workspaces functionalities to manage the monorepo. Make sure you are using nodejs 16+. To get started, run:
$ corepack enable
$ yarn
$ yarn build
After this, you can use the scripts in the individual packages or run all in dev mode:
$ yarn dev
IDE
The suggested IDE for working in this repo is VSCode, because the repo has special configs to improve the DX there (auto-format & auto-lint, recommended extensions etc.).
This repository relies on VSCode multi-root workspaces, so for the best DX and proper formatting/linting make sure you open the project using the workspace.code-workspace file instead of just opening the folder in VSCode.
Troubleshooting
lint-on-commit fails with "File ignored because of a matchin ignore pattern"
There's currently a limitation in ESLint & lint-staged that causes this - the warning is thrown whenver your Git changes contain a file that is ignored by ESLint (https://github.com/eslint/eslint/issues/15010).
To get around this you can use the --no-verify flag of git commit, for now, but make sure all other issues found by the linter are fixed.
Contributing
Please make sure you read the contribution guidelines for an overview of the best practices we try to follow.
When pushing commits to this repo, please follow the following guidelines:
- Before commiting, make sure
$ yarn lintand$ yarn prettier:checkchecks pass, othewise the pre-commit hook fails. - When ready to commit,
$ yarn cz& follow the prompts. - Please use the name of the package as the scope of your commit.
Security
For any security vulnerabilities or concerns, please contact us directly at security[at]speckle.systems.
License
Unless otherwise described, the code in this repository is licensed under the Apache-2.0 License. Please note that some modules, extensions or code herein might be otherwise licensed. This is indicated either in the root of the containing folder under a different license file, or in the respective file's header. If you have any questions, don't hesitate to get in touch with us via email.