IDE Ink editor

Last edit 11 Sept 2026, 10:30 by WikiModHistory

Creator Studio includes a full-screen Ink editor for writing conversations. It is not VS Code. It is Sexter's own multi-file IDE: save compiles into the game, with autocomplete for tags and externals, find/replace, media insert, and warning underlines.

The Creator Studio page covers Studio tabs (Characters, Modules, Publish, and so on). This page is only the Ink IDE.

The Sexter.io IDE editor
The Sexter.io IDE editor

Opening the editor

From Studio → Conversations:

  • Open Editor restores the Ink tabs you had open last time for this story (and the tab you were on). If none are remembered, it opens with no file selected so you can pick from the Files list
  • Click a conversation, side conversation, injection, or DM row to open that file. Other remembered tabs stay open
  • Click a warnings pill to jump to the first problem in that conversation

Inside the IDE, use the left Files list (or open tabs) to move between files. Open tabs are remembered in this browser, per story.

Layout

AreaRole
Left sidebarFiles, Media, or Search. Full height under the toolbar
Top toolbarSave, Test, Git (if linked), reference tools, close
TabsOne tab per open Ink file, above the editor (not across the sidebar). Middle-click a tab to close it. Unsaved tabs can Save & Close
EditorLine numbers, syntax colors, warning squiggles
Find barIn-file find / replace (⌘F / Ctrl+F, ⌘H / Ctrl+H)

On phones, opening a file hides the sidebar so the editor has room. Use the panel toggle to bring Files back.

The hierarchy view
The hierarchy view

Files

Grouped as:

  • Libraries (shared INCLUDE files, not playable chats). See INCLUDE libraries
  • Main Story (ordered conversation and chapters; unlock day/time on the chain)
  • Side Conversations (by character, drag to reorder)
  • Injections
  • TheGram DMs, FansOnly DMs, Swiper DMs

Click a row to open it. Drag to reorder the main chain or a character's side conversations. Use + (and insert-between rows) to add conversations.

Right-click a file in the sidebar:

ItemAction
EditConversation settings (character, slug, unlock time, and related fields). Hidden for library files
DeleteRemove that conversation / side / injection / DM / library

Media

Pictures, videos, and SFX from the story library. Search, upload, then insert at the caret as <media-id> (or <injectmic-id> for MIC TAP SFX).

Search

Project-wide search across Ink (needs at least 2 characters). Optional Match case, plus Replace / Replace all across every file in the story. Project replace saves and recompiles after you confirm.

Toolbar

Left to right (labels match the UI):

ControlWhat it does
Panel toggleShow or hide the file explorer
TitleConversation name (click to rename when editable)
Search iconJump to sidebar Search (project find/replace)
TestPlay this conversation in the phone UI. If the tab is unsaved, Studio warns first. Test runs the last saved & compiled version. Hidden on library files
View onlyBadge when you cannot edit. Browse, search, and Test still work
Save allAppears when other tabs are dirty. Saves and compiles every unsaved tab (⌘⇧S)
Save & CompileSaves the active file and compiles it. Shows Compiling… while working
GitOnly if the story is linked to GitHub. Pull / push from here
EmojiToggle the emoji insert strip (see below)
BookInk syntax cheat sheet (click a row to insert when editable)
FlagStory data: flags and numbers used in the story, with Get/Set insert, jump-to-use, and a Purge unused flags button (deletes dead SetStoryFlag/RemoveStoryFlag lines, see Flags and numbers)
SlidersEditor appearance (theme, font, size, line height, word wrap, suggestions). Stored in your browser
XClose the IDE. If tabs are unsaved, you can Save & Exit, close without saving, or keep editing

After save you get a short status: Saved & compiled, or Saved with a compile error message (source is kept even if compile fails).

The IDE toolbar
The IDE toolbar

Emoji bar

