Now Available - Select v1.0

The Future of Select Components

Revolutionary design meets cutting-edge functionality. Select transforms ordinary dropdowns into extraordinary user experiences with stunning animations, perfect accessibility, and intuitive interactions.

Lightweight
Accessible
Modern Design
Developer Friendly
50K+
Downloads
4.9โ˜…
Rating
12KB
Min Size
Live Interactive Demo
Choose Your Favorite Frameworks:
Keyboard navigation enabled
Type to search instantly

Trusted By More Than +10,000 Developers

Works seamlessly with all modern JavaScript frameworks and libraries

50K+

Weekly Downloads

2.1K

GitHub Stars

99.9%

Uptime

โญ Why Developers Choose Select

Built for the Modern Web

Every feature designed with performance, accessibility, and developer experience in mind. Create beautiful, functional select components in minutes, not hours.

Instant Search

Lightning-fast search with debounced input, fuzzy matching, and keyboard navigation. Find options instantly as you type.

Fuzzy Search Keyboard Nav Debounced
Multi-Select Power

Advanced multi-selection with select all, clear all, and maximum selection limits. Perfect for complex forms.

Select All Limits Bulk Actions
Accessibility First

WCAG 2.1 AA compliant with full screen reader support, ARIA labels, and high contrast modes.

WCAG 2.1 Screen Readers ARIA
Lightning Fast

Optimized performance with virtual scrolling, lazy loading, and minimal DOM manipulation.

Virtual Scroll Lazy Load Optimized
Developer Friendly

Simple API, TypeScript support, comprehensive documentation, and extensive customization options.

TypeScript Simple API Docs
Modern Design

Beautiful default styling with CSS variables, dark mode support, and easy theming capabilities.

CSS Variables Dark Mode Theming
๐Ÿ“ฆ Quick Setup

Get Started in Seconds

Choose your preferred installation method and start building amazing select components

Install via Package Manager

Using npm:

npm install as-select3

Using yarn:

yarn add as-select3

Import in your JavaScript:

// Import the CSS
import 'as-select3/dist/as-select3.min.css';

// Import the library (requires jQuery)
import 'as-select3';
CDN Installation

Include via CDN:

<!-- CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/as-select3/dist/as-select3.min.css">

<!-- JavaScript (requires jQuery) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/as-select3/dist/as-select3.min.js"></script>
Download As-Select3 Package
Includes library files, examples, and documentation
Local File Installation

Download and include these files:

<!-- CSS -->
<link rel="stylesheet" href="lib/dist/as-select3.min.css">

<!-- JavaScript (requires jQuery) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
<script src="lib/dist/as-select3.min.js"></script>
Download As-Select3 Package
Includes library files, examples, and documentation
Installation Guide
After installation, check out the Interactive Demos section below to see As-Select3 in action with code examples.
Configuration Options
Option Type Default Description
searchable boolean false Enable search functionality
placeholder string "Choose an option..." Placeholder text when nothing is selected
maxSelection number null Maximum number of selections allowed
selectAll boolean false Show "Select All" button for multi-select
clearAll boolean false Show "Clear All" button
remote function null Function for loading remote data
searchDelay number 300 Delay in ms before triggering search
๐Ÿš€ Try It Live

Interactive As-Select3 Demos

Experience As-Select3 in action! These are fully functional demos showcasing different configurations and use cases.

Basic Select

Simple single select dropdown

<select id="basic-demo-select" class="form-control">
    <option value="">Select an option</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
</select>
$('#basic-demo-select').asSelect3({
    placeholder: 'Select an option',
    searchable: false
});
Multi Select with Search

Multiple selection with search functionality and icons

<select id="multi-demo-select" multiple class="form-control">
    <option value="javascript" data-icon="๐ŸŸจ">JavaScript</option>
    <option value="python" data-icon="๐Ÿ">Python</option>
    <option value="java" data-icon="โ˜•">Java</option>
    <option value="csharp" data-icon="๐ŸŸช">C#</option>
    <option value="php" data-icon="๐Ÿ˜">PHP</option>
    <option value="ruby" data-icon="๐Ÿ’Ž">Ruby</option>
    <option value="golang" data-icon="๐Ÿ”ต">Go</option>
    <option value="swift" data-icon="๐Ÿงก">Swift</option>
    <option value="rust" data-icon="๐Ÿฆ€">Rust</option>
    <option value="kotlin" data-icon="๐ŸŸฃ">Kotlin</option>
