Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
28a712a
v0.4 updates
FacioErgoSum Sep 13, 2026
22adfb1
v0.4 WIP backup: tinyparts layers, project start screen, shared Studi…
FacioErgoSum Sep 14, 2026
da00e03
Bump tinyService packages to the Arduino-parity releases
FacioErgoSum Sep 14, 2026
44da77c
Remove leftover files and unused dependencies
FacioErgoSum Sep 14, 2026
e5be314
Normalize line endings to LF and apply Prettier
FacioErgoSum Sep 14, 2026
43cf9fe
Clear lint errors, remove debug logging, align build scripts
FacioErgoSum Sep 14, 2026
1b44673
Sandbox sketches, scope file access, sanitize part art, tighten the CSP
FacioErgoSum Sep 14, 2026
acf2f4d
Keep the Studio AI chat, quiet backend retries, theme diagrams, label…
FacioErgoSum Sep 14, 2026
fd7c804
Ship the core pack's Fritzing attribution with the app
FacioErgoSum Sep 14, 2026
eb410e6
Give the installer its own identity, ship only the app, add About
FacioErgoSum Sep 14, 2026
f3c6a5e
Retire the legacy theme tokens and remaining small leftovers
FacioErgoSum Sep 14, 2026
fb6078f
Remember each circuit view's camera; keep pins clickable when zoomed out
FacioErgoSum Sep 14, 2026
ef81025
Keep every saved setting's key in one list; drop the window globals
FacioErgoSum Sep 14, 2026
b8ca2d1
Split EditorPanel into one file per view
FacioErgoSum Sep 14, 2026
8edca57
Make the file actions plain functions; drop the unused undo framework
FacioErgoSum Sep 14, 2026
fa6f419
Rewrite the README and backend guides, add a changelog and CI
FacioErgoSum Sep 14, 2026
a0957ef
Add the release plan to 0.4.0 and beta, and the audit it came from
FacioErgoSum Sep 14, 2026
01b0665
Remove the Blockly blocks editor
FacioErgoSum Sep 14, 2026
84ffbf5
Apply the npm audit fixes that stay within semver ranges
FacioErgoSum Sep 14, 2026
d865991
Ask before creating circuit.json or visual.js
FacioErgoSum Sep 14, 2026
2fa7c16
Restart tinyService once after a crash, then offer Restart
FacioErgoSum Sep 14, 2026
09b39d3
Let the user pick the Studio AI model
FacioErgoSum Sep 14, 2026
5eaf597
Sync the new tinyBoards art from tinyparts
FacioErgoSum Sep 14, 2026
3585229
Label the circuit simulator Experimental
FacioErgoSum Sep 14, 2026
42f56af
Nudge pins in the parts editor through the art, with undo
FacioErgoSum Sep 14, 2026
a9756ac
One place for project actions, and a keyboard shortcuts dialog
FacioErgoSum Sep 14, 2026
eb600ee
Report errors one way: toast, warn, or a commented catch
FacioErgoSum Sep 14, 2026
29f9888
Rewrite comments that narrate history
FacioErgoSum Sep 14, 2026
070613c
Move example tagging to the examples repo
FacioErgoSum Sep 14, 2026
1bb32aa
Test the critical paths: folder access, link rules, file actions, theme
FacioErgoSum Sep 14, 2026
b9717e1
Record progress and the BUG-9 finding in the release plan
FacioErgoSum Sep 14, 2026
4ae2dea
Move to tinyService 1.2.0: loopback only, origins enforced
FacioErgoSum Sep 14, 2026
7b139ad
GitHub sign-in in the browser, and the move to studio.tinycore.cc
FacioErgoSum Sep 14, 2026
a6e5b64
Symbol mode in the parts editor
FacioErgoSum Sep 14, 2026
38da35a
Record steps 6 and 7d and the tinyService status in the release plan
FacioErgoSum Sep 14, 2026
9f0bbac
Install tinyService 1.2.0 from a local tarball until it's on npm
FacioErgoSum Sep 15, 2026
bf1f36b
Finish browser GitHub sign-in on the dev server
FacioErgoSum Sep 15, 2026
2be6390
Show the GitHub account right after browser sign-in
FacioErgoSum Sep 15, 2026
f327139
Push as one commit, remind about unpushed changes, and link git clones
FacioErgoSum Sep 15, 2026
ce40ab0
Plan full git in project folders for the beta
FacioErgoSum Sep 15, 2026
17032c8
Serve the tinystudio.cc landing page from tinyDocs
FacioErgoSum Sep 15, 2026
bf3b592
Install tinyService 1.2.0 from npm
FacioErgoSum Sep 18, 2026
bbe3be8
Lay out the parts bin like Fritzing's
FacioErgoSum Sep 19, 2026
0b8c58e
Name the tinyBoards section after the pack, and keep sections on save
FacioErgoSum Sep 19, 2026
b3cde0d
Use the new tinyStudio logo for the app icons and the browser tab
FacioErgoSum Sep 19, 2026
3520328
Replace em dashes, one empty state for every panel, and circuit view …
FacioErgoSum Sep 19, 2026
21424ca
Build installers for Windows, macOS and Linux on GitHub
FacioErgoSum Sep 19, 2026
8033deb
Sync tinyparts: new tinyGlow and tinySniff art, pins on the family grid
FacioErgoSum Sep 19, 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
  •  
  •  
  •  