The emoji strip inserts common faces and gestures into dialogue at the caret. It sits above the editor with the file tabs, and scrolls sideways when the list is wider than the pane.

On desktop (mouse / trackpad) you can customize the strip:

  • Click an emoji to insert it at the caret
  • Drag and drop to reorder (a purple bar shows the drop gap; neighbors slide out of the way)
  • Right-click a slot to replace it with another emoji (paste or type one, then Set)

Your order and replacements are saved on your Sexter account, so the same strip follows you across browsers and devices. On phones, the bar is tap-to-insert only (no drag or replace).

Appearance

Color profile: Vivid, Ocean, Warm, or Mono (no colors). Font: JetBrains Mono, System Mono, or Courier. Font size 12–20px. Line height: Tight, Cozy, Normal, Relaxed. Word wrap and Suggestions are on/off toggles (suggestions on by default).

Right-click in the editor

Context depends on what is under the cursor and whether the file is editable.

ItemWhenAction
Jump to knot-> name or <- name under the cursorScrolls to that == name in this file
Rename knotEdit mode, == name or -> name / <- name under the cursorRenames that header and every matching divert in this file (F2 does the same). Dialogue text and comments stay put
Add missing SFX / Add missing imageMedia tag with a missing-media warningUpload using that id (does not invent a new id)
Preview SFX / Preview player media / Preview gallery save / Preview mediaKnown media tagQuick preview
Open injection: …<inject-…> that has a conversationOpens that Ink tab
Preview Injector imageInjection with Found imagesPreview
Cut / Copy / PasteSelected text (Paste also works with no selection)Clipboard, in the custom menu or ⌘X / ⌘C / ⌘V (Ctrl on Windows). Whole-line copy and cut include the trailing newline, so paste does not glue onto the next line
Convert script to InkMulti-line selectionTurns a plain draft into Ink (NPC lines; mc: lines become player choices/knots)
ReindentEdit modeRewrites leading spaces for the selection, or the whole file if nothing is selected. Same as ⇧⌥F / Shift+Alt+F
Insert picture / videoEdit modeUpload, then insert <id>
Insert MIC TAP SFXEdit modeUpload, then insert <injectmic-id>

You can also click a -> knot (or <- knot) for Jump to knot (and Rename knot when the file is editable), or ⌘-click (Ctrl-click on Windows) a divert, media tag, inject tag, or flag name to jump or preview immediately. Rename only changes this file. Other conversations that divert here by name are left as they are.

Right click menu
Right click menu

Autocomplete

Suggestions appear while you type. Titles include Story flags, Story numbers, Speakers, Knots, Apps, Characters, Commands, and slug lists for sides / DMs / shares.

Turn them off from Appearance -> Suggestions if the popup gets in the way. Ctrl+Space still opens the list at the caret.

  • Tab, Enter, or click to accept
  • ↑ / ↓ to move
  • Esc to dismiss
  • Shift+Enter inserts a newline without accepting (and still auto-indents)

