3.2.0 • Published 5 months ago

@pluv/io v3.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 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

6 months ago

2.0.2

6 months ago

0.36.0

8 months ago

2.0.1

6 months ago

2.0.0

6 months ago

3.2.0

5 months ago

0.44.2

6 months ago

0.44.0

6 months ago

0.44.1

6 months ago

0.40.2

7 months ago

0.40.0

7 months ago

0.40.1

7 months ago

2.3.0

5 months ago

0.37.3

8 months ago

0.37.2

8 months ago

0.37.1

8 months ago

2.3.1

5 months ago

0.37.0

8 months ago

0.33.0

11 months ago

0.37.7

8 months ago

0.37.6

8 months ago

0.37.5

8 months ago

0.37.4

8 months ago

3.1.3

5 months ago

0.38.13

7 months ago

3.1.2

5 months ago

0.38.12

7 months ago

3.1.1

5 months ago

3.1.0

5 months ago

0.38.14

7 months ago

3.1.7

5 months ago

3.1.6

5 months ago

3.1.5

5 months ago

0.38.11

7 months ago

3.1.4

5 months ago

0.38.10

7 months ago

0.41.7

7 months ago

0.41.5

7 months ago

0.41.6

7 months ago

0.41.3

7 months ago

0.41.4

7 months ago

1.0.2

6 months ago

1.0.1

6 months ago

1.0.0

6 months ago

0.41.1

7 months ago

0.41.2

7 months ago

0.41.0

7 months ago

2.2.1

6 months ago

0.38.2

8 months ago

2.2.0

6 months ago

0.38.1

8 months ago

2.2.3

6 months ago

0.38.0

8 months ago

2.2.2

6 months ago

2.2.5

6 months ago

2.2.4

6 months ago

0.34.1

10 months ago

2.2.7

5 months ago

0.34.0

10 months ago

2.2.6

5 months ago

0.38.9

8 months ago

0.38.8

8 months ago

0.38.7

8 months ago

0.38.6

8 months ago

0.38.5

8 months ago

0.38.4

8 months ago

0.38.3

8 months ago

3.0.0

5 months ago

0.42.0

6 months ago

0.39.1

7 months ago

0.39.0

7 months ago

0.35.4

9 months ago

0.35.3

9 months ago

0.35.2

10 months ago

0.35.1

10 months ago

0.35.0

10 months ago

2.1.0

6 months ago

2.2.8

5 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

1 year ago

0.19.0

1 year 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

1 year 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

2 years ago

0.7.1

2 years ago

0.5.0

2 years ago

0.4.1

2 years ago

0.4.0

3 years ago

0.7.0

2 years ago

0.6.0

2 years ago

0.4.2

2 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