Get a ticket

Demoparty · 27–29 November 2026

Raster Harbour

Three days of real-time art at the dark end of the year. Demos, intros, tracked music and pixels on a 14-metre bigscreen, a sauna on the pier, and coffee that never stops.

The old ferry terminal, Pier 4Doors open Friday at 16:00

Get a ticket · €40
Seats
600
Compos
9
Bigscreen
14 m
Sea sauna
1

The competitions

Nine compos. One bigscreen.

Bring a prod or make one on the spot. Deadlines are Saturday at 18:00 unless a card says otherwise, and remote entries are welcome through the party system.

  • Sat 22:30

    PC demo

    Up to eight minutes, any graphics API, one compo machine with a very loud GPU. The main event.

    €1,500 prize pool
  • Sat 22:30

    64k intro

    Everything in one 65,536-byte executable: the music, the meshes, the story.

    €600
  • Sat 22:30

    4k intro

    4,096 bytes. Shaders welcome, sanity optional.

    €600
  • Deadline Sat 14:00

    Oldskool demo

    Amiga, C64, Atari ST and friends, shown on the real hardware. Copper bars mandatory. Not really. Mostly.

    €600
  • Live, Fri and Sat

    Shader showdown

    Two coders, two screens, twenty-five minutes of live coding while a DJ plays. The hall votes.

    A golden keyboard
  • Sat 21:00

    Tracked music

    Patterns and samples: MOD, XM or IT, up to four minutes. Channel count is between you and your tracker.

    €400
  • Sat 21:00

    Streaming music

    Anything that plays, up to four minutes. Headphones in the hall on request.

    €400
  • Sat 16:00

    Pixel graphics

    Hand-placed pixels only. Bring your work stages; the jury loves a timelapse.

    €400
  • Sat 16:00

    Wild

    Plotters, oscilloscopes, knitting machines, a demo on a fridge. If it runs, it competes.

    €400

Timetable

From doors to prizegiving.

Friday 27 Nov

  1. Doors open, registration
  2. Harbour kitchen opens
  3. Opening ceremony
  4. Seminar: a city in 4 kilobytes
  5. Shader showdown heats
  6. Live act on the bigscreen

Saturday 28 Nov

  1. Breakfast, more coffee
  2. Seminar: trackers in 2026
  3. Oldskool deadline
  4. Pixel graphics and wild
  5. Deadline for everything else
  6. Sea sauna opens, until 02:00
  7. Music compos
  8. Intro and demo compos
  9. Shader showdown final

Sunday 29 Nov

  1. Voting closes
  2. Brunch in the kitchen
  3. Everybody tidies the harbour
  4. Prizegiving
  5. Doors close. See you in 2027

The harbour

A ferry terminal, a bigscreen and the sea.

The old terminal on Pier 4 hasn't seen a ferry since 1998. Once a year it sees six hundred sceners instead.

  • The bigscreen

    A 14-metre LED wall in the old departure hall, with 7.1 sound and a compo machine for every platform.

  • Sleeping hall

    Upstairs in the old waiting lounge, quiet from 02:00. Bring a sleeping bag and a mat.

  • Sea sauna

    On the end of the pier, Saturday 20:00 to 02:00. Towels at the info desk. The sea is four degrees.

  • Harbour kitchen

    Soup, smoked salmon and a vegan pot, from noon to midnight. Breakfast on Saturday and Sunday.

  • Coffee

    Around the clock, from a machine old enough to have a name. Ask the info desk what it is.

  • Power and network

    One socket and a gigabit per seat. Bring an extension cable, and please no space heaters.

Tickets

Pay at the door, or before.

Every ticket includes a seat, the sleeping hall and the sauna. Card, cash or a very convincing floppy.

  • Visitor

    €40

    All three days, a seat with power and network, and a spot in the sleeping hall.

  • Remote voter

    €10

    Watch the stream, vote from home, and enter any compo remotely.

  • Under 15

    Free

    With a parent or guardian. The next generation of sceners gets in for nothing.

Questions

First party? Good.

I've never been to a demoparty. Will I fit in?

Yes. Half the hall comes to watch the bigscreen, not to compete. Say hello to your neighbours; they have been waiting all year to show someone their work.

