Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork93
A self-hosted digital asset manager for 3d print files.
License
manyfold3d/manyfold
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.
Visitmanyfold.app for more details, installation instructions, and user and administration guides! Or, to have a go straight away, try our demo attry.manyfold.app.
There are a few routes to get help:
- GitHub issues is the best place to report bugs.
- Live chat to the "team" on Matrix (an open Discord/Slack-like chat system).
- Get in touch with oursocial media presence in the Fediverse (Mastodon, etc).
And, if you want to contribute financially to development efforts...
Manyfold is open source software, and we encourage contributions! If you want to get involved, follow the guidance below, which explains how to get up and running. Then take a look at ourgood first issue tag for tasks that might suit newcomers to the codebase, or take a look at ourdevelopment roadmap.
The application is built inRuby on Rails, and tries to follow the best practices of that framework wherever possible. If you're not familiar with Rails, theirGetting Started guide is a good first introduction.
In general, Manyfold is a server-side app that uses plain old HTTP requests. We don't have any code using XHR, Websockets, or other more interactive comms yet (though could do in future).
The application consists of the application server itself, plus a background job runner usingSidekiq for asynchronous tasks.
There are a few other major components that we build with:
- Bootstrap 5 provides the frontend CSS / JS
- THREE.js (via TypeScript) is used for the client-side 3D rendering
- Mittsu, a Ruby port of THREE.js, is used for server-side 3D code
- PostgreSQL is the production database, though sqlite3 is used in dev
To run the app yourself, you'll need the following installed:
- Ruby 3.4
- Bundler 2.6+
- Node.js 22.15.1 (and run
corepack enable) - Yarn 3.8+
- Foreman oranother Procfile runner
- libarchive (for upload support)
- imagemagick (for image thumbnail generation)
- ngrok (for ActivityPub development)
- assimp (for model file analysis)
To run the application once you've cloned this repo, you should be able to just runbin/dev; that should set up the database, perform migrations, install dependencies, and then make the application available athttp://127.0.0.1:5000.
If you want to configure optional features, set the appropriateenvironment variables in a file called.env.development.local. Seeenv.example for a template file. Note that the required environment variables in the documentation are not needed in development mode, due to the use of SQLite instead of PostgreSQL.
Runningbin/dev also expects to be able to start a pre-configuredngrok tunnel called "manyfold", to enable ActivityPub federation in development. If you don't want to use this, you can comment the line out ofProcfile.dev, though please don't commit it!
To configure the tunnel, add this to yourngrok config file:
endpoints: -name:manyfoldurl:https://{your-ngrok-url-here}upstream:url:5000
To simplify the development environment setup, Manyfold includes a devcontainer configuration. This allows you to use Visual Studio Code's Remote - Containers extension to develop inside a container.
- Docker installed on your machine
- Visual Studio Code with the Remote - Containers extension
Clone the repository:
git clone https://github.com/manyfold3d/manyfold.gitcd manyfoldOpen the repository in Visual Studio Code:
code.When prompted by Visual Studio Code, click on "Reopen in Container". This will build the devcontainer and open the project inside it.
Once the container is running, you can use the integrated terminal in Visual Studio Code to run commands as usual.
We useRubocop to monitor adherence to coding standards in Ruby code. We useStandardRB rules along with some other rulesets for specific libraries and frameworks.
You can run the linter withbundle exec rubocop.
We also have linters for ERB and Typescript files. You can run these with:bundle exec erb_lint --lint-all andyarn run lint:ts respectively.
Code linting is automatically performed by our GitHub Actions test runners, but if you set upHusky, it will also execute as a pre-commit hook.
We want to produce well-tested code; it's not 100%, but we aim to increase test coverage with each new bit of code.
You can run the test suite as a one off with the commandbundle exec rake, or you can start a continuous test runner withbundle exec guard that will automatically run tests as you code.
Tests are run automatically when pushed to our repository using GitHub Actions.
Generation of screenshots for the documentation is made with system specs and is not run by default.To generate screenshots, setDOC_SCREENSHOT=true:
# All specs and documentationDOC_SCREENSHOT=true bundleexec rspec# Only documentation specsDOC_SCREENSHOT=true bundleexec rspec -t @documentation
Manyfold usesRails' I18n framework to handle all text content.
You can check the validity of locale files withbundle exec i18n-tasks health. This is also run as part of our test pipeline, so will be enforced on new code.
Translations are also available in client-side Javascript; they are built from the Rails locale files as part of the asset pipeline, usingi18n-js. If you need to run an export manually, dobundle exec i18n export -c config/i18n-js.yml.
We are usingTranslation.io to manage translations into other languages. If you want to help out on that, sign up on the site and send us username on a GitHub issue for the language you're interested in.
To synchronise with Translation.io, runrake translation:clobber_and_sync:{locale} where{locale} is a supported code, such asde.
The application is distributed as a multi-platform docker image (built byDepot); see ourDocker Compose instructions for full details.
If you want to build your own version of the Docker image, you can do so by running docker build -f docker/default.dockerfile . in the root directory of this repository.
This project is funded throughNGI0 Entrust, a fund established byNLnet with financial support from the European Commission'sNext Generation Internet program. Learn more at theNLnet project page.
This project is also funded by you! Make a donation to support long-term development at OpenCollective:
Down the bottom because they're cool, but not important, here are some stats!
About
A self-hosted digital asset manager for 3d print files.
Topics
Resources
License
Code of conduct
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.

