Skip to content

Add octogoat plugin#1435

Open
ksmith1489 wants to merge 6 commits intoOctoPrint:gh-pagesfrom
ksmith1489:add-octogoat-plugin
Open

Add octogoat plugin#1435
ksmith1489 wants to merge 6 commits intoOctoPrint:gh-pagesfrom
ksmith1489:add-octogoat-plugin

Conversation

@ksmith1489
Copy link
Copy Markdown

@ksmith1489 ksmith1489 commented May 6, 2026

  • You have read the "Registering a new Plugin" guide.
  • You want to and are able to maintain the plugin you are registering, long-term.
  • You understand why the plugin you are registering works.
  • You have read and acknowledge the Code of Conduct.

What is the name of your plugin?

OctoGoat

What does your plugin do?

OctoGoat helps users recover failed 3D prints when the partially completed print is still attached to the bed.

The plugin generates reconstructed resume G-code locally inside OctoPrint, using the original G-code file, the measured print height, and the user’s slicer layer height. It also provides a guided alignment flow so the user can safely align the printer to the real-world print position before choosing to resume.

It is designed to keep the user in control of printer movement and final resume confirmation. It does not force automatic Z homing into an existing print.

OctoGoat also includes optional Klipper/Moonraker support through a user-provided local Moonraker address.

Where can we find the source code of your plugin?

https://github.com/ksmith1489/octogoat-plugin

Was any kind of genAI (ChatGPT, Copilot etc) involved in creating this plugin?

Yes. ChatGPT, GitHub Copilot, and Codex were used as development assistants while building and refining the plugin.

The plugin was not simply generated blindly and published without review. I have been actively involved in the design, testing, debugging, and iteration of the plugin, including testing the OctoPrint UI, local resume G-code generation, license validation behavior, and Klipper/Moonraker command flow on actual printer setups.

I understand the main architecture and behavior of the plugin: the OctoPrint plugin UI gathers the file and recovery inputs, the local resume engine reconstructs the resume G-code, unsafe commands are removed before resuming, alignment commands are user-triggered, and the external service is used for subscription/license validation rather than for uploading or processing the print file.

I also have prior coding experience from building trading bots and indicators, including Pine Script and MetaTrader 4 related work, and I am comfortable maintaining and debugging this plugin going forward.

Is your plugin commercial in nature?

Yes.

OctoGoat is a commercial plugin with subscription-based licensing. Installing the plugin is free, but an active paid subscription is required before the plugin can generate, download, upload, or execute resume output. There is only one price and plan for $29 per year.

License, terms, and privacy information are available at:

https://app.lazarus3dprint.com

Does your plugin rely on some cloud services?

Partially.

The resume G-code generation runs locally inside the OctoPrint plugin. The original G-code file is not uploaded to the OctoGoat/Lazarus service for resume generation.

The plugin does use the OctoGoat/Lazarus service at:

https://app.lazarus3dprint.com

for subscription and license validation.

The plugin is marked with the cloud attribute and includes a privacy policy link in the registration file:

https://app.lazarus3dprint.com/privacy

If the license validation service is unreachable, the plugin is intended to fail gracefully and not cause OctoPrint itself to malfunction.

Further notes

OctoGoat is focused on failed-print recovery with a safety-first, user-controlled workflow. Its goal is to make print recovery approachable for normal users while avoiding dangerous automatic behavior, especially around Z homing and printer movement near an already-existing print..
Big Thank you to Gina and everyone that keeps OctoPrint going strong. Holler at me and I will give you guys coupon codes for a free year's subscription.

Copy link
Copy Markdown
Member

@jacopotediosi jacopotediosi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The following is the result of my preliminary review. A decision on this PR will follow in the next days.

Security concerns

  • The plugin's SimpleAPI endpoints check that the user is authenticated but do not verify granular permissions. E.g. some commands allow moving the printer head without checking the CONTROL permission, others modify plugin settings without checking the SETTINGS permission.

  • The plugin injects a JavaScript file from Stripe's site into OctoPrint's DOM, on every page and even when the plugin is not in use - as long as it is installed and enabled - in order to handle license payments. This allows Stripe to execute virtually any JavaScript code within OctoPrint's pages, and could be a risk - even assuming we trust Stripe - due to potential supply chain attacks. Furthermore, I'm not convinced that handling payments inside OctoPrint's UI is a good idea, and I don't think it's a responsibility the project wants to take on. Please handle payments outside OctoPrint, e.g. on your own licensing server.