</select>
$('#multi-demo-select').asSelect3({
    placeholder: 'Select programming languages',
    searchable: true,
    searchPlaceholder: 'Search languages...',
    selectAll: true,
    clearAll: true
});
Max Selection Limit

Limit the number of items that can be selected

You can select a maximum of 3 skills.
<select id="max-demo-select" multiple class="form-control">
    <option value="design" data-icon="๐ŸŽจ">UI/UX Design</option>
    <option value="frontend" data-icon="๐Ÿ–ฅ๏ธ">Frontend Development</option>
    <option value="backend" data-icon="โš™๏ธ">Backend Development</option>
    <option value="devops" data-icon="๐Ÿš€">DevOps</option>
    <option value="mobile" data-icon="๐Ÿ“ฑ">Mobile Development</option>
    <option value="data" data-icon="๐Ÿ“Š">Data Science</option>
    <option value="ml" data-icon="๐Ÿง ">Machine Learning</option>
    <option value="security" data-icon="๐Ÿ”’">Security</option>
</select>
<div id="max-selection-warning" class="alert alert-warning mt-3 d-none">
    <i class="bi bi-exclamation-triangle me-2"></i>
    You can select a maximum of 3 skills.
</div>
$('#max-demo-select').asSelect3({
    placeholder: 'Select up to 3 skills',
    searchable: true,
    searchPlaceholder: 'Find skills...',
    maxSelection: 3
});

$('#max-demo-select').on('asSelect3:maxselection', function(e) {
    $('#max-selection-warning').removeClass('d-none');
    setTimeout(() => {
        $('#max-selection-warning').addClass('d-none');
    }, 3000);
});
Select with Profile Images

Display user avatars with names

<select id="profile-demo-select" class="form-control">
    <option value="">Select team members</option>
    <option value="user1" data-icon="https://avatar.iran.liara.run/public/boy?username=alex">Alex Johnson</option>
    <option value="user2" data-icon="https://avatar.iran.liara.run/public/girl?username=sophia">Sophia Chen</option>
    <option value="user3" data-icon="https://avatar.iran.liara.run/public/boy?username=michael">Michael Smith</option>
    <option value="user4" data-icon="https://avatar.iran.liara.run/public/girl?username=emma">Emma Davis</option>
    <option value="user5" data-icon="https://avatar.iran.liara.run/public/boy?username=david">David Wilson</option>
    <option value="user6" data-icon="https://avatar.iran.liara.run/public/girl?username=olivia">Olivia Taylor</option>
</select>
$('#profile-demo-select').asSelect3({
    placeholder: 'Select team members',
    imageWidth: 36,
    imageHeight: 36,
    imageBorderRadius: '50%',
    imagePosition: 'left',
    searchable: true
});
Remote User Data

Load random user profiles from an API

Click to fetch random users from the RandomUser API.
<select id="remote-demo-select" class="form-control">
    <option value="">Search for random users...</option>
</select>
$('#remote-demo-select').asSelect3({
    placeholder: 'Search for random users...',
    searchable: true,
    remote: async function(searchTerm) {
        try {
            let url = 'https://randomuser.me/api/?results=10';
            url += '&inc=name,picture,location,email,login';
            url += '&nat=us,gb,fr,au,ca';
            
            if (searchTerm) {
                url += '&seed=' + encodeURIComponent(searchTerm);
            }
            
            const response = await fetch(url);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            
            const data = await response.json();
            
            return data.results.map(function(user) {
                const fullName = user.name.first + ' ' + user.name.last;
                return {
                    value: user.login.uuid,
                    text: fullName,
                    icon: user.picture.medium,
                    html: '<div class="d-flex align-items-center gap-2">' +
                          '<img src="' + user.picture.medium + '" width="48" height="48" style="border-radius:50%">' +
                          '<div>' +
                          '<div class="fw-semibold">' + fullName + '</div>' +
                          '<div class="small text-muted">' + user.location.city + ', ' + user.location.country + '</div>' +
                          '</div>' +
                          '<div class="ms-auto small text-muted">' + 
                          '<i class="bi bi-envelope me-1"></i>' + 
                          user.email +
                          '</div>' +
                          '</div>'
                };
            });
        } catch (error) {
            console.error('RandomUser API Error:', error);
            return [];
        }
    }
});
Custom Themed Select

