Skip to main content

Vue Example

This project is a note-taking app template built with Vue, TypeScript, and Tailwind CSS, designed to demonstrate integration with Juno for app development. It showcases authentication, data storage, and file storage using Juno's Satellite container.

You can scaffold it using the following command, or browse the source code:

npm create juno@latest -- --template vue-example

Source: github.com/junobuild/create-juno/templates/vue-example


Folder Structure

vue-example/
├── public/ # Static assets
├── src/
│ ├── components/ # Vue UI components (Auth, Table, Modal, Banner, etc.)
│ ├── stores/ # Pinia stores for auth, etc.
│ ├── types/ # TypeScript types (e.g., note.ts)
│ ├── App.vue # Main app component
│ ├── main.ts # Vue entry point
├── juno.config.ts # Juno Satellite configuration
├── package.json # Project dependencies and scripts
├── vite.config.ts # Vite build configuration
├── README.md # User-facing documentation
└── ... # Other config and build files

Key Features

  • Juno Integration: Uses Juno's Satellite for authentication, Datastore, and Storage.
  • Authentication: Login/logout flow.
  • Notes Collection: Users can create, view, and delete notes (text, with optional file URL).
  • Images Collection: Supports file storage for images.
  • Responsive UI: Built with Tailwind CSS for modern styling.
  • Banner: Warns if the Satellite is not configured for local development.

Main Components

  • src/App.vue: Main app component, initializes Juno Satellite, wraps content in authentication.
  • components/: Contains UI and logic for authentication, notes table, modal, banner, etc.
  • stores/auth.store.ts: Pinia store for authentication state.
  • types/note.ts: TypeScript interface for notes.

Data Structure

  • Note (src/types/note.ts):
export interface Note {
text: string;
url?: string;
}

How to Run

  1. Install dependencies:
npm install
  1. Start Juno local emulator:
important

Requires the Juno CLI to be available npm i -g @junobuild/cli

juno dev start
  1. Create a Satellite for local dev:
  1. Create required collections:
  1. Start the frontend dev server (in a separate terminal):
npm run start

Juno-Specific Configuration

  • juno.config.ts: Defines Satellite IDs for development/production, build source, and predeploy steps.

Production Deployment

  • Create a Satellite on the Juno Console for mainnet.
  • Update juno.config.ts with the production Satellite ID.
  • Build and deploy:
npm run build
juno deploy

Notes

  • The app is intended as a starting point for Juno-based projects.
  • All logic is in TypeScript and Vue components/stores.
  • The app is fully client-side (Server Side Rendering is not supported yet) and interacts with Juno via the Satellite container.

Juno SDK Used

The following functions from @junobuild/core are used in this example:

FunctionPurpose/DescriptionWhere Used (File/Component)Juno Docs/Source Reference
initSatelliteInitialize Juno Satellite containersrc/App.vueInitialization
authSubscribeSubscribe to auth state changessrc/stores/auth.store.tsSubscription
signInSign in usersrc/components/Login.vueSign-in
signOutSign out usersrc/components/Logout.vueSign-out
listDocsList documents in a collectionsrc/components/Table.vueList documents
setDocCreate or update a documentsrc/components/Modal.vueAdd a document
deleteDocDelete a documentsrc/components/Delete.vueDelete a document
uploadFileUpload a file to storagesrc/components/Modal.vueUpload asset
deleteAssetDelete a file from storagesrc/components/Delete.vueDelete asset