Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Wayland on Linux — Electron / Sparkplate.Fresh

**Date:** April 6, 2026
**Scope:** Whether this repository “complies with” or is aligned with **Wayland** as the Linux display server, and what that means in practice for an **Electron** desktop app.

## Summary

- **Application code (Vue renderer, router, business logic):** Does **not** interact with X11 or Wayland directly. It uses standard web APIs and Electron IPC. There is **no Wayland-specific code** and **no X11-specific code** in the UI layer.
- **Electron main process (`background/`):** There is **no** explicit Linux display-server configuration (no `WAYLAND_DISPLAY` handling, no `--ozone-platform` switches, no GTK/Wayland hints). The app relies on **Chromium’s default platform selection** for the embedded browser engine.
- **Conclusion:** The project is **display-server neutral** at the source level. It neither **certifies** full native Wayland behavior nor **blocks** Wayland. Actual behavior on a Wayland session depends on **Electron + Chromium version**, **environment variables**, and whether the compositor runs apps under **XWayland** or **native Wayland**.

So “compliance” here means: **the codebase does not implement Wayland explicitly; it inherits whatever Chromium/Electron does on the user’s session.** That is typical for Electron apps unless they document and test Wayland-only launch options.

## What “Wayland compliance” usually means for Electron

1. **Native Wayland (preferred on many distros):** Chromium runs with the **Ozone** backend targeting Wayland (`wayland` platform), avoiding XWayland for the window when configured correctly.
2. **XWayland:** The app may still run acceptably under XWayland on a Wayland desktop; this is **not** native Wayland but is common and often “good enough.”
3. **Explicit opt-in:** Many setups require **launch flags** or **environment variables**, for example:
- `electron --ozone-platform=wayland` (or equivalent `app.commandLine.appendSwitch` **before** `app.ready`)
- Or distribution-specific wrappers that set `ELECTRON_OZONE_PLATFORM_HINT=wayland` (naming varies by Electron/Chromium generation).

This repository **does not** set those switches in code.

## Evidence from this codebase

### Main process (`background/main/index.ts`)

- **Platform-specific logic** present for **Windows** (`win32`: `setAppUserModelId`) and **Windows 7** (GPU acceleration disabled). **No** `linux`-specific branch for display protocol.
- **Global Chromium switches** (applied on all platforms except where noted):

```34:37:background/main/index.ts
// Add GPU troubleshooting flags for rendering issues
app.commandLine.appendSwitch('--disable-gpu-sandbox')
app.commandLine.appendSwitch('--disable-software-rasterizer')
app.commandLine.appendSwitch('--disable-gpu-compositing')
```

These flags address **GPU/rendering** issues (see existing finding `10222025.sparkplate.findings.opengl.vsync.rendering.error.md`). They are **not** Wayland-specific. On some systems they can interact with compositing behavior; they do **not** constitute a Wayland integration strategy.

### Build / packaging

- `package.json` lists **Electron** (`^37.1.0`) and **electron-builder** but does **not** define a dedicated `build` block for Linux desktop files, Wayland-only launch scripts, or ozone hints in this snapshot. Packaging defaults do not, by themselves, enforce native Wayland.

### Dependencies

- Native-ish modules used from the main process (e.g. `systeminformation`, `drivelist`) operate at the OS/API level and are **not** tied to X11 vs Wayland for windowing.

## Does Sparkplate.Fresh “comply with Wayland”?

| Layer | Wayland “compliance” |
|--------|----------------------|
| **Vue / renderer** | N/A — no display protocol coupling. |
| **Electron main** | **No explicit Wayland support or testing hooks** in-repo; behavior is **delegated to Electron/Chromium + user environment**. |
| **End user on Wayland desktop** | Typically **works** via Chromium defaults (often **XWayland** unless the user/distro forces native Wayland). |

**Direct answer:** The codebase **does not implement or document** a Wayland-first or Wayland-only path. It **does not contain** patterns that are known to be **incompatible** with Wayland purely from application code (e.g. no raw Xlib usage in this repo’s app code). Whether the **packaged binary** runs as native Wayland or via XWayland is an **Electron/Chromium + launch environment** question, not answered by the Vue/TS sources alone.

## Recommendations (if native Wayland is a product requirement)

1. **Document** supported Linux environments and whether **native Wayland** vs **XWayland** is expected.
2. **Optionally** add **Linux-only** `app.commandLine.appendSwitch` calls **before** `app.whenReady()`, gated by env (e.g. only when `ELECTRON_ENABLE_WAYLAND=1`), after validating on target distros (GNOME, KDE, wlroots).
3. **Test** on pure Wayland sessions (no XWayland) if claiming Wayland support.
4. Keep GPU-related flags under review: they are **global** today; changes can affect both X11 and Wayland paths.

## Related internal doc

