Trong kỹ thuật phần mềm, một Ứng dụng web hay web application, web app là một trình ứng dụng mà có thể tiếp cận qua web thông qua mạng như Internet hay intranet. Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chương trình. Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web được dùng để hiện thực Webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog, MMORPG, Hệ quản trị nội dung, Phần mềm quản lý nguồn nhân lực và nhiều chức năng khác. Trong dạng tính toán chủ-khách trước đây, mỗi ứng dụng có chương trình khách riêng của nó sẽ phục vụ như giao diện người dùng và phải được cài đặt riêng rẽ trên mỗi máy tính cá nhân của người dùng. Sự nâng cấp phần máy chủ của ứng dụng sẽ cần nâng cấp tất cả máy khách đã được cài trên mỗi máy trạm người dùng, thêm vào đó là chi phí hỗ trợ và giảm năng suất. Ngược lại, ứng dụng web linh hoạt tạo ra một loạt các tài liệu Web ở định dạng chuẩn được hỗ trợ bởi những trình duyệt phổ biến như HTML/XHTML. Ngôn ngữ kịch bản phía người dùng ở dạng ngôn ngữ chuẩn như JavaScript thường được thêm vào để có thêm những yếu tố động trong giao diện người dùng. Nói chung, mỗi trang Web đơn lẻ được gửi tới người dùng như một tài liệu ổn định, nhưng thứ tự các trang có thể cung cấp cảm giác trực quan, khi những gì người dùng nhập vào sẽ được trả về thông qua thành phần mẫu Web được nhúng vào trong đánh dấu trang. Trong quá trình giao dịch đó, trình duyệt Web sẽ thông dịch và hiển thị trang, và hoạt động như một người dùng "chung" cho bất kỳ ứng dụng Web nào. Giao diện web đặt ra rất ít giới hạn khả năng người dùng. Thông qua Java, JavaScript, DHTML, Flash và những công nghệ khác, những phương pháp chỉ ứng dụng mới có như vẽ trên màn hình, chơi nhạc, và dùng được bàn phím và chuột tất cả đều có thể thực hiện được. Những kỹ thuật thông thường như kéo thả cũng được hỗ trợ bởi những công nghệ trên. Những nhà phát triển web thường dùng ngôn ngữ kịch bản phía người dùng để thêm hiệu quả các tính năng, đặc biệt là tạo ra một cảm giác giao tiếp trực quan mà không cần phải tải trang lại (điều mà nhiều người dùng cảm thấy ngắt quãng). Vừa rồi, những công nghệ đã được phát triển để phối hợp ngôn ngữ kịch bản phía người dùng với công nghệ phía máy chủ như PHP. Ajax, một kỹ thuật phát triển web sử dụng kết hợp nhiều công nghệ khác nhau, là một ví dụ về công nghệ hiện đang tạo ra ngày càng nhiều trải nghiệm tương tác hơn. Một ưu thế đặc biệt của việc xây dựng ứng dụng Web để hỗ trợ những tính năng chuẩn của trình duyệt đó là chúng sẽ hoạt động như mong muốn bất kể hệ điều hành hay phiên bản hệ điều hành nào được cài trên máy khách cho trước. Thay vì tạo ra những chương trình khách cho MS Windows, Mac OS X, GNU/Linux, và những hệ điều hành khác, ứng dụng có thể được viết chỉ một lần và triển khai mọi nơi. Tuy nhiên, sự hiện thực không được ổn định của HTML, CSS, DOM và những đặc tính trình duyệt khác có thể gây ra rắc rối trong việc phát triển và hỗ trợ ứng dụng web. Thêm vào đó, khả năng cho người dùng điều chỉnh nhiều cài đặt hiển thị cho trình duyệt của họ (như chọn kích thước font, màu sắc, và kiểu chữ, hoặc tắt tính năng script) có thể can thiệp vào sự ổn định của ứng dụng web. Một cách tiếp cận khác (ít phổ biến hơn) là dùng Adobe Flash hoặc Java applet để cung cấp một vài hoặc tất cả các giao diện người dùng. Từ khi phần lớn trình duyệt web hỗ trợ những công nghệ này (thường thông qua plug-in), những ứng dụng dựa trên Flash hay Java có thể được hiện thực và triển khai dễ dàng như nhau. Bởi vì chúng cho phép lập trình viên quản lý chặt hơn giao diện, chúng vượt qua nhiều vấn đề về cấu hình trình duyệt, mặc dù sự không tương thích giữa hiện thực bằng Java hay Flash trên máy khách có thể tạo ra sự phức tạp khác nhau. Vì sự tương tự về kiến trúc với chương trình chủ-khách của chúng, gần với chương trình "dày", đã có sự tranh luận về việc hệ thống đó có được gọi là "ứng dụng Web" hay không; một thuật ngữ khác được đề nghị là "Ứng dụng Internet phong phú". Dù có nhiều biến thể, một ứng dụng Web thông thường được cấu trúc như một ứng dụng ba lớp. Ở dạng phổ biến nhất, một trình duyệt Web là lớp thứ nhất, một bộ máy sử dụng một vài công nghệ nội dung Web động (như ASP, ASP.NET, CGI, ColdFusion, JSP/Java, PHP, Python, hoặc Ruby On Rails) là lớp giữa, và một cơ sở dữ liệu là lớp thứ ba. Trình duyệt sẽ gửi yêu cầu đến lớp giữa, lớp giữa sẽ phục vụ bằng cách tạo ra truy vấn và cập nhật cơ sở dữ liệu và tạo ra giao diện người dùng. Một chiến lược đang xuất hiện cho những công ty phần mềm ứng dụng đó là cung cấp khả năng tiếp cận bằng Web cho phần mềm trước đây được phân phối như các ứng dụng ở máy. Tùy thuộc vào loại ứng dụng, nó có thể cần sự phát triển toàn bộ giao diện dựa trên trình duyệt khác, hoặc chỉ thêm vào một ứng dụng sẵn có để dùng công nghệ trình diễn khác. Những chương trình hiện nay cho phép người dùng trả phí hàng tháng hoặc hàng năm để sử dụng một phần mềm ứng dụng mà không phải cài nó vào ổ cứng. Một công ty đi theo chiến lược này được gọi là nhà cung cấp dịch vụ ứng dụng (application service provider - ASP), và các ASP hiện đang nhận được nhiều sự chú ý trong ngành công nghiệp phần mềm.