Common triggers: [ in group chats, <side-conv- / <inject- / DM prefixes, -> and ===, InstallApp(", GetStoryFlag(" / SetStoryNumber(", and ~ for commands.

~ opens the command list right away. Typing GetStoryFlag or GetStoryNumber on its own line (or after ~ ) pastes the full check, choices, else arm, and closing }. The caret sits in the quotes so you can pick a flag or number. {Get or - Get on a condition arm also completes those names.

Warnings

Studio scans the whole story for authoring problems. There is no separate "Problems" panel. Warnings show up in three places:

  1. Conversations list: pills like 1 warning or N warnings. Click to open the IDE at the first hit
  2. Files sidebar: triangle on the row. Hover for the message; click to jump
  3. Editor: red underlines. Hover for the same message
Warnings in the editor, click on the warning to jump to the line in the file
Warnings in the editor, click on the warning to jump to the line in the file

Typical categories:

KindExamples
Compile / Inkinkjs errors after Save & Compile
Missing mediaImage or <injectmic-…> SFX id not in the library
Broken linksUnknown <side-conv-…>, empty <inject-…>, unreachable side
Deprecated / Unity leftovers<side-story-…>, legacy <insta-…>, leftover RunCommand
ModulesTag or InstallApp while the module is off; MIC TAP without InstallApp("mictap")
Unknown namesBad app id, NPC slug, or ~ command
FlagsSet never read (GetStoryFlag, name status, route badges, Skipr, cinematics), or Get never set
Timing / SkiprOdd unlock times on the main chain; Skipr points without a day

Fix warnings before you publish. Many bad tags fail silently at runtime for players. Tag reference: Tags. Externals: External functions.

Indent

Enter keeps the current line's indent and adds one level after a * / + choice, a {, or a - condition: arm. After a lone -> divert it drops back one level so the next * lines up. Knot headers (== name) go back to column 0.

Right-click Reindent (or ⇧⌥F / Shift+Alt+F) rewrites leading spaces only. A selection reindents those lines; a caret reindents the whole file.

ink
== new_phone_1
Great!!

*   Yeah, dropping it in the lake was the final push it needed
    -> new_phone_2

Ink itself ignores indent. This is only so choice blocks are easier to scan.

Shortcuts

The hint under the title matches your OS: ⌘ and ⌥ on Mac, Ctrl and Alt on Windows / Linux.

ShortcutAction
⌘S / Ctrl+SSave & Compile
⌘⇧S / Ctrl+Shift+SSave all dirty tabs
⌘F / Ctrl+FFind in this file (or project Search if focus is elsewhere)
⌘H / Ctrl+HReplace in this file (or project replace)
Tab / ⇧TabIndent / outdent (Tab also accepts autocomplete)
EnterAuto-indent the new line. Accepts autocomplete when the popup is open
⇧⌥F / Shift+Alt+FReindent the selection, or the whole file
F2Rename the knot under the caret, in this file
Ctrl+SpaceOpen autocomplete at the caret
⌘/ / Ctrl+/Toggle // comments
⌥↑ / Alt+↑ · ⌥↓ / Alt+↓Move lines
⇧⌥↑ / Shift+Alt+↑ · ⇧⌥↓ / Shift+Alt+↓Duplicate lines
⌘⇧K / Ctrl+Shift+KDelete line(s)
⌘Z / Ctrl+ZUndo
⌘⇧Z / Ctrl+Shift+Z (or Ctrl+Y)Redo
Click a -> knotOpen Jump to knot (and Rename knot when editable)
-click / Ctrl-clickJump / preview divert, media, inject, or flag

What you can and cannot do

You can

  • Edit every story Ink file in one IDE (main chain, sides, injections, module DMs)
  • Save and compile into Sexter (source stays even if compile fails)
  • Find and replace in one file or across the project
  • Insert media and MIC TAP SFX from the sidebar or right-click menu
  • Use Sexter-aware autocomplete and the cheat sheet
  • Auto-indent on Enter, and Reindent from the right-click menu
  • Rename a knot in this file (right-click Rename knot, or F2)
  • Test the conversation on the real phone UI
  • Rename, reorder the main chain, set unlock day/time
  • Sync with GitHub when the story is Git-linked
  • Work in View only to browse and Test without saving

You cannot

  • Multi-cursor, code folding, or a minimap (this is not VS Code)
  • Edit arbitrary folders on disk. Only this story's Ink tree
  • Compile without saving
  • Set breakpoints or step through Ink like a debugger
  • Rely on Test while the tab is dirty without saving first (it uses the last successful save)

External editors (VS Code, Cursor) are optional for drafting. Studio remains the place that compiles, warns, and attaches media for Sexter.

Related

Official Sexter creator documentation. Older Unity / SmGF folder-mod docs remain at docs.unzipped.games. Creator Corner is for community models and production workflows.