Skip to content

About

Independent, self-hosted daily task board for Chromium new tabs

Topics

Resources

Contributing

Security policy

Stars

15 stars

Watchers

0 watching

Forks

Repository files navigation

Chrome Home

Your day, every time you open a tab.

Chrome Home is a private, self-hosted daily task board for Chromium-based browsers. It replaces the default new-tab page with a focused three-column workflow backed by your own Docker server and SQLite database.

Chrome Home dashboard

Why Chrome Home?

  • Completely independent: no Microsoft, Google, SaaS, analytics, or cloud account.
  • Self-hosted: one small container and one persistent Docker volume.
  • Built for the day: overdue work rolls into My Day while upcoming work stays out of the way.
  • Fast new tabs: the interface is packaged locally in the extension; only task data crosses the network.
  • Auditable: plain HTML, CSS, JavaScript, Python, and SQLite with no runtime dependencies.
  • Works as a website too: the container serves the same dashboard at its root URL.

Quick start

1. Start the server

On the Docker host:

git clone https://github.com/ChrisTitusTech/chrome-home.git
cd chrome-home
cp .env.example .env
openssl rand -hex 32

Paste the generated value after CHROME_HOME_API_TOKEN= in .env, then run:

docker compose up -d --build
docker compose ps
curl http://127.0.0.1:8088/api/health

The dashboard is now available at http://SERVER-IP:8088. For the example server discussed during development, that is http://10.0.0.200:8088.

2. Install the extension

  1. Clone or download this repository on the browser computer.
  2. Open chrome://extensions in Chrome, Chromium, Brave, or Vivaldi.
  3. Turn on Developer mode.
  4. Select Load unpacked.
  5. Choose the repository's extension directory.
  6. Open a new tab.

The first new tab opens the connection dialog. Enter:

  • Server URL: http://10.0.0.200:8088 or your own server address.
  • API token: the value stored in the Docker server's .env file.

Chromium will ask permission for the extension to access that server. Chrome Home requests only the specific origin you enter.

Keep the unpacked extension directory in a permanent location. Chromium loads its files from that directory.

Everyday use

  • Add a task from the input at the top of the page.
  • Move work between To do, In progress, and Done.
  • Double-click a card or use its menu to edit details, date, or priority.
  • Use My day, Upcoming, and All tasks to change scope.
  • Press Q anywhere outside a form field to focus Quick Add.
  • In My Day, unfinished overdue tasks appear alongside the selected day's work.

Deployment and HTTPS

The default Compose configuration is appropriate for a trusted home LAN. If the dashboard will cross an untrusted network, put it behind HTTPS and never publish port 8088 directly to the internet. See Deployment for reverse-proxy, backup, upgrade, and origin-restriction examples.

Architecture

Chromium new-tab extension            Docker server
┌─────────────────────────┐           ┌──────────────────────────┐
│ Local HTML/CSS/JS       │           │ Dependency-free Python  │
│ Browser-profile token   ├─ HTTP(S) ─►│ Bearer-token task API   │
│ No remote executable JS │           │ Persistent SQLite data  │
└─────────────────────────┘           └──────────────────────────┘

The server also serves the same static dashboard. Browser configuration is kept in chrome.storage.local for the extension or localStorage for the web version. Task data lives only in the Docker volume.

Configuration

Variable Default Purpose
CHROME_HOME_API_TOKEN required Bearer token; exactly 64 hexadecimal characters
CHROME_HOME_PORT 8088 Port exposed on the Docker host
CHROME_HOME_BIND_ADDRESS 0.0.0.0 Host address used for the published port
CHROME_HOME_ALLOWED_ORIGINS chrome-extension://* Comma-separated browser origins allowed by CORS
CHROME_HOME_LOG_LEVEL INFO Server log level

The default accepts any Chromium extension ID, which supports unpacked development, and same-origin requests from the hosted dashboard. Every task operation still requires the bearer token. A stable packaged extension can be restricted to its exact origin as described in the deployment guide. Use * only as an explicit troubleshooting override.

Development

Requirements: Python 3.11 or newer, Node.js for the JavaScript syntax check, Docker with Compose, and optionally zip for packaging.

make test                 # unit, API, syntax, and manifest checks
make run                  # build and start the Compose service
make logs                 # follow service logs
make stop                 # stop the service without deleting data
make package-extension    # create dist/chrome-home-extension.zip

The service intentionally uses only Python's standard library. There is no package installation step and no JavaScript build pipeline.

API

All task routes require Authorization: Bearer YOUR_TOKEN.

Method Route Description
GET /api/health Unauthenticated health and version response
GET /api/tasks?scope=day&date=YYYY-MM-DD Daily, upcoming, or all-task query
POST /api/tasks Create a task
PATCH /api/tasks/{id} Update task fields
DELETE /api/tasks/{id} Delete a task

Task statuses are todo, in_progress, and done. Priorities are low, medium, high, and urgent.

Project status

Version 1.0 is a complete single-user daily task workflow. Multi-user accounts, collaborative boards, and third-party task integrations are intentionally out of scope. See CONTRIBUTING.md before proposing changes.

License

MIT

About

Independent, self-hosted daily task board for Chromium new tabs

Topics

Resources

Contributing

Security policy

Stars

15 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages