Skip to content

[ReForge]: Migrate from PocketBase to PostgreSQL + Drizzle #127

Description

@melvinchia3636

Context

PocketBase has been great.

It got LifeForge off the ground quickly, and honestly, a huge portion of the project wouldn't exist today without it.

That said, the more I work on LifeForge, the more I find myself fighting abstractions that probably shouldn't exist in the first place.

A lot of things currently look like:

PocketBase Collection
        ↓
Custom Schema Layer
        ↓
Custom Query Layer
        ↓
Zod
        ↓
API Contract

and I'm starting to wonder if I'm solving problems that have already been solved elsewhere.

Proposed Direction

Move towards:

PostgreSQL
        ↓
Drizzle
        ↓
Zod
        ↓
Forge Contract

and let each tool do what it's good at.

Professional problem, professional solution.

Why?

  • Less custom abstraction
  • Less code to maintain
  • Better type safety
  • Better migration tooling
  • Better database tooling
  • Better support for views and more advanced database features
  • Fewer moments of "why did I build this myself again?"

Why this is becoming more urgent now

At the time I wrote this issue, I genuinely saw the migration as a longer-term direction rather than something that needed to happen before stabilization.

That assessment changed as the modular system matured.

The main reasons are:

  • Module installation and uninstallation need to be fully automated. PocketBase collection/schema changes still require manual intervention through the admin dashboard, which does not fit the lifecycle I want for modules.
  • PocketBase adds an extra abstraction layer in the request path. LifeForge currently goes through the API, then the PocketBase SDK, then PocketBase itself before reaching the database. That adds complexity, latency, and resource usage that no longer feels worth it.
  • The current PocketBase TypeScript wrapper has become fragile technical debt. It exists mostly to compensate for the SDK rather than provide meaningful value, and maintaining it has become increasingly expensive.

So the migration is no longer just about preferring PostgreSQL. It is about removing a layer that is actively getting in the way of an automated, stable, module-friendly backend.

Notes

This isn't happening tomorrow.

PocketBase still works perfectly fine, and there is no urgent need to rip it out just for the sake of it.

This is a long-term architectural direction for LifeForge, and the migration will happen as part of finishing the remaining foundational work for ReForge.

Also, if I ever find myself implementing half an ORM inside LifeForge, please remind me this issue exists. :)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestinfrastructureStuff related to LifeForge's core system architecture

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions