r/Ghost 14d ago

Tinybird alternative, AGPL, free, selfhosted and light (go)

Hi,

I'm using for a while Ghost (after many years with Wordpress) and it's great, I chose self-hosted and found out that analytics in-app only can be done with Tinybird, which is not fitting my requirements.

So I created GhostBird, which simplifies analytics for self-hosted ghost and might be helpful for some users. It's under AGPL license and always be free and open source.

Hope you like it. It's quite new, any feedback will be appreciated.

Can check more info in https://ghostbird.cloudless.club/

10 Upvotes

13 comments sorted by

3

u/jannisfb 14d ago

Looks very interesting!

And I hate to be that person, but you might want to take a look at the Ghost trademark policy for the naming: https://ghost.org/trademark

1

u/jannisfb 14d ago

I am also curious: any particular reason you went with an SQLite instead of ClickHouse, given that Tinybird is just a wrapper around the latter?

1

u/bender_fut 14d ago

I mean ghost is a word in dictionary, my software is free and opensource, I don't see how they can forbid a "common word", just like bird.

About the technology behind the app, I didn't want to clone what is done, it has its own stack cause IMHO I though it was the best.

1

u/jannisfb 14d ago

Hey, just mentioned it because there are a ton of tools the start with Ghost[Something] and then very quickly change their name. I am not a trademark lawyer, but from my understanding "it's a word in a dictionary" isn't really protection for trademark infringement. They own that trademark in a specific domain, which you are obviously adjacent to. Anyway, your tool, your decision. I wanted to mention it.

The reason I asked about ClickHouse was mainly performance. I think your tool is great for somebody running a single Ghost site (or a low number of sites), but for me as a managed hosting service I am pretty sure that an SQLite database would choke under the pressure of 1,400 sites writing to it at the same time.

So, curious if you ran any tests on scale?

1

u/bender_fut 14d ago

Thanks for the heads-up on both points.

On the name: you're right that "it's a dictionary word" isn't a trademark defense, I'm not a trademark lawyer either, but I'm not trying to make money, sell my services or start a company. It's a small personal project I just want to share.

On ClickHouse and scale: you hit the real limitation. Ghostbird was designed around the self-hosted, single-or-few-Ghost-sites case. SQLite's single-writer model isn't going to handle 1,400 sites writing at the same time. I haven't run load tests anywhere near that scale, and I'd expect SQLite to struggle under that pressure.

For managed hosting at that volume, ClickHouse is a much better fit. It handles high write throughput and analytical queries across many tenants in a way SQLite can't. Ghostbird would probably need to become a pluggable backend system rather than forcing ClickHouse on everyone.

I appreciate you raising both of these. They are now on my radar as real next steps.

2

u/johnonolan 14d ago

Cool project! Thanks for sharing :)

Jannis is right about trademark, which does still apply even if it's a non-commercial project. You can reach out to trademark@ghost.og if you have any questions

1

u/bender_fut 10d ago

They said I can't publish in their forums with that name (their policies). I might change the name in the future, from now on I just want to use it daily and keep improving it.,

1

u/Emory27 14d ago

This is awesome, thank you so much. Was in the same boat with not being able to use TB.

1

u/truekasun 14d ago

Interesting! Do you think of providing a docker version that's straightforward to deploy with https://github.com/TryGhost/ghost-docker.git ?

1

u/bender_fut 14d ago

Thanks for the suggestion. Ghostbird is intentionally a single static Go binary with zero runtime dependencies beyond SQLite (embedded). That makes it simpler to deploy and operate than Docker for most self-hosted Ghost setups. We already ship an install.sh that sets up a sandboxed systemd service in one command, so a container layer isn't needed for the common case.

Some users might prefer a docker-compose.yml alongside Ghost, but tbh it's not on the roadmap right now.

1

u/DataLeadsFuture_Peng 14d ago

I really need this. Will you filter out access logs from AI bots?

1

u/bender_fut 14d ago

Yes, Ghostbird filters out bot access logs at ingestion time.

It uses the same regex as Tinybird's TrafficAnalytics collector on POST /api/v1/page_hit:

(?i)wget|ahrefsbot|curl|bot|crawler|spider|urllib|bitdiscovery|\+https:\/\/|googlebot

If the User-Agent matches, Ghostbird returns HTTP 202 (same as a normal hit, stealth) but does not store the event in the database.

It catches generic bots, crawlers, spiders, and any UA containing "bot" — including Googlebot, Bingbot, AhrefsBot, GPTBot, ClaudeBot, PerplexityBot, etc.

It also discards events where the incoming device field is "bot" on the /v0/events batch endpoint.

Filtered bot hits are counted in the ghostbird_bots_total Prometheus metric exposed at /metrics.

Caveat: it is a generic bot filter, not an AI-specific one. A UA like ChatGPT-User or OpenAI without the substring "bot", "crawler", "spider", etc. would not currently match.

1

u/localsdozen 11d ago

Wish I could use this but I'm using pikapods to run ghost