.forgejo/workflows | ||
src/structables | ||
.env.example | ||
.gitignore | ||
cronjob.txt | ||
docker-compose-example-dev.yml | ||
docker-compose-example.yml | ||
Dockerfile | ||
entrypoint.sh | ||
instances.json | ||
LICENSE | ||
pyproject.toml | ||
README.md | ||
renovate.json | ||
requirements-dev.txt |

Structables
An open source alternative front-end to Instructables. This is a fork of snowcatridge10's Indestructables, which itself is a fork of Cobra's Destructables.
Instances
URL | Provided by | Country | Notes |
---|---|---|---|
structables.private.coffee | Private.coffee | Austria 🇦🇹 🇪🇺 | Main instance |
structables.bloat.cat | Bloat.cat | Germany 🇩🇪 🇪🇺 | |
structables.darkness.services | Darkness.services | United States 🇺🇸 | |
structables.franklyflawless.org | FranklyFlawless | Germany 🇩🇪 🇪🇺 |
Tor Hidden Services
URL | Provided by | Country | Notes |
---|---|---|---|
structables.coffee2m3bjsrrqqycx6ghkxrnejl2q6nl7pjw2j4clchjj6uk5zozad.onion | Private.coffee | Austria 🇦🇹 🇪🇺 | Main instance |
structables.darknessrdor43qkl2ngwitj72zdavfz2cead4t5ed72bybgauww5lyd.onion | Darkness.services | United States 🇺🇸 |
Adding Your Instance
To add your own instance to this list, please open a pull request or issue, see below.
Opening Issues
If you're having problems using Structables, or if you have ideas or feedback for us, feel free to open an issue in the Private.coffee Git or on Github.
Of course, you can also join our Matrix room to discuss your ideas with us.
Run your own instance
Production: Manual
- Create a virtual environment:
python3 -m venv venv
- Activate the virtual environment:
source venv/bin/activate
- Install the packages:
pip install structables uwsgi
- Run
uwsgi --plugin python3 --http-socket 0.0.0.0:8002 --module structables.main:app --processes 4 --threads 4
- Point your reverse proxy to http://localhost:8002 and (optionally) serve static files from the
venv/lib/pythonX.XX/site-packages/structables/static
directory - Connect to your instance under your domain
- Ensure that
/cron/
is executed at regular intervals so that the app updates its cached data.
Production: Docker
Note: The Docker image is now hosted on git.private.coffee instead of Docker Hub. Please use the new image name git.private.coffee/privatecoffee/structables
instead of privatecoffee/structables
to continue receiving updates.
-
Copy
.env.example
to.env
and adjust the settings as necessary -
Copy
docker-compose-example.yml
todocker-compose.yml
and adjust it as necessary, for example modifying resource limits or changing the port/host configuration -
Build and run the Docker container:
docker-compose up [-d]
-
Point your reverse proxy to http://127.0.0.1:8002 (or your chosen port, if you modified it) and (optionally) serve static files from
structables/static
-
Connect to your instance under your domain
-
Ensure that
/cron/
is executed at regular intervals so that the app updates its cached data.
Development
- Clone the repository:
git clone https://git.private.coffee/privatecoffee/structables.git && cd structables
- Create a virtual environment:
python3 -m venv venv
- Activate the virtual environment:
source venv/bin/activate
- Install in editable mode:
pip install -e .
- Run
structables
- Connect to http://localhost:8002
Environment Variables
Structables supports the use of the following environment variables for configuration:
STRUCTABLES_PORT
: The port to listen on (default: 8002)STRUCTABLES_LISTEN_HOST
: The host/IP address to listen on (default: 127.0.0.1)STRUCTABLES_INVIDIOUS
: The hostname of an Invidious instance to use for embedded YouTube videos (currently not recommended due to YouTube blocks)STRUCTABLES_UNSAFE
: If set, allow embedding untrusted iframes (if unset, display a warning and allow loading the content manually)STRUCTABLES_PRIVACY_FILE
: The path to a text file or Markdown file (with .md suffix) to use for the Privacy Policy page (if unset, tryprivacy.txt
orprivacy.md
in the working directory, or fall back to a generic message)STRUCTABLES_DEBUG
: If set, log additional debug information to stdoutSTRUCTABLES_THEME
: Allows selecting a theme for the frontend. Currently, onlydark
andlight
are supported. If not set, it will be automatically detected based on the user's system settings, and a toggle will be provided in the header.STRUCTABLES_CACHE_ENABLED
: Whether to enable caching of proxied content (default: true). Set to "false" or "0" to disable caching.STRUCTABLES_CACHE_DIR
: The directory to use for caching proxied content (default:structables_cache
within the temporary directory as returned bytempfile.gettempdir()
)STRUCTABLES_CACHE_MAX_AGE
: The maximum age of cached content in seconds before it's considered stale (default: 604800 seconds, or 1 week)STRUCTABLES_CACHE_MAX_SIZE
: The maximum size of the cache directory in bytes (default: 1073741824 bytes, or 1GB)STRUCTABLES_CACHE_CLEANUP_INTERVAL
: How often to run the cache cleanup process in seconds (default: 3600 seconds, or 1 hour)
License
This project, as well as the two projects it is based on, are licensed under the GNU Affero General Public License v3. See the LICENSE file for more information.