17 changes: 16 additions & 1 deletion .claude/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,22 @@
"name": "web",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev:web"],
"port": 5173
"port": 5173,
"autoPort": true
},
{
"name": "web-preview",
"runtimeExecutable": "npx",
"runtimeArgs": [
"vite",
"preview",
"--config",
"web.vite.config.mts",
"--port",
"4173",
"--strictPort"
],
"port": 4173
}
]
}
21 changes: 21 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Text files use LF everywhere; Windows checkouts included.
* text=auto eol=lf

# Binary assets
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.icns binary
*.cur binary
*.ttf binary
*.woff binary
*.woff2 binary
*.mp3 binary
*.ogg binary
*.wav binary
*.wasm binary
*.exe binary
*.zip binary
*.fzpz binary
38 changes: 38 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: CI

# Typecheck, lint, test and build the web bundle on every push to main or a
# version branch, and on pull requests into main. Desktop installers are built
# by release.yml (see docs/releasing.md), not here.

on:
push:
branches: [main, 'v*-dev']
pull_request:
branches: [main]

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

# Install scripts download Electron and arduino-cli and rebuild app deps
# for Electron. None of the checks below need them.
- run: npm ci --ignore-scripts

- run: npm run typecheck
- run: npm run lint
- run: npm test
- run: npm run build:web
151 changes: 151 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
name: Release

# Builds the desktop installers on Windows, macOS and Linux.
#
# - Pushing a tag like v0.4.0 builds all three and creates a DRAFT GitHub
# release with the installers attached. Check it, then click Publish.
# - Running it by hand (Actions → Release → Run workflow) builds the installers
# and keeps them as workflow artifacts, without making a release: a dry run.
#
# The installers are unsigned (macOS: ad-hoc signed), so Windows SmartScreen and
# macOS Gatekeeper warn on first launch. The release notes say how to get past
# that. See docs/releasing.md.

on:
push:
tags: ['v*']
workflow_dispatch:

permissions:
contents: read

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

