{"id":14981180,"url":"https://github.com/specklesystems/speckle-server","last_synced_at":"2025-05-14T04:03:25.347Z","repository":{"id":37007759,"uuid":"255673761","full_name":"specklesystems/speckle-server","owner":"specklesystems","description":"The Speckle Server, Frontend, 3D Viewer, \u0026 other JS utilities.","archived":false,"fork":false,"pushed_at":"2025-05-09T08:44:25.000Z","size":278151,"stargazers_count":716,"open_issues_count":112,"forks_count":201,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-05-09T09:25:21.439Z","etag":null,"topics":["3d","aec","frontend","interoperability","javascript","monorepo","speckle","speckle-server","threejs","version-control","viewer"],"latest_commit_sha":null,"homepage":"https://speckle.systems","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/specklesystems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-14T17:11:45.000Z","updated_at":"2025-05-08T22:16:33.000Z","dependencies_parsed_at":"2023-12-21T07:12:20.842Z","dependency_job_id":"7c4dc74f-d21d-4fb3-abcf-d5b98fd95334","html_url":"https://github.com/specklesystems/speckle-server","commit_stats":{"total_commits":5011,"total_committers":43,"mean_commits":"116.53488372093024","dds":0.7728996208341649,"last_synced_commit":"e7c84111d8e78b0a32bee3c6dc7b3eeaeba87f73"},"previous_names":[],"tags_count":338,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specklesystems%2Fspeckle-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specklesystems%2Fspeckle-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specklesystems%2Fspeckle-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specklesystems%2Fspeckle-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/specklesystems","download_url":"https://codeload.github.com/specklesystems/speckle-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254067103,"owners_count":22009078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","aec","frontend","interoperability","javascript","monorepo","speckle","speckle-server","threejs","version-control","viewer"],"created_at":"2024-09-24T14:03:05.424Z","updated_at":"2025-05-14T04:03:20.327Z","avatar_url":"https://github.com/specklesystems.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/2679513/131189167-18ea5fe1-c578-47f6-9785-3748178e4312.png\" width=\"150px\"/\u003e\u003cbr/\u003e\n  Speckle | Server\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://twitter.com/SpeckleSystems\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/SpeckleSystems?style=social\" alt=\"Twitter Follow\"\u003e\u003c/a\u003e \u003ca href=\"https://speckle.community\"\u003e\u003cimg src=\"https://img.shields.io/discourse/users?server=https%3A%2F%2Fspeckle.community\u0026amp;style=flat-square\u0026amp;logo=discourse\u0026amp;logoColor=white\" alt=\"Community forum users\"\u003e\u003c/a\u003e \u003ca href=\"https://speckle.systems\"\u003e\u003cimg src=\"https://img.shields.io/badge/https://-speckle.systems-royalblue?style=flat-square\" alt=\"website\"\u003e\u003c/a\u003e \u003ca href=\"https://speckle.guide/dev/\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-speckle.guide-orange?style=flat-square\u0026amp;logo=read-the-docs\u0026amp;logoColor=white\" alt=\"docs\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003e Speckle is the first AEC data hub that connects with your favorite AEC tools. Speckle exists to overcome the challenges of working in a fragmented industry where communication, creative workflows, and the exchange of data are often hindered by siloed software and processes. It is here to make the industry better.\n\n\u003ch3 align=\"center\"\u003e\n    Server and Web packages\n\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://codecov.io/gh/specklesystems/speckle-server\"\u003e\n\u003cimg src=\"https://codecov.io/gh/specklesystems/speckle-server/branch/master/graph/badge.svg\" alt=\"codecov\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://dl.circleci.com/status-badge/redirect/gh/specklesystems/speckle-server/tree/main\"\u003e\n\u003cimg src=\"https://dl.circleci.com/status-badge/img/gh/specklesystems/speckle-server/tree/main.svg?style=svg\" alt=\"CircleCI\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n# Repo structure\n\nThis monorepo is the home of the Speckle v2 web packages:\n\n- [`packages/server`](https://github.com/specklesystems/speckle-server/blob/main/packages/server): the Server, a nodejs app. Core external dependencies are a Redis and Postgresql db.\n- [`packages/frontend-2`](https://github.com/specklesystems/speckle-server/blob/main/packages/frontend-2): the Frontend, a Nuxt/Vue app.\n- [`packages/viewer`](https://github.com/specklesystems/speckle-server/blob/main/packages/viewer): a threejs extension that allows you to display 3D data [![npm version](https://camo.githubusercontent.com/dc69232cc57b77de6554e752dd6dfc60ca0ecdfbe91bdfcbf7c7531a511ec200/68747470733a2f2f62616467652e667572792e696f2f6a732f253430737065636b6c652532467669657765722e737667)](https://www.npmjs.com/package/@speckle/viewer)\n- [`packages/objectloader`](https://github.com/specklesystems/speckle-server/blob/main/packages/objectloader): a small js utility class that helps you stream an object and all its sub-components from the Speckle Server API. [![npm version](https://camo.githubusercontent.com/4d4f1e38ce50aaf11b4a3ad8e01ce3eaaa561dc5fd08febbae556f52f1d41097/68747470733a2f2f62616467652e667572792e696f2f6a732f253430737065636b6c652532466f626a6563746c6f616465722e737667)](https://www.npmjs.com/package/@speckle/objectloader)\n- [`packages/preview-service`](https://github.com/specklesystems/speckle-server/blob/main/packages/preview-service): generates object previews for Speckle Objects headlessly. This package is meant to be called on by the server.\n- [`packages/webhook-service`](https://github.com/specklesystems/speckle-server/tree/main/packages/webhook-service): making external webhook calls\n- [`packages/fileimport-service`](https://github.com/specklesystems/speckle-server/tree/main/packages/fileimport-service): parsing and importing files\n\n## Other repos\n\nMake sure to also check and ⭐️ these other Speckle repositories:\n\n- [`speckle-sharp-connectors`](https://github.com/specklesystems/speckle-sharp-connectors): .NET connectors and desktop UI\n- [`speckle-sharp-sdk`](https://github.com/specklesystems/speckle-sharp-sdk): .NET SDK, tests, and Objects\n- [`specklepy`](https://github.com/specklesystems/specklepy): Python SDK 🐍\n- [`speckle-sketchup`](https://github.com/specklesystems/speckle-sketchup): Sketchup connector\n- [`speckle-excel`](https://github.com/specklesystems/speckle-excel): Excel connector\n- [`speckle-unity`](https://github.com/specklesystems/speckle-unity): Unity 3D connector\n- [`speckle-blender`](https://github.com/specklesystems/speckle-blender): Blender connector\n- [`speckle-unreal`](https://github.com/specklesystems/speckle-unreal): Unreal Engine connector\n- [`speckle-qgis`](https://github.com/specklesystems/speckle-qgis): QGIS connector\n- [`speckle-powerbi`](https://github.com/specklesystems/speckle-powerbi): PowerBi connector\n- and more [connectors \u0026 tooling](https://github.com/specklesystems/)!\n\n# Developing and Debugging\n\nHave you checked our [dev docs](https://speckle.guide/dev/)?\n\nWe have a detailed section on [deploying a Speckle server](https://speckle.guide/dev/server-setup.html). To get started developing locally, you can see the [Local development environment](https://speckle.guide/dev/server-local-dev.html) page.\n\n## TL;DR\n\nWe're using yarn and its workspaces functionalities to manage the monorepo.\nMake sure you are using [Node](https://nodejs.org/en) version 18.\nTo get started, run:\n\n1. `corepack enable`\n1. `yarn`\n1. `yarn build`\n\nAfter this, you can use the scripts in the individual packages or run them all in dev mode:\n\n- `yarn dev`\n\nFor development you'll also want to run `yarn dev:docker:up` which will start up the docker containers you will need\nto be able to run the apps on your machine.\n\n## IDE\n\nThe suggested IDE for working in this repo is VSCode, because the repo has special configs to improve the DX there (auto-format \u0026 auto-lint, recommended extensions etc.).\n\nThis repository relies on [VSCode multi-root workspaces](https://code.visualstudio.com/docs/editor/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.\n\n### Proper TypeScript support\n\nTo get proper TS support in standard TS files as well as Vue files, we rely on the **Volar** VSCode extension - not **Vetur**! When you open the workspace for the very first time, VSCode should already prompt you to install this extension.\nThe default Volar setup can be quite resource intensive, however, because there end up being standard TS Language Server instances running as well as Vue TS Language server instances. To resolve this issue we rely on Volar's [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471).\n\nEssentially, ensure you have **Volar** enabled, and the built in **TypeScript and JavaScript Language Features** extension disabled (for this workspace)!\n\n## Useful containers\n\n### Maildev\n\nWe have a [Maildev](https://github.com/maildev/maildev) container available that you can use to see all e-mails sent out from the app. Make sure your `server` .env file is configured properly to use it:\n\n```bash\nEMAIL=true\nEMAIL_FROM=\"no-reply@example.org\"\nEMAIL_HOST=\"localhost\"\nEMAIL_PORT=\"1025\"\n```\n\nThe web portal is available at `localhost:1080` and it's listening for mail on port `1025`.\n\n### Minio (S3 storage)\n\nDefault credentials are: `minioadmin:minioadmin`\nMain storage Web UI: [http://localhost:9001/](http://localhost:9001/)\nRegion1 storage Web UI: [http://localhost:9021/](http://localhost:9021/)\n\nYou can use the web UI to validate uploaded blobs\n\n# Contributing\n\nPlease make sure you read the [contribution guidelines](https://github.com/specklesystems/speckle-server/blob/main/CONTRIBUTING.md) for an overview of the best practices we try to follow.\n\nWhen pushing commits to this repo, please follow the following guidelines:\n\n- When ready to commit, run `$ yarn cz` \u0026 follow the prompts.\n\nWhen committing to git, an automated script will run. This will check that your commit conforms to Speckle's guidelines.\n\n- To enable additional checks, you may wish to _optionally_ install the following:\n  - [`pre-commit`](https://pre-commit.com/#install)\n  - [`hadolint`](https://github.com/hadolint/hadolint#install)\n  - [`shellcheck`](https://github.com/koalaman/shellcheck#installing)\n  - [`helm`](https://helm.sh/docs/intro/install/)\n  - [`circleci`](https://circleci.com/docs/local-cli)\n  - [`ggshield`](https://github.com/GitGuardian/ggshield#installation)\n- Please note that these additional checks will be run by Speckle's automated CI environment and non-conformances, if any, may prevent your Pull Request from being merged.\n- Please use the name of the package as the scope of your commit.\n- Note that `ggshield` requires you to [register an account](https://dashboard.gitguardian.com/auth/signup) and then [authorise with GitGuardian](https://github.com/GitGuardian/ggshield#initial-setup) before it can be used: `ggshield auth login`\n- Then run to enable pre-commit. This will run on every commit you make:\n\n  ```bash\n  pre-commit install\n  ```\n\n# Security\n\nFor any security vulnerabilities or concerns, please contact us directly at security[at]speckle.systems.\n\n# License\n\nUnless 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](mailto:hello@speckle.systems).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecklesystems%2Fspeckle-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspecklesystems%2Fspeckle-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecklesystems%2Fspeckle-server/lists"}