Skip to content

Bialomazur/tailwindsql

 
 

Repository files navigation

TailwindSQL 🎨

Like TailwindCSS, but for SQL queries in React Server Components.

GitHub

What is this?

TailwindSQL lets you write SQL queries using Tailwind-style class names. Just use className to query your database directly in React Server Components!

// Fetch and render a user's name
<DB className="db-users-name-where-id-1" />
// Renders: "Ada Lovelace"

// Render products as a list
<DB className="db-products-title-limit-5" as="ul" />
// Renders: <ul><li>Mechanical Keyboard</li>...</ul>

// Order by price and show as table
<DB className="db-products-orderby-price-desc" as="table" />

Features

  • 🎨 Tailwind-style syntax - Write SQL queries using familiar class names
  • ⚑ React Server Components - Zero client-side JavaScript for queries
  • πŸ”’ SQLite - Built on better-sqlite3 for fast, local database access
  • 🎯 Zero Runtime - Queries are parsed and executed at build/render time
  • 🎭 Multiple Render Modes - Render as text, lists, tables, or JSON

Syntax

db-{table}-{column}-where-{field}-{value}-limit-{n}-orderby-{field}-{asc|desc}

Examples

Class Name SQL Query
db-users SELECT * FROM users
db-users-name SELECT name FROM users
db-users-where-id-1 SELECT * FROM users WHERE id = 1
db-posts-title-limit-10 SELECT title FROM posts LIMIT 10
db-products-orderby-price-desc SELECT * FROM products ORDER BY price DESC

Getting Started

Prerequisites

  • Node.js 18+
  • npm or yarn

Installation

# Clone the repository
git clone https://github.com/mmarinovic/tailwindsql.git
cd tailwindsql

# Install dependencies
npm install

# Seed the database with demo data
npm run seed

# Start the development server
npm run dev

Open http://localhost:3000 to see the demo and interactive playground!

How It Works

  1. Parser (src/lib/parser.ts) - Parses class names into query configurations
  2. Query Builder (src/lib/query-builder.ts) - Transforms configs into safe SQL queries
  3. DB Component (src/components/DB.tsx) - React Server Component that executes queries and renders results

Render Modes

The as prop controls how results are rendered:

Value Description
span Inline text (default)
div Block element
ul Unordered list
ol Ordered list
table HTML table
json JSON code block

Project Structure

tailwindsql/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/              # Next.js app directory
β”‚   β”‚   β”œβ”€β”€ page.tsx      # Landing page
β”‚   β”‚   └── api/          # API routes
β”‚   β”œβ”€β”€ components/        # React components
β”‚   β”‚   β”œβ”€β”€ DB.tsx        # Main DB component
β”‚   β”‚   β”œβ”€β”€ Example.tsx   # Example components
β”‚   β”‚   └── Playground.tsx # Interactive playground
β”‚   └── lib/              # Core logic
β”‚       β”œβ”€β”€ parser.ts     # Class name parser
β”‚       β”œβ”€β”€ query-builder.ts # SQL query builder
β”‚       └── db.ts         # Database connection
└── README.md

Why?

This project was built to explore css-driven database queries.

License

MIT - Do whatever you want with it (except deploy to production πŸ˜…)


Built with πŸ’œ using Next.js, SQLite, and questionable decisions

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 93.8%
  • CSS 4.7%
  • JavaScript 1.5%