├── .devcontainer ├── Dockerfile ├── devcontainer.json └── docker-compose.yml ├── .editorconfig ├── .env ├── .env.development.local.example ├── .github ├── CODE_OF_CONDUCT.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── pull_request_template.md └── workflows │ ├── build.yml │ ├── release.yml │ └── semantic_pull_request.yml ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .node-version ├── .versionrc.json ├── .vscode ├── extensions.json ├── launch.json ├── settings.default.json └── tasks.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── components.d.ts ├── developer-certificate-of-origin ├── docs ├── .gitignore ├── 404.html ├── CNAME ├── Gemfile ├── Gemfile.lock ├── README.md ├── _config.yml ├── _sass │ └── color_schemes │ │ └── fluidd.scss ├── assets │ └── images │ │ ├── adjust_layout.png │ │ ├── auth_login_multisource.png │ │ ├── auth_login_multisource_select.png │ │ ├── auth_trusted.png │ │ ├── automated-updates.png │ │ ├── bed_mesh.png │ │ ├── camera_settings.png │ │ ├── console.png │ │ ├── diagnostics_collector_config.png │ │ ├── diagnostics_edit_card.png │ │ ├── diagnostics_metrics_explorer.png │ │ ├── exclude_object.png │ │ ├── exclude_object_modal.png │ │ ├── fluidd_icon.svg │ │ ├── fluidd_social.png │ │ ├── gcode_display_opts.png │ │ ├── gcode_preview.png │ │ ├── gcode_settings.png │ │ ├── graph.png │ │ ├── layout.png │ │ ├── localization.png │ │ ├── logo.svg │ │ ├── logo_ldo.svg │ │ ├── macro_visibility.png │ │ ├── macros1.png │ │ ├── macros2.png │ │ ├── multiple-extruder-steppers.png │ │ ├── multiple-extruders.png │ │ ├── notifications.png │ │ ├── ogfluidd.png │ │ ├── physical-printer.png │ │ ├── presets.png │ │ ├── preview_sliced.png │ │ ├── print_history.png │ │ ├── print_stats.png │ │ ├── printer-selection.png │ │ ├── reprint.png │ │ ├── side_menu.png │ │ ├── slicer-upload.png │ │ ├── spoolman-dashboard-card.png │ │ ├── spoolman-multitool.png │ │ ├── spoolman-scan-spool.png │ │ ├── theme.png │ │ ├── thumbnails.png │ │ └── updates.png ├── authorization │ └── index.md ├── configuration │ ├── fluidd.xyz.md │ ├── index.md │ ├── initial_setup.md │ ├── moonraker.md │ ├── moonraker_conf.md │ ├── multiple_printers.md │ ├── obico_for_remote_access.md │ └── octoeverywhere_free_remote_access.md ├── customize │ ├── hide_outputs.md │ ├── index.md │ ├── layout.md │ └── themes.md ├── development │ ├── index.md │ └── localization.md ├── faq.md ├── favicon.ico ├── features │ ├── cameras.md │ ├── chart.md │ ├── console.md │ ├── diagnostics.md │ ├── gcode_viewer.md │ ├── index.md │ ├── localization.md │ ├── macros.md │ ├── med_mesh.md │ ├── multiple_extruders.md │ ├── multiple_printers.md │ ├── notifications.md │ ├── presets.md │ ├── print_history.md │ ├── sensors.md │ ├── slicer-uploads.md │ ├── spoolman.md │ ├── thumbnails.md │ └── updates.md ├── index.md ├── installation │ ├── docker.md │ ├── fluiddpi.md │ ├── index.md │ ├── kiauh.md │ └── manual.md ├── sponsors │ └── index.md └── updates │ ├── automated.md │ ├── index.md │ └── manual-updates.md ├── env.d.ts ├── eslint.config.mjs ├── index.html ├── package-lock.json ├── package.json ├── public ├── config.json ├── editor.theme.json ├── favicon.ico ├── img │ ├── icons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── android-chrome-maskable-192x192.png │ │ ├── android-chrome-maskable-512x512.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── msapplication-icon-144x144.png │ │ ├── mstile-150x150.png │ │ ├── safari-pinned-tab.svg │ │ ├── shortcut-configuration-96x96.png │ │ └── shortcut-settings-96x96.png │ └── mmu │ │ ├── mmu_3MS.svg │ │ ├── mmu_AngryBeaver.svg │ │ ├── mmu_BoxTurtle.svg │ │ ├── mmu_ERCF.svg │ │ ├── mmu_HappyHare.svg │ │ ├── mmu_MMX.svg │ │ ├── mmu_NightOwl.svg │ │ ├── mmu_QuattroBox.svg │ │ └── mmu_Tradrack.svg ├── logo_annex.svg ├── logo_btt.svg ├── logo_cocoapress.svg ├── logo_eva.svg ├── logo_fluidd.svg ├── logo_hevort.svg ├── logo_kingroon.svg ├── logo_klipper.svg ├── logo_ldo.svg ├── logo_mellow.svg ├── logo_peopoly.svg ├── logo_prusa.svg ├── logo_qidi.svg ├── logo_ratrig.svg ├── logo_siboor.svg ├── logo_snakeoil.svg ├── logo_voron.svg ├── logo_vzbot.svg ├── logo_z-bolt.svg ├── logo_zerog.svg └── robots.txt ├── server ├── config.json └── nginx │ └── nginx │ ├── common_vars.conf.template │ └── default.conf.template ├── src ├── App.vue ├── api │ ├── httpClientActions.ts │ └── socketActions.ts ├── components │ ├── common │ │ ├── ActionCommandPromptDialog.vue │ │ ├── AddInstanceDialog.vue │ │ ├── AppWarnings.vue │ │ ├── BedScrewsAdjustDialog.vue │ │ ├── CollapsableCard.vue │ │ ├── FlashMessage.vue │ │ ├── KeyboardShortcutsDialog.vue │ │ ├── KlippyStatusCard.vue │ │ ├── ManualProbeDialog.vue │ │ ├── PeripheralsDialog.vue │ │ ├── PromiseWrapper.vue │ │ ├── RegisterServiceWorker.vue │ │ ├── RolloverLogsDialog.vue │ │ ├── ScrewsTiltAdjustDialog.vue │ │ ├── SocketDisconnected.vue │ │ ├── SystemCommands.vue │ │ ├── SystemControl.vue │ │ ├── SystemLayout.vue │ │ ├── SystemPrinters.vue │ │ └── UpdatingDialog.vue │ ├── layout │ │ ├── AppAnnouncementDismissMenu.vue │ │ ├── AppBar.vue │ │ ├── AppFooter.vue │ │ ├── AppNavDrawer.vue │ │ ├── AppNotificationMenu.vue │ │ ├── AppObservedColumn.vue │ │ ├── AppSaveConfigAndRestartBtn.vue │ │ ├── AppSettingsNav.vue │ │ ├── AppToolsDrawer.vue │ │ ├── AppUploadAndPrintBtn.vue │ │ └── AppUserMenu.vue │ ├── settings │ │ ├── FileBrowserSettings.vue │ │ ├── FileEditorSettings.vue │ │ ├── GcodePreviewSettings.vue │ │ ├── GeneralSettings.vue │ │ ├── MmuSettings.vue │ │ ├── PendingChangesDialog.vue │ │ ├── SpoolmanSettings.vue │ │ ├── ThemeSettings.vue │ │ ├── ToolheadSettings.vue │ │ ├── VersionInformationDialog.vue │ │ ├── VersionSettings.vue │ │ ├── VersionStatus.vue │ │ ├── auth │ │ │ ├── ApiKeyDialog.vue │ │ │ ├── AuthSettings.vue │ │ │ ├── UserConfigDialog.vue │ │ │ └── UserPasswordDialog.vue │ │ ├── cameras │ │ │ ├── CameraConfigDialog.vue │ │ │ └── CameraSettings.vue │ │ ├── console │ │ │ ├── ConsoleFilterDialog.vue │ │ │ └── ConsoleSettings.vue │ │ ├── macros │ │ │ ├── MacroCategoryDialog.vue │ │ │ ├── MacroCategorySettings.vue │ │ │ ├── MacroSettings.vue │ │ │ └── MacroSettingsDialog.vue │ │ ├── presets │ │ │ ├── PresetDialog.vue │ │ │ └── PresetSettings.vue │ │ └── timelapse │ │ │ ├── TimelapseSettings.vue │ │ │ └── subsettings │ │ │ ├── CustomParkPositionSettings.vue │ │ │ ├── ParkExtrudeRetractSettings.vue │ │ │ ├── ToolheadParkingSettings.vue │ │ │ └── modes │ │ │ └── HyperlapseSettings.vue │ ├── ui │ │ ├── AppBtn.vue │ │ ├── AppBtnCollapse.vue │ │ ├── AppBtnCollapseGroup.vue │ │ ├── AppBtnGroup.vue │ │ ├── AppBtnToggle.vue │ │ ├── AppBtnToolheadMove.vue │ │ ├── AppChart.vue │ │ ├── AppChipColor.vue │ │ ├── AppColorPicker.vue │ │ ├── AppColumnPicker.vue │ │ ├── AppDataTableCellColors.vue │ │ ├── AppDataTableCellTemps.vue │ │ ├── AppDataTableRow.vue │ │ ├── AppDialog.vue │ │ ├── AppDragIcon.vue │ │ ├── AppDragOverlay.vue │ │ ├── AppDraggable.vue │ │ ├── AppFocusableContainer.vue │ │ ├── AppIcon.vue │ │ ├── AppInlineHelp.vue │ │ ├── AppIroColorPicker.vue │ │ ├── AppNamedSelect.vue │ │ ├── AppNamedSlider.vue │ │ ├── AppNamedSwitch.vue │ │ ├── AppNamedTextField.vue │ │ ├── AppNavItem.vue │ │ ├── AppQrCode.vue │ │ ├── AppSetting.vue │ │ ├── AppTextField.vue │ │ ├── AppTextFieldWithCopy.vue │ │ ├── AppThumbnailSize.vue │ │ └── AppUpDownBtnGroup.vue │ └── widgets │ │ ├── beacon │ │ ├── BeaconCard.vue │ │ └── SaveModelDialog.vue │ │ ├── bedmesh │ │ ├── BedMeshCard.vue │ │ ├── BedMeshChart.vue │ │ ├── BedMeshControls.vue │ │ └── SaveMeshDialog.vue │ │ ├── camera │ │ ├── CameraCard.vue │ │ ├── CameraItem.vue │ │ ├── CameraMenu.vue │ │ └── services │ │ │ ├── DeviceCamera.vue │ │ │ ├── HlsstreamCamera.vue │ │ │ ├── IframeCamera.vue │ │ │ ├── IpstreamCamera.vue │ │ │ ├── MjpegstreamerAdaptiveCamera.vue │ │ │ ├── MjpegstreamerCamera.vue │ │ │ ├── WebrtcCamerastreamerCamera.vue │ │ │ ├── WebrtcGo2RtcCamera.vue │ │ │ └── WebrtcMediamtxCamera.vue │ │ ├── console │ │ ├── Console.vue │ │ ├── ConsoleCard.vue │ │ ├── ConsoleCommand.vue │ │ └── ConsoleItem.vue │ │ ├── diagnostics │ │ ├── DiagnosticsCard.vue │ │ ├── DiagnosticsCardConfigDialog.vue │ │ ├── StateExplorer.vue │ │ └── config │ │ │ ├── AxesConfigStep.vue │ │ │ ├── CardConfigStep.vue │ │ │ ├── MetricsCollectorConfig.vue │ │ │ └── MetricsConfigStep.vue │ │ ├── endstops │ │ └── EndStopsCard.vue │ │ ├── exclude-objects │ │ ├── ExcludeObjects.vue │ │ └── ExcludeObjectsDialog.vue │ │ ├── filesystem │ │ ├── FileEditor.vue │ │ ├── FileEditorDialog.vue │ │ ├── FileEditorTextOnly.vue │ │ ├── FileNameDialog.vue │ │ ├── FilePreviewDialog.vue │ │ ├── FileSystem.vue │ │ ├── FileSystemAddMenu.vue │ │ ├── FileSystemBrowser.vue │ │ ├── FileSystemBulkActions.vue │ │ ├── FileSystemContextMenu.vue │ │ ├── FileSystemDownloadDialog.vue │ │ ├── FileSystemFilterMenu.vue │ │ ├── FileSystemGoToFileDialog.vue │ │ ├── FileSystemToolbar.vue │ │ ├── FileSystemUploadDialog.vue │ │ ├── setupMonaco.features.ts │ │ └── setupMonaco.ts │ │ ├── gcode-preview │ │ ├── GcodePreview.vue │ │ ├── GcodePreviewButton.vue │ │ ├── GcodePreviewCard.vue │ │ └── GcodePreviewParserProgressDialog.vue │ │ ├── history │ │ ├── JobHistory.vue │ │ ├── JobHistoryItemStatus.vue │ │ └── PrintHistoryCard.vue │ │ ├── job-queue │ │ ├── JobQueue.vue │ │ ├── JobQueueBrowser.vue │ │ ├── JobQueueBulkActions.vue │ │ ├── JobQueueCard.vue │ │ ├── JobQueueContextMenu.vue │ │ ├── JobQueueMultiplyJobDialog.vue │ │ └── JobQueueToolbar.vue │ │ ├── jobs │ │ └── JobsCard.vue │ │ ├── limits │ │ ├── PrinterLimits.vue │ │ └── PrinterLimitsCard.vue │ │ ├── macros │ │ ├── MacroBtn.vue │ │ ├── Macros.vue │ │ └── MacrosCard.vue │ │ ├── mmu │ │ ├── MmuCard.vue │ │ ├── MmuClogMeter.vue │ │ ├── MmuControls.vue │ │ ├── MmuEditGateMapDialog.vue │ │ ├── MmuEditTtgMapDialog.vue │ │ ├── MmuFilamentStatus.vue │ │ ├── MmuGateDialogRow.vue │ │ ├── MmuGateStatus.vue │ │ ├── MmuGateSummary.vue │ │ ├── MmuMachine.vue │ │ ├── MmuMaintenanceDialog.vue │ │ ├── MmuRecoverStateDialog.vue │ │ ├── MmuSettings.vue │ │ ├── MmuSpool.vue │ │ ├── MmuTtgMap.vue │ │ └── MmuUnit.vue │ │ ├── outputs │ │ ├── OutputFan.vue │ │ ├── OutputItem.vue │ │ ├── OutputLed.vue │ │ ├── OutputPin.vue │ │ ├── Outputs.vue │ │ └── OutputsCard.vue │ │ ├── retract │ │ ├── Retract.vue │ │ └── RetractCard.vue │ │ ├── runout-sensors │ │ └── RunoutSensorsCard.vue │ │ ├── sensors │ │ ├── Sensors.vue │ │ └── SensorsCard.vue │ │ ├── spoolman │ │ ├── QRReader.vue │ │ ├── SpoolSelectionDialog.vue │ │ └── SpoolmanCard.vue │ │ ├── stats │ │ └── PrinterStatsCard.vue │ │ ├── status │ │ ├── PauseAtLayerDialog.vue │ │ ├── PauseResumeBtn.vue │ │ ├── PrinterStatusCard.vue │ │ ├── ReprintTab.vue │ │ ├── StatusControls.vue │ │ ├── StatusLabel.vue │ │ └── StatusTab.vue │ │ ├── system │ │ ├── DiskUsageCard.vue │ │ ├── KlipperLoadChart.vue │ │ ├── McuCard.vue │ │ ├── McuInformationDialog.vue │ │ ├── McuLoadChart.vue │ │ ├── MoonrakerLoadChart.vue │ │ ├── SdInfoCard.vue │ │ ├── SystemLoadChart.vue │ │ ├── SystemMemoryChart.vue │ │ ├── SystemOverviewCard.vue │ │ └── SystemUsageCard.vue │ │ ├── thermals │ │ ├── HeaterContextMenu.vue │ │ ├── HeaterMpcCalibrateDialog.vue │ │ ├── HeaterPidCalibrateDialog.vue │ │ ├── TemperatureCard.vue │ │ ├── TemperaturePresetsMenu.vue │ │ ├── TemperatureTargets.vue │ │ └── ThermalChart.vue │ │ ├── timelapse │ │ ├── TimelapseRenderSettingsDialog.vue │ │ ├── TimelapseSettingsCard.vue │ │ └── TimelapseStatusCard.vue │ │ └── toolhead │ │ ├── ExtruderMoves.vue │ │ ├── ExtruderSelection.vue │ │ ├── ExtruderStats.vue │ │ ├── ExtruderStepperSync.vue │ │ ├── ExtruderSteppers.vue │ │ ├── PressureAdvanceAdjust.vue │ │ ├── SpeedAndFlowAdjust.vue │ │ ├── ToolChangeCommands.vue │ │ ├── Toolhead.vue │ │ ├── ToolheadCard.vue │ │ ├── ToolheadControlBars.vue │ │ ├── ToolheadControlBarsAxis.vue │ │ ├── ToolheadControlBarsStepper.vue │ │ ├── ToolheadControlCircle.vue │ │ ├── ToolheadControlCross.vue │ │ ├── ToolheadPosition.vue │ │ └── ZHeightAdjust.vue ├── directives │ └── blur.ts ├── dynamicImports.ts ├── echarts-gl.d.ts ├── eventBus.ts ├── globals.ts ├── init.ts ├── locales │ ├── af.yaml │ ├── ar.yaml │ ├── cs.yaml │ ├── de.yaml │ ├── en.yaml │ ├── es.yaml │ ├── fr.yaml │ ├── hu.yaml │ ├── it.yaml │ ├── ja.yaml │ ├── ko.yaml │ ├── nl.yaml │ ├── pl.yaml │ ├── pt.yaml │ ├── pt_BR.yaml │ ├── ru.yaml │ ├── sl.yaml │ ├── sv.yaml │ ├── ta.yaml │ ├── tr.yaml │ ├── uk.yaml │ ├── zh-CN.yaml │ └── zh-HK.yaml ├── main.ts ├── mixins │ ├── browser.ts │ ├── camera.ts │ ├── files.ts │ ├── mmu.ts │ ├── services.ts │ ├── state.ts │ └── toolhead.ts ├── monaco │ ├── README.md │ ├── language │ │ ├── gcode.tmLanguage.json │ │ ├── klipper-config.tmLanguage.json │ │ ├── log.tmLanguage.json │ │ └── tmLanguage.json │ └── theme │ │ ├── base.theme.dark.json │ │ ├── base.theme.light.json │ │ ├── editor.dark.theme.json │ │ ├── editor.light.theme.json │ │ └── editor.theme.json ├── plugins │ ├── colorSet.ts │ ├── filters.ts │ ├── httpClient.ts │ ├── i18n.ts │ ├── sandboxedEval.ts │ ├── socketClient.ts │ └── vuetify.ts ├── qrcode.vue.d.ts ├── registerComponentHooks.ts ├── router │ └── index.ts ├── scss │ ├── animation.scss │ ├── buttons.scss │ ├── cards.scss │ ├── chips.scss │ ├── dialogs.scss │ ├── draggable.scss │ ├── file-system.scss │ ├── global.scss │ ├── helpers.scss │ ├── inputs.scss │ ├── lists.scss │ ├── misc.scss │ ├── tables.scss │ ├── typeography.scss │ └── variables.scss ├── setupConsola.ts ├── store │ ├── analysis │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── announcements │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── auth │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── chart_helpers.ts │ ├── charts │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── config │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── console │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── diagnostics │ │ └── types.ts │ ├── files │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ ├── types.metadata.ts │ │ └── types.ts │ ├── gcodePreview │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── helpers.ts │ ├── history │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── index.ts │ ├── jobQueue │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── layout │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── macros │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── mesh │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── mmu │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── notifications │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── power │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── printer │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── sensors │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── server │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── socket │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── spoolman │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── timelapse │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── types.ts │ ├── version │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ ├── wait │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts │ └── webcams │ │ ├── actions.ts │ │ ├── getters.ts │ │ ├── index.ts │ │ ├── mutations.ts │ │ ├── state.ts │ │ └── types.ts ├── sw.ts ├── types │ ├── cameras.ts │ ├── dialogs.ts │ ├── files.ts │ ├── flashmessage.ts │ ├── index.ts │ ├── mesh.ts │ ├── mmu.ts │ ├── tableheaders.ts │ └── vuetify.ts ├── util │ ├── __tests__ │ │ ├── date-time-formatters.spec.ts │ │ ├── gcode-command-builder.spec.ts │ │ ├── gcode-macro-params.spec.ts │ │ ├── sanitize-endpoint.spec.ts │ │ └── version-string-compare.spec.ts │ ├── clipboard-copy.ts │ ├── date-time-formatters.ts │ ├── download-url.ts │ ├── escape-regexp.ts │ ├── event-helpers.ts │ ├── file-data-transfer.ts │ ├── file-system-entry.ts │ ├── fluidd-content.ts │ ├── gcode-helpers.ts │ ├── gcode-macro-params.ts │ ├── gcode-preview.ts │ ├── get-file-paths.ts │ ├── get-klipper-type.ts │ ├── get-vue-app.ts │ ├── is-key-of.ts │ ├── is-null-or-empty.ts │ ├── is-set-app-badge-supported.ts │ ├── is-user-agent-data-mobile-supported.ts │ ├── is-web-assembly-supported.ts │ ├── link-external-urls.ts │ ├── promise-any.ts │ ├── sanitize-endpoint.ts │ ├── set-url-query-param.ts │ ├── sleep.ts │ ├── string-formatters.ts │ ├── transform-mesh.ts │ ├── version-string-compare.ts │ └── web-socket-wrapper.ts ├── views │ ├── Configure.vue │ ├── Console.vue │ ├── Dashboard.vue │ ├── Diagnostics.vue │ ├── FullscreenCamera.vue │ ├── GcodePreview.vue │ ├── History.vue │ ├── Icons.vue │ ├── Jobs.vue │ ├── Login.vue │ ├── NotFound.vue │ ├── Settings.vue │ ├── System.vue │ ├── Timelapse.vue │ └── Tune.vue ├── vue-echarts-chunk.ts ├── vue-json-viewer.d.ts ├── vue-virtual-scroller.d.ts └── workers │ ├── parseGcode.ts │ └── parseGcode.worker.ts ├── tests └── unit │ ├── setup.ts │ └── utils.ts ├── tools └── convertTheme.mjs ├── tsconfig.app.json ├── tsconfig.config.json ├── tsconfig.json ├── tsconfig.vitest.json ├── tsreset.d.ts ├── vite.config.inject-version.ts ├── vite.config.ts └── vitest.config.ts /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.18 2 | 3 | RUN \ 4 | apk update \ 5 | && apk add \ 6 | git \ 7 | git-zsh-completion \ 8 | nodejs \ 9 | npm \ 10 | openssh \ 11 | sudo \ 12 | shadow \ 13 | zsh \ 14 | zsh-completions \ 15 | && rm -f /etc/apk/cache/* /root/.cache \ 16 | && groupadd vscode \ 17 | && useradd -s /bin/zsh --gid vscode -m vscode \ 18 | && echo vscode ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/vscode \ 19 | && chmod 0440 /etc/sudoers.d/vscode \ 20 | && mkdir -p "/home/vscode" \ 21 | && chown vscode:vscode "/home/vscode" 22 | 23 | USER vscode 24 | 25 | RUN \ 26 | sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)" 27 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/alpine 3 | { 4 | "name": "Fluidd Dev", 5 | "dockerComposeFile": "docker-compose.yml", 6 | "service": "fluidd", 7 | "workspaceFolder": "/workspaces/fluidd", 8 | "forwardPorts": [5000, 8080, 7125, 8110], 9 | "features": { 10 | }, 11 | "postCreateCommand": "npm ci && npm run bootstrap", 12 | "customizations": { 13 | "vscode": { 14 | "extensions": [ 15 | "davidanson.vscode-markdownlint", 16 | "dbaeumer.vscode-eslint", 17 | "eamodio.gitlens", 18 | "editorconfig.editorconfig", 19 | "esbenp.prettier-vscode", 20 | "lukas-tr.materialdesignicons-intellisense", 21 | "ms-azuretools.vscode-docker", 22 | "orta.vscode-twoslash-queries", 23 | "redhat.vscode-yaml", 24 | "vue.volar" 25 | ], 26 | "settings": { 27 | "editor.codeActionsOnSave": { 28 | "source.fixAll.eslint": "explicit" 29 | }, 30 | "i18n-ally.localesPaths": [ 31 | "src/locales" 32 | ] 33 | } 34 | } 35 | }, 36 | "remoteUser": "vscode" 37 | } 38 | -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | fluidd: 5 | build: 6 | context: ./ 7 | volumes: 8 | - ..:/workspaces/fluidd/:cached 9 | command: sleep infinity 10 | networks: 11 | - fluidd-dev 12 | ports: 13 | - "5000:5000" 14 | - "8080:8080" 15 | 16 | klipper-simulavr: 17 | image: ei99070/docker-klipper-simulavr:latest 18 | restart: unless-stopped 19 | networks: 20 | - fluidd-dev 21 | ports: 22 | - "7125:7125" 23 | - "8110:8080" 24 | 25 | networks: 26 | fluidd-dev: 27 | driver: bridge 28 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 2 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{js,jsx,ts,tsx,vue}] 12 | indent_style = space 13 | max_line_length = 100 14 | 15 | [*.{md,markdown}] 16 | max_line_length = 0 17 | trim_trailing_whitespace = false 18 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | VUE_APP_I18N_LOCALE=en 2 | VUE_APP_I18N_FALLBACK_LOCALE=en -------------------------------------------------------------------------------- /.env.development.local.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/.env.development.local.example -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [fluidd-core] 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Fluidd Discord 4 | url: https://discord.gg/GZ3D5tqfcF/ 5 | about: Quickest way to get in contact 6 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /.github/workflows/semantic_pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Semantic Pull Request 2 | 3 | on: 4 | pull_request_target: 5 | types: 6 | - opened 7 | - reopened 8 | - edited 9 | - synchronize 10 | 11 | jobs: 12 | main: 13 | name: Semantic Pull Request 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Validate PR title 17 | uses: amannn/action-semantic-pull-request@v5 18 | with: 19 | types: | 20 | feat 21 | fix 22 | docs 23 | style 24 | refactor 25 | perf 26 | test 27 | build 28 | ci 29 | chore 30 | revert 31 | types 32 | i18n 33 | requireScope: false 34 | ignoreLabels: | 35 | bot 36 | ignore-semantic-pull-request 37 | env: 38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /dev-dist 5 | 6 | /tests/e2e/videos/ 7 | /tests/e2e/screenshots/ 8 | 9 | .credentials 10 | 11 | # local env files 12 | .env.local 13 | .env.*.local 14 | 15 | # Log files 16 | npm-debug.log* 17 | yarn-debug.log* 18 | yarn-error.log* 19 | pnpm-debug.log* 20 | 21 | # Editor directories and files 22 | .idea 23 | .vscode/* 24 | !.vscode/extensions.json 25 | !.vscode/launch.json 26 | !.vscode/settings.default.json 27 | !.vscode/tasks.json 28 | *.suo 29 | *.ntvs* 30 | *.njsproj 31 | *.sln 32 | *.sw? 33 | 34 | *.tsbuildinfo 35 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | die () { 2 | TEXT=$(cat <<'EOF' 3 | 4 | \e[31mError: Commit messages should follow the conventional commits standard, and should have a Signed-off-by line\e[0m 5 | 6 | Example: 7 | 8 | ``` 9 | feat: My feature. 10 | 11 | Some description. 12 | 13 | Signed-off-by: Your Name 14 | ``` 15 | 16 | EOF 17 | ) 18 | 19 | echo "${TEXT}" 20 | 21 | exit 1 22 | } 23 | 24 | COMMIT_MESSAGE=$(cat $1) 25 | 26 | COMMIT_HEAD="^merge.+|(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert|types|i18n)(\(.+\))?: .{1,50}" 27 | COMMIT_SIGNED_OFF="signed-off-by: .*<.*@.*>" 28 | 29 | if ! echo "$COMMIT_MESSAGE" | grep -iqE "$COMMIT_HEAD"; then 30 | die 31 | fi 32 | 33 | if ! echo "$COMMIT_MESSAGE" | grep -iqE "$COMMIT_SIGNED_OFF"; then 34 | die 35 | fi 36 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | FILES_TO_LINT=$(git diff --cached --name-only --diff-filter=ACM | grep -iE "\.(js|jsx|mjs|ts|tsx|vue)$" || true) 2 | 3 | if [ -n "$FILES_TO_LINT" ]; then 4 | npx --no eslint -- --max-warnings 0 $FILES_TO_LINT 5 | fi 6 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 22.11.0 2 | -------------------------------------------------------------------------------- /.versionrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "types": [ 3 | { 4 | "type": "feat", 5 | "section": "Features" 6 | }, 7 | { 8 | "type": "fix", 9 | "section": "Bug Fixes" 10 | }, 11 | { 12 | "type": "chore", 13 | "hidden": true 14 | }, 15 | { 16 | "type": "docs", 17 | "hidden": true 18 | }, 19 | { 20 | "type": "style", 21 | "hidden": true 22 | }, 23 | { 24 | "type": "refactor", 25 | "section": "Code Refactorings" 26 | }, 27 | { 28 | "type": "perf", 29 | "hidden": true 30 | }, 31 | { 32 | "type": "test", 33 | "hidden": true 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "davidanson.vscode-markdownlint", 4 | "dbaeumer.vscode-eslint", 5 | "eamodio.gitlens", 6 | "editorconfig.editorconfig", 7 | "esbenp.prettier-vscode", 8 | "lukas-tr.materialdesignicons-intellisense", 9 | "ms-azuretools.vscode-docker", 10 | "orta.vscode-twoslash-queries", 11 | "redhat.vscode-yaml", 12 | "vue.volar" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch Chrome", 9 | "request": "launch", 10 | "type": "chrome", 11 | "url": "http://localhost:8080", 12 | "webRoot": "${workspaceFolder}", 13 | "preLaunchTask": "Serve" 14 | }, 15 | { 16 | "name": "Launch Edge", 17 | "request": "launch", 18 | "type": "msedge", 19 | "url": "http://localhost:8080", 20 | "webRoot": "${workspaceFolder}", 21 | "preLaunchTask": "Serve" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/settings.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.eslint": true 4 | }, 5 | "i18n-ally.localesPaths": [ 6 | "src/locales" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "Serve", 6 | "type": "npm", 7 | "script": "serve", 8 | "problemMatcher": [ 9 | "$vite" 10 | ], 11 | "isBackground": true 12 | }, 13 | { 14 | "label": "Build", 15 | "type": "npm", 16 | "script": "build", 17 | "problemMatcher": [] 18 | }, 19 | { 20 | "label": "Type check", 21 | "type": "npm", 22 | "script": "type-check", 23 | "problemMatcher": [] 24 | }, 25 | { 26 | "label": "Circular reference check", 27 | "type": "npm", 28 | "script": "circular-check", 29 | "problemMatcher": [] 30 | }, 31 | { 32 | "label": "Lint", 33 | "type": "npm", 34 | "script": "lint", 35 | "problemMatcher": [] 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Fluidd 2 | 3 | Fluidd exists as an independent client of Moonraker, and by extension - Klipper. 4 | Fluidd is built on VueJS, using TypeScript. 5 | 6 | - Source should always pass the linting rules defined, with no warnings or type errors. 7 | - A clean develop is preferred. This means squashing, and rebasing your feature branches prior to merge. 8 | - PR's should off a branch other than develop or master. 9 | - Commit messages should follow the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) standard, and should have a Signed-off-by line, for example; 10 | 11 | ```sh 12 | feat: My feature. 13 | 14 | Some description. 15 | 16 | Signed-off-by: Your Name 17 | ``` 18 | 19 | - By signing off on commits, you acknowledge that you agree to the [developer certificate of origin](/developer-certificate-of-origin). 20 | This must contain your real name and a current email address. 21 | 22 | After cloning the repo and running `npm install`, we recommend running `npm run bootstrap` to install a couple of git hooks that will pre-validate all new commits. 23 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:alpine 2 | 3 | ENV PORT=80 4 | 5 | COPY /dist /usr/share/nginx/html 6 | COPY /server/nginx /etc/nginx/templates 7 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-metadata 4 | -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | 18 | 19 |
20 |

404

21 | 22 |

Page not found :(

23 |

The requested page could not be found.

24 |
25 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | docs.fluidd.xyz -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Notes 2 | 3 | https://socialify.git.ci/fluidd-core/fluidd 4 | Font = Raleway 5 | -------------------------------------------------------------------------------- /docs/_sass/color_schemes/fluidd.scss: -------------------------------------------------------------------------------- 1 | $brand-color: #2196F3; 2 | 3 | $link-color: $brand-color; 4 | $btn-primary-color: $brand-color; 5 | 6 | .site-logo { 7 | margin-top: 6px; 8 | width: 80% !important; 9 | height: 80% !important; 10 | } 11 | -------------------------------------------------------------------------------- /docs/assets/images/adjust_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/adjust_layout.png -------------------------------------------------------------------------------- /docs/assets/images/auth_login_multisource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/auth_login_multisource.png -------------------------------------------------------------------------------- /docs/assets/images/auth_login_multisource_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/auth_login_multisource_select.png -------------------------------------------------------------------------------- /docs/assets/images/auth_trusted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/auth_trusted.png -------------------------------------------------------------------------------- /docs/assets/images/automated-updates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/automated-updates.png -------------------------------------------------------------------------------- /docs/assets/images/bed_mesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/bed_mesh.png -------------------------------------------------------------------------------- /docs/assets/images/camera_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/camera_settings.png -------------------------------------------------------------------------------- /docs/assets/images/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/console.png -------------------------------------------------------------------------------- /docs/assets/images/diagnostics_collector_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/diagnostics_collector_config.png -------------------------------------------------------------------------------- /docs/assets/images/diagnostics_edit_card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/diagnostics_edit_card.png -------------------------------------------------------------------------------- /docs/assets/images/diagnostics_metrics_explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/diagnostics_metrics_explorer.png -------------------------------------------------------------------------------- /docs/assets/images/exclude_object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/exclude_object.png -------------------------------------------------------------------------------- /docs/assets/images/exclude_object_modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/exclude_object_modal.png -------------------------------------------------------------------------------- /docs/assets/images/fluidd_social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/fluidd_social.png -------------------------------------------------------------------------------- /docs/assets/images/gcode_display_opts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/gcode_display_opts.png -------------------------------------------------------------------------------- /docs/assets/images/gcode_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/gcode_preview.png -------------------------------------------------------------------------------- /docs/assets/images/gcode_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/gcode_settings.png -------------------------------------------------------------------------------- /docs/assets/images/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/graph.png -------------------------------------------------------------------------------- /docs/assets/images/layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/layout.png -------------------------------------------------------------------------------- /docs/assets/images/localization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/localization.png -------------------------------------------------------------------------------- /docs/assets/images/logo_ldo.svg: -------------------------------------------------------------------------------- 1 | 5 | 14 | 15 | -------------------------------------------------------------------------------- /docs/assets/images/macro_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/macro_visibility.png -------------------------------------------------------------------------------- /docs/assets/images/macros1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/macros1.png -------------------------------------------------------------------------------- /docs/assets/images/macros2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/macros2.png -------------------------------------------------------------------------------- /docs/assets/images/multiple-extruder-steppers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/multiple-extruder-steppers.png -------------------------------------------------------------------------------- /docs/assets/images/multiple-extruders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/multiple-extruders.png -------------------------------------------------------------------------------- /docs/assets/images/notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/notifications.png -------------------------------------------------------------------------------- /docs/assets/images/ogfluidd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/ogfluidd.png -------------------------------------------------------------------------------- /docs/assets/images/physical-printer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/physical-printer.png -------------------------------------------------------------------------------- /docs/assets/images/presets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/presets.png -------------------------------------------------------------------------------- /docs/assets/images/preview_sliced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/preview_sliced.png -------------------------------------------------------------------------------- /docs/assets/images/print_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/print_history.png -------------------------------------------------------------------------------- /docs/assets/images/print_stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/print_stats.png -------------------------------------------------------------------------------- /docs/assets/images/printer-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/printer-selection.png -------------------------------------------------------------------------------- /docs/assets/images/reprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/reprint.png -------------------------------------------------------------------------------- /docs/assets/images/side_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/side_menu.png -------------------------------------------------------------------------------- /docs/assets/images/slicer-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/slicer-upload.png -------------------------------------------------------------------------------- /docs/assets/images/spoolman-dashboard-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/spoolman-dashboard-card.png -------------------------------------------------------------------------------- /docs/assets/images/spoolman-multitool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/spoolman-multitool.png -------------------------------------------------------------------------------- /docs/assets/images/spoolman-scan-spool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/spoolman-scan-spool.png -------------------------------------------------------------------------------- /docs/assets/images/theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/theme.png -------------------------------------------------------------------------------- /docs/assets/images/thumbnails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/thumbnails.png -------------------------------------------------------------------------------- /docs/assets/images/updates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/assets/images/updates.png -------------------------------------------------------------------------------- /docs/configuration/fluidd.xyz.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: fluidd.xyz 4 | parent: Configuration 5 | nav_order: 4 6 | permalink: /configuration/fluidd_xyz 7 | --- 8 | 9 | # fluidd.xyz 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Have Mainsail installed, or don't want to install Fluidd locally? We support that! 15 | 16 | Fluidd is also hosted at `http://app.fluidd.xyz`. When used in this way, 17 | Fluidd is downloaded to your browser. 18 | 19 | It has no interaction outside of your network unless configured to do so, and 20 | essentially works in the same way as hosting Fluidd yourself. 21 | 22 | FluiddPi comes OOB with support for this configuration built in. 23 | 24 | If you've installed in some other way, then in order for Fluidd to connect to 25 | your printer, you'll need to configure Moonraker. 26 | 27 | In the `moonraker.conf` file is a section called `cors_domains:`. 28 | The fluidd.xyz host must be in this section for a successful connection to be 29 | made. 30 | 31 | Generally, you can find the moonraker.conf file here 32 | `~/klipper_configuration/moonraker.conf` for FluiddPi and Mainsail installs. 33 | 34 | Alternatively, you can edit the file via the file browser in Fluidd. 35 | 36 | A suitable example can be found [here](/configuration/moonraker_conf). 37 | -------------------------------------------------------------------------------- /docs/configuration/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Configuration 4 | nav_order: 4 5 | has_children: true 6 | permalink: /configuration 7 | --- 8 | 9 | # Configuration 10 | 11 | Because Fluidd relies on Moonraker and Klipper, configuration needs to happen 12 | in more than one location. 13 | {: .fs-6 .fw-300 } 14 | 15 | First steps should ensure you refer to the 16 | [initial setup](/configuration/initial_setup) section in order to ensure you 17 | have basic requirements setup first. 18 | -------------------------------------------------------------------------------- /docs/configuration/moonraker_conf.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: moonraker.conf 4 | parent: Configuration 5 | nav_order: 5 6 | permalink: /configuration/moonraker_conf 7 | --- 8 | 9 | # moonraker.conf 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | This is an example configuration, which should apply to most users. 15 | Your moonraker configuration can usually be found here: `~/klipper_config/moonraker.conf` 16 | 17 | ```yaml 18 | [server] 19 | host: 0.0.0.0 20 | port: 7125 21 | 22 | [file_manager] 23 | # cancel object preprocessing - set to True to enable; leave disabled when running on a low-powered device (e.g. Pi Zero) 24 | enable_object_processing: False 25 | 26 | [data_store] 27 | temperature_store_size: 600 28 | gcode_store_size: 1000 29 | 30 | [authorization] 31 | force_logins: false 32 | 33 | cors_domains: 34 | *.local 35 | *.lan 36 | *://localhost 37 | *://app.fluidd.xyz 38 | 39 | trusted_clients: 40 | 10.0.0.0/8 41 | 127.0.0.0/8 42 | 169.254.0.0/16 43 | 172.16.0.0/12 44 | 192.168.0.0/16 45 | FE80::/10 46 | ::1/128 47 | 48 | [history] 49 | 50 | [octoprint_compat] 51 | 52 | [update_manager] 53 | enable_auto_refresh: True 54 | 55 | [announcements] 56 | subscriptions: 57 | fluidd 58 | 59 | [update_manager fluidd] 60 | type: web 61 | repo: fluidd-core/fluidd 62 | path: ~/fluidd 63 | ``` 64 | -------------------------------------------------------------------------------- /docs/customize/hide_outputs.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Hide macros, output pins, fans and sensors 4 | parent: Customize 5 | nav_order: 3 6 | permalink: /customize/hide 7 | --- 8 | 9 | # Hide macros, output pins, fans and sensors 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd allows you to hide macros, output pins, fans and sensors by prefixing 15 | them with an underscore (`_`). 16 | 17 | By doing this - you're removing them from Fluidd. This can be handy in 18 | situations where you have a large quantiy of macros, or whereby you have an 19 | output pin you may have no need to control in UI. 20 | 21 | Some examples; 22 | 23 | ```yaml 24 | [gcode_macro _MY_MACRO] 25 | gcode: 26 | G28 27 | ``` 28 | 29 | ```yaml 30 | [output_pin _BEEPER] 31 | pin: z:P1.30 32 | ``` 33 | 34 | ```yaml 35 | [temperature_sensor _MCU] 36 | sensor_type: MCU 37 | ``` 38 | 39 | Macros can also be hidden directly from the Fluidd settings by toggling their 40 | visibility, in order to not change their name: 41 | ![screenshot](/assets/images/macro_visibility.png) 42 | -------------------------------------------------------------------------------- /docs/customize/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Customize 4 | nav_order: 3 5 | has_children: true 6 | permalink: /customize 7 | --- 8 | 9 | # Customize 10 | 11 | Fluidd allows you to adjust the layout of your dashboard, and to set a core 12 | theme color. 13 | {: .fs-6 .fw-300 } 14 | -------------------------------------------------------------------------------- /docs/customize/layout.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Application Layout 4 | parent: Customize 5 | nav_order: 1 6 | permalink: /customize/layout 7 | --- 8 | 9 | # Application Layout 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd allows you to adjust your dashboard layout to your liking. Use the 15 | hamburger menu and click the `adjust layout` option. 16 | 17 | Use the drag handles to move cards to / from the left and right columns. You 18 | can also easily disable cards if you have no use for them. 19 | 20 | Once you're done, click the exit layout mode button. You can reset back to 21 | the default layout by clicking reset layout. 22 | 23 | ![screenshot](/assets/images/layout.png) 24 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/docs/favicon.ico -------------------------------------------------------------------------------- /docs/features/chart.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Thermals Chart 4 | parent: Features 5 | nav_order: 7 6 | permalink: /features/chart 7 | --- 8 | 9 | # Thermals Chart 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd's chart allow you to view not just temperatures, but also power applied 15 | to your heaters and fans. 16 | 17 | 1. Click the name of a heater, sensor or fan to toggle its visibility. 18 | 2. Click the power of a heater, sensor or fan to toggle its visibility. 19 | 3. Zoom the chart by holding SHIFT and scrolling your mouse wheel whilst the 20 | cursor is over the chart. 21 | 22 | ![screenshot](/assets/images/graph.png) 23 | -------------------------------------------------------------------------------- /docs/features/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Features 4 | nav_order: 7 5 | has_children: true 6 | permalink: /features 7 | --- 8 | 9 | # Features 10 | 11 | Fluidd bundles many features you might not be aware of. Check them out here, 12 | along with any configuration they might require. 13 | {: .fs-6 .fw-300 } 14 | -------------------------------------------------------------------------------- /docs/features/localization.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Localization 4 | parent: Features 5 | nav_order: 11 6 | permalink: /features/localization 7 | --- 8 | 9 | # Localization 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd is equipped with robust localization features to cater to diverse user preferences. 15 | 16 | By default, Fluidd adopts the language set in your browser. If needed, you have the flexibility to override this by specifying a preferred language through interface settings. 17 | 18 | For those who want to contribute and enhance Fluidd's multilingual support, detailed information on localization and translation contributions is available in the [developer localization](/development/localization) docs. 19 | 20 | ![screenshot](/assets/images/localization.png) 21 | -------------------------------------------------------------------------------- /docs/features/macros.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Macros 4 | parent: Features 5 | nav_order: 14 6 | permalink: /features/macros 7 | --- 8 | 9 | # Macros 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd support turning your macros on and off, and categorizing them. You can 15 | also hide macros from Fluidd entirely by prefixing their name with an 16 | underscore (`_`). 17 | 18 | To move a macro to a category, you first create a category in the settings menu, 19 | then left-click on a macro in an existing category. This will bring up a menu 20 | where you can select the category your macro will be in as well as change the color. 21 | 22 | ![screenshot](/assets/images/macros2.png) 23 | ![screenshot](/assets/images/macros1.png) 24 | -------------------------------------------------------------------------------- /docs/features/med_mesh.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Bed Mesh 4 | parent: Features 5 | nav_order: 9 6 | permalink: /features/bed_mesh 7 | --- 8 | 9 | # Bed Mesh 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd has a built in bed mesh viewer. Click through to the printer navigation 15 | item and calibrate a mesh to view. 16 | 17 | Note, you'll need to have configured the `bed_mesh` option in klipper for this 18 | option to be visible. 19 | 20 | ![screenshot](/assets/images/bed_mesh.png) 21 | -------------------------------------------------------------------------------- /docs/features/multiple_extruders.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Multiple Extruders 4 | parent: Features 5 | nav_order: 10 6 | permalink: /features/multiple_extruders 7 | --- 8 | 9 | # Multiple Extruders 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd supports single extruder, multiple extruders, and multiple extruder 15 | stepper configurations. 16 | 17 | There is full support to set Pressure Advance values in all configurations. 18 | 19 | ![screenshot](/assets/images/multiple-extruders.png) 20 | 21 | For multiple extruder steppers configurations, Fluidd will show a section for 22 | each stepper, allowing to enable/disable it, associate with an extruder, and set 23 | the specific Pressure Advance values. 24 | 25 | ![screenshot](/assets/images/multiple-extruder-steppers.png) 26 | -------------------------------------------------------------------------------- /docs/features/multiple_printers.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Multiple Printers 4 | parent: Features 5 | nav_order: 1 6 | permalink: /features/printers 7 | --- 8 | 9 | # Multiple Printers 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd allows connecting and swapping between multiple printers. 15 | 16 | In some circumstances, moonraker must be configured to allow a connection from fluidd. Configuration may depend on your type of install. 17 | 18 | Please see the [multiple printers](/configuration/multiple_printers) configuration docs for more information on setup. 19 | 20 | ![screenshot](/assets/images/printer-selection.png) 21 | -------------------------------------------------------------------------------- /docs/features/notifications.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Notifications 4 | parent: Features 5 | nav_order: 13 6 | permalink: /features/notifications 7 | --- 8 | 9 | # Notifications 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd has a built-in notification system to warn you of potential issues. 15 | 16 | Fluidd will fire a warning if you have updates pending, or if 17 | you've hit a throttle condition (if running on a Pi, or otherwise your host 18 | supports `vcgencmd`). Other warnings will come as they're available. 19 | 20 | ![screenshot](/assets/images/notifications.png) 21 | -------------------------------------------------------------------------------- /docs/features/presets.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Thermal Presets 4 | parent: Features 5 | nav_order: 11 6 | permalink: /features/presets 7 | --- 8 | 9 | # Thermal Presets 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd supports setting your own thermal presets. Click through to the UI 15 | settings page to add your own presets. 16 | 17 | ![screenshot](/assets/images/presets.png) 18 | -------------------------------------------------------------------------------- /docs/features/sensors.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Sensors 4 | parent: Features 5 | nav_order: 5 6 | permalink: /features/sensors 7 | --- 8 | 9 | # Sensors 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd supports many of the built-in sensors from Klipper. Some examples are; 15 | 16 | ## Raspberry Pi Temperature 17 | 18 | ```yaml 19 | [temperature_sensor raspberry_pi] 20 | sensor_type: temperature_host 21 | min_temp: 10 22 | max_temp: 100 23 | ``` 24 | 25 | ## ATSAM, ATAMD and STM32 temperature sensors 26 | 27 | ```yaml 28 | [temperature_sensor mcu_temp] 29 | sensor_type: temperature_mcu 30 | min_temp: 0 31 | max_temp: 100 32 | ``` 33 | 34 | More information concerning other supported sensors can be found in the 35 | [klipper documentation](http://klipper3d.org) 36 | -------------------------------------------------------------------------------- /docs/features/slicer-uploads.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Slicer Uploads 4 | parent: Features 5 | nav_order: 2 6 | permalink: /features/slicer-uploads 7 | --- 8 | 9 | # Slicer Uploads 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | NOTE: Moonraker needs to be configured to support slicer uploads. Simply add 15 | the `[octoprint_compat]` option to your moonraker config. See moonraker 16 | [configuration docs](/configuration/moonraker_conf) for an example. 17 | 18 | You can upload your sliced `gcode` from within PrusaSlicer or SuperSlicer. 19 | 20 | - With PrusaSlicer / SuperSlicer open, click the "cog" icon right of the Printer profiles combo box and select `Add physical printer` 21 | - Type a descriptive printer name 22 | - choose proper printer preset 23 | - Ensure the type is set to `OctoPrint` 24 | - The `hostname, IP or URL` is your printer URL. Typically this would be `fluidd.local` or similar (you may also need to add moonraker port, ie 7125 in some cases.) 25 | - Enter some random characters in the API field. 26 | - Click test! 27 | 28 | ![screenshot](/assets/images/physical-printer.png) 29 | ![screenshot](/assets/images/slicer-upload.png) 30 | -------------------------------------------------------------------------------- /docs/features/updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Automated Updates 4 | parent: Features 5 | nav_order: 4 6 | permalink: /features/updates 7 | --- 8 | 9 | # Automated Updates 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd facilitates seamless automated updates through Moonraker. For detailed 15 | information on configuring automatic updates, please refer to the 16 | [Moonraker configuration documentation](/configuration/moonraker). 17 | 18 | ![screenshot](/assets/images/updates.png) 19 | -------------------------------------------------------------------------------- /docs/installation/docker.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Docker 4 | parent: Installation 5 | nav_order: 2 6 | permalink: /installation/docker 7 | --- 8 | 9 | # Docker 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd can be hosted with Docker. This is considered an advanced install, but 15 | gives you the benefit of hosting a single instance of Fluidd, and having it 16 | connect to multiple printers. 17 | 18 | The docker image is updated automatically with each release of Fluidd, and 19 | on each commit to the "master" or "develop" branches. 20 | 21 | This is a list of the available docker image tags: 22 | 23 | - `latest`: points to the most recent release 24 | - `v*.*.*`: points to a specific release 25 | - `latest-master`: points to the most recent commit to the "master" branch 26 | - `latest-develop`: points to the most recent commit to the "develop" branch 27 | - `sha-`: points to a specific git commit hash 28 | 29 | [View on GitHub Container registry](https://github.com/fluidd-core/fluidd/pkgs/container/fluidd){: .btn .fs-5 .mb-4 .mb-md-0 } 30 | -------------------------------------------------------------------------------- /docs/installation/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Installation 4 | nav_order: 2 5 | has_children: true 6 | permalink: /installation 7 | --- 8 | 9 | # Installation 10 | 11 | The recommended way to install Fluidd is to use KIAUH. 12 | {: .fs-6 .fw-300 } 13 | -------------------------------------------------------------------------------- /docs/installation/kiauh.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: KIAUH 4 | parent: Installation 5 | nav_order: 1 6 | permalink: /installation/kiauh 7 | --- 8 | 9 | # KIAUH - Klipper Installation And Update Helper 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | KIAUH is the recommended way to install Fluidd. 15 | 16 | KIAUH makes installation and updates a breeze, no matter if it is just a simple 17 | install or when you'd like to trial more than one user interface on your device, 18 | or have more of an advanced setup. 19 | 20 | For more information on KIAUH, please visit its github page. 21 | 22 | [View on GitHub](https://github.com/dw-0/kiauh){: .btn .fs-5 .mb-4 .mb-md-0 } 23 | -------------------------------------------------------------------------------- /docs/sponsors/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Sponsors 4 | nav_order: 9 5 | has_children: false 6 | permalink: /sponsors 7 | --- 8 | 9 | # Sponsors 10 | 11 | Fluidd is a free open source project. 12 | 13 | The development of Fluidd is only possible with the generous support from sponsors. 14 | 15 | ## LDO 16 | 17 | [![LDO Motors](../assets/images/logo_ldo.svg "LDO Motors")](https://ldomotors.com/) 18 | 19 | LDO, Excellence in Motion. LDO is an official Sponsor of Fluidd. 20 | 21 | ## Support Fluidd development 22 | 23 | Fluidd development is driven by passionate volunteers who dedicate their time to improving and expanding its capabilities. 24 | 25 | Your sponsorship can help us enhance Fluidd, introduce new features, and ensure it remains accessible to all Klipper users. 26 | 27 | Your support can make a significant impact on the evolution of Fluidd. Please consider [sponsoring Fluidd](https://github.com/sponsors/fluidd-core). 28 | -------------------------------------------------------------------------------- /docs/updates/automated.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Automated 4 | parent: Updates 5 | nav_order: 1 6 | permalink: /updates/automated 7 | --- 8 | 9 | # Automated Updates 10 | {: .no_toc } 11 | 12 | --- 13 | 14 | Fluidd allows you to update all of its components, including the host system in an automated way. 15 | It will notify you of available updates - and provide buttons to upgrade each individual component. 16 | 17 | The recommended order of updates should be; 18 | 19 | 1. Klipper 20 | 2. Moonraker 21 | 3. Fluidd 22 | 4. Other clients 23 | 24 | Klipper can be skipped if you have a reason to not update klipper immediately. 25 | 26 | In order for this feature to be enabled, you need to configure moonraker's update plugin. 27 | 28 | Please see here for the [moonraker configuration](/configuration/moonraker_conf) docs. 29 | 30 | ![screenshot](../assets/images/updates.png) 31 | -------------------------------------------------------------------------------- /docs/updates/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Updates 4 | nav_order: 6 5 | has_children: true 6 | permalink: /updates 7 | --- 8 | 9 | # Updates 10 | 11 | Updates can be configured and managed all with Fluidd, making updating klipper, 12 | Moonraker and Fluidd a breeze. 13 | {: .fs-6 .fw-300 } 14 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | 8 | declare module '*.yaml' { 9 | const data: unknown 10 | export default data 11 | } 12 | 13 | declare module '@/locales/*.yaml' { 14 | import type { LocaleMessageObject } from 'vue-i18n' 15 | 16 | const data: LocaleMessageObject 17 | export default data 18 | } 19 | 20 | interface ImportMetaEnv { 21 | readonly VUE_APP_I18N_LOCALE?: string 22 | readonly VUE_APP_I18N_FALLBACK_LOCALE?: string 23 | readonly VERSION: string 24 | readonly HASH: string 25 | } 26 | 27 | interface ImportMeta { 28 | readonly env: ImportMetaEnv 29 | } 30 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import pluginVue from 'eslint-plugin-vue' 2 | import * as pluginRegexp from 'eslint-plugin-regexp' 3 | import neostandard from 'neostandard' 4 | import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' 5 | 6 | export default defineConfigWithVueTs( 7 | { 8 | name: 'app/files-to-lint', 9 | files: ['**/*.{ts,mts,tsx,vue}'], 10 | }, 11 | { 12 | name: 'app/files-to-ignore', 13 | ignores: [ 14 | 'dist/**', 15 | 'dev-dist/**', 16 | 'docs/_site/**' 17 | ] 18 | }, 19 | pluginVue.configs['flat/vue2-recommended'], 20 | pluginRegexp.configs['flat/recommended'], 21 | neostandard(), 22 | vueTsConfigs.recommended, 23 | { 24 | rules: { 25 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 26 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 27 | camelcase: 'off', 28 | 'no-use-before-define': 'off', 29 | 'vue/no-v-html': 'off', 30 | 'vue/no-v-text-v-html-on-component': 'off', 31 | '@typescript-eslint/no-explicit-any': 'off', 32 | '@typescript-eslint/no-empty-object-type': 'off' 33 | } 34 | } 35 | ) 36 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/favicon.ico -------------------------------------------------------------------------------- /public/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/android-chrome-maskable-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/android-chrome-maskable-512x512.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/img/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/favicon-16x16.png -------------------------------------------------------------------------------- /public/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /public/img/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/favicon.ico -------------------------------------------------------------------------------- /public/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /public/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /public/img/icons/shortcut-configuration-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/shortcut-configuration-96x96.png -------------------------------------------------------------------------------- /public/img/icons/shortcut-settings-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluidd-core/fluidd/d2335a956ccd6a75650745804fc655b8d0a173e2/public/img/icons/shortcut-settings-96x96.png -------------------------------------------------------------------------------- /public/logo_eva.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/logo_hevort.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/logo_ldo.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/logo_voron.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/logo_vzbot.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/logo_z-bolt.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/logo_zerog.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /server/nginx/nginx/common_vars.conf.template: -------------------------------------------------------------------------------- 1 | map $http_upgrade $connection_upgrade { 2 | default upgrade; 3 | '' close; 4 | } 5 | -------------------------------------------------------------------------------- /server/nginx/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen ${PORT} default_server; 3 | listen [::]:${PORT} default_server; 4 | 5 | access_log /var/log/nginx/access.log; 6 | error_log /var/log/nginx/error.log; 7 | 8 | gzip on; 9 | gzip_vary on; 10 | gzip_proxied any; 11 | gzip_proxied expired no-cache no-store private auth; 12 | gzip_comp_level 4; 13 | gzip_buffers 16 8k; 14 | gzip_http_version 1.1; 15 | gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml; 16 | 17 | root /usr/share/nginx/html; 18 | 19 | index index.html; 20 | server_name _; 21 | 22 | client_max_body_size 0; 23 | 24 | proxy_request_buffering off; 25 | 26 | location / { 27 | try_files $uri $uri/ /index.html; 28 | } 29 | 30 | location = /index.html { 31 | add_header Cache-Control "no-store, no-cache, must-revalidate"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/components/common/FlashMessage.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 45 | 46 | 52 | -------------------------------------------------------------------------------- /src/components/common/SystemLayout.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 46 | -------------------------------------------------------------------------------- /src/components/layout/AppFooter.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 31 | 32 | 40 | -------------------------------------------------------------------------------- /src/components/layout/AppObservedColumn.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 46 | -------------------------------------------------------------------------------- /src/components/layout/AppToolsDrawer.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 43 | -------------------------------------------------------------------------------- /src/components/settings/auth/ApiKeyDialog.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 61 | -------------------------------------------------------------------------------- /src/components/ui/AppBtnCollapse.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 44 | -------------------------------------------------------------------------------- /src/components/ui/AppBtnToggle.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /src/components/ui/AppChipColor.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /src/components/ui/AppDataTableCellColors.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 34 | -------------------------------------------------------------------------------- /src/components/ui/AppDataTableCellTemps.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 29 | -------------------------------------------------------------------------------- /src/components/ui/AppDragIcon.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 22 | 23 | 48 | -------------------------------------------------------------------------------- /src/components/ui/AppIcon.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /src/components/ui/AppInlineHelp.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 48 | -------------------------------------------------------------------------------- /src/components/ui/AppNamedSwitch.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 42 | -------------------------------------------------------------------------------- /src/components/ui/AppQrCode.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 26 | 27 | 34 | -------------------------------------------------------------------------------- /src/components/widgets/camera/services/IframeCamera.vue: -------------------------------------------------------------------------------- 1 |