Skip to main content

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.

Support Private.coffee! Matrix PyPI PyPI - Python Version PyPI - License Latest Git Commit

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

  1. Create a virtual environment: python3 -m venv venv
  2. Activate the virtual environment: source venv/bin/activate
  3. Install the packages: pip install structables uwsgi
  4. Run uwsgi --plugin python3 --http-socket 0.0.0.0:8002 --module structables.main:app --processes 4 --threads 4
  5. Point your reverse proxy to http://localhost:8002 and (optionally) serve static files from the venv/lib/pythonX.XX/site-packages/structables/static directory
  6. Connect to your instance under your domain
  7. 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.

  1. Copy .env.example to .env and adjust the settings as necessary

  2. Copy docker-compose-example.yml to docker-compose.yml and adjust it as necessary, for example modifying resource limits or changing the port/host configuration

  3. Build and run the Docker container:

    docker-compose up [-d]
    
  4. 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

  5. Connect to your instance under your domain

  6. Ensure that /cron/ is executed at regular intervals so that the app updates its cached data.

Development

  1. Clone the repository: git clone https://git.private.coffee/privatecoffee/structables.git && cd structables
  2. Create a virtual environment: python3 -m venv venv
  3. Activate the virtual environment: source venv/bin/activate
  4. Install in editable mode: pip install -e .
  5. Run structables
  6. 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, try privacy.txt or privacy.md in the working directory, or fall back to a generic message)
  • STRUCTABLES_DEBUG: If set, log additional debug information to stdout
  • STRUCTABLES_THEME: Allows selecting a theme for the frontend. Currently, only dark and light 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 by tempfile.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.

Metadata

Release files for structables 0.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for structables 0.4.4
File Size Uploaded
structables-0.4.4.tar.gz 985.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for structables 0.4.4
File Interpreter ABI Platform
structables-0.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 2.0 MB

Release files / structables-0.4.4.tar.gz

Download URL structables-0.4.4.tar.gz
Size 985.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4aaecf65ff880ff438e55135e19c7d748b1886274f86ccab78a7f3cc38a80f80
BLAKE2b-256 checksum
How to use checksums
77cffdffb253fdc61af4c7eea166258bfcc715587461fc99542c8887a9c9ddac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.2

Release files / structables-0.4.4-py3-none-any.whl

Download URL structables-0.4.4-py3-none-any.whl
Size 993.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
47d666121bffdfe882c332f60c6c77f0ea6642bafd404c8cf96ce0c02d8bf741
BLAKE2b-256 checksum
How to use checksums
422efd8fd29caebc3812ed4bee8e5010d187b4d268809d18eb1bd9d187d7f9c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.4.4 This release

2 release files

0.4.3

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.16

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page