lumiview 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. lumiview-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +135 -0
  2. lumiview-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +65 -0
  3. lumiview-0.1.0/.github/workflows/build.yml +185 -0
  4. lumiview-0.1.0/.gitignore +222 -0
  5. lumiview-0.1.0/CONTRIBUTING.md +72 -0
  6. lumiview-0.1.0/Cargo.lock +2448 -0
  7. lumiview-0.1.0/Cargo.toml +32 -0
  8. lumiview-0.1.0/LICENSE +373 -0
  9. lumiview-0.1.0/PKG-INFO +196 -0
  10. lumiview-0.1.0/README.md +163 -0
  11. lumiview-0.1.0/README_zh.md +159 -0
  12. lumiview-0.1.0/docs/architecture.md +116 -0
  13. lumiview-0.1.0/docs/getting-started.md +157 -0
  14. lumiview-0.1.0/docs/integrations.md +120 -0
  15. lumiview-0.1.0/docs/plugins.md +153 -0
  16. lumiview-0.1.0/docs/serve.md +97 -0
  17. lumiview-0.1.0/examples/bridge_demo.py +87 -0
  18. lumiview-0.1.0/examples/custom_titlebar.py +80 -0
  19. lumiview-0.1.0/examples/django_demo.py +159 -0
  20. lumiview-0.1.0/examples/events.py +65 -0
  21. lumiview-0.1.0/examples/fastapi_demo.py +99 -0
  22. lumiview-0.1.0/examples/hello_world.py +56 -0
  23. lumiview-0.1.0/examples/hello_world_sync.py +39 -0
  24. lumiview-0.1.0/examples/menu.py +109 -0
  25. lumiview-0.1.0/examples/multi_window.py +63 -0
  26. lumiview-0.1.0/examples/tray.py +131 -0
  27. lumiview-0.1.0/pyproject.toml +51 -0
  28. lumiview-0.1.0/python/lumiview/__init__.py +137 -0
  29. lumiview-0.1.0/python/lumiview/_binding.py +103 -0
  30. lumiview-0.1.0/python/lumiview/_core.pyi +1241 -0
  31. lumiview-0.1.0/python/lumiview/app.py +966 -0
  32. lumiview-0.1.0/python/lumiview/bridge.py +344 -0
  33. lumiview-0.1.0/python/lumiview/events.py +643 -0
  34. lumiview-0.1.0/python/lumiview/menu.py +645 -0
  35. lumiview-0.1.0/python/lumiview/plugins/__init__.py +5 -0
  36. lumiview-0.1.0/python/lumiview/plugins/window_controls.py +224 -0
  37. lumiview-0.1.0/python/lumiview/scope.py +405 -0
  38. lumiview-0.1.0/python/lumiview/serve/__init__.py +46 -0
  39. lumiview-0.1.0/python/lumiview/serve/asgi.py +224 -0
  40. lumiview-0.1.0/python/lumiview/serve/base.py +167 -0
  41. lumiview-0.1.0/python/lumiview/serve/static.py +142 -0
  42. lumiview-0.1.0/python/lumiview/serve/wsgi.py +234 -0
  43. lumiview-0.1.0/python/lumiview/task.py +283 -0
  44. lumiview-0.1.0/python/lumiview/tray.py +150 -0
  45. lumiview-0.1.0/python/lumiview/utils.py +98 -0
  46. lumiview-0.1.0/python/lumiview/window.py +2034 -0
  47. lumiview-0.1.0/src/event_loop.rs +425 -0
  48. lumiview-0.1.0/src/events.rs +1073 -0
  49. lumiview-0.1.0/src/lib.rs +113 -0
  50. lumiview-0.1.0/src/menu.rs +493 -0
  51. lumiview-0.1.0/src/monitor.rs +92 -0
  52. lumiview-0.1.0/src/tray.rs +362 -0
  53. lumiview-0.1.0/src/types.rs +680 -0
  54. lumiview-0.1.0/src/window.rs +969 -0
