Open-source project
maxhu08/mtab avatar
maxhu08/mtab

mtab: a new tab page you can actually restyle

🌴 lightweight new tab page extension

574 stars17 forksTypeScriptMIT

At a glance

What is it?
mtab replaces the browser's new tab page with one you can configure: wallpapers, bookmarks, fonts, custom CSS, a favicon of your choosing and a search bar that defers to whichever engine you use. It ships as one extension for Chrome, Firefox and Edge from a single TypeScript codebase, and its release line moves roughly monthly.
Who is it for?
mtab fits someone who spends more time on the new tab page than any other page in the browser and wants it to carry their own styling, bookmarks and fonts rather than a search engine's promotional layout.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A start page rather than a search engine's billboard

The repository describes mtab as a simple configurable new tab extension, and the info section explains the position it takes: it offers a modern new tab page, prioritizing customizability such as choosing wallpapers, bookmarks, and more, and it emphasizes a smooth user experience through its animations on the new page.

That is a deliberate stance about what a new tab page is for. The default new tab on most browsers is a search engine's home page with a wallpaper, and the useful content is whatever the browser's own shortcuts decide to show. mtab's premise is that the new tab page is a surface you own, and it treats it as one: the wallpaper, the bookmark set, the greeting, the font and the CSS are all things you set.

The feature list makes the scope concrete. Fast and lightweight, privacy-focused and fully customizable are the three headline claims, and they are followed by the parts that actually make up the page: a smart search bar compatible with any search engine, smooth animations, bookmarks, a personalized greeting, weather, custom wallpapers, a custom favicon, custom CSS styling, custom fonts, and quick config sharing.

Two of those deserve a word. The search bar is described as compatible with any search engine, which means it is not tied to one vendor's results page and does not have to be, since the browser can do the searching. And custom CSS means the styling is yours to override rather than a set of options the author thought of, which is the difference between a settings page and a theme.

One codebase, three store listings

The download section lists the extension for three browser families, and the grouping is by engine rather than by brand.

Chromium-based browsers are Chrome, Brave and Opera, installed from the Chrome Web Store. Firefox-based browsers are Firefox, Floorp and Zen, installed from the Mozilla add-ons site. Microsoft Edge has its own listing in the Edge add-ons store.

Three separate store submissions means three separate review processes and three separate update cycles, and it is worth checking that the listing you install from is the one that gets the version you expect. The release tags in the repository, v1.13.3, v1.13.2 and v1.13.1, correspond to what the stores serve rather than to a single published artifact.

There is also a website at mtab.maxhu.dev and a Discord community linked from the README, so the project has a presence outside the extension listing itself.

The topics on the repository are chrome, chrome-extension, extension, firefox, newtabpage and startpage, and the primary language is TypeScript with the MIT licence.

The build is Bun, Parcel and one task script per browser

The package.json scripts show a project that treats each browser as a variant of one build rather than as three separate builds.

json
    "dev": "bun run dev:chrome",
    "dev:chrome": "bun run ./scripts/tasks.ts dev chrome",
    "dev:firefox": "bun run ./scripts/tasks.ts dev firefox",
    "build": "bun run build:chrome",
    "build:chrome": "bun run ./scripts/tasks.ts build chrome",
    "build:firefox": "bun run ./scripts/tasks.ts build firefox",

Every task goes through the same entry point, scripts/tasks.ts, with the target as an argument, so the differences between a Chromium build and a Firefox build live in one file rather than in a pile of shell scripts. The script names follow that shape too, with package:chrome, package:firefox, rc:chrome and rc:firefox for the release candidate builds, plus an icons task and a source packaging task.

The runtime is Bun rather than Node, and the lockfile is bun.lock. The bundler is Parcel, pinned to an exact version at 2.16.3.

The quality tooling is equally modern and just as terse. Formatting is oxfmt, with a format:check mode, linting is oxlint over the src and scripts directories with warnings denied, tests run under bun test, and typecheck is tsc with no emit. There is a single command that runs the lot:

json
    "lint": "oxlint src scripts --deny-warnings",
    "lint:fix": "bun run lint --fix",
    "test": "bun test",
    "check": "bun run format:check && bun run lint && bun run typecheck && bun run test",

A contributor therefore has one command to run everything CI is likely to run, and the repository enforces it with husky and commitlint rather than leaving it to memory.

The dependency list explains which features cost what

Nine runtime dependencies is a short list for an extension with this many features, and each one points at a specific capability.

idb-keyval is the storage layer, a small wrapper over IndexedDB that stores the user's settings as key-value pairs in the browser. That is where the wallpaper choice, the bookmark list, the fonts and the custom CSS live, and it is the reason the extension can restore your configuration without an account.

sortablejs provides drag-and-drop ordering, which is the standard way a user rearranges a list of bookmarks or widgets. tippy.js is the tooltip library, which for a settings-heavy page is what makes a truncated label or an icon legible on hover. mathjs is a maths library, and vanilla-colorful does colour manipulation, which together cover the wallpaper and colour treatment side of the theme. fflate is a compression library, which is what you would reach for if a configuration or an asset is stored in a compressed form.

