| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| latest-linux.yml | 2026-10-04 | 406 Bytes | |
| latest.yml | 2026-10-04 | 357 Bytes | |
| sameko-dev-cpp-1.3.0-linux-x86_64.AppImage | 2026-10-04 | 127.3 MB | |
| sameko-dev-cpp-1.3.0-portable.zip | 2026-10-04 | 284.8 MB | |
| sameko-dev-cpp-setup-1.3.0.exe | 2026-10-04 | 206.3 MB | |
| sameko-dev-cpp-setup-1.3.0.exe.blockmap | 2026-10-04 | 213.1 kB | |
| Sameko-Setup-1.3.0.exe | 2026-10-04 | 206.8 MB | |
| README.md | 2026-10-04 | 26.8 kB | |
| Sameko Dev C++ v1.3.0 source code.tar.gz | 2026-10-04 | 22.8 MB | |
| Sameko Dev C++ v1.3.0 source code.zip | 2026-10-04 | 22.9 MB | |
| Totals: 10 Items | 871.2 MB | 0 | |
Downloads
| File | For |
|---|---|
Sameko-Setup-1.3.0.exe |
Windows, recommended. One window: pick a folder and install. |
sameko-dev-cpp-setup-1.3.0.exe |
Windows, the classic step-by-step installer (also what auto-update uses). |
sameko-dev-cpp-1.3.0-portable.zip |
Windows portable: extract anywhere and run. |
sameko-dev-cpp-1.3.0-linux-x86_64.AppImage |
Linux (needs g++ and gdb from your distribution). |
The installers are not code-signed yet. If Windows shows "Windows protected your PC", click More info → Run anyway. Updating from 1.2.0 shows the installer one last time; from 1.3.0 on, updates install silently.
A full code audit, Electron 44, a reworked interface (floating cards, Explorer, Input / Output / Expected, dialogs) and test input from a file. Numbers were measured on the bundled GCC 16.1 toolchain (16-core Windows machine).
Performance
- Live Code Checking is ~10× faster: diagnostics now come from the clangd process that already parses the open file for IntelliSense, instead of spawning
g++ -fsyntax-onlyafter every pause in typing. A check takes ~100–130 ms (was 1.5–2.2 s).g++remains the fallback when clangd is unavailable, and that path was fixed too (see below): ~0.6 s instead of ~1.5 s. - Accurate run time and memory: programs are started through a small native launcher (built once with the bundled compiler) that reports the program's own wall time and peak memory as recorded by Windows. A 23 ms program used to be shown as 88–168 ms with no memory figure; it now shows ~20 ms and its real peak memory. The
tasklistsampler it replaces cost ~150 ms per sample. - Run All Tests runs tests in parallel on up to 4 workers: 8 tests went from 5.2 s to 2.7 s. Any test that times out or comes close to the limit is re-run on its own, so a time verdict is never taken from a crowded run. Set
execution.parallelTeststofalseinsettings.jsonto keep the old one-at-a-time behaviour. - Debug builds use a precompiled header: the PCH is now keyed by every flag that affects it, so
-gbuilds get their own instead of re-parsingbits/stdc++.h(1.9 s → ~0.9 s). The same fix restores the PCH for builds with-D_GLIBCXX_DEBUG,-fsanitize=…or-Ofastin Additional Compile Flags, which were silently compiled without it. - Building an unchanged file is instant: Build & Run, Compile and Run All Tests reuse the last executable when the source, the flags and the compiler are the same as its last successful build and the file on disk is still the one that build wrote (~730 ms → ~3 ms). Anything the check cannot see — a local
#include "…"header, or-I/-L/-l/-Wl,flags in Additional Compile Flags — always compiles again; the cache lives in memory and is empty after a restart. - Debugger steps faster across function calls: all variable objects of a frame are created and deleted in one round trip instead of one per variable.
- Smaller install: README screenshots (16 MB), two oversized source images and the unused
golden-layoutdependency are no longer packaged; the logo shown in the splash and About is a 256 px image instead of 2508 px. - Downloads and the installed app are a third smaller than 1.2.0: installer 271 → 173 MB, portable zip 370 → 238 MB, installed size 1,122 → 766 MB in 4,794 files instead of 7,589 (measured on Electron 28; the move to Electron 44 below adds ~106 MB to the installed size, and the final 1.3.0 downloads are 197 MB for the installer and 272 MB for the zip):
- the bundled toolchain (825 → 540 MB) no longer ships what the IDE never runs: the Fortran and Objective-C compilers,
ld.lld, the WinLibs package manager and extra tools (ccache, nasm/yasm, ninja, premake, ctags…) together with the 55 DLLs only they use, Python's test suite and IDLE/Tk (gdb's Python keeps its standard library), GCC plugin headers,.idlsources and static Python/Fortran libraries. The C/C++ compilers, LTO, OpenMP and the other runtime libraries a program may link, gdb, clangd and AStyle are all still there; - only the English Chromium locale is packaged (36 MB → 0.4 MB; the UI is English);
- Monaco's TypeScript/CSS/HTML language services and non-English UI strings, which the editor never loads, are left out; with the removals listed above,
app.asaris 10 MB (1.2.0: 48 MB). - Faster startup:
electron-updater,electron-loganddiscord-rpcwere loaded before the window could answer the page — ~170 ms of the ~220 ms the main process spent loading modules. They are now loaded when first used, and the compiler warm-up, PCH build, update check and Discord connection start only after the window has loaded, so on a slow machine they no longer compete with the editor while it opens. The output terminal (xterm.js, ~140 ms of the page's start-up work) is loaded when the window is idle or on the first output instead of before the page is shown. Measured on the packaged app, launch until the editor is ready (median): 2.03 → 1.82 s on a 16-core machine, 3.49 → 2.69 s when the app is limited to 2 cores; memory use is 2–4% lower. - The background video pauses when no one can see it: while the window is minimised or covered, or when a user background image hides it. With a file open and the window in the background, idle CPU use drops from ~11% to ~1.3% of one core, mostly in the GPU process, and memory by ~35 MB.
- Electron 44 opens the editor ~15% sooner: on the packaged app, launch until the editor is ready went from 1.82 to 1.55 s (median of 3 runs, 16-core machine). The cost: private memory at idle rose ~9% (383 → 416 MB measured from source) and the installed app grew from 766 to 872 MB, almost all of it the larger Electron runtime.
- Blur without the cost: the welcome card's frosted glass is a copy of the background blurred once when the theme is applied, instead of a live backdrop blur that re-blurred the playing background video every frame. The dimmed layers behind dialogs (Checkpoints, confirmations, Snippets, theme editor, ...) are a plain dim for the same reason.
- Chromium's spellchecker is turned off (it underlined identifiers typed in the app's text fields and used memory for nothing in a code editor).
- File, checkpoint and app-state operations no longer block the main process: opening, saving, listing folders, checkpoints and the saved app state use asynchronous file I/O, so a slow disk or a large file does not stall builds, output and the debugger while it is read or written.
- The explorer saves its state in batches instead of rewriting everything (including saved approaches, i.e. whole files) to browser storage on every click.
- Smaller wins: settings are written once when Ctrl+wheel zoom stops (not on every tick), clicking in the editor no longer rebuilds the tab strip, and clangd is not asked to re-parse a document whose text did not change.
Changed
- Floating layout: the header, explorer, editor, bottom panel and status bar are separate rounded cards with the background showing between them. Tabs are soft pills: the open file gets a tinted fill and the rest are plain text, and a long row of tabs scrolls instead of pushing the window sideways.
- One Run button: Build & Run and a caret that opens Run without building (F10), Compile only (F9), Start debugging (F5) and the Debug panel. Stop appears next to it only while a program runs.
- Bottom panel opens when needed: it starts collapsed to its tab strip and opens on a run or a failed build. Click the open tab or the caret to collapse it again; Ctrl+J opens a collapsed panel. The Problems count is hidden at zero.
- Explorer shows the folder's files again: an opened folder lists its files and subfolders under Files, with indent guides and the open file as a filled pill that follows the active tab. The header shows the folder's name with New File, Refresh and Open Folder. A filter box at the top lists every matching file in the folder with the subfolder it is in (Enter opens the first, Esc clears it). Recent keeps the last three files, a folder shows how many files under it are marked Done, and a file's status is a coloured pill at the end of its row. Compiler output (
.exe,.o,.dSYM, ...) is hidden behind a "build files hidden · Show" link and is never opened as text. Contest and Collections follow below. - Electron 44 (was 28): a newer Chromium and V8 (see Performance). Dropped files and a background image chosen in Settings get their path through
webUtils.getPathForFile, sinceFile.pathno longer exists. Also updated: the terminal to xterm.js 6 (now@xterm/xtermand@xterm/addon-fit), electron-updater 6.8, electron-log 5.4.4, and electron-builder 26 for packaging. Monaco stays at 0.45: newer releases no longer ship the AMD loader the app is built on. - The loading screen follows your theme: the splash takes the colours of the theme you last used (saved each time a theme is applied) and is redrawn as a soft card with a sliding progress bar instead of a thick border and spinner.
- The Debugger help card is shorter and uses one style throughout.
- Input / Output / Expected: the I/O column is three cards, each with a coloured dot. The new Output card shows what the last run printed, with an AC or WA · N lines badge when Expected is filled (Running / Stopped while it runs or after Stop), remembered per tab.
- No theme flash at startup: the window appears once the saved theme is applied, instead of opening in the default colours and switching, and the background video no longer blinks when the editor finishes loading.
- Scrollbars are a thin pill kept inside their card, clear of the rounded corners, in every theme. The Settings lists showed Windows' scrollbar with arrow buttons (on Chromium,
scrollbar-widthoverrides the app's own style). The Terminal's scrollbar is the same pill instead of xterm's square 14 px bar, the terminal's padding follows its theme colour, and program output in red, green, yellow or blue uses the theme's error, success, warning and accent colours, as does selected text. - Dialogs, menus and notifications share one look: a solid card in the theme's panel colour with its thin border, pill buttons in the theme's button colour (a soft tint for the other choice, red for Delete), and one plain dim behind dialogs. The large glowing shadows round menus, popups, the welcome card and the islands are gone; they were costly to paint over the background video. The tab's right-click menu (Checkpoints, Copy Path, ...) was drawn in Kawaii Light's blue glow in every theme and now follows the theme.
- Updates install without the setup wizard: after the download, "Restart to update" installs the new version silently and reopens the app, instead of showing the installer pages each time. An install in Program Files still asks for administrator rights.
- The classic installer (
sameko-dev-cpp-setup-1.3.0.exe) uses the Kawaii Dark colours and its own artwork and wording, and offers to open the app when it finishes. - Performance Mode keeps the background video and animations; it now only turns off the editor's costly options (minimap, bracket pair colours, smooth scrolling, cursor animation).
- The dimmed backdrop behind Settings takes the theme's colour instead of Kawaii Light's blue in every theme.
- Debug panel is part of the layout: it opens as a column beside the editor, which narrows to make room, instead of floating over the code.
- Kawaii Light: a light editor and terminal (they were Kawaii Dark's navy), syntax colours in pastel tones dark enough to read on white, and darker build-message colours. Its background image now shows, and fading it with the opacity slider lightens it instead of turning it grey.
- Program output in the terminal uses the theme's terminal text colour, so it is readable in Sakura.
- Status bar: error and warning counts, the last run's time and peak memory, and the selected C++ standard.
- New icons and toolbar: the interface uses Phosphor icons with rounded, bold strokes and a light tint, and an active button switches to the filled icon. Toolbar buttons are grouped (panels, run controls, settings) and behave like the Windows 11 taskbar: a soft tile on hover and a bar under each open panel's button, which widens on hover. The Run icon hops while a build is in progress, then bounces when it succeeds or the button shakes when it fails. Menus cascade in and Settings springs open. The window buttons are smaller and the close button turns red on hover. All of these effects are off when Windows is set to reduce animations.
- The bottom panel (Problems / Terminal / Tests) uses flat tabs with an underline instead of pill buttons; the editor no longer sits in a second frame inside its card (12 px more room each way); Settings rows use thin solid borders instead of dashed ones; the explorer shows one welcome block (Open Folder, with New Collection as a link) when no folder is open and there are no collections; the status bar text is easier to read.
Added
- A new Windows setup (
Sameko-Setup-1.3.0.exe): one rounded window in Kawaii Dark instead of the four-page wizard. It shows the folder to install to (the current install's folder when updating), a Browse button, the space needed and free, Desktop shortcut and Open when done, then a progress bar with each step (removing the old version, copying the editor, installing the compiler). It installs through the same NSIS installer, so Start Menu entries, uninstall and auto-update work as before; it asks for administrator rights only for a folder the user cannot write to, such as Program Files. The classic installer is still published and is what auto-update uses. structgets its};(#52): typing{afterstruct Name(alsoclass,union,enum) closes it as{};, like Code::Blocks, so Enter leaves the semicolon after the body. Ctrl+Z takes back just the;. Functions, lambdas and= {initialisers are left alone. Completion also offers common standard-library names (setprecision,lower_bound,priority_queue, ...) in the first seconds before clangd answers, which used to offer only keywords.- Test input from a file (#49): the file button on the Input card, or a file dropped on it, makes the tab read its input from a
.txtfile instead of the Input box. The card shows the file's name, size and line count and its first 30 lines; the whole file is never loaded into the window. Run and Debug feed the file to the program from disk (a 6.6 MB, 1,000,000-number input runs in 1.4 s), the terminal shows one< fileline instead of echoing it, and ✕ goes back to typed input. Each tab keeps its own file. - Ctrl+T opens a new tab and Ctrl+Tab / Ctrl+Shift+Tab move to the next or previous tab (changeable in Settings › Keybindings). Ctrl/Alt shortcuts read the physical key, so they also work while a Vietnamese input method (Unikey, EVKey) is on.
- Interface Scale (Settings › Appearance, or Ctrl+= / Ctrl+- / Ctrl+0): enlarges or shrinks the whole interface, 80–200%. The default, Auto, enlarges it on 4K screens left at 100% or 125% scaling in Windows, where the app used to be too small to read (a 4K screen at 100% gets 150%); other screens stay at 100%. The editor and terminal stay sharp because this is the browser zoom, not a resize of the rendered image.
Fixed
- The Terminal came back empty after being dragged out of the bottom panel (no output and no input box) when the Problems tab had been open: the panel hid the terminal's output and input with styles on the elements themselves, and they kept them when moved back. The terminal is now one block that moves between its own column and the panel as a unit, and the panel shows or hides it from its own state. Dragging the Terminal into the panel now also opens it.
- "File changed on disk" after every Build & Run: saving a file, or the build writing the editor's text to it, was reported by the file watcher as an outside change, so the IDE offered to reload the file it had just written. The IDE's own writes are now ignored.
- The window slid sideways: many open tabs, or opening the Debug panel, scrolled the whole page left (up to ~1,300 px), leaving the header half off-screen. Only the tab strip scrolls now, and the page itself can no longer scroll. The Debug panel also no longer covers the Run menu.
- The Explorer listed no files: an opened folder showed only Contest, Collections and Recent; its files and subfolders are back (see Changed).
- A window last closed tall and narrow (portrait on a landscape screen) reopens at the default 1400×900, centred.
- The Terminal showed a second scrollbar along its right edge: the output ran a few pixels past its box, which scrolled on its own; the last line could also be cut off. The output now fits the box exactly.
- The Explorer was the only see-through card: the Explorer, header and status bar are now solid like the editor.
- F12 and Ctrl+Shift+I open DevTools only when running from source, not in the installed app.
- Rename, New File and other name prompts in the Explorer could not be used: the dialog opened but OK, Cancel, Esc and Enter did nothing (a script error left it without its handlers). They work again.
- Confirmation dialogs: Enter answers with the focused button (Tab to Cancel then Enter no longer deletes), and the confirm button takes the theme's colour instead of a fixed blue.
- The Input / Output / Expected cards are the same height (Output was a fifth shorter) and line up with the editor's top and the bottom panel's bottom edge (they sat 2 px lower and ended 12 px higher).
- The docked Terminal no longer sits in a dark frame, the bottom panel's resize strip shows a grip and stays clear between the rounded cards (it was filled in Performance Mode), and a run's time and memory appear once, in the status bar.
- In the Explorer, the highlighted file follows the active tab (it only marked the first file opened).
- Small and short windows: the window can no longer be shrunk below the size the layout works at (760×520, times the interface scale). The docked Terminal/Problems panel took a fixed 320 px, leaving 8–10 editor lines on a 720 px-high screen; it now follows the window height (still 320 px from ~890 px up) and can be dragged up to 55% of the window instead of a fixed 400 px. Narrow windows give the Input/Expected column less width, the ☰ Run menu now has Compile and Get Tests from OJ (their toolbar buttons are hidden there), and the "install update" button no longer disappears.
- A program printing in an infinite loop froze the whole IDE (window unresponsive for ~25 s, Stop unreachable). Output is now rate-limited with back-pressure: the window stays responsive and Stop answers immediately. Nothing is dropped.
- Undo history was lost when switching tabs. Every tab now has its own editor document, so Ctrl+Z, markers and scroll position stay with the file; the same file shown in both split panes is one live document.
- F10 / F11 / Shift+F5 did the wrong thing while debugging when the cursor was in the editor (F10 tried to Run instead of Step Over), and keybindings changed in Settings had no effect inside the editor. All shortcuts now go through one table, and a changed keybinding applies immediately.
- Stop could kill unrelated programs: stopping or rebuilding ran
taskkillby executable name, so a source file namedexplorer.cppwould take down Windows Explorer. Only the process started by the IDE is terminated now. - Text containing
<…>was mangled in the Problems panel (std::vector<int>showed asstd::vector), the snippet list, tabs, test results, the explorer and theme lists. - Live Code Checking reported a false error on any code using
try/catch("exception handling disabled"). - "--- Stopped ---" was printed on every build even when nothing was running.
- Two files with the same name overwrote each other's executable (every contest has an
A.cpp), and "Run only" ran whichever file was built last instead of the current tab. - Buttons that did nothing: the GitHub button, the portable "Download" button and the update dialog link had no handler; the portable link also pointed to the wrong repository.
- The "compiler not found" warning at startup was never shown (it crashed on an undefined function).
- "Delete After (days)" for Checkpoints was ignored, so old checkpoints were never removed; small checkpoints were listed as "0 KB".
- Settings could be lost or reverted:
settings.jsonis now written atomically with a backup copy, and saving settings no longer overwrites the saved window position. - Saving or building a file asked to reload it ("File has been changed externally"): the app's own write was reported by the file watcher before it was recorded as ours, so every Ctrl+S and every Build & Run of a saved file showed the prompt. Only changes made by other programs prompt now; a compile that writes the editor's text to disk is also recognised as the app's own write.
- External changes were only detected for files opened through the Open dialog, not for files opened from the explorer or restored from the previous session.
- Test cases were shared by every tab: switching tabs kept the other file's tests, and typing in INPUT overwrote them. Each tab now has its own test cases, selected test and results, and they are restored with the session.
- The app changed clangd for the whole machine: it wrote
%LOCALAPPDATA%\clangd\config.yaml, forcing a MinGW target and its include paths onto clangd in VS Code, CLion and other projects. Flags are now passed to the app's own clangd only, and the file written by earlier versions is removed (only if it still carries the app's marker). - Session restore could silently stop working once browser storage filled up (a large background image or many untitled checkpoints were enough). The session checkpoint, checkpoints of untitled tabs and theme background images/videos are now stored as files in the app's data folder; existing data is migrated automatically.
- Restoring a checkpoint wiped the undo history of the file. It is now a single edit: Ctrl+Z brings back the text from before the restore.
- Opening a very large file could freeze the IDE. Files over 16 MB are refused with a message instead; previously a failed open from the explorer or session showed nothing at all.
- Explorer state (folders, notes, statuses, collections, saved approaches) moved from browser storage to
userData/state/explorer.jsonfor the same reason as the session; existing data is migrated automatically. - Previewing checkpoints created a new hidden editor every time and never freed it, and could switch the editor colour theme; the preview now reuses one editor.
- Checkpoints of an untitled tab were kept forever after the tab was closed; closed tabs stayed loaded in clangd for the whole session.
- Non-ASCII strings in the debugger's Variables panel were shown as digits.
- Dragging the split divider threw an error on release; resetting keybindings did not take effect until Settings was saved; Escape did not close Settings while the editor had focus; pasting many lines into the terminal input was slow; the app checked for updates three times per launch; Compile Only and Run All Tests ignored the "Use LLD Linker" setting.
Security
- Competitive Companion listener now refuses requests coming from web pages (any site could previously push a "problem" into the IDE, creating files and stealing focus), limits the request size and validates the payload.
- Added a Content-Security-Policy (no inline scripts or inline event handlers) and blocked navigation and new windows in the main window.
- Imported themes and
.samekocontest files can no longer inject markup into the UI. - The checkpoint reader only reads checkpoint files; it used to read any path the renderer asked for.
Removed
- tree-sitter (
tree-sitter,tree-sitter-cpp): its only remaining jobs — a pre-check before the live syntax check and a fallback list of local variables for completion — are covered by clangd. Two native dependencies less to build and ship. - Unused IPC surface: 18 preload functions nobody called, 13 handlers nothing could reach, and the constants, validators and legacy history channels behind them.
build-local.ps1, superseded bynpm run build:win(it pointed at an output folder that no longer exists).- Eight renderer modules that were never loaded by
index.html(tab-manager.js,settings-manager.js,shortcuts-manager.js,panel-manager.js,build-system.js,snippets-manager.js,editor-core.js,split-manager.js), the unused golden-layout theme, and a development HTTP server that was started but never used.
Developer notes
npm run test:guinow runs on a temporary profile instead of the developer's real session.src/renderer/app.js(7,900 lines) is split into 17 files undersrc/renderer/app/, cut at its existing section banners and loaded in the same order — no logic was moved between sections.CODEBASE.md§9 lists what is where.- About 45 trace
console.logcalls removed from renderer code (theme customizer, explorer, update checks, init banners); warnings and errors are kept. - Compile Only and Build & Run share one implementation (
buildActiveTab) instead of two ~100-line copies. - New:
app/shared/settings-store.js,app/ipc/state-handlers.js,app/services/compiler/run-launcher.js,src/renderer/boot.js. ld.lld.exeis picked up fromSameko-GCC/binwhen present, but measured only ~5% faster builds (link 154 → 122 ms) for +71 MB, so the packaging filter leaves it out even when a local toolchain has it.npm run build:winalso buildsSameko-Setup-<version>.exe(scripts/build-setup.js): the window ininstaller/setup/is compiled with the C# compiler of .NET Framework 4.8, which ships with Windows, and the NSIS installer is embedded in it.scripts/build-installer-art.jsdraws the NSIS sidebar and header bitmaps.- Linux builds pass
-c.productName=Sameko-Dev-CPP: electron-builder 26 refuses the+of "Sameko Dev C++" in Linux file names. The menu entry keeps the full name. - New
scripts/check-toolchain-deps.js: after changing the toolchain filter inpackage.jsonor updatingSameko-GCC, build withelectron-builder --win dirand run it; it fails if any packaged executable or DLL imports a DLL that was filtered out.