3.2.0 • Published 8 months ago

@pluv/io v3.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Intro

pluv.io allows you to more easily build realtime multiplayer experiences with a fully typesafe API and powerful abstractions as primitives, so that you can focus on building for your end users.

Self-host on Cloudflare Workers or Node.js; or get started on the pluv.io network.

Preview

Create your pluv.io backend

// backend
const io = createIO(
  platformNode({
    context: () => ({ db }),
    crdt: yjs,
  })
);

export const ioServer = io.server({
  getInitialStorage: async ({ context: { db }, room }) => {
    return await db.room
      .findUnique({ where: { id: room } })
      .then((result) => result?.encodedState ?? null);
  },
  router: io.router({
    sendGreeting: io.procedure
      .input(z.object({ message: z.string() }))
      .broadcast(({ message }) => ({
        receiveGreeting: { message }
      }))
  })
});

Create your frontend client with your backend types

// frontend
const types = infer((i) => ({ io: i<typeof ioServer> }));
const io = createClient({
  types,
  initialStorage: yjs.doc((t) => ({
    messages: t.array<string>("messages"),
  })),
  presence: z.object({
    selectionId: z.string().nullable()
  })
});

const {
  event,
  useBroadcast,
  useMyPresence,
  useOthers,
  useStorage
} = createBundle(io);

Use powerful primitives to build realtime features

// react
event.receiveGreeting.useEvent(({ data }) => { /* ... */});
//                                ^? const data: { message: string }

const broadcast = useBroadcast();

broadcast.sendGreeting({ message: "hello world" });
//        ^? const sendGreeting: (data: { message: string }) => void

const [mySelection, update] = useMyPresence((presence) => {
//     ^? const mySelection: string | null
  return presence.selectionId;
});

const others = useOthers((others) => {
//    ^? const others = string[]
  return others.map((other) => other.presence.selectionId);
});

const [
  messages,
// ^? const messages: string[] | null
  sharedType
// ^? YArray<string> | null
] = useStorage("messages");

Documentation

The full documentation is available at pluv.io.

Features

  • ✅ Automatic type-safety
  • ✅ Basic events
  • ✅ Rooms
  • ✅ Authentication
  • ✅ Awareness + Presence
  • CRDTs
  • ⬜ Studio (admin & developer panel)

Runtimes

Frontends Frameworks

Packages

Credits

This software uses the following open source tooling and libraries:

License

MIT

0.43.0

9 months ago

2.0.2

9 months ago

0.36.0

11 months ago

2.0.1

9 months ago

2.0.0

9 months ago

3.2.0

8 months ago

0.44.2

9 months ago

0.44.0

9 months ago

0.44.1

9 months ago

0.40.2

10 months ago

0.40.0

10 months ago

0.40.1

10 months ago

2.3.0

8 months ago

0.37.3

11 months ago

0.37.2

11 months ago

0.37.1

11 months ago

2.3.1

8 months ago

0.37.0

11 months ago

0.33.0

1 year ago

0.37.7

11 months ago

0.37.6

11 months ago

0.37.5

11 months ago

0.37.4

11 months ago

3.1.3

8 months ago

0.38.13

10 months ago

3.1.2

8 months ago

0.38.12

10 months ago

3.1.1

8 months ago

3.1.0

8 months ago

0.38.14

10 months ago

3.1.7

8 months ago

3.1.6

8 months ago

3.1.5

8 months ago

0.38.11

10 months ago

3.1.4

8 months ago

0.38.10

10 months ago

0.41.7

10 months ago

0.41.5

10 months ago

0.41.6

10 months ago

0.41.3

10 months ago

0.41.4

10 months ago

1.0.2

9 months ago

1.0.1

9 months ago

1.0.0

9 months ago

0.41.1

10 months ago

0.41.2

10 months ago

0.41.0

10 months ago

2.2.1

9 months ago

0.38.2

11 months ago

2.2.0

9 months ago

0.38.1

11 months ago

2.2.3

9 months ago

0.38.0

11 months ago

2.2.2

9 months ago

2.2.5

8 months ago

2.2.4

9 months ago

0.34.1

1 year ago

2.2.7

8 months ago

0.34.0

1 year ago

2.2.6

8 months ago

0.38.9

11 months ago

0.38.8

11 months ago

0.38.7

11 months ago

0.38.6

11 months ago

0.38.5

11 months ago

0.38.4

11 months ago

0.38.3

11 months ago

3.0.0

8 months ago

0.42.0

9 months ago

0.39.1

10 months ago

0.39.0

10 months ago

0.35.4

12 months ago

0.35.3

1 year ago

0.35.2

1 year ago

0.35.1

1 year ago

0.35.0

1 year ago

2.1.0

9 months ago

2.2.8

8 months ago

0.32.8

1 year ago

0.32.7

1 year ago

0.32.6

1 year ago

0.32.9

1 year ago

0.32.5

1 year ago

0.32.4

1 year ago

0.32.3

1 year ago

0.32.2

1 year ago

0.32.1

1 year ago

0.32.0

1 year ago

0.30.2

1 year ago

0.30.1

1 year ago

0.30.0

1 year ago

0.31.0

1 year ago

0.29.0

1 year ago

0.27.0

1 year ago

0.28.0

1 year ago

0.26.0

1 year ago

0.20.0

2 years ago

0.19.0

2 years ago

0.25.4

1 year ago

0.25.3

1 year ago

0.25.2

1 year ago

0.25.1

1 year ago

0.25.0

1 year ago

0.23.0

1 year ago

0.21.1

1 year ago

0.21.0

1 year ago

0.18.0

2 years ago

0.24.1

1 year ago

0.24.0

1 year ago

0.22.0

1 year ago

0.17.3

2 years ago

0.17.2

2 years ago

0.17.1

2 years ago

0.17.0

2 years ago

0.16.3

2 years ago

0.16.2

2 years ago

0.16.0

2 years ago

0.16.1

2 years ago

0.15.0

2 years ago

0.14.1

2 years ago

0.14.0

2 years ago

0.13.0

2 years ago

0.11.0

2 years ago

0.10.1

2 years ago

0.12.0

2 years ago

0.11.1

2 years ago

0.10.2

2 years ago

0.12.1

2 years ago

0.10.3

2 years ago

0.12.2

2 years ago

0.12.3

2 years ago

0.10.0

2 years ago

0.7.2

3 years ago

0.7.1

3 years ago

0.5.0

3 years ago

0.4.1

3 years ago

0.4.0

3 years ago

0.7.0

3 years ago

0.6.0

3 years ago

0.4.2

3 years ago

0.3.9

3 years ago

0.3.0

3 years ago

0.3.6

3 years ago

0.3.5

3 years ago

0.2.6

3 years ago

0.3.8

3 years ago

0.3.7

3 years ago

0.3.2

3 years ago

0.3.1

3 years ago

0.3.4

3 years ago

0.2.5

3 years ago

0.3.3

3 years ago

0.2.4

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.0

3 years ago

0.0.0

3 years ago