# Midday (midday-ai/midday): a self-hostable freelancer finance stack in TypeScript

> Midday bundles time tracking, invoice matching, file storage and a financial assistant into one Bun and Next.js monorepo. It is AGPL-3.0 for non-commercial use, and the README points commercial deployments at a separate licence.

**midday-ai/midday** — Invoicing, Time tracking, File reconciliation, Storage, Financial Overview & your own Assistant made for Freelancers

- Repository: https://github.com/midday-ai/midday
- Website: https://midday.ai
- Stars: 15,051 · Forks: 1,890
- Language: TypeScript
- License: AGPL-3.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/midday-ai-midday

## The freelancer back office problem Midday is aimed at

A solo consultant usually runs five tools that do not talk to each other: a timer, an invoice generator, a folder of PDF receipts, a bank feed, and a spreadsheet the accountant asks for in January. Midday's README describes the project as an all-in-one tool for freelancers, contractors, consultants and solo entrepreneurs, and the feature list maps almost one to one onto that stack. Time Tracking covers live tracking of projects. Magic Inbox matches incoming invoices or receipts to the correct transactions. Vault stores contracts and agreements. Seamless Export packages financial data as CSV for accountants. Assistant answers questions about spending and finds documents. The target user is a single operator, not a finance department: there is no approval chain, no multi-entity consolidation, and no mention of purchase orders anywhere in the README. That narrowness is the point. If you are a two-person studio with a bookkeeper, the CSV export is the seam you care about.

## What the monorepo actually contains

