Project Structure in Umami codebase - Part 1.4
Inspired by BulletProof React, I applied its codebase architecture concepts to the Umami codebase.
This article focuses on files and folders structure to understand the project structure and how its organized.
Prerequisites
-
Project Structure in Umami codebase — Part 1.0
-
Project Structure in Umami codebase — Part 1.1
-
Project Structure in Umami codebase — Part 1.2
-
Project Structure in Umami codebase — Part 1.3
In this part 1.4, we review the following folders in Umami codebase.
-
store.
-
tracker.
store folder
store folder has the following files:

In the store/app.ts, you will find the following symbols:

So Umami also uses Zustand to manage client side state. We also saw context folder in hooks folder. So Umami uses a combination of context and Zustand to manage its state.
tracker folder
In the tracker folder, you will find the following files:

tracker/index.js has the following symbols:

I found this track related code.
const track = (name, data) => {
if (typeof name === 'string') return send({ ...getPayload(), name, data });
if (typeof name === 'object') return send({ ...name });
if (typeof name === 'function') return send(name(getPayload()));
return send(getPayload());
};
and in the docs, you will find the following:

In this case, this is an object.
Conclusion
We reviewed the store folder and learnt that Umami uses a combination of Context and the Zustand to manage its client side state. We also reviewed the track function in tracker/index.js and found a relevant example in the documentation. May be it would be exercise for you check how other symbols translate to usecases found in the documentation ;)
About me:
Hey, my name is Ramu Narasinga. I study codebase architecture in large open-source projects.
Email: ramu.narasinga@gmail.com
I spent 200+ hours analyzing Supabase, shadcn/ui, LobeChat. Found the patterns that separate AI slop from production code. Stop refactoring AI slop. Start with proven patterns. Check out production-grade projects at thinkthroo.com
References:
-
https://github.com/umami-software/umami/blob/master/src/store/app.ts
-
https://github.com/umami-software/umami/tree/master/src/store
-
https://github.com/umami-software/umami/blob/master/src/tracker/index.js#L191