Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
cfab371
Add xournal++ exporter, improve importer
CodeDoctorDE Jun 23, 2026
2b01ac4
Add onenote import
CodeDoctorDE Jun 21, 2026
b98029c
Fix stroke and embedded objects onenote imports
CodeDoctorDE Jun 21, 2026
22a9895
Fix xps inside onenote
CodeDoctorDE Jun 21, 2026
6630772
Add web support to onenote importer
CodeDoctorDE Jun 21, 2026
6e0126c
Fix snap build for onenote parser
CodeDoctorDE Jun 21, 2026
6aa8300
Add general file import, add onenote type, add onenote loading
CodeDoctorDE Jun 21, 2026
e0781fb
Add combine highlighter option, closes #1071
CodeDoctorDE Jun 23, 2026
70ba888
Change combineHighlighter to combinePaths
CodeDoctorDE Jun 23, 2026
5600b00
Fix refresh foregrounds can be run concurrently
CodeDoctorDE Jun 25, 2026
20db713
Upgrade to astro 7 (#1150)
CodeDoctorDE Jun 25, 2026
73c2287
Improve state management for better linking different systems together
CodeDoctorDE Jun 26, 2026
3a267a6
Add next and previous page shortcuts
CodeDoctorDE Jun 26, 2026
7c970d6
Unify area context menu and area selection context menu, related to #…
CodeDoctorDE Jun 26, 2026
6ee6a09
Add onenote docs
CodeDoctorDE Jun 27, 2026
c3399ab
Start adding pages selector
CodeDoctorDE Jun 26, 2026
d657a37
Improve page range selection UI
CodeDoctorDE Jun 28, 2026
ff14843
Add show internal name
CodeDoctorDE Jun 28, 2026
a67df83
Add support for showing areas from all pages
CodeDoctorDE Jun 28, 2026
3a9ef0f
Only show page selection text field on internal pages, remove rename …
CodeDoctorDE Jun 28, 2026
2632485
Add apply areas to templates, disable create areas if template alread…
CodeDoctorDE Jun 28, 2026
3599d83
Update changelog and dependencies
CodeDoctorDE Jun 28, 2026
41be77e
Improve window title bar design
CodeDoctorDE Jun 30, 2026
764a7ae
Fix zoom slider and reset button not working if zoom is locked
CodeDoctorDE Jun 30, 2026
709c11a
Fix saved documents being saved again
CodeDoctorDE Jun 30, 2026
2adb49f
Disable the save button if it is already saved
CodeDoctorDE Jun 30, 2026
0aba148
New Crowdin updates (#1149)
CodeDoctorDE Jul 5, 2026
55729e2
Fix polygon disappears
CodeDoctorDE Jul 6, 2026
a35216a
Upgrade dependencies
CodeDoctorDE Jul 6, 2026
27d7efb
Add changelog of v2.6.0-beta.1
CodeDoctorDE Jul 6, 2026
b20e3f4
Update Version to 2.6.0-beta.2
CodeDoctorDE Jul 6, 2026
5149705
Bump version
CodeDoctorDE Jul 6, 2026
b49daeb
Merge branch 'main' into develop
CodeDoctorDE Jul 6, 2026
e03e553
Refactor whole state structure (split currentindexcubit), add persist…
CodeDoctorDE Jun 29, 2026
d47e35c
Move functions in its respected cubit
CodeDoctorDE Jun 30, 2026
ec3152a
Improve parameters, split cubits in different files
CodeDoctorDE Jun 30, 2026
de4d6c9
Remove leftover viewoption, make persitent state a repository and use…
CodeDoctorDE Jun 30, 2026
4c5d024
Add persistence settings
CodeDoctorDE Jun 30, 2026
718e25d
Fix performance regressions with big refactor
CodeDoctorDE Jul 2, 2026
b8d4a10
Fix polygon disappears
CodeDoctorDE Jul 2, 2026
3210be5
Fix persistent state content hash
CodeDoctorDE Jul 2, 2026
1dadf2c
Improve performance of saving and rendering
CodeDoctorDE Jul 3, 2026
3f81ff3
Fix pathkey and contenthash being saved, fix state not saving before …
CodeDoctorDE Jul 4, 2026
fbe5513
Add localization to persistent settings and cleanup dialog
CodeDoctorDE Jul 4, 2026
486961a
Use settings_leap to generate settings pages
CodeDoctorDE Jul 5, 2026
b4d70a2
Improve settings code
CodeDoctorDE Jul 5, 2026
a815d1c
Migrate input settings to settings leap, add descriptions for settings
CodeDoctorDE Jul 5, 2026
025df87
Reorder top corner menu to have home on top, closes #1161
CodeDoctorDE Jul 8, 2026
d7af30e
Fix wrong title bar on wayland on non gnome desktops
CodeDoctorDE Jul 8, 2026
55c7d2d
Revert "Fix wrong title bar on wayland on non gnome desktops"
CodeDoctorDE Jul 10, 2026
57fa5af
Fix crash with android saf on folders with many files
CodeDoctorDE Jul 11, 2026
dba94f4
Add better settings description
CodeDoctorDE Jul 11, 2026
02b0ecd
Improve settings navigation and persistent responsiveness
CodeDoctorDE Jul 11, 2026
38db403
Fix blur resetting on color change
CodeDoctorDE Jul 12, 2026
d23e7bf
Fix Polygon using aabb when closed, Typo
Nezznee Jul 8, 2026
910918f
Add tests for aabb test for polygon in #1162
CodeDoctorDE Jul 12, 2026
bcf4d1c
Improve syncing of document states
CodeDoctorDE Jul 12, 2026
e873ae4
Improve viewport performance on large documents
CodeDoctorDE Jul 10, 2026
5808263
Fix malformed pen strokes and unreliable stroke erasing on large docu…
CodeDoctorDE Jul 10, 2026
b7d8a61
Improve pen preview performance
CodeDoctorDE Jul 10, 2026
22aeb0b
Fix layout shifting
CodeDoctorDE Jul 11, 2026
3eca751
Further improve performance
CodeDoctorDE Jul 12, 2026
84f5789
New Crowdin updates (#1160)
CodeDoctorDE Jul 13, 2026
36476f8
Fix dependencies
CodeDoctorDE Jul 13, 2026
ef8673a
Fix last changelog missing onenote importer
CodeDoctorDE Jul 13, 2026
27c1f9f
Add changelog of v2.6.0-beta.2
CodeDoctorDE Jul 13, 2026
9d78026
Update Version to 2.6.0-beta.3
CodeDoctorDE Jul 13, 2026
1ae258f
Bump version
CodeDoctorDE Jul 13, 2026
683f2b6
Merge branch 'main' into develop
CodeDoctorDE Jul 13, 2026
fb9bc61
Fix text labels disappearing when switching elements
CodeDoctorDE Jul 13, 2026
f8c9c90
Fix polygons disappearing after property changes
CodeDoctorDE Jul 13, 2026
34ab57c
Save renamed files before moving their references
CodeDoctorDE Jul 13, 2026
655276f
Fix incorrect layer and page reordering
CodeDoctorDE Jul 13, 2026
7c0f410
Support spacer hit testing across element types
CodeDoctorDE Jul 13, 2026
dad4394
Allow zoom controls while zoom is locked
CodeDoctorDE Jul 13, 2026
4cffcfb
Respect hidden extensions in recent files
CodeDoctorDE Jul 13, 2026
13bd109
Persist the thumbnail visibility setting
CodeDoctorDE Jul 13, 2026
0929257
Correct the texture height label
CodeDoctorDE Jul 13, 2026
0f85172
Prevent repeated saves and mark imports unsaved
CodeDoctorDE Jul 13, 2026
78f05fc
Fix WebDAV connectivity and SAF filesystem selection
CodeDoctorDE Jul 13, 2026
ddf4a5c
Update Flutter and project dependencies
CodeDoctorDE Jul 13, 2026
bd31a95
Prepare the 2.5.4 hotfix release
CodeDoctorDE Jul 13, 2026
61d8fe9
Add template custom file name
CodeDoctorDE Jul 10, 2026
6f86805
Add default file name setting
CodeDoctorDE Jul 14, 2026
6f9fde2
Fix unname files, disable autosave for quick start
CodeDoctorDE Jul 14, 2026
b1edb20
Add native linux titlebar
CodeDoctorDE Jul 13, 2026
8333e0a
Add custom fonts, closes #1011
CodeDoctorDE Jul 14, 2026
1fca044
Add update flathub beta workflow
CodeDoctorDE Jul 14, 2026
55c604b
Fix embed/web loading errors, closes #1167
CodeDoctorDE Jul 15, 2026
29fdcb1
Improve rotated elements transformtion, closes #1099
CodeDoctorDE Jul 15, 2026
df01580
Add camera rotation support, closes #977
CodeDoctorDE Jul 15, 2026
ff0f8f1
Merge remote-tracking branch 'origin/big-page-performance' into develop
CodeDoctorDE Jul 15, 2026
ad55dc8
Further improve large page rendering performance
CodeDoctorDE Jul 15, 2026
30954ec
Fix live pen stroke preview throttling
CodeDoctorDE Jul 15, 2026
e2cf957
Fix german description
CodeDoctorDE Jul 15, 2026
4bda363
Fix rotated canvas viewport performance
CodeDoctorDE Jul 15, 2026
7e44d1c
Improve negative scaling
CodeDoctorDE Jul 15, 2026
1c8a856
Improve rendering reliability if baking fails
CodeDoctorDE Jul 15, 2026
d904cf2
Improve rendering reliability if baking fails
CodeDoctorDE Jul 15, 2026
41ad9e2
Fix placement when flipping rotated elements
CodeDoctorDE Jul 16, 2026
7493461
Fix locale reset when previewing files
CodeDoctorDE Jul 16, 2026
3e7dbed
Fix locale reset when previewing files
CodeDoctorDE Jul 16, 2026
713bdfb
Keep existing filenames when editing document names
CodeDoctorDE Jul 16, 2026
79cb347
Fix tests
CodeDoctorDE Jul 16, 2026
33d92ad
Preserve signed shape and image dimensions
CodeDoctorDE Jul 16, 2026
0260ccb
Add flip horizontal and vertical to all elements, closes #1058
CodeDoctorDE Jul 16, 2026
c734563
Fix flipped PDF elements behaving unpredictably and fix elements jump…
CodeDoctorDE Jul 19, 2026
863e763
Save sidebar position, closes #1180
CodeDoctorDE Jul 19, 2026
e3bcf3b
Upgrade dependencies
CodeDoctorDE Jul 19, 2026
8d4d586
Merge branch 'main' into develop
CodeDoctorDE Jul 19, 2026
8876a1c
Fix metadata file
CodeDoctorDE Jul 19, 2026
6229326
Merge branch 'main' into develop
CodeDoctorDE Jul 19, 2026
09c9ee2
Add changelog of v2.5.4
CodeDoctorDE Jul 20, 2026
eafa4cc
Merge branch 'main' into develop
CodeDoctorDE Jul 20, 2026
b4700e5
Update Version to 2.5.5
CodeDoctorDE Jul 20, 2026
7decb88
Merge branch 'main' into develop
CodeDoctorDE Jul 20, 2026
2e6f8b1
Bump version
CodeDoctorDE Jul 20, 2026
1b0b070
Upgrade dependencies
CodeDoctorDE Jul 20, 2026
b98c7f7
Fix navigation menus broken on mobile layout, closes #1177
CodeDoctorDE Jul 20, 2026
2af3d85
Upgrade dependencies
CodeDoctorDE Jul 21, 2026
f00bb9d
Fix creating packs from the selection menu, fixes #1178
CodeDoctorDE Jul 21, 2026
61d29d1
Fix moving collection elements to layers, fixes #1176
CodeDoctorDE Jul 21, 2026
a6d7d71
Improve documentation, add element context menu page and paint option…
Nezznee Jul 25, 2026
427b532
Improve documentation
Nezznee Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
238 changes: 223 additions & 15 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: 🔧 Setup java
uses: actions/setup-java@v5
with:
Expand Down Expand Up @@ -153,7 +153,7 @@ jobs:
working-directory: app
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Make yq tool available on Windows runners
run: |
choco install yq
Expand Down Expand Up @@ -213,7 +213,7 @@ jobs:
working-directory: app
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: 🦀 Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
Expand Down Expand Up @@ -262,7 +262,7 @@ jobs:
working-directory: app
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Get dependencies
run: |
sudo apt-get update
Expand Down Expand Up @@ -406,7 +406,7 @@ jobs:
runs-on: ${{ matrix.arch.image }}
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Add snapcraft directory
run: |
mkdir -p snap
Expand All @@ -433,15 +433,15 @@ jobs:
working-directory: app
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: 🦀 Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
rust-src-dir: app
- uses: subosito/flutter-action@v2.23.0
with:
flutter-version-file: app/pubspec.yaml
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: "3.13"
- name: ✅ Enable platforms
Expand All @@ -458,9 +458,9 @@ jobs:
working-directory: app/build/macos/Build/Products/Release
run: zip --symlinks -qr linwood-butterfly-macos.zip butterfly.app
- name: Setup node
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: 24
node-version: 26
- name: Install appdmg
run: |
python3 -m pip install setuptools
Expand Down Expand Up @@ -489,7 +489,7 @@ jobs:
working-directory: app
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: 🦀 Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
Expand Down Expand Up @@ -526,7 +526,7 @@ jobs:
if: github.event_name != 'pull_request'
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Set Docker tag
id: docker_tag
run: |
Expand Down Expand Up @@ -572,7 +572,7 @@ jobs:
- build-ipa
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
env:
CI_PAT: ${{ secrets.CI_PAT }}
with:
Expand Down Expand Up @@ -870,7 +870,7 @@ jobs:
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }}
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
token: ${{ secrets.CI_PAT }}
- name: Setup git
Expand Down Expand Up @@ -904,7 +904,7 @@ jobs:
- name: Setup Fastlane
uses: ruby/setup-ruby@v1
with:
ruby-version: "4.0.5"
ruby-version: "4.0.6"
bundler-cache: true
working-directory: app/android
- name: 🚀 Deploy to Play Store
Expand All @@ -923,7 +923,7 @@ jobs:
needs: [deploy]
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
token: ${{ secrets.CI_PAT }}
- if: ${{ github.ref == 'refs/tags/stable' }}
Expand All @@ -940,3 +940,211 @@ jobs:
version: ${{ needs.deploy.outputs.version }}
release-tag: v${{ needs.deploy.outputs.version }}
token: ${{ secrets.CI_PAT }}
update-flathub-beta:
name: Update Flathub beta
needs:
- deploy
if: >-
${{
github.event_name == 'release' &&
github.event.action == 'published' &&
github.event.release.prerelease == true
}}
runs-on: ubuntu-24.04

permissions:
contents: read

concurrency:
group: flathub-beta-${{ github.event.release.tag_name }}
cancel-in-progress: false

env:
FLATHUB_REPOSITORY: flathub/dev.linwood.butterfly
FLATHUB_MANIFEST: dev.linwood.butterfly.json
RELEASE_TAG: ${{ github.event.release.tag_name }}

steps:
- name: Download release checksums
env:
GH_TOKEN: ${{ github.token }}
run: |
mkdir -p release

for attempt in {1..12}; do
rm -f release/checksums.txt

if gh release download "$RELEASE_TAG" \
--repo "$GITHUB_REPOSITORY" \
--pattern checksums.txt \
--dir release; then
break
fi

echo "Release assets are not available yet, retrying..."
sleep 10
done

test -s release/checksums.txt

- name: Read Linux checksums
id: checksums
run: |
X86_64_SHA="$(
awk '$2 == "linwood-butterfly-linux-x86_64.tar.gz" {
print $1
}' release/checksums.txt
)"

ARM64_SHA="$(
awk '$2 == "linwood-butterfly-linux-arm64.tar.gz" {
print $1
}' release/checksums.txt
)"

if [[ ! "$X86_64_SHA" =~ ^[0-9a-f]{64}$ ]]; then
echo "Invalid or missing x86_64 checksum"
exit 1
fi

if [[ ! "$ARM64_SHA" =~ ^[0-9a-f]{64}$ ]]; then
echo "Invalid or missing arm64 checksum"
exit 1
fi

echo "x86_64=$X86_64_SHA" >> "$GITHUB_OUTPUT"
echo "arm64=$ARM64_SHA" >> "$GITHUB_OUTPUT"

- name: Checkout Flathub beta branch
uses: actions/checkout@v7
with:
repository: flathub/dev.linwood.butterfly
ref: beta
token: ${{ secrets.CI_PAT }}
fetch-depth: 0
path: flathub

- name: Update Flathub manifest
env:
X86_64_SHA: ${{ steps.checksums.outputs.x86_64 }}
ARM64_SHA: ${{ steps.checksums.outputs.arm64 }}
run: |
python3 <<'PY'
import os
import re
from pathlib import Path

manifest = Path("flathub") / os.environ["FLATHUB_MANIFEST"]
release_tag = os.environ["RELEASE_TAG"]

