diff --git a/warehouse/__init__.py b/warehouse/__init__.py
index 69a48b9ab27efcaebae169f8228461df1b6224b5..a12f9b46e1b5801df59b2b4bf242b1e74d9fc2dc 100644
--- a/warehouse/__init__.py
+++ b/warehouse/__init__.py
@@ -99,7 +99,15 @@ def logout():
 
 @app.route('/items/')
 def item_list():
-	return render_template('item/list.html', page=Item.query.order_by('name').paginate(per_page=10))
+	query = Item.query
+	if 'search' in request.values:
+		item = Item.query.get(request.values['search'].strip().upper())
+		if item:
+			return redirect(url_for('item_view', item_id=item.id))
+		keywords = request.values['search'].strip().split()
+		for keyword in keywords:
+			query = query.filter(db.or_(Item.name.contains(keyword), Item.description.contains(keyword)))
+	return render_template('item/list.html', page=query.order_by('name').paginate(per_page=10))
 
 @app.route('/items/add', methods=['GET', 'POST'])
 def item_add():
diff --git a/warehouse/templates/item/list.html b/warehouse/templates/item/list.html
index a2a63ab0d34ef2b2484bba1ec8b3a060a7061862..4ebe051c4f6b1efd5ab299b0c70d4aa796c7c6ca 100644
--- a/warehouse/templates/item/list.html
+++ b/warehouse/templates/item/list.html
@@ -1,7 +1,13 @@
 {% extends 'layout.html' %}
 
 {% block body %}
-<div class="btn-toolbar float-end" role="toolbar">
+<div class="d-flex justify-content-between gap-1">
+	<form class="form-inline">
+		<div class="input-group">
+			<input type="text" class="form-control" name="search" value="{{ request.args.search }}" placeholder="Search" autofocus>
+			<button class="btn btn-outline-secondary" type="submit">Search</button>
+		</div>
+	</form>
 	<a href="{{ url_for('item_add') }}" class="btn btn-primary">Add</a>
 </div>
 <table class="table table-hover">