Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/complex-todos-svelte.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ defaults:
working-directory: complex-todos-svelte

jobs:
typecheck:
if: false # temporarily disabled; validate locally like the other checks
name: TypeScript (native Meteor declarations)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: meteorengineer/setup-meteor@v2
- run: meteor npm ci --include=dev
- run: meteor npm run typecheck

lint:
if: false # temporarily disabled
name: Lint (oxlint)
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/task-manager.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ defaults:
working-directory: task-manager

jobs:
typecheck:
if: false # temporarily disabled; validate locally like the other checks
name: TypeScript (native Meteor declarations)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: meteorengineer/setup-meteor@v2
- run: meteor npm ci --include=dev
- run: meteor npm run typecheck

lint:
if: false # temporarily disabled
name: Lint (Biome)
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/tic-tac-toe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ defaults:
working-directory: tic-tac-toe

jobs:
typecheck:
if: false # temporarily disabled; validate locally like the other checks
name: TypeScript (native Meteor declarations)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: meteorengineer/setup-meteor@v2
- run: meteor npm ci --include=dev
- run: meteor npm run typecheck

lint:
if: false # temporarily disabled
name: Lint (oxlint)
Expand Down
41 changes: 25 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ With Meteor 3.4 introducing the Rspack bundler, modern build optimizations, and