files = {
"linwood-butterfly-linux-x86_64.tar.gz": os.environ["X86_64_SHA"],
"linwood-butterfly-linux-arm64.tar.gz": os.environ["ARM64_SHA"],
}

lines = manifest.read_text(encoding="utf-8").splitlines()
updated = set()

for index, line in enumerate(lines):
for filename, checksum in files.items():
if '"url":' not in line or filename not in line:
continue

indent = line[: len(line) - len(line.lstrip())]
lines[index] = (
f'{indent}"url": '
f'"https://github.com/LinwoodDev/Butterfly/'
f'releases/download/{release_tag}/{filename}",'
)

for checksum_index in range(
index + 1,
min(index + 6, len(lines)),
):
if '"sha256":' not in lines[checksum_index]:
continue

lines[checksum_index] = re.sub(
r'"sha256":\s*"[^"]+"',
f'"sha256": "{checksum}"',
lines[checksum_index],
)
updated.add(filename)
break

missing = set(files) - updated
if missing:
raise RuntimeError(
f"Could not update manifest entries: {sorted(missing)}"
)

manifest.write_text(
"\n".join(lines) + "\n",
encoding="utf-8",
)
PY

- name: Commit and push update branch
id: push
working-directory: flathub
run: |
VERSION="${RELEASE_TAG#v}"
BRANCH="automation/butterfly-$VERSION"

echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"

if git diff --quiet -- "$FLATHUB_MANIFEST"; then
echo "Manifest already contains this release"
echo "changed=false" >> "$GITHUB_OUTPUT"
exit 0
fi

git config user.name "Linwood CI"
git config user.email "ci@linwood.dev"

git checkout -B "$BRANCH"
git add "$FLATHUB_MANIFEST"
git commit -m "Update Butterfly to $VERSION"
git push --force origin "HEAD:refs/heads/$BRANCH"

echo "changed=true" >> "$GITHUB_OUTPUT"

- name: Create Flathub beta pull request
if: steps.push.outputs.changed == 'true'
env:
GH_TOKEN: ${{ secrets.CI_PAT }}
BRANCH: ${{ steps.push.outputs.branch }}
run: |
EXISTING_PR="$(
gh pr list \
--repo "$FLATHUB_REPOSITORY" \
--base beta \
--head "$BRANCH" \
--state open \
--json number \
--jq '.[0].number // empty'
)"

if [[ -n "$EXISTING_PR" ]]; then
echo "Pull request #$EXISTING_PR already exists"
exit 0
fi

VERSION="${RELEASE_TAG#v}"

cat > /tmp/flathub-pr.md <<EOF
Automated update for Butterfly $VERSION.

Release:
$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/$RELEASE_TAG

The download URLs and SHA256 checksums for the x86_64 and arm64
Linux archives were generated from the published release assets.
EOF

gh pr create \
--repo "$FLATHUB_REPOSITORY" \
--base beta \
--head "$BRANCH" \
--title "Update Butterfly to $VERSION" \
--body-file /tmp/flathub-pr.md
2 changes: 1 addition & 1 deletion .github/workflows/calibreapp-image-actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Compress Images
uses: calibreapp/image-actions@main
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/compress-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Compress Images
id: calibre
uses: calibreapp/image-actions@main
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
working-directory: ${{ matrix.projects }}
steps:
- name: ⬆️ Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- uses: subosito/flutter-action@v2.23.0
with:
flutter-version-file: app/pubspec.yaml
Expand Down
Loading
Loading