Getting started
Cudic is a place to hang out and a place to build. Servers and channels for chat, a gallery of games made in Cudic Studio, theme packs that restyle the whole site, and coins you spend on packs.
- Sign in — email + password, GitHub, or continue as a guest to look around. Saving, publishing, coins and saved progress need an account.
- Open Studio — a full code editor with a live preview.
- Build something — write HTML/CSS/JS, or import an existing project, or bring a Scratch game across.
- Save, then Publish — saving keeps the project in your account; publishing puts it in the gallery.
Guests can play games and read chat. Progress in a game isn't stored for guests — the game will offer you a sign-in the first time you play.
Studio
Studio is a VS Code-style workbench: file Explorer on the left, editor in the middle, live Preview on the right, and the Cudic AI panel along the bottom.
| Command | What it does |
|---|---|
| Save project | Saves the workspace to your Cudic account (needs a sign-in). |
| Import files | Pull a set of files into the workspace, merging over what's there. |
| Import folder | Same, for a whole folder — relative paths are kept. |
| Import Scratch project | Turn a .sb3 or a shared Scratch link into a playable Cudic project. See below. |
| Export project as zip | Downloads the whole workspace as a zip. |
| Publish / Unpublish | Puts your project in the gallery, or takes it back out. |
| Set thumbnail | Upload an image, capture the preview, or clear it — that's the card art in the gallery. |
| Open Preview / Run | Runs the project in the preview pane. A .py file runs with Python. |
| Add package / Install Python package | Adds the import line for an npm or Python package to the open file. |
The import and export commands live in the palette, the File menu, and the right-click menu in the Explorer or the editor.
Project files
index.htmlis the entry point. If your project doesn't have one, the preview won't run.- Local
.cssand.jssiblings are inlined into the preview automatically, so you can keep styles and scripts in separate files and still get one working page. - Images, audio and other binaries are uploaded separately from your text files, so big media doesn't slow saves down.
- Bare imports like
import confetti from 'canvas-confetti'are resolved from a public CDN for previews. Publish uses the same URLs, so a published game needs no build step. - An importmap in your
index.htmlpins a package to a version or path; anything you pin yourself is left alone.
If a text file you imported shows up as a binary file in the editor, it was probably saved as UTF-16 (old Windows Notepad does this by default). Re-save it as UTF-8 and import again.
Python
Running a .py file (with Run, or via Cudic: Run Python) executes it with Pyodide — CPython compiled to WebAssembly — inside the preview pane. micropip is preloaded, so package installs are one line:
import micropip
await micropip.install("cowsay")
import cowsay
cowsay.cow("hello from Cudic")
Install Python package writes that snippet to the top of the open file for you.
Things to know: the first run downloads roughly 10 MB of Python, so give it a second. It's a browser runtime, so no files, no network servers and no installing system packages — pure-Python and WASM wheels only.
npm packages
Write a normal import and it works in the preview and in the published game:
import confetti from 'canvas-confetti'
confetti({ particleCount: 120 })
Add package inserts a fully-qualified import (optionally with a pinned version) so the file also works when someone else opens it.
import 'pkg/style.css'is lifted into a stylesheet link automatically.- A dynamic
import('pkg/style.css')can't be rewritten — load styles statically instead. - No build scripts, no native binaries and no Node built-ins (
fs,net,child_process): those don't exist in a browser.
Importing Scratch projects
Cudic: Import Scratch project (palette, File menu, or right-click) takes a Scratch game and turns it into a Cudic project you can edit and publish.
Two ways in
- File — pick a
.sb3you've downloaded from Scratch. This is the most reliable route. - Link or id — paste a shared link like
https://scratch.mit.edu/projects/123456789or just the number. You'll be asked to confirm the project is your own or one marked “See inside”.
What lands in the workspace
| File | What it is |
|---|---|
index.html | A tiny player page. There's no game code in here. |
scratch.js | The fixed loader that boots the Scratch runtime and plays the project. |
project.json | The editable source. Every sprite, costume, sound and block lives here. |
assets.js | A short map from each asset to its file. |
assets/ | The costumes and sounds themselves, as normal files you can save and publish. |
Scratch blocks are data, not JavaScript, so index.html looks almost empty and the real project sits in project.json. If you edit project.json, the running copy in assets.js doesn't change until you re-import or sync the two by hand.
Good to know
- Scratch blocks are not converted to hand-written JS. You get the original project, editable as blocks-as-data.
- Cloud variables are kept per player in that browser instead of being synced.
- Text to speech and translate blocks need service keys, so they stay silent.
- Video sensing needs a camera; the game sandbox doesn't allow it.
- Projects that use music load a bigger runtime the first time they run.
- Scratch rate-limits downloads and sometimes won't hand over a link at all — if a link fails, import the
.sb3file instead. - Imports are capped at 25 MB, and a heavy project (lots of costumes or sounds) takes longer to save.
Publishing & the gallery
- Publish makes your project playable at its own page and lists it in the gallery. Unpublish keeps the project but hides it.
- Set a title, a description, and a thumbnail — upload one or capture the preview, which is usually the fastest route to a decent card.
- Gallery cards show the thumbnail, title, author and comment count; comments are open on each game's page.
- Games play in a sandboxed frame, so nothing in your game can reach your Cudic session. That's why saved progress is handled by Cudic rather than the game (see below).
Finding games
- The search box matches names and descriptions. Tag chips filter to one kind of game at a time, and a chip can be shared — the filter lives in the page address.
- Trending sorts by how many times games have actually been played. One play per person per game per hour, so refreshing doesn't inflate it.
- The heart on a card or a game page saves it to your account. Liked games collect on your profile.
- Tags on your own game come from the project fields in Studio.
Remixing
Remix on any published game copies it into your own projects so you can change it. The game you came from is credited permanently: your copy keeps a line back to its parent and to the original, all the way up the chain, and the original page keeps crediting the parent too.
Credits are part of the game record and don't go away if you edit or unpublish — that link stays with the remix.
Cloud saves
Signed in, your progress follows your account: sign in on another device and your bests and saved state are there.
- Games opt in — the ones in the gallery already do. Your own game can use the same helper if you want saves.
- Typical shape: best scores and a small amount of state. A clicker-style game can save its whole board; a platformer saves a level and a best.
- Each save is small (100 KB). If something doesn't fit, save a summary instead of the full board.
- Guests play normally, but nothing is stored — a sign-in prompt appears once per game.
Chat & servers
A server holds channels; a channel holds messages. You can also message people directly.
- Create a server from Servers — you pick the starting channels, and you can add more later.
- Roles: owner, admin, member. Admins manage channels and members; members chat.
- Friends: add someone, they accept, then you can DM them. Requests show in your profile.
- Rules: a server can post rules that members acknowledge once.
- Typing indicators, unread badges and read receipts are all live — no refreshing needed.
- Your servers are listed in the left rail so jumping between them is one click.
- The Find a conversation box filters your message list as you type. Inside a conversation, Search looks back through that conversation's history for a word or phrase.
Theme packs
A theme pack restyles Cudic: colours, fonts, rail icons, rail background art, motion, and a live background scene. Anyone can try one instantly, or buy it with coins.
Publishing a pack
Themes has a builder that previews changes as you make them and publishes to the store when you're happy.
- Pick colours, fonts, icon style, motion level and a scene, then preview.
- Advanced lets you paste a
.ctheme— a small text language for packs — plus your own CSS and HTML for the really specific bits. - Set a price in coins (including free), and people who buy it keep it even if you later change the price.
- Anyone can report a pack; see Reports.
Prefer plain CSS? You don't need a pack: any project you publish can include its own stylesheet.
Coins
Coins are Cudic's own currency — there is no real money and no cash-out. You earn them for being around and making things, and spend them on theme packs.
- Daily claim on your profile's Earn panel.
- Quests — small tasks like publishing a game or joining a server.
- Activity — chatting counts toward a small daily trickle.
- Selling packs earns coins every time someone buys one.
Your balance and every transaction are listed in the same panel, so you can always see where coins came from and went.
Reports
Every published game and theme pack can be reported: pick the reason, add what's going on, and attach a screenshot if it helps. Reports go to the moderators, not to the person who made the thing.
Cudic AI panel
The ✦ button in the title bar (or the palette command Cudic AI: Open chat) opens a chat panel along the bottom of Studio. It works with the model provider of your choice.
- Bring your own key. Add a provider once, then pick any model it lists — or a local Ollama / LM Studio model. Keys are stored in this browser and are sent only to the provider you chose.
- Streaming answers with code blocks that have Apply and Copy, so a suggestion becomes an edit in one click.
- Slash commands for the everyday actions (new chat, clear, help, model, keys).
- Skills are reusable prompt packs you can switch on and off — one teaches it Cudic's conventions, another adds a design sensibility pass.
- Ghost-text autocomplete in the editor works when you've saved a key for the model it's using.
- It can read and write files in your project, so read the diffs before applying one.
It needs to know what you're working on to be useful — open the file you're editing or mention it, and it'll answer about that instead of in generalities.
Account
Your profile at /profile holds the things that follow you: display name, avatar, a short bio, a few interests, accent colour and light/dark preference. Theme, accent and reduced-motion settings are remembered in this browser and applied on every page. Games you've liked are listed there too.
Sign out from the account row at the bottom of the rail. Signing in on a second device takes over the session there — the older device pauses and offers to take it back.
FAQ
Why is index.html almost empty after a Scratch import?
It is just the player page. The project is project.json, and scratch.js runs it.
It says I can't save.
You need to be signed in. If a single file is enormous (tens of megabytes on one line), that's usually the problem — keep big media as real files instead of pasting it into text.
My preview is blank.
Check the console panel in the bottom bar. The most common causes are a missing index.html, a typo in a script tag, or an import that couldn't resolve.
The camera/microphone blocks in my game don't work.
Games run sandboxed, so hardware access is off. It's the same reason a game can't read your account.
Studio feels slow the first time.
The workbench is a large download on first visit. After that it's cached and normal.
Limits & known gaps
- It's a browser: no terminal, no native binaries, no installing system software. Python runs in WebAssembly, npm packages come from a CDN.
- Scratch blocks aren't translated to hand-written JS — the original project comes across as-is.
- Guest progress isn't stored, and cloud saves are opt-in per game.
- Text-to-speech and translate blocks are silent; video sensing is blocked.
- Editing a Scratch
project.jsonalone doesn't change what's running until you re-import or sync. - Imports cap at 25 MB and each cloud save at 100 KB.
Something missing or wrong? Tell us in a server, or report the game or pack and we'll take a look.