The repository is a Bun workspace monorepo. The root package.json declares workspaces for packages/* and apps/*, pins packageManager to bun@1.3.11, and drives everything through Turbo: build, dev, test and lint are all turbo subcommands. The README's app architecture section lists React, TypeScript, Next.js, Supabase, Shadcn, Tauri, Expo and TailwindCSS, so the same product surface spans a web dashboard, a desktop shell via Tauri, and a mobile client via Expo. Hosting is split by concern: Supabase handles database, storage, realtime and auth; Railway runs the API, worker and dashboard; Vercel serves the website; Cloudflare fronts the engine and CDN. A services list names Trigger.dev for background jobs, Resend for transactional email, GoCardLess, Plaid and Teller for bank connections, Typesense for search, and both Gemini and OpenAI. The practical consequence is that a full local run is not a single container. You are standing up Supabase plus the app processes, and bank feeds depend on third-party credentials you have to obtain yourself.

## Data flow from receipt to matched transaction

Magic Inbox is the mechanism worth understanding before you commit, because it is the part that touches money data. The README states that it automatically matches incoming invoices or receipts to the correct transactions. The supporting services give the shape of that pipeline: Supabase stores files and rows, Trigger.dev runs background jobs, and Typesense provides search over the indexed content. The assistant layer sits on top, with both Gemini and OpenAI listed, and the README says it gives insights into financial situations, helps you understand spending patterns, cut costs and find documents. What the README does not document is the matching algorithm, the confidence threshold at which a match is accepted, or what happens when two transactions look alike. Treat the matching as a suggestion you review, not as a ledger you trust blindly. The Vault feature is simpler: it is described as secure storage for contracts and agreements, and it inherits whatever access rules Supabase auth enforces.

## Running Midday locally and taking a first pass at the CLI

The README does not contain installation steps. It says only that documentation for local development is being worked on at https://docs.midday.ai, so that is where you should look before running anything. What the repository itself confirms is the toolchain: Bun 1.3.11 is the pinned package manager, and the root scripts are Turbo targets. Once dependencies are installed, the development entry point is the dev script, which runs every workspace in parallel. To bring up only the dashboard during frontend work, the root package.json defines a filtered variant. The repository also exposes a CLI entry point at packages/cli/bin/midday.ts, run through Bun rather than through a published binary.

## Scoping work to one app instead of the whole monorepo

Running every workspace at once is heavy, and the root scripts let you narrow it. The filtered scripts are the ones to use when you only care about one surface. Note that the dashboard, website, API and desktop each have their own filter target, and that the jobs script is separate from the API even though both are backend concerns. If a filtered run fails, the cause is usually a missing environment variable for the service that app talks to, since Supabase, Resend and the bank connectors are all external.

## A CLI entry point you can invoke directly

The cli script points straight at a TypeScript file rather than a compiled artifact, which means it runs under Bun with no build step. That is convenient for scripting and awkward for distribution: there is no documented npm package or standalone binary in the README, so anyone you hand the CLI to needs the repository and Bun installed. The README does not describe the commands the CLI accepts, so treat this as an entry point to explore rather than a documented interface.

## Where Midday is the wrong tool

The clearest limitation is stated by the project itself. Invoicing is listed as an upcoming feature, described as something that will enable users to create web-based invoices, collaborate in real time and synchronize projects. For a product whose one-line description includes invoicing, that is a significant gap: if billing clients is the job you need done this week, Midday is not the tool yet. There is a second boundary in the licence. The README says the project is licensed under AGPL-3.0 for non-commercial use, and directs commercial use or deployments requiring a setup fee to engineer@midday.ai for a commercial licence. That is an unusual framing for an OSI licence, and it means the licence file and the README are worth reading together rather than assuming standard AGPL terms. Third, the bank connections run through GoCardLess for the EU, Plaid for Canada and the US, and Teller for the US, so coverage outside those regions is not described. Finally, the maintenance picture: the last push to the default branch was on 2026-06-13, and the most recent release in the repository is midday-v0.5.0 from 2026-02-15. That is a real gap between release cadence and commit activity, and the version number tells you this is pre-1.0 software.

## How Midday differs from a plain accounting package

The obvious alternative for a freelancer is an established double-entry accounting tool such as GnuCash or a hosted bookkeeping service. The difference in approach is what each one treats as the source of truth. Accounting packages are built around a chart of accounts and a ledger: every entry is a journal line, and reporting is a query over that ledger. Midday is built around transactions and documents, with Supabase as the store and an assistant layer that reads spending patterns and retrieves files. Time tracking and the Vault sit alongside the money data rather than being separate products, which is the integration argument. The trade-off is depth: Midday's README does not mention a chart of accounts, journal entries, VAT returns or reconciliation reports, and its accountant-facing output is CSV export. If your accountant needs a trial balance, the CSV is the handoff point, not a report Midday generates for you.

## Licence and the cost of keeping a fork current

The README states AGPL-3.0 for non-commercial use and asks commercial users to contact engineer@midday.ai for a commercial licence. This is not legal advice, and the wording is worth taking to someone who can give it: an AGPL grant with a non-commercial qualifier is not the same as stock AGPL-3.0, and the README does not define what counts as commercial. On upgrade cost, the repository is a Turbo monorepo with a pinned Bun version and a large catalog of pinned dependencies in the root package.json, including React 19.2.4, TypeScript ^6.0.2, Hono 4.12.9 and ai 6.0.141. Pinned versions make builds reproducible but mean upgrades arrive as coordinated bumps across workspaces, and the release history shows three releases between 2025-06-26 and 2026-02-15, so you should plan to carry your own patches rather than wait for upstream.

## Conclusion

Adopt Midday if you want the whole freelancer back office in one TypeScript codebase you can run yourself, and if AGPL-3.0 fits how you use it. Do not adopt it if you need a finished invoicing workflow, because the README still lists invoicing as upcoming. Before committing, check the docs at docs.midday.ai for local setup steps, and read the licence section in the README to see whether your deployment counts as commercial.

## FAQ

### Is Midday free to self-host?

The README says the project is licensed under AGPL-3.0 for non-commercial use, and that commercial use or deployments requiring a setup fee need a commercial licence arranged by emailing engineer@midday.ai. It does not define which deployments count as commercial.

### How do I install Midday for local development?

The README does not include install steps. It says documentation for local development is being worked on at https://docs.midday.ai, so that is the place to check before running anything.

### Does Midday support creating invoices?

Not yet. The README lists Invoicing as an upcoming feature that will enable users to create web-based invoices, collaborate in real time and synchronize projects.

### Which banks can Midday connect to?

The services list names GoCardLess for bank connections in the EU, Plaid for Canada and the US, and Teller for the US. No other regions are described in the README.

### What is the Magic Inbox in Midday?

The README describes Magic Inbox as automatically matching incoming invoices or receipts to the correct transactions, to simplify financial tracking and organization. The README does not document the matching rules or what happens when a match is ambiguous.

## Sources

- [License: AGPL-3.0](https://github.com/midday-ai/midday/blob/main/LICENSE)
- [midday-ai/midday on GitHub](https://github.com/midday-ai/midday)
- [Project website](https://midday.ai)
- [README](https://github.com/midday-ai/midday/blob/main/README.md)
- [Releases](https://github.com/midday-ai/midday/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/midday-ai-midday