- `docs/findings/10222025.sparkplate.findings.opengl.vsync.rendering.error.md` — GPU/VSync and blank window symptoms on Electron; relevant to Linux graphics stacks regardless of Wayland vs X11.
4 changes: 4 additions & 0 deletions public/assets/icons/crypto/cfx.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/icons/crypto/clore.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
59 changes: 59 additions & 0 deletions public/assets/icons/crypto/gfi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/assets/text/eula/eulaLineBreaksBR.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"content":"\nEnd User License Agreement<br />Under this End User License Agreement, Greenfire Inc grants to the user a non-exclusive and non-transferable license to use Greenery, a cryptocurrency wallet with accounting functionality.\"Software\" includes the executable computer programs and any related printed, electronic and online documentation and any other files that may accompany the product.<br /><br />Title, copyright, intellectual property rights and distribution rights of the Software remain exclusively with the Vendor. Intellectual property rights include the look and feel of the Software. This Agreement constitutes a license for use only and is not in any way a transfer of ownership rights to the Software.<br /><br />This Agreement grants a site license to the Licensee. The Software may be loaded onto a maximum of none computers.<br /><br />The rights and obligations of this Agreement are personal rights granted to the Licensee only. The Licensee may not transfer or assign any of the rights or obligations granted under this Agreement to any other person or legal entity. The Licensee may not make available the Software for use by one or more third parties.<br /><br />The Software may not be modified, reverse-engineered, or de-compiled in any manner through current or future available technologies.<br /><br />Failure to comply with any of the terms under the License section will be considered a material breach of this Agreement.<br /><br />License Fee<br />The original purchase price paid by the Licensee will constitute the entire license fee and is the full consideration for this Agreement.<br /><br />Limitation of Liability<br />The Software is provided by the Vendor and accepted by the Licensee &quot;as is&quot;. Liability of the Vendor will be limited to a maximum of the original purchase price of the Software. The Vendor will not be liable for any general, special, incidental or consequential damages including, but not limited to, loss of production, loss of profits, loss of revenue, loss of data, or any other business or economic disadvantage suffered by the Licensee arising out of the use or failure to use the Software.<br /><br />The Vendor makes no warranty expressed or implied regarding the fitness of the Software for a particular purpose or that the Software will be suitable or appropriate for the specific requirements of the Licensee<br /><br />The Vendor does not warrant that use of the Software will be uninterrupted or error-free. The Licensee accepts that software in general is prone to bugs and flaws within an acceptable level as determined in the industry.<br /><br />Warrants and Representations<br />The Vendor warrants and represents that it is the copyright holder of the Software. The Vendor warrants and represents that granting the license to use this Software is not in violation of any other agreement, copyright or applicable statute.<br /><br />Acceptance<br />All terms, conditions and obligations of this Agreement will be deemed to be accepted by the Licensee (\"Acceptance\") on installation of the Software on the first computer.<br /><br />User Support<br />No user support or maintenance is provided as part of this Agreement.<br /><br />Term<br />The term of this Agreement will begin on Acceptance and is perpetual.<br /><br />Termination<br />This Agreement will be terminated and the License forfeited where the Licensee has failed to comply with any of the terms of this Agreement or is in breach of this Agreement. On termination of this Agreement for any reason, the Licensee will promptly destroy the Software or return the Software to the Vendor.<br /><br />Force Majeure<br />The Vendor will be free of liability to the Licensee where the Vendor is prevented from executing its obligations under this Agreement in whole or in part due to Force Majeure , such as earthquake, typhoon, flood, fire, and war or any other unforeseen and uncontrollable event where the Vendor has taken any and all appropriate action to mitigate such an event.<br /><br />Governing Law<br />The Parties to this Agreement submit to the jurisdiction of the courts of the State of Delaware for the enforcement of this Agreement or any arbitration award or decision arising from this Agreement. This Agreement will be enforced or construed according to the laws of the State of Delaware.<br /><br />Miscellaneous<br />This Agreement can only be modified in writing signed by both the Vendor and the Licensee.<br /><br />This Agreement does not create or imply any relationship in agency or partnership between the Vendor and the Licensee.<br /><br />Headings are inserted for the convenience of the parties only and are not to be considered when interpreting this Agreement. Words in the singular mean and include the plural and vice versa. Words in the masculine gender include the feminine gender and vice versa. Words in the neuter gender include the masculine gender and the feminine gender and vice versa.<br /><br />If any term, covenant, condition or provision of this Agreement is held by a court of competent jurisdiction to be invalid, void or unenforceable, it is the parties' intent that such provision be reduced in scope by the court only to the extent deemed necessary by that court to render the provision reasonable and enforceable and the remainder of the provisions of this Agreement will in no way be affected, impaired or invalidated as a result.<br /><br />This Agreement contains the entire agreement between the parties. All understandings have been included in this Agreement. Representations which may have been made by any party to this Agreement may in some way be inconsistent with this final written Agreement. All such statements are declared to be of no value in this Agreement. Only the written terms of this Agreement will bind the parties.<br /><br />This Agreement and the terms and conditions contained in this Agreement apply to and are binding upon the Vendor's successors and assigns.<br /><br />Notices<br />All notices to the Vendor under this Agreement are to be provided at the following address: Greenfire Inc: 74 Sears Ave, Elmsford, NY 10523"}
2 changes: 1 addition & 1 deletion src/components/addressBook/ActionsDropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
</template>

<script setup lang="ts">
import { ref, onMounted, onUnmounted, defineProps, computed, defineEmits } from 'vue';
import { ref, onMounted, onUnmounted, computed } from 'vue';
import { PocketKnife, Pencil, Coins, FileImage, Image, FileUser, Star, Save, SaveOff } from 'lucide-vue-next';
import type { Contact } from '@/services/addressBook/contactService';

Expand Down
2 changes: 1 addition & 1 deletion src/components/addressBook/ExchangeModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
</template>

<script setup lang="ts">
import { ref, watch, defineProps, defineEmits } from 'vue';
import { ref, watch } from 'vue';

// Assuming these interfaces. They might need to be imported from a service file.
interface Currency {
Expand Down
2 changes: 0 additions & 2 deletions src/components/addressBook/ImportConfirmModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@
</template>

<script setup lang="ts">
import { defineProps, defineEmits } from 'vue';

const props = defineProps({
show: { type: Boolean, required: true },
file: { type: Object as () => File | null, default: null },
Expand Down
2 changes: 0 additions & 2 deletions src/components/addressBook/modals/ConfirmModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
</template>

<script setup lang="ts">
import { defineProps, defineEmits } from 'vue';

defineProps({
show: { type: Boolean, required: true },
title: { type: String, required: true },
Expand Down
Loading
Loading