Customized colors and styling

<!-- Single Select with Custom Theme -->
    <label for="custom-demo-select" class="form-label">Choose Your Mood:</label>
    <select id="custom-demo-select" class="form-control custom-select-theme">
        <option value="">How are you feeling today?</option>
        <option value="happy" data-icon="๐Ÿ˜Š">Happy</option>
        <option value="excited" data-icon="๐Ÿฅณ">Excited</option>
        <option value="calm" data-icon="๐Ÿ˜Œ">Calm</option>
        <option value="focused" data-icon="๐Ÿง ">Focused</option>
        <option value="tired" data-icon="๐Ÿ˜ด">Tired</option>
        <option value="inspired" data-icon="๐Ÿ’ก">Inspired</option>
        <option value="creative" data-icon="๐ŸŽจ">Creative</option>
    </select>

    <!-- Multi Select with Custom Theme -->
    <label for="custom-demo-select-multi" class="form-label">Choose Your Activities:</label>
    <select id="custom-demo-select-multi" class="form-control custom-select-theme" multiple>
        <option value="coding" data-icon="๐Ÿ’ป">Coding</option>
        <option value="reading" data-icon="๐Ÿ“š">Reading</option>
        <option value="gaming" data-icon="๐ŸŽฎ">Gaming</option>
        <option value="exercising" data-icon="๐Ÿƒ">Exercising</option>
        <option value="cooking" data-icon="๐Ÿณ">Cooking</option>
        <option value="music" data-icon="๐ŸŽต">Music</option>
        <option value="art" data-icon="๐ŸŽจ">Art</option>
    </select>
// Initialize single select with custom theme
    $('#custom-demo-select').select3({
        placeholder: 'How are you feeling today?',
        searchable: true,
        theme: 'custom-purple'
    });

    // Initialize multi select with custom theme
    $('#custom-demo-select-multi').select3({
        placeholder: 'Select your activities',
        searchable: true,
        selectAll: true,
        clearAll: true,
        theme: 'custom-purple'
    });
/* Custom Purple Theme for Select3 */
    .select3-container.custom-purple .select3-dropdown {
        border-color: #8A2BE2;
        box-shadow: 0 0 0 0.25rem rgba(138, 43, 226, 0.25);
    }

    .select3-container.custom-purple .select3-selection {
        border-color: #8A2BE2;
        background: linear-gradient(to right, rgba(138, 43, 226, 0.05), rgba(138, 43, 226, 0.1));
    }

    .select3-container.custom-purple .select3-selection:hover {
        border-color: #9370DB;
    }

    .select3-container.custom-purple.select3-focus .select3-selection {
        border-color: #8A2BE2;
        box-shadow: 0 0 0 0.25rem rgba(138, 43, 226, 0.25);
    }

    /* Customize the selected items */
    .select3-container.custom-purple .select3-tag {
        background-color: #8A2BE2;
        border-color: #8A2BE2;
        color: #fff;
    }

    .select3-container.custom-purple .select3-tag:hover {
        background-color: #9370DB;
    }

    /* Customize the dropdown items */
    .select3-container.custom-purple .select3-option:hover,
    .select3-container.custom-purple .select3-option.select3-option-highlighted {
        background-color: rgba(138, 43, 226, 0.1);
    }

    .select3-container.custom-purple .select3-option.select3-option-selected {
        background-color: rgba(138, 43, 226, 0.2);
        color: #8A2BE2;
    }

    /* Customize action buttons */
    .select3-container.custom-purple .select3-actions .select3-select-all,
    .select3-container.custom-purple .select3-actions .select3-clear-all {
        color: #8A2BE2;
    }

    .select3-container.custom-purple .select3-actions .select3-select-all:hover,
    .select3-container.custom-purple .select3-actions .select3-clear-all:hover {
        text-decoration: none;
        color: #9370DB;
    }
