Repository navigation
π Devlog #2 β v1.4.0 + v1.4.1: Production-Grade Infrastructure Without the Weight #23
flamehaven01
announced in
Devlog
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hello everyone,
this is the developer of Flamehaven FileSearch.
In Devlog #1, I explained how v1.3.1 introduced semantic search without turning the project into an ML monster.
v1.4.0 + v1.4.1 is the next evolution:
a transition from "search engine" to production-ready platform.
But here's the challenge:
How do you add enterprise-grade features
without betraying the project's core philosophy of being lightweight and self-hostable?
This devlog explains how we solved that problem.
π― The Core Question Behind v1.4.x
After v1.3.1 shipped semantic search, users started asking harder questions:
These aren't feature requests.
They're architectural challenges.
The real question became:
βοΈ The Fundamental Tension
Let me be honest about the design conflict we faced:
Enterprise features typically require:
But Flamehaven's core values are:
These goals directly oppose each other.
Most projects choose one or the other.
We chose both β but only by being extremely selective.
π§ The Key Design Principle
Production features must be optional and composable.
This principle led to four rules:
Everything in v1.4.x follows from these rules.
ποΈ How v1.4.0 Achieves Production Scale
1οΈβ£ PostgreSQL Backend (Opt-In)
The Problem:
SQLite is fast and simple, but it doesn't scale to:
The Solution:
Make PostgreSQL completely optional with zero code changes:
Why this works:
Trade-off we accepted:
Maintaining two storage backends is harder.
But forcing PostgreSQL on everyone would violate our core values.
2οΈβ£ HNSW Vector Indexing (pgvector)
The Problem:
Linear vector search (O(n)) breaks down at 10,000+ documents.
The Solution:
Use pgvector's HNSW (Hierarchical Navigable Small World) index:
Why this matters:
The hidden complexity:
HNSW indexes require tuning (
m,ef_construction,ef_search).We provide sane defaults but expose controls for advanced users.
What we rejected:
Switching to dedicated vector databases (Pinecone, Weaviate).
Reason: That would break self-hosting simplicity.
3οΈβ£ Multimodal Search (Text + Images)
The Problem:
Users wanted to search images alongside documents.
The Wrong Approach:
Integrate heavy vision models (CLIP, etc.) into the core.
The Right Approach:
Create a separate, optional endpoint with vision delegate pattern:
Why this works:
Implementation detail:
We use a vision delegate system:
What we didn't do:
Bundle PyTorch or TensorFlow.
That would destroy cold start time.
4οΈβ£ OAuth2/OIDC Integration
The Problem:
Enterprises need SSO integration (Google, Okta, Auth0).
The Solution:
Support JWT validation alongside API keys:
Why both?
The nuance:
OAuth2 is additive, not replacement.
API keys remain the primary auth method.
π§ How v1.4.1 Adds Operational Intelligence
v1.4.0 added scale.
v1.4.1 adds observability and control.
1οΈβ£ Usage Tracking & Quotas
The Problem:
Production deployments need to track:
The Solution:
Lightweight SQLite-based usage tracker:
Why SQLite here?
Usage data is write-heavy, local, and doesn't need distribution.
Using PostgreSQL for this would be overkill.
Trade-off:
Limited to single-instance deployments.
Multi-instance requires Redis or PostgreSQL (future work).
2οΈβ£ Admin Usage APIs
The Problem:
Operators need visibility into usage patterns.
The Solution:
Four new admin endpoints:
GET /api/admin/usage/detailed GET /api/admin/usage/quota/{key_id} POST /api/admin/usage/quota/{key_id} GET /api/admin/usage/alertsWhy this matters:
Operators can answer questions like:
Security consideration:
All endpoints require
X-Admin-Keyheader.No API key can access usage data for other keys.
3οΈβ£ pgvector Maintenance Operations
The Problem:
Vector indexes degrade over time:
The Solution:
Expose maintenance operations:
When to run these:
What we documented:
Full tuning guide:
docs/PGVECTOR_TUNING.md4οΈβ£ Circuit Breaker Pattern
The Problem:
Database failures cascade into total system failure.
The Solution:
Circuit breaker for database connections:
Why this matters:
System degrades gracefully instead of crashing.
Trade-off we accepted:
Adds state machine complexity.
But production systems must handle transient failures.
π§ͺ Why This Required Architectural Discipline
To ship v1.4.x without breaking everything, we had to:
This wasn't visible in the UI β but it was essential.
You can't add enterprise features
without a foundation designed to handle them.
π What This Unlocks Going Forward
Because of v1.4.x architecture, future work becomes possible:
Immediate (v1.5.x)
Medium-term (v2.0)
Long-term (v2.x+)
All without rewriting the system again.
π What We Explicitly Rejected
To keep this release focused, we said no to:
β Bundled ML models β Violates lightweight principle
β Forced PostgreSQL β Breaks simple deployments
β GraphQL API β REST is simpler and works
β Built-in UI framework β Admin dashboard stays minimal
β Microservices architecture β Monolith is appropriate here
Each "no" was harder than each "yes."
π§ Why This Matters for the Project's Direction
After v1.4.1, Flamehaven FileSearch is no longer just:
It is becoming:
And it does so by being radically modular.
π Real-World Impact
Since v1.4.0 shipped, we've seen:
These aren't benchmarks.
These are actual production deployments.
π Devlog #3 Preview
Possible next topics:
π Final Thoughts
v1.4.0 + v1.4.1 was the hardest release yet.
Not because the code was hard β
but because every feature was a philosophical choice.
Do we stay lightweight?
Do we serve production users?
The answer we arrived at:
Both β but only by being disciplined about what we say yes to.
As always β feedback, questions, and criticism are welcome.
I read everything.
Next: Looking forward to v1.5.x and the road to v2.0.
β Flamehaven Core Team
December 28, 2025
All reactions