Each example doubles as a reference for [community packages](https://docs.meteor.com/community-packages/) and the conventions you'll find in real-world Meteor apps. Several apps push the Rspack bundler further to integrate with the wider JS ecosystem (PostCSS, SWC, Workbox, Lingui, Tailwind v4, and more), replacing legacy Meteor approaches with tooling the rest of the JavaScript world already uses.

The six apps maintained in this repository target Meteor 3.6-beta.3. Task Manager,
Tic-Tac-Toe, and Complex Todos demonstrate native Meteor TypeScript declarations
with a `meteor npm run typecheck` command; Notes Offline uses them for JavaScript
editor support. External examples below retain their independently maintained versions.

The development settings enable the `uws` DDP transport. On Linux systems where
Node 26 reports a missing `GLIBC_2.38` symbol for uWebSockets, set
`packages.ddp-server.transport` to `"sockjs"` in the app's `settings.json`.

## Table of contents

- [Official examples](#official-examples)
Expand Down Expand Up @@ -40,17 +49,17 @@ Each example doubles as a reference for [community packages](https://docs.meteor
- Repository: [meteor/examples/task-manager](./task-manager)
- Demo: https://task-manager.sandbox.galaxycloud.app/
- Why: Task management with CRUD, status workflows, priority filtering, real-time dashboard, and type-safe RPC
- Stack: Meteor, Rspack, React, Meteor-RPC, shadcn/ui, Tailwind CSS v4, React Query, Zod, Mocha, Biome, Playwright
- Last Updated At: Apr/21/2026
- Meteor Version: 3.5.2
- Stack: Meteor, Rspack, TypeScript, React, Meteor-RPC, shadcn/ui, Tailwind CSS v4, React Query, Zod, Mocha, Biome, Playwright
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

### Notes Offline
- Repository: [meteor/examples/notes-offline](./notes-offline)
- Demo: https://notes-offline.sandbox.galaxycloud.app/
- Why: Offline-first PWA notes app with auto-save, markdown, search, tagging, pinning, trash/recovery, import/export, cross-tab sync, per-device scoping, and multi-language UI (en/es/pt)
- Stack: Meteor, Rspack, React, Mantine UI, jam:offline, jam:method, jam:pub-sub, jam:soft-delete, Zod, Workbox, LinguiJS, Mocha, ESLint, Prettier, Playwright
- Last Updated At: Apr/21/2026
- Meteor Version: 3.5.2
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

### Simple Blog
- Repository: [dupontbertrand/meteor-blog](https://github.com/dupontbertrand/meteor-blog)
Expand All @@ -63,25 +72,25 @@ Each example doubles as a reference for [community packages](https://docs.meteor
- Repository: [meteor/examples/tic-tac-toe](./tic-tac-toe)
- Demo: https://tic-tac-toe.sandbox.galaxycloud.app/
- Why: Real-time multiplayer game with room-based matchmaking and live state sync via pub/sub
- Stack: Meteor, Rspack, React, MUI (Material UI), Mocha, oxlint, Playwright
- Last Updated At: Apr/21/2026
- Meteor Version: 3.5.2
- Stack: Meteor, Rspack, TypeScript, React, MUI (Material UI), Mocha, oxlint, Playwright
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

### Parties
- Repository: [meteor/examples/parties](./parties)
- Demo: https://parties.sandbox.galaxycloud.app/
- Why: One of the original Meteor examples showcasing how to build a nice working application with Blaze with very little code, while taking advantage of optimistic updates
- Stack: Meteor, Rspack, Blaze 3, Bootstrap 5, D3.js, RSLint, Playwright
- Last Updated At: Apr/21/2026
- Meteor Version: 3.5.2
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

### Complex Todos (Svelte)
- Repository: [meteor/examples/complex-todos-svelte](./complex-todos-svelte)
- Demo: https://complex-todos-svelte.sandbox.galaxycloud.app/
- Why: Production-grade todo app with modular monolith architecture, rate limiting, caching, migrations, scheduled jobs, and E2E tests
- Stack: Meteor, Rspack, Svelte 5, Skeleton UI, Tailwind CSS v4, jam:method, Zod, oxlint, Cypress, Mocha, MongoDB
- Last Updated At: Apr/21/2026
- Meteor Version: 3.5.2
- Stack: Meteor, Rspack, TypeScript, Svelte 5, Skeleton UI, Tailwind CSS v4, jam:method, Zod, oxlint, Cypress, Mocha, MongoDB
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

### Welcome Meteor Cordova
- Repository: [CloudByGalaxy/welcome-meteor-cordova](https://github.com/CloudByGalaxy/welcome-meteor-cordova)
Expand Down Expand Up @@ -132,9 +141,9 @@ Additional examples covering tutorials, integrations, and specialized use cases.
### NFT Marketplace
- Repository: [meteor/examples/nft-marketplace](./nft-marketplace)
- Why: Decentralized NFT marketplace for minting, listing, and buying NFTs with wallet auth and on-chain transactions
- Stack: Meteor, Rspack, React, Tailwind CSS v4, Polygon, Solidity, Hardhat, Ethers.js, IPFS
- Last Updated At: Mar/14/2026
- Meteor Version: 3.5.2
- Stack: Meteor, Rspack, React, Tailwind CSS v3, Polygon, Solidity, Hardhat, Ethers.js, IPFS
- Last Updated At: Sep/29/2026
- Meteor Version: 3.6-beta.3

## How to add your example?

Expand Down
18 changes: 9 additions & 9 deletions complex-todos-svelte/.meteor/packages
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,25 @@

meteor-base@1.5.2 # Packages every Meteor app needs to have
mobile-experience@1.1.2 # Packages for a great mobile UX
mongo@2.5.1 # The database Meteor supports right now
mongo@2.5.2-beta360.3 # The database Meteor supports right now
reactive-var@1.0.13 # Reactive variable for tracker
tracker@1.3.4 # Meteor's client-side reactive programming library
tracker@1.3.5-beta360.3 # Meteor's client-side reactive programming library

standard-minifier-css@1.10.1 # CSS minifier run for production mode
standard-minifier-js@3.2.0 # JS minifier run for production mode
standard-minifier-js@3.3.0-beta360.3 # JS minifier run for production mode
es5-shim@4.8.1 # ECMAScript 5 compatibility for older browsers
ecmascript@0.19.1 # Enable ECMAScript2015+ syntax in app code
typescript@5.11.1 # Enable TypeScript syntax in .ts and .tsx modules
shell-server@0.7.0 # Server-side component of the `meteor shell` command
hot-module-replacement@0.6.0 # Update client in development without reloading the page
ecmascript@0.19.2-beta360.3 # Enable ECMAScript2015+ syntax in app code
typescript@5.11.2-beta360.3 # Enable TypeScript syntax in .ts and .tsx modules
shell-server@0.7.1-beta360.3 # Server-side component of the `meteor shell` command
hot-module-replacement@0.6.1-beta360.3 # Update client in development without reloading the page

static-html@1.5.0 # Define static page content in .html files
rspack@1.3.0
rspack@1.4.0-beta360.3

#
# Accounts
#
accounts-password@3.3.1
accounts-password@3.3.2-beta360.3

#
# Methods
Expand Down
2 changes: 1 addition & 1 deletion complex-todos-svelte/.meteor/release
Original file line number Diff line number Diff line change
@@ -1 +1 @@
METEOR@3.5.2
METEOR@3.6-beta.3
102 changes: 51 additions & 51 deletions complex-todos-svelte/.meteor/versions
Original file line number Diff line number Diff line change
@@ -1,81 +1,81 @@
accounts-base@3.3.1
accounts-password@3.3.1
allow-deny@2.1.0
autoupdate@2.0.1
babel-compiler@7.15.1
accounts-base@3.4.0-beta360.3
accounts-password@3.3.2-beta360.3
allow-deny@2.1.1-beta360.3
autoupdate@2.0.2-beta360.3
babel-compiler@7.15.2-beta360.3
babel-runtime@1.5.2
base64@1.0.14
binary-heap@1.0.13
boilerplate-generator@2.1.0
base64@1.0.15-beta360.3
binary-heap@1.0.14-beta360.3
boilerplate-generator@2.2.0-beta360.3
caching-compiler@2.0.1
callback-hook@1.8.0
check@1.5.0
callback-hook@1.8.1-beta360.3
check@1.5.1-beta360.3
core-runtime@1.0.0
ddp@1.4.2
ddp-client@3.4.1
ddp-common@1.4.5
ddp-rate-limiter@1.3.0
ddp-server@3.4.0
diff-sequence@1.1.3
dynamic-import@0.7.4
ecmascript@0.19.1
ddp@1.4.3-beta360.3
ddp-client@3.4.2-beta360.3
ddp-common@1.4.6-beta360.3
ddp-rate-limiter@1.3.1-beta360.3
ddp-server@3.4.1-beta360.3
diff-sequence@1.1.4-beta360.3
dynamic-import@0.7.5-beta360.3
ecmascript@0.19.2-beta360.3
ecmascript-runtime@0.8.3
ecmascript-runtime-client@0.13.0
ecmascript-runtime-server@0.11.1
ejson@1.2.0
email@3.2.0
ejson@1.2.1-beta360.3
email@3.2.1-beta360.3
es5-shim@4.8.1
facts-base@1.0.2
fetch@0.2.0
geojson-utils@1.0.12
facts-base@1.0.3-beta360.3
fetch@0.2.1-beta360.3
geojson-utils@1.0.13-beta360.3
hot-code-push@1.0.5
hot-module-replacement@0.6.0
id-map@1.2.0
inter-process-messaging@0.1.3
hot-module-replacement@0.6.1-beta360.3
id-map@1.2.1-beta360.3
inter-process-messaging@0.1.4-beta360.3
jam:method@1.9.1
launch-screen@2.0.1
localstorage@1.2.1
logging@1.3.6
meteor@2.3.1
logging@1.3.7-beta360.3
meteor@2.3.2-beta360.3
meteor-base@1.5.2
meteortesting:browser-tests@1.8.0
meteortesting:mocha@3.3.0
meteortesting:mocha-core@8.2.0
minifier-css@2.0.2
minifier-js@3.3.1
minimongo@2.2.0
minifier-js@3.3.2-beta360.3
minimongo@2.2.1-beta360.3
mobile-experience@1.1.2
mobile-status-bar@1.1.1
modern-browsers@0.2.3
modern-browsers@0.2.4-beta360.3
modules@0.20.3
modules-runtime@0.13.2
modules-runtime-hot@0.14.3
mongo@2.5.1
mongo@2.5.2-beta360.3
mongo-decimal@0.2.0
mongo-dev-server@1.1.1
mongo-id@1.0.9
mongo-id@1.0.10-beta360.3
npm-mongo@6.16.3
ordered-dict@1.2.0
promise@1.0.0
random@1.2.2
rate-limit@1.2.0
ordered-dict@1.2.1-beta360.3
promise@1.0.1-beta360.3
random@1.2.3-beta360.3
rate-limit@1.2.1-beta360.3
react-fast-refresh@0.3.0
reactive-var@1.0.13
reload@1.3.2
retry@1.1.1
routepolicy@1.1.2
rspack@1.3.0
sha@1.0.10
shell-server@0.7.0
socket-stream-client@0.7.1
reload@1.3.3-beta360.3
retry@1.1.2-beta360.3
routepolicy@1.1.3-beta360.3
rspack@1.4.0-beta360.3
sha@1.0.11-beta360.3
shell-server@0.7.1-beta360.3
socket-stream-client@0.7.2-beta360.3
standard-minifier-css@1.10.1
standard-minifier-js@3.2.0
standard-minifier-js@3.3.0-beta360.3
static-html@1.5.0
static-html-tools@1.0.0
tools-core@1.3.0
tracker@1.3.4
typescript@5.11.1
url@1.3.6
webapp@2.3.0
webapp-hashing@1.1.2
tools-core@1.4.0-beta360.3
tracker@1.3.5-beta360.3
typescript@5.11.2-beta360.3
url@1.3.7-beta360.3
webapp@2.3.1-beta360.3
webapp-hashing@1.1.3-beta360.3
zodern:types@1.0.13
20 changes: 16 additions & 4 deletions complex-todos-svelte/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

Same idea as the [simple Svelte tutorial](https://github.com/meteor/meteor3-svelte/tree/3.4-rspack), but not simple. This app covers things you'll actually run into when building something real: module boundaries, validation, rate limiting, caching, migrations, jobs, and proper separation of concerns.

Built with Meteor 3.5.2, Svelte 5, Skeleton UI, and Tailwind CSS v4.
Built with Meteor 3.6-beta.3, Svelte 5, Skeleton UI, and Tailwind CSS v4.

Demo: https://complex-todos-svelte.sandbox.galaxycloud.app/

## Stack

| | |
|---|---|
| Runtime | Meteor 3.5.2 |
| Runtime | Meteor 3.6-beta.3 |
| Frontend | Svelte 5 (runes) |
| UI | Skeleton UI v4 + Tailwind CSS v4, Cerberus theme |
| Build | Rspack |
Expand Down Expand Up @@ -48,7 +48,7 @@ The code follows a [modular monolith](https://github.com/kgrzybek/modular-monoli

```
imports/modules/tasks/
├── database/tasks.js # Collection
├── database/tasks.ts # Collection
├── enums/ # Method names, publication names, rate limits
├── taskRepository.js # Data access (extends BaseRepository)
├── taskService.js # Business logic
Expand All @@ -74,7 +74,7 @@ Methods are controllers: they take a request and return a result, nothing more.

### The UI side

Svelte 5 runes throughout: `$state`, `$derived`, `$props`, no `$:` or `export let` anywhere. A custom `useTracker()` hook bridges Meteor's `Tracker.autorun()` into Svelte writable stores.
Svelte 5 runes throughout: `$state`, `$derived`, `$props`, no `$:` or `export let` anywhere. A custom `useTracker()` hook bridges Meteor's `Tracker.autorun()` into typed Svelte readable stores.

The UI uses Skeleton's compound components where they add value (AppBar for navigation, Dialog for the login modal) and plain Tailwind for the rest (task cards, badges, form inputs).

Expand All @@ -90,6 +90,18 @@ Getting Skeleton UI to work with Rspack required a few tweaks in `rspack.config.

`settings.json` in the project root is for development, `npm start` loads it automatically. For production, point your deployment tool at a different settings file.

## TypeScript

Run `meteor npm run typecheck` after installing dependencies. It runs `meteor types`
to regenerate the Meteor 3.6 package declarations in `.meteor/types`, then `svelte-check`.
The generated files stay out of Git. Run `meteor npm run types` after changing
Meteor packages to refresh editor types. The configuration uses native declarations
without `@types/meteor` or `zodern:types`.

The Svelte components, task collection, and generic Tracker store use TypeScript.
The remaining server and repository modules use JavaScript and can be migrated
incrementally through `allowJs`; `checkJs` is disabled for those modules.

## Deployment

- **[Galaxy](https://galaxycloud.app/)**: `meteor deploy your-app.meteorapp.com`
Expand Down
Loading