jobs:
build:
name: Build (${{ matrix.name }})
strategy:
fail-fast: false
matrix:
include:
- name: Windows
os: windows-latest
target: win
vendor: windows-x64
files: dist/*.exe
- name: macOS
os: macos-latest
target: mac
vendor: macos-arm64 macos-x64
files: dist/*.dmg
- name: Linux
os: ubuntu-latest
target: linux
vendor: linux-x64
files: |
dist/*.AppImage
dist/*.deb
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- name: Check the tag matches package.json
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
version=$(node -p "require('./package.json').version")
if [ "v$version" != "$GITHUB_REF_NAME" ]; then
echo "::error::Tag $GITHUB_REF_NAME doesn't match package.json version $version"
exit 1
fi

- run: npm ci

# Only this platform's binaries (npm run build's prebuild hook would fetch
# every platform, which can't unpack the Windows .zip on Linux).
- name: Fetch arduino-cli and the language server
shell: bash
run: |
node scripts/fetch-arduino-cli.mjs ${{ matrix.vendor }}
node scripts/fetch-language-server.mjs ${{ matrix.vendor }}

- run: npm run typecheck
- run: npx electron-vite build

- name: Package
run: npx electron-builder --${{ matrix.target }} --publish never

- uses: actions/upload-artifact@v4
with:
name: tinystudio-${{ matrix.target }}
path: ${{ matrix.files }}
if-no-files-found: error

release:
name: Draft the GitHub release
needs: build
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4

- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true

- name: Checksums
working-directory: dist
run: sha256sum * > SHA256SUMS.txt && cat SHA256SUMS.txt

- name: Release notes
run: |
version="${GITHUB_REF_NAME#v}"
{
echo "## Download"
echo
echo "| System | File |"
echo "| --- | --- |"
row() { for f in dist/$2; do if [ -e "$f" ]; then echo "| $1 | \`$(basename "$f")\` |"; fi; done; }
row "Windows 10 and 11 (64-bit)" "*.exe"
row "macOS, Apple Silicon (M1 and later)" "*arm64.dmg"
row "macOS, Intel" "*x64.dmg"
row "Linux (64-bit), any distribution" "*.AppImage"
row "Debian, Ubuntu" "*.deb"
echo
echo "The installers aren't signed yet, so your system warns the first time:"
echo
echo "- **Windows:** on \"Windows protected your PC\", click **More info**, then **Run anyway**."
echo "- **macOS:** open the .dmg and drag tinyStudio to Applications. The first time you open it,"
echo " macOS says it can't check it. Open **System Settings → Privacy & Security**, scroll down"
echo " and click **Open Anyway**."
echo "- **Linux AppImage:** make it executable (\`chmod +x tinystudio-*.AppImage\`), then run it."
echo
echo "Board support (ESP32, tinyCore, AVR) downloads on your first compile."
echo
# this version's section of the changelog, without its heading
awk -v v="$version" '
$0 ~ "^## " v "( |$)" { on = 1; next }
on && /^## / { exit }
on { print }
' CHANGELOG.md
} > notes.md
cat notes.md

- name: Create the draft release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "$GITHUB_REF_NAME" dist/* \
--draft \
--title "tinyStudio ${GITHUB_REF_NAME#v}" \
--notes-file notes.md
15 changes: 11 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,18 @@ out
*.log*
.npmrc

# Generated web exports in the bundled demo project
demo/**/index.html
# Local secrets, such as the dev server's GITHUB_CLIENT_SECRET (docs/github-auth.md)
.env.local
.env.*.local

# arduino-cli binaries fetched by scripts/fetch-arduino-cli.mjs
vendor/

# Per-run diagnostic report written by scripts/fritzing-import.mjs
src/renderer/src/assets/parts/_report.json
# Staging output of scripts/fritzing-import.mjs (explode it into tinyparts)
tmp/

# Temp files left by FUSE-mounted sandboxes
.fuse_hidden*

# TypeScript incremental build caches
*.tsbuildinfo
5 changes: 5 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@ pnpm-lock.yaml
LICENSE.md
tsconfig.json
tsconfig.*.json
dist-web
vendor
package-lock.json
# generated by npm run parts:sync; its file hashes must match tinyparts on GitHub
src/renderer/src/assets/tinyparts
22 changes: 1 addition & 21 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,5 @@
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#93e6fc",
"activityBar.background": "#93e6fc",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#fa45d4",
"activityBarBadge.foreground": "#15202b",
"commandCenter.border": "#15202b99",
"sash.hoverBorder": "#93e6fc",
"statusBar.background": "#61dafb",
"statusBar.foreground": "#15202b",
"statusBarItem.hoverBackground": "#2fcefa",
"statusBarItem.remoteBackground": "#61dafb",
"statusBarItem.remoteForeground": "#15202b",
"titleBar.activeBackground": "#61dafb",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveBackground": "#61dafb99",
"titleBar.inactiveForeground": "#15202b99"
},
"peacock.color": "#61dafb"
}
}
Loading
Loading