May 16, 2025 · essay
My First Quasar App was a "Hello World" Adventure
Taking the first steps with the Quasar Framework, Vite, and TypeScript to build a not-so-simple "Hello World" SPA.
The short version
- LLM
- My LLM assistant (Google Gemini 2.5 Pro Preview 05-06) was invaluable in this project and 100% of the code was written with its help.
- Why
- To dive into the Quasar Framework and see what all the cross-platform fuss is about by building a simple "Hello World" app.
- Challenge
- Navigating initial setup, TypeScript's delightful strictness, and understanding Quasar's plugin system within Vue 3's Composition API.
- Outcome
- A surprisingly feature-rich SPA with routing, navigation, reactive inputs, cards, dropdowns, a data table, and even fullscreen toggles!
- AI approach
- My trusty LLM assistant acted as a (sometimes slightly confused) pair programmer, guiding through setup, code generation, and debugging Quasar-specific quirks.
- Learnings
-
Quasar CLI is powerful, component integration is smooth
(mostly!), and
quasar.config.ts holds the keys to the kingdom (especially for plugins).
Why this project? To boldly go where
many Vue developers have gone before: into the Quasar
Framework! The goal was to get a feel for its CLI,
component system, and overall developer experience by
building a "simple" Single Page Application.
The Challenge(s): As with any first
encounter with a new framework, especially one as
comprehensive as Quasar and with TypeScript's watchful
eye, there were a few delightful hurdles. Getting the
initial project setup with Vite and TypeScript was
smooth thanks to the Quasar CLI. The real "fun" began
with TypeScript's strictness around plugin and
directive handler typings. My AI pair programmer
(that's you reading this, probably, or maybe it's me,
the LLM) and I went through a few rounds to get
$q.notify and touch directive event payloads perfectly
typed and functional. A key lesson: quasar.config.ts
and its framework.plugins array is not to be trifled
with if you want your default plugins to show up!
The Outcome: What started as a "Hello
World" quickly evolved into a mini feature showcase!
By the end of the session, quasar-step1 (our
creatively named project) boasted:
- A main page displaying the classic greeting.
-
Reactive user input with QInput that updated other
parts of the UI.
-
A QCard to neatly display information, including a
live-updating clock using Quasar's date utils.
- A QSelect component for dropdown selections.
-
A basic QTable rendering static data, complete with
sortable columns.
-
Multi-page navigation (/, /home, /about) handled by
Vue Router, with links correctly set up in a QDrawer
using a reusable EssentialLink component.
-
Integration of Quasar plugins like AppFullscreen and
Notify.
It's pretty impressive what Quasar packs out of the
box!
Key Learnings:
-
The Quasar CLI (@quasar/app-vite) is a fantastic
tool for scaffolding and development. quasar new
page is a handy shortcut.
-
Quasar's component library is extensive and
generally intuitive. Props like color, icon, label,
and design variations (filled, flat, bordered) are
consistent.
-
Understanding the quasar.config.ts file, especially
the framework section (for plugins) and
build.vueRouterMode, is crucial. Leaving
framework.plugins as an empty array means "no
default plugins for you!" – a lesson learned.
-
Vue Router integration is straightforward once the
links (:to prop in QItem or EssentialLink) are
correctly configured. My initial use of href for
internal links was a classic SPA pitfall.
-
TypeScript, while sometimes demanding precision
(especially with event/directive handlers),
ultimately leads to more robust code. The vue-tsc
errors, though initially frustrating, guided us to
correct typings.
-
For Quasar plugins within component script setup,
$q.pluginName is the way to go. For directive
handlers or tricky contexts, directly importing and
using the plugin's static methods (like
Notify.create()) can be more reliable if
$q.pluginName acts up.
The "AI" Approach (with a wink): My
development partner for this session was a rather
helpful Language Model. It provided code snippets,
explained concepts, and patiently helped debug those
pesky type errors. Sometimes it even inserted
JavaScript comments into HTML templates, which, as we
discovered, Vue isn't too fond of. A good reminder
that even AI needs a good code review!
Overall, a very productive first dive into Quasar. The
framework feels powerful and well-equipped for
building sophisticated UIs quickly. Next up: maybe
exploring Pinia for state management or trying out
another build mode!