Як я створив браузерну Python IDE, що працює без інтернету: досвід вчителя інформатики
Вітаю! Мене звати Михайло. Я розробник програмного забезпечення з
Кілька років я також працюю в звичайній київській школі вчителем інформатики, тож маю досвід одразу у двох сферах. Найбільшу користь відчуваю тоді, коли можу застосовувати свої знання на перетині технологій та освіти і працювати над освітніми проєктами.
Чому я взагалі взявся за це
Можна було б сказати: «Ну не працює — значить, не працює». Але реальність така, що освіта й без того переживає складні часи. Пандемія COVID-19 і війна суттєво вплинули на навчальний процес, і постійно відкладати навчання «на потім» — не найкращий варіант.
Також мені не хотілося бути залежним від SaaS-сервісів із обмеженими безкоштовними тарифами, де правила гри можуть змінитися будь-якої миті. Я вже стикався з ситуацією, коли те, що працювало вчора, сьогодні перестає працювати — зокрема у випадку з Replit.
Мені був потрібен інструмент, який дає відчуття надійності та передбачуваності. Такий, що запускається завжди, не залежить критично від інтернету, дозволяє виконувати українську шкільну програму і водночас залишається доступним для кожного.
Контекст і проблема
Навчальна програма з інформатики передбачає роботу за комп’ютером, але зараз забезпечити це в повному обсязі майже неможливо. Тому доводиться шукати альтернативні рішення, які дозволяють виконувати програму та водночас забезпечують учням зручний інтерфейс для роботи в будь-яких умовах.
Більшість сучасних інструментів для програмування не розраховані на українські реалії. Вони орієнтовані на середовище зі стабільним інтернетом і електропостачанням.
Минулого року я використовував Replit у випадках, коли не було доступу до ПК. Це було досить зручно: достатньо браузера, нічого не потрібно встановлювати, можна працювати навіть зі смартфона.
Але цього року стало очевидно: без стабільного інтернету така модель не працює. До того ж Replit поступово відмовився від повноцінної підтримки Python і сфокусувався на AI-first підході до розробки.
Окремий виклик — навчальна програма з Python, яка включає роботу з графічними бібліотеками Tkinter і Turtle. Це досить специфічні інструменти, які працюють не у всіх середовищах.
Ще один важливий фактор — «зоопарк» пристроїв: смартфони, планшети, Chromebook, Windows, macOS, ноутбуки, стаціонарні ПК.
Я шукав інструмент, який був би максимально зручним у теперішніх умовах, безкоштовним і з низьким порогом входу — без реєстрації, SMS і зайвої реклами.
Ідеального варіанту не знайшов, лише компроміси, тому вирішив зробити власну реалізацію:
Що таке Pyroom
Pyroom — це браузерна Python IDE, яка працює без сервера та виконує код безпосередньо в браузері. За потреби її можна встановити як PWA, щоб отримати ще більш стабільний офлайн-досвід. Має українську та англійську мову інтерфейсу.