Do I have to bring a computer?

No, but most people do. Every seat has a socket and a wired gigabit. The compo machines are ours, so you don't need to bring one to compete.

Can I come for just one day?

Day tickets are €20 at the door on Saturday and Sunday. Saturday night is when the big compos run.

What's a scroller?

The line of text that waves across the bottom of an old demo, full of greetings and inside jokes. Ours answers questions: try it.

Something else? The info desk is open around the clock, in the scroller at the bottom of the page.

How it works

A chat that starts as a sine scroller

Stand's widget is optional. The scroller along the bottom of this page is a complete Stand chat built from scratch on the Visitor API: it asks Stand who can answer, starts a conversation with the visitor's first message, sends over HTTP, listens on a WebSocket, and recovers after reloads. Everything else is a 1993 demo: a sine scroller, copper bars, a starfield and glenz vectors, drawn with WebGL 2 in a pixel font made for it.

Try it

  1. Watch the scroller for a moment. It waves the info desk's greeting in raster colours, the way cracktros carried their messages. Hover over it and the letters jump. Click anywhere and the party tune starts; the Music button turns it off.
  2. Click the scroller, tap it, or just start typing. Its letters burst into pixels, the copper bars open into a full-screen demo, and the greeting lands as the first line of the chat.
  3. Ask something, like when the doors open or what the coffee machine is called. Replies stream in from the right like a scroller and stop in place, letter by letter.
  4. Press Esc and keep reading. When a reply arrives, the scroller drops what it was saying and delivers the new message. Click it to answer. Reload the page and the chat is still there.
  5. Play with the glenz crystal bouncing in the hero on a wide screen. It keeps time with the music, watches your pointer and spins when you scroll. Bat it a few times, or click it, and it dives into the scroller to open the chat.
This example uses siteId: 'demo', Stand Chat's shared demo site, which works on any domain. Its demo Stand-in plays the info desk from the page's prompt. With your own Site ID, your own Stand-ins answer, and your team can take over.

1. Discover, then start on the first message

stand-client.js is the whole network side, with no UI and no dependencies. It is the Vintage terminal's client, unchanged but for where it saves the chat. It follows the custom chat UI guide, including the parts that are easy to skip: recovering after a reload or a dropped socket, merging messages without duplicates, and never starting two conversations from one click.

// Who can answer on this page? Public: no key, no token.
const offer = await get(`/v1/reps/find?siteId=${siteId}&page=${page}&greetingsEnabled=false`);

// The visitor's first message starts the conversation, once.
const session = await post('/v1/sessions', {
  siteId, page,
  standinProfileId: offer.standinProfileId, // or repId, when a person answers
  initialMessage: text,
  includeOpeningGreeting: true, openingMessage: greeting, // the scroller's words
  prompt, // the info desk persona and the party's facts
});

// Later messages over HTTP, replies and handoffs over a WebSocket.
await post(`/v1/sessions/${id}/messages`, { body, type: 'text', clientMessageId }, token);
const socket = new WebSocket(`wss://api.stand.chat/ws/sessions/${id}?token=${token}`);

The greeting in the scroller is the one the conversation opens with: Stand stores it as the first message, so your team sees what the visitor saw. The prompt gives the demo Stand-in its info desk voice and the party's facts: doors, compos, the sauna.

2. Take the scroller apart

A sine scroller bends every letter column by column along the wave. When you open the chat, strip.js takes a snapshot of every lit pixel on screen. The greeting's pixels are paired with the pixels of the same letters in the chat, each on a curve that bursts outwards before it pulls home, and the rest fall away like sparks. The particles land exactly on the letters' pixels, so the chat's text takes over without a seam.

for (let k = 0; k < n; k++) {
  const [sx, sy] = from[Math.floor((k * from.length) / n)]; // a pixel on the wave
  const [lx, ly] = lit[Math.floor((k * lit.length) / n)]; // the same letter, in the chat
  const tx = target.x + lx * target.size;
  const ty = target.y + ly * target.size;
  // A burst outwards first, then the pull home: a quadratic Bézier.
  const angle = rnd() * Math.PI * 2;
  particles.push({ sx, sy, tx, ty, cx: sx + Math.cos(angle) * burst, cy: sy + Math.sin(angle) * burst });
}