HTML Rendering & Templates

Rich HTML content with custom templates (NEW in v1.1)

<!-- HTML Content Options -->
<select id="html-basic-select" class="form-control">
    <option value="">Choose a team member...</option>
    <option value="john" data-html="<strong>John Doe</strong><br><small class='text-muted'><i class='bi bi-code-slash'></i> Lead Developer</small>">John Doe</option>
    <option value="jane" data-html="<strong>Jane Smith</strong><br><small class='text-muted'><i class='bi bi-palette'></i> UI/UX Designer</small>">Jane Smith</option>
</select>

<!-- Template-based Options -->
<select id="html-template-select" class="form-control" multiple>
    <option value="1">Sarah Johnson</option>
    <option value="2">Michael Chen</option>
    <option value="3">Emma Davis</option>
</select>
// HTML Content with data-html attribute
$('#html-basic-select').asSelect3({
    allowHtml: true,
    placeholder: 'Choose a team member...',
    searchable: true
});

// Custom Templates
$('#html-template-select').asSelect3({
    placeholder: 'Select users...',
    templateResult: function(data) {
        if (!data.id) return data.text;
        
        const avatarUrl = `https://i.pravatar.cc/150?u=${data.id}`;
        return `<div class="d-flex align-items-center">
                  <img src="${avatarUrl}" alt="${data.text}" width="32" height="32" class="rounded-circle me-2">
                  <div>
                    <div class="fw-semibold">${data.text}</div>
                    <small class="text-muted">ID: ${data.id} โ€ข Online</small>
                  </div>
                </div>`;
    },
    templateSelection: function(data) {
        if (!data.id) return data.text;
        
        const avatarUrl = `https://i.pravatar.cc/150?u=${data.id}`;
        return `<div class="d-flex align-items-center">
                  <img src="${avatarUrl}" alt="${data.text}" width="20" height="20" class="rounded-circle me-1">
                  <span>${data.text}</span>
                </div>`;
    }
});
Manual Reinitialize

Reinitialize As-Select3 when DOM options change

Click "Add Option" to add a new framework to the DOM, then "Reinitialize" to update the dropdown.
<select id="my-select" class="form-control">
    <option value="">Select a framework...</option>
    <option value="react">React</option>
    <option value="vue">Vue.js</option>
    <option value="angular">Angular</option>
</select>

<button onclick="addNewOption()">Add Option</button>
<button onclick="reinitialize()">Reinitialize</button>
// Initialize As-Select3
const instance = $('#my-select').asSelect3({
    placeholder: 'Select a framework...',
    searchable: true
})[0]._asSelect3;

function addNewOption() {
    // Add new option to the original select element
    $('#my-select').append('<option value="nextjs">Next.js</option>');
}

function reinitialize() {
    // Get the current instance
    const currentInstance = $('#my-select')[0]._asSelect3;
    
    // Reinitialize to pick up new DOM options
    const newInstance = currentInstance.reinitializeFromDOM();
    
    // Update reference (optional)
    $('#my-select')[0]._asSelect3 = newInstance;
    
    console.log('Reinitialized! New options are now visible.');
}
๐Ÿ’ผ Real-World Applications

Perfect for Every Project

From simple forms to complex dashboards, Select adapts to your needs

Forms & Surveys

Perfect for contact forms, registration pages, and user surveys with multiple choice questions.

Admin Dashboards

Ideal for admin panels, data filtering, and user management interfaces with complex selections.

E-commerce Filters

Great for product filtering, category selection, and shopping cart options in online stores.

Team Management

Perfect for assigning team members, selecting permissions, and managing user roles.

Support Open Source

Select is free and open source. If you find it useful, consider supporting the project to help us maintain and improve it for everyone.

127
Contributors
$2,340
Raised
45
Sponsors