diff --git a/README.md b/README.md
index d9c3982..1367d41 100644
--- a/README.md
+++ b/README.md
@@ -81,8 +81,14 @@ The current project is saved automatically in browser local storage. The
server, similar to
[webtigerpython.ethz.ch](https://webtigerpython.ethz.ch/)
-ZIP projects preserve relative paths, the project name, and the configured
-Python entry point. This local format is also the shape planned for OneDrive
+ZIP projects preserve relative paths, the project name, the configured
+Python entry point, and which files are read-only (`readOnly` in
+`glpython.json`).
+
+A **read-only file** (`readOnly: true` on the file, e.g. in a share link from
+a course, as the LiaScript macro builds for its libraries) is shown with a
+lock: it can be read, run and imported, but not edited, renamed or deleted -
+e.g. a parser that learners use as a black box. This local format is also the shape planned for OneDrive
folder synchronization.
## Microsoft sign-in
diff --git a/package-lock.json b/package-lock.json
index 4bc6764..1bc8cc7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"license": "MIT",
"dependencies": {
"@azure/msal-browser": "^5.22.0",
- "glpython-editor": "git+https://github.com/glpython-edu/glpython-editor.git#v0.1.18",
+ "glpython-editor": "git+https://github.com/glpython-edu/glpython-editor.git#v0.1.19",
"jszip": "^3.10.2",
"lucide-react": "^1.47.0",
"lz-string": "^1.5.0",
@@ -804,7 +804,7 @@
},
"node_modules/glpython-editor": {
"version": "0.1.0",
- "resolved": "git+ssh://git@github.com/glpython-edu/glpython-editor.git#07f11de780ceec5f180bb82ddd9061f86ffad13a",
+ "resolved": "git+ssh://git@github.com/glpython-edu/glpython-editor.git#5bd8a4fe8c333a907da6ae4675bc65ff318c61a4",
"license": "MIT",
"peerDependencies": {
"@monaco-editor/react": "^4.7.0",
diff --git a/package.json b/package.json
index b68930c..e81b576 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
},
"dependencies": {
"@azure/msal-browser": "^5.22.0",
- "glpython-editor": "git+https://github.com/glpython-edu/glpython-editor.git#v0.1.18",
+ "glpython-editor": "git+https://github.com/glpython-edu/glpython-editor.git#v0.1.19",
"jszip": "^3.10.2",
"lucide-react": "^1.47.0",
"lz-string": "^1.5.0",
diff --git a/src/App.tsx b/src/App.tsx
index fb3d4f2..2a34104 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,5 +1,5 @@
import { useEffect, useRef, useState, type KeyboardEvent as ReactKeyboardEvent } from 'react'
-import { BookOpen, CircleHelp, Download, EllipsisVertical, FileCode2, Folder, FolderOpen, Link2, Pencil, Plus, RotateCcw, Sparkles, Trash2, Upload, X } from 'lucide-react'
+import { BookOpen, CircleHelp, Download, EllipsisVertical, FileCode2, Folder, FolderOpen, Link2, Lock, Pencil, Plus, RotateCcw, Sparkles, Trash2, Upload, X } from 'lucide-react'
import { GlPythonWorkspace, addProjectFile, deleteProjectFile, initialProject, renameProjectFile, updateProjectFile } from 'glpython-editor'
import type { ProjectFileKind, WorkspaceCommand } from 'glpython-editor'
import 'glpython-editor/style.css'
@@ -241,8 +241,11 @@ function App() {