caniuse-lite is the odd one out, and it is there for a good reason. It is the browser compatibility data, and shipping it locally means the extension can ask what a given browser supports without querying a remote service, which is consistent with a project that describes itself as privacy-focused.

The privacy claim itself is documented separately. There is a PRIVACY_POLICY.md at the repository root, and the README points to it only implicitly by having it in the tree, so that file is the place to read what the extension sends anywhere.

What the README does not tell you about weather and sharing

Two features on the list raise questions the README leaves open, and both are worth resolving before you install.

The first is weather. A weather widget needs to know where you are and needs to ask somebody what the weather is there, which means either a geolocation permission prompt in the browser or a manual location, plus a request to a weather service. The README says the extension offers weather and says nothing about which service is called, whether your location is sent to it, or whether the data is cached locally. The feature list carries a privacy-focused label, and the weather widget is the one part of a new tab page where that label deserves a check rather than an assumption.

The second is quick config sharing. The name suggests a way to export your configuration and hand it to someone else, which is genuinely useful when you have spent an afternoon arranging widgets. But the README does not describe the format, whether the shared configuration includes anything personal, or whether sharing is done through a link, a file or a code. A configuration that includes a bookmark list may also include the names of sites you visit, so it is worth reading the documentation before you send one.

The rest of the documentation lives in the docs directory. The README points to docs/CONTRIBUTING.md for contributing and docs/SETUP.md for setup, so the details the README omits are in the setup guide rather than on the front page.

MIT licensed, monthly releases, and a changelog to read

The licence is MIT, which for a browser extension is the permissive end of the scale and means you can read the whole source and know what it does.

The release line is active. v1.13.3 was tagged on 2026-10-17, v1.13.2 on 2026-09-24 and v1.13.1 on 2026-09-15, and the repository's last push was on 2026-10-17. That is roughly one release a month, and the version number in EXTENSION_VERSION.txt at the repository root is what the build scripts bump.

The default branch is master, which is worth noting for anyone scripting against it, since the extension stores do not take a branch. CHANGES.md holds the changelog, so the history of what changed between the store versions is in the repository rather than only in the store release notes.

The repository also carries a few files that say how the project is worked on. AGENTS.md sits at the root next to TODO.md, which is a common arrangement for a project that keeps its open questions in version control where contributors can see them. There is a .editorconfig, an .oxfmtrc.json for the formatter, an .oxlintrc.json for the linter, a .postcssrc and a tailwind.config.js for the styling, a commitlint.config.cjs and a .husky directory for the commit hooks, and a scripts directory holding the task runner.

The README carries a single screenshot rather than a gallery of individual features, so the fastest way to judge whether the page suits you is to install it from a store and look, since the store listing is the artefact you would use anyway.

Editorial conclusion

mtab fits someone who spends more time on the new tab page than any other page in the browser and wants it to carry their own styling, bookmarks and fonts rather than a search engine's promotional layout. It is the wrong choice if you want a page with no third-party code in your browser's start path, since installing it means the extension runs on every new tab you open, and the wrong choice if you need to self-host the page, because mtab ships as a browser extension rather than a page you can point a browser at. Verify first which store you install from, since the three listings are separate submissions, and read PRIVACY_POLICY.md before you point the weather widget at a location.

Frequently asked questions

What is the mtab browser extension?

It is a simple configurable new tab extension that replaces the browser's new tab page with a modern one, prioritizing customizability such as choosing wallpapers and bookmarks, and it emphasizes smooth animations on the new page. It is written in TypeScript and released under the MIT licence.

Where can I install mtab?

From the Chrome Web Store for Chromium-based browsers such as Chrome, Brave and Opera, from the Mozilla add-ons site for Firefox-based browsers including Firefox, Floorp and Zen, and from the Microsoft Edge add-ons store for Edge. The three listings are separate submissions.

Can I customise the mtab new tab page with my own CSS and fonts?

Yes. The feature list includes custom CSS styling, custom fonts, custom wallpapers, a custom favicon, bookmarks, a personalized greeting, weather and a smart search bar compatible with any search engine.

How do I build mtab from source?

The package.json scripts run everything through Bun and a single task file at scripts/tasks.ts, so bun run dev:chrome, bun run dev:firefox and the build, package and rc targets differ only by the browser argument. Formatting uses oxfmt, linting uses oxlint with warnings denied, tests run under bun test, and bun run check chains all of those together.

How often is mtab released?

The recent releases are v1.13.3 from 2026-10-17, v1.13.2 from 2026-09-24 and v1.13.1 from 2026-09-15, and the last push was on 2026-10-17. The version in use is tracked in EXTENSION_VERSION.txt and the change history is in CHANGES.md.

Official sources

  1. License: MIT
  2. maxhu08/mtab on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/maxhu08-mtab.svg)](https://hysenlabs.com/projects/maxhu08-mtab)

Was this useful?