Інтерфейс Pyroom
Серед ключових можливостей — підтримка Tkinter і Turtle, підвантаження бібліотек, а також робота з файлами, наприклад із зображеннями. Pyroom однаково добре працює на смартфонах, Chromebook, планшетах і комп’ютерах — фактично на будь-якому пристрої з сучасним браузером.
Окрема важлива частина — можливість ділитися кодом. Це можна зробити як офлайн через QR-код, так і онлайн за допомогою коротких посилань. Також у системі передбачені режими вчителя та учня: можна створювати завдання, додавати текстовий опис і поширювати їх разом із кодом.
Головна ідея Pyroom — це підхід offline-first і максимально простий доступ. Користувачу достатньо відкрити додаток один раз, після чого він може працювати без інтернету з будь-якого пристрою.
Над проєктом я працюю з середини лютого 2026 року. Перша версія була повністю сфокусована на офлайн-роботі, але з часом стало зрозуміло, що без онлайн-функцій користуватися інструментом не завжди зручно. Тому поступово я почав додавати і онлайн-можливості, зберігаючи при цьому основну ідею офлайн-підходу.
Чому дизайн тут важливий
Можливо, це здається дрібницею. Але якщо учень відкриває інструмент, який виглядає так, ніби залишився десь у 2010 році, мотивація відразу падає.
Для мене було важливо, щоб діти відчували, що користуються сучасними інструментами, і отримували від цього задоволення. Це напряму впливає на залученість і бажання вчитися.
Саме тому я обрав Monaco Editor — той самий редактор, що використовується у Visual Studio Code. Додатково я реалізував темну тему та адаптивний інтерфейс, який зручно працює навіть на смартфонах.
Технічна частина
Python через WebAssembly
Pyroom використовує Python, скомпільований у WebAssembly (Pyodide), і це визначає його ключову архітектуру. Код виконується локально прямо в браузері, тому потреба в бекенді для основної роботи відсутня. Завдяки цьому можна працювати без сервера, а у випадку зникнення інтернету виконання програм не переривається і продовжується у браузері. Фактично будь-який пристрій із сучасним браузером підходить для роботи, що робить цей підхід принципово відмінним від класичних онлайн-IDE.
PWA та офлайн-кешування
Pyroom працює як Progressive Web App. Після першого відкриття всі необхідні ресурси завантажуються та кешуються, що дозволяє надалі повноцінно працювати офлайн без додаткових налаштувань.
Якщо потрібно використовувати додаткові бібліотеки, такі як NumPy, pandas чи matplotlib, вони також підтримуються, але завантажуються в напівавтоматичному режимі. Коли є інтернет, бібліотека підтягується автоматично під час виконання коду, а за потреби її можна попередньо закешувати, щоб використовувати пізніше вже без підключення до мережі.
Окрім цього, реалізована робота з файлами: користувач може підвантажувати файли безпосередньо у браузер і використовувати їх у своїх програмах.
Найскладніше — Tkinter у браузері
Tkinter — це бібліотека для створення desktop-інтерфейсів, і готових реалізацій для браузера я не знайшов.
Тому довелося піти іншим шляхом і реалізувати власний підхід. У Pyroom використовується віртуальний UI-шар, який перехоплює виклики Tkinter і інтерпретує їх, відмальовуючи відповідні компоненти вже в DOM. Фактично це власна реалізація Tkinter, адаптована для роботи в браузері.
Хостинг та бекенд
Проєкт розгорнутий на платформі Cloudflare, що дозволяє зберігати дуже низьку вартість підтримки. Основна логіка працює повністю на клієнті, тому серверна частина мінімальна і не використовується для базового функціоналу.
Бекенд підключається лише там, де це дійсно необхідно. Наприклад, для підписки на оновлення з можливістю залишити email, для надсилання повідомлень про баги чи запитів на нові функції безпосередньо з додатку або сайту, а також для онлайн-поширення коду через короткі посилання.
Досвід використання
Pyroom наразі перебуває на етапі активного тестування, тому окремі речі можуть працювати нестабільно або не зовсім так, як очікується.
Я сам активно використовую інструмент на уроках, і саме це дозволяє швидко помічати недоліки або розуміти, якого функціоналу не вистачає. Поступово я намагаюся це виправляти та покращувати, орієнтуючись на реальний досвід використання в класі.
З часом формується чіткіше розуміння того, які ще можливості варто додати, щоб інструмент був максимально зручним і корисним.
Якщо ви помітили проблему або маєте ідеї для покращення — буду дуже вдячний за зворотний зв’язок. У додатку є кнопка «Повідомити про баг», також можна зв’язатися зі мною напряму.
Зі статистики видно, що сервіс уже почали використовувати в різних країнах: зараз сайт має приблизно
Чи є аналоги?
Найближчим українським аналогом можна вважати ЄPython. Про цей проєкт навіть виходили окремі огляди в медіа, зокрема на ITC.
Водночас підхід до реалізації там суттєво відрізняється. ЄPython побудований на використанні транслятора Skulpt, який перетворює Python-код у JavaScript. Це означає, що використовується не повноцінний Python runtime, і в окремих випадках поведінка програм може відрізнятися від очікуваної. Крім того, можливості розширення такого підходу обмежені самим транслятором.
Також варто зазначити, що офлайн-режим у цьому рішенні відсутній, що є критичним обмеженням у контексті нестабільного інтернету.
У Pyroom використовується інший підхід — виконання Python через WebAssembly із повноцінним runtime. Це дозволяє забезпечити більш передбачувану поведінку програм і кращу сумісність із бібліотеками. Особисто для мене такий підхід виглядає більш передбачуваним і гнучким з точки зору подальшого розвитку.
Трохи про процес розробки
Коли я почав працювати над проєктом, агентивна розробка вже була досить поширеним явищем, хоча власного великого досвіду в цьому напрямку я ще не мав.
Я вирішив максимально використати можливості, які дає штучний інтелект, тому в процесі розробки значна частина коду була створена саме з його допомогою.
Першим кроком стало створення MVP — потрібно було перевірити, чи взагалі можлива така реалізація і чи буде все працювати як задумано. Цей етап вдалося пройти досить швидко.
Далі почався більш складний і водночас цікавий етап: переосмислення функціоналу та дизайну. Багато речей я переглянув і фактично переписав проєкт з нуля. Тут дуже допомогло те, що я працюю в школі й створюю інструмент, який у першу чергу потрібен мені самому — це значно спростило прийняття рішень.
Я активно використовував голосовий режим для обговорення ідей та варіантів реалізації. Це дозволяло швидше формулювати думки і знаходити оптимальні підходи.
З власного досвіду я зробив важливий висновок: якщо фіча добре продумана і чітко описана, її реалізація за допомогою інструментів агентивної розробки відбувається швидко і майже без потреби у виправленнях. Але якщо на етапі планування є невизначеність — час на доопрацювання зростає в рази.
Це мій перший проєкт, у якому я працював у такому більш високорівневому, «агентивному» підході, і цей досвід виявився для мене дуже позитивним.
Що далі
Насамперед планую додати режим відладки, покращити дизайн для мобільного режиму, розвинути бібліотеку завдань для вчителя та створити систему, у якій вчителі зможуть налаштовувати, планувати і зберігати завдання. Також мені цікаво додати AI-помічника, який допомагатиме зрозуміти, чому саме код не працює.
Мені дуже цікаво почути думку спільноти, тому буду радий конструктивній критиці, ідеям та порадам.
Якщо ви вчитель, спробуйте Pyroom у роботі та розкажіть про нього колегам. Якщо ви розробник, буду радий технічному фідбеку. А якщо знайдете баг або побачите слабке місце — обов’язково напишіть. Це поки що невеликий проєкт, але я вірю, що він може реально допомогти навчальному процесу в наших умовах.
55 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівкрутая штука!
сильно тяжелым получился бинарик с wasm?
если программа зависла, остановить можно только через refresh?
Привіт! Крутий проєкт!
Я б рекомендував відділити системні повідомлення від python консолі.
res.cloudinary.com/.../sku7ibruhrwc2lm742fh.png
Зробив, щоб стилі були різними.
Повністю погоджуюсь, що так краще!
Дякую за ідею!
Дуже круто!
Вітаю!
Дуже приємно бачити такий серйозний підхід до начання дітей у школі, особливо у питаннях спрощення. Оскільки все йде до того, що якщо якийсь інструмент складніший за тікток, діти просто ігнорують це.
Ти крутий, так тримати!!!)
yepython.pp.ua з 2020 року
поки всі вивчають claude code ми вивчаємо python....
Щоб сформувати правильний простати, потрібно мати навички програмування
Шо???
Промпт, промпт. але із простатою працювати звісно також навички потрібні, не просто так на лікарів вчаться довго
Це Т9, мова про «промпт», але редагувати не можу
Про обернене навчання щось чули? Вайбкодинг ідеальний для цього. Діти зовсім не сприймають вивчення синтаксису заради синтаксису і хочуть швидкого результату. Тому ми отримуємо одразу результат а як получилося вже цікаво розібратися — так і відбувається сучасне навчання. Таким чином і ші прорив ми б зробили набагато швидше, якщо давати правильний і актуальний інструментарій а не видумувати велосипед по другому колу, заради застарілих підходів у навчанні.
бла бла бла...
Приємно бачити українську розробку, спрямовану на вивчення інформатики.
Я з команди розробників ЄPython, тож хочу поділитися власними враженнями.
Використання pyodide в якості рушія неначебто гарна ідея, оскільки це компільований через Webassembly нативний CPython, і за ідеєю це мало б надавати 100% сумісність з нативним Python, але тут є «підводні камені» — не працюють бібліотеки, що використовують графіку, тому їх потрібно переписувати, створюючи замінники за допомогою HTML/JS — саме це зробив автор. Окрім того, виконання коду через pyodide відбувається після відчутної початкової затримки (така архітектурна особливість). Ми свого часу експериментували з pyodide (проєкт Basthon), але зрештою відмовились на користь компілятора Skulpt.
ЄPython має значно кращі реалізації turtle і tkinter, дозволяє працювати з файлами за допомогою Сховища в local storage, підтримує Pygame Zero, numpy, matplotlib, microbit, music, soundfx, SimpleGraphics. Код застосунку повністю відкритий, будь-хто може долучитися до проекту або зробити власний форк. Є також apk, без проблем це може бути PWA, оскільки при роботі застосунок на використовує зовнішні бібліотеки. Є можливість вбудовування застосунку у будь-який сайт чи блог, код програм можна передавати через адресний рядок браузера або через URL. Все це доступно за адресою yepython.pp.ua
Я використовую Pyodide, та не помічав затримки. Код виконується миттєво.
При першому запуску браузер завантажує .wasm файл (кілька мегабайт), потім компілює його (JIT → машинний код). При наступних запусках цього немає. На потужних машинах початкової затримки практично немає, але на шкільних комп’ютерах, яким більше 10 років, це відчувається.
Тобто це лише на холодному старті і не «виконання коду» а завантаження інтерпретатора.
Саме так
Дякую за Ваш відгук!
Реалізації tkinter, turtle поки реалізовані гірше, але сподіваюся з часом це покращити.
В Pyroom теж є підтримка бібліотек. З цього списку (pyodide.org/.../packages-in-pyodide.html) всі бібліотеки мають працювати. Підвантажуються або динамічно, коли програма бачить використання бібліотеки в коді, або користувач може попередньо закешувати потрібні.
Завантажити файли в local storage, щоб далі працювати, наприклад, з картинками.
Поширення через адресний рядок є; також є поширення через QR-код або через короткий код.
Вбудувати через iframe також можливо, до того ж можна налаштовувати різні параметри, що саме доступно в iframe.
Додатки для Apple та Android планую зробити, оскільки в Європі не можна встановлювати PWA-додатки.
Візьміть готовий код tkinter та turtle з ЄPython — вони реалізовані на JS, «випиляйте» Skulpt-API, та додайте API pyodide. Свого часу теж «грався» з pyodide, але Skulpt виявився кращим, як на мене
Дякую, будемо тестувати з учнями. Чекаю дуже функціонал особистого кабінет для вчителя, де можна зберігати завдання.
Користувались вже два роки здебільшого єPython, бо це дійсно проблема, що у багатьох із пристроїв тільки смартфон
Є така ще. Теж створена вчителем інформатики. Григорієм Громко
yepython.pp.ua
-----.
Побачив, що згадували в тексті, якось пропустив
Не досліджували можливість обмеженої підтримки PyGame для факультативних занять?
Можна розглянути, поки не дивився в цю сторону.
Там треба буде SDL прив’язувати.
Загалом, PyGame — це справжнє програмування з проектами на тисячі рядків, на котрому можна вивчати ООП, архітектуру, та патерни. І воно цікаве, бо отримуєш результат.
У ЄPython вже реалізовано підтримку Pygame Zero («класична» Pygame теж є, але вона не потрапила в реліз — API для дітей є трохи заскладним)
в останньому релізі додав підтримку PyGame, можна пробувати )
можете глянути там додалися приклади по PyGame
Дякую, спробував запустити Тетріс:
3) Можливо, варто винести підтримку PyGame на головну сторінку в фічі.1) Віджет консолі не ресайзиться — коли там стек трейс, то важко його читати чи копіювати.
2) Не запустилося в Файрфоксі — можливо, варто перехоплювати в консолі помилку й писати щось більш юзер-френдлі, бо зараз треба гуглити проблему:
1) переформату дизайн трохи згодом
2) дійсно не працювало, я не тестував до цього в Firefox оновивив версію, зараз вже наче відпрацьовує, можете глянути ще раз
3) слушна думка, поки додав коротко, згодом планую переробити повністю сайт, там вже більш детально розпишу
Тепер працює, але є баги:
1) При відкриванні прикладу тетрісу код не з’являється у редакторі. Хоча сам тетріс запускається.
2) перевертання (стрілка вгору) кубика рухає кубик в сторону.
3) Коли я нажав ескейп щоб закрити тетріс і перемкнувся на вкладку з ДОУ щоб відповісти тут, частина відповіді надрукувалася, а далі літери скроллили екран замість того, щоб друкуватися на ДОУ. Пофіксилося закриттям вкладки з тетрісом.
дуже цікаво, а що у вас за пристрій ?
бо на моїх Firefox проблем вже не було
ну крім
Ubuntu 22.04.5, MATE 1.26.0, Firefox 149.0.2.
Ще здається щ станнє — т гюк ДУ — б не мжу набрати ише дві ітери — і здається саме їх ДУ викриствуваи дя пркрутки непрчитаних пвідмень.
залив трохи фіксів по цьому , має стати краще
Таке...
Стрілочки то працюють, то не працюють для керування фігурами.
Код тестрісу в панелі редактора так і не з’явився.
Але кубік тепер не рухається, коли його крутиш.
ех, буду собі ставити Ubuntu, бо на інших системах не відтворюється в мене
Не витрачайте час. Ще в когось відтвориться проблема в більш зручному середовищі.
Для навчання англійська мова це занадто складно. Хочаб інтерфейс треба мати українською, без цього буде складно.
Також я не побачив якогось візуального майданчика де можна щось малювати. Без цього дітям буде не цікаво.
Я також вважаю що потрібно мати локалізовані бібліотеки щоб діти команди писали також українською. І навіть сінтаксис повинен бути локалізований. Також гарно було би локалізувати повідомлення про помилки. В цілому ідея гарна але треба пробувати. Поки наче занадто сиро.
Коли запустив приклад написало помилку — Preview root not ready.
Там є інтерфейс українською. Над локалізацією помилок теж думав.
Переклад синтаксису цікава ідея але то вже буде не пайтон, а щось інше.
Не зміг знайти де мову поміняти. Не можете підказати?
res.cloudinary.com/.../xdfhuod237zs2tlfeszy.png
Дякую. Знайшов. Щодо помилки із запуском — можливо через айфон це.
Також дрібна незручність — коли не головному сайті вибрав українську то пісочниця відкривається англійською
в меню знизу перемикач є
Помилку в дітей теж бачив сьогодні, ще не встиг розібратись. Можливо останні оновлення хрому щось зламали
Є середовище, яке дозволяє програмувати українською мовою — АлгоКод(ed-info.github.io/algocod)
П.С. Там є приклади — кнопка з «книжечкою»
О! Виглядає круто. Опису мови і ще що можна зробити не вистачає. Но для початку саме те що треба і прикладів відносно багато
Насправді це «надбудова» над JS — воно гарно заходить у 6-7-ому класах для початкового знайомства з програмуванням, але багато вчителів це не сприймають — лише Python і бажано по раніше
Я розумію чому людям із індустрії воно здається дивним. Але за педагогів не зрозуміло. Може вони кажуть якісь педагогічні перепони в цьому?
Більшість вчителів інформатики не заморочуються з питаннями методики — для них головний методичний «документ» — підручник і власний досвід(як правило — Паскаль, переучений на Python), тож зрозумілість коду відступає перед технікою роботи в середовищі.
І потім дитина відкриє будь-яке інше джерело і буде вчити повторно.
Весь молодіжний сленг — це фактично англійська)
Ну моя позиція не тягнути в англійську якщо людина поки не хоче. Я вважаю що можна вчити і так і це не буде гірше. Вимоги до англійської це зайвий відсів. Весь пітон із інтернету ніхто не забере в дітей і звісно це не лише лише. Хто більш амбітний він буде сразу із англійської може починати хто менш буде займатися лише програмуванням а не вивчати англійську і плутатися в концепціях і постійно перекладати свої дії англійською.
а що заважає створити легкий Docker-образ або портативний сервер (на Flask/FastAPI), який ви запускатимете на одному ноутбуці з акумулятором, роздаючи Wi-Fi без інтернету?
Це просто ще один варіант.
Але знову таки є привʼязка до ноутбука, вдома на смартфоні діти доробити завдання не зможуть
Класний проект!
Дякую!