Changelog
What's new
Everything we've shipped to RunPy since launch, new features, improvements and fixes, in the order they went live.
Password reset flow: proper verification link and a manual fallback
- Password reset links now land on a proper reset page and let you set a new password. Previously the link was 404ing back to the homepage, so nobody could actually reset.
- The Forgot password page now collects the teacher's full name, email and school and sends them straight to us so we can trigger a manual reset. Automated reset emails had been unreliable and this makes recoveries fast and human.
Exam-style tasks: hidden mark scheme, and a wider free taster
- The mark scheme on exam-style tasks is now hidden until you press Mark for the first time, then persists on every later view of that task. Encourages an honest first attempt without punishing you on revisits.
- The free taster now unlocks the first two exam scenarios instead of one, so students trying RunPy before their teacher upgrades can get a proper feel for the exam-style workflow.
Pricing card polish, lessons catalogue reorder, and marketing preferences
- The student pricing card drops the header price line and instead shows two callouts under the feature list: the existing green lifetime unlock note, plus a new note that all lessons and exam questions unlock free when the student joins their teacher's class with the join code.
- The Additional teacher account callout has moved off the pricing page as a standalone card and into a bordered footer inside the Paid Teacher card, right next to the plan it modifies.
- The Lessons catalogue now pins Exam Style Questions above Unit 1 (rendered without a "Unit N." prefix), so students see exam practice first. The remaining units still number 1..N in their original order.
- The Marketing emails section on the Account page is now a collapsible panel with a chevron toggle, an inline "Opted in / Opted out" status, and a two-box Opt in / Opt out pair where Opt out is smaller and muted so the primary choice is obvious.
Exam tasks now sit in a side-by-side layout with an always-visible mark scheme
- Exam-style task cards now split into two columns on medium+ screens: instructions, editor and Run/Stop/Mark on the left, terminal and a sticky mark scheme on the right. Exam-flavoured lessons render at up to 1500px so the layout has room; sidebar and non-exam layouts are unchanged.
- The mark scheme is rendered from first load in a neutral state (grey dot and marks-available pill per criterion) and flips to +N / 0/N after you press Mark, so students can see the shape of what's being marked before they submit.
- A Stop button now appears on exam tasks while a run is in flight, and the embedded terminal uses a compact height so the two columns line up cleanly.
Class Overview: collapsible lesson progress
- The Lesson progress section on the teacher class Overview tab is now a click-to-toggle header (chevron plus a total "X / Y lessons complete" summary), collapsed by default. Matches the same collapse pattern used on the Account page.
Pricing refreshed: new tier prices and an additional-teacher add-on
- Paid Teacher is now £19 / month or £185 / year. Teachers and students sit on one row on the pricing page so the two audiences are easier to compare at a glance.
- New Additional teacher account add-on card at £8 / month or £85 / year, for schools that want to bring extra teachers onto the paid tier without paying full price per seat.
- The Paid Teacher CTA now points at
/account/upgrade, which is the upgrade-request form (see 6 August) rather than a card checkout.
Class Overview tab, invoice-request billing, and dashboard cleanup
- The teacher class hub gains a new Overview tab that becomes the class root, so opening a class lands on activity, engagement and lesson progress instead of the raw file workspace. Files moves to
/teacher/[classId]/files, and deep-links from the overview open a specific student's file with the workspace pre-selected. - Teachers can no longer pay by card or manage a subscription from inside the app. Upgrading to Paid Teacher is now a request form (name, email, school, monthly/yearly, seats), so we can send the invoice manually and flip the plan the moment it's paid. The 48-hour free trial and the student lifetime purchase are unchanged.
- The upgrade request form now loads fresh on every revisit and allows duplicate submissions. Previously a teacher who'd already submitted was stuck seeing the "thanks" panel forever.
- The Folders & projects and Files section headings have been dropped from the file panel, the panel already visually separates folders from loose files and the labels only added noise. Drop-target behaviour is unchanged.
- The Teacher feedback card on the student dashboard is now hidden for solo students who aren't in any class. Solo students can never receive teacher feedback, so the empty placeholder just added clutter.
- The teacher class hub gains a new Overview tab that becomes the class root, so opening a class lands on activity, engagement and lesson progress instead of the raw file workspace. Files moves to
48-hour free trial, locked lessons for free teachers, and Pay by invoice
- New Start free trial card on the Account > Plan & billing page. Any teacher can flip themselves to paid for 48 hours, once per account, with no card needed. Classes created during the trial are marked as trial classes and are removed when the trial expires; the teacher reverts to free. Starting a real subscription mid-trial clears the trial marker and makes trial classes permanent.
- Free (unpaid) teachers now see the Lessons tab and the full catalogue just like students: the taster set (Unit 1 and the first two exam scenarios) is open, everything else shows a padlock overlay linking to the upgrade page. Same one gating rule now powers the catalogue, the lesson pages and the attempt API.
- The Upgrade page now leads with a prominent Pay by invoice button above the card checkout flow, so schools that need an invoice can get straight into the request form without hunting for it.
Lessons platform expansion: exam questions, markbook, class hub, and student lifetime purchase
- New Exam Style Questions unit: 21 scenario pages covering 57 coding questions and 23 multiple-choice questions, marked with per-criterion partial credit. Each task has a Mark button, a mark scheme rows list, and first / latest / attempt counts persisted, with a first-mark confirmation popup so students know a score is being recorded.
- Teacher class pages are now a class hub with tabs (Files, Markbook, Lessons, Manage) under a shared layout. The old standalone lesson-progress route has been retired.
- Markbook has been rebuilt from scratch: sidebar navigation, a heatmap overview, unit and scenario drill-downs, per-student reports, and task popups that show the student's code inline.
- Per-class lesson unlocking lands as a checkbox tree on the Manage tab, so teachers can hand out one unit at a time. The Manage page has been simplified around it.
- Student dashboard redesigned into three cards: Recently Edited, Feedback and Progress. The Progress card shows about five units at a glance and scrolls for the rest.
- The student files area is now type-agnostic: one unified tree with mixed folders, HTML projects marked with a kind flag, a typed New File picker, and live search across everything. The class content library shows up in the student IDE as a collapsed section.
- Unlock notifications now appear in the student bell, so when a teacher opens a new unit for the class the student sees it straight away. Lessons are open to every signed-in student, with Unit 1 and the first exam scenario as the free taster.
- Students can now buy lifetime access as a one-off card payment. Access unlocks the moment the payment clears and the account is live on the very next page load.
- Schools can now pay by invoice: the teacher submits finance-office details and we email an invoice payable by bank transfer or card. Paid access unlocks only once the invoice is paid, and unpaid renewals ride the existing past-due downgrade path. Duplicate requests are guarded with a pending panel on the upgrade page and an amber banner on the billing pane.
Lessons: a structured Python course with auto-graded tasks and teacher progress tracking
- A brand-new Lessons section lives at /lessons, a structured Python course broken into units and short lessons. Unit 1 (Output and Variables) is live with 7 lessons covering
print, quotation marks, line breaks, variables, concatenation with+, f-strings and a mixed recap. Twelve more units, from Input right through to Libraries and Modules, are stubbed and marked coming soon so students can see the shape of what's ahead. - Code tasks are auto-graded in the browser via Pyodide, so students get instant feedback with no server round-trip. Each task checks the program's stdout against an expected answer and, where it matters, also checks the code itself with a regex, so a student can't just
print("the answer"). Tasks that are about printing a literal string opt into anallow_hardcoded_outputflag so the anti-hardcode guard doesn't fire on lessons where hardcoding is the point. - Alongside code tasks, lessons can include multiple-choice questions with the same card chrome, the same green tick when correct, and the same per-attempt persistence, so recap lessons can mix short coding challenges with quick concept checks.
- Teachers get a new Lesson progress link on every class page. The summary view is a compact grid of colour-coded chips, one per student per unit, showing at a glance who's flown through Unit 1 and who's stuck on lesson 3. Click a unit to drop into a per-lesson detail view with vertical column headers so long lesson names still fit.
- Free Unit 1 is open to everyone, signed in or not, so a student can try a full unit before their teacher upgrades. Later paid units gate on being in a class with a paid teacher, with a lock overlay explaining what to do next.
- Lesson content ships with the app itself, so adding a unit is a code change rather than a data change. The only thing stored per student is their task attempts, keyed by unit, lesson and task, which is what powers the teacher progress view.
- A brand-new Lessons section lives at /lessons, a structured Python course broken into units and short lessons. Unit 1 (Output and Variables) is live with 7 lessons covering
HTML Projects: multi-file sites with images, CSS and a live preview
- Creating an HTML file is now creating a project. One click on + New Project sets up a folder, drops a starter
index.htmlinside, and opens the IDE on it. The student dashboard and the teacher Files page both swap the HTML + File button for the new project flow. - Inside a project the sidebar is locked to that project only, so other sites stay out of the way. It has three fixed sections, HTML, styles and images, each with its own + HTML, + CSS or + Image action. New files have their extension chip locked so a student can't accidentally save
pageinstead ofpage.html. - CSS is now a first-class language in RunPy with proper CodeMirror syntax highlighting and its own file icon. Add a
<link rel="stylesheet" href="styles/main.css">in your HTML and the preview applies it instantly. Editing the CSS file live-updates the preview too, even when the HTML editor isn't open. - Images can be added two ways. Paste a public image URL and give it a local name like
cat.jpg, no storage used, or Upload a file straight from the device, which gets resized to a max width of 1600px and re-encoded as JPEG quality 80 so a 5 MB phone photo turns into a 200 KB upload. Each project is capped at 10 images to keep things lean. - Intra-project
<a href="about.html">links work in the live preview and in the ↗ Open in new tab view: the new tab embeds every project page and routes clicks between them, so a student can share a working multi-page site without us hosting it. - Autosave runs continuously and the HTML/CSS preview re-renders live as you type, with no Run button needed. Hit Run any time to force a refresh.
- Creating an HTML file is now creating a project. One click on + New Project sets up a folder, drops a starter
Text files in the Python IDE: open, read, write and append
- A new Text files section now sits alongside Python Files and HTML Files on both the student dashboard and the teacher Files page. Every text file is global to the account, so any Python file you own can open it by name regardless of which folder the script lives in.
- Python code can now use
open('foo.txt')with the standard'r','w','a'and'r+'/'w+'modes, plus context managers,readline/readlines/writelines, iteration over lines, and a 256 KB per-file cap. Works identically in Simple mode (Skulpt) and Full mode (Pyodide). Writes round-trip back to your account so the next run sees the updated contents. - Opening a
.txtfile in the IDE shows a clean full-width editor with no Run, Stop or terminal pane. The toolbar gains a Refresh button so you can pull in changes a Python script just wrote, and a Save button (also added next to Stop on Python/HTML files) that complements autosave with an immediate flush. - The IDE sidebar now lists text files in a dedicated section below your Python folders. The active section title Python Files / HTML Files shows inline + File and + Folder shortcuts, and the Text files section has its own + New link, so creating a file or folder is one click from anywhere in the tree. Switching between a Python file and a text file keeps the same Python folders expanded.
- Teachers can use the feature for their own work and also see student text files in the class workspace under a new Text group in the sidebar (read-only when viewing the student).
Safeguarding dashboard for schools, free, opt-in and built around UK GDPR and KCSIE
- Schools can now set up a free safeguarding account at /safeguarding. A designated safeguarding lead signs up with their work email (personal providers are blocked), receives an 8-character join code, and shares it with teachers.
- Teachers join from a new Monitoring and safeguarding section on their account page. Once joined, a persistent panel explains what is recorded; on the student side, a top-of-page notice flashes once per browser session telling the pupil their school is reviewing activity in their account.
- Every comment a joined teacher creates, edits or deletes on a pupil's file is logged with its body preserved, and every direct code edit to a pupil's file is logged with the lines added, the lines removed, and one full pre-edit file snapshot per editing session. Nothing is logged for teachers who haven't joined a school.
- The leader dashboard lists every teacher in the school with comment and edit counts, last activity and a one-click view into a per-pupil timeline. Each timeline row shows the pupil's name, the file name and the change, with search across comments, code, file names and pupil names. Comment and edit rows expand to show the diff in green and red on click.
- Removing a teacher archives their record for 30 days, during which their logs stay reviewable, then a daily cron job permanently deletes them. This stops a bad-actor leader from using "remove" as a way to wipe evidence the moment a concern is raised.
- Privacy Policy and Terms of Service have been rewritten to cover the new flow in detail, including the controller/processor split (the school is the controller, RunPy is the processor) and the fact that comment events, edit events, pupil files and accounts are all hosted in the UK (London region) with AES-256 at rest, TLS 1.2+ in transit and per-user access controls on every table.
- A new "Safeguarding Account" page in the footer summarises the whole programme with screenshots in the same scroll-driven laptop layout the homepage uses.
Distribute picker now lets you choose students, recreates folders and numbers duplicates
- Every Distribute dialog, from the Class Content Library, from your personal Files, the Debugging Tasks picker and the Blank file/folder picker, now has a Send to panel listing every student in the class with a checkbox each, plus a Select all toggle. The default state is "everyone selected" so the one-click flow is preserved, but you can now deselect anyone you don't want a file to land for.
- When you distribute a file from a folder in your Class Content Library or personal Files, that folder name is now recreated for each student. If the student already has a folder of that name, the file goes inside it; otherwise the folder is created first. Language is respected, a Python "Lesson 3" folder and an HTML "Lesson 3" folder don't collide.
- Filename collisions inside the destination folder now add a number instead of the old "(Teacher)" suffix.
lesson1.pybecomeslesson1 2.pyon the second send,lesson1 3.pyon the third, and so on. The counter inserts before the file extension so names stay tidy. - Files and folders are now sorted strictly A-Z everywhere they appear: the student dashboard's My Files, the teacher Files page, the IDE sidebar, the teacher class workspace, the Class Content Library and every Distribute picker. Sorting is case-insensitive so "Apple" and "apple" group together regardless of database collation.
File-tree polish across the IDE, teacher class view and debugging tasks
- The teacher Debugging task page now has a left file panel listing every task in the library, grouped by topic and styled to match the IDE, same glass panel, same drag handle in the gap, same hide/show icon. Jump straight from one debugging task to the next without going back to the topic list.
- On the teacher class view, the Files column has been restyled to match the IDE's file panel: rounded rows with the file icon next to the filename, folders open with a chevron and reveal their children in an indented, left-bordered list, and the active file gets the same ocean-tinted highlight.
- The 'last edited' relative time has moved off the file rows in the IDE sidebar, teacher class workspace and shared Files panel. On the teacher class workspace it now sits next to the Run button as a tidy 'Last edited X' indicator (with the absolute date in the tooltip), so the file list itself stays clean. The relative time still appears on the right of each row on the My Files page.
- The file tree spacing used by the Debugging page has been adopted everywhere, tighter row padding (px-2 py-1.5 / pl-3 pr-2 py-1), no bullet-style space between sibling rows, and a single thin left border for nested folders instead of an indented inset.
- The Files column on the teacher class view is now about 15% wider (219 px instead of 190 px) so longer filenames don't have to truncate.
Unified Distribute button, Class Content Library rename and a resizable IDE sidebar
- All four separate distribute buttons on the teacher class page have been merged into a single Distribute action. Opening it shows three source cards, From Class Content Library, From Files and From Debugging Tasks, plus a Blank file or folder option underneath. Each picker now uses the same tree UX as Debugging Tasks: select a whole folder, or expand it and pick individual files.
- "Snippets" / "Teachers Code" has been renamed everywhere a teacher or student sees it to Class Content Library, the section header, the student-side panel, the new-file dialogs, the Copy-to menu on personal files and folders, the Distribute source card and the help guide. The underlying database tables and types are unchanged.
- The IDE file panel is now a distinct glass panel sitting next to the editor (matching the teacher class view), with a visible drag handle in the gap so you can resize it anywhere between 200 and 800 px. The width is remembered between sessions.
- The sidebar hide/show button is now a small icon button to the left of "+ New Python file", and a matching icon button appears in the IDE top bar when the sidebar is hidden, so it can be brought back without searching.
- Opening a file from the sidebar no longer scrolls the file list back to the top, the scroll position is preserved across navigations.
- The example runs in debugging task instructions are now collapsed by default and expanded with a chevron, and the arrow prompts (>>>) only appear on the first line of each example so the rest reads as plain output.
Infinite-loop detection and a debugging task library overhaul
- The Check answer button on debugging tasks now detects infinite loops. If your code is still running after four seconds it's interrupted at the Python level (via a SharedArrayBuffer interrupt buffer wired into the Pyodide worker) and reported as a Logic error with a hint to look for a loop that never ends, previously it would hang the page.
- Sixteen debugging tasks across Variables, If statements, Logical operators, Nested selection, While loops, For loops, Procedures, String handling and Random/libraries have been rewritten with new bugs and tighter wording. Two if-statement tasks have been renamed (Comparing with == not = → Password check, Indenting too much → Name check) and several lessons now layer multiple bug types (type, name, syntax and logic) in one file.
- Topic folder names in the debugging library have been cleaned up, "Logical operators (AND / OR / NOT)", "Nested selection (elif)", "Arrays (lists)", "Functions (return a value)", "Procedures (subroutines)" and "Random and libraries (imports)" all dropped the parenthetical.
- The random.randint task's example output no longer shows the underlying regex, it now shows three sample runs (Random number: 7 / 1 / 10) so students can see what a correct answer actually looks like.
Collapsible columns and a ready-to-go workspace on the teacher class view
- The teacher class view now loads with a blank editor and terminal already in place, instead of an empty hint. Clicking a student file swaps in the real code and output.
- Both the Students and Files columns now have a chevron in their header to collapse them. When a column collapses, the editor and terminal stretch to fill the new space; a thin rail with a chevron and a vertical label remains so you can expand again with one click.
- The Files column header now reads as the selected student's first name followed by "files" (e.g. "Kasim files") so it's clearer whose files you're looking at.
- Removed the per-student Remove button that appeared next to each name in the class view. The only place to remove a student is now the Manage Class page, which prevents accidental deletions while you're working through the class.
- A small reminder pill now slides down from the top of the screen when you open a class, "Zoom out in your browser to get a better view", and disappears after a few seconds, so the three-column layout has room to breathe.
Greener Run button, new Stop button, and every run starts fresh
- The Run button is now green across every IDE, the logged-in editor, the homepage demo, the snippet viewer, the shared-file viewer and the teacher class workspace.
- A red Stop button sits next to Run. It's always visible while you're in the full Python terminal, greyed out when nothing is running, and active the moment your code starts. Pressing it kills the running program, tears down the Python interpreter and brings the terminal back ready for the next run, useful when you've written an infinite loop or want to abandon a long-running script.
- Each press of Run now wipes the terminal and resets the Python REPL state before the code executes, so output and stale variables from the previous run no longer bleed into the new one. The Python and Pyodide version banner stays pinned at the top.
- The separate Clear and Reset buttons in the terminal toolbar have been retired, Run now does both jobs, and Stop handles a full interpreter teardown when you need one.
Homepage redesign with a scrolling laptop tour of every feature
- The homepage is now one continuous product tour. A MacBook on the right stays pinned to the centre of the screen as you scroll; the screen content swaps to match whichever feature you're reading on the left.
- The first stop is the live IDE, a working editor and Python terminal you can type into and run, right inside the laptop, before you've signed up.
- Eight feature stops follow: file organisation, the full IDE, class view, running student code, marking and comments, distributing folders and files, dark mode, student notifications, and teacher snippets.
- Dark mode now demos itself: when you scroll onto the Dark mode section, the whole page fades to dark, then fades back to light as you scroll past.
- The standalone Features page has been retired, everything lives on the homepage now. Help guides moved to a dedicated page in the footer.
Live homepage demo and shareable file links
- The homepage now embeds a real, working editor and Python terminal in the hero, anyone landing on RunPy can try the IDE before signing up. A sample program auto-runs as soon as Pyodide is ready.
- Logged-in students and teachers get a new Share button on every file. Generate a public link that opens a viewer where anyone can read your code and run it. Stop sharing whenever you like, the previous link stops working.
- Copy-as-image now lives inside the same Share menu, with a short description of each option so it's clear what each one does.
- In the IDE toolbar, the Run button has moved next to the filename so it's easier to find while you're typing.
- Every public page now shares one navigation bar, the Features, About and Changelog pages no longer drift behind the rest of the site when the menu changes.
Notifications, clearer IDE sidebar, and a tidier mobile teacher view
- New notification bell in the navbar for students. A red badge appears when a teacher checks one of your files or leaves a comment you haven't seen yet. Click an entry to jump straight to the file, opening it clears the notification automatically.
- IDE file sidebar is more obvious: the toggle is now a labelled "Files" pill (highlighted when the panel is open), and there's a × close button inside the sidebar to hide it again.
- When a teacher is editing a file, the "Not yet checked" badge no longer shows, it only applies to student-owned files.
- Teachers viewing student code on mobile now get a hamburger menu for Refresh / Mark as checked / Add comment, while Run stays as its own button.
- Mobile teacher view defaults to code-only; pressing Run swaps to the output pane with a small "Back to code" button to return to the editor.
RunPy on a phone
- The whole site now works on a phone. Public pages, dashboard, account, teacher class workspace, and the IDE all reflow for narrow screens. Desktop is unchanged.
- Navbars collapse to a hamburger menu under 768px.
- In the IDE, the file panel slides in as a drawer and the editor / output stack vertically with a Code | Output tab toggle.
- In the teacher class view, Students / Files / Code become tabs that auto-advance when you pick a student or file.
- Pressing Run in the IDE on mobile now jumps straight to the Output pane so you see results without an extra tap.
- Long tables (Manage class students) scroll inside their card instead of pushing the page wide.
Delete from the IDE sidebar, plus a brand favicon
- Hover any file or folder in the IDE's left sidebar to reveal a trash button. Deleting a non-empty folder confirms first and removes the files inside.
- Browser tabs now show the RunPy logo as a favicon instead of the default blank icon.
Smarter code editor and theme that follows you
- Tab now indents in the code editor. Press Tab in leading whitespace or with a selection to bump the indent up; press it mid-line and it just inserts four spaces at the caret. Shift+Tab de-indents.
- Brackets and quotes auto-close. Typing ( [ { ' " wraps the cursor; typing the matching closer right after skips over it; Backspace deletes the pair.
- Enter now keeps Python indented properly, copies the previous line's indent, and adds an extra level when the line ends in a colon.
- Your light/dark mode choice now follows your account, not the device, log in anywhere and the right theme loads.
- Public pages always render light, regardless of preference.
Help guides on Account, plus a lighter dark mode
- New Help guides section on the Account page (left nav), collapsible step-by-step walkthroughs for creating files, running code, managing folders, joining a class, and the full teacher workflow (class setup, distributing folders/files, feedback, and snippets). Student/teacher specific guides only show for the right role.
- Dark mode lifted, page background, glass panels, nav, and form inputs are all a touch lighter, and the brand glow behind everything is more visible. Easier on the eyes without changing the overall look.
Distribute buttons moved up, plus dummy classes
- Distribute folder and Distribute file are now in the class header next to Manage class, so you don't have to dive into Manage class to push work out.
- New + Dummy Class button on the teacher home, spins up a class with 15 pre-named students for testing and demos. One per teacher; deleting the class also tears down those test accounts and their files.
- Creating a new file no longer jumps you into the IDE. The file list refreshes and you can click the file when you're ready to open it.
Instructions on files, and distribute a single file
- Teachers can attach instructions to a snippet or personal file. Students see them in a blue panel above the editor.
- Instructions follow the file when students Make a Copy, and when teachers distribute a file or folder.
- New Distribute file action on Manage class, push a new file, a snippet, or one of your personal files to every student.
- Folder and file pickers now show a proper tree, split into Python and HTML.
- Distributing a folder with files in it now asks you to confirm first.
Python terminal in snippets and class workspaces
- The full Python terminal now powers ▶ Run on snippets and inside the teacher's class workspace, not just the file IDE.
- Fixed: input() prompts now appear before the cursor, not after.
input() prompts inside the terminal
- input() now prompts inside the terminal, no more browser pop-up. Works anywhere it works in CPython.
- Python now runs in a background worker, so the page stays responsive while your code is running or waiting on input.
Real Python terminal and easier file management
- The output panel is now a full Python terminal (CPython 3.12 in the browser). Run your file, then keep typing at the prompt with its variables and functions in scope. Install packages with micropip.
- Collapsible file panel in the IDE for more code space.
- Drag-and-drop files into folders on the dashboard and the teacher's personal files page.
- New Duplicate option in the 3-dot menu for files and folders.
- Fixed: teachers opening their own personal files now see the teacher navbar.
Free student file limit
- Free-plan students can keep up to 5 files. The dashboard shows your usage.
- Joining a class with a Paid teacher removes the cap.
Teacher comments and personal files
- Teachers can now edit a student's code directly from the IDE or the class page.
- Redesigned comments: an inline panel above the code instead of a modal, with a Show/Hide toggle for students and a New badge for unread comments.
- New Personal files area for teachers (My files in the navbar), private folders and files, separate from any class.
- Copy a personal file or folder into a class as snippets, straight from the 3-dot menu.
- Distribute now supports From personal files as a third source.
Distribute folders to your whole class
- New Distribute section on Manage class, push a folder into every student's tree in one click.
- Pick New folder (with optional starter files) or From snippet folder to clone an existing one.
- Name collisions get a “(Teacher)” suffix so student work is never overwritten.
- Students can Make a Copy of any snippet into their own editable files.
One-click student signup and live payments
- Students go straight into the dashboard after signup, no email verification step.
- Card payments are live. Subscribing to Paid Teacher unlocks the full feature set immediately.
Better signals for school content filters
- RunPy now identifies itself site-wide as a UK educational service so school filters and search engines classify it correctly.
- Changelog also available as an RSS feed at /changelog.rss.
Paid Teacher plan with self-serve checkout
- New Paid Teacher plan: £9.99 / month or £99.99 / year. Up to 15 classes and 35 students per class, plus marking and feedback.
- Card checkout is embedded inside RunPy, you never leave runpy.co.uk while paying.
- Manage your subscription from /account/manage: cancel, resume, or switch between monthly and yearly.
- Pricing page rewritten with what's included in each plan.
- Updated Terms of Service and Privacy Policy to cover billing.
Simplified to two plans
- Plans are now just Free Teacher and Paid Teacher. The School Licence product has been retired.
- Existing School Licence holders were migrated automatically.
Manage Class and a big polish pass
- New Manage Class page: rename, remove a student, reset a student's password, or delete the class.
- Refresh button on a student's file to pull their latest version without leaving the page.
- Files now show their last-edited time everywhere.
- New About and Schools pages, plus live Privacy Policy and Terms of Service.
- Tidied navigation and a shared footer across the site.
Folders and a fresh files panel
- Folders for organising Python and HTML files.
- Redesigned files panel with quicker folder navigation.
- Fresh Python and HTML file icons.
Sign-in polish
- Consistent navigation across the home, sign-up and login pages.
- Smoother account-creation flow.
- Improved input fields and light-mode contrast.
Accounts and team management
- Email verification on sign-up and account deletion from the account page.
- New Manage Team page for Heads of Department to invite teachers onto a shared licence.
RunPy launches
- Browser-based Python and HTML IDE built for UK secondary school classrooms.
- Teacher class dashboard for tracking pupils, files, and shared snippets.
- Free, paid and school-licence plans.
Got a request?
Something you'd like to see on RunPy? Spotted a bug? We'd love to hear from you.