โ† Back to Tabsome

Tabsome Widget Creator Guide

Build beautiful, custom widgets for your new tab experience

๐ŸŽจ What are Tabsome Widgets?

Tabsome widgets are custom HTML/CSS/JavaScript components that display in the spotlight section of your new tab page. They allow you to show dynamic content like quotes, countdowns, custom animations, or anything you can build with web technologies!

New to coding? Don't worry! We've included ready-to-use templates below. Just copy, customize the text/colors, and you're good to go!

โœจ Skip It! Use AI to Build Your Widget

Generate with Tabsome AI (in-extension)

Use the built-in Tabsome AI inside the extension to generate widget code instantly โ€” outputs ready-to-import Tabsome widget JSON and can be added directly into your dashboard.

Copy Markdown for External AI

Copy a full markdown version of this guide to paste into external AI assistants (ChatGPT, Gemini, Claude). Ask the assistant to return a Tabsome widget JSON object with escaped HTML/CSS/JS so it can be imported directly.

Tip: Use the left action to run Tabsome's in-extension AI (fast, integrated). Use the right action to copy markdown and paste into an external AI assistant โ€” request a Tabsome widget JSON object with escaped HTML/CSS/JS for direct import.

Or continue reading below to code manually...

๐Ÿ“ Widget Specifications

Width
800px
Height
120px
Aspect Ratio
20:3
800px ร— 120px Your widget content goes here
Pro Tip: Your widget will be displayed in this exact size on the new tab page. Make sure your content is readable and looks good within these dimensions!

โœจ Best Practices

Important: Widgets run in a sandboxed iframe for security. They cannot access the parent page, local storage is isolated, and cross-origin requests need proper CORS headers.

๐Ÿ—๏ธ Widget Structure

Every Tabsome widget consists of three components:

Widget JSON Format
{
  "id": "unique-widget-id",
  "title": "My Awesome Widget",
  "description": "A cool widget that does amazing things",
  "labels": ["productivity", "quotes", "custom"],
  "widget": {
    "html": "<div class=\"widget\">...</div>",
    "css": ".widget { ... }",
    "js": "// Your JavaScript code here"
  }
}
Note: The html, css, and js fields should contain your widget's code as strings. Special characters need to be properly escaped in JSON.

๐ŸŽฏ Ready-to-Use Templates

Get started quickly with these pre-built templates. Click a tab to view the code, then copy and customize!

Simple Text
Daily Quote
Countdown Timer

Simple Text Widget

A basic centered text widget. Perfect for motivational messages or personal mantras.

HTML
<div class="widget-container">
  <h1 class="widget-title">Stay Focused & Ship It! ๐Ÿš€</h1>
</div>
CSS
.widget-container {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}

.widget-title {
  font-size: 32px;
  font-weight: 700;
  color: #ffffff;
  text-align: center;
  margin: 0;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
}
JavaScript
// No JavaScript needed for this simple widget!
console.log('Widget loaded successfully!');

Daily Inspiration Quote

Displays a random inspirational quote each time the new tab opens.

HTML
<div class="quote-widget">
  <div class="quote-icon">"</div>
  <p class="quote-text" id="quote"></p>
  <p class="quote-author" id="author"></p>
</div>
CSS
.quote-widget {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
  padding: 20px 40px;
  position: relative;
}

.quote-icon {
  position: absolute;
  top: 10px;
  left: 20px;
  font-size: 48px;
  color: rgba(255, 255, 255, 0.2);
  font-family: Georgia, serif;
}

.quote-text {
  font-size: 18px;
  font-weight: 500;
  color: #ffffff;
  text-align: center;
  margin: 0 0 8px 0;
  line-height: 1.4;
}

.quote-author {
  font-size: 14px;
  color: rgba(255, 255, 255, 0.8);
  font-style: italic;
  margin: 0;
}
JavaScript
const quotes = [
  { text: "The only way to do great work is to love what you do.", author: "Steve Jobs" },
  { text: "Innovation distinguishes between a leader and a follower.", author: "Steve Jobs" },
  { text: "Stay hungry, stay foolish.", author: "Steve Jobs" },
  { text: "Simplicity is the ultimate sophistication.", author: "Leonardo da Vinci" },
  { text: "The future belongs to those who believe in their dreams.", author: "Eleanor Roosevelt" }
];

function displayRandomQuote() {
  const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
  document.getElementById('quote').textContent = randomQuote.text;
  document.getElementById('author').textContent = 'โ€” ' + randomQuote.author;
}

displayRandomQuote();

Countdown Timer Widget

Count down to an important date or event. Perfect for deadlines and celebrations!

HTML
<div class="countdown-widget">
  <div class="countdown-label">Time Until New Year ๐ŸŽ‰</div>
  <div class="countdown-display" id="countdown"></div>
</div>
CSS
.countdown-widget {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  background: linear-gradient(135deg, #0f2027 0%, #203a43 50%, #2c5364 100%);
}

.countdown-label {
  font-size: 18px;
  font-weight: 600;
  color: rgba(255, 255, 255, 0.9);
  margin-bottom: 12px;
}

.countdown-display {
  font-size: 36px;
  font-weight: 700;
  color: #ffffff;
  font-family: 'Courier New', monospace;
  letter-spacing: 2px;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}
JavaScript
// Set your target date here (YYYY, MM-1, DD)
const targetDate = new Date(2026, 0, 1).getTime();

function updateCountdown() {
  const now = new Date().getTime();
  const distance = targetDate - now;

  const days = Math.floor(distance / (1000 * 60 * 60 * 24));
  const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  const seconds = Math.floor((distance % (1000 * 60)) / 1000);

  document.getElementById('countdown').textContent = 
    `${days}d ${hours}h ${minutes}m ${seconds}s`;

  if (distance < 0) {
    document.getElementById('countdown').textContent = "๐ŸŽ‰ It's here!";
  }
}

updateCountdown();
setInterval(updateCountdown, 1000);

๐Ÿงช Testing Your Widget

Before sharing your widget, make sure to test it thoroughly:

  1. Preview Locally: Create an HTML file with your widget code and open it in a browser
  2. Test in the Extension: Import your widget into Tabsome and verify it displays correctly
  3. Check Responsiveness: Ensure it looks good at the exact 800ร—120px size
  4. Verify Functionality: Test all interactive elements and API calls
  5. Browser Compatibility: Test in Chrome and other Chromium-based browsers

๐ŸŒŸ Sharing Your Widget

Ready to share your creation with the community? Here's how:

Step 1: Package your widget in the JSON format shown above
Step 2: Test it one more time in the Tabsome extension
Step 3: Submit your widget through the Marketplace upload feature
We're currently gathering feedback about widget sharing. Click the "Upload" button in the marketplace to share your thoughts and help shape this feature!

๐Ÿš€ Advanced Tips

Using External APIs

You can fetch data from external APIs, but remember:

Performance Optimization

Styling Tips

Ready to Create?

Start building your amazing widget now and make your new tab experience truly yours!

Go to Marketplace