3. Write like a scroller

Replies don't type out. Each letter leaves the right edge in reading order, rides the sine wave, and stops where it belongs, so a reply arrives as a little scroller that comes to rest as text. Long replies speed up; Enter on an empty line lands everything at once.

const emit = glyph.order / rate; // when the letter leaves the right edge
const distance = startX - x; // how far it flies
const land = emit + distance / speed; // when it gets there
if (age < emit) continue; // not yet
if (age < land) {
  const left = distance - (age - emit) * speed;
  x += left; // still flying,
  y += Math.sin(x / wavelength - now * 7) * amplitude * Math.min(1, (left / distance) * 2.5); // on the wave
}

4. Draw it like it's 1993

Nearly everything is a sprite, drawn in a few instanced WebGL 2 calls a frame: letters, copper bars, stars, particles. The pixel font is drawn in text in font.js, one glyph per little grid, and accented letters are composed from a letter and a mark, so Mäkinen and Łódź work too. Anything the font doesn't have, like emoji or Japanese, the browser draws at twice the font's resolution. The glenz vectors are the real thing: 24 see-through triangles, rotated on the CPU and drawn at the chunky virtual resolution.

const SHEETS = [
  [2, `
a     b     c     d     e     f    g
..... #.... ..... ....# ..... ..## .....
..... #.... ..... ....# ..... .#.. .....
.###. ####. .###. .#### .###. #### .####
....# #...# #.... #...# #...# .#.. #...#
.#### #...# #.... #...# ##### .#.. #...#
#...# #...# #.... #...# #.... .#.. #...#
.#### ####. .###. .#### .###. .#.. .####
..... ..... ..... ..... ..... .... ....#
..... ..... ..... ..... ..... .... .###.
`],
  // …
];

5. Let the page play along

The hero's glenz is part of the party site, not of the chat, so the two talk through events. When the glenz is clicked, or batted three times in three seconds, intro.js hands the chat its position and spin. The chat takes over: the glenz hops and drops onto the scroller, the impact bursts the letters away from where it hit, and the glenz rises to its place beside the chat. When the chat closes, the glenz drops back into the hero.

dispatchEvent(new CustomEvent('scroller-chat:open', {
  detail: { glenz: { x, y, r, a, b, c } }, // where it is on screen, in CSS pixels, and its rotation
}));
addEventListener('scroller-chat:closed', () => dropBackIn());

The music keeps time for everything: music.bar() says how far the tune is through the current bar, so the glenz lands every bounce on the first beat, and music.level() flares the copper bars on the drums.

The files

Good to know

How this was made

This example is nearly a one-shot. Claude Opus 5.5, with max effort, in Claude Code, built it in one session from the prompt below and one follow-up: the pixel font, the effects, the tune and the party. It read the custom chat UI guide, tested the info desk's voice in real conversations with Stand's demo site, and checked its own work in headless Chrome, from screenshots at desktop and phone sizes to a recording of the music.

Now that AI writes the front end, a chat can look like anything your site's world calls for, even a scroller from 1993. Stand's Visitor API keeps the conversation, the AI Stand-in and your team behind it.

The prompt, lightly edited

Think of Future Crew's Unreal and other legendary demos of that era. Could some of their visual effects make a fun experience that transforms into a chat? Imagine such an effect and build an example for this repo: - A creative website on a fitting topic - A demo effect that captures the attention and transforms into a chat

The follow-up

This is cool! Have the music on by default on the page. The track is awesome. Have the bouncing shape react to the cursor and scrolling, subtly. If the visitor seems to play with it on purpose, have it open the chat, and have it take part in that animation.

If you try this yourself

  • Link the custom chat UI guide. It is written as a contract for coding agents, with a brief to paste.
  • Start on the demo Site ID, so the agent can hold real conversations while it builds and tests, then switch to yours.
  • Keep the network client apart from the effect. stand-client.js here is the one from the Vintage terminal; only the presentation is new.
  • Ask for the whole effect to be drawn by code, and let the agent see it: a pixel font written as text is easy for a model to draw, render, check and fix.

Copy this example

npx degit standchat/examples/raster-harbour my-scroller