Privacy concerns

  • The Privacy Policy does not mention that Stripe's Privacy Policy also applies, nor that including Stripe's script could result in third-party data collection.

Concerns about the licensing approach

  • There is no way to know the pricing, the available plans, or the limits of the free tier (if any) before installing the plugin.

  • The license check is entirely client-side and performed in the plugin's template file. A user could bypass it without even needing to tamper with the plugin's code, simply by using the plugin's SimpleAPI endpoints (which don't check license validity at all), or by setting the last_validated field in the settings to today's date, tricking the plugin into thinking the license has already been validated.

Concerns about adherence to OctoPrint best practices

  • The plugin still uses setup.py instead of the newer pyproject.toml-based packaging. Wasn't it generated from a recent version of the cookiecutter template?

  • is_template_autoescaped is not implemented, so a warning is printed to the logs on every OctoPrint startup.

  • The Software Update hook is not implemented, so plugin users won't be notified of future plugin updates and won't be able to upgrade easily.

Legal concerns

  • The static images in the plugin's folder carry a Sora watermark, so I assume they were generated on the free plan. I believe their terms of use do not allow commercial use of those images.

  • It should also be verified whether the plugin is actually allowed to use the Octo prefix in its name, according to OctoPrint's Trademark Rules. I'm not sure fair use would be justifiable here, per section 5(b):

    Using trading names that include the prefix "Octo" for the sole purpose of giving the impression that the product or service in question is related to OctoPrint.

Minor concerns about code hygiene

  • Placeholders are left throughout:

    • In the online Privacy Policy: Privacy questions: support@YOURDOMAIN.COM
    • In README.md: Terms: https://YOURDOMAIN.COM/terms and Privacy: https://YOURDOMAIN.COM/privacy
    • In TERMS.md: Support: support@YOURDOMAIN.COM Business / OEM / partnership inquiries: support@YOURDOMAIN.COM
    • In PRIVACY.md: Privacy questions: support@YOURDOMAIN.COM
    • In __init__.py: __plugin_url__ = "https://YOURDOMAIN.COM/octogoat" and __plugin_license__ = "Proprietary - See LICENSE.txt"
  • Many of the plugin's defined settings are unused, e.g. api_key, park_z_offset, smart_park_enabled, smart_park_acknowledged.

  • Stray files have been committed: a .codex file and the __pycache__ directory.

  • In __init__.py the plugin version is 0.1.0, but in setup.py it is 0.1.1.

Comment thread _plugins/octogoat.md Outdated
- windows
- macos

python: ">=3,<4"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This must be the same as declared in your __plugin_pythoncompat__: >=3.7,<4

@github-project-automation github-project-automation Bot moved this to In Progress in OctoPrint Backlog May 8, 2026
@ksmith1489
Copy link
Copy Markdown
Author

Hi @jacopotediosi, I pushed follow-up changes addressing the preliminary review.

Summary of fixes:

  • Registry metadata aligned and updated, including python: ">=3.7,<4" and removal of the misleading free-tier attribute.
  • Plugin metadata cleaned up and made consistent with OctoPrint control properties.
  • Added server-side OctoPrint permission checks for sensitive SimpleAPI commands.
  • Moved pricing and checkout out of the OctoPrint UI and onto the Lazarus activation site.
  • Added server-side license enforcement for generating, downloading, uploading, and executing resume output.
  • Added is_template_autoescaped and the Software Update hook.
  • Updated privacy wording to mention Stripe's privacy policy and corrected placeholder/legal text.
  • Removed the unused watermarked image file and other stray tracked artifacts.

Activation, pricing, and legal pages are now here:

The plugin source updates are on ksmith1489/octogoat-plugin main, and the registry submission branch has been updated as well.

Please take another look when you have time. Thank you.

@ksmith1489 ksmith1489 requested a review from jacopotediosi May 9, 2026 00:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

3 participants