@@ -0,0 +1,135 @@
1
+ name: Bug Report - Bug反馈
2
+ description: Create a report to help us improve. - 反馈问题,帮助我们改进
3
+ title: "[Bug] "
4
+ labels:
5
+ - 🐛 bug
6
+
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Before filling in this `issue`, please make sure that there are no similar or duplicate `issues` that have been opened.
12
+ 填写此 `issue` 前,请先确认已经开启的 `issue` 没有类似或重复的 `issue`。
13
+
14
+ - type: dropdown
15
+ id: system
16
+ attributes:
17
+ label: OS - 操作系统
18
+ options:
19
+ - Windows
20
+ - macOS
21
+ - Linux
22
+ validations:
23
+ required: true
24
+
25
+ - type: input
26
+ id: os_version
27
+ attributes:
28
+ label: OS Version - 操作系统版本
29
+ description: |
30
+ e.g. Windows 11 24H2 / macOS 15 Sequoia / Ubuntu 24.04
31
+ 例如:Windows 11 24H2 / macOS 15 Sequoia / Ubuntu 24.04
32
+ placeholder: Windows 11 24H2
33
+ validations:
34
+ required: true
35
+
36
+ - type: input
37
+ id: python_version
38
+ attributes:
39
+ label: Python Version - Python 版本
40
+ description: |
41
+ LumiView requires Python >= 3.10.
42
+ LumiView 要求 Python >= 3.10。
43
+ placeholder: "3.12"
44
+ validations:
45
+ required: true
46
+
47
+ - type: input
48
+ id: version
49
+ attributes:
50
+ label: LumiView Version - LumiView 版本
51
+ description: |
52
+ Run `pip show lumiview` to check. LumiView is still in alpha, so please always test with the latest version first.
53
+ 运行 `pip show lumiview` 查看。LumiView 仍处于 alpha 阶段,请务必先测试最新版本再提交。
54
+ placeholder: 0.1.0
55
+ validations:
56
+ required: true
57
+
58
+ - type: dropdown
59
+ id: area
60
+ attributes:
61
+ label: Affected Area - 影响范围
62
+ description: |
63
+ Which part of LumiView is involved? You can select multiple.
64
+ 涉及 LumiView 的哪个部分?可多选。
65
+ multiple: true
66
+ options:
67
+ - Window / 窗口管理(几何、状态、特效、全屏)
68
+ - WebView / 网页加载与渲染
69
+ - JS Bridge (IPC) / 桥接通信
70
+ - Event system / 事件系统
71
+ - Plugins / 插件
72
+ - serve protocol / 协议处理
73
+ - Installation & build / 安装与构建
74
+ - Other / 其他
75
+ validations:
76
+ required: false
77
+
78
+ - type: textarea
79
+ id: exist
80
+ attributes:
81
+ label: Existing behavior - 现有行为
82
+ description: |
83
+ Please describe the problem you have encountered carefully.
84
+ 请仔细描述你所遇到的问题。
85
+ validations:
86
+ required: true
87
+
88
+ - type: textarea
89
+ id: expect
90
+ attributes:
91
+ label: Expected behavior - 预期行为
92
+ description: |
93
+ Please describe in detail the results you wish to achieve.
94
+ 请仔细描述你要得到的结果。
95
+ validations:
96
+ required: true
97
+
98
+ - type: textarea
99
+ id: reproduce
100
+ attributes:
101
+ label: To Reproduce - 复现问题
102
+ description: |
103
+ How do you trigger this bug? Please walk us through it step by step, and provide a minimal reproduction script if possible.
104
+ 这个 bug 是怎么触发的?请详细告诉我们是怎样出现这个情况的,如果可能请提供最小复现脚本。
105
+ placeholder: |
106
+ ```python
107
+ from lumiview import App, Window, WindowOptions
108
+
109
+ # minimal reproduction code
110
+ ```
111
+ validations:
112
+ required: false
113
+
114
+ - type: textarea
115
+ id: logs
116
+ attributes:
117
+ label: Logs & Screenshots - 日志与截图
118
+ description: |
119
+ Please provide the full traceback, console output, or screenshots. If the window crashes, try running with `RUST_BACKTRACE=1`.
120
+ 请提供完整的 traceback、控制台输出或截图。若窗口崩溃,可尝试以 `RUST_BACKTRACE=1` 运行。
121
+ validations:
122
+ required: false
123
+
124
+ - type: checkboxes
125
+ id: know
126
+ attributes:
127
+ label: This issue is unique - 这个 issue 是唯一的
128
+ options:
129
+ - label: I have searched the issue tracker and confirmed that there is no identical issue. 我已经搜索问题追踪器并且确认没有相同的 Issue。
130
+ required: true
131
+ - label: I admit that I previously checked all options without thorough verification and directly submitted this Issue, and I agree that it can be closed directly. 我承认此前未充分核实便勾选了所有选项并直接提交此 Issue ,且同意该 Issue 可被直接关闭。
132
+ - label: I confirm that I am currently using the latest version of LumiView. If not, this issue can be closed directly. 我确认当前使用的是最新版本的 LumiView,若非如此,此 Issue 可被直接关闭。
133
+ required: true
134
+ - label: I promise to provide a detailed description of the encountered issue, along with relevant logs and screenshots, rather than offering incomplete or vague information. 我承诺将详细描述遇到的问题,并提供相关日志与截图,而非提供不完整或模糊的信息。
135
+ required: true
@@ -0,0 +1,65 @@
1
+ name: Feature request - 功能请求
2
+ description: Suggest an idea for this project - 为这个项目推荐一个新想法
3
+ title: "[Feature] "
4
+ labels:
5
+ - 🪁 enhancement
6
+
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Before filling in this `issue`, please make sure that there are no similar or duplicate `issues` that have been opened.
12
+ 填写此 `issue` 前,请先确认已经开启的 `issue` 没有类似或重复的 `issue`。
13
+
14
+ - type: textarea
15
+ id: feature
16
+ attributes:
17
+ label: What new features do you want? - 你想要什么新功能?
18
+ description: |
19
+ What new feature or change you want? How it improves? Please tell us the requirements is with a clear and detailed description, put your screenshots if possible.
20
+ 你想要什么新功能或者什么改变?这会带来什么提升?请清晰而详细地描述你的需求,如果可以的话最好附带截图。
21
+ validations:
22
+ required: true
23
+
24
+ - type: textarea
25
+ id: use_case
26
+ attributes:
27
+ label: Use Case - 使用场景
28
+ description: |
29
+ What is your application scenario and how do you use LumiView? (e.g. a desktop app you are building with LumiView)
30
+ 你的应用场景是什么?你如何使用 LumiView?(例如:你正在用 LumiView 构建的桌面应用)
31
+ placeholder: |
32
+ I'm building a desktop app with LumiView, and I need...
33
+ validations:
34
+ required: false
35
+
36
+ - type: dropdown
37
+ id: area
38
+ attributes:
39
+ label: Related Area - 相关范围
40
+ description: |
41
+ Which part of LumiView is involved? You can select multiple.
42
+ 涉及 LumiView 的哪个部分?可多选。
43
+ multiple: true
44
+ options:
45
+ - Window / 窗口管理
46
+ - WebView
47
+ - JS Bridge (IPC)
48
+ - Event system / 事件系统
49
+ - Plugins / 插件
50
+ - serve protocol / 协议处理
51
+ - Packaging / 打包分发
52
+ - Other / 其他
53
+ validations:
54
+ required: false
55
+
56
+ - type: checkboxes
57
+ id: know
58
+ attributes:
59
+ label: This issue is unique - 这个 issue 是唯一的
60
+ options:
61
+ - label: I have searched the issue tracker and confirmed that there is no identical issue. 我已经搜索问题追踪器并且确认没有相同的 Issue。
62
+ required: true
63
+ - label: I admit that I previously checked all options without thorough verification and directly submitted this Issue, and I agree that it can be closed directly. 我承认此前未充分核实便勾选了所有选项并直接提交此 Issue ,且同意该 Issue 可被直接关闭。
64
+ - label: I promise to provide a detailed description of the new feature I want, along with reasonable justification, rather than offering incomplete or vague information. 我承诺我会详细描述我想要的新功能,并附上合理的理由,而非提供不完整或模糊的信息。
65
+ required: true
@@ -0,0 +1,185 @@
1
+ name: Build
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ branches:
8
+ - main
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ linux:
16
+ runs-on: ${{ matrix.platform.runner }}
17
+ strategy:
18
+ matrix:
19
+ platform:
20
+ - runner: ubuntu-latest
21
+ target: x86_64
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - name: Install webkit2gtk
25
+ run: |
26
+ sudo apt-get update
27
+ # libxdo-dev: muda's GTK backend sends predefined-item shortcuts
28
+ # (copy/paste/...) through xdo; bundled into the wheel by
29
+ # auditwheel (no GTK-style global-type-registry concern).
30
+ sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libglib2.0-dev libxdo-dev
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: "3.12"
34
+
35
+ - name: Build wheel
36
+ uses: PyO3/maturin-action@v1
37
+ with:
38
+ args: --release --out dist
39
+ - name: Repair manylinux (exclude system GTK/GLib/dbus — must not bundle)
40
+ run: |
41
+ pip install auditwheel
42
+ # GTK/GLib libraries can never be bundled into the wheel: the
43
+ # GObject type registry is process-global, so a second copy breaks
44
+ # any process that also links the system GTK (LumiView's own tao
45
+ # window and wryview both do). libdbus-1/libsystemd likewise exist
46
+ # on every desktop that can run GTK3 (the gtk .deb depends on
47
+ # them) — bundling them only adds weight and risks version skew.
48
+ auditwheel repair \
49
+ --exclude 'libgtk-3.*' \
50
+ --exclude 'libgdk-3.*' \
51
+ --exclude 'libglib-2.0.*' \
52
+ --exclude 'libgobject-2.0.*' \
53
+ --exclude 'libgio-2.0.*' \
54
+ --exclude 'libgmodule-2.0.*' \
55
+ --exclude 'libgdk_pixbuf-2.0.*' \
56
+ --exclude 'libpango-1.0.*' \
57
+ --exclude 'libpangocairo-1.0.*' \
58
+ --exclude 'libpangoft2-1.0.*' \
59
+ --exclude 'libatk-1.0.*' \
60
+ --exclude 'libharfbuzz.*' \
61
+ --exclude 'libfribidi.*' \
62
+ --exclude 'libepoxy.*' \
63
+ --exclude 'libcairo.*' \
64
+ --exclude 'libcairo-gobject.*' \
65
+ --exclude 'libxkbcommon.*' \
66
+ --exclude 'libwayland-client.*' \
67
+ --exclude 'libdbus-1.*' \
68
+ --exclude 'libsystemd.*' \
69
+ --exclude 'libgcrypt.*' \
70
+ --exclude 'libgpg-error.*' \
71
+ --exclude 'libcap.*' \
72
+ --exclude 'libzstd.*' \
73
+ --exclude 'liblz4.*' \
74
+ --exclude 'liblzma.*' \
75
+ -w dist dist/lumiview-*.whl
76
+ rm -f dist/*-linux_x86_64.whl
77
+ - name: Upload wheels
78
+ uses: actions/upload-artifact@v4
79
+ with:
80
+ name: wheels-linux
81
+ path: dist
82
+
83
+ windows:
84
+ runs-on: ${{ matrix.platform.runner }}
85
+ strategy:
86
+ matrix:
87
+ platform:
88
+ - runner: windows-latest
89
+ target: x64
90
+ - runner: windows-latest
91
+ target: x86
92
+ python-arch: x86
93
+ steps:
94
+ - uses: actions/checkout@v7
95
+ - uses: actions/setup-python@v7
96
+ with:
97
+ python-version: "3.12"
98
+ architecture: ${{ matrix.platform.python-arch || 'x64' }}
99
+ - name: Build wheels
100
+ uses: PyO3/maturin-action@v1
101
+ with:
102
+ target: ${{ matrix.platform.target }}
103
+ args: --release --out dist --find-interpreter
104
+ - name: Upload wheels
105
+ uses: actions/upload-artifact@v4
106
+ with:
107
+ name: wheels-windows-${{ matrix.platform.target }}
108
+ path: dist
109
+
110
+ macos:
111
+ runs-on: ${{ matrix.platform.runner }}
112
+ strategy:
113
+ matrix:
114
+ platform:
115
+ - runner: macos-14
116
+ target: x86_64
117
+ - runner: macos-latest
118
+ target: aarch64
119
+ steps:
120
+ - uses: actions/checkout@v4
121
+ - uses: actions/setup-python@v5
122
+ with:
123
+ python-version: "3.12"
124
+ - name: Build wheel
125
+ uses: PyO3/maturin-action@v1
126
+ with:
127
+ target: ${{ matrix.platform.target }}
128
+ args: --release --out dist
129
+ - name: Upload wheels
130
+ uses: actions/upload-artifact@v4
131
+ with:
132
+ name: wheels-macos-${{ matrix.platform.target }}
133
+ path: dist
134
+
135
+ sdist:
136
+ runs-on: ubuntu-latest
137
+ steps:
138
+ - uses: actions/checkout@v4
139
+ - name: Build sdist
140
+ uses: PyO3/maturin-action@v1
141
+ with:
142
+ command: sdist
143
+ args: --out dist
144
+ - name: Upload sdist
145
+ uses: actions/upload-artifact@v4
146
+ with:
147
+ name: wheels-sdist
148
+ path: dist
149
+
150
+ pypi-publish:
151
+ runs-on: ubuntu-latest
152
+ if: startsWith(github.ref, 'refs/tags/v')
153
+ needs: [linux, windows, macos, sdist]
154
+ permissions:
155
+ id-token: write
156
+ contents: read
157
+ environment:
158
+ name: pypi
159
+ url: https://pypi.org/project/lumiview/
160
+ steps:
161
+ - uses: actions/checkout@v4
162
+
163
+ - name: Validate version match
164
+ shell: pwsh
165
+ run: |
166
+ $pyprojectVersion = (Select-String -Path pyproject.toml -Pattern 'version = "(.+?)"').Matches.Groups[1].Value
167
+ $gitTag = "${{ github.ref }}".Split('/')[-1]
168
+ $gitTagVersion = $gitTag.TrimStart('v')
169
+ if ($pyprojectVersion -ne $gitTagVersion) {
170
+ Write-Error "Version mismatch: pyproject.toml=$pyprojectVersion vs tag=$gitTag"
171
+ exit 1
172
+ }
173
+ Write-Host "Versions match: $pyprojectVersion"
174
+
175
+ - name: Retrieve release distributions
176
+ uses: actions/download-artifact@v4
177
+ with:
178
+ pattern: wheels-*
179
+ path: dist/
180
+ merge-multiple: true
181
+
182
+ - name: Publish release distributions to PyPI
183
+ uses: pypa/gh-action-pypi-publish@release/v1
184
+ with:
185
+ packages-dir: dist/
@@ -0,0 +1,222 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ parts/
18
+ sdist/
19
+ var/
20
+ wheels/
21
+ share/python-wheels/
22
+ *.egg-info/
23
+ .installed.cfg
24
+ *.egg
25
+ MANIFEST
26
+
27
+ # PyInstaller
28
+ # Usually these files are written by a python script from a template
29
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ *.cover
47
+ *.py.cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+ cover/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+ db.sqlite3-journal
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ .pybuilder/
74
+ target/
75
+
76
+ # Jupyter Notebook
77
+ .ipynb_checkpoints
78
+
79
+ # IPython
80
+ profile_default/
81
+ ipython_config.py
82
+
83
+ # pyenv
84
+ # For a library or package, you might want to ignore these files since the code is
85
+ # intended to run in multiple environments; otherwise, check them in:
86
+ # .python-version
87
+
88
+ # pipenv
89
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
90
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
91
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
92
+ # install all needed dependencies.
93
+ #Pipfile.lock
94
+
95
+ # UV
96
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
97
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
98
+ # commonly ignored for libraries.
99
+ #uv.lock
100
+
101
+ # poetry
102
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
103
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
104
+ # commonly ignored for libraries.
105
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
106
+ #poetry.lock
107
+ #poetry.toml
108
+
109
+ # pdm
110
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
111
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
112
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
113
+ #pdm.lock
114
+ #pdm.toml
115
+ .pdm-python
116
+ .pdm-build/
117
+
118
+ # pixi
119
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
120
+ #pixi.lock
121
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
122
+ # in the .venv directory. It is recommended not to include this directory in version control.
123
+ .pixi
124
+
125
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
126
+ __pypackages__/
127
+
128
+ # Celery stuff
129
+ celerybeat-schedule
130
+ celerybeat.pid
131
+
132
+ # SageMath parsed files
133
+ *.sage.py
134
+
135
+ # Environments
136
+ .env
137
+ .envrc
138
+ .venv
139
+ env/
140
+ venv/
141
+ ENV/
142
+ env.bak/
143
+ venv.bak/
144
+
145
+ # Spyder project settings
146
+ .spyderproject
147
+ .spyproject
148
+
149
+ # Rope project settings
150
+ .ropeproject
151
+
152
+ # mkdocs documentation
153
+ /site
154
+
155
+ # mypy
156
+ .mypy_cache/
157
+ .dmypy.json
158
+ dmypy.json
159
+
160
+ # Pyre type checker
161
+ .pyre/
162
+
163
+ # pytype static type analyzer
164
+ .pytype/
165
+
166
+ # Cython debug symbols
167
+ cython_debug/
168
+
169
+ # PyCharm
170
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
171
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
172
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
173
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
174
+ .idea/
175
+
176
+ # Abstra
177
+ # Abstra is an AI-powered process automation framework.
178
+ # Ignore directories containing user credentials, local state, and settings.
179
+ # Learn more at https://abstra.io/docs
180
+ .abstra/
181
+
182
+ # Visual Studio Code
183
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
184
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
185
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
186
+ # you could uncomment the following to ignore the entire vscode folder
187
+ .vscode/
188
+
189
+ # Ruff stuff:
190
+ .ruff_cache/
191
+
192
+ # PyPI configuration file
193
+ .pypirc
194
+
195
+ # Cursor
196
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
197
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
198
+ # refer to https://docs.cursor.com/context/ignore-files
199
+ .cursorignore
200
+ .cursorindexingignore
201
+
202
+ # Marimo
203
+ marimo/_static/
204
+ marimo/_lsp/
205
+ __marimo__/
206
+
207
+
208
+ # stubs
209
+
210
+ stubs/
211
+
212
+ python/**/*.pyd
213
+ python/**/*.pdb
214
+
215
+ .claude
216
+ CLAUDE.md
217
+
218
+ .DS_Store
219
+
220
+ plan.md
221
+ TODO.md
222
+ docs/superpowers
@@ -0,0 +1,72 @@
1
+ # Contributing to LumiView
2
+
3
+ Thank you for your interest in contributing! LumiView is in early development, and we welcome feedback, bug reports, and thoughtful PRs.
4
+
5
+ **Before starting any significant work**, please open a [Discussion](https://github.com/xiaosuawa/LumiView/discussions) or [Issue](https://github.com/xiaosuawa/LumiView/issues) to align on the approach. Unsolicited PRs that touch the public API may not be merged if they conflict with the planned direction.
6
+
7
+ ## Ways to Contribute
8
+
9
+ ### 🐛 Bug Reports
10
+
11
+ - Check existing [Issues](https://github.com/xiaosuawa/LumiView/issues) first
12
+ - Include: OS + version, Python version, `lumiview` version, minimal repro code
13
+ - **Include logs**: run the repro with DEBUG logging enabled and paste
14
+ the relevant output:
15
+
16
+ ```python
17
+ import logging
18
+
19
+ logging.getLogger("lumiview").setLevel(logging.DEBUG)
20
+ ```
21
+
22
+ The `lumiview.*` log tree covers window / tray lifecycle and event
23
+ dispatch — it usually pinpoints the issue faster than the repro alone.
24
+
25
+ ### 💡 Feature Ideas
26
+
27
+ - Use [Discussions](https://github.com/xiaosuawa/LumiView/discussions) for brainstorming
28
+ - Tell us about your use case — it helps us prioritize
29
+
30
+ ### 📖 Examples & Documentation
31
+
32
+ - Improvements to the [`examples/`](examples/) directory are always welcome
33
+ - Docstring improvements and typo fixes don't need prior discussion
34
+
35
+ ### 🔧 Code Contributions
36
+
37
+ 1. **Discuss first** — open an issue or discussion for anything beyond small fixes
38
+ 2. **Follow existing patterns** — match the code style, type annotations, and docstring conventions
39
+ 3. **Keep PRs focused** — one thing per PR
40
+
41
+ ## Development Setup
42
+
43
+ ```bash
44
+ # Clone and install dev dependencies
45
+ git clone https://github.com/xiaosuawa/LumiView.git
46
+ cd lumiview
47
+ pip install maturin
48
+
49
+ # Build and install in debug mode
50
+ maturin develop
51
+
52
+ # Run an example
53
+ python examples/hello_world.py
54
+ ```
55
+
56
+ ## Project Structure
57
+
58
+ ```
59
+ src/ Rust bindings (PyO3 + tao + wryview)
60
+ python/lumiview/ Python layer (App, Window, Bridge, Task, serve)
61
+ examples/ Runnable example scripts
62
+ ```
63
+
64
+ ## Code Style
65
+
66
+ - Python: follow existing type annotation patterns (all public APIs are typed)
67
+ - Rust: standard `cargo fmt` + `cargo clippy`
68
+ - Docstrings: Google-style for Python, `///` for Rust
69
+
70
+ ## License
71
+
72
+ By contributing, you agree that your contributions will be licensed under the [MPL